Cуть данной системы - возможность кикнуть игрока при отсутствии администраторов/модераторов.
Для кика необходимо собрать 10 голосов.
Ко всем new:
new votekick[MAX_PLAYERS];
new gVotek[MAX_PLAYERS][MAX_PLAYERS];
В public OnPlayerConnect:
votekick[playerid] = 0;
В public OnPlayerCommandText:
if(strcmp(cmd, "/votekick", true) == 0)
{
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i))
{ //если игрок подключен
if(PlayerInfo[playerid][pAdmin] => 0) return SendClientMessage(playerid,COLOR_RED,"Нельзя кикать администратора!");
}
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,COLOR_WHITE, "/votekick [id] [причина]");
return true;
}
giveplayerid = ReturnUser(tmp);
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(gVotek[playerid][giveplayerid] == 1)
{
format(string, sizeof(string), "Ты уже голосовал за этого игрока. Всего голосов за него %d.",votekick[giveplayerid]);
SendClientMessage(playerid,COLOR_WHITE,string);
return true;
}
if(giveplayerid == playerid) return SendClientMessage(playerid,COLOR_LIGHTGREEN,"Вы не можете голосовать за самого себя!");
GetPlayerName(playerid, name, sizeof(name));
GetPlayerName(giveplayerid, pname, sizeof(pname));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[128];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
gVotek[playerid][giveplayerid] = 1;
votekick[giveplayerid]++;
format(string, sizeof(string), "%d/7: {00ff00}%s {FFFFFF}проголосовал(а) за кик {00ff00}%s [id: %d]. {FFFFFF}Причина: {FF0000}%s ",votekick[giveplayerid],name,pname,playerid,(result));
SendClientMessageToAll(COLOR_WHITE, string);
if(votekick[giveplayerid] >= 10)
{ //если проголосовало больше половины игроков
format(string, sizeof(string), "{00ff00}%s {FFFFFF}был(а) кикнут(а), Причина: {00ff00}%s",pname, (result));
new lH, lM, lS; gettime(lH,lM,lS);
format(string, sizeof(string), "[%d:%02d:%02d] %s", lH,lM,lS, string);
SendClientMessageToAll(COLOR_PINK,string);
for(new i=0; i<GetMaxPlayers(); i++)
{
gVotek[giveplayerid] = 0;
votekick[giveplayerid] = 0;
}
Kick(giveplayerid);
}
}
}
else SendClientMessage(playerid, COLOR_GREY, " Этого игрока нету на сервере !");
return true;
}
Автор: неизвестен
Для кика необходимо собрать 10 голосов.
Ко всем new:
new votekick[MAX_PLAYERS];
new gVotek[MAX_PLAYERS][MAX_PLAYERS];
В public OnPlayerConnect:
votekick[playerid] = 0;
В public OnPlayerCommandText:
if(strcmp(cmd, "/votekick", true) == 0)
{
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i))
{ //если игрок подключен
if(PlayerInfo[playerid][pAdmin] => 0) return SendClientMessage(playerid,COLOR_RED,"Нельзя кикать администратора!");
}
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,COLOR_WHITE, "/votekick [id] [причина]");
return true;
}
giveplayerid = ReturnUser(tmp);
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(gVotek[playerid][giveplayerid] == 1)
{
format(string, sizeof(string), "Ты уже голосовал за этого игрока. Всего голосов за него %d.",votekick[giveplayerid]);
SendClientMessage(playerid,COLOR_WHITE,string);
return true;
}
if(giveplayerid == playerid) return SendClientMessage(playerid,COLOR_LIGHTGREEN,"Вы не можете голосовать за самого себя!");
GetPlayerName(playerid, name, sizeof(name));
GetPlayerName(giveplayerid, pname, sizeof(pname));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[128];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
gVotek[playerid][giveplayerid] = 1;
votekick[giveplayerid]++;
format(string, sizeof(string), "%d/7: {00ff00}%s {FFFFFF}проголосовал(а) за кик {00ff00}%s [id: %d]. {FFFFFF}Причина: {FF0000}%s ",votekick[giveplayerid],name,pname,playerid,(result));
SendClientMessageToAll(COLOR_WHITE, string);
if(votekick[giveplayerid] >= 10)
{ //если проголосовало больше половины игроков
format(string, sizeof(string), "{00ff00}%s {FFFFFF}был(а) кикнут(а), Причина: {00ff00}%s",pname, (result));
new lH, lM, lS; gettime(lH,lM,lS);
format(string, sizeof(string), "[%d:%02d:%02d] %s", lH,lM,lS, string);
SendClientMessageToAll(COLOR_PINK,string);
for(new i=0; i<GetMaxPlayers(); i++)
{
gVotek[giveplayerid] = 0;
votekick[giveplayerid] = 0;
}
Kick(giveplayerid);
}
}
}
else SendClientMessage(playerid, COLOR_GREY, " Этого игрока нету на сервере !");
return true;
}
Автор: неизвестен
Последнее редактирование модератором: