- Ошибка
-
error 088 number of arguments does not match definition
- Компилятор
- Локальный
- Amx Mod X
- 1.9.0
- Исходный код
-
#include <amxmodx> #include <amxmisc> #include <cstrike> #include <fun> #include <engine> #include <fakemeta> #include <hamsandwich> #include <sqlx> #include <army_ranks_ultimate.inc> #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[Сервер] !nТы выполнил задание! Получай награду! +%d$", anew) 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[Сервер] !nТы выполнил задание! Получай награду! +%d$", anew) 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[Сервер] !nТы выполнил задание! Получай награду! +%d$", anew) 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[Сервер] !nТы выполнил задание! Получай награду! !g+%d$", anew) 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[Сервер] !nТы выполнил задание! Получай награду! !g+%d$", anew) 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[Сервер] !nТы выполнил задание! Получай награду! !g+%d$", anew) 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[Сервер] !nТы выполнил задание! Получай награду! !g+%d$", anew) 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[Сервер] !nТы выполнил задание! Получай награду! !g+%d$", anew) 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[Сервер] !nТы выполнил задание! Получай награду! !g+%d$", anew) 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[Сервер] !nТы выполнил задание! Получай награду! +%d$", anew) 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(); } } } }
C++
Не могу скомпилировать файл. Выдаёт ошибку. Пытаюсь, но ни в какую. Вместо денег плагин чтобы выдавал очки anew.
В этой теме было размещено решение! Перейти к решению.
Вложения
-
65.7 KB Просмотры: 181