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

Тема: GoodArea

  1. #1
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±

    GoodArea


    GoodArea

    Описание
    Данная библиотека позволяет удобно работать с динамическими зонами streamer-а в стиле zcmd.

    Функции
    Добавление/изменение функции, возвращает 1 - при успешном выполнении, 0 - фиаско.
    PHP код:
    SetAreaFunction(STREAMER_TAG_AREA area, const function[]) 
    Удаление/открепление функции от динамической зоны.
    Возвращает 1 - если был откреплен, 0 - если динамическая зона не была связана с функцией.
    PHP код:
    RemoveAreaFunction(GOOD_AREA_TAG area
    Создание групп дин. зон, все добавленные дин. зоны в группу будут вызывать эту функцию.
    Возвращает id группы, а при неудачном выполнение функции возвращает -1.
    PHP код:
    CreateGroupGoodAreas(const function[]) 
    Добавление дин. зоны к группе.
    Аргументы: id группы, дин. зона, а третий это что-то вроде id, чтобы в функции с кучей дин. зон было удобнее работать.
    PHP код:
    AddGroupGoodAreas(ga_groupidSTREAMER_TAG_AREA areaareaindex
    Получает id и index(опционально) GA(Good Area) группы игрока, если игрок находится в динамической зоне связанной с GA группой.
    Возвращает: 1 - если игрок находится в динамической зоной связанной с GA, 0 - если нет.
    PHP код:
    GetPlayerGroupGoodAreaID(playerid, &areaid, &areaindex 0
    Удаляет группу GA.
    Возвращает: 1 - успех, 0 - фиаско.
    PHP код:
    DeleteGroupGoodAreas(ga_groupid
    Константы
    Данная константа позволяет вам изменять максимальное возможное количество доступных наименований функций.
    PHP код:
    #define MAX_GOOD_AREAS 5000 
    А эта константа позволяет менять tag в зависимости от версии streamer-а, по стандарту она выглядит так:
    PHP код:
    #define GOOD_AREA_TAG STREAMER_TAG_AREA: 
    Типы вызовов функции:
    • GA_RESPONSE_ENTER - Когда игрок вошел в дин. зону
    • GA_RESPONSE_LEAVE - Когда игрок вышел из дин. зоны
    • GA_RESPONSE_PRESS_KEY - Когда игрок нажал кнопку в дин. зоне



    Пример кода
    Обычный:
    PHP код:
    public OnGameModeInit()
    {
        new 
    STREAMER_TYPE_AREA area CreateDynamicSphere(310.47422055.814217.62.0);
        
    SetAreaFunction(areaGoodArea:test);
    }

    // - Первый вариант

    AreaResponse:test(playeridresponsekey)
    {
        switch(
    response)
        {
            case 
    GA_RESPONSE_ENTER:
            {
                
    SendClientMessage(playerid, -1"Вы вошли зону");
            }
            case 
    GA_RESPONSE_LEAVE:
            {
                
    SendClientMessage(playerid, -1"Вы вышли из зоны");
            }
            case 
    GA_RESPONSE_PRESS_KEY:
            {
                if(
    key KEY_WALKSendClientMessage(playerid, -1"Вы нажали на ALT в зоне");
                else if(
    key == KEY_JUMPSendClientMessage(playerid, -1"Вы нажали на прыжок в зоне");
                else 
    SendClientMessage(playerid, -1"Вы нажали на кнопку в зоне");
            }
        }
        return 
    1;
    }

    // - Второй вариант

    goodarea test(playeridresponsekey)
    {
        switch(
    response)
        {
            case 
    GA_RESPONSE_ENTER:
            {
                
    SendClientMessage(playerid, -1"Вы вошли зону");
            }
            case 
    GA_RESPONSE_LEAVE:
            {
                
    SendClientMessage(playerid, -1"Вы вышли из зоны");
            }
            case 
    GA_RESPONSE_PRESS_KEY:
            {
                if(
    key KEY_WALKSendClientMessage(playerid, -1"Вы нажали на ALT в зоне");
                else if(
    key == KEY_JUMPSendClientMessage(playerid, -1"Вы нажали на прыжок в зоне");
                else 
    SendClientMessage(playerid, -1"Вы нажали на кнопку в зоне");
            }
        }
        return 
    1;

    Группы:
    PHP код:
    public OnGameModeInit()
    {
        new 
    group1 CreateGroupGoodAreas(GoodArea:test);
        new 
    STREAMER_TAG_AREA:area CreateDynamicSphere(310.47422055.814217.62.0);
        
    CreateDynamicCP(310.47422055.814217.62.0);
        
    AddGroupGoodAreas(group1area1);
        
    area CreateDynamicSphere(310.47422050.017.62.0);
        
    CreateDynamicCP(310.47422050.017.62.0);
        
    AddGroupGoodAreas(group1area2);
        return 
    1;
    }

    // - Первый вариант

    GAResponse:test(playeridresponsekeyindex)
    {
        new 
    string[144];
        switch(
    response)
        {
            case 
    GA_RESPONSE_ENTER:
            {
                
    format(stringsizeof string"Вы вошли зону с индексом %d"index);
                
    SendClientMessage(playerid, -1string);
            }
            case 
    GA_RESPONSE_LEAVE:
            {
                
    format(stringsizeof string"Вы вышли из зоны с индексом %d"index);
                
    SendClientMessage(playerid, -1string);
            }
            case 
    GA_RESPONSE_PRESS_KEY:
            {
                if(
    key KEY_WALK)
                   {
                       
    format(stringsizeof string"Вы нажали на ALT в зоне с индексом %d"index);
                    
    SendClientMessage(playerid, -1string);
                }
                else if(
    key == KEY_JUMP)
                {
                       
    format(stringsizeof string"Вы нажали на прыжок в зоне с индексом %d"index);
                    
    SendClientMessage(playerid, -1string);
                }
                else
                {
                    
    format(stringsizeof string"Вы нажали на кнопку в зоне с индексом %d"index);
                    
    SendClientMessage(playerid, -1string);
                }
            }
        }
        return 
    1;
    }

    // - Второй вариант

    goodgarea test(playeridresponsekeyindex)
    {
        new 
    string[144];
        switch(
    response)
        {
            case 
    GA_RESPONSE_ENTER:
            {
                
    format(stringsizeof string"Вы вошли зону с индексом %d"index);
                
    SendClientMessage(playerid, -1string);
            }
            case 
    GA_RESPONSE_LEAVE:
            {
                
    format(stringsizeof string"Вы вышли из зоны с индексом %d"index);
                
    SendClientMessage(playerid, -1string);
            }
            case 
    GA_RESPONSE_PRESS_KEY:
            {
                if(
    key KEY_WALK)
                   {
                       
    format(stringsizeof string"Вы нажали на ALT в зоне с индексом %d"index);
                    
    SendClientMessage(playerid, -1string);
                }
                else if(
    key == KEY_JUMP)
                {
                       
    format(stringsizeof string"Вы нажали на прыжок в зоне с индексом %d"index);
                    
    SendClientMessage(playerid, -1string);
                }
                else
                {
                    
    format(stringsizeof string"Вы нажали на кнопку в зоне с индексом %d"index);
                    
    SendClientMessage(playerid, -1string);
                }
            }
        }
        return 
    1;

    Примечание
    Подключать только после streamer-а.
    Возможно не будет работать на старых версиях плагина.
    Если вы используете E_STREAMER_EXTRA_ID, то лучше откажитесь от инклуда.
    Это alpha версия, не бейте меня, пожалуйста.

    Скачать
    Тут можете скачать

    Автор: knox

    Последний раз редактировалось Seviel; 21.12.2018 в 16:13.

  2. 2 пользователя(ей) сказали cпасибо:
    DeimoS (21.11.2018) ziggi (21.11.2018)
  3. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Советую обновиться до новой версии стримера, ибо там сейчас изменили принцип написания тэгов и твой текущий код будет выдавать ошибки :)
    А так - хорошая задумка
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. 2 пользователя(ей) сказали cпасибо:
    Seviel (21.11.2018) Unreal (23.12.2018)
  5. #3
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Советую обновиться до новой версии стримера, ибо там сейчас изменили принцип написания тэгов и твой текущий код будет выдавать ошибки :)
    А так - хорошая задумка
    Спасибо, исправил это добавлением новой константы:
    PHP код:
     #define GOOD_AREA_TAG STREAMER_TAG_AREA: 
    Если у Вас tag такой, то можете её не использовать, а если не такой, то заменяйте на свой.
    Например:
    PHP код:
    #define GOOD_AREA_TAG STREAMER_TAG_AREA
    #include <GoodArea> 

  6. #4
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Обновление 1.1

    Описание
    Были добавлены группы, то есть функцию может вызывать не одна дин. зона, а не сколько.

    Функции
    Чтобы создать группу необходимо использовать следующую функцию:
    PHP код:
    CreateGroupGoodAreas(function[]) 
    Она возвращает id группы, который понадобится в следующей функции. А также возвращает -1 если не смогло создать группу.

    PHP код:
    AddGroupGoodAreas(ga_groupidGOOD_AREA_TAG areaareaindex
    Данная функция добавляет дин. зону в группу, первый аргумент это id группы, второй дин. зона, а третий это что-то вроде id, чтобы в функции с кучей дин. зон было удобнее работать.

    Пример
    PHP код:
    public OnGameModeInit()
    {
        new 
    group1 CreateGroupGoodAreas(GoodArea:test);
        new 
    STREAMER_TAG_AREA:area CreateDynamicSphere(310.47422055.814217.62.0);
        
    CreateDynamicCP(310.47422055.814217.62.0);
        
    AddGroupGoodAreas(group1area1);
        
    area CreateDynamicSphere(310.47422050.017.62.0);
        
    CreateDynamicCP(310.47422050.017.62.0);
        
    AddGroupGoodAreas(group1area2);
        return 
    1;
    }

    GAResponse:test(playeridresponsekeyindex)
    {
        new 
    string[144];
        switch(
    response)
        {
            case 
    GA_RESPONSE_ENTER:
            {
                
    format(stringsizeof string"Вы вошли зону с индексом %d"index);
                
    SendClientMessage(playerid, -1string);
            }
            case 
    GA_RESPONSE_LEAVE:
            {
                
    format(stringsizeof string"Вы вышли из зоны с индексом %d"index);
                
    SendClientMessage(playerid, -1string);
            }
            case 
    GA_RESPONSE_PRESS_KEY:
            {
                if(
    key KEY_WALK)
                   {
                       
    format(stringsizeof string"Вы нажали на ALT в зоне с индексом %d"index);
                    
    SendClientMessage(playerid, -1string);
                }
                else if(
    key == KEY_JUMP)
                {
                       
    format(stringsizeof string"Вы нажали на прыжок в зоне с индексом %d"index);
                    
    SendClientMessage(playerid, -1string);
                }
                else
                {
                    
    format(stringsizeof string"Вы нажали на кнопку в зоне с индексом %d"index);
                    
    SendClientMessage(playerid, -1string);
                }
            }
        }
        return 
    1;


  7. #5
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от Seviel Посмотреть сообщение
    PHP код:
    CreateGroupGoodAreas(function[]) 
    Последняя версия компилятора будет кричать, что нету "const".

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

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Цитата Сообщение от NichWell Посмотреть сообщение
    Последняя версия компилятора будет кричать, что нету "const".
    Компилятор плохой мальчик, а инклуд хороший мальчик.

    Обновил.

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

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Обновление 1.2


    Были добавлены функции:
    PHP код:
    RemoveAreaFunction(GOOD_AREA_TAG area);
    GetPlayerGroupGoodAreaID(playerid, &areaid, &areaindex 0);
    DeleteGroupGoodAreas(ga_groupid); 
    Подробнее о функциях описано выше.

  11. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Я бы советовал соблюсти общий стиль для имён функций. Например, название "GoodArea" перенести в префикс, а уже в самом названии отражать функционал. Будет гораздо более понятнее и удобнее.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  12. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Мне кажется, хватит и одного AreaResponse, а GAResponse и выглядит не очень, да и усложнение лишнее. И, раз уж всё-равно есть ограничение на количество зон (MAX_GOOD_AREAS), можно отказаться от использования E_STREAMER_EXTRA_ID и создать массив с необходимыми данными.

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

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Мне кажется, хватит и одного AreaResponse, а GAResponse и выглядит не очень, да и усложнение лишнее. И, раз уж всё-равно есть ограничение на количество зон (MAX_GOOD_AREAS), можно отказаться от использования E_STREAMER_EXTRA_ID и создать массив с необходимыми данными.
    Группы это самое крутое. С помощью них можно сделать систему домов и не только.

    Использую E_STREAMER_EXTRA_ID, дабы не было перебора всех динамических зон и/или переменной.

    Хотя чтобы избавиться от использования E_STREAMER_EXTRA_ID, нужно немного изменить код в функциях GetGoodAreaIndex и GetGroupGoodAreaIndex
    Последний раз редактировалось Seviel; 21.12.2018 в 15:57.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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