Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 10 из 10
  1. #1
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±

    CreateDynamicSphere и прочее...

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

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

    Help me.

  2. #2
    Аватар для Sparks
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.10.2015
    Сообщений
    3
    Репутация:
    4 ±
    Это динамические зоны. В основном в модах которые ты привёл в пример их используют как дополнение к не вызывающимся пикапам (тип: 1), потому что они не флудят как пикапы (моё мнение). Но использовать их можно и не только для этого.
    Последний раз редактировалось Sparks; 21.11.2015 в 17:55.

  3. Пользователь сказал cпасибо:
    StevenH (21.11.2015)
  4. #3
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Нажал спасибку..

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

  5. #4
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Конечно есть смысл их использовать. Могу привести другой пример с CreateDynamicSphere. Я "разговор с актерами" так делал. Создавал зону для актера с радиусом 1,3 м, когда игрок входит в зону актера, то вызалит диалог и прочее, а когда отходит, то все восстанавливается. Был вариант и без CreateDynamicSphere: создать таймер, проверять всех актеров (позиции и т.д.) + установка радиуса ... Муторно, костыльно. )00 С функциями плагина все проще. Немного же глупо использовать от стример плагина только CreateDynamicObject :D

  6. #5
    Аватар для #Vito
    #define

    Статус
    Оффлайн
    Регистрация
    14.09.2013
    Адрес
    Одесса
    Сообщений
    129
    Репутация:
    38 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    В плагине Streamer можно создавать динамические регионы:
    PHP код:
    // Natives (Areas)

    native CreateDynamicCircle(Float:xFloat:yFloat:sizeworldid = -1interiorid = -1playerid = -1);
    native CreateDynamicRectangle(Float:minxFloat:minyFloat:maxxFloat:maxyworldid = -1interiorid = -1playerid = -1);
    native CreateDynamicSphere(Float:xFloat:yFloat:zFloat:sizeworldid = -1interiorid = -1playerid = -1);
    native CreateDynamicCube(Float:minxFloat:minyFloat:minzFloat:maxxFloat:maxyFloat:maxzworldid = -1interiorid = -1playerid = -1);
    native CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITYFloat:maxz FLOAT_INFINITYmaxpoints sizeof pointsworldid = -1interiorid = -1playerid = -1);
    native DestroyDynamicArea(areaid);
    native IsValidDynamicArea(areaid); 
    В нём же предусмотрены коллбэки для обработки событий входа/выхода игроков из таких регионов:
    PHP код:
    forward OnPlayerEnterDynamicArea(playeridareaid);
    forward OnPlayerLeaveDynamicArea(playeridareaid); 
    CreateDynamicCircle - создание зоны в виде круга, для нее понадобятся только x и y координата, а также размер радиуса у данной зоны

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

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

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


  7. Пользователь сказал cпасибо:
    StevenH (21.11.2015)
  8. #6
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от #Vito Посмотреть сообщение
    CreateDynamicCircle - создание зоны в виде круга, для нее понадобятся только x и y координата, а также размер радиуса у данной зоны

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

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

    CreateDynamicCube - создание зоны в виде куба (параллелепипеда). Для этого требуется минимальная и максимальная высота по оси Z
    А есть ли какая то разница по скорости и прочего? Например в даймонде OnPlayerPickUpDynamicPickup вообще не используется, за то используется OnPlayerEnterDynamicArea.

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

  9. #7
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от #Vito Посмотреть сообщение
    CreateDynamicCube - создание зоны в виде куба (параллелепипеда). Для этого требуется минимальная и максимальная высота по оси Z
    Поправка: в последних версиях стримера эта функция переименована в CreateDynamicCuboid, т.к. с её помощью можно было создать не только куб.


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

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

    Что лучше, воспользоваться простым и удобным способом, или продолжать по-старому городить костыли? Догадайтесь.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. Пользователь сказал cпасибо:
    StevenH (21.11.2015)
  11. #8
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Поправка: в последних версиях стримера эта функция переименована в CreateDynamicCuboid, т.к. с её помощью можно было создать не только куб.



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

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

  12. #9
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Ребят, помогите перевести с OnPlayerPickUpDynamicPickup на OnPlayerEnterDynamicArea, никак не могу это сделать!!!
    Уже мучаюсь около часа ( уже 2:30 ночи :(). Диалог то вообще не появляется, то вовсе пишет ид бизнеса 2, хотя он 1. Пробывал всё там менять, бывало что ид бизнеса был 1, а на самом деле он был 2 :С.
    Код:

    PHP код:
        for(new 1<= TotalBusinessb++)
        {
            if(
    pickupid == BusinessInfo[b][bPickup])
            {
                if(
    BusinessInfo[b][bOwned] == 0)
                {
                    new 
    string[120];
                    
    SetPVarInt(playerid"SelectBusiness"b);
                     
    format(stringsizeof(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(playerid13DIALOG_STYLE_MSGBOX"Информация о бизнесе"string"Войти""Купить");
                }
                else if(
    BusinessInfo[b][bOwned] == 1)
                {
                      
    SetPlayerInterior(playeridBusinessInfo[b][bInt]);
                    
    SetPlayerVirtualWorld(playeridb);
                    
    SetPlayerPos(playeridBusinessInfo[b][bExitX], BusinessInfo[b][bExitY], BusinessInfo[b][bExitZ]);
                }
            }
        } 

  13. #10
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Поможет кто?). Встал сегодня, мучаюсь, никак не могу перевести на OnPlayerEnterDynamicArea :(

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

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

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •