PDA

Просмотр полной версии : [Вопрос] CreateDynamicSphere и прочее...



StevenH
21.11.2015, 16:52
Всем привет. Первый раз вижу функцию: CreateDynamicSphere и прочее.
Данную функцию я нашёл в моде даймонда, и она используется там везде. Так же она есть и в моде ракнета.
И я никак не могу понять зачем она, что она делает. Я чуть чуть покапался и посмотрел что это почти тоже самое что и OnPlayerPickupDynamicPickup но это не так. Например проверка на то, наступил ли ты на пикап дома находится в OnPlayerEnterDynamicArea (мод даймонда), а у меня в OnPlayerPickupDynamicPickup...

Есть ли КАКОЙ-ТО смысл юзать эти Sphere, DynamicArea и прочее..

Help me.

Sparks
21.11.2015, 17:43
Это динамические зоны. В основном в модах которые ты привёл в пример их используют как дополнение к не вызывающимся пикапам (тип: 1), потому что они не флудят как пикапы (моё мнение). Но использовать их можно и не только для этого.

StevenH
21.11.2015, 18:01
Нажал спасибку..

Жду ещё пару ответов от более опытных пользователей Pro Pawn.

Desulaid
21.11.2015, 18:15
Конечно есть смысл их использовать. Могу привести другой пример с CreateDynamicSphere. Я "разговор с актерами" так делал. Создавал зону для актера с радиусом 1,3 м, когда игрок входит в зону актера, то вызалит диалог и прочее, а когда отходит, то все восстанавливается. Был вариант и без CreateDynamicSphere: создать таймер, проверять всех актеров (позиции и т.д.) + установка радиуса ... Муторно, костыльно. )00 С функциями плагина все проще. Немного же глупо использовать от стример плагина только CreateDynamicObject :D

#Vito
21.11.2015, 18:20
В плагине Streamer можно создавать динамические регионы:


// Natives (Areas)

native CreateDynamicCircle(Float:x, Float:y, Float:size, worldid = -1, interiorid = -1, playerid = -1);
native CreateDynamicRectangle(Float:minx, Float:miny, Float:maxx, Float:maxy, worldid = -1, interiorid = -1, playerid = -1);
native CreateDynamicSphere(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1);
native CreateDynamicCube(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1, playerid = -1);
native CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1);
native DestroyDynamicArea(areaid);
native IsValidDynamicArea(areaid);

В нём же предусмотрены коллбэки для обработки событий входа/выхода игроков из таких регионов:


forward OnPlayerEnterDynamicArea(playerid, areaid);
forward OnPlayerLeaveDynamicArea(playerid, areaid);


CreateDynamicCircle - создание зоны в виде круга, для нее понадобятся только x и y координата, а также размер радиуса у данной зоны

CreateDynamicRectangle - создание зоны в виде прямоугольника, для данной зоны Вам потребуется узнать координаты противоположенных углов

CreateDynamicSphere - создание зоны в виде сферы, для данной зоны требуется высота по оси Z и радиус сферы, которую Вы хотите создать

CreateDynamicCube - создание зоны в виде куба (параллелепипеда). Для этого требуется минимальная и максимальная высота по оси Z

StevenH
21.11.2015, 18:25
CreateDynamicCircle - создание зоны в виде круга, для нее понадобятся только x и y координата, а также размер радиуса у данной зоны

CreateDynamicRectangle - создание зоны в виде прямоугольника, для данной зоны Вам потребуется узнать координаты противоположенных углов

CreateDynamicSphere - создание зоны в виде сферы, для данной зоны требуется высота по оси Z и радиус сферы, которую Вы хотите создать

CreateDynamicCube - создание зоны в виде куба (параллелепипеда). Для этого требуется минимальная и максимальная высота по оси Z

А есть ли какая то разница по скорости и прочего? Например в даймонде OnPlayerPickUpDynamicPickup вообще не используется, за то используется OnPlayerEnterDynamicArea.

Или одно и тоже, что юзать OnPlayerPickUpDynamicPickup и OnPlayerEnterDynamocArea?

Daniel_Cortez
21.11.2015, 20:25
CreateDynamicCube - создание зоны в виде куба (параллелепипеда). Для этого требуется минимальная и максимальная высота по оси Z
Поправка: в последних версиях стримера эта функция переименована в CreateDynamicCuboid, т.к. с её помощью можно было создать не только куб.



А есть ли какая то разница по скорости и прочего? Например в даймонде OnPlayerPickUpDynamicPickup вообще не используется, за то используется OnPlayerEnterDynamicArea.

Или одно и тоже, что юзать OnPlayerPickUpDynamicPickup и OnPlayerEnterDynamocArea?
А что здесь должно быть быстрым?
Выше уже правильно подметили: в случае с динамическими регионами всё делается очень просто: создаёте пикап и сферу, которая реагирует на игроков.
Если же взять для сравнения пикапы:
Тип 1 (pickup type #1): если игрок встанет на пикап, OnPlayerPickUpPickup вызовется не один раз, эта функция будет вызываться несколько раз в секунду, пока игрок стоит на пикапе. Чтобы избежать флуда, нужно придумывать запоминание координат и ставить лишние проверки.
Тип 2: OnPlayerPickUpPickup вызовется один раз, но пикап исчезнет. Он создастся на прежнем месте заново через 30 секунд, но только если игрок будет на расстоянии от того места.
Тип 3: То же самое, что и тип 2, но пикап респавнится после смерти игрока.
Тип 14: Активируется только если игрок в машине, на пешеходов не реагирует. OnPlayerPickUpPickup вызывается один раз, пикап исчезает.
Остальные типы либо дублируют 1/2/3/14, либо не вызывают OnPlayerPickUpPickup. Нельзя просто так сделать пикап, который сработает только 1 раз и безо всяких побочных эффектов.

Что лучше, воспользоваться простым и удобным способом, или продолжать по-старому городить костыли? Догадайтесь.

StevenH
21.11.2015, 21:15
Поправка: в последних версиях стримера эта функция переименована в CreateDynamicCuboid, т.к. с её помощью можно было создать не только куб.



А что здесь должно быть быстрым?
Выше уже правильно подметили: в случае с динамическими регионами всё делается очень просто: создаёте пикап и сферу, которая реагирует на игроков.
Если же взять для сравнения пикапы:
Тип 1 (pickup type #1): если игрок встанет на пикап, OnPlayerPickUpPickup вызовется не один раз, эта функция будет вызываться несколько раз в секунду, пока игрок стоит на пикапе. Чтобы избежать флуда, нужно придумывать запоминание координат и ставить лишние проверки.
Тип 2: OnPlayerPickUpPickup вызовется один раз, но пикап исчезнет. Он создастся на прежнем месте заново через 30 секунд, но только если игрок будет на расстоянии от того места.
Тип 3: То же самое, что и тип 2, но пикап респавнится после смерти игрока.
Тип 14: Активируется только если игрок в машине, на пешеходов не реагирует. OnPlayerPickUpPickup вызывается один раз, пикап исчезает.
Остальные типы либо дублируют 1/2/3/14, либо не вызывают OnPlayerPickUpPickup. Нельзя просто так сделать пикап, который сработает только 1 раз и безо всяких побочных эффектов.

Что лучше, воспользоваться простым и удобным способом, или продолжать по-старому городить костыли? Догадайтесь.

Аа вот, значит в если юзать Sphere и так далее, то не будет флуда как это есть в обычных динамических пикапах. Хм..., я даже не знал). Уже искал решение от флуда. Спасибо тебе большое :)

StevenH
22.11.2015, 03:31
Ребят, помогите перевести с OnPlayerPickUpDynamicPickup на OnPlayerEnterDynamicArea, никак не могу это сделать!!!
Уже мучаюсь около часа ( уже 2:30 ночи :(). Диалог то вообще не появляется, то вовсе пишет ид бизнеса 2, хотя он 1. Пробывал всё там менять, бывало что ид бизнеса был 1, а на самом деле он был 2 :С.
Код:



for(new b = 1; b <= TotalBusiness; b++)
{
if(pickupid == BusinessInfo[b][bPickup])
{
if(BusinessInfo[b][bOwned] == 0)
{
new string[120];
SetPVarInt(playerid, "SelectBusiness", b);
format(string, sizeof(string), "{4682B4}Название:\t\t\t{FFFFFF}%s\n{4682B4}Стоимость:\t\t\t{FFFFFF}%d$\n{4682B4}Арендная плата:\t\t{FFFFFF}500$", GetNameBusiness(), BusinessInfo[b][bValue]);
ShowPlayerDialog(playerid, 13, DIALOG_STYLE_MSGBOX, "Информация о бизнесе", string, "Войти", "Купить");
}
else if(BusinessInfo[b][bOwned] == 1)
{
SetPlayerInterior(playerid, BusinessInfo[b][bInt]);
SetPlayerVirtualWorld(playerid, b);
SetPlayerPos(playerid, BusinessInfo[b][bExitX], BusinessInfo[b][bExitY], BusinessInfo[b][bExitZ]);
}
}
}

StevenH
22.11.2015, 13:38
Поможет кто?). Встал сегодня, мучаюсь, никак не могу перевести на OnPlayerEnterDynamicArea :(

- - - Добавлено - - -

Эту тему закройте.