1. LeninChan^^ Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.086
    Симпатии:
    368
    Пол:
    Мужской
    Telegram:
    LeninChan
    Это пока что бета-версия. Разработка активно идёт, часто выходят дополнения. При обновлении ReAPI компилируйте исходники заново с новыми инклюдами!
    Официальная страница: Dedicated-Server, Github, TeamCity
    Автор: Asmodai & s1lent
    Текущая версия: 0.1.80

    ReAPI - Это AMX Mod X модуль, который умеет работать с API ReHLDS , ReGameDll_CS, Reunion и VTC, что предоставляет разработчикам AMXX-plugins больше возможностей для реализации своих целей.

    Описание:
    Модуль упрощает жизнь amxx кодерам посредством предоставления доступа к API игрового движка и игровой библиотеки. ReAPI открывает новые возможности для реализации своих идей в мире CS и оптимизации работы старых.

    Требования:
    • ReHLDS, ReGameDLL_CS, Reunion или VTC Внимание: (Можно использовать не все перечисленные, но тогда будут доступна меньшая часть функционала)
    • MetaMod 1.20(p) или новее

    [*]Управление вызовом оригинальной функции и других хуков. Делается путем возврата из форварда одного из 4 значений:
    HC_CONTINUE - продолжить вызывать хуки и оригинал
    HC_OVERRIDE - продолжить вызывать оригинал, но возвращать свое значение
    HC_SUPERCEDE - продолжить вызывать хуки, но прервать выполнение оригинала
    (Если функция не void, перед блокировкой её вызова необходимо установить свое возвращаемое значение)

    HC_BREAK - прервать выполнение хуков и оригинала
    [*]Установка возвращаемого значения. Выполняется нативом SetHookChainReturn с двумя аргументами, в первом требуется указать тип возвращаемого значения, а во втором значение.

    [*]Получение возвращаемого значения. Делается нативом GetHookChainReturn, может быть вызвано только в post.

    [*]Замена аргументов в функции. Делается нативом SetHookChainArg, в первом аргументе указывается номер последовательности аргументов всегда начинается с 1, во втором тип аргумента и в третьем - значение.

    Практические примеры(для скриптеров)
    Для начала подключим include reapi.
    PHP:
    #include <reapi>  
    В plugin_init, зарегистрируем хук на DeadPlayerWeapons и повесим обработчик на CSGameRules_DeadPlayerWeapons
    PHP:
    public plugin_init()
    {
    RegisterHookChain(RG_CSGameRules_DeadPlayerWeapons"CSGameRules_DeadPlayerWeapons")
    }  
    public plugin_init()
    Далее создадим тело обработчик-функции
    PHP:
    public CSGameRules_DeadPlayerWeapons(const index)
    {

    }  
    Следующим шагом для общего представления желательно заглянуть в исходник ReGameDLL_CS player.cpp#L1473,
    понимая что функция должна возвращать некое значение в котором не ожидает GR_PLR_DROP_GUN_NO
    и от этого будет зависеть далее выполняемый код, суть этой PackDeadPlayerItems функции заключается в том, что выбрасывает оружия на землю после смерти игрока, попробуем это предотвратить,
    для этого вернём значение GR_PLR_DROP_GUN_NO который не ожидает получить.
    PHP:
    public CSGameRules_DeadPlayerWeapons(const index)
    {
    SetHookChainReturn(ATYPE_INTEGERGR_PLR_DROP_GUN_NO);
    }  
    Так как, в оригинальной функции, практически ничего нет, то нет надобности ее лишний раз вызывать, поэтому используем HC_SUPERCEDE
    PHP:
    public CSGameRules_DeadPlayerWeapons(const index)
    {
    SetHookChainReturn(ATYPE_INTEGERGR_PLR_DROP_GUN_NO);
    return 
    HC_SUPERCEDE;
    }  
    Таким нехитрым способом, предотвратили любое появление оружия после смерти игрока, вполне себе сойдет для CSDM или GunGame модов.
    PHP:
    #include <amxmodx>
    #include <reapi>

    public plugin_init()
    {
    RegisterHookChain(RG_CSGameRules_DeadPlayerWeapons"CSGameRules_DeadPlayerWeapons")
    }

    public 
    CSGameRules_DeadPlayerWeapons(const index)
    {
    SetHookChainReturn(ATYPE_INTEGERGR_PLR_DROP_GUN_NO);
    return 
    HC_SUPERCEDE;
    }

    Поскольку CBasePlayer::TakeDamage возвращает значение 0/1, в виде
    • 0 - не получил урон
    • 1 - получил урон
    Если на сервере будет включен mp_friendlyfire 0, стреляя по союзникам CBasePlayer::TakeDamage все равно будет вызываться, но возвращать уже будет 0.
    В некоторых ситуациях, нужно точно знать получила ли жертва урон, на примере этого будет оповещение атакующему о том,
    сколько урона нанёс (аля Damager).
    GetHookChainReturn должен использоваться только в post, когда оригинальная функция уже была вызвана.
    PHP:
    #include <amxmodx>
    #include <reapi>

    public plugin_init()
    {
    RegisterHookChain(RG_CBasePlayer_TakeDamage"CBasePlayer_TakeDamage"1);
    }

    public 
    CBasePlayer_TakeDamage(const thispevInflictorpevAttackerFloat:flDamagebitsDamageType)
    {
    if (
    GetHookChainReturn() == 1) {
    client_print(0print_chat"Жертва получила урон: %f"flDamage);
    } else {
    client_print(0print_chat"Жертва не получила урон: %f"flDamage);
    }

    return 
    HC_CONTINUE;
    }  
    Полезная информация: CBasePlayer::TakeDamage в post, аргумент flDamage уже приходит с расчетом брони и заниженным уроном по союзникам на 35% (иными словами в flDamage будет точный урон), чего не скажешь о такой возможности в Hamsandwich-е.

    Используя хук ShowVGUIMenu, мы вполне cможем видоизменять/русифицировать меню выбора для всех, за исключением VGUI меню,
    так как функция ShowVGUIMenu, вызывается как для VGUI так и для old меню.
    PHP:
    #include <amxmodx>
    #include <reapi>

    public plugin_init()
    {
    RegisterHookChain(RG_ShowVGUIMenu"ShowVGUIMenu");
    }

    public 
    ShowVGUIMenu(const indexVGUIMenu:menuType, const bitsSlotsszOldMenu[])
    {
    if (
    menuType == VGUI_Menu_Team) {
    new 
    szMenu[256];
    formatex(szMenucharsmax(szMenu), "\yЗа кого будем играть?^n^n\w1. Террористы^n2. Контр-Террористы^n^n5. Не знаю");

    if (
    bitsSlots MENU_KEY_6) {
    add(szMenucharsmax(szMenu), "^n6. Зритель");
    }

    SetHookChainArg(4ATYPE_STRINGszMenu);
    }

    return 
    HC_CONTINUE;
    }
    kiss_16kb.1464987719.jpg



    Установка: Устанавливаем как простой amxx модуль.
    • Скачиваем архив с модулем.
    • Распаковываем.
    • Заливаем на сервер.
    • Прописываем reapi_amxx в modules.ini
    Библиотека модуля должна располагаться по пути: addons/amxmodx/modules/reapi_amxx.dll (reapi_amxx_i386.so)

    Примечания:
    • ReAPI по большей части предназначен для Counter-Strike 1.6 / Condition Zero, но может использоваться и на других модах с меньшим доступным функционалом.
    • Для компиляции плагинов с использованием ReAPI нужно в свой ЛОКАЛЬНЫЙ компилятор распаковать новые инклюды из архива.
     

    Вложения:

    • reapi_0.1.80.zip
      Размер файла:
      216,6 КБ
      Просмотров:
      108
    Последнее редактирование модератором: 07.11.16
    Саид, Neugomonnaya, neygomon и 12 другим нравится это.
  2. Le$hiy VIP user

    Регистрация:
    13.06.15
    Сообщения:
    578
    Симпатии:
    153
    Пол:
    Мужской
    VKcom:
    leshiy_bannikoff
    Модераторы услышали мою (может не только мою) просьбу и создали тему. Большое спасибо!
    Тут кажется опечатка:
     
    umic нравится это.
  3. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.596
    Симпатии:
    4.169
    Пол:
    Мужской
    ### Обновлен первый пост ###
    • Выложена последняя, актуальная версия модуля :)
      • Что нового, писать смысла нет. Бета жи. Да и никто не поймет :D
     
    ashok нравится это.
  4. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.596
    Симпатии:
    4.169
    Пол:
    Мужской
    ### Обновлен первый пост ###
    • Выложена последняя, актуальная версия модуля :)
      • Обновлен SDK ReGameDLL для совместимости с последней версией мода
     
    Phenom5555 и primm нравится это.
  5. GIT VIP user

    Регистрация:
    15.05.15
    Сообщения:
    163
    Симпатии:
    22
    Пол:
    Мужской
    В чем может проблема быть закинул его в папку , не запускается?
     
  6. Punisher Пользователь

    Регистрация:
    08.02.16
    Сообщения:
    1.569
    Симпатии:
    198
    Пол:
    Мужской
    VKcom:
    wkolopunisher
    Telegram:
    punproject
    Skype:
    punproject
    @GIT, а плагины, с инклудом который был в архиве, перекомпилировал?
     
  7. GIT VIP user

    Регистрация:
    15.05.15
    Сообщения:
    163
    Симпатии:
    22
    Пол:
    Мужской
    L 06/12/2016 - 19:32:38: [AMXX] Plugin "afk_control.amxx" failed to load: Plugin uses an unknown function (name "get_member") - check your modules.ini.
    L 06/12/2016 - 19:32:38: [AMXX] Plugin "round_balancer.amxx" failed to load: Plugin uses an unknown function (name "set_member") - check your modules.ini.
    --- добавлено 12.06.16 ---
    У меня модуль не подгружается!
     
  8. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.516
    Симпатии:
    1.107
    Пол:
    Мужской
    @GIT, прописал в modules.ini?
    ReHLDS и RegameDLL последние?
    Сервер перезапускал?
     
  9. GIT VIP user

    Регистрация:
    15.05.15
    Сообщения:
    163
    Симпатии:
    22
    Пол:
    Мужской
    У меня модуль не подгру
    ;fun
    ;engine
    ;fakemeta
    ;geoip
    ;sockets
    ;regex
    ;hamsandwich
    nvault
    reapi_amxx
    ;refreelook
    RegameDLL этот ReHLDS & HLDS - Regamedll - reverse-engineered mod CS
    ReHLDS который на myarene

    [​IMG]
    Если модуль reapi не включать , то сервер запускается!
    --- добавлено 12.06.16 ---
    Так секунду , а модуль ReHLDS & HLDS - Regamedll - reverse-engineered mod CS как выглядит ? Так cs.so ?
     
  10. Punisher Пользователь

    Регистрация:
    08.02.16
    Сообщения:
    1.569
    Симпатии:
    198
    Пол:
    Мужской
    VKcom:
    wkolopunisher
    Telegram:
    punproject
    Skype:
    punproject
    да ты издиваешься? пропиши нормально сначала
     
  11. GIT VIP user

    Регистрация:
    15.05.15
    Сообщения:
    163
    Симпатии:
    22
    Пол:
    Мужской
    Так секунду , а модуль ReHLDS & HLDS - Regamedll - reverse-engineered mod CS как выглядит ? Так cs.so ?
    я прописал Regamedll не установил , и не смогу так как myarena не позволяет кинуть файл game.cfg
     
  12. Punisher Пользователь

    Регистрация:
    08.02.16
    Сообщения:
    1.569
    Симпатии:
    198
    Пол:
    Мужской
    VKcom:
    wkolopunisher
    Telegram:
    punproject
    Skype:
    punproject
    Во первых:
    а надо просто reapi без всяких _amxx

    Во вторых:
    game.cfg надо кидать в папку cstrike, то есть там где лежит server.cfg
    --- добавлено 12.06.16 ---
    да
     
    GIT нравится это.
  13. GIT VIP user

    Регистрация:
    15.05.15
    Сообщения:
    163
    Симпатии:
    22
    Пол:
    Мужской
    Ответ из myarena
    Добрый вечер
    game.cfg нельзя загружать на сервер.
     
  14. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.516
    Симпатии:
    1.107
    Пол:
    Мужской
    Спроси у этих мудаков, что тебе делать, если хочешь поставить RegameDLL_CS. Без него ReHLDS - кастрат.

    Я реапи так прописал в modules.ini
    Код:
    reapi_amxx_i386.so
    Можно как Punisher, просто reapi. Это тоже верно.
     
    GIT нравится это.
  15. Punisher Пользователь

    Регистрация:
    08.02.16
    Сообщения:
    1.569
    Симпатии:
    198
    Пол:
    Мужской
    VKcom:
    wkolopunisher
    Telegram:
    punproject
    Skype:
    punproject
    реально мудаки...
     
    GIT нравится это.
  16. GIT VIP user

    Регистрация:
    15.05.15
    Сообщения:
    163
    Симпатии:
    22
    Пол:
    Мужской
    Спросил сразу , жду!
     
  17. PRoSToC0der Разработчик

    Регистрация:
    22.02.16
    Сообщения:
    307
    Симпатии:
    143
    Пол:
    Мужской
    Необязательно же квары прописывать в game.cfg, можно и в server.cfg.
     
    Bloo нравится это.
  18. TauJIeP Пользователь

    Регистрация:
    04.04.16
    Сообщения:
    389
    Симпатии:
    42
    Пол:
    Мужской
    Skype:
    hohlachev-s
    Как исправить? Скомпилил все без ошибок. Тут какого модуля не хватает?
    ( 16) Load fails: Plugin uses an unknown function (name "rg_set_user_team") - check your modules.ini.
    ( 21) Load fails: Plugin uses an unknown function (name "get_member_game") - check your modules.ini.
    ( 34) Load fails: Plugin uses an unknown function (name "get_member") - check your modules.ini.
     
  19. Punisher Пользователь

    Регистрация:
    08.02.16
    Сообщения:
    1.569
    Симпатии:
    198
    Пол:
    Мужской
    VKcom:
    wkolopunisher
    Telegram:
    punproject
    Skype:
    punproject
  20. TauJIeP Пользователь

    Регистрация:
    04.04.16
    Сообщения:
    389
    Симпатии:
    42
    Пол:
    Мужской
    Skype:
    hohlachev-s
    Стоит
    [ 1] ReAPI 0.1.50 Asmodai & s1lent running