cmsstats_mysql.inc

#if defined _cmsstats_mysql
  #endinput
#endif
#define _cmsstats_mysql

#define is_valid_player(%1)	(1 <= %1 <= MAX_PLAYERS)
#define OFFSET_CSTEAMS		114

/**Массив основной статистики*/
enum _:MAIN_STATS
{
	FRAGS,			/*Фраги*/
	DEATHS,			/* Смерти*/
	HEADSHOTS,		/* В голову*/
	TEAMKILLS,		/* Убийства своих*/
	SHOTS,			/* Выстрелов*/
	HITS,			/* Попаданий*/
	DAMAGE,			/* Урон*/
	PLACE			/* Место в статистике*/
}

/**Массив полной статистики*/
enum _:STATS_ARR_SIZE
{
	SUICIDE = MAIN_STATS,		/* Самоубийства*/
	DEFUSING,		/* Начал разминировать бомб*/
	DEFUSED,		/* Разминировал бомб*/
	PLANTED,		/* Поставил бомб*/
	EXPLODE,		/* Взорвал бомб*/
	LASTTIME,		/* Когда был последний раз (в UNIX времени)*/
	GAMETIME,		/* Время в игре (в секундах)*/
	CONNECTS,		/* Сыграл игр*/
	ROUNDS,			/* Сыграл раундов*/
	WINT,			/* Выиграл за Т*/
	WINCT,			/* Выиграл за СТ*/
	RESHOSTAGE,		/* Спас заложников*/
	KILLASSIST,		/* Помощь в убийстве*/
	KILLSTREAK[2],	/*Череда убийств*/
	DEATHSTREAK[2],	/*Череда смертей*/
	Float:SKILL		/* Скилл игрока*/
	, ID
}


/** Массив дополнительной статистики STATS_ARR_SIZE_EXT*/

#define STATS_ARR_SIZE_EXT PLDATA
enum _:PLDATA
{
	Nick[MAX_NAME_LENGTH] = STATS_ARR_SIZE,
	AuthId[MAX_AUTHID_LENGTH],
	IP[MAX_IP_WITH_PORT_LENGTH],
	plStatus					/*-1 - новый игрок, 1- существующий, 0- не учитываемый игрок*/
}
		
enum _:CSDM_STATUS
{
	CSDM_STATUS_DISABLED,		/*0- если модуль CSDM выключен или режим CSDM не активен.*/
	CSDM_STATUS_ENABLED,		/*1- если модуль CSDM включен*/
	CSDM_STATUS_ENABLED_FFA		/*2- если модуль CSDM включен и включен режим FFA.*/
}
/** Создание пункта (идентификатора) дополнительной статистики
* @param szColumnName		Название нового столбца в БД статистики
* @return       			Индекс в массиве дополнительной статистики, -1 в случае неудачи
*
* @note					Создается стобец в базе данных статистики типа INT(11)
*/
native cmsstats_create_extra_data(szColumnName[]);


/** Получение значения пункта дополнительной статистики
* 
* @param iClient       	Индекс игрока
* @param iDataIndex      	Индекс идентификатора дополнительной статистики, полученный при его создании
* @param szColumnName		Название идентификатора дополнительной статистики
*
* @return       			Значение пункта дополнительной статистики
*/
native cmsstats_get_extra_data(iClient, iDataIndex = -1, szColumnName[] = "");


/** Получение данных о дополнительной статистики
* 
* @param iSize       		Размер массива зарегистрированной дополнительной статистики
*
* @return       			Дескриптор Array:массива дополнительной статистики, Invalid_Array в случае неудачи
*/
native Array:cmsstats_get_extra_data_handle(&iSize);


/** Добавление значения к пункту дополнительной статистики
* 
* @param iClient       	Индекс игрока
* @param iDataIndex      	Индекс идентификатора дополнительной статистики, полученный при его создании
* @param iValue			Целочисленное значение для добавления (убавления, при отрицательном значении)
* @param szColumnName		Название идентификатора дополнительной статистики
*
* @return       			Новое значение пункта дополнительной статистики с учетом добавленного значения
*/
native cmsstats_add_extra_data(iClient, iDataIndex = -1, iValue, szColumnName[] = "");


/** Получить количество записей в статистике
* @return	количество записей в статистике
*/
native cmsstats_get_statsnum();


/**
 * Аналог функции get_stats из модуля CSX
 * Получает статистику игрока по месту в топе
 
 * @note The permanent storage is updated on client disconnect.
 * @note For a list of possible body hitplaces see the HIT_* constants in
 *       amxconst.inc
 * @note The fields in the statistics are:
 *          0 - Kills
 *          1 - Deaths
 *          2 - Headshots
 *          3 - Teamkills
 *          4 - Shots
 *          5 - Hits
 *          6 - Damage
 *          7 - Rank
 *
 * @param index         Rank index
 * @param stats         Buffer to copy statistics to
 * @param bodyhits      Buffer to copy body hits to
 * @param name          Buffer to copy client name to
 * @param len           Maximum name buffer size
 * @param authid        Buffer to copy client auth id to
 * @param authidlen     Maximum authid buffer size
 *
 * @return              Next rank index (> 0 and > index), or 0 if no more
 *                      statistics exist
 */
#pragma deprecated 
native cmsstats_get_stats(place, stats[8], bodyhits[8], name[], len, authid[] = "", authidlen = 0);

/** Получает массив статистики игрока по id.
*
* @note	Является аналогом натива модуля CSX
* 	get_user_stats(index,stats[8],bodyhits[8]);
*
* @return	Место игрока в статистике
* 		-2, если игрока нет на сервере
* 		0	- если у игрока STEAM_ID_LAN или что то в этом роде 
* 		или игрок не успел загрузить данные из БД
*/
native cmsstats_get_user_stats(id, stats[8],bodyhits[8]);

/** То же, что и cmsstats_get_stats, только по id игрока, находящегося на сервере
* и без получения steamid и ника
* @param index         Client index
* @return	Место игрока в статистике
* 		-2, если игрока нет на сервере
* 		0	- если у игрока STEAM_ID_LAN или что то в этом роде 
* 		или игрок не успел загрузить данные из БД
*/
native cmsstats_get_user_stats2(index, stats[STATS_ARR_SIZE], len, bodyhits[8]);

/** То же, что и cmsstats_get_user_stats, но вернет основной массив данных
* @param index		Client index
* @param session	За сессию (true) / за все время (false)
* @return	Место игрока в статистике
* 		-2, если игрока нет на сервере
* 		0	- если у игрока STEAM_ID_LAN или что то в этом роде 
* 		или игрок не успел загрузить данные из БД
*/
native cmsstats_get_user_stats3(index, stats[STATS_ARR_SIZE], bool:session=false);

/** Статистика используемого оружия за сессию (от коннекта до выхода игрока)
* @note Является аналогом натива модуля CSX
* 	get_user_wstats(index, wpnindex, stats[8], bodyhits[8]);
* @param index		Client index
* @param wpnindex	Weapon index
* @return       Если wpnindex > 0, вернет 1, если оружие использовалось, 0- если нет.
* 			Если wpnindex = 0, вернет количество используемого оружия
*/
native cmsstats_get_user_wstats(index, wpnindex, stats[8], bodyhits[8]);

/** Статистика по каждой жертве за раунд
* @note Является аналогом натива модуля CSX
* 	get_user_vstats(attacker, victim, stats[8], bodyhits[8], wpnname[]="", len=0);
* @param attacker	Client index (attacker)
* @param victim		Client index (victim)
* @return       	Если wpnindex > 0, вернет 1, если оружие использовалось, 0- если нет.
* 				Если wpnindex = 0, вернет количество используемого оружия
* 
* @note	Если victim = 0, вернет статистику по всем жертвам
*/
native cmsstats_get_user_vstats(attacker, victim, stats[8], bodyhits[8], wpnname[]="", len=0);

/** Статистика по каждому нападавшему за раунд
* @note	Является аналогом натива модуля CSX
* 	get_user_astats(victim, attacker, stats[8], bodyhits[8], wpnname[]="", len=0);
* @param attacker	Client index (attacker)
* @param victim		Client index (victim)
* @return       	Если wpnindex > 0, вернет 1, если оружие использовалось, 0- если нет.
* 				Если wpnindex = 0, вернет количество используемого оружия
* 
* @note Если victim = 0, вернет статистику по всем жертвам
*/
native cmsstats_get_user_astats(victim, attacker, stats[8], bodyhits[8], wpnname[]="", len=0);

/** Получить место игрока в статистике
* @return	место игрока в статистике
*/
native cmsstats_get_user_place(id)

/** Добавить/отнять значение в статистике игрока
* @param ident	элемент массива полной статистики
* @param value	добавляемое значение
* @param save	сохранять сделанные изменения в БД минуя фильтры записи
* @return	1 при удачной установке
*/
native cmsstats_add_user_value(id, ident, any:value, bool:save = false)

/** Установка нужного значения в элементе массива полной статистики игрока
* @return	1 при удачной установке
*/
native cmsstats_set_user_value(id, ident, any:value, bool:save = false)

/** Получение значения пункта статистики(ident)
* @return	Вернет значение пункта статистики (ident)
*/
native cmsstats_get_user_value(id, ident)

/** Разрешен ли учет и запись статистики для данного игрока
* @param id		Индекс игрока
* @param szAuth	Массив для записи steamid игрока
* @param iLen	Размер массива
* @return		Вернет true, если запись в БД будет произведена.
*/
native bool:cmsstats_is_user_write(id, szAuth[], iLen)

/** Установка разрешения на учет и запись статистики для данного игрока
* @param id			Индекс игрока
* @param iAllow		Разрешение. 1- разрешить, 0- запретить.
* @return			Вернет предыдущее значение параметра
*					-2, если игрока нет на сервере
*/
native cmsstats_set_user_write(id, iAllow)

/** Проверка режима CSDM
* @return	enum CSDM_STATUS
*/
native cmsstats_get_csdm_status()

/** Статистика лучших игроков за раунд
* @param iBestScore
* Значения:
* 	[0]	- best player index
* 	[1] - kills
* 	[2] - headshots
* @param iMostDamage
* Значения:
* 	[0]	- best player index
* 	[1] - damage
* 	[2] - hits
* @return	вернет 1, если есть лучшие игроки за раунд, 0- если нет.
*/
native cmsstats_get_rbest_users(iBestScore[3], iMostDamage[3])

/** Возвратит скилл игрока (ELO)
* @param index         Client index
* @param skillname     Buffer to copy skillname to
* @param namelen       Maximum name buffer size
* @param skill_level   Skill level
*
* @return	Скилл игрока
*/
native Float:cmsstats_get_user_skill(index, skillname[] = "", namelen = 0, &skill_level = 0);

/** Сброс статистики игроков
*
* @param szType		Метод сброса статистики:
*					"all" - для сброса всей статистики
*					"main" - для сброса основной статистики enum _:MAIN_STATS и enum _:STATS_ARR_SIZE
*					"extra" - для сброса дополнительной статистики, зарегистрированной сторонними плагинами
* @param szAuth		Authid (STEAM) игрока или "all" для сброса статистики всех игроков
* @return				1- при удачном сбросе, иначе- 0
*
* @note				При удачном сбросе вызывает форвард OnCmsStatsResetStats
*/
native cmsstats_reset_user_stats(szType[], const szAuth[]);

/** Возвратит состояние учета статистики
* @return true, если статистика учитывается, false- если нет.
*/
native bool:cmsstats_stats_enable();


/** 
* Получение настроек пользователя из базы данных
*
* @param iClient		Индекс игрока
* @param sszSettingName	Идентификатор настройки (название)
* @param szValue			Массив для записи значения настройки
* @param value_length	Размер массива для записи значения настройки
*
* @return				- размер записанного массива, если передается массив для записи значения
* 						- цифровое значение настройки, если массив не передан
* 						- -1, если идентификатор настройки не найден
*/
native cmsstats_get_user_setting(iClient, szSettingName[], szValue[] = "", value_length = 0);

/** 
* Сохранение настроек пользователя в базу данных
*
* @param iClient		Индекс игрока
* @param sszSettingName	Идентификатор настройки (название)
* @param szValue			Массив со значением настройки
* @param delete			Удалить настройку
*
* @param return			true - при успешном изменении (удалении)
						false- при неудаче
*/
native bool:cmsstats_set_user_setting(iClient, szSettingName[], szValue[], bool:delete = false);


/** Вызывается, когда плагин подключился к базе
*/
forward OnCmsStatsInitializedPost(Handle:Tuple)

/** Вызывается когда игрок зашел на сервер и получил все данные
* @param exists		Не используется
* @param iPlace		Место игрока в топе
*/
forward OnCmsStatsPutinserver(id, bool:exists, iPlace)

/** Вызывается при выходе игрока с сервера или обнулении статистики
* @param id		индекс игрока
*/
forward OnCmsStatsDisconnect(id)

/** Вызывается при событиях (убийство, установка/ разминирование и т.п.)
* @param ActType	тип события:
* @param firstPl	киллер (бомбер)
* @param secondPl	жертва (дефузер)
* @param wpnId		индекс оружия киллера
* @param hitPlace	место попадания в жертву
* @param kds		череда смертей/ убийств
* 				kds[0] - череда убийств киллера
* 				kds[1] - череда смертей жертвы
*/
forward OnCmsStatsAction(ActType, firstPl, secondPl, wpnId, hitPlace, kds[])
	
/** Вызывается при сбросе статистики игрока
* @param id	индекс игрока
*/
forward OnCmsStatsResetStats(id)

/** Вызывается, когда плагин по каким-то причинам был остановлен
*/
forward OnCmsStatsStop()

/** Вызывается при смене состояния статистики
* @param bStatsEnable	Состояние учета статистики: true- статистика учитывается, false- не учитывается
*/
forward OnCmsStatsSwitchStatus(bool:bStatsEnable)

/** Вызывается при смене позиции игрока в Топе
* @param id			Индекс игрока
* @param iOldValue	Предыдущая позиция в топе
* @param iNewValue	Новая позиция в топе
*/
forward OnCmsStatsUpdateTopPosition(id, iOldValue, iNewValue)

/** Возвратит реальное игровое время, если установлен плагин GameCMS Time Awards
* @note	Учитывает время, в течение которого клиент играл за одну из команд
* @param index         Client index
*/
//native get_user_time_real(index);