#define AddMenuToAmxModMenu
const PMM_ALL_POINTS = -1;
/**
* Получает индекс точки или массив с индексами точек в ваш динамичный массив Array
*
* @param szObjectName Название объекта
* Если указано "*" = ищет точки из всех объектов
* Если название невалидно (не может найти) = автоматически присваивается "general" (первый из ObjectNames)
* Если название пустое = ошибка
* @param iPointsCount Количество точек
* Если PMM_ALL_POINTS (-1) = получить ВСЕ точки из объекта
* @param bCheckPointIsFree Проверяет, свободна ли точка
* @param szCallBack CallBack для bCheckPointIsFree. Если этот аргумент пустой,
* то вы можете указать название вашей функции, где вы будете проверять "занята ли точка"
*
* @note Используйте "" чтоб использовать проверку из главного плагина.
* @note Callback должно содержать следующие аргументы "public Point_CallBack(const Float:vecOrigin[3])"
* @note 'return true' чтоб остановить CallBack и 'return false' чтоб продолжить CallBack.
* @note Callback остановится сам, если ни нашел ни одной свободной точки и вернет 'return -1'.
*
* @return Возвращает индекс точки (integer), если 'iPointsCount = 1', иначе возвращает Array handle.
* Если любая ошибка = возвращает 'return -1'
*/
native any: pmm_get_points( const szObjectName[ ] = "general", const iPointsCount = 1, const bool: bCheckPointIsFree = false, const szCallBack[ ] = "" );
/**
* Получает origin и angles по вашему индексу точки
*
* @param iPointIndex Индекс точки
* @param vecOrigin Массив для хранения origin
* @param vecAngles Массив для хранения angles
*
* @return Возвращает true если получило данные точки, иначе false
*/
native bool: pmm_get_point_data( const iPointIndex, const Float: vecOrigin[ 3 ], const Float: vecAngles[ 3 ] = { 0.0, 0.0, 0.0 } );
/**
* Очищает в указанный объект в главном массиве
*
* @param szObjectName Название объекта
* Если указано "*" = ищет точки из всех объектов
* Если название невалидно (не может найти) = автоматически присваивается "general" (первый из ObjectNames)
* Если название пустое = ошибка
*
* @return Возвращает true если указанный объект был очищен в массиве, иначе false
*/
native bool: pmm_clear_points( const szObjectName[ ] = "general" );
new iPointIndex = pmm_get_points( "general", 1 );
if ( iPointIndex == -1 )
return;
new Float: vecOrigin[ 3 ];
pmm_get_point_data( iPointIndex, vecOrigin );
new iPointIndex = pmm_get_points( "general", 1, true );
if ( iPointIndex == -1 )
return;
new Float: vecOrigin[ 3 ];
pmm_get_point_data( iPointIndex, vecOrigin );
{
// some code
new iPointIndex = pmm_get_points( "general", 1, true, "Point_CallBack" );
if ( iPointIndex == -1 )
return;
new Float: vecOrigin[ 3 ];
pmm_get_point_data( iPointIndex, vecOrigin );
// another code
}
public Point_CallBack( const Float: vecOrigin[ 3 ] )
{
if ( vecOrigin[ 2 ] >= 128.0 )
{
// Точка подходит
return true;
}
// Точка не подходит - берем следующую
return false;
}
new Array: arPoints = pmm_get_points( "market_place", 5 );
if ( arPoints != Invalid_Array )
{
/**
* В arPoints мы получили 5 случайных точек из объекта "market_place"
* Далее мы делаем уже свой нужный код
*/
// Не забываем уничтожить свой массив с точками
ArrayDestroy( arPoints );
}
new Array: arPoints = pmm_get_points( "*", PMM_ALL_POINTS );
if ( arPoints != Invalid_Array )
{
/**
* В arPoints мы получили абсолютно все точки из всех объектов
* Далее мы делаем уже свой нужный код
*/
// Не забываем уничтожить свой массив с точками
ArrayDestroy( arPoints );
}
new Array: arPoints = pmm_get_points( "presents", PMM_ALL_POINTS );
if ( arPoints != Invalid_Array )
{
/**
* В arPoints мы получили все точки из объекта "presents"
* Далее мы делаем уже свой нужный код
*/
// Не забываем уничтожить свой массив с точками
ArrayDestroy( arPoints );
}
// Очищаем главный массив от точек объекта "presents"
pmm_clear_points( "presents" );