Przeglądanie internetu w poszukiwaniu pluginu, który będzie działał na zasadzie głosowania, które po określeniu warunków zmienia nam mapę na kolejną z mapcyklu, okazało się porażką :-(
W potrzebie postanowiłem stworzyć coś samemu, niestety programowanie nie jest moją mocną stroną.
Zamieszczam tutaj moje wypociny, które są połączeniem 2ch pluginów.
Niby wszystko fajnie, plugin kompiluje się, ale nie działa w grze.
Zapewne chodzi tutaj o złe umieszczenie(?) funkcji i warunków. Zrezygnowałem po 2ch godzinach prób i postanowiłem zasięgnąć pomocy specjalistów.
/* Script generated by Pawn Studio */ #include <amxmodx> #include <amxmisc> #define PLUGIN "TimeLimit vote" #define AUTHOR "many" #define VERSION "1.0.0" new choises[3] new rtv[33], howmanyvotes, count, nextmap; new howmanyvotesperc, timevote; public plugin_init() { register_plugin("PLUGIN", "VERSION", "AUTHOR") register_dictionary("common.txt"); register_clcmd("say", "rockthevote"); howmanyvotes = 1; howmanyvotesperc = 30; timevote = 2; } public client_disconnect(id) { if (rtv[id-1] == id) { rtv[id-1] = 0; count--; } } public rockthevote(id, menu, item) { new said[192]; read_args(said, 192); if ((contain(said, "/rockthevote") != -1) || (contain(said, "rockthevote") != -1) || (contain(said, "rtv") != -1)) { if (get_gametime() < (get_pcvar_float(timevote) * 60.0)) client_print(id, print_chat, "Vote is currently not allowed. Wait %d minutes.", (floatround(((get_pcvar_float(timevote) * 60.0) - get_gametime()) / 60.0))); else { if (rtv[id-1] == id) client_print(id, print_chat, "You have already voted!"); else { rtv[id-1] = id; count++; static num; num = get_playersnum(); num = floatround((get_pcvar_float(howmanyvotesperc) * num)); if ((num == count) || (count >= get_pcvar_num(howmanyvotes))) { new menu = menu_create("rZmiana mapy?", "menu_handler") menu_additem(menu, "wTak", "1", 0) menu_additem(menu, "wNie", "2", 0) menu_addblank(menu, 0) menu_setprop(menu, MPROP_EXIT, MEXIT_ALL) new players[32], inum get_players(players, inum, "ch") for(new i = 0; i < inum; i++) { menu_display(players[i], menu, 0) } choises[1] = choises[2] = 0; if (item == MENU_EXIT) { menu_cancel(id) return PLUGIN_HANDLED } new data[6], name[32] new access, callback menu_item_getinfo(menu, item, access, data, 5, _, _, callback) new key = str_to_num(data) get_user_name(id, name, 31) switch (key) { case 1: { client_print (0, print_chat, "[AMXX] %s jest za zmiana mapy.", name); } case 2: { client_print (0, print_chat, "[AMXX] %s nie chce zmiany mapy.", name); } } ++choises[key] menu_cancel(id) return PLUGIN_HANDLED } static name[32]; get_user_name( id, name, charsmax( name ) ); client_print ( 0, print_chat, "%s vote was added. Need %d or %d^%^% to start voting!", name, (get_pcvar_num(howmanyvotes)-count), (floatround(get_pcvar_float(howmanyvotesperc) * 100.00))) } } if(choises[1] > choises[2]) { client_print(0, print_chat, "[AMXX] Zmiana mapy.", choises[1]) server_cmd( "amx_map %s", nextmap ); } else if(choises[2] > choises[1]) { client_print(0, print_chat, "[AMXX] Mapa nie zostanie zmieniona.", choises[2]) } } }
Wartości są przypadkowe jeśli chodzi o czas, ilość graczy potrzebną do rozpoczęcia vota.
Wpisuje w grze rtv, spełniam warunek 1 gracza, lecz nic dalej się nie dzieje.
Proszę o nakierowanie, ewentualnie zmiany w kodzie.
Załączam plugin, który wykorzystałem.
Drugi jest z tego postu: Voting For Timelimit - AMXX.pl: Support AMX Mod X
pozdrawiam i proszę o pomoc
Dodano 21 luty 2011 - 07:27:
podbijam