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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±

    Подключение y_hook

    Всем привет. Сегодня утром я столкнулся с небольшой проблемой, которая очень-очень мешает мне компилировать мод.
    Ещё вчера я редактировал свой код и всё нормально компилировалось, но сегодня компилятор начало крашить. Я вспомнил, что мне советовали скачать компилятор от Zeex (до этого был стандартный, без фиксов), что я и сделал.

    При компиляции моего мода я обнаружил ошибку в инклуде y_hooks.inc, которая гласит:
    PHP код:
    C:\mode\pawno\include\YSI\y_hooks.inc(64) : fatal error 111user errorDid you do <YSI/y_hooksinstead of the required <YSI\y_hooks>? 
    Открыв сам инклуд я понял, что ошибка возникает из-за того, что он не подключен:
    PHP код:
    #if !defined _inc_y_hooks
        #error Did you do <YSI/y_hooks> instead of the required <YSI\y_hooks>?
    #endif
    #undef _inc_y_hooks 
    Но почему? Ещё вчера всё работало нормально, без всяких ошибок, крашей и тому подобных вещей. Пробовал поменять #include <YSI\y_hooks> на #include <YSI/y_hooks> и наоборот - эффекта никакого.

    Хочу подметить, что каждую определённую функцию я подключаю через отдельный инклуд (например, система регистрации и система администрации находятся в разных инклудах (формат .inc, не .pwn)).

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Попробуй скомпилировать в режиме совместимости: https://github.com/Zeex/pawn/wiki/Compatibility-mode

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Попробуй скомпилировать в режиме совместимости: https://github.com/Zeex/pawn/wiki/Compatibility-mode
    Появилось огромное количество ошибок (в т.ч. и в скачанных инклудах (sscanf, crp и т.д.)). Это, получается, не доставлена скобка?

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Появилось огромное количество ошибок (в т.ч. и в скачанных инклудах (sscanf, crp и т.д.)). Это, получается, не доставлена скобка?
    Скорее всего.

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Скорее всего.
    Конкретно попал. А как можно быстро найти эту пропавшую (или лишнюю) скобку?
    Последний раз редактировалось PawnoNoob; 29.05.2017 в 22:54.

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Всё-таки я немного затупил, когда поставил пробел в макросе. Вот сам макрос:
    PHP код:
    #define function%0(%1)                         forward %0(%1); public %0(%1) 
    Но я, думая, что так будет "красивее", сделал вот так:
    PHP код:
    #define function %0(%1)                         forward %0(%1); public %0(%1) 
    Из-за этого и попал в такую вот глупую ситуацию.
    Скажите, пожалуйста, почему в макросе нельзя использовать пробел (ну, как у меня показано, например).

    И ещё один вопрос, чтобы не создавать ещё одну тему: как лучше подключать другие функции? Подробнее, чтобы не запутать Вас: я подключаю разные функции (система авторизации, регистрации и так далее) из разных файлов, находящихся в отдельной папке, чтобы не запутаться при поиске недоработки или же ошибки. В каком формате это лучше делать? .pwn или .inc?

    Ну и последний вопрос, который меня интересует, связан с чем-то неизвестным мне (не знаю названия). В одной из тем ZiGGi отправил мне код, цитирую:
    Цитата Сообщение от ziggi Посмотреть сообщение
    PHP код:
    stock SSkin(playeridbool:isnextgendnatage)
    {
        new 
    idx GetPVarInt(playerid"SkinArrayIndex");

        
    idx += isnext : -1;

        if (
    idx >= MAX_SKINS_COUNT) {
            
    idx 0;
        } else if (
    idx 0) {
            
    idx MAX_SKINS_COUNT 1;
        }

        for (new 
    0sizeof(skins); i++)
        {
            if (
    reg_gend{i} == gend && reg_nat{i} == nat && (age >= reg_minage{i} && age <= reg_maxage{i}))
            {
                
    format(s_stringsizeof(s_string), "%i"idx);
                
    SendClientMessage(playerid, -1s_string);

                
    SetPlayerSkin(playeridskins[i][idx]);
                
    SetPVarInt(playerid"SkinArrayIndex"idx); 
                break;
            }
        }

        return 
    1;

    Стартовый скин только задай сам.
    Или вызывай SSkin так:
    PHP код:
    SetPVarInt(playerid"SkinArrayIndex", -1);
    SSkin(playeridtruegendnatage); 
    Меня интересует конкретно строка:
    PHP код:
    idx += isnext : -1
    Где можно найти информацию о данной "системе" (не знаю, как правильно назвать) и её применение?

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Скажите, пожалуйста, почему в макросе нельзя использовать пробел (ну, как у меня показано, например).
    Потому что шаблоном подстановки в макросе считается всё, что идёт до первого пробела.


    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    И ещё один вопрос, чтобы не создавать ещё одну тему: как лучше подключать другие функции? Подробнее, чтобы не запутать Вас: я подключаю разные функции (система авторизации, регистрации и так далее) из разных файлов, находящихся в отдельной папке, чтобы не запутаться при поиске недоработки или же ошибки. В каком формате это лучше делать? .pwn или .inc?
    Делайте, как вам удобно. Распространённой практикой считается выносить код из основного файла скрипта (*.pwn) в файлы *.inc, но компилятору всё равно, какое расширение вы дадите файлу.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. Пользователь сказал cпасибо:
    PawnoNoob (30.05.2017)
  10. #8
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Скажите, пожалуйста, почему в макросе нельзя использовать пробел (ну, как у меня показано, например).
    Потому что всё, что идёт после пробела является кодом, на который компилятор будет заменять код, который до первого пробела. Это в принципе логично и на самом деле вот в этом варианте:
    PHP код:
    #define function%0(%1)                         forward %0(%1); public %0(%1) 
    Ты по прежнему можешь объявлять паблики, написав их название через пробел после "function", просто в макросе это выглядит так

    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    В каком формате это лучше делать? .pwn или .inc?
    Не имеет значения

    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Меня интересует конкретно строка:
    PHP код:
    idx += isnext : -1
    Где можно найти информацию о данной "системе" (не знаю, как правильно назвать) и её применение?
    Странная реализация. Для наглядности условие можно было обрамить в скобки и сделать конкретную проверку. Скорее всего проверяется isnext на нуль: если не равен нулю, то прибавляем к idx 1, а если равен, то -1, т.е. отнимаем 1. За практическим применением уже скорее всего к самому автору, т.к. очевидно, что писалось под конкретный мод
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  11. Пользователь сказал cпасибо:
    PawnoNoob (30.05.2017)
  12. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Меня интересует конкретно строка:
    PHP код:
    idx += isnext : -1
    Где можно найти информацию о данной "системе" (не знаю, как правильно назвать) и её применение?
    Просто более короткая запись этого:
    PHP код:
    if (isnext) {
        
    idx++;
    } else {
        
    idx--;

    Это называется "тернарный оператор".

  13. Пользователь сказал cпасибо:
    PawnoNoob (30.05.2017)
  14. #10
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Спасибо всем за помощь.

 

 

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

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

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

Ваши права

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