Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 2 ПерваяПервая 1 2
Показано с 11 по 17 из 17
  1. #11
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Zaur_Lumanov Посмотреть сообщение
    Открой инклуд - вот тебе сорурс.
    хм, а почему бы не выложить пастбин?
    Зачем мне качать инклуд, ради просмотра кода?

  2. 2 пользователя(ей) сказали cпасибо:
    gangzone.ini (08.05.2015) Unreal (26.04.2016)
  3. #12
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    хм, а почему бы не выложить пастбин?
    Зачем мне качать инклуд, ради просмотра кода?
    а лучше код на стол и под спойлер

  4. Пользователь сказал cпасибо:
    $continue$ (19.06.2015)
  5. #13
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Баян же ?
    Londlem подобное юзает вроде.

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

    Update.

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Другой способ, схожий с этим, который я использую уже давно:

    Сам паблик:
    PHP код:
    public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
    {
        new
            
    dlg_rel[10],
            
    dlgid_str[6]; // макс. ID диалога не может быть больше чем 32767, поэтому 6 ячеек ( +1 для нуль-символа: '\0' )

        
    valstr(dlgid_strdialogidtrue);
        
    dlg_rel "dlg_"strcat(dlg_reldlgid_str);

        return 
    CallLocalFunction(dlg_rel"iiis"playeridresponselistitem, (inputtext[0] == EOS) ? ("\1") : (inputtext));

    Насчёт valstr можно не беспокоиться ( он вызывает зависание сервера при максимальных и минимальных значениях ): значение никогда не достигнет cellmax или cellmin, из-за тех же лимитов для ID диалогов: 0-32767.

    Сам макрос:
    PHP код:
    #define DLG(%1) \
        
    public dlg_%1(playeridresponselistiteminputtext[]); \
        public 
    dlg_%1(playeridresponselistiteminputtext[]) 
    Как по мне, так макрос
    PHP код:
    const
        
    DIALOG_REGISTER 64;

    DLG(DIALOG_REGISTER)
    {
        
    // some code...

    лучше выглядит чем
    PHP код:
    const
        
    DIALOG_REGISTER 64;

    DLG:DIALOG_REGISTER()
    {
        
    // some code...

    Пустые скобки не очень смотрятся, лично для меня. Дело принципа.

  7. 2 пользователя(ей) сказали cпасибо:
    seriu (26.05.2016) Unreal (18.06.2016)
  8. #15
    Аватар для Zaur_Lumanov
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.05.2015
    Адрес
    Москва
    Сообщений
    18
    Репутация:
    8 ±
    В новой версии подправлю. Если есть предложения, то я их готов учесть.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от Zaur_Lumanov Посмотреть сообщение
    Пример:
    PHP код:
    DLG:590()
    {
         if(
    response) return SendClientMessage(playerid,-1,"Вы нажали кнопку 'Выбрать' ");
         else return 
    SendClientMessage(playerid,-1,"Вы вышли из диалогового окна.");
         return 
    true;

    Параметры у диалоговой функции пропущены.
    Из-за этого такое ощущение, будто параметры playerid и response берутся из ниоткуда, т.к. они нигде не объявлены.
    Некоторые редакторы кода могут ругаться на такое.

    Цитата Сообщение от Londlem Посмотреть сообщение
    PHP код:
    const
        
    DIALOG_REGISTER 64;

    DLG(DIALOG_REGISTER)
    {
        
    // some code...

    Не прокатит, вместо dlg_64 получится функция dlg_DIALOG_REGISTER.
    Тут только объявлять ID диалогов через #define, причём сразу можно ставить крест на составлении более удобного списка ID диалогов с помощью enum.
    + те же самые проблемы с необъявленными параметрами.

    Да и вообще, зачем пытаться выдумать что-то своё, когда можно воспользоваться уже накатанной лыжнёй, взяв пример с ZCMD?
    Многие пользуются им (или совместимым с ним DC_CMD) и поэтому привыкли к их синтаксису.
    Там командные функции объявляются следующим образом:
    PHP код:
    CMD:cmdname(playeridparams[])
    {
        
    //...

    Если же пользователю не нужен параметр params, его можно пропустить:
    PHP код:
    CMD:test(playerid)
        return 
    SendClientMessage(playerid, -1"Sample text"); 
    playerid тоже можно пропустить (но нельзя пропустить его, не пропустив params):
    PHP код:
    CMD:shutdown()
        return 
    SendRconCommand("exit"); 


    Цитата Сообщение от Londlem Посмотреть сообщение
    PHP код:
    public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
    {
        new
            
    dlg_rel[10],
            
    dlgid_str[6]; // макс. ID диалога не может быть больше чем 32767, поэтому 6 ячеек ( +1 для нуль-символа: '\0' )

        
    valstr(dlgid_strdialogidtrue);
        
    dlg_rel "dlg_"strcat(dlg_reldlgid_str);

        return 
    CallLocalFunction(dlg_rel"iiis"playeridresponselistitem, (inputtext[0] == EOS) ? ("\1") : (inputtext));

    Для чего здесь две строковые переменные, когда можно использовать всего одну?
    PHP код:
        static dlg_func_name[4+5+1] = "dlg_";
        
    valstr(dlg_func_name[4], dialogidtrue); 


    Цитата Сообщение от Zaur_Lumanov Посмотреть сообщение
    Данному каллбеку передаются следующие значения:
    playerid (int) - ID игрока.
    dialogid (int) - ID диалога.
    response (bool) - Статус
    listitem (int) - Выбранный элемент.
    inputtext (string) - Текст, введённый в текстовое поле диалога.
    Раз параметры те же, что в OnDialogResponse, зачем ещё раз расписывать их здесь?
    Можно было просто сделать ссылку на статью в SA:MP wiki.
    Код HTML:
    [wiki]OnDialogResponse[/wiki]

    Цитата Сообщение от Zaur_Lumanov Посмотреть сообщение
    Важно: не прописывайте данную строчку до строчки "#include <a_samp>".
    Очень просто лечится добавлением "#include <a_samp>" в самое начало вашего инклуда, после защиты от повторного подключения.

    Кстати, про ту защиту...
    PHP код:
    #if defined _zl_dlg
        #endinput
    #else
        #define _zl_dlg 
    Не закрыта директива #if. Вы вообще хоть как-то проверяли свой код перед релизом?
    Нет, я конечно понимаю, многие с первого раза выкладывают багнутые работы, но чтобы релизить код, который не компилируется вообще...
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. 4 пользователя(ей) сказали cпасибо:
    $continue$ (10.05.2015) L0ndl3m (10.05.2015) seriu (26.05.2016) Unreal (17.07.2016)
  11. #17
    Аватар для seriu
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.11.2013
    Сообщений
    69
    Репутация:
    6 ±
    PHP код:
    static dlg_func_name[4+5+1] = "dlg_";
        
    valstr(dlg_func_name[4], dialogidtrue); 
    Пытался вывести, через printf, выводило только "dlg_";
    PHP код:
    static dlg_func_name[4+5+1] = "dlg_";
        
    valstr(dlg_func_name[5], 233true);
        
    printf("TEST %s",dlg_func_name); 

 

 
Страница 2 из 2 ПерваяПервая 1 2

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

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

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

Ваши права

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