Доступ к готовым решениям

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

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

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

Мануал Система Администрации

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

Exactly.Rus

Умник
Привет, сейчас я вам покажу как сделать Систему Администрации.
Начнём :)
В enum pInfo:
PHP:
pAdmin,
    pBanned,
    pMuted,
    pMuteTime,
Где регистрация вставляем:
PHP:
ini_setInteger(iniFile, "Admin", 0); //
      ini_setInteger(iniFile, "Banned", 0); //
    ini_setInteger(iniFile, "Muted", 0); //
    ini_setInteger(iniFile, "MuteTime", 0); //
Где логин вставляем:
PHP:
 ini_getInteger(iniFile, "Admin", PlayerInfo[playerid][pAdmin]); // Запишем 
    ini_getInteger(iniFile, "Banned", PlayerInfo[playerid][pBanned]); // Запишем
    ini_getInteger(iniFile, "Mute", PlayerInfo[playerid][pMuted]);
    ini_getInteger(iniFile, "TimeMut", PlayerInfo[playerid][pMuteTime]);
Для сохранение админики, бана и молчанки вставляем в паблик с сохранением:
PHP:
 ini_setInteger(iniFile, "Admin", PlayerInfo[playerid][pAdmin]);
    ini_setInteger(iniFile, "Banned", PlayerInfo[playerid][pBanned]);
    ini_getInteger(iniFile, "Mute", PlayerInfo[playerid][pMuted]);
    ini_getInteger(iniFile, "TimeMut", PlayerInfo[playerid][pMuteTime]);
В public OnPlayerCommandText:
PHP:
  new string[256];
    new giveplayer[MAX_PLAYER_NAME];
    new giveplayerid, idx;
    new cmd[256], tmp[256];
    new sendername[MAX_PLAYER_NAME];
    cmd = strtok(cmdtext, idx);
Затем в этот же паблик:
PHP:
if(strcmp(cmd, "/makeadmin", true) == 0)
        {
                tmp = strtok(cmdtext, idx);
                if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "(( Использование: /makeadmin [ид игрока] [уровень] ))");
                new para1;
                new level;
                para1 = ReturnUser(tmp);
                tmp = strtok(cmdtext, idx);
                level = strval(tmp);
                if(PlayerInfo[playerid][pAdmin] == 3)
                {
                        if(IsPlayerConnected(para1))
                        {
                                if(para1 != INVALID_PLAYER_ID)
                        {
                                        GetPlayerName(para1, giveplayer, sizeof(giveplayer));
                                        GetPlayerName(playerid, sendername, sizeof(sendername));
                                        PlayerInfo[para1][pAdmin] = level;
                                        format(string, sizeof(string), "(( %s выдал вам должность администратора %d уровня ))",sendername,level);
                                        SendClientMessage(para1, COLOR_LIGHTBLUE, string);
                                        format(string, sizeof(string), "(( Вы назначили %s админом уровня %d ))", giveplayer,level);
                                        SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
                                }
                        }
                }
                return 1;
        }
В этот же паблик:
PHP:
if(strcmp(cmd, "/banip", true) == 0)
        {   //без информирования в чат
        if(IsPlayerConnected(playerid))
        {
                tmp = strtok(cmdtext, idx);
                        if(!strlen(tmp))
                        {
                                SendClientMessage(playerid, COLOR_GRAYWHITE, "USAGE: /sban [id игрока/часть никнейма] [причина]");//
                                return 1;
                        }
                        giveplayerid = ReturnUser(tmp);
            if (PlayerInfo[playerid][pAdmin] >= 2)
                        {
                        if(IsPlayerConnected(giveplayerid) && !IsPlayerNPC(giveplayerid))
                        {
                                        format(string, sizeof(string), "AdmCmd: %s был забанен на 3 дня Админом %s's", giveplayerid, sendername);
                                        WriteRusLog("Ban.cfg", string);
                                        new lH, lM, lS; gettime(lH,lM,lS);
                                        format(string, sizeof(string), "[%d:%02d:%02d] %s", lH,lM,lS, string);
                                        SendClientMessageToAll(COLOR_RED, string);
                                        Ban(giveplayerid);
                                        //BanEx(giveplayerid, string);
                                }//not connected
                                else
                                {
                                        format(string, sizeof(string), "   %d is not an active player.", giveplayerid);
                                        SendClientMessage(playerid, COLOR_GREY, string);
                                }
                        }
                        else SendClientMessage(playerid, COLOR_GREY, "   Вы не уполномочены использовать эту команду !");
                }
                return 1;
        }
в этот же паблик:
PHP:
if(strcmp(cmd, "/mute", true) == 0)
        {
                tmp = strtok(cmdtext, idx);
                if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "(( Использование: /mute [ид игрока] [секунды] ))");
                new playa,mtime;
                playa = ReturnUser(tmp);
                if (PlayerInfo[playerid][pAdmin] >= 1)
                {
                if(IsPlayerConnected(playa))
                {
                                if(playa != INVALID_PLAYER_ID)
                        {
                                GetPlayerName(playa, giveplayer, sizeof(giveplayer));
                                        GetPlayerName(playerid, sendername, sizeof(sendername));
                                        if(PlayerInfo[playa][pMuted] == 0)
                                        {
                                        tmp = strtok(cmdtext, idx);
                                        if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "(( Использование: /mute [ид игрока] [секунды] ))");
                                        mtime = strval(tmp);
                                                PlayerInfo[playa][pMuted] = 1;
                                                PlayerInfo[playa][pMuteTime] = mtime;
                                                printf("AdmCmd: %s silenced %s",sendername,  giveplayer);
                                                format(string, sizeof(string), "(( %s получил бан чата от администратора %s ))",giveplayer,sendername);
                                                ABroadCast(COLOR_LIGHTRED,string,1);
                                        }
                                        else
                                        {
                                                PlayerInfo[playa][pMuted] = 0;
                                                PlayerInfo[playa][pMuteTime] = 0;
                                                printf("AdmCmd: %s unsilenced %s",sendername,  giveplayer);
                                                format(string, sizeof(string), "(( %s снят бан чата администратором %s ))",giveplayer ,sendername);
                                                ABroadCast(COLOR_LIGHTRED,string,1);
                                        }
                                }
                        }
                }
        }
в этот же паблик
PHP:
if(strcmp(cmd, "/ban", true) == 0)
        {
                tmp = strtok(cmdtext, idx);
                if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "(( Введите: /ban [ID] [причина] ))");
                giveplayerid = ReturnUser(tmp);
                if (PlayerInfo[playerid][pAdmin] >= 2)
                {
                if(PlayerInfo[playerid][pAdmin] < PlayerInfo[giveplayerid][pAdmin]) return SendClientMessage(playerid,COLOR_GREY,"(( Нельзя забанить Администратора, каторый старше вас! ))");
                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)) return SendClientMessage(playerid, COLOR_GRAD2, "(( Используй: /ban [ID] [причина] ))");
                                        new year, month,day;
                                        getdate(year, month, day);
                                        new hour,minuite,second;
                                        gettime(hour, minuite, second);
                                        format(string, sizeof(string), "(( %s забанен администратором %s. Причина: %s (%d:%d:%d %d.%d.%d) ))", giveplayer, sendername, (result),hour,minuite,second,month,day,year);
                                        SendClientMessageToAll(COLOR_LIGHTRED, string);
                                        WriteRusLog("Ban.cfg", string);
                                        PlayerInfo[giveplayerid][pBanned] = 1;
                                        Kick(giveplayerid);
                                        return 1;
                                }
                        }//not connected
                        else
                        {
                                format(string, sizeof(string), "(( %d не в сети ))", giveplayerid);
                                SendClientMessage(playerid, COLOR_GRAD1, string);
                        }
                }
                return 1;
        }
Делаем Админ-Чат. К форвардам:
PHP:
forward SendAdminMessage(color, string[]);
в public OnPlayerCommandText:
PHP:
if(strcmp(cmd, "/admin", true) == 0 || strcmp(cmd, "/a", true) == 0)
        {
                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)) return SendClientMessage(playerid, COLOR_WHITE, "(( Использование: (/a)dmin [сообщение] ))");
                format(string, sizeof(string), "(( {ff0000}%d {ffffff}| {33AA33}Администратор %s[ИД:%d]: %s ))",PlayerInfo[playerid][pAdmin],sendername,playerid, result);
                if (PlayerInfo[playerid][pAdmin] >= 1)
                {
                        SendAdminMessage(COLOR_WHITE, string);
                }
                return 1;
        }
Сделаем паблик Админ-Чата(можно в конец мода!):
PHP:
public SendAdminMessage(color, string[])
{
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
                if(IsPlayerConnected(i))
                {
                if(PlayerInfo[i][pAdmin] >= 1)
                {
                                SendClientMessage(i, color, string);
                        }
                }
        }
}
На это всё. Всем спасибо , всем пока.
Автор: h4pok
P.S Данной темы на портале обнаружено: НЕ БЫЛО.
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу