Primo
типа серьёзный тип
- Сообщения
- 1,532
- Реакции
- 759
В общем, есть такая проблема. Пишу voteban \ votekick для своих нужд. Возникла проблема, причину которой я не вижу. Первое голосование за бан проходит удачно, бан даётся на 15 минут, однако следующее даётся навсегда.
P.S. это сухой грубый код, на штрихи, вроде if\else if прошу не обращать внимание. Мне нужна помощь по теме, а не по оптимизации.
P.S. это сухой грубый код, на штрихи, вроде if\else if прошу не обращать внимание. Мне нужна помощь по теме, а не по оптимизации.
PHP:
ShowVoteBanMenu(client)
{
new Handle:menu = CreateMenu(Select_VBanMenu);
SetMenuTitle(menu, "Выберите Игрока:\n \n");
decl String:userid[15], String:name[32];
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i))
{
IntToString(GetClientUserId(i), userid, 15);
GetClientName(i, name, 32);
AddMenuItem(menu, userid, name);
}
}
DisplayMenu(menu, client, 0);
}
public Select_VBanMenu(Handle:menu, MenuAction:action, client, option)
{
if (action == MenuAction_End)
{
CloseHandle(menu);
return;
}
if (action != MenuAction_Select) return;
decl String:userid[15];
GetMenuItem(menu, option, userid, 15);
new target = GetClientOfUserId(StringToInt(userid));
if (target > 0)
{
new String:NameV[200];
GetClientName(client, NameV, sizeof(NameV));
new String:NameB[200];
GetClientName(target, NameB, sizeof(NameB));
PrintToChatAll(" \x05%s\x01 начал голосование за изгнание игрока\x07 %s\x01. Голосование будет завершено через\x04 15сек.", NameV, NameB);
Voted = target;
CreateTimer(15.0, TimerVoteBan);
for(new i=1; i<=GetMaxClients(); i++) DisplayPVoteBanMenu(i)
}
else
{
PrintToChat(client, "Игрок не найден");
}
}
DisplayPVoteBanMenu(client)
{
new Handle:menu = CreateMenu(Select_PVMenu);
new String:NameB[200];
GetClientName(Voted, NameB, sizeof(NameB));
if(VoteStatus == 1) SetMenuTitle(menu, "Бан %s:\n \n", NameB);
if(VoteStatus == 2) SetMenuTitle(menu, "Кик %s:\n \n", NameB);
new String:Text[255];
Format(Text, sizeof(Text), "Нет");
AddMenuItem(menu, "", Text);
Format(Text, sizeof(Text), "Да");
AddMenuItem(menu, "", Text);
DisplayMenu(menu, client, 0);
}
public Select_PVMenu(Handle:menu, MenuAction:action, client, option)
{
if (action == MenuAction_End)
{
CloseHandle(menu);
return;
}
if (action != MenuAction_Select) return;
switch(option)
{
case 0:
{
new String:NameB[200];
GetClientName(client, NameB, sizeof(NameB));
PrintToChatAll("%s против", NameB);
VoteCount--;
}
case 1:
{
new String:NameB[200];
GetClientName(client, NameB, sizeof(NameB));
PrintToChatAll("%s за", NameB);
VoteCount++;
}
}
PrintToChatAll("Всего набрано %d голосов", VoteCount);
//if (action == MenuAction_Select) CloseHandle(menu);
}
public Action:TimerVoteBan(Handle:timer)
{
if(VoteCount >= 3)
{
new String:NameB[200];
GetClientName(Voted, NameB, sizeof(NameB));
if(VoteStatus == 1) ServerCommand("sm_ban %s 15 votedoff", NameB);
if(VoteStatus == 2) ServerCommand("sm_kick %s", NameB);
}
VoteStatus = -1;
}