Vadik3113
Новичок
Всем привет, уважаемые форумчани. Сегодня решил выложить систему выговоров для администрации.
Система работает по тому же принципу что и на многих нубо-рп серверах (3 выговора снятие и т.д.)
Система написана мной. Она не является оптимизированной, с использование include mxINI. Первая команда не судите строго :ah:. Так же некоторые дефайны по типу цвета или SendMe - их использую лично я , вы же можите заменить их на стандартные функции по типу SendClientMessage
В начало, ко всем инклудам:
К define
В enum Pinfo (у всех по разному) закиньте это
Далее в public OnPlayerCommandText
Чуть выше были показаны некоторые стоки (И не только), их я выложу строкой ниже
Далее команда /aunwarn (без пояснений, устал честно говоря)
Вроде все. Если что-то забыл пишите в тему, если есть ошибку пишите в тему, отвечу по возможности. Буду рад объективной критике. Напоминаю код не оптимизирован, так что по поводу этого писать не надо.
Система работает по тому же принципу что и на многих нубо-рп серверах (3 выговора снятие и т.д.)
Система написана мной. Она не является оптимизированной, с использование include mxINI. Первая команда не судите строго :ah:. Так же некоторые дефайны по типу цвета или SendMe - их использую лично я , вы же можите заменить их на стандартные функции по типу SendClientMessage
В начало, ко всем инклудам:
PHP:
#include <mxINI>
PHP:
#define SendMe SendClientMessage // Не обязательно, но тогда придется взамен SendMe писать SendClientMessage
PHP:
pAwarns, // Если не самая последняя строка, то запятая нужна
PHP:
else if(strcmp(cmd, "/awarn", true) == 0)
{
if(PINFO[playerid][pAdminLVL] < 6) return SendMe(playerid, CWHITE, "Ваш уровень администрирования слишком низок");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendMe(playerid, 0x00D900C8, "- Используйте:{FFFFFF} /awarn [ID] [причина]");// Если нужно допишите сюда свои проверки
giveplayerid = ReturnUser(tmp);
if (!IsPlayerConnected(giveplayerid)) return SendMe(playerid, CWHITE, "Игрок не в сети");
if (PINFO[giveplayerid][pAdminLVL] == 6) return SendMe(playerid, CRED, "Нельзя дать выговор администратору 6-го уровня");
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS; // Стандартный strtock
if(!strlen(result)) return SendMe(playerid, 0x00D900C8, "- Используйте:{FFFFFF} /awarn [ID] [причина]");
if(PINFO[giveplayerid][pAdminLVL] == 0) return SendMe(playerid, CRED, "Игрок не является администратором!");
if(giveplayerid == playerid) return SendMe(playerid, CRED, "Вы указали свой ID");
PINFO[giveplayerid][pAwarns] += 1;// Прибавляем к выговором 1
if(PINFO[giveplayerid][pAwarns] >= 3)// Если это был третий выговор снимаем администратора, при необходимость удалите скобки и проверку
{
format(string, sizeof(string), " {F81414}%s дал выговор [3/3] экс-администратору %s, тем самым сняв его с поста, Причина: %s"",GN(playerid),GN(giveplayerid), (result));// GN это GetName, экс-администратору чисто мой прикол, оставлю :)
AdminMessege(CRED,string,1);// Отправляем сообщение администраторам
PINFO[giveplayerid][pAdminLVL] = 0;// Снимаем с поста
PINFO[giveplayerid][pAwarns] = 0;// Выставляем выговоры на ноль, если игрока сново поставят, а у него будет 3/3 эт не очень
return true;
}// Далее идет, если игрок получил первый или второй выговор
format(string, sizeof(string), "{F81414}%s Дал выговор %s [Выговоры %d/3]Причина:%s. ",GN(playerid),GN(giveplayerid),PINFO[giveplayerid][pAwarns], (result));
AdminMessege(CRED, string,1);// Сообщение в админ чат
return true;
SavePlayer(giveplayerid);// SavePlayer - сохранения игрока (этот сток не кидаю)
}
PHP:
#define GN(%1) PINFO[%1][pNamePlayer] // можно заменить на PINFO[playerid][pNAME] (эт как у вас)
stock AdminMessege(color,const string[],level)
{
foreach (Player, i)
{
if (PINFO[i][pAdminLVL] > level)
{
SendMe(i, color, string);
}
}
return true;
}
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
} // Так же для работы в начало OnPlayerCommandText надо закинуть это:
new cmd[256];
new tmp[256];
new idx;
cmd = strtok(cmdtext, idx);
PHP:
else if(strcmp(cmd, "/aunwarn", true) == 0)
{
if(PINFO[playerid][pAdminLVL] < 6) return SendMe(playerid, CWHITE, "Ваш уровень администрирования слишком низок");
tmp = strtok(cmdtext, idx);
giveplayerid = ReturnUser(tmp);
if(!strlen(tmp)) return SendMe(playerid, 0x00D900C8, "- Используйте:{FFFFFF} /aunwarn [ID]");
if(PINFO[giveplayerid][pAdminLVL] == 0) return SendMe(playerid, 0x00D900C8, "Игрок не администратор!");
if(PINFO[giveplayerid][pAwarns] == 0) return SendMe(playerid, 0x00D900C8, "У администратора нет выговоров!");
new sstring[300];
new adminstring[200];
PINFO[giveplayerid][pAwarns] = PINFO[giveplayerid][pAwarns] - 1;
format(adminstring, sizeof(adminstring), "{F3FF02}[AUNWARN]{F81414} %s Снял выговор с %s [выговоры {B7FF00}%d/3{F81414}]", GN(playerid), GN(giveplayerid), PINFO[giveplayerid][pAwarns]);
AdminMessege(CBLUEE,adminstring,1);
SavePlayer(giveplayerid);
}
