shape1
shape2
shape3
shape4
shape7
shape8

Голосование за кик


Статус
Закрыто для дальнейших ответов.

Kostyaev

Магистр
Пользователь
19.07.2014
1 123
274
0
26
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;
}

Автор: неизвестен

 
Последнее редактирование модератором:

Pawno

Новичок
Пользователь
19.02.2015
41
2
0
26
Круто. возьму себе. 

 

Rwmont2000

Новичок
Пользователь
18.12.2014
304
14
0
23
Лучше бы как в Контр-Страйк. Сколько человек на сервере, столько нужно голосов или -2 от всех человек.

 

LHTTD

Темная сторона Форума
Пользователь
08.10.2014
325
43
0
Проверка на половину игроков как-то не правильно стоит,для этого надо переменную взять и при коннекте игрока ее прибавлять и в комманде ставить проверку с этой переменной/2,так луче будет,а для ДМ норм )

 
Статус
Закрыто для дальнейших ответов.