Не могу подключить бонусы anew в стороннем плагине

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
29
Реакции
0
Ошибка
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.
 
В этой теме было размещено решение! Перейти к решению.

Вложения

iPlague

♿️
Сообщения
230
Реакции
130
Помог
2 раз(а)
Вот так у вас ar_add_user_anew(id, anew)
Вот так должно бытьnative ar_add_user_anew(admin, player, anew);
Ещё можно открыть army_ranks_ultimate.inc и посмотреть как правильно.
1631263609440.png
 
Сообщения
3,593
Реакции
1,577
Помог
141 раз(а)
ev_sa, смотри инклуд, где у тебя этот натив. У тебя не хватает аргумента(-ов)
 
Сообщения
29
Реакции
0
iPlague, А как его поставить правильно то? Уже по всякому перепробовал.

ar_add_user_anew(player, anew, -1)

У меня в одном случае id, в другом iKiller, а в другом attacker и фиг знает что тут поставить и где.
10 Сен 2021
Nordic Warrior, Это я уже обнаружил. Но там якобы мне объяснили так:


Код:
 ну вот, 3 аргумента тут, первый это admin должен быть, а у вас это плеер.

// Добавить/Отнять количество очков /aNew

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

native ar_add_user_anew(admin, player, anew)

тут описание же есть даже, написано -1 поставить

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

Соответственно в первом аргументе поставить -1
C++
 

iPlague

♿️
Сообщения
230
Реакции
130
Помог
2 раз(а)
ev_sa, native ar_add_user_anew(admin, player, anew)
ar_add_user_anew(-1, id, 666)
 
Сообщения
3,593
Реакции
1,577
Помог
141 раз(а)
ar_add_user_anew(-1, player, anew)
 
  • Нравится
Реакции: Ayk
Сообщения
29
Реакции
0
Nordic Warrior,

А если выше iKiller стоит, то получается так?

color_print(iKiller, "!g[MEAT74.RU] !nТы выполнил задание! Получай награду! !g+%d$", anew)

Код:
ar_add_user_anew(-1, iKiller, anew)
C++
10 Сен 2021
Nordic Warrior, Не хочет так.
1631281971453.png
10 Сен 2021
iPlague, Спасибо!
10 Сен 2021
А можно ещё вопрос?
10 Сен 2021
Код:
anew = random_num(5000, 15000)
color_print(id, "!g[Сервер] !nТы выполнил задание! Получай награду! +%d$", anew)
ar_add_user_anew(-1, id, anew);
remove_task(id+57891)
C++
Как мне тут сделать, чтобы за выполнение задания давало допустим от 100 до 1000 anew очков? Это же в 1 строке надо переделать?
 
Последнее редактирование:

iPlague

♿️
Сообщения
230
Реакции
130
Помог
2 раз(а)
ev_sa, судя по всему ответы на следующие вопросы будут платными. Ты даже если очевидные вещи не можешь сделать самостоятельно.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу