Crazy_M_Fix
Умник
Здравствуйте, ув пользователи Pawno-Info.ru! С вами я, mxCrazy. Сегодня, мы создадим систему модераторов для сервера samp. Для начала, добавим ко всем форвардам
Ко всем new, добавим
Ко всем переменных, добавим:
в
добавим
Ко всем командам, добавим
На этом все. Если будут ошибки при комплияции, пишите, разберемся.
Удачного Вам дня!
PHP:
forward SendModerMessage(color, string[]);
PHP:
new ModerDuty[MAX_PLAYERS];
PHP:
pModer,
PHP:
public OnPlayerConnect(playerid)
PHP:
PlayerInfo[playerid][pModer] = 0;
PHP:
// Команда для выхода на дежурство модерам
if(strcmp(cmdtext, "/mduty", true) == 0 || strcmp(cmdtext, "/moderduty", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid] == 0)
{
SendClientMessage(playerid, COLOR_GREY, "Вы не авторизированы");
return 1;
}
if(PlayerInfo[playerid][pModer] >= 1)
{
if(ModerDuty[playerid] == 0)
{
ModerDuty[playerid] = 1;
GetPlayerName(playerid, sendername, sizeof(sendername));
return 1;
}
else if(ModerDuty[playerid] == 1)
{
ModerDuty[playerid] = 0;
GetPlayerName(playerid, sendername, sizeof(sendername));
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, "У вас нет прав на использование данной команды.");
return 1;
}
}
}
// Команда для вопроса
if(strcmp(cmd, "/vopros", true) == 0 || strcmp(cmd, "/answer", true) == 0)
{
if(IsPlayerConnected(playerid))
{
GetPlayerName(playerid, sendername, sizeof(sendername));
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;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_GRAD2, "Введите: /vopros [text]");
return 1;
}
if(ModerDuty[playerid] == 1)
{
format(string, sizeof(string), "Вопрос от %s[%d]: %s", sendername, playerid, (result));
SendModerMessage(0x10F441AA, string);
}
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ваш вопрос отправлен модераторам");
format(string, sizeof(string), "Вопрос от %s[%d]: %s", sendername, playerid, (result));
SendClientMessage(playerid, COLOR_LIGHTRED, string);
}
return 1;
}
// чат модераторов
if(strcmp(cmd, "/mc", true) == 0 || strcmp(cmd, "/mchat", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if (PlayerInfo[playerid][pModer] >= 1)
{
GetPlayerName(playerid, sendername, sizeof(sendername));
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;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_GRAD2, "Введите: (/mc)hat [Текст в чат]");
return 1;
}
format(string, sizeof(string), "* [M] %s: %s", PlayerInfo[playerid][pModer], sendername, result);
SendModerMessage(COLOR_GREEN, string);
printf("Модератор %s: %s", sendername, result);
}
}
}
// команда для выдачи модерки
if(strcmp(cmd, "/makemoder", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Введите: /makemoder [id] [level 1-3]");
return 1;
}
new para1;
new level;
para1 = ReturnUser(tmp);
tmp = strtok(cmdtext, idx);
level = strval(tmp);
if(PlayerInfo[playerid][pAdmin] >= 5)
if(PlayerInfo[playerid][pModer] >= 3)
{
if(IsPlayerConnected(para1))
{
if(para1 != INVALID_PLAYER_ID)
{
GetPlayerName(para1, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
PlayerInfo[para1][pModer] = level;
if(level < 0 || level > 3) return SendClientMessage(playerid, COLOR_GREY, "Не меньше 0 и не больше 3.");
format(string, sizeof(string), "Вы были назначены модератором сервера на %d ранг . ", level, sendername);
SendClientMessage(para1, COLOR_GREEN, string);
format(string, sizeof(string), "Вы назначили %s модератором %d уровня.", giveplayer,level);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "Вы не уполномочены использовать эту команду");
}
}
}
// модераторы онлайн
else if (strcmp(cmd, "/monline", true) == 0)
{
SendClientMessage(playerid, COLOR_YELLOW, "~~~ Модераторы ~~~ :");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pModer] >= 1)
{
new drank[20];
if(PlayerInfo[i][pModer] == 1) { drank = "модератор 1 уровня"; }
else if(PlayerInfo[i][pModer] == 2) { drank = "модератор 2 уровня"; }
else if(PlayerInfo[i][pModer] == 3) { drank = "ст. Модератор"; }
GetPlayerName(i, sendername, sizeof(sendername));
format(string, 256, "%s | ID:%d | %s",sendername,i,drank);
SendClientMessage(playerid, COLOR_WHITE, string);
}
}
}
}
// Команда для ответа
if(strcmp(cmd, "/otvet", true) == 0 || strcmp(cmd, "/ot", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pModer] >= 1)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "{ffffff}Введите: /otvet [id] [текст]");
return 1;
}
if(ModerDuty[playerid] == 1)
{
giveplayerid = ReturnUser(tmp);
if (IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
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;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_GRAD2, "{ffffff}Введите: /otvet [id] [текст]");
return 1;
}
format(string, sizeof(string), " %s: %s", sendername, (result));
SendClientMessage(giveplayerid, COLOR_LIGHTRED, string);
format(string, sizeof(string), " %s ответил на вопрос %s[%d]: %s", sendername, giveplayer, giveplayerid,(result));
SendHelperMessage(COLOR_LIGHTRED, string);
return 1;
}
}
else
{
format(string, sizeof(string), "%d не в сети.", giveplayerid);
SendClientMessage(playerid, COLOR_GRAD1, string);
}
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "Вы не на дежурстве.");
}
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "Нет прав на использование данной команды.");
}
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "Вы не авторизированы.");
}
}
//кик от лица модератора
if(strcmp(cmd, "/mkick", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, " * Использование: /mkick [playerid/PartOfName] [причина]");
return 1;
}
giveplayerid = ReturnUser(tmp);
if (PlayerInfo[playerid][pModer] >= 2)
{
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
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;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_GRAD2, " * Использование: /mkick [playerid/PartOfName] [reason]");
return 1;
}
new year, month,day;
getdate(year, month, day);
format(string, sizeof(string), " %s был кикнут модератором %s, причина: %s.", giveplayer, sendername, (result));
SendClientMessageToAll(COLOR_LIGHTRED, string);
Kick(giveplayerid);
return 1;
}
}
}
else
{
format(string, sizeof(string), " * %d не активный игрок.", giveplayerid);
SendClientMessage(playerid, COLOR_GRAD1, string);
}
}
return 1;
}
На этом все. Если будут ошибки при комплияции, пишите, разберемся.
Последнее редактирование:
