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


Dodatki SourceMod




Moja zawartość
Mężczyzna