[FilterScript] Система хелперов.
#1

Привет всем хочу поделиться скриптом сделаным мною вчера.
Система хелперов: есть 5 уровней хелпера, № 5 может давать и убирать хелперку у других.
Команды:
/quest
/reply
/helpers
/hchat
/sethelperlevel
Скрипт нуждаеться в инклудах: a_samp, zcmd, sscanf2 и Dini
Как вам?
Сам скрипт
pawn Code:
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT

#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <Dini>

#define DialogHelpersOnline 1069
#define HelperFile "HelperDats/%s.ini"
new bool:LoggedSkin[MAX_PLAYERS];
new Text3D:HelperLevel3D[MAX_PLAYERS];
enum InfoHelperData
{
    HelperLevel,
    bool:Helper,
    HelperName
}
new HelperData[MAX_PLAYERS][InfoHelperData];
new InfoHelperLevel[6][60] =
{
    {" [ этот игрок не являеться хелпером ]"},
    {"{FF0000}Начальный хелпер[1]{FFFFFF}"},
    {"{00FF00}Модератор хелперов[2]{FFFFFF}"},
    {"{FFFF00}Хелпер[3]{FFFFFF}"},
    {"{0000FF}Заместитель главного хелпера[4]{FFFFFF}"},
    {"{FF0000}Главный хелпер[5]{FFFFFF}"}
};
HelperFile_Create(playerid)
{
    new file[100], File:PFile, Name[24], LineForFile[100];
    format(Name, sizeof(Name), HelperData[playerid][HelperName]);
    format(file, sizeof(file), HelperFile, Name);


    PFile = fopen(file, io_write);

    format(LineForFile, 100, "Level %i\r\n", 0);
    fwrite(PFile, LineForFile);


    fclose(PFile);

    return 1;
}

// This function will load the player's datafile (used when a player connects to the server)
HelperFile_Load(playerid)
{
    // Setup local variables
    new file[100], File:PFile, Name[24], LineFromFile[100], ParameterName[50], ParameterValue[50];

    format(Name, sizeof(Name), HelperData[playerid][HelperName]); // Get the playername
    format(file, sizeof(file), HelperFile, Name); // Construct the complete filename for this player's account

    // Check if the player's datafile exists
    if (fexist(file))
    {
        PFile = fopen(file, io_read); // Open the playerfile for reading

        fread(PFile, LineFromFile); // Read the first line of the file

        // Keep reading until the end of the file is found (no more data)
        while (strlen(LineFromFile) > 0)
        {
            StripNewLine(LineFromFile); // Strip any newline characters from the LineFromFile
            sscanf(LineFromFile, "s[50]s[50]", ParameterName, ParameterValue); // Extract parametername and parametervalue
            if (strcmp(ParameterName, "Level", false) == 0) // If the parametername is correct ("Level")
                HelperData[playerid][HelperLevel] = strval(ParameterValue); // Store the playerlevel
        }

        fclose(PFile); // Close the file

        return 1; // Return if the file was read correctly
    }
    else
        return 0; // Return 0 if the file couldn't be read (doesn't exist)
}

HelperFile_Save(playerid)
{
    new file[100], File:PFile, Name[24], LineForFile[100];
    format(Name, sizeof(Name), HelperData[playerid][HelperName]);
    format(file, sizeof(file), HelperFile, Name);

    PFile = fopen(file, io_write);
    format(LineForFile, 100, "Level %i\r\n",HelperData[playerid][HelperLevel]);
    fwrite(PFile, LineForFile);
    return 1;
}
Update3DTextLabel(playerid)
{
    new msg[60];
    format(msg, 60, "%s", InfoHelperLevel[playerid][HelperData[playerid][HelperLevel]]);
    HelperLevel3D[playerid] = Create3DTextLabel(msg, 0xFFFFFFFF, 0.0,0.0, 0.0, 20.0, 0, 0);
    Attach3DTextLabelToPlayer(HelperLevel3D[playerid], playerid, 0.0, 0.0, 0.0);
}
public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid, HelperData[playerid][HelperName], 24);
    LoggedSkin[playerid] = false;
    HelperData[playerid][Helper] = false;
    if (HelperFile_Create(playerid) > 1)
        SendClientMessage(playerid, 0xFF0000FF, "____________________________________________________________");
    else
        HelperFile_Create(playerid);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerInterior(playerid, 0);
    return 1;
}
public OnPlayerDisconnect(playerid)
{
    HelperFile_Save(playerid);
    Delete3DTextLabel(HelperLevel3D[playerid]);
    HelperData[playerid][Helper] = false;
    HelperData[playerid][HelperLevel] = 0;
}
public OnPlayerSpawn(playerid)
{
    if (HelperData[playerid][HelperLevel] >= 1)
        HelperData[playerid][Helper] = true;
    LoggedSkin[playerid] = true;
    HelperFile_Load(playerid);
    Update3DTextLabel(playerid);
    SendClientMessage(playerid, 0xFF0000FF, "Helper System {0000FF}By Trucker_98_{FF0000} загружена!");
    return 1;
}
public OnPlayerText(playerid, text[])
{
    new mes[1024], name[24];
    GetPlayerName(playerid, name, 24);
    if(HelperData[playerid][HelperLevel] >= 1)
    {
        format(mes, 1024, "..::[%s]::..%s[%d]: {00FF00}%s", InfoHelperLevel[playerid][HelperData[playerid][HelperLevel]], name, playerid, text);
        SendClientMessageToAll(0xFFFFFFFF, mes);
    }
    else
        return 0;
    return 0;
}

COMMAND:helpers(playerid, params[])
{
    new HelperName1[24], ShowHelpers[1024];
    if (IsPlayerConnected(playerid))
    {
        for(new i; i < MAX_PLAYERS; i++)
        {
            if (HelperData[i][Helper] == true)
            {
                GetPlayerName(i, HelperName1, 24);
                format(ShowHelpers, 1024, "%s _[]_ %s\r\n",InfoHelperLevel[playerid][HelperData[playerid][HelperLevel]], HelperName1);
            }
            if(strlen(ShowHelpers) > 0)
                ShowPlayerDialog(playerid, DialogHelpersOnline, DIALOG_STYLE_LIST, "Хелперы Онлайн", ShowHelpers, "Закрыть", "");
            else
                ShowPlayerDialog(playerid, DialogHelpersOnline, DIALOG_STYLE_MSGBOX, "Message", "В данный момент на сервере нету хелперов.", "Закрыть", "");
               
        }
    }
    else
        return 0;
    return 1;
}
COMMAND:quest(playerid, params[])
{
    new Question[100], Name[24], MessageToHelpers[150];
    if (IsPlayerConnected(playerid))
    {
        if (sscanf(params, "s[100]", Question)) SendClientMessage(playerid, 0xFF0000FF, "ВВЕДИТЕ ПРАВЕЛЬНО КОМАНДУ:  /quest [опрос]");
        else
        {
            GetPlayerName(playerid, Name, 24);
            format(MessageToHelpers, 150, "Опрос от: {0000FF}%s:{00FF00} %s", Name, Question);
            SendClientMessage(playerid, 0x00FF00FF, "Ваш опрос отправлен хелперам!");
            SendClientMessage(playerid, 0x00FF00FF, "Если вам не приходит ответ, пожалуйста проверьте есть ли хелперы на сервере!>> /quest [опрос] <<");
            for (new i; i < MAX_PLAYERS; i++)
            {
                if (HelperData[i][Helper] == true)
                {
                    SendClientMessage(i, 0xFF0000FF, MessageToHelpers);
                    GameTextForPlayer(i, "New Question", 3, 3000);
                }
            }
        }
    }
    else
        return 0;
    return 1;
}
COMMAND:reply(playerid, params[])
{
    new Reply[100], ID, Name[24], MessageToPlayer[150];
    if (IsPlayerConnected(playerid))
    {
        if (HelperData[playerid][Helper] == true)
        {
            if (LoggedSkin[playerid] == true)
            {
                if (sscanf(params, "i, s[100]",ID, Reply)) SendClientMessage(playerid, 0xFF0000FF, "ВВЕДИТЕ ПРАВЕЛЬНО КОМАНДУ:  /reply [ID игрока] [ответ]");
                else
                {
                    if (IsPlayerConnected(ID))
                    {
                        GetPlayerName(playerid, Name, 24);
                        format(MessageToPlayer, 150, "Ответ от:{00FF00}%s:{FFFF00} %s", Name, Reply);
                        SendClientMessage(ID, 0xFF0000FF, MessageToPlayer);
                        GameTextForPlayer(ID, "]]OTBET OT XELIIEPA]]", 3, 3000);
                    }
                    else
                        SendClientMessage(playerid, 0xFF0000FF, "Игрок под этом ID-ом не находиться на сервере.");
                }
            }
            else
                SendClientMessage(playerid, 0xFF0000FF, "Что-бы пользоваться этой командой вы должны спавниться!");
        }
        else
            SendClientMessage(playerid, 0xFF0000FF, "Вы не являетесь хелпером на этом сервере.");
    }
    else
        return 0;
    return 1;
}
COMMAND:hchat(playerid, params[])
{
    new Name[24], Message[456], text[128];
    if (IsPlayerConnected(playerid))
    {
        if (HelperData[playerid][Helper] == true)
        {
            if (LoggedSkin[playerid] == true)
            {
                if (sscanf(params, "s[128]", text)) SendClientMessage(playerid, 0xFF0000FF, "ВВЕДИТЕ ПРАВЕЛЬНО КОМАНДУ: /hctat [text]");
                else
                {
                    GetPlayerName(playerid, Name, 24);
                    format(Message, 1024, "[HELPER CHAT]{00FF00}%s[%d]: {9933FF}%s", Name, playerid, text);
                }
                for(new i; i < MAX_PLAYERS; i++)
                {
                    if (HelperData[i][Helper] == true)
                    {
                        SendClientMessage(i, 0xFFFFFFFF, Message);
                    }
                }
            }
            else
                SendClientMessage(playerid, 0xFF0000FF, "Что-бы пользоваться этой командой вы должны спавниться!");
        }
        else
            SendClientMessage(playerid, 0xFF0000FF, "Вы не являетесь хелпером на этом сервере.");
    }
    else
        return 0;
    return 1;
}
COMMAND:sethelpervelev(playerid, params[])
{
    new P_Name[24], H_Name[24], Msg[500], NEWLEVEL, ID;
    if (IsPlayerConnected(playerid))
    {
        if (LoggedSkin[playerid] == true)
        {
            if (HelperData[playerid][HelperLevel] == 5)
            {
                if (sscanf(params, "ii", ID, NEWLEVEL)) SendClientMessage(playerid, 0xFF0000FF, "ВВЕДИТЕ ПРАВЕЛЬНО КОМАНДУ: /sethelperlevel [id] [level]");
                else
                {
                    GetPlayerName(playerid, P_Name, 24);
                    GetPlayerName(ID, H_Name, 24);
                    HelperData[ID][HelperLevel] = NEWLEVEL;
                    format(Msg, 500, "Главный хелпер {00FF00}%s{FFFFFF} дал хелперу/игроку {FFFF00}%s{FF0000} уровень {FF0000}%i{FFFFFF} (%s).", P_Name, H_Name,NEWLEVEL, InfoHelperLevel[ID][HelperData[ID][HelperLevel]]);
                    SendClientMessageToAll(0xFFFFFFFF, Msg);
                    GameTextForPlayer(ID, "Watch the chat please", 2, 3000);
                    HelperFile_Save(ID);
                    Update3DTextLabel(playerid);
                }
            }
            else
                SendClientMessage(playerid, 0xFF0000FF, "Вы не являетесь главным хелпером этого сервера.");
        }
        else
            SendClientMessage(playerid, 0xFF0000FF, "Что-бы пользоваться этой командой вы должны спавниться!");
    }
    else
        SendClientMessage(playerid, 0xFF0000FF, "Вы не являетесь хелпером на этом сервере.");
    return 1;
}
Reply
#2

Как от нас пошло слово "хелпер", так и закрепилось.
Сейчас уместно слово "Поддержка".
Имхо zcmd & scanf можно было бы не использовать.
Если кому-то пригодится, то не факт, что подойдёт, придётся переделывать, а это не кашерно.
Reply
#3

скрипт у меня работает на 100%
Reply
#4

Quote:
Originally Posted by Dmytri
View Post
скрипт у меня работает на 100%
Это твоя проблема. А вот скрипт должен работать у людей его качающих на 100%.
Reply
#5

Какой ужасный код. Смысл во всех этих sscanf zcmd, если вся оптимизация коту под хвост?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)