gamecms_present.inc

#if defined _gamecms_present_included
  #endinput
#endif
#define _gamecms_present_included

stock const CMS_PRESENTS_CLASSNAME[] = "gamecms_present";
stock const CMS_PRESENTS_MODEL[] = "models/supplybox.mdl";

/*Параметр доступ для поднятия презента*/
enum ePresentsAccess (+=1)
{
	ACCESS_GAMECMS = -3,		/*разрешено только зарегистрированным на сайте, если есть плагин gamecms_api*/
	ACCESS_CT,			/*разрешено только контр-террористам*/
	ACCESS_TT,			/*разрешено только террористам*/
	ACCESS_ALL			/*разрешено всем*/
}

/*Свойства презента*/
enum _:ePresentsData
{
	prIdKey,					/*уникальный номер презента*/
	prName[MAX_NAME_LENGTH*3],	/*название презента*/
	prFor,						/*параметр доступа ePresentsAccess*/
	prMinPlayers,				/*мин. количество игроков*/
	prCount,					/*количество презентов за карту*/
	prModel[MAX_NAME_LENGTH],	/*название модели*/
	prSubModel,					/*номер субмодели*/
	Float:prTTL					/*время "жизни" модели, после которого она будет удалена*/
}

enum _:eTakePresent
{
	TP_RESTRICT,						//0 - презент запрещено поднимать
	TP_GRANTED_STD_MESSAGE_GRANT,		//1 - презент будет поднят, будет выведено стандартное сообщение о поднятии презента
	TP_GRANTED_STD_MESAGE_RESTRICT,		//2 - презент будет поднят, НЕ будет выводиться стандартное сообщение о поднятии презента
	TP_RESTRICT_STD_MESSAGE_RESTRICT	//3 - презент НЕ будет поднят, НЕ будет выводиться сообщение о поднятии презента
}

/**Добавление презента
*
*	@prUnic - уникальный номер презента. 
*		Имеет сквозную нумерацию, не должен повторяться в других плагинах. Начальный номер - 5.
*	@prName- название презента
*	@prLimit- количество презентов за карту
*		-1 - нет лимита
*		-2 - запретить автоматический спавн по таймеру (только для ручного добавления)
*	@prAccess- доступ ePresentsAccess
*	@prMinPlayers- мин. количество игроков
*	@prModel - название модели
*	@prSubModel - номер субмодели
*	@flTTL - время "жизни" модели, после которого она будет удалена, секунд
*		0.0 - удалится по общим правилам
*		-1.0 - не удалять, пока не поднимут презент
*	@return - 1- при удачном добавлении
*	Пример: CmsAddPresent(5, "+10 здоровья", 5, -3, 0, "health_kit");
*/
native CmsAddPresent(prUnic, prName[], prLimit=0, prAccess=0, prMinPlayers=0, prModel[]="",	prSubModel=0, Float:flTTL = 0.0)


/** Получение данных о презенте по его уникальному номеру
*	
*	@idKey - уникальный номер презента
*	@Data - массив с данными о презенте
*		Data[0] - доступ ePresentsAccess
*		Data[1] - мин. количество игроков для появления презента
*		Data[2] - количество (сколько может выпасть таких презентов)
*	@Name[]	- название презента
*	@Len 	- размер буфера для записи названия
*/
native CmsGetPresentInfoByKey(idKey, Data[3], Name[], Len)


/** Спавн презента по его уникальному номеру
* @idKey		Уникальный номер презента (если 0- номер будет выбран рандомно из имеющихся)
* @origin[3]	Координаты для спавна презента (если 0.0- авто-определение из возможных точек)
* @noanons		Оповещение о появлении презента (true- тихий спавн, false- стандартное оповещение)
* @owner		Кому предназначен презент (параметр @prAccess при создании презента)
* @flTime		Время жизни презента (секунд до удаления. 0.0 - не удалять)
* @return		Индекс созданного объекта
*/
native CmsSpawnPresentById(idKey, Float:origin[]={0.0, 0.0, 0.0}, bool:noanons = false, owner = 0, Float:flTime = 0.0)


/** Удаление презента из игры по параметрам
* @idKey	Уникальный номер презента
* @iOwner	Владелец презента
* @instant	Удалить из базы презентов
* @force	Удаление всех выпавших презентов БЕЗ исключения
* @return	1- при успешном удалении из базы
*/
native CmsRemovePresent(idKey = 0, iOwner = 0, bool:instant = false, bool:force = false)


/** Массив с уникальными номерами презентов
* @idKey	Уникальный номер презента из ячейки index
* @note		idKey = ArrayGetCell(Hahdle:array, index)
* @return	Указатель массива
*/
native Array:CmsGetPresentsIndexes()

/** Количество зарегистрированных презентов
* @return	Вернет количество ячеек в массиве уникальных номеров
*/
native CmsGetPresentsCount()

/** Количество презентов на карте в данный момент
* @return	Количество презентов на карте в данный момент
*/
native CmsGetSpawnedPresentsCount()

/** Получение режима спавна презентов
* @return	Параметр режима
* 			1- по-умолчанию, включен режим автоматического спавна, доступен ручной спавн
* 			2- режим автоматического спавна Выключен, доступен Только ручной спавн
* 			3- включен режим автоматического спавна по точкам из файла *map.spawns.cfg, доступен ручной спавн
* 			0- отключить спавн презентов (по сути- временная приостановка работы плагина)
*/
native CmsPresentGetSpawnMode()

/** Переключение режима спавна презентов
* @iMode	Параметр режима
* 			1- по-умолчанию, включен режим автоматического спавна, доступен ручной спавн
* 			2- режим автоматического спавна Выключен, доступен Только ручной спавн
* 			3- включен режим автоматического спавна по точкам из файла *map.spawns.cfg, доступен ручной спавн
* 			0- отключить спавн презентов (по сути- временная приостановка работы плагина)
*/
native CmsPresentSetSpawnMode(iMode)

/** Получение точек спавна презентов из файла
* @iOrigins	Массив для записи координат точки спавна
* @return	1- при наличии валидной точки спавна
*/
native CmsGetPresentsOriginsFromFile(Float:flOrigins[3])

/** Вызывается при остановке работы плагина GameCMS_Present (ядро)
*/
forward OnPresentCoreStopped()


/** Вызывается при попытке поднять презент, если он создан с параметром @prAccess- доступ: 0 - всем
* @iClient		Индекс игрока, который пытается поднять
* @idKey		Уникальный номер презента
* @iEntity		Индекс entity презента
* @szMessage	Массив для записи сообщения о поднятии презента для дальнейшего вывода игроку
*				Используется вместе с кодом возврата TP_GRANT_STD_MESAGE_RESTRICT
*
* @return		Вернет код возврата eTakePresent
*/
forward OnTakePresent(iClient, idKey, iEntity, szMessage[MAX_FMT_LENGTH])


/** Вызывается при фактическом поднятии любого презента
* @iClient	Индекс игрока, поднявшего презент
* @idKey	Уникальный номер презента
* @iEntity	Индекс entity презента
* @noreturn
*/
forward OnTakePresentSave(iClient, idKey, iEntity)

/** Вызывается перед спавном презента
* @idKey	Уникальный номер презента
* @return	Возвращаемые значения:
* 			1 - презент не появится, будет вызван спавн следующего презента (если предусмотрено настройкой)
* 			0 - презент появится с параметрами, заданными при создании
*/
forward OnValidateSpawnPresent(idKey)

/** Вызывается при фактическом спавне презента на карте
* @idKey	Уникальный номер презента
* @iEntity	Индекс entity презента
* @noreturn
*/
forward OnSpawnPresent(idKey, iEntity)