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

Тема: u_dialogs.inc

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±

    u_dialogs.inc

    Описание:
    Библиотека была написана для решения моей проблемы. Она заключалась в том, что мне нужно было разделять мод на модули, во многих из которых велась работа с диалогами, а каждый раз перехватывать OnDialogResponse желания совершенно нет.

    Пример использования:
    PHP код:
    public OnPlayerConnect(playerid)
    {
        
    ShowPlayerDialogEx(playerid#test_dialog, DIALOG_STYLE_INPUT,
            
    "Сказать?",
            
    "Сэр, что вы хотите нам сказать?",
            
    "Сказать""Все равно сказать"
        
    );
        return 
    1;
    }

    DialogResponse:test_dialog(playeridresponselistiteminputtext[])
    {
        return 
    SendClientMessage(playerid, -1inputtext);

    Автор: Антон Стяжкин
    Скачать: загрузить можно перейдя на страницу проекта.

    Копирование данной статьи на других порталах без разрешения автора запрещено!
    Последний раз редактировалось Desulaid; 02.03.2018 в 16:43. Причина: Обновил тему

  2. 4 пользователя(ей) сказали cпасибо:
    Batka1337 (20.03.2016) DeimoS (06.05.2016) Geebrox (23.04.2017) Тузик (07.01.2017)
  3. #2
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Можно было узнать адреса функций диалога ещё до момента вызова паблика OnDialogResponse. Например, в отдельной функции (желательно объявленную с помощью static), которая будет вызываться в пабликах OnGameModeInit или OnFilterScriptInit.

    Вот что-то такое должно было получиться (возможны ошибки):
      Открыть/закрыть
    PHP код:
    static
        
    Dialog_Init()
    {
        new
            
    num_publics,
            
    offs_dat,
            
    offs_pftaddr_charfn_name[32], prefix[4] = {'d','l','g'};
        {
            
    #emit lctrl 1
            #emit neg
            #emit stor.s.pri offs_dat
            #emit add.c 32
            #emit stor.s.pri addr
            #emit lref.s.pri addr
            #emit load.s.alt addr
            #emit add
            #emit const.alt 32
            #emit sub
            #emit stor.s.pri offs_pft
            #emit load.s.pri offs_dat
            #emit add.c 36
            #emit stor.s.pri addr
            #emit lref.s.pri addr
            #emit load.s.alt addr
            #emit add
            #emit const.alt 36
            #emit sub
            #emit load.s.alt offs_pft
            #emit sub
            #emit shr.c.pri 3
            #emit num_publics
        
    }
        new 
    ij;
        do
        {
            
    #emit zero.pri
            #emit stor.s.pri j
            #emit load.s.pri i
            #emit shl.c.pri 3
            #emit load.s.pri offs_pft
            #emit add
            #emit add.c 4
            #emit stor.s.pri addr
            #emit lref.s.pri addr
            #emit load.s.alt offs_dat
            #emit add
            #emit stor.s.pri addr
            
    for (;;)
            {
                
    #emit lref.s.pri addr
                #emit stor.s.pri _char
                #emit load.s.pri addr
                #emit inc.pri
                #emit stor.s.pri addr
                
    if (sizeof prefix j)
                    if ((
    _char 0xFF) != prefix[j++])
                else if ((
    fn_name[j++ - sizeof prefix] = (_char 0xFF)) == '\0')
                {
                    
    #emit lctrl 1
                    #emit neg
                    #emit add.c 32
                    #emit stor.s.pri addr
                    #emit lref.s.alt addr
                    #emit lctrl 1
                    #emit neg
                    #emit add
                    #emit load.s.alt i
                    #emit shl.c.alt 3
                    #emit add
                    #emit stor.s.pri addr
                    #emit lref.s.pri addr
                    #emit const.alt TDW_g_sFunctionAddresses
                    #emit const.pri TDW_g_sDialogCount
                    #emit idxaddr
                    #emit move.alt
                    #emit stor.i
                    #emit push.c MAX_FUNCTION_NAME
                    #emit push.adr fn_name
                    #emit const.alt TDW_g_sDialogNames
                    #emit const.pri TDW_g_sDialogCount
                    #emit idxaddr
                    #emit push.pri
                    #emit push.c 12
                    #emit sysreq.c strpack
                    #emit stack 16
                    
    break;
                }
            }
        } while (++
    != num_publics);

    Последний раз редактировалось VVWVV; 13.03.2016 в 15:06.

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Прон, что ли любишь? (Работать с адресами в Pawn )
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Можно было узнать адреса функций диалога ещё до момента вызова паблика OnDialogResponse. Например, в отдельной функции (желательно объявленную с помощью static), которая будет вызываться в пабликах OnGameModeInit или OnFilterScriptInit.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Можно было узнать адреса функций диалога ещё до момента вызова паблика OnDialogResponse. Например, в отдельной функции (желательно объявленную с помощью static), которая будет вызываться в пабликах OnGameModeInit или OnFilterScriptInit.

    Вот что-то такое должно было получится (возможны ошибки):
      Открыть/закрыть
    PHP код:
    static
        
    Dialog_Init()
    {
        new
            
    num_publics,
            
    offs_dat,
            
    offs_pftaddr_charfn_name[32], prefix[4] = {'d','l','g'};
        {
            
    #emit lctrl 1
            #emit neg
            #emit stor.s.pri offs_dat
            #emit add.c 32
            #emit stor.s.pri addr
            #emit lref.s.pri addr
            #emit load.s.alt addr
            #emit add
            #emit const.alt 32
            #emit sub
            #emit stor.s.pri offs_pft
            #emit load.s.pri offs_dat
            #emit add.c 36
            #emit stor.s.pri addr
            #emit lref.s.pri addr
            #emit load.s.alt addr
            #emit add
            #emit const.alt 36
            #emit sub
            #emit load.s.alt offs_pft
            #emit sub
            #emit shr.c.pri 3
            #emit num_publics
        
    }
        new 
    ij;
        do
        {
            
    #emit zero.pri
            #emit stor.s.pri j
            #emit load.s.pri i
            #emit shl.c.pri 3
            #emit load.s.pri offs_pft
            #emit add
            #emit add.c 4
            #emit stor.s.pri addr
            #emit lref.s.pri addr
            #emit load.s.alt offs_dat
            #emit add
            #emit stor.s.pri addr
            
    for (;;)
            {
                
    #emit lref.s.pri addr
                #emit stor.s.pri _char
                #emit load.s.pri addr
                #emit inc.pri
                #emit stor.s.pri addr
                
    if (sizeof prefix j)
                    if ((
    _char 0xFF) != prefix[j++])
                else if ((
    fn_name[j++ - sizeof prefix] = (_char 0xFF)) == '\0')
                {
                    
    #emit lctrl 1
                    #emit neg
                    #emit add.c 32
                    #emit stor.s.pri addr
                    #emit lref.s.alt addr
                    #emit lctrl 1
                    #emit neg
                    #emit add
                    #emit load.s.alt i
                    #emit shl.c.alt 3
                    #emit add
                    #emit stor.s.pri addr
                    #emit lref.s.pri addr
                    #emit const.alt TDW_g_sFunctionAddresses
                    #emit const.pri TDW_g_sDialogCount
                    #emit idxaddr
                    #emit move.alt
                    #emit stor.i
                    #emit push.c MAX_FUNCTION_NAME
                    #emit push.adr fn_name
                    #emit const.alt TDW_g_sDialogNames
                    #emit const.pri TDW_g_sDialogCount
                    #emit idxaddr
                    #emit push.pri
                    #emit push.c 12
                    #emit sysreq.c strpack
                    #emit stack 16
                    
    break;
                }
            }
        } while (++
    != num_publics);

    Если бы я знал работу директивы emit, то может подобное сделал бы. Но я не знаю ее, да и с моим инглишем проблемно читать иноземные письмена.

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

    Статус
    Оффлайн
    Регистрация
    31.07.2015
    Сообщений
    154
    Репутация:
    17 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Прон, что ли любишь? (Работать с адресами в Pawn )
    Для чего после слова "Прон" запятая?
    Мои глаза от твоего кода лезут на гавно-инфо и создают тему о расстановке пикапов.

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    шобы ты спросил.
    Цитата Сообщение от Роуди. Посмотреть сообщение
    Для чего после слова "Прон" запятая?
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  10. Пользователь сказал cпасибо:
    Unreal (19.03.2016)
  11. #7
    Аватар для Роуди.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.07.2015
    Сообщений
    154
    Репутация:
    17 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    шобы ты спросил.
    Аргументный аргумент.
    Мои глаза от твоего кода лезут на гавно-инфо и создают тему о расстановке пикапов.

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

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

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

    Steve Pavlina

  13. 4 пользователя(ей) сказали cпасибо:
    Desulaid (13.03.2016) [ForD] (13.03.2016) Роуди. (14.03.2016) Тузик (07.01.2017)
  14. #9
    Аватар для Тузик
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.06.2016
    Сообщений
    26
    Репутация:
    0 ±
    Ты github удалил? :/
    Телеграфируем в соц.сети "вконтакте" или же мылимся на веревке "VKontakte"?

  15. #10
    Аватар для DeimoS
    Модератор?

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

    Залил на Pastebin, вроде как, последнюю версию. Добавил в первый пост ссылку.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

 

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

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

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

Ваши права

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