Нужна помощь с [Shop] Math Credits

wickedside

Участник
Сообщения
3
Реакции
0
Привет, у меня в целом проблема заключается в том, что у меня стоит шоп [NCS Shop] и я хочу, чтобы выдавалось серебро в конкурсе за правильный ответ в чате для него, а не для шопа, который прописан в плагине тык, пробовал сам сделать, но в итоге ошибок много. Буду благодарен за помощь. ❤️
Сам плагин где нужно внести изменения:
shop_mathcredits_edition.sp:
public void OnClientSayCommand_Post(int client, const char[] command, const char[] sArgs)
{
    if(timerQuestionEnd && StringToInt(sArgs) == questionResult && (questionResult || strcmp(sArgs, "0") == 0))
    {
        int clients[1];
        Shop_GiveClientCredits(clients[0] = client, credits); //тут нужно заменить команду выдачи для ncs shop'a
        PrintHintText(clients[0], "Вы получили %i кредитов.", credits);                                        //CS:S
        //PrintHintText(clients[0], "Вы получили <font color='#00FF1E'>%i</font> кредитов.", credits);        //CS:GO
        SendEndQuestion(clients[0]);
        EmitSound(clients, 1, soundplay);
    }
}
Строка в ncs_shop.sp, которая содержит функцию изменения серебра:
ncs_shop.sp:
    CreateNative("SetSilver", Native_SetSilver);
Код в cmds.ini, который описывает работу функции SetSilver:
cmds.ini:
public Action:Command_Silver(client, args) // address: 137892
{
    if (args < 3)
    {
        CReplyToCommand(client, "{fullred}[{aqua}NCS SHOP{fullred}]{default} %T", "Use: sm_silver <take/set/add> <player> <amount>", client);
        return Plugin_Handled;
    }
    decl String:name[32], String:buffer[64];
    GetCmdArg(2, name, 32);
    new bool:ml = true, targets[65];
    new count = ProcessTargetString(name, client, targets, 65, 4, buffer, 64, ml);
    if (count <= 0)
    {
        ReplyToTargetError(client, count);
        return Plugin_Handled;
    }
    new mode = -1;
    GetCmdArg(1, buffer, 64);
    if (StrEqual(buffer, "take", false))
    {
        mode = 0;
    }
    else
    {
        if (StrEqual(buffer, "set", false))
        {
            mode = 1;
        }
        else
        {
            if (StrEqual(buffer, "add", false))
            {
                mode = 2;
            }
            else
            {
                CReplyToCommand(client, "{fullred}[{aqua}NCS SHOP{fullred}]{default} %T", "Use: sm_silver <take/set/add> <player> <amount>", client);
                return Plugin_Handled;
            }
        }
    }
    GetCmdArg(3, buffer, 64);
    new amount = StringToInt(buffer, 10);
    for (new i = 0; i < count; i++)
    {
        if (!HasAdminFlags(client, iAdminFlagRoot) && targets[i] != client)
        {
            CReplyToCommand(client, "{fullred}[{aqua}NCS SHOP{fullred}]{default} %T", "You cannot use the admin area on the other!", client);
            continue;
        }
        switch (mode)
        {
            case 0:
            {
                if (cfg_bUseAdminLogs)
                {
                    GetClientSteamID(client, buffer, 64);
                    GetClientAuthId(targets[i], AuthId_Steam2, name, 32, true);
                    LogToFile(sAdminLogPath, "%t", "Logs: Admin: take silver", targets[i], amount, client, buffer, name);
                }
                if (GetAdminName(client, name, 32))
                {
                    CPrintToChatAll("{fullred}[{aqua}NCS SHOP{fullred}]{default} %T", "Admin: take silver", client, targets[i], amount, name);
                }
                SetSilver(targets[i], GetSilver(targets[i]) - amount);
            }
            case 1:
            {
                if (cfg_bUseAdminLogs)
                {
                    GetClientSteamID(client, buffer, 64);
                    GetClientAuthId(targets[i], AuthId_Steam2, name, 32, true);
                    LogToFile(sAdminLogPath, "%t", "Logs: Admin: set silver", targets[i], amount, client, buffer, name);
                }
                if (GetAdminName(client, name, 32))
                {
                    CPrintToChatAll("{fullred}[{aqua}NCS SHOP{fullred}]{default} %T", "Admin: set silver", client, targets[i], amount, name);
                }
                SetSilver(targets[i], amount);
            }
            case 2:
            {
                if (cfg_bUseAdminLogs)
                {
                    GetClientSteamID(client, buffer, 64);
                    GetClientAuthId(targets[i], AuthId_Steam2, name, 32, true);
                    LogToFile(sAdminLogPath, "%t", "Logs: Admin: add silver", targets[i], amount, client, buffer, name);
                }
                if (GetAdminName(client, name, 32))
                {
                    CPrintToChatAll("{fullred}[{aqua}NCS SHOP{fullred}]{default} %T", "Admin: add silver", client, targets[i], amount, name);
                }
                SetSilver(targets[i], GetSilver(targets[i]) + amount); //эта строка как я понимаю должна быть реализована в плагине конкурса
            }
        }
    }
    return Plugin_Handled;
}

Прикрепил архив с исходниками.
 

Вложения

  • конкурс.zip
    114.2 КБ · Просмотры: 9

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Мб я чего-то не понял, но просто заменил инклюд шопа на тот, что в твоем архиве, и сам натив выдачи кредитов из замененного инклюда, и все норм скомпилилось
1655400870589.png
 

Вложения

  • shop_mathcredits_edition.sp
    5.9 КБ · Просмотры: 9
  • shop_mathcredits_edition.smx
    5.7 КБ · Просмотры: 10

Ganter1234

Участник
Сообщения
1,149
Реакции
667
На мою версию (делал давно исходник просрал)
 

Вложения

  • shop_mathcredits_edition.smx
    5.8 КБ · Просмотры: 11

wickedside

Участник
Сообщения
3
Реакции
0
Мб я чего-то не понял, но просто заменил инклюд шопа на тот, что в твоем архиве, и сам натив выдачи кредитов из замененного инклюда, и все норм скомпилилось
Твоя функция делает Set кредитов, а нужен Add, чтобы к имеющемуся кол-ву серебра добавлялось выигранное, а плагин просто делает значение серебра = выигранному в конкурсе) А так в целом твоё решение работает, но нужен sm_silver add, а не sm_silver set
Сообщения автоматически склеены:

В общем, я сделал и оно вроде как работает на сервере нормально, спасибо Вам двоим за помощь.
Я взял твой плагин
На мою версию (делал давно исходник просрал)
Декомпилировал его, посмотрел твою реализацию и добавил в свой код пару строк.

изменённый код функции выдачи серебра:
public void OnClientSayCommand_Post(int client, const char[] command, const char[] sArgs)
{
    if(timerQuestionEnd && StringToInt(sArgs) == questionResult && (questionResult || strcmp(sArgs, "0") == 0))
    {
        int clients[1];
        int var3 = client;
        clients[0] = var3;
        SetSilver(var3, GetSilver(client) + credits);
        PrintHintText(clients[0], "Вы получили %i серебра.", credits);                                        //CS:S
        //PrintHintText(clients[0], "Вы получили <font color='#00FF1E'>%i</font> серебра.", credits);        //CS:GO
        SendEndQuestion(clients[0]);
        EmitSound(clients, 1, soundplay);
    }
}
Прикрепляю готовый исходник, может кому-то пригодится.
 

Вложения

  • shop_mathcredits_edition.sp
    6 КБ · Просмотры: 14
Последнее редактирование:
Сверху Снизу