Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

система модераторов

Статус
В этой теме нельзя размещать новые ответы.

Crazy_M_Fix

Умник
Здравствуйте, ув пользователи Pawno-Info.ru! С вами я, mxCrazy. Сегодня, мы создадим систему модераторов для сервера samp. Для начала, добавим ко всем форвардам

PHP:
forward SendModerMessage(color, string[]);
Ко всем new, добавим

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;
	}

На этом все. Если будут ошибки при комплияции, пишите, разберемся. :) Удачного Вам дня!
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу