Sign in to follow this  
Followers 0
Santa_Claus

Админ-бот v2

2 posts in this topic

Здравствуйте, взял и доработал вот - ниже.
 
Преимущества:


*Простота в использовании
*При отправке запроса, проверяется на наличие всех аргументов.
*Возможность отправлять до 8 запросов (опционально)
*Возможность открывать список запросов
*Возможность просматривать информацию о запросе/отклонить/принять прямо из списка
*При выходе админа, который отправил запрос или наказуемого - запрос автоматически удаляется

- Нам потребуется Pawn.CMD, sscanf2


Скрины: https://imgur.com/a/mCd67KF
GitHub: https://github.com/execution-lab/adminbot-include

 

Автор: execution

Доработка: Santa Claus

 

Ко всем константам

#define MAX_PLAYER_LISTITEM                    25             // Количество принимаемых listitem

#define    MAX_ADMIN_BOT_REQUEST                 3            // Максимальное количество принимаемых команд для запроса
#define    MAX_ADMIN_BOT_REQUEST_LENGTH        8            // Максимальная длина команды для запроса
#define    MAX_ADMIN_BOT_SUPPORT_COUNT            8            // Максимальное количество запросов
#define MIN_ADMIN_BOT_SUPPORT_COUNT            0            // Минимальное количество запросов
#define    MAX_ADMIN_BOT_PUNISH_REASON            50          // Максимальная длина причины в запросе
#define MAX_ADMIN_BOT_PUNISN_NAME_LENGTH    24            // Максимальная длина названия вида наказания
#define ADMIN_BOT_INVALID_REQUEST_ID        MAX_ADMIN_BOT_SUPPORT_COUNT + 1        // Недействительный ID запроса
#define ADMIN_BOT_HEX_COLOR                    0xFF6347FF     // Цвета сообщения админ-бота


enum // Константы ID диалогов
{
    dAbotreqinfo,
    dAbotreqmenu,
    dAbotreqlist
}

enum // Константы ошибок при проверке запроса
{
    CA_REQUEST_NOT_FOUND,
    CA_REQUEST_FOUND,
    CA_NO_PLACE_IN_REQUEST,
    CA_MISSING_ARGUMENT,
    CA_INVALID_TARGET_ID
}

enum e_ADMIN_BOT_INFO 
{
    aBot_punish_type,
    aBot_punish_time,
    aBot_punish_reason[MAX_ADMIN_BOT_PUNISH_REASON + 1],
    aBot_targetid,
    aBot_adminid,
    aBot_unix_time
} 

 

 

Ко всем глобал. переменным

new
    AdminBotInfo[MAX_ADMIN_BOT_SUPPORT_COUNT][e_ADMIN_BOT_INFO], // Информация запросов
    PlayerListitem[MAX_PLAYERS][MAX_PLAYER_LISTITEM] // Хранение записанных значений
;

new
    const ADMIN_BOT_PUNISH_NAME[MAX_ADMIN_BOT_REQUEST][MAX_ADMIN_BOT_PUNISN_NAME_LENGTH + 1] = // Название всех видов наказаний
    {
        "Заглушить",
        "Посадить в админ. тюрьму",
        "Посадить в тюрьму"
    };

new
    const ADMIN_BOT_SUPPORT_COMMAND[MAX_ADMIN_BOT_REQUEST][MAX_ADMIN_BOT_REQUEST_LENGTH] = // Название команд всех видов наказаний
    {  
        "/mute", 
        "/prison", 
        "/jail"
    };

new
    const ADMIN_BOT_LEVEL_USING_CMD[MAX_ADMIN_BOT_REQUEST] =  // Уровень возможности опирировать со всеми видами наказаний
    {
        3,
        3,
        3
    };
    
new
    gADMIN_BOT_SUPPORT_TOTAL_COUNT = 0, // Переменная записывающая количество запросов
    pAdminChoseRequest[MAX_PLAYERS char] // Массив хранения ID выбранного запроса
; 

 

 

Ко всем stock

/*
Функция:
    ShowPlayerAdminBotRequestInfo
Аргументы:
    playerid - ID игрока, которому показываем
Вернёт:
    1 - Показан успешно
    0 - Не удалось показать
Заметки:
    Показываем информацию о запросе выбранного из списка.
*/

stock ShowPlayerAdminBotRequestInfo(playerid)
{
    if(pAdminChoseRequest{playerid} == ADMIN_BOT_INVALID_REQUEST_ID)
        return 0;

    new
        count = pAdminChoseRequest{playerid},
        string[MAX_CHATBUBBLE_LEGNTH + 1]
    ;
    
    
    format(string, sizeof string, "\n\
        {C0F08E}Запросил: {FFFFFF}%s\n\
        {ED8473}Наказать: {FFFFFF}%s\n\n\
        Тип: %s\n\
        Время: %d мин\n\
        Причина: %s\n\n\n\
        %s",
        PlayerName(AdminBotInfo[count][aBot_adminid]),
        PlayerName(AdminBotInfo[count][aBot_targetid]),
        ADMIN_BOT_PUNISH_NAME[AdminBotInfo[count][aBot_punish_type]],
        AdminBotInfo[count][aBot_punish_time],
        AdminBotInfo[count][aBot_punish_reason],
        ADMIN_BOT_LEVEL_USING_CMD[AdminBotInfo[count][aBot_punish_type]] > AdminLevel(playerid) 
        ? ("{AFAFAF}Вы не можете принять запрос") : ("{E2BE1D}Вы можете принять запрос")
    );

    return ShowPlayerDialog(
        playerid,
        dAbotreqinfo,
        DIALOG_STYLE_MSGBOX,
        !" ",
        string,
        !"Хорошо", !""
    );
}

/*
Функция:
    ShowPlayerAdminBotRequestMenu
Аргументы:
    playerid - ID игрока, которому показываем
Вернёт:
    1 - Показан успешно
    0 - Не удалось показать
Заметки:
    Показываем меню запроса из списка.
*/

stock ShowPlayerAdminBotRequestMenu(playerid)
{
    if(pAdminChoseRequest{playerid} == ADMIN_BOT_INVALID_REQUEST_ID)
        return 0;

    return ShowPlayerDialog(
        playerid,
        dAbotreqmenu,
        DIALOG_STYLE_LIST,
        PlayerName(AdminBotInfo[pAdminChoseRequest{playerid}][aBot_targetid]),
        !"{C0F08E}Наказать\n{FFFFFF}Информация\nОтклонить", 
        !"Далее", !"Выход"
    );
}

/*
Функция:
    ShowPlayerAdminBotRequestList
Аргументы:
    playerid - ID игрока, которому показываем
Вернёт:
    1 - Показан успешно
Заметки:
    Показываем весь список запросов.
*/

stock ShowPlayerAdminBotRequestList(playerid)
{
    new
        string[(4 + ((MAX_PLAYER_NAME + 1 - 2) * 2) + (- 2 + MAX_ADMIN_BOT_PUNISH_REASON) + (- 2 + MAX_ADMIN_BOT_PUNISN_NAME_LENGTH) 
        + (- 2 + 4)) * MAX_ADMIN_BOT_SUPPORT_COUNT + 46] = 
        {
            "Запросил\tДейсвтие(время)\tНаказать\tПричина\n"
        },

        count = 0
    ;

    for(new iter = 0; iter < MAX_ADMIN_BOT_SUPPORT_COUNT; iter ++)
    {
        if(IsEmptyRequestInAdminBotList(iter))
                continue;
            
        format(string, sizeof string, "%s%s\t%s(%d мин)\t%s\t%s\n",
            string,
            PlayerName(AdminBotInfo[iter][aBot_adminid]),
            ADMIN_BOT_PUNISH_NAME[AdminBotInfo[iter][aBot_punish_type]],
            AdminBotInfo[iter][aBot_punish_time],
            PlayerName(AdminBotInfo[iter][aBot_targetid]),
            AdminBotInfo[iter][aBot_punish_reason]
        );

        PlayerListitem[playerid][count++] = iter;

    }

    return ShowPlayerDialog(
        playerid,
        dAbotreqlist,
        DIALOG_STYLE_TABLIST_HEADERS,
        !"Запросы админ-боту",
        string,
        !"Далее", !""
    );
}

/*
Функция:
    GetLastRequestInAdminBot
Аргументы:
    -
Вернёт:
    Вернёт ID последнего запроса.
    Вернёт -1, если спиоск запросов пуст.
Заметки:
    Получить ID последнего добавленного запроса.
*/

stock GetLastRequestInAdminBot()
{
    new
        tmp_ = -1;
    
    if(CountRequestInAdminBotList() == MIN_ADMIN_BOT_SUPPORT_COUNT)
        return tmp_;

    for(new iter = 0; iter < MAX_ADMIN_BOT_SUPPORT_COUNT; iter ++)
    {
        if(IsEmptyRequestInAdminBotList(iter))
                continue;
        
        if((tmp_ == -1) || (tmp_ != -1 && AdminBotInfo[iter][aBot_unix_time] > AdminBotInfo[tmp_][aBot_unix_time]))
        {
            tmp_ = iter;
        }
    }
    
    return tmp_;
}

/*
Функция:
    CountRequestInAdminBotList
Аргументы:
    -
Вернёт:
    Число созданных запросов.
Заметки:
    -
*/

stock CountRequestInAdminBotList()
{
    return gADMIN_BOT_SUPPORT_TOTAL_COUNT;
}

/*
Функция:
    CheckAvailabilityInAdminBot
Аргументы:
    playerid - ID игрока, подающий запрос
    parmas[] - Массив с хранением запроса
Вернёт:
    CA_REQUEST_NOT_FOUND - Запрос не найден
    CA_REQUEST_FOUND - Запрос создан/найден
    CA_NO_PLACE_IN_REQUEST - Лист с запросами переполнен
    CA_MISSING_ARGUMENT - Указаны не все аргументы
    CA_INVALID_TARGET_ID - Наказуемый не в сети
Заметки:
    Проверяем наличие элементов запроса. 
*/

stock CheckAvailabilityInAdminBot(playerid, params[])
{
    new
        bool:IsFinedCommand = false,

        strFindPos,

        supportCommand[MAX_ADMIN_BOT_REQUEST_LENGTH + 1],
        supportTargetid,
        supportTime,
        supportReason[MAX_ADMIN_BOT_PUNISH_REASON + 1],
        supportUnixtTime = gettime(),

        string[MAX_CHATBUBBLE_LENGTH + 1]
    ;

    for(new i = 0; i < MAX_ADMIN_BOT_REQUEST; ++i)
    {
        if((strFindPos = strfind(params, ADMIN_BOT_SUPPORT_COMMAND[i], true)) != -1)
        {
            if(CountRequestInAdminBotList() >= MAX_ADMIN_BOT_SUPPORT_COUNT)
                return CA_NO_PLACE_IN_REQUEST;

            strdel(params, 0, strFindPos);

            if(sscanf(params, "s[8]uds[50]",
                supportCommand, supportTargetid, supportTime, supportReason))
                return CA_MISSING_ARGUMENT;
            
            if(supportTargetid == INVALID_PLAYER_ID)
                return CA_INVALID_TARGET_ID;
        

            for(new j = 0; j < MAX_ADMIN_BOT_SUPPORT_COUNT; j ++)
            {
                if(!IsEmptyRequestInAdminBotList(j))
                    continue;
                
                format(string, sizeof string, "[ADMIN-BOT] {FFFFFF}%s запросил %s игрока %s на %d мин, причина: %s",
                    PlayerName(playerid), 
                    ADMIN_BOT_PUNISH_NAME[i], 
                    PlayerName(supportTargetid),
                    supportTime,
                    supportReason
                );
                SendAdminMessage(ADMIN_BOT_HEX_COLOR, string);

                SendAdminMessage(ADMIN_BOT_HEX_COLOR, !"Нажмите Y для одобрения, N для отказа. (/viewreq для просмотра всех запросов)");

                SetRequestInAdminBotList(
                    j, 
                    i, 
                    supportTime, 
                    playerid, 
                    supportTargetid, 
                    supportUnixtTime, 
                    supportReason
                );

                IsFinedCommand = true;

                break;
            }
            break;
        }
    }

    return (IsFinedCommand ? CA_REQUEST_FOUND : CA_REQUEST_NOT_FOUND);
}

/*
Функция:
    RejectRequestInAdminBotList
Аргументы:
    playerid - ID игрока, отклоняющий запрос
    index - ID запроса
Вернёт:
    -
Заметки:
    Отклоняем запрос. 
*/

stock RejectRequestInAdminBotList(playerid, index)
{
    new
        string[MAX_CHATBUBBLE_LENGTH + 1];

    format(string, sizeof string, "[ADMIN-BOT] {FFFFFF}%s отклонил запрос №%d",
        PlayerName(playerid), index + 1);
    SendAdminMessage(ADMIN_BOT_HEX_COLOR, string);

    format(string, sizeof string, "(Отправитель: %s | Просьба: %s | Наказуемый: %s | Причина: %s)",
        PlayerName(AdminBotInfo[index][aBot_targetid]),
        ADMIN_BOT_PUNISH_NAME[AdminBotInfo[index][aBot_punish_type]],
        PlayerName(AdminBotInfo[index][aBot_adminid]),
        AdminBotInfo[index][aBot_punish_reason]
    );
    SendAdminMessage(ADMIN_BOT_HEX_COLOR, string);

    DeleteRequestInAdminBotList(index);
}

/*
Функция:
    ApproveRequestInAdminBotList
Аргументы:
    playerid - ID игрока, принимающий запрос
    index - ID запроса
Вернёт:
    -
Заметки:
    Принимаем запрос. 
*/

stock ApproveRequestInAdminBotList(playerid, index)
{
    new
        string[MAX_CHATBUBBLE_LENGTH + 1];

    format(string, MAX_CHATBUBBLE_LENGTH + 1, "%s %d %d %s // %s",
            ADMIN_BOT_SUPPORT_COMMAND[AdminBotInfo[index][aBot_punish_type]],
            AdminBotInfo[index][aBot_targetid],
            AdminBotInfo[index][aBot_punish_time],
            AdminBotInfo[index][aBot_punish_reason],
            PlayerName(AdminBotInfo[index][aBot_adminid])
    );
    PC_EmulateCommand(playerid, string);

    DeleteRequestInAdminBotList(index);
}

/*
Функция:
    IsEmptyRequestInAdminBotList
Аргументы:
    index - ID запроса
Вернёт:
    1 - Запрос пустой
    0 - Запрос не пустой
Заметки:
    Смотрим, пустой ли запрос. 
*/

stock IsEmptyRequestInAdminBotList(index)
{
    return ((AdminBotInfo[index][aBot_punish_reason][0] == '\0') ? (1) : (0));
}

/*
Функция:
    DeleteRequestInAdminBotList
Аргументы:
    index - ID запроса
Вернёт:
    1 - Запрос успешно удалён
    0 - Запрос не был удалён
Заметки:
    Удаляем запрос из списка. 
*/

stock DeleteRequestInAdminBotList(index)
{
    if(!IsEmptyRequestInAdminBotList(index))
    {
        AdminBotInfo[index][aBot_targetid] = INVALID_PLAYER_ID;
        AdminBotInfo[index][aBot_punish_reason][0] = '\0';

        gADMIN_BOT_SUPPORT_TOTAL_COUNT --;

        return 1;
    }
    else
    {
        return 0;
    }
}

/*
Функция:
    SetRequestInAdminBotList
Аргументы:
    index - ID запроса
    type - Тип запроса (заглушка и т.п.)
    &time - Время в минутах
    &adminid - ID админа, оставившего запрос
    &targetid - ID наказуемого
    &unix_time - Unix время на момент добавления запроса
    reason[] - Причина наказания
    size - Размер массива с причиной (по-умолчании установлен) 
Вернёт:
    -
Заметки:
    Добавляем запрос в список 
*/

stock SetRequestInAdminBotList(index, type, &time, &adminid, &targetid, &unix_time, reason[], const size = sizeof reason)
{
    AdminBotInfo[index][aBot_punish_type] = type;
    AdminBotInfo[index][aBot_punish_time] = time;

    strmid(
        AdminBotInfo[index][aBot_punish_reason],
        reason,
        0,
        MAX_ADMIN_BOT_PUNISH_REASON,
        size
    );
    
    AdminBotInfo[index][aBot_targetid] = targetid;
    AdminBotInfo[index][aBot_adminid] = adminid;
    AdminBotInfo[index][aBot_unix_time] = unix_time;

    gADMIN_BOT_SUPPORT_TOTAL_COUNT ++;
} 

 

 

 

Ко всем командам

CMD:viewreq(playerid) // Для просмотра всех запросов
{
    if(!AdminLevel(playerid)) 
        return 1; CheckAdminLevel(playerid, CMD_ADMIN_viewreq);

    if(CountRequestInAdminBotList() == MIN_ADMIN_BOT_SUPPORT_COUNT)
        return SendClientMessage(playerid, -1, !"Список запросов пуст.");

     ShowPlayerAdminBotRequestList(playerid) 

    return 1;
}

CMD:admin(playerid, params[]) // Админ-чат
{
    if(AdminLevel(playerid))
    {
        if(!(0 < strlen(params) < 90))
            return SendClientMessage(playerid, -1, !"Используйте больше 1 символа и меньше 90");

        new
            string[128];

        format(string, sizeof(string), "[A] %s [%d]: %s", PlayerName(playerid), playerid, params);
        SendAdminMessage(-1, string);

        new
            ret = CheckAvailabilityInAdminBot(playerid, params),
            retrunMessage[][] =
            {
                !"Не удалось найти элементов запросов",
                !"Запрос успешно найден и зарегистрирован",
                !"К сожалению лист с запросами переполнен.",
                !"Указаны не все аргументы. (Например: /mute (Id/Nick) (Time) (Reason)",
                !"Данного игрока нет на сервере."
            }
        ;

        SendClientMessage(playerid, -1, retrunMessage[ret]);
    }

    return 1;
}
alias:admin("a"); 

 

 

 

OnDialogResponse

case dAbotreqinfo:
{
    return ShowPlayerAdminBotRequestMenu(playerid);
}

case dAbotreqmenu:
{
    if(!response)
    {
        pAdminChoseRequest{playerid} = ADMIN_BOT_INVALID_REQUEST_ID;

        return 1;
    }

    if(IsEmptyRequestInAdminBotList(pAdminChoseRequest{playerid}))
        return SendClientMessage(playerid, -1, !"Данный запрос был удалён");
    
    new
        count = pAdminChoseRequest{playerid};

    switch(listitem)
    {
        case 0:
        {
            if(ADMIN_BOT_LEVEL_USING_CMD[AdminBotInfo[count][aBot_punish_type]] > AdminLevel(playerid))
            {
                pAdminChoseRequest{playerid} = ADMIN_BOT_INVALID_REQUEST_ID;

                return SendClientMessage(playerid, -1, !"Вы неуполномочены принимать данный запрос.");
            }
            
            pAdminChoseRequest{playerid} = ADMIN_BOT_INVALID_REQUEST_ID;

            ApproveRequestInAdminBotList(playerid, count);

            return 1;
        }
        case 1:
        {
            return ShowPlayerAdminBotRequestInfo(playerid);
        }
        case 2:
        {

            if((AdminBotInfo[count][aBot_adminid] != playerid) 
            && (ADMIN_BOT_LEVEL_USING_CMD[AdminBotInfo[count][aBot_punish_type]] > AdminLevel(playerid)))
            {
                pAdminChoseRequest{playerid} = ADMIN_BOT_INVALID_REQUEST_ID;

                return SendClientMessage(playerid, -1, !"Вы неуполномочены отлонять данный запрос");
            }
            
            pAdminChoseRequest{playerid} = ADMIN_BOT_INVALID_REQUEST_ID;

            RejectRequestInAdminBotList(playerid, count);

            return 1;
        }
    }
    return 1;
}

case dAbotreqlist:
{
    if(!response)
        return 1;
    
    new
        count = PlayerListitem[playerid][listitem];

    if(IsEmptyRequestInAdminBotList(count))
    {
        SendClientMessage(playerid, -1, !"Данный запрос был удалён");
        return ShowPlayerAdminBotRequestList(playerid);
    }

    pAdminChoseRequest{playerid} = count;
    
    return ShowPlayerAdminBotRequestMenu(playerid);
} 

 

 

 

OnPlayerConnect

pAdminChoseRequest{playerid} = ADMIN_BOT_INVALID_REQUEST_ID; 

 

 

OnPlayerDisconnect

    if(CountRequestInAdminBotList() != MIN_ADMIN_BOT_SUPPORT_COUNT) // Если список запрос не пуст
    {
        for(new iter = 0; iter < MAX_ADMIN_BOT_SUPPORT_COUNT; iter ++) // Перебираем все запросы
        {
            if(AdminBotInfo[iter][aBot_adminid] != playerid && AdminBotInfo[iter][aBot_targetid] != playerid) // Если ID игрока не равен админу, который запросил и наказуемого - пропускаем
                continue;
            
            DeleteRequestInAdminBotList(iter); // Удаляем запрос
        }
    } 

 

 

 

OnPlayerKeyState

if(newkeys & KEY_NO)
{
    if(CountRequestInAdminBotList() != MIN_ADMIN_BOT_SUPPORT_COUNT)
    {
        if(AdminLevel(playerid))
        {
            new
                iter = GetLastRequestInAdminBot();

            if(iter != -1)
            {
                if(ADMIN_BOT_LEVEL_USING_CMD[AdminBotInfo[iter][aBot_punish_type]] > AdminLevel(playerid))
                {
                    SendClientMessage(playerid, -1, !"Малый уровень администрирования для отказа.");

                    return 1;
                }
                
                RejectRequestInAdminBotList(playerid, iter);

                return 1;
            }
        }
    }
}

if(newkeys & KEY_YES)
{
    if(CountRequestInAdminBotList() != MIN_ADMIN_BOT_SUPPORT_COUNT)
    {
        if(AdminLevel(playerid))
        {
            new
                iter = GetLastRequestInAdminBot();

            if(iter != -1)
            {    
                if(ADMIN_BOT_LEVEL_USING_CMD[AdminBotInfo[iter][aBot_punish_type]] > AdminLevel(playerid))
                {
                    SendClientMessage(playerid, -1, !"Малый уровень администрирования для принятия.");

                    return 1;
                }
                
                ApproveRequestInAdminBotList(playerid, iter);
            }
        }
    }
} 

 

 

 

Заменяемые под себя функции / макросы

Спойлер

В начало мода или ко всем итераторам


new 
    Iterator:Connect_Admin<MAX_PLAYERS>; // Итератор , где будем хранить всех администраторов 

 

При добавлении/заходе администратора


if(!Iter_Contains(Connect_Admin, /*админ*/)) Iter_Add(Connect_Admin, /*админ*/); 

 

 
При выходе/снятии администратора

if(Iter_Contains(Connect_Admin, /*админ*/)) Iter_Remove(Connect_Admin, /*админ*/); 

 

 

 

Сток для отправки сообщения администраторам


stock SendAdminMessage(color, const string[])
{
    foreach(new i : Connect_Admin)
    {
        SendClientMessage(i, color, string);
    }
    return 1;
} 

 

 

Спойлер

Макросы



#define PlayerName(%0)                 /*Массив с хранением имени игрока*/
#define AdminLevel(%0)                /*Массив с хранением админ-уровня*/ 

 

 

 

 

 

Изменение:

*Добавлена возможность подключить как include.

*Мы оптимизировали админ-бота.

*Убраны лишние строки.

 

Share this post


Link to post
Share on other sites

АВТОМАТИЧЕСКИ СФОРМИРОВАННОЕ СООБЩЕНИЕ:

Данная тема была перемещена модерацией или администрацией портала PAWNO-RUS.RU! 

Перемещена из: "Скриптинг PAWN > Готовые решения"

Перемещена в: "Прочее > Архив"

 

С уважением, ваш Бот! 

Если вы НЕ согласны с переносом данной темы в раздел "Прочее > Архив", пожалуйтесь на это сообщение в жалобе указав причины вашего недовольства. Спасибо. 

 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • legins
      By legins
      Помогите, вот такая проблема:
      ```
      [09:10:23] plugin.bcrypt v2.2.3 was loaded.
      [09:10:23] plugin.bcrypt: 10 cores detected, 9 threads will be used.
      [09:10:23] Loaded.
      [09:10:23] Loading plugin: pawnraknet.so
      [09:10:23] [Pawn.RakNet] 
       
          | Pawn.RakNet 1.4.1 | 2016 - 2020
          |--------------------------------
          | Author and maintainer: urShadow
       
       
          | Compiled: Jun 18 2020 at 11:28:17
          |--------------------------------------------------------------
          | Forum thread: https://forum.sa-mp.com/showthread.php?t=640306
          |--------------------------------------------------------------
          | Repository: https://github.com/urShadow/Pawn.RakNet
          |--------------------------------------------------------------
          | Wiki: https://github.com/urShadow/Pawn.RakNet/wiki
       
      [09:10:23] Loaded.
      [09:10:23] Loading plugin: pawncmd.so
      [09:10:23] Pawn.CMD plugin v3.2.0 by urShadow has been loaded
      [09:10:23] Loaded.
      [09:10:23] Loading plugin: TOTP.so
      [09:10:23] TOTP plugin v1.0.1 by Games loaded.
      [09:10:23] Loaded.
      [09:10:23] Loading plugin: timerfix.so
      [09:10:23] TimerFix v1.8 successfully loaded.
      [09:10:23] Loaded.
      [09:10:23] Loading plugin: rustext.so
      [09:10:24] 
      [09:10:24] ---------------
      [09:10:24] rustext 2.0.8
      [09:10:24] Author: ziggi
      [09:10:24] ---------------
      [09:10:24] 
      [09:10:24] Loaded.
      [09:10:24] Loaded 10 plugins.
       
      [09:10:24] 
      [09:10:24] Filterscripts
      [09:10:24] ---------------
      [09:10:24] Loaded 0 filterscripts.
       
      [09:10:39] MapFix by Nexius v4.3.3 loaded (include version).
      [09:10:39] LOG_SYSTEM: Запуск сервера [0] с портом: 1787
      [09:10:39] Start connect to MySQL:
      [09:10:39] Succes
       
      Status connect:
      [09:10:39] Succes: Сервер успешно подключился к базе данных.
       
       
      [09:10:46] Flin - Edition | 2018 - 2022 (c) 
       
       
       
      [09:10:46] Number of vehicle models: 55
      [09:10:46] plugin.bcrypt: Version check failed.
      [09:10:52] Домов загружено: 960 за 6801 мс
      [09:10:54] Бизнесов загружено: 122 за 1398 мс
      [09:10:54] Номеров в отеле загружено: 60 за 101 мс
      [09:10:54] [110 штук] загружены gangzone
      [09:10:54] Радары загружены [0 штук] 
      [09:10:54] [Загружено семей]: <0. Потрачено: <-.
      [09:10:54] Данные правительства загружены за 0 мс
      [09:10:54] Данные граффити загружены за 302 мс
      [09:10:54] Парковок загружено: 0 за 0 мс
      [09:10:54] Объектов в садах загружено: 0 за 0 мс
      [09:10:55] Грядок в садах загружено: 0 за 0 мс
      [09:10:55] Панелей в домах загружено: 0 за 0 мс
      [09:10:55] Видеокарты в домах загружено: 0 за 0 мс
      [09:10:55] Рабочие в домах загружено: 0 за 0 мс
      [09:10:55] [Warehouse System] Load: 0 мс
      [09:10:55] [CCTV] Строк - 8. Загружено - 8. Затрачено: 1 ms.
      [09:10:55] [APBS] Записи не найдены.
      [09:10:55] [AntiDM] Строк - 96. Загружено - 0. Затрачено: 403 ms.
      [09:10:55] [94 штук] Загружены FamilyZone
      [09:10:55] Данные сетей загружены за 0 мс
      [09:10:55] Данные кустов загружены за 0 мс
      [09:10:55] [Загружено фракций]: <26. Потрачено: <200 ms.
      [09:10:55] Данные билбордов загружены за 97 мс
      [09:10:56] Автосалоны загружены: 99 т/с за 105 мс
       
      ----------
      Loaded log file: "server_log.txt".
      ----------
       
      SA-MP Dedicated Server
      ----------------------
      v0.3.7-R2, (C)2005-2015 SA-MP Team
       
      [09:12:58] filterscripts = "" (string)
      [09:12:58] 
      [09:12:58] Server Plugins
      [09:12:58] --------------
      [09:12:58] Loading plugin: crashdetect.so
      [09:12:58] CrashDetect plugin 4.19
      [09:12:58] Loaded.
      [09:12:58] Loading plugin: mysql.so
      [09:12:58] plugin.mysql: R41-4 successfully loaded.
      [09:12:58] Loaded.
      [09:12:58] Loading plugin: streamer.so
      [09:12:58] 
       
      *** Streamer Plugin v2.9.4 by Incognito loaded ***
       
      [09:12:58] Loaded.
      [09:12:58] Loading plugin: sscanf.so
      [09:12:58] 
       
      [09:12:58] ===============================
       
      [09:12:58] sscanf plugin loaded.     
       
      [09:12:58] Version: 2.8.3        
       
      [09:12:58] (c) 2018 Alex "Y_Less" Cole  
       
      [09:12:58] ===============================
       
      [09:12:58] Loaded.
      [09:12:58] Loading plugin: pawnraknet.so
      [09:12:58] [Pawn.RakNet] 
       
          | Pawn.RakNet 1.4.1 | 2016 - 2020
          |--------------------------------
          | Author and maintainer: urShadow
       
       
          | Compiled: Jun 18 2020 at 11:28:17
          |--------------------------------------------------------------
          | Forum thread: https://forum.sa-mp.com/showthread.php?t=640306
          |--------------------------------------------------------------
          | Repository: https://github.com/urShadow/Pawn.RakNet
          |--------------------------------------------------------------
          | Wiki: https://github.com/urShadow/Pawn.RakNet/wiki
       
      [09:12:58] Loaded.
      [09:12:58] Loading plugin: pawncmd.so
      [09:12:58] Pawn.CMD plugin v3.2.0 by urShadow has been loaded
      [09:12:58] Loaded.
      [09:12:58] Loading plugin: TOTP.so
      [09:12:58] TOTP plugin v1.0.1 by Games loaded.
      [09:12:58] Loaded.
      [09:12:58] Loading plugin: timerfix.so
      [09:12:58] TimerFix v1.8 successfully loaded.
      [09:12:58] Loaded.
      [09:12:58] Loading plugin: rustext.so
      [09:12:58] 
      [09:12:58] ---------------
      [09:12:58] rustext 2.0.8
      [09:12:58] Author: ziggi
      [09:12:58] ---------------
      [09:12:58] 
      [09:12:58] Loaded.
      [09:12:58] Loading plugin: bcrypt-samp.so
      [09:12:58] plugin.bcrypt v2.2.3 was loaded.
      [09:12:58] plugin.bcrypt: 10 cores detected, 9 threads will be used.
      [09:12:58] Loaded.
      [09:12:58] Loaded 10 plugins.
       
      [09:12:58] 
      [09:12:58] Filterscripts
      [09:12:58] ---------------
      [09:12:58] Loaded 0 filterscripts.
       
      [09:13:13] MapFix by Nexius v4.3.3 loaded (include version).
      [09:13:13] LOG_SYSTEM: Запуск сервера [0] с портом: 1787
      [09:13:13] Start connect to MySQL:
      [09:13:13] Succes
       
      Status connect:
      [09:13:13] Succes: Сервер успешно подключился к базе данных.
       
       
      [09:13:20] Flin - Edition | vk.com/flin_rp | 2018 - 2022 (c) 
       
       
       
      [09:13:20] Number of vehicle models: 55
      [09:13:20] plugin.bcrypt: Version check failed.
      [09:13:27] Домов загружено: 960 за 6898 мс
      [09:13:28] Бизнесов загружено: 122 за 1500 мс
      [09:13:28] Номеров в отеле загружено: 60 за 100 мс
      [09:13:28] [110 штук] загружены gangzone
      [09:13:28] Радары загружены [0 штук] 
      [09:13:28] [Загружено семей]: <0. Потрачено: <-.
      [09:13:28] Данные правительства загружены за 0 мс
      [09:13:29] Данные граффити загружены за 396 мс
      [09:13:29] Парковок загружено: 0 за 0 мс
      [09:13:29] Объектов в садах загружено: 0 за 0 мс
      [09:13:29] Грядок в садах загружено: 0 за 0 мс
      [09:13:29] Панелей в домах загружено: 0 за 0 мс
      [09:13:29] Видеокарты в домах загружено: 0 за 0 мс
      [09:13:29] Рабочие в домах загружено: 0 за 0 мс
      [09:13:29] [Warehouse System] Load: 0 мс
      [09:13:29] [CCTV] Строк - 8. Загружено - 8. Затрачено: 1 ms.
      [09:13:29] [APBS] Записи не найдены.
      [09:13:29] [AntiDM] Строк - 96. Загружено - 0. Затрачено: 499 ms.
      [09:13:29] [94 штук] Загружены FamilyZone
      [09:13:29] Данные сетей загружены за 0 мс
      [09:13:29] Данные кустов загружены за 0 мс
      [09:13:30] [Загружено фракций]: <26. Потрачено: <294 ms.
      [09:13:30] Данные билбордов загружены за 1 мс
      [09:13:30] Автосалоны загружены: 99 т/с за 104 мс
      [09:14:26] [connection] 123:55505 requests connection cookie.
      [09:14:27] [connection] incoming connection: ***.***.***.**:***** id: 0
      [09:14:27] IP: ***.***.**.**| PORT: *****
      [09:14:30] 392A374B24DC3B338F3DEA13D912A605B5E44E2113C
      [09:14:30] [join] William_Gaus has joined the server (0:188.239.232.74)
      [09:14:30] LOG_PLAYER: William_Gaus[-](123 PC) зашел на сервер
      [09:14:47] LOG_PLAYER: William_Gaus[1](123 PC) авторизовался на сервере
      [09:15:52] LOG_PLAYER: William_Gaus[1](123 PC) получил/потерял <Ларец с аксессуарами 1 ед. за <покупка из доната | #Inventory#Change
      [09:15:52] LOG_PLAYER: William_Gaus[1](123 PC) приобрел Ларец - Ларец с аксессуарами за 50 Flin Money | #Donate
      [09:16:08] LOG_PLAYER: William_Gaus[1](123 PC) выиграл Деньги: 10387$. Тип: 11 | #GetRoulette
      [09:16:12] [debug] Server crashed due to an unknown error
      [09:16:12] [debug] Native backtrace:
      [09:16:12] [debug] #0 f7a3ded6 in _Z13GetStackTraceRSt6vectorI10StackFrameSaIS0_EEPv () from plugins/crashdetect.so
      [09:16:12] [debug] #1 f7a36210 in _ZN18CrashDetectHandler20PrintNativeBacktraceERSoRKN2os7ContextE () from plugins/crashdetect.so
      [09:16:12] [debug] #2 f7a3705c in _ZN18CrashDetectHandler20PrintNativeBacktraceERKN2os7ContextE () from plugins/crashdetect.so
      [09:16:12] [debug] #3 f7a37bb6 in _ZN18CrashDetectHandler7OnCrashERKN2os7ContextE () from plugins/crashdetect.so
      [09:16:12] [debug] #4 f7a3d5c2 in ?? () from plugins/crashdetect.so
      [09:16:12] [debug] #5 f7f6e580 in __kernel_rt_sigreturn () from linux-gate.so.1
      [09:16:12] [debug] #6 f6614c0a in ProcessTick () from plugins/timerfix.so
      [09:16:12] [debug] #7 080d1ce2 in ?? () from ./samp03svr
      [09:16:12] [debug] #8 080aef3a in ?? () from ./samp03svr
      [09:16:12] [debug] #9 080aa13a in ?? () from ./samp03svr
      [09:16:12] [debug] #10 f7a7ee46 in __libc_start_main () from /lib/i386-linux-gnu/libc.so.6
      [09:16:12] [debug] #11 0804b4e1 in ?? () from ./samp03svr
      [09:16:12] [debug] Registers:
      [09:16:12] [debug] EAX: 00000002 EBX: f6631000 ECX: 08214010 EDX: 08214010
      [09:16:12] [debug] ESI: 0002f8aa EDI: 00000000 EBP: 08214010 ESP: ffea8950
      [09:16:12] [debug] EIP: f6614c0a EFLAGS: 00010217
      [09:16:12] [debug] Stack:
      [09:16:12] [debug] ESP+00000000: ebe01f90 f6631358 ffea8970 00000000
      [09:16:12] [debug] ESP+00000020: 00007b3b 2a20fd90 f64bdd9b 0bdd8070
      [09:16:12] [debug] ESP+00000040: 0821ca10 08159cf3 ffea89a8 080d1ce2
      [09:16:12] [debug] ESP+00000060: 0821ca10 08159b37 ffea89d8 3bb95e5b
      [09:16:12] [debug] ESP+00000080: 08219d00 00000000 ffea8b18 080aa13a
      [09:16:12] [debug] ESP+000000a0: 00000000 00000000 f7f34efc 00000000
      [09:16:12] [debug] ESP+000000c0: f7f378b0 f7f868f0 f7f868f0 010006fc
      [09:16:12] [debug] ESP+000000e0: 656d6167 65646f6d f7003531 f7e60afc
      [09:16:12] [debug] ESP+00000100: f7f37844 f7f374e0 00000159 f7c492a8
      [09:16:12] [debug] ESP+00000120: 080aa260 00000000 00000000 00000000
      [09:16:12] [debug] ESP+00000140: 00000000 00000000 00000000 00000000
      [09:16:12] [debug] ESP+00000160: 00000000 00000000 00000000 00000000
      [09:16:12] [debug] ESP+00000180: 00000000 00000000 00000000 00000000
      [09:16:12] [debug] ESP+000001a0: 00000000 00000000 f7c48000 f7a97d25
      [09:16:12] [debug] ESP+000001c0: f7c48000 f7c48000 00000000 f7a7ee46
      [09:16:12] [debug] ESP+000001e0: ffea8b64 f7f9bb40 f7f69340 f7c48000
      [09:16:12] [debug] ESP+00000200: f7f9b000 00000000 f7c48000 f7c48000
      [09:16:12] [debug] ESP+00000220: 00000000 00000000 00000001 0804b4c0
      [09:16:12] [debug] ESP+00000240: 00000001 0804b4c0 00000000 0804b4e1
      [09:16:12] [debug] ESP+00000260: 08150640 f7f81230 ffea8bbc 0000001c
      [09:16:12] [debug] ESP+00000280: ffeaac01 ffeaac0d ffeaaed9 ffeaaee2
      [09:16:12] [debug] ESP+000002a0: ffeaaf6d ffeaaf79 ffeaaf8f ffeaafc7
      [09:16:12] [debug] ESP+000002c0: f7f6e550 00000021 f7f6e000 00000010
      [09:16:12] [debug] ESP+000002e0: 00000064 00000003 08048034 00000004
      [09:16:12] [debug] ESP+00000300: f7f70000 00000008 00000000 00000009
      [09:16:12] [debug] ESP+00000320: 000019f8 0000000d 000003e9 0000000e
      [09:16:12] [debug] ESP+00000340: ffea8cbb 0000001a 00000002 0000001f
      [09:16:12] [debug] ESP+00000360: 00000000 00000000 c4000000 5312496d
      [09:16:12] [debug] ESP+00000380: 00000000 00000000 00000000 00000000
      [09:16:12] [debug] ESP+000003a0: 00000000 00000000 00000000 00000000
      [09:16:12] [debug] ESP+000003c0: 00000000 00000000 00000000 00000000
      [09:16:12] [debug] ESP+000003e0: 00000000 00000000 00000000 00000000
      [09:16:12] [debug] Loaded modules:
      [09:16:12] [debug] 00000000 - 00187dc3 samp03svr
      [09:16:12] [debug] f7f6e000 - f7f6f350 linux-gate.so.1
      [09:16:12] [debug] f7f5c000 - f7f5ee40 /lib/i386-linux-gnu/libdl.so.2
      [09:16:12] [debug] f7f3a000 - f7f599db /lib/i386-linux-gnu/libpthread.so.0
      [09:16:12] [debug] f7d6f000 - f7f46518 /usr/lib/i386-linux-gnu/libstdc++.so.6
      [09:16:12] [debug] f7c6b000 - f7d6dab0 /lib/i386-linux-gnu/libm.so.6
      [09:16:12] [debug] f7c4c000 - f7c68440 /lib/i386-linux-gnu/libgcc_s.so.1
      [09:16:12] [debug] f7a64000 - f7c51fb2 /lib/i386-linux-gnu/libc.so.6
      [09:16:12] [debug] f7f70000 - f7f9a3db /lib/ld-linux.so.2
      [09:16:12] [debug] f7a1f000 - f7a60e08 plugins/crashdetect.so
      [09:16:12] [debug] f768e000 - f7a23eb2 plugins/mysql.so
      [09:16:12] [debug] f766a000 - f768dd32 /home/container/plugins/../log-core.so
      [09:16:12] [debug] f765e000 - f7665d78 /lib/i386-linux-gnu/librt.so.1
      [09:16:12] [debug] f6647000 - f6658ad0 /lib/i386-linux-gnu/libnss_files.so.2
      [09:16:12] [debug] f643a000 - f64ff740 plugins/streamer.so
      [09:16:12] [debug] f6636000 - f66459b4 plugins/sscanf.so
      [09:16:12] [debug] f6305000 - f643e7d8 plugins/pawnraknet.so
      [09:16:12] [debug] f6220000 - f6307b50 plugins/pawncmd.so
      [09:16:12] [debug] f7f62000 - f7f657a0 plugins/TOTP.so
      [09:16:12] [debug] f6608000 - f6637aa3 plugins/timerfix.so
      [09:16:12] [debug] f6203000 - f621edaf plugins/rustext.so
      [09:16:12] [debug] f5f70000 - f6201bb6 plugins/bcrypt-samp.so
      [09:16:12] [debug] ec8b6000 - ec8ba824 /lib/i386-linux-gnu/libnss_dns.so.2
      [09:16:12] [debug] ec89c000 - ec8b357c /lib/i386-linux-gnu/libresolv.so.2
      ```
    • f0llows
      By f0llows
      Приветствую всех читателей, на данный момент мне нужен честный человек, который разработает или продаст какой нибудь оригинальный мод для SA:MP.
       
      Желательно интересуюсь модом под - бонусник, чтоб не был для выкачивания денег.
       
      Конечно многим может показаться бредом, но просто на данный момент моя мечта сделать сервер, где будет интересно играть, а не интересно зачислять денежные средства ради каких-то плюшек.
       
      Многие напишу, почему именно бонусник? Бонусник проще распиарить и можно приобрести себе то, что желаешь.