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

    Статус
    Оффлайн
    Регистрация
    22.02.2017
    Сообщений
    20
    Репутация:
    0 ±

    Вызов натива

    Добрый вечер, профи, и не только)
    Меня интересует такой вопрос: возможно ли вызвать нативную функцию a_samp из плагина не прибегая к помощи Invoke?

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    sampgdk или вызывать функцию по адресу.

  3. #3
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Я бы советовал сделать встроенную функцию написанную внутри инклуда твоего,
    чтобы стандартные функции вызывались только на сервере,
    а потом уже какая инфа от них нужна передавать в плагин.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    22.02.2017
    Сообщений
    20
    Репутация:
    0 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    sampgdk или вызывать функцию по адресу.
    По адресу через amx_FindNative? А так будет работать?

    Цитата Сообщение от vovandolg Посмотреть сообщение
    Я бы советовал сделать встроенную функцию написанную внутри инклуда твоего,
    чтобы стандартные функции вызывались только на сервере,
    а потом уже какая инфа от них нужна передавать в плагин.
    Так немного не получится, потому что нужно при вызове отправлять одни данные, которые находятся в инклуде, и сверять их с данными, которые только в плагине.
    Да и в Invoke я что-то не нашёл нужного натива

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Если вам нужно вызвать нативную функцию без использования сторонних библиотек (gInvoke или SAMPGDK), можете попробовать вызвать её через функцию-посредника на Pawn (т.е. с помощью amx_Exec() вызвать в скрипте public-функцию, которая уже вызовет нужный вам натив) или же в таблице нативных функций скрипта найти нужный натив и вызвать напрямую по адресу (но тогда обязательно нужно, чтобы нативная функция использовалась где-нибудь в скрипте, чтобы она была в таблице нативок; для этого можно просто создать в скрипте пустую public-функцию, которая нигде не используется и вызывает нативную функцию с любыми аргументами).
    Второй способ сложнее в реализации, но лучше в плане производительности. Сложность заключается в том, что при вызове AMXLoad ещё нельзя узнать адрес натива, т.к. скрипт загружен, но ещё не инициализирован. Единственный способ - создать в плагине ещё одну нативную функцию, которая будет вызываться скриптом из OnGameModeInit/OnFilterScriptInit (сделать перехват в инклуде), и при вызове этой вспомагательной функции уже из неё узнавать адрес нужной вам нативки.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    22.02.2017
    Сообщений
    20
    Репутация:
    0 ±
    Но плагин вызывает поиск адреса натива при определённом действии, когда всё уже загружено и, по идее, инициализировано..

    И такой вопрос: макрос (к примеру, MAX_PLAYERS) можно перенести в плагин?
    Последний раз редактировалось SpecFree; 23.02.2017 в 13:54.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от SpecFree Посмотреть сообщение
    Адрес натива узнать всё тем же amx_FindNative?
    Воспользуйтесь этой модифицированной версией SDK, в ней добавлено несколько доп. функций и макросов (см. файл amx2.h). В частности, вам понадобится макрос GETENTRY.
    Код должен получиться примерно такой:
    PHP код:
    int func_index;
    if (
    amx_FindNative(amx"<имя натива>", &func_index) != AMX_ERR_NONE)
    {
      
    // Ошибка: нативная функция не найдена.
    }
    AMX_HEADER *hdr = (AMX_HEADER *)amx->base;
    AMX_FUNCSTUB *func_stub GETENTRY(hdrnativesfunc_index);
    AMX_NATIVE func func_stub->func

    Цитата Сообщение от SpecFree Посмотреть сообщение
    И ещё такой вопрос: макрос (к примеру, MAX_PLAYERS) можно перенести в плагин?
    Почему бы и нет? Просто передавайте эту константу из скрипта в качестве параметра нативной функции в вашем плагине. Или можете вызвать GetPlayerPoolSize непосредственно из плагина.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  8. #8
    Аватар для SpecFree
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.02.2017
    Сообщений
    20
    Репутация:
    0 ±
    Слегка отредачил пост выше (UPD)

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от SpecFree Посмотреть сообщение
    Слегка отредачил пост выше (UPD)
    Да, уже заметил, но сути это не меняет. Думаю, вам всё равно пригодится ответ на 1-й вопрос.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    22.02.2017
    Сообщений
    20
    Репутация:
    0 ±
    Но вот касаемо второго: мне нужно создать глобальный массив в самом плагине, думаю, это не подойдёт в качестве параметра функции)
    Последний раз редактировалось SpecFree; 23.02.2017 в 14:35.

 

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

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

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

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

Ваши права

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