- Ошибка
-
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();
}
}
}
}
Не могу скомпилировать файл. Выдаёт ошибку. Пытаюсь, но ни в какую. Вместо денег плагин чтобы выдавал очки anew.
В этой теме было размещено решение! Перейти к решению.
Вложения
-
65.7 KB Просмотры: 177