Выдача anew (points) в других плагинах

ev_sa

Пользователь
Лучшие ответы
9
Реакции
26
Здравствуйте! Вот у меня в плагине идёт выдача $, а мне нужно чтобы выдавало anew.

cs_set_user_money(id, cs_get_user_money(id)+money)

Что мне нужно поменять здесь, чтобы выдало anew игроку? Или какая функция отвечает за выдачу anew в других плагинах, если стоят все плагины от Скальпеля.

Искал, но не нашёл. Помогите!
 
-

SKAJIbnEJIb

visibility
Администратор
Скриптер
Лучшие ответы
609
Реакции
709
@ev_sa, инклуд откройте army_ranks_ultimate.inc
 

ev_sa

Пользователь
Лучшие ответы
9
Реакции
26
@SKAJIbnEJIb,Нашёл, подставил. Не получается. Можете подсказать, @SKAJIbnEJIb.

1631260595598.png
Сообщение автоматически объединено:

Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <sqlx>

#define PLUGIN "[QUEST]"
#define VERSION "1.0"

//Данные для подключение к базе данных
#define SQL_HOST         ""
#define SQL_USER         ""
#define SQL_PASS         ""
#define SQL_DB             ""

#define TOTAL_QUESTS 10 //всего квестов
#define MENU_QUESTS 6 //Количество квестов в день. не своетую больше

new Handle:g_hSQLTuple //Для sql запросов

new g_DateLoad[33] //Для сохранение прогресса в базе данных

new szFileNameQuestMission[] = {"addons/amxmodx/configs/quest/quest_mission.ini"} //Сохранение Индексов g_Quest_Mission
new szFileNameQuestMissionValue[] = {"addons/amxmodx/configs/quest/quest_mission_value.ini"} //Сохранение значения для выполнение квеста с индексом

//Сами квесты
new g_Quest_Mission[TOTAL_QUESTS][200] =
{
    "Убить контр-террористов",
    "Сыграть минут",
    "Убить террористов",
    "Нанести урона",
    "Зарезать ножом",
    "Не умереть",
    "Не умереть подряд",
    "Убить",
    "Убить за раунд",
    "Убить в голову"
}

//1)Значения для выполнения квеста. 2)Рандом квесты из всего списка
new g_Quest_Value[TOTAL_QUESTS], g_QuestMissionRandom[MENU_QUESTS]

//1)Наличие у игрока квест. 2)Статус выполнения квеста
new g_MenuQuestMission[33][MENU_QUESTS], g_StatusMission[33][TOTAL_QUESTS]

//Выполнил ли все квесты
new g_CoinId[33]

//[0] Квест который доступен для выполнения [1] Индекс рандома квестов [2] Индекс квеста в меню
new g_StatusFun[TOTAL_QUESTS][3]

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, "BirnoSemiSem")

    register_menu("Menu quest", keys, "menu_quest")

    register_clcmd("say /quests", "Show_MainMenu")
    RegisterHam(Ham_Killed, "player", "Ham_PlayerKilled_Post")
    RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
 
    register_logevent("round_end", 2, "1=Round_End")
 
    set_task(0.1, "SQL_Init_Connect")
}

public client_connect(id)
{
    //При коннекте сбрасываем у игрока выполнен ли квест и статус выполнения квеста (его текущие значения)
    for(new i = 0; i < MENU_QUESTS; i++)
        g_MenuQuestMission[id][i] = 0
     
    for(new i = 0; i < TOTAL_QUESTS; i++)
        g_StatusMission[id][i] = 0
     
    //Сбрасываем таск и массив чтобы данные еще не загружались
    remove_task(id+57891)
    g_DateLoad[id] = false
}
 
public client_putinserver(id)
{
    set_task(1.0, "start", id)
}

//Были случаи когда игрок вылетал при заходе на сервер
public start(id)
{
    //Делаем запрос к базе данных чтобы вернуть данному игроку его прогресс
    new authid[32]
    get_user_authid(id, authid, charsmax(authid))

    new szQuery[512]
    formatex(szQuery, charsmax(szQuery), "SELECT `quest_1_d`,\
    `quest_2_d`,`quest_3_d`,`quest_4_d`,`quest_5_d`,\
    `quest_6_d`, `quest_1_v`, `quest_2_v`,\
    `quest_3_v`, `quest_4_v`, `quest_5_v`, `quest_6_v`, `coin`\
    FROM `amx_quest` WHERE `USER_KEY` = '%s'", authid)
 
    new cData[1]
    cData[0] = id
    //Отправляем запрос
    SQL_ThreadQuery(g_hSQLTuple, "LoadClient_QueryHandler", szQuery, cData, 1)
 
    //Если данный квест есть (т.е. он есть в списке задачи) и он у игрока доступен (т.е. выполнить надо)
    if(g_StatusFun[1][0] && g_MenuQuestMission[id][g_StatusFun[1][2]] < 1)
        set_task(60.0, "task_time_status", id+57891,_,_,"b")
}

public client_disconnected(id)
{    
    if (g_DateLoad[id])
    {
        //ДЕЛАЕМ ПРОСТО ГРОМАДНЕЙШИЙ ЗАПРОС НА СОХРАНЕНИЕ ДАННЫХ
        //Если такой записи нет значит добавляем. Если есть значит обновляем
        new authid[32], name[33]
        get_user_authid(id, authid, 31)
        get_user_name(id, name, 31)
     
        new szQuery[2048], szQuery2[1024]
        formatex(szQuery, charsmax(szQuery), "INSERT INTO `amx_quest`\
        SET `USER_KEY`='%s',`USER_NAME`='%s',`quest_1_d`='%d',`quest_2_d`='%d',`quest_3_d`='%d',\
        `quest_4_d`='%d',`quest_5_d`='%d',`quest_6_d`='%d',`quest_1_v`='%d',`quest_2_v`='%d',\
        `quest_3_v`='%d',`quest_4_v`='%d',`quest_5_v`='%d',`quest_6_v`='%d',`coin`='%d'",authid, name, g_MenuQuestMission[id][0], g_MenuQuestMission[id][1], g_MenuQuestMission[id][2], g_MenuQuestMission[id][3],
        g_MenuQuestMission[id][4], g_MenuQuestMission[id][5], g_StatusMission[id][g_QuestMissionRandom[0]], g_StatusMission[id][g_QuestMissionRandom[1]], g_StatusMission[id][g_QuestMissionRandom[2]],
        g_StatusMission[id][g_QuestMissionRandom[3]], g_StatusMission[id][g_QuestMissionRandom[4]], g_StatusMission[id][g_QuestMissionRandom[5]], g_CoinId[id])
     
        formatex(szQuery2, charsmax(szQuery2), "ON DUPLICATE KEY UPDATE `quest_1_d`='%d', `quest_2_d`='%d',\
        `quest_3_d`='%d', `quest_4_d`='%d', `quest_5_d`='%d', `quest_6_d`='%d', `quest_1_v`='%d', `quest_2_v`='%d',\
        `quest_3_v`='%d', `quest_4_v`='%d', `quest_5_v`='%d', `quest_6_v`='%d', `coin`='%d'", g_MenuQuestMission[id][0],
        g_MenuQuestMission[id][1], g_MenuQuestMission[id][2], g_MenuQuestMission[id][3], g_MenuQuestMission[id][4],
        g_MenuQuestMission[id][5], g_StatusMission[id][g_QuestMissionRandom[0]], g_StatusMission[id][g_QuestMissionRandom[1]], g_StatusMission[id][g_QuestMissionRandom[2]],
        g_StatusMission[id][g_QuestMissionRandom[3]], g_StatusMission[id][g_QuestMissionRandom[4]], g_StatusMission[id][g_QuestMissionRandom[5]], g_CoinId[id])
     
        add(szQuery,charsmax(szQuery),szQuery2,charsmax(szQuery2))
     
        SQL_ThreadQuery(g_hSQLTuple, "SaveClient_QueryHandler", szQuery)
    }
 
    remove_task(id+57891)
    g_DateLoad[id] = false
}

public round_end()
{
    static id, anew
    for(id = 1; id <=get_maxplayers(); id++)
    {
        if(is_user_alive(id))
        {
            //Функционал квест "Не умереть"
            //Глобально. Есть ли данный квест сегодня
            if(g_StatusFun[5][0])
            {
                //Выполнил ли данный квест игрок
                if(g_MenuQuestMission[id][g_StatusFun[5][2]] < 1)
                {
                    //[5] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[5][2] - 1) [5] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
                    //g_Quest_Value - значения для выполнения квеста
                    if(g_StatusMission[id][5] < g_Quest_Value[g_StatusFun[5][2]])
                    {
                        // +1 к прогрессу выполнения квеста
                        g_StatusMission[id][5]++

                        //Проверка на прогресс. Если прогресс игрока больше или равно к прогрессу которому ему нужно было выполнить
                        if(g_StatusMission[id][5] >= g_Quest_Value[g_StatusFun[5][2]])
                        {
                            //Поздравляю! Квест Выполнен!
                            g_MenuQuestMission[id][g_StatusFun[5][2]]++
                         
                            anew = random_num(5000, 15000)
                            color_print(id, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! +%d$", anew)
                            ar_add_user_anew(id, ar_add_user_anew(id)+anew)
                            remove_task(id+57891)
                         
                            //Проверка на выполнил ли игрок все квесты
                            for(new i = 0; i < MENU_QUESTS; i++)
                            {
                                if(g_MenuQuestMission[id][i] > 0)
                                    g_CoinId[id]++
                                else
                                {
                                    g_CoinId[id] = 0
                                    break
                                }
                            }
                        }
                    }
                }
            }
         
            //Функционал квест "Не умереть подряд"
            //Глобально. Есть ли данный квест сегодня
            if(g_StatusFun[6][0])
            {
                //Выполнил ли данный квест игрок
                if(g_MenuQuestMission[id][g_StatusFun[6][2]] < 1)
                {
                    //[6] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[6][2] - 1) [6] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
                    //g_Quest_Value - значения для выполнения квеста
                    if(g_StatusMission[id][6] < g_Quest_Value[g_StatusFun[6][2]])
                    {
                        // +1 к прогрессу выполнения квеста
                        g_StatusMission[id][6]++

                        //Проверка на прогресс. Если прогресс игрока больше или равно к прогрессу которому ему нужно было выполнить
                        if(g_StatusMission[id][6] >= g_Quest_Value[g_StatusFun[6][2]])
                        {
                            //Поздравляю! Квест Выполнен!
                            g_MenuQuestMission[id][g_StatusFun[6][2]]++
                         
                            anew = random_num(5000, 15000)
                            color_print(id, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! +%d$", anew)
                            ar_add_user_anew(id, ar_add_user_anew(id)+anew)
                            remove_task(id+57891)
                         
                            //Проверка на выполнил ли игрок все квесты
                            for(new i = 0; i < MENU_QUESTS; i++)
                            {
                                if(g_MenuQuestMission[id][i] > 0)
                                    g_CoinId[id]++
                                else
                                {
                                    g_CoinId[id] = 0
                                    break
                                }
                            }
                        }
                    }
                }
            }
        }
     
        //Функционал квест "Убить за раунд"
        //Глобально. Есть ли данный квест сегодня
        if(g_StatusFun[8][0])
        {
            //Выполнил ли данный квест игрок
            if(g_MenuQuestMission[id][g_StatusFun[8][2]] < 1)
            {
                //[8] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[8][2] - 1) [8] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
                //g_Quest_Value - значения для выполнения квеста
                if(g_StatusMission[id][8] < g_Quest_Value[g_StatusFun[8][2]])
                {
                    // Обнуляем прогресс ибо не убил всех
                    g_StatusMission[id][8] = 0
                }
            }
        }
    }
}

public plugin_end()
{
    if (g_hSQLTuple)
    {
        SQL_FreeHandle(g_hSQLTuple)
    }
}

public task_time_status(task)
{
    static id, anew
    id = task-57891
 
    //[1] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[1][2] - 1) [1] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ. g_Quest_Value - значения для выполнения квеста
    if(g_StatusMission[id][1] < g_Quest_Value[g_StatusFun[1][2]])
    {
        // +1 к прогрессу выполнения квеста
        g_StatusMission[id][1]++

        //Проверка на прогресс. Если прогресс игрока больше или равно к прогрессу которому ему нужно было выполнить
        if(g_StatusMission[id][1] >= g_Quest_Value[g_StatusFun[1][2]])
        {
            //Поздравляю! Квест Выполнен!
            g_MenuQuestMission[id][g_StatusFun[1][2]]++
         
            anew = random_num(5000, 15000)
            color_print(id, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! +%d$", anew)
            ar_add_user_anew(id, ar_add_user_anew(id)+anew)
            remove_task(id+57891)
         
            //Проверка на выполнил ли игрок все квесты
            for(new i = 0; i < MENU_QUESTS; i++)
            {
                if(g_MenuQuestMission[id][i] > 0)
                    g_CoinId[id]++
                else
                {
                    g_CoinId[id] = 0
                    break
                }
            }
        }
    }
}

public Ham_PlayerKilled_Post(iVictim, iKiller)
{
    if(!is_user_connected(iVictim) || !is_user_connected(iKiller))
        return HAM_IGNORED

    if(iVictim != iKiller)
    {
        if(cs_get_user_team(iKiller) == CS_TEAM_T && cs_get_user_team(iVictim) == CS_TEAM_CT) //Функционал квеста "убить кт"
        {
            //Глобально. Есть ли данный квест сегодня
            if(g_StatusFun[0][0])
            {
                //Выполнил ли данный квест игрок
                if(g_MenuQuestMission[iKiller][g_StatusFun[0][2]] < 1)
                {
                    //[1] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[1][2] - 1) [1] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
                    //g_Quest_Value - значения для выполнения квеста
                    if(g_StatusMission[iKiller][0] < g_Quest_Value[g_StatusFun[0][2]])
                    {
                        // +1 к прогрессу выполнения квеста
                        g_StatusMission[iKiller][0]++

                        //Проверка на прогресс. Если прогресс игрока больше или равно к прогрессу которому ему нужно было выполнить
                        if(g_StatusMission[iKiller][0] >= g_Quest_Value[g_StatusFun[0][2]])
                        {
                            //Поздравляю! Квест Выполнен!
                            g_MenuQuestMission[iKiller][g_StatusFun[0][2]]++
                            static anew
                            anew = random_num(5000, 15000)
                            color_print(iKiller, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! !g+%d$", anew)
                            ar_add_user_anew(iKiller, ar_add_user_anew(iKiller)+anew)
                            //Проверка на выполнил ли игрок все квесты
                            for(new i = 0; i < MENU_QUESTS; i++)
                            {
                                if(g_MenuQuestMission[iKiller][i] > 0)
                                    g_CoinId[iKiller]++
                                else
                                {
                                    g_CoinId[iKiller] = 0
                                    break
                                }
                            }
                        }
                    }
                }
            }
        }
        else
        if(cs_get_user_team(iKiller) == CS_TEAM_CT && cs_get_user_team(iVictim) == CS_TEAM_T) //Функционал квеста "убить тт"
        {
            //Глобально. Есть ли данный квест сегодня
            if(g_StatusFun[2][0])
            {
                //Выполнил ли данный квест игрок
                if(g_MenuQuestMission[iKiller][g_StatusFun[2][2]] < 1)
                {
                    //[2] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[2][2] - 1) [2] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
                    //g_Quest_Value - значения для выполнения квеста
                    if(g_StatusMission[iKiller][2] < g_Quest_Value[g_StatusFun[2][2]])
                    {
                        // +1 к прогрессу выполнения квеста
                        g_StatusMission[iKiller][2]++

                        //Проверка на прогресс. Если прогресс игрока больше или равно к прогрессу которому ему нужно было выполнить
                        if(g_StatusMission[iKiller][2] >= g_Quest_Value[g_StatusFun[2][2]])
                        {
                            //Поздравляю! Квест Выполнен!
                            g_MenuQuestMission[iKiller][g_StatusFun[2][2]]++
                            static anew
                            anew = random_num(2000, 10000)
                            color_print(iKiller, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! !g+%d$", anew)
                            ar_add_user_anew(iKiller, ar_add_user_anew(iKiller)+anew)
                         
                            //Проверка на выполнил ли игрок все квесты
                            for(new i = 0; i < MENU_QUESTS; i++)
                            {
                                if(g_MenuQuestMission[iKiller][i] > 0)
                                    g_CoinId[iKiller]++
                                else
                                {
                                    g_CoinId[iKiller] = 0
                                    break
                                }
                            }
                        }
                    }
                }
            }
        }
     
        if(get_user_weapon(iKiller) == CSW_KNIFE) //Функционал квеста "Зарезать"
        {
            //Глобально. Есть ли данный квест сегодня
            if(g_StatusFun[4][0])
            {
                //Выполнил ли данный квест игрок
                if(g_MenuQuestMission[iKiller][g_StatusFun[4][2]] < 1)
                {
                    //[4] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[4][2] - 1) [4] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
                    //g_Quest_Value - значения для выполнения квеста
                    if(g_StatusMission[iKiller][4] < g_Quest_Value[g_StatusFun[4][2]])
                    {
                        // +1 к прогрессу выполнения квеста
                        g_StatusMission[iKiller][4]++

                        //Проверка на прогресс. Если прогресс игрока больше или равно к прогрессу которому ему нужно было выполнить
                        if(g_StatusMission[iKiller][4] >= g_Quest_Value[g_StatusFun[4][2]])
                        {
                            //Поздравляю! Квест Выполнен!
                            g_MenuQuestMission[iKiller][g_StatusFun[4][2]]++
                            static anew
                            anew = random_num(2000, 10000)
                            color_print(iKiller, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! !g+%d$", anew)
                            ar_add_user_anew(iKiller, ar_add_user_anew(iKiller)+anew)
                         
                            //Проверка на выполнил ли игрок все квесты
                            for(new i = 0; i < MENU_QUESTS; i++)
                            {
                                if(g_MenuQuestMission[iKiller][i] > 0)
                                    g_CoinId[iKiller]++
                                else
                                {
                                    g_CoinId[iKiller] = 0
                                    break
                                }
                            }
                        }
                    }
                }
            }
        }
     
        if(get_pdata_int(iVictim, 75) == HIT_HEAD) //Функционал квеста "Убить в голову"
        {
            //Глобально. Есть ли данный квест сегодня
            if(g_StatusFun[9][0])
            {
                //Выполнил ли данный квест игрок
                if(g_MenuQuestMission[iKiller][g_StatusFun[9][2]] < 1)
                {
                    //[9] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[9][2] - 1) [9] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
                    //g_Quest_Value - значения для выполнения квеста
                    if(g_StatusMission[iKiller][9] < g_Quest_Value[g_StatusFun[9][2]])
                    {
                        // +1 к прогрессу выполнения квеста
                        g_StatusMission[iKiller][9]++

                        //Проверка на прогресс. Если прогресс игрока больше или равно к прогрессу которому ему нужно было выполнить
                        if(g_StatusMission[iKiller][9] >= g_Quest_Value[g_StatusFun[9][2]])
                        {
                            //Поздравляю! Квест Выполнен!
                            g_MenuQuestMission[iKiller][g_StatusFun[9][2]]++
                            static anew
                            anew = random_num(2000, 10000)
                            color_print(iKiller, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! !g+%d$", anew)
                            ar_add_user_anew(iKiller, ar_add_user_anew(iKiller)+anew)
                         
                            //Проверка на выполнил ли игрок все квесты
                            for(new i = 0; i < MENU_QUESTS; i++)
                            {
                                if(g_MenuQuestMission[iKiller][i] > 0)
                                    g_CoinId[iKiller]++
                                else
                                {
                                    g_CoinId[iKiller] = 0
                                    break
                                }
                            }
                        }
                    }
                }
            }
        }
     
        //Функционал квест "убить"
        //Глобально. Есть ли данный квест сегодня
        if(g_StatusFun[7][0])
        {
            //Выполнил ли данный квест игрок
            if(g_MenuQuestMission[iKiller][g_StatusFun[7][2]] < 1)
            {
                //[7] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[7][2] - 1) [7] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
                //g_Quest_Value - значения для выполнения квеста
                if(g_StatusMission[iKiller][7] < g_Quest_Value[g_StatusFun[7][2]])
                {
                    // +1 к прогрессу выполнения квеста
                    g_StatusMission[iKiller][7]++

                    //Проверка на прогресс. Если прогресс игрока больше или равно к прогрессу которому ему нужно было выполнить
                    if(g_StatusMission[iKiller][7] >= g_Quest_Value[g_StatusFun[7][2]])
                    {
                        //Поздравляю! Квест Выполнен!
                        g_MenuQuestMission[iKiller][g_StatusFun[7][2]]++
                        static anew
                        anew = random_num(2000, 10000)
                        color_print(iKiller, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! !g+%d$", anew)
                        ar_add_user_anew(iKiller, ar_add_user_anew(iKiller)+anew)
                     
                        //Проверка на выполнил ли игрок все квесты
                        for(new i = 0; i < MENU_QUESTS; i++)
                        {
                            if(g_MenuQuestMission[iKiller][i] > 0)
                                g_CoinId[iKiller]++
                            else
                            {
                                g_CoinId[iKiller] = 0
                                break
                            }
                        }
                    }
                }
            }
        }
     
        //Функционал квест "убить з раунд"
        //Глобально. Есть ли данный квест сегодня
        if(g_StatusFun[8][0])
        {
            //Выполнил ли данный квест игрок
            if(g_MenuQuestMission[iKiller][g_StatusFun[8][2]] < 1)
            {
                //[8] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[8][2] - 1) [8] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
                //g_Quest_Value - значения для выполнения квеста
                if(g_StatusMission[iKiller][8] < g_Quest_Value[g_StatusFun[8][2]])
                {
                    // +1 к прогрессу выполнения квеста
                    g_StatusMission[iKiller][8]++

                    //Проверка на прогресс. Если прогресс игрока больше или равно к прогрессу которому ему нужно было выполнить
                    if(g_StatusMission[iKiller][8] >= g_Quest_Value[g_StatusFun[8][2]])
                    {
                        //Поздравляю! Квест Выполнен!
                        g_MenuQuestMission[iKiller][g_StatusFun[8][2]]++
                        static anew
                        anew = random_num(2000, 10000)
                        color_print(iKiller, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! !g+%d$", anew)
                        ar_add_user_anew(iKiller, ar_add_user_anew(iKiller)+anew)
                     
                        //Проверка на выполнил ли игрок все квесты
                        for(new i = 0; i < MENU_QUESTS; i++)
                        {
                            if(g_MenuQuestMission[iKiller][i] > 0)
                                g_CoinId[iKiller]++
                            else
                            {
                                g_CoinId[iKiller] = 0
                                break
                            }
                        }
                    }
                }
            }
        }
    }
 
    //Функционал квест "Не умереть подряд"
    //Глобально. Есть ли данный квест сегодня
    if(g_StatusFun[6][0])
    {
        //Выполнил ли данный квест игрок
        if(g_MenuQuestMission[iVictim][g_StatusFun[6][2]] < 1)
        {
            //[6] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[6][2] - 1) [6] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
            //g_Quest_Value - значения для выполнения квеста
            if(g_StatusMission[iVictim][6] < g_Quest_Value[g_StatusFun[6][2]])
            {
                // Обнуляем прогресс ибо умер
                g_StatusMission[iVictim][6] = 0
            }
        }
    }
    return HAM_IGNORED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
    if (victim == attacker || !is_user_connected(victim) || !is_user_connected(attacker))
        return HAM_IGNORED;
     
    //Глобально. Есть ли данный квест сегодня
    if(g_StatusFun[3][0])
    {
        //Выполнил ли данный квест игрок
        if(g_MenuQuestMission[attacker][g_StatusFun[3][1]] < 1)
        {
            //[3] - индекс из ВСЕХ КВЕСТОВ. g_StatusFun[3][2] - 1) [3] - тоже индекс ВСЕХ КВЕСТОВ [2] - индекс строки из файла ЗНАЧЕНИЙ.
            //g_Quest_Value - значения для выполнения квеста
            if(g_StatusMission[attacker][3] < g_Quest_Value[g_StatusFun[3][2]])
            {
                // +damage к прогрессу выполнения квеста
                g_StatusMission[attacker][3] += floatround(damage)
             
                //Проверка на прогресс. Если прогресс игрока больше или равно к прогрессу которому ему нужно было выполнить
                if(g_StatusMission[attacker][3] >= g_Quest_Value[g_StatusFun[3][2]])
                {
                    //Поздравляю! Квест Выполнен!
                    g_MenuQuestMission[attacker][g_StatusFun[3][2]]++
                    static anew
                    anew = random_num(1000, 10000)
                    color_print(attacker, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! +%d$", anew)
                    ar_add_user_anew(attacker, ar_add_user_anew(attacker)+anew)
                 
                    //Проверка на выполнил ли игрок все квесты
                    for(new i = 0; i < MENU_QUESTS; i++)
                    {
                        if(g_MenuQuestMission[attacker][i] > 0)
                            g_CoinId[attacker]++
                        else
                        {
                            g_CoinId[attacker] = 0
                            break
                        }
                    }
                }
            }
        }
    }
    return HAM_IGNORED
}


//Меню квестов
public Show_MainMenu(id)
{
    static menu[2048], iLen
    iLen = 0
    new iKeys = (1<<9)
 
    //Выполнил ли игрок все квесты?!
    iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\r[MEAT74.RU] \yКвесты^n\yСтатус: \r%s^n^n", g_CoinId[id] >= 1 ? "Выполнено!" : "Выполняется...")

    //Перечисляем все наши рандомные квесты, прогресс игрока и прогесс который надо выполнить
    for(new i = 0; i < MENU_QUESTS; i++)
    {
        if(g_MenuQuestMission[id][i] == 0)
            iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r[\w#\r] \y%s \r[%d\y|\r%d]^n", g_Quest_Mission[g_QuestMissionRandom[i]], g_StatusMission[id][g_QuestMissionRandom[i]], g_Quest_Value[i])
        else
            iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r[\w#\r] \d%s \r[%d\y|\r%d]^n", g_Quest_Mission[g_QuestMissionRandom[i]], g_StatusMission[id][g_QuestMissionRandom[i]], g_Quest_Value[i])
    }
 
    formatex(menu[iLen], charsmax(menu) - iLen, "^n\r[\w0\r] \wВыйти")
 
    show_menu(id, iKeys, menu, -1, "Menu quest")
    return PLUGIN_HANDLED
}

//Просто чтобы нельзя было нажать куда не надо
public menu_quest(id, iKey)
{
    switch(iKey)
    {
        case 0..9: return PLUGIN_HANDLED
    }
    return Show_MainMenu(id);
}

//Загрузка данных с база данных (смотри выше где это вызывается)
public LoadClient_QueryHandler(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
{
    //Если при выполнения запроса что-то пошло не так
    if(iFailState != TQUERY_SUCCESS)
    {
        log_amx("LoadClient_QueryHandler(): SQL Error #%d - %s", iErrnum, szError)
        return
    }
 
    new id = cData[0]
 
    if(!is_user_connected(id))
    {
        return
    }
 
    new value = -1
 
    //Если результат есть (и все равно что там ничего нет. Просто выполнился запрос)
    if(SQL_NumResults(hQuery))
    {
        //Идем по списку квестов. Узнаем, выполнил ли данный квест игрок или нет
        for(new i = 0; i<MENU_QUESTS; i++)
        {
            //Сохраняем данные из первой строки в нашу переменную
            value = SQL_ReadResult(hQuery, i)
         
            if(value != -1)
                g_MenuQuestMission[id][i] = value // Если условия выполнена то сохраняем
            else
                g_MenuQuestMission[id][i] = 0
        }
     
        //Тут слишком ЖОСКО ДАЖЕ ДЛЯ МЕНЯ. Я и сам не совсем понял почему именно так, но главное работает.
        //Узнаем какие значения (прогресс) у игрока и заприсываем в переменную
        for(new i = 6, ids = 0; i<MENU_QUESTS*2; i++, ids++)
        {
            //Сохраняем данные из первой строки в нашу переменную
            value = SQL_ReadResult(hQuery, i)
         
            if(value != -1)
                g_StatusMission[id][g_QuestMissionRandom[ids]] = value
            else
                g_StatusMission[id][g_QuestMissionRandom[ids]] = 0
        }
     
        //Выполнил ли игрок все квесты
        value = SQL_ReadResult(hQuery, 12)
         
        if(value != -1)
            g_CoinId[id] = value
        else
            g_CoinId[id] = 0
    }
 
    g_DateLoad[id] = true //Ура, загрузка данных успешна удалась
}

//Сохранение в базу данных
public SaveClient_QueryHandler(iFailState, Handle:hQuery, szError[], iErrnum, iData[], iSize, Float:fQueueTime)
{
    if(iFailState != TQUERY_SUCCESS)
    {
        log_amx("SaveClient_QueryHandler(): SQL Error #%d - %s", iErrnum, szError)
        return
    }
}

//Подключение к базе данных
public SQL_Init_Connect()
{
    SQL_SetAffinity("mysql")
 
    g_hSQLTuple = SQL_MakeDbTuple(SQL_HOST, SQL_USER, SQL_PASS, SQL_DB)
 
    SQL_Clear() //Очистка таблицы и файлов в нужное нам время
    PrepareTable() //Создание таблицы и файлов если ее их нет
    FileRead() //Чтение файлов для наших квестов
}

public PrepareTable()
{
    //Создание таблицы в базе данных
    new szQuery[1024], szQuery2[1024]
    formatex(szQuery, charsmax(szQuery),\
    "CREATE TABLE IF NOT EXISTS `amx_quest` (\
    `USER_KEY` varchar(32) NOT NULL,\
    `USER_NAME` varchar(32) COLLATE utf8_unicode_ci NOT NULL,\
    `quest_1_d` int(1) NOT NULL DEFAULT 0,\
    `quest_2_d` int(1) NOT NULL DEFAULT 0,\
    `quest_3_d` int(1) NOT NULL DEFAULT 0,\
    `quest_4_d` int(1) NOT NULL DEFAULT 0,\
    `quest_5_d` int(1) NOT NULL DEFAULT 0,\
    `quest_6_d` int(1) NOT NULL DEFAULT 0,")
 
    formatex(szQuery2, charsmax(szQuery2),
    "`quest_1_v` int(1) NOT NULL DEFAULT 0,\
    `quest_2_v` int(1) NOT NULL DEFAULT 0,\
    `quest_3_v` int(1) NOT NULL DEFAULT 0,\
    `quest_4_v` int(1) NOT NULL DEFAULT 0,\
    `quest_5_v` int(1) NOT NULL DEFAULT 0,\
    `quest_6_v` int(1) NOT NULL DEFAULT 0,\
    `coin` int(1) NOT NULL DEFAULT 0,\
    PRIMARY KEY  (`USER_KEY`))")
 
    add(szQuery,charsmax(szQuery),szQuery2,charsmax(szQuery2))
 
    //Создание папки на сервере если ее нет. Папка нужна для хранение наших данных
    if(!dir_exists("addons/amxmodx/configs/quest"))
        mkdir("addons/amxmodx/configs/quest")
 
    //Если файлов нет то создаем их
    if(!file_exists(szFileNameQuestMission) && !file_exists(szFileNameQuestMissionValue))
    {
        new Value[512]
     
        //Заполнения массива с разными числами
        MissionRandom()
     
        //Записываем массив в файл
        for(new i = 0; i < MENU_QUESTS; i++)
        {
            formatex(Value, charsmax(Value), "%d", g_QuestMissionRandom[i])
            write_file(szFileNameQuestMission, Value, -1)
        }
     
        //Значение прогресса для наших квестов
        MissionValueRandom()
     
        //Записываем массив в файл
        for(new i = 0; i < MENU_QUESTS; i++)
        {
            formatex(Value, charsmax(Value), "%d", g_Quest_Value[i])
            write_file(szFileNameQuestMissionValue, Value, -1)
        }
    }
 
    //Выполняем наш запрос
    SQL_ThreadQuery(g_hSQLTuple, "SaveClient_QueryHandler", szQuery);
}

public FileRead()
{
    new len
    //Анти-падение! Проверяем на наличие файла
    if(file_exists(szFileNameQuestMission) && file_exists(szFileNameQuestMissionValue))
    {
        new szBuffer[128]
        //Читаем первый файл (индекс самих квсетов) и записываем в массив
        for(new i = 0; i < MENU_QUESTS; i++)
        {
            read_file(szFileNameQuestMission,i,szBuffer, charsmax(szBuffer),len)
            g_QuestMissionRandom[i] = str_to_num(szBuffer)
         
            //[0] - "true" : "false" какой квест доступен глобально. [1] - индекс чтобы понять какой квест "тоже индекс ВСЕХ КВЕСТОВ". [2] - индекс чтобы понять какие значения "индекс строки из файла ЗНАЧЕНИЙ"
            g_StatusFun[g_QuestMissionRandom[i]][0] = true
            g_StatusFun[g_QuestMissionRandom[i]][1] = g_QuestMissionRandom[i]
            g_StatusFun[g_QuestMissionRandom[i]][2] = i
        }
     
        //Чицтаем второй файл. Значения. Выше говорится "[2] - индекс чтобы понять какие значения..." g_Quest_Value[i] - про это и говорится [2] хранит индекс = i
        for(new i = 0; i < MENU_QUESTS; i++)
        {
            read_file(szFileNameQuestMissionValue,i,szBuffer, charsmax(szBuffer),len)
            g_Quest_Value[i] = str_to_num(szBuffer)
        }
    }
}

//Свех "ЗАУМНАЯ" система для заполнения массива разными числами
public MissionRandom()
{
    //Идем по массиву
    for (new i = 0; i < MENU_QUESTS; i++)
    {
        //Создаем так сказать точку "возврата" и заполняем наш массив рандомными числами. от 0 до кол-во ВСЕХ КВЕСТОВ
        a: g_QuestMissionRandom[i] = random_num(0,TOTAL_QUESTS-1);
     
        if(i > 0)
        {
            //Идем снова повторно по массиву
            for(new j = 0; j < i; j++)
            {
                //Если массив с индексом j имеет значение = значение с индексом i, то возвращаемся в нашу точку "возврат"
                if(g_QuestMissionRandom[j] == g_QuestMissionRandom[i])
                {
                    goto a;
                }
            }
        }
    }
}

//Создание значений для прогресса. "case" взяты из ВСЕГО КВЕСТА.
//Например g_Quest_Mission[0] - это квест на "играть столько-то времени". case 0 генерирует прогресс сколько надо сыграть чтобы выполнить данный квест
public MissionValueRandom()
{
    for(new i = 0; i < MENU_QUESTS; i++)
    {
        switch(g_QuestMissionRandom[i])
        {
            case 0, 2, 4, 5, 9:
                g_Quest_Value[i] = random_num(5, 10)
            case 6, 8:
                g_Quest_Value[i] = random_num(2, 5)
            case 1, 7:
                g_Quest_Value[i] = random_num(15, 50)
            case 3:
                g_Quest_Value[i] = random_num(10000, 20000)
        }
    }
}

//Чистка всего В УКАЗАНОЕ ВРЕМЯ!
public SQL_Clear()
{
    new iHour[3]
    get_time("%H", iHour, charsmax(iHour))
 
    //если время в часах 00, то удаляем файлы и таблицу в базе данных
    if (equal(iHour, "00"))
    {
        new szQuery[512]
        formatex(szQuery, charsmax(szQuery), "DROP TABLE `amx_quest`")
        SQL_ThreadQuery(g_hSQLTuple, "SaveClient_QueryHandler", szQuery)
     
        if(file_exists(szFileNameQuestMission))
            delete_file(szFileNameQuestMission)
         
        if(file_exists(szFileNameQuestMissionValue))
            delete_file(szFileNameQuestMissionValue)
    }
}

stock color_print(const id, input[], any:...)
{
        new count = 1, players[32];
        static msg[191];                      
        vformat(msg, 190, input, 3);

        replace_all(msg, 190, "!g", "^x04"); // Green Color              
        replace_all(msg, 190, "!n", "^x01"); // Default Color
        replace_all(msg, 190, "!t", "^x03"); // Team Color

        if (id) players[0] = id; else get_players(players, count, "ch");
        {
            for (new i = 0; i < count; i++)
            {                                        
                if (is_user_connected(players[i]))
                {                                        
                    message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                    write_byte(players[i]);
                    write_string(msg);
                    message_end();
                }
            }
        }
    }
 
Последнее редактирование:

SKAJIbnEJIb

visibility
Администратор
Скриптер
Лучшие ответы
609
Реакции
709
Надо заинклудить инклуд арми ранкс, как вот этот например
Сообщение автоматически объединено:

ar_add_user_anew(id, ar_add_user_anew(id)+anew)
Ну это конечно жесть) этот натив уже сам добавляет очки, а не устанавливает как натив cs user money
Посмотрите его описание в инклуде, четко аргументы посмотрите и просто впишите этот натив, поставив в аргументы значения
 

ev_sa

Пользователь
Лучшие ответы
9
Реакции
26
@SKAJIbnEJIb,Как он правильно называется?
Сообщение автоматически объединено:

@SKAJIbnEJIb,Подскажите правильное написание строки пожалуйста.
Сообщение автоматически объединено:

@SKAJIbnEJIb, Так получается?

ar_add_user_anew(+anew)
Сообщение автоматически объединено:

@SKAJIbnEJIb,С инклудом я разобрался, но только выше строка у меня отвечает за рандомную выдачу понитов от ... до ..

Код:
anew = random_num(5000, 15000)
                            color_print(id, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! +%d$", anew)
                            ar_add_user_anew(id, ar_add_user_anew(id)+anew)
Получается так нужно вписать?

ar_add_user_anew(admin, player, anew)
Сообщение автоматически объединено:

И в некоторых местах ещё так есть.

Код:
cs_set_user_money(iKiller, cs_get_user_money(iKiller)+money)
 
Последнее редактирование:

ev_sa

Пользователь
Лучшие ответы
9
Реакции
26
Вроде бы всё сделал правильно (нашёл статью на dev-cs как парень себе выдавал.

Инклуд подключил. Везде проставил всё.

Код:
ar_add_user_anew(id, anew)

ar_add_user_anew(iKiller, anew)

ar_add_user_anew(attacker, anew)
Но теперь такая ошибка:

1631263409333.png
 

SKAJIbnEJIb

visibility
Администратор
Скриптер
Лучшие ответы
609
Реакции
709
@ev_sa, я не помню, с телефона лень смотреть, но там вроде 3 аргумента должно быть, а у вас два. Остальное верно
 

ev_sa

Пользователь
Лучшие ответы
9
Реакции
26
@SKAJIbnEJIb,Как мне узнать 3 аргумент?
Сообщение автоматически объединено:

@SKAJIbnEJIb,В нативе так написано.

native ar_add_user_anew(admin, player, anew)
 

SKAJIbnEJIb

visibility
Администратор
Скриптер
Лучшие ответы
609
Реакции
709
@ev_sa, ну вот, 3 аргумента тут, первый это admin должен быть, а у вас это плеер.


// Добавить/Отнять количество очков /aNew
// admin - id админа, который добавляет очки (-1 не писать сообщение)
// player - id игрока, которому добавляют очки
// anew - количество добавляемых очков (отрицательное значение отнимет очки)
// Возвратит количество очков игрока. -1 в случаи не удачи
native ar_add_user_anew(admin, player, anew)

тут описание же есть даже, написано -1 поставить
Сообщение автоматически объединено:

// admin - id админа, который добавляет очки (-1 не писать сообщение)
Соответственно в первом аргументе поставить -1
 

ev_sa

Пользователь
Лучшие ответы
9
Реакции
26
@SKAJIbnEJIb, native ar_add_user_anew(player, anew, -1)

Так получается?
Сообщение автоматически объединено:

@SKAJIbnEJIb,Всё равно не хочет работать. По всякому перепробовал, не компилируется и всё.
Сообщение автоматически объединено:

У меня в одном случае id, в другом iKiller, а в другом attacker и фиг знает что тут поставить и где.
 
Последнее редактирование:

ev_sa

Пользователь
Лучшие ответы
9
Реакции
26
Тему можно закрыть. Решение найдено.
 

SKAJIbnEJIb

visibility
Администратор
Скриптер
Лучшие ответы
609
Реакции
709
@ev_sa, если найдено, напишите его, чтоб другие видели
 

ev_sa

Пользователь
Лучшие ответы
9
Реакции
26
Сделал так:

ar_add_user_anew(-1, id, anew);
ar_add_user_anew(-1, iKiller, anew);
ar_add_user_anew(-1, attacker, anew);
 
Сверху