Seviel
21.11.2018, 00:41
GoodArea
Описание
Данная библиотека позволяет удобно работать с динамическими зонами streamer-а (http://github.com/samp-incognito/samp-streamer-plugin/releases) в стиле zcmd.
Функции
Добавление/изменение функции, возвращает 1 - при успешном выполнении, 0 - фиаско.
SetAreaFunction(STREAMER_TAG_AREA area, const function[])
Удаление/открепление функции от динамической зоны.
Возвращает 1 - если был откреплен, 0 - если динамическая зона не была связана с функцией.
RemoveAreaFunction(GOOD_AREA_TAG area)
Создание групп дин. зон, все добавленные дин. зоны в группу будут вызывать эту функцию.
Возвращает id группы, а при неудачном выполнение функции возвращает -1.
CreateGroupGoodAreas(const function[])
Добавление дин. зоны к группе.
Аргументы: id группы, дин. зона, а третий это что-то вроде id, чтобы в функции с кучей дин. зон было удобнее работать.
AddGroupGoodAreas(ga_groupid, STREAMER_TAG_AREA area, areaindex)
Получает id и index(опционально) GA(Good Area) группы игрока, если игрок находится в динамической зоне связанной с GA группой.
Возвращает: 1 - если игрок находится в динамической зоной связанной с GA, 0 - если нет.
GetPlayerGroupGoodAreaID(playerid, &areaid, &areaindex = 0)
Удаляет группу GA.
Возвращает: 1 - успех, 0 - фиаско.
DeleteGroupGoodAreas(ga_groupid)
Константы
Данная константа позволяет вам изменять максимальное возможное количество доступных наименований функций.
#define MAX_GOOD_AREAS 5000
А эта константа позволяет менять tag в зависимости от версии streamer-а, по стандарту она выглядит так:
#define GOOD_AREA_TAG STREAMER_TAG_AREA:
Типы вызовов функции:
GA_RESPONSE_ENTER - Когда игрок вошел в дин. зону
GA_RESPONSE_LEAVE - Когда игрок вышел из дин. зоны
GA_RESPONSE_PRESS_KEY - Когда игрок нажал кнопку в дин. зоне
Пример кода
Обычный:
public OnGameModeInit()
{
new STREAMER_TYPE_AREA area = CreateDynamicSphere(310.4742, 2055.8142, 17.6, 2.0);
SetAreaFunction(area, GoodArea:test);
}
// - Первый вариант
AreaResponse:test(playerid, response, key)
{
switch(response)
{
case GA_RESPONSE_ENTER:
{
SendClientMessage(playerid, -1, "Вы вошли зону");
}
case GA_RESPONSE_LEAVE:
{
SendClientMessage(playerid, -1, "Вы вышли из зоны");
}
case GA_RESPONSE_PRESS_KEY:
{
if(key & KEY_WALK) SendClientMessage(playerid, -1, "Вы нажали на ALT в зоне");
else if(key == KEY_JUMP) SendClientMessage(playerid, -1, "Вы нажали на прыжок в зоне");
else SendClientMessage(playerid, -1, "Вы нажали на кнопку в зоне");
}
}
return 1;
}
// - Второй вариант
goodarea test(playerid, response, key)
{
switch(response)
{
case GA_RESPONSE_ENTER:
{
SendClientMessage(playerid, -1, "Вы вошли зону");
}
case GA_RESPONSE_LEAVE:
{
SendClientMessage(playerid, -1, "Вы вышли из зоны");
}
case GA_RESPONSE_PRESS_KEY:
{
if(key & KEY_WALK) SendClientMessage(playerid, -1, "Вы нажали на ALT в зоне");
else if(key == KEY_JUMP) SendClientMessage(playerid, -1, "Вы нажали на прыжок в зоне");
else SendClientMessage(playerid, -1, "Вы нажали на кнопку в зоне");
}
}
return 1;
}
Группы:
public OnGameModeInit()
{
new group1 = CreateGroupGoodAreas(GoodArea:test);
new STREAMER_TAG_AREA:area = CreateDynamicSphere(310.4742, 2055.8142, 17.6, 2.0);
CreateDynamicCP(310.4742, 2055.8142, 17.6, 2.0);
AddGroupGoodAreas(group1, area, 1);
area = CreateDynamicSphere(310.4742, 2050.0, 17.6, 2.0);
CreateDynamicCP(310.4742, 2050.0, 17.6, 2.0);
AddGroupGoodAreas(group1, area, 2);
return 1;
}
// - Первый вариант
GAResponse:test(playerid, response, key, index)
{
new string[144];
switch(response)
{
case GA_RESPONSE_ENTER:
{
format(string, sizeof string, "Вы вошли зону с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
case GA_RESPONSE_LEAVE:
{
format(string, sizeof string, "Вы вышли из зоны с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
case GA_RESPONSE_PRESS_KEY:
{
if(key & KEY_WALK)
{
format(string, sizeof string, "Вы нажали на ALT в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
else if(key == KEY_JUMP)
{
format(string, sizeof string, "Вы нажали на прыжок в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
else
{
format(string, sizeof string, "Вы нажали на кнопку в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
}
}
return 1;
}
// - Второй вариант
goodgarea test(playerid, response, key, index)
{
new string[144];
switch(response)
{
case GA_RESPONSE_ENTER:
{
format(string, sizeof string, "Вы вошли зону с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
case GA_RESPONSE_LEAVE:
{
format(string, sizeof string, "Вы вышли из зоны с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
case GA_RESPONSE_PRESS_KEY:
{
if(key & KEY_WALK)
{
format(string, sizeof string, "Вы нажали на ALT в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
else if(key == KEY_JUMP)
{
format(string, sizeof string, "Вы нажали на прыжок в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
else
{
format(string, sizeof string, "Вы нажали на кнопку в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
}
}
return 1;
}
Примечание
Подключать только после streamer-а.
Возможно не будет работать на старых версиях плагина.
Если вы используете E_STREAMER_EXTRA_ID, то лучше откажитесь от инклуда.
Это alpha версия, не бейте меня, пожалуйста.
Скачать
Тут можете скачать (https://github.com/Barty-Knox/GoodArea/releases/tag/1.2.1)
Автор: knox (https://www.youtube.com/channel/UCcWcOCdPmBFK4_pLCE6GMaQ)
Описание
Данная библиотека позволяет удобно работать с динамическими зонами streamer-а (http://github.com/samp-incognito/samp-streamer-plugin/releases) в стиле zcmd.
Функции
Добавление/изменение функции, возвращает 1 - при успешном выполнении, 0 - фиаско.
SetAreaFunction(STREAMER_TAG_AREA area, const function[])
Удаление/открепление функции от динамической зоны.
Возвращает 1 - если был откреплен, 0 - если динамическая зона не была связана с функцией.
RemoveAreaFunction(GOOD_AREA_TAG area)
Создание групп дин. зон, все добавленные дин. зоны в группу будут вызывать эту функцию.
Возвращает id группы, а при неудачном выполнение функции возвращает -1.
CreateGroupGoodAreas(const function[])
Добавление дин. зоны к группе.
Аргументы: id группы, дин. зона, а третий это что-то вроде id, чтобы в функции с кучей дин. зон было удобнее работать.
AddGroupGoodAreas(ga_groupid, STREAMER_TAG_AREA area, areaindex)
Получает id и index(опционально) GA(Good Area) группы игрока, если игрок находится в динамической зоне связанной с GA группой.
Возвращает: 1 - если игрок находится в динамической зоной связанной с GA, 0 - если нет.
GetPlayerGroupGoodAreaID(playerid, &areaid, &areaindex = 0)
Удаляет группу GA.
Возвращает: 1 - успех, 0 - фиаско.
DeleteGroupGoodAreas(ga_groupid)
Константы
Данная константа позволяет вам изменять максимальное возможное количество доступных наименований функций.
#define MAX_GOOD_AREAS 5000
А эта константа позволяет менять tag в зависимости от версии streamer-а, по стандарту она выглядит так:
#define GOOD_AREA_TAG STREAMER_TAG_AREA:
Типы вызовов функции:
GA_RESPONSE_ENTER - Когда игрок вошел в дин. зону
GA_RESPONSE_LEAVE - Когда игрок вышел из дин. зоны
GA_RESPONSE_PRESS_KEY - Когда игрок нажал кнопку в дин. зоне
Пример кода
Обычный:
public OnGameModeInit()
{
new STREAMER_TYPE_AREA area = CreateDynamicSphere(310.4742, 2055.8142, 17.6, 2.0);
SetAreaFunction(area, GoodArea:test);
}
// - Первый вариант
AreaResponse:test(playerid, response, key)
{
switch(response)
{
case GA_RESPONSE_ENTER:
{
SendClientMessage(playerid, -1, "Вы вошли зону");
}
case GA_RESPONSE_LEAVE:
{
SendClientMessage(playerid, -1, "Вы вышли из зоны");
}
case GA_RESPONSE_PRESS_KEY:
{
if(key & KEY_WALK) SendClientMessage(playerid, -1, "Вы нажали на ALT в зоне");
else if(key == KEY_JUMP) SendClientMessage(playerid, -1, "Вы нажали на прыжок в зоне");
else SendClientMessage(playerid, -1, "Вы нажали на кнопку в зоне");
}
}
return 1;
}
// - Второй вариант
goodarea test(playerid, response, key)
{
switch(response)
{
case GA_RESPONSE_ENTER:
{
SendClientMessage(playerid, -1, "Вы вошли зону");
}
case GA_RESPONSE_LEAVE:
{
SendClientMessage(playerid, -1, "Вы вышли из зоны");
}
case GA_RESPONSE_PRESS_KEY:
{
if(key & KEY_WALK) SendClientMessage(playerid, -1, "Вы нажали на ALT в зоне");
else if(key == KEY_JUMP) SendClientMessage(playerid, -1, "Вы нажали на прыжок в зоне");
else SendClientMessage(playerid, -1, "Вы нажали на кнопку в зоне");
}
}
return 1;
}
Группы:
public OnGameModeInit()
{
new group1 = CreateGroupGoodAreas(GoodArea:test);
new STREAMER_TAG_AREA:area = CreateDynamicSphere(310.4742, 2055.8142, 17.6, 2.0);
CreateDynamicCP(310.4742, 2055.8142, 17.6, 2.0);
AddGroupGoodAreas(group1, area, 1);
area = CreateDynamicSphere(310.4742, 2050.0, 17.6, 2.0);
CreateDynamicCP(310.4742, 2050.0, 17.6, 2.0);
AddGroupGoodAreas(group1, area, 2);
return 1;
}
// - Первый вариант
GAResponse:test(playerid, response, key, index)
{
new string[144];
switch(response)
{
case GA_RESPONSE_ENTER:
{
format(string, sizeof string, "Вы вошли зону с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
case GA_RESPONSE_LEAVE:
{
format(string, sizeof string, "Вы вышли из зоны с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
case GA_RESPONSE_PRESS_KEY:
{
if(key & KEY_WALK)
{
format(string, sizeof string, "Вы нажали на ALT в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
else if(key == KEY_JUMP)
{
format(string, sizeof string, "Вы нажали на прыжок в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
else
{
format(string, sizeof string, "Вы нажали на кнопку в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
}
}
return 1;
}
// - Второй вариант
goodgarea test(playerid, response, key, index)
{
new string[144];
switch(response)
{
case GA_RESPONSE_ENTER:
{
format(string, sizeof string, "Вы вошли зону с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
case GA_RESPONSE_LEAVE:
{
format(string, sizeof string, "Вы вышли из зоны с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
case GA_RESPONSE_PRESS_KEY:
{
if(key & KEY_WALK)
{
format(string, sizeof string, "Вы нажали на ALT в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
else if(key == KEY_JUMP)
{
format(string, sizeof string, "Вы нажали на прыжок в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
else
{
format(string, sizeof string, "Вы нажали на кнопку в зоне с индексом %d", index);
SendClientMessage(playerid, -1, string);
}
}
}
return 1;
}
Примечание
Подключать только после streamer-а.
Возможно не будет работать на старых версиях плагина.
Если вы используете E_STREAMER_EXTRA_ID, то лучше откажитесь от инклуда.
Это alpha версия, не бейте меня, пожалуйста.
Скачать
Тут можете скачать (https://github.com/Barty-Knox/GoodArea/releases/tag/1.2.1)
Автор: knox (https://www.youtube.com/channel/UCcWcOCdPmBFK4_pLCE6GMaQ)