Привет, буду благодарен, если поможете изменить функцию плагина.
В данном виде, при вызове игроком Меню, оно появляется у всех и идёт выбор большинством голосов за определенный его пункт.
А мне хотелось бы, чтобы при вызове Меню игроков, оно появлялось только у него, и далее при выборе им определенного пункта, он уже выставлялся бы на голосование всем остальным.
В данном виде, при вызове игроком Меню, оно появляется у всех и идёт выбор большинством голосов за определенный его пункт.
А мне хотелось бы, чтобы при вызове Меню игроков, оно появлялось только у него, и далее при выборе им определенного пункта, он уже выставлялся бы на голосование всем остальным.
...:
#define CHAT_FORMAT "\x01","\x04","[GameConfig]","\x01","\x03","\x01","\x05","\x01"
#define CONF_PATH "sourcemod/vote_game_config"
#define MENU_ITEM 10
new const String:sAudio[][] = {"ambient/misc/metal6.wav", "buttons/blip2.wav", "physics/glass/glass_cup_break2.wav"};
new Float:fCT, Float:fVE, iC[MAXPLAYERS+1], iSR, iV[MENU_ITEM+1], iVR;
public OnPluginStart()
{
LoadTranslations("VoteGameConfiguration.phrases");
decl Handle:c;
HookConVarChange(c=CreateConVar("votegameconfig_elect", "60.0", "The duration of electing voting (seconds).\n0 - disable.",_, true,0.0), VE);
fVE = GetConVarFloat(c);
HookConVarChange(c=CreateConVar("votegameconfig_round", "0", "Round of voting:\n0 - begining maps; -X - only a specified, X - every."), VR);
if(fVE) VR(c, "","");
AutoExecConfig(_, "VoteGameConfiguration", CONF_PATH);
RegAdminCmd("sm_VGC", GC, ADMFLAG_CONFIG, "To start voting.");
RegConsoleCmd("sm_vgc_info", PI, "Information a status.");
RegConsoleCmd("sm_votegame", PV, "Open voting menu.");
}
public OnAutoConfigsBuffered() if(fVE)
{
if(iVR==0) VCE();
iSR = 0;
new i=sizeof(sAudio)-1;
do PrecacheSound(sAudio[i]);
while(i--);
}
public OnMapEnd() if(fCT)
{
UnhookEvent("player_spawn", PS);
fCT = 0.0;
}
public OnClientDisconnect_Post(C) if(iC[C])
{
--iV[iC[C]];
iC[C] = 0;
}
public VE(Handle:C, String:O[], String:N[]) if((fVE=GetConVarFloat(C))==0.0) VR(C, O,N);
public VR(Handle:C, String:O[], String:N[])
{
if(iVR) UnhookEvent("round_end", (iSR=0)<iVR ? RE:RO, EventHookMode_PostNoCopy);
if((iVR=GetConVarInt(C))) HookEvent("round_end", 0<iVR ? RE:RO, EventHookMode_PostNoCopy);
}
public PS(Handle:E, String:N[], bool:B) MVC(GetClientOfUserId(GetEventInt(E,"userid")));
public RE(Handle:E, String:N[], bool:B) if(++iSR==iVR)
{
if(fCT==0.0) VCE();
iSR = 0;
}
public RO(Handle:E, String:N[], bool:B) if(--iSR==iVR) if(fCT==0.0) VCE();
public VC(Handle:P, MenuAction:A, C, O) if(A==MenuAction_Select)
{
++iV[iC[iV[0]=C]=O];
EmitSound(iV,1, sAudio[1]);
}
public Action:EV(Handle:T)
{
new i=MaxClients;
do if(IsClientInGame(i)) if(IsFakeClient(i)==false) break;
while(--i);
decl String:f[9]="Config";
if(i)
{
new n=MENU_ITEM, a, v;
if(iV[0])
{
decl e;
do
{
if(iV[n]>v) v = iV[e=n];
a+= iV[n];
iV[n] = 0;
}while(--n);
if(v)
{
IntToString(e, f[6],3);
fCT = float(v*100)/a;
}
}decl String:b[193], String:t[96], c[i];
n = 0;
do if(IsClientInGame(i))
{
if(a)
{
FormatEx(t,sizeof(t), "%T", f,i);
FormatEx(b,sizeof(b), "%T", "Decision Voters",i, CHAT_FORMAT,t);
ReplaceString(b,2, "#","\x07");
PrintToChat(i, b);
FormatEx(b,sizeof(b), "%T", "Votes",i, CHAT_FORMAT,fCT,v,a);
}else FormatEx(b,sizeof(b), "%T", "No Votes",i, CHAT_FORMAT);
ReplaceString(b,2, "#","\x07");
PrintToChat(c[n++]=i, b);
iC[i] = 0;
}while(--i);
EmitSound(c,n, sAudio[0], _,_, SNDLEVEL_TRAIN);
}else f = "Config0";
ServerCommand("exec %s/%s.txt", CONF_PATH,f);
OnMapEnd();
iV[0] = 0;
}
public Action:GC(C, A)
{
if(fCT) ReplyToCommand(C, "%t", "Already Vote", CHAT_FORMAT);
else
{
VCE();
C = MaxClients;
do if(IsClientInGame(C)) MVC(C);
while(--C);
}return Plugin_Handled;
}
public Action:PI(C, A)
{
if(A==MENU_ITEM)
{
decl String:n[24], String:v[6];
GetPluginInfo(INVALID_HANDLE,PlInfo_Name, n,sizeof(n));
GetPluginInfo(INVALID_HANDLE,PlInfo_Version, v,sizeof(v));
ReplyToCommand(C, "\x01\04%s \x05v%s\x01: \x03%s", n,v,fCT ? "Performed":fVE ? "ON":"Off");
}ReplyToCommand(C, "%t", "Info Settings", CHAT_FORMAT,fVE,iVR,iSR);
return Plugin_Handled;
}
public Action:PV(C, A)
{
MVC(C);
return Plugin_Handled;
}
MVC(C) if(iC[C]==0)
{
decl s;
if(0 <(s=RoundToZero(fCT-GetTickedTime())))
{
decl String:t[200], String:f[9]="Config", Handle:p;
FormatEx(t,sizeof(t), "%T", "Scenario",C);
SetPanelTitle(p=CreatePanel(), t);
new i;
do{
IntToString(++i, f[6],3);
if(FormatEx(t,sizeof(t),"%T",f,C))
{
SetPanelCurrentKey(p, i);
DrawPanelItem(p, t);
}
}while(i<MENU_ITEM);
if(FormatEx(t,sizeof(t), "%T", "Scenario Text",C)) DrawPanelText(p, t);
SendPanelToClient(p, iC[0]=C, VC, s);
CloseHandle(p);
EmitSound(iC,1, sAudio[2]);
}
}
VCE()
{
HookEvent("player_spawn", PS);
CreateTimer(fVE, EV, _, TIMER_FLAG_NO_MAPCHANGE);
fCT = GetTickedTime()+fVE-1.0;