ReHLDS ReAPI

Mmonster

Заблокированные
Регистрация
9 Июн 2017
Сообщения
495
Симпатии
221
Пол
Мужской
#1
Авторы: Asmodai, s1lent

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

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

Установка:
  • Копируем из архива reapi_X_X_X.zip файл reapi_amxx_i386.so или reapi_amxx.dll (в зависимости от используемой ОС)
    в папку <gamedir>/addons/amxmodx/modules
  • Установка Reapi завершена
Возможности форвардов:
Код:
Управление вызовом оригинальной функции и других хуков. Делается путем возврата из форварда одного из 4 значений:
HC_CONTINUE- продолжить вызывать хуки и оригинал
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")
}
Далее создадим тело обработчик-функции

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_INTEGER, GR_PLR_DROP_GUN_NO);
}
Так как, в оригинальной функции, практически ничего нет, то нет надобности ее лишний раз вызывать, поэтому используем HC_SUPERCEDE
PHP:
public CSGameRules_DeadPlayerWeapons(const index)
{
    SetHookChainReturn(ATYPE_INTEGER, GR_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_INTEGER, GR_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 this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{
    if (GetHookChainReturn() == 1) {
        client_print(0, print_chat, "Жертва получила урон: %f", flDamage);
    } else {
        client_print(0, print_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 index, VGUIMenu:menuType, const bitsSlots, szOldMenu[], bool:bForceOldMenu)
{
    if (menuType == VGUI_Menu_Team) {
        new szMenu[256];
        formatex(szMenu, charsmax(szMenu), "\yЗа кого будем играть?^n^n\w1. Террористы^n2. Контр-Террористы^n^n5. Не знаю");

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

        SetHookChainArg(4, ATYPE_STRING, szMenu);
    }

    return HC_CONTINUE;
}

Примечания:

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

iOS

Пользователь
Регистрация
9 Июн 2017
Сообщения
341
Симпатии
51
Пол
Мужской
#4
После обновы на реапи, стало в консоле сервера спамить этим:
-> KILL: (weapon_deagle)

Смысл этого?
 

SeeR

Пользователь
Регистрация
6 Окт 2017
Сообщения
37
Симпатии
0
#6
I installed the latest version of reapi and I get this, why?

L 11/23/2017 - 18:56:35: [ReAPI] RegisterHookChain: function (CSGameRules_RestartRound) is not available, ReGameDLL required.
L 11/23/2017 - 18:56:35: [AMXX] Run time error 10 (plugin "lite_balancer_2.amxx" (native "RegisterHookChain" - debug not enabled!
L 11/23/2017 - 18:56:35: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 11/23/2017 - 18:56:35: [ReAPI] RegisterHookChain: function (PlayerBlind) is not available, ReGameDLL required.
L 11/23/2017 - 18:56:35: [AMXX] Run time error 10 (plugin "no_teamflash.amxx" (native "RegisterHookChain" - debug not enabled!
L 11/23/2017 - 18:56:35: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 11/23/2017 - 18:56:35: [AMXX] Plugin ("adminfreelook.amxx" is setting itself as failed.
L 11/23/2017 - 18:56:35: [AMXX] Plugin says: ReGameDLL is
 

perfectblood0

Флудер
Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
974
Симпатии
284
#7
I installed the latest version of reapi and I get this, why?

L 11/23/2017 - 18:56:35: [ReAPI] RegisterHookChain: function (CSGameRules_RestartRound) is not available, ReGameDLL required.
L 11/23/2017 - 18:56:35: [AMXX] Run time error 10 (plugin "lite_balancer_2.amxx" (native "RegisterHookChain" - debug not enabled!
L 11/23/2017 - 18:56:35: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 11/23/2017 - 18:56:35: [ReAPI] RegisterHookChain: function (PlayerBlind) is not available, ReGameDLL required.
L 11/23/2017 - 18:56:35: [AMXX] Run time error 10 (plugin "no_teamflash.amxx" (native "RegisterHookChain" - debug not enabled!
L 11/23/2017 - 18:56:35: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 11/23/2017 - 18:56:35: [AMXX] Plugin ("adminfreelook.amxx" is setting itself as failed.
L 11/23/2017 - 18:56:35: [AMXX] Plugin says: ReGameDLL is
try recompile plugin with updated include
23 Ноя 2017
I installed the latest version of reapi and I get this, why?

L 11/23/2017 - 18:56:35: [ReAPI] RegisterHookChain: function (CSGameRules_RestartRound) is not available, ReGameDLL required.
L 11/23/2017 - 18:56:35: [AMXX] Run time error 10 (plugin "lite_balancer_2.amxx" (native "RegisterHookChain" - debug not enabled!
L 11/23/2017 - 18:56:35: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 11/23/2017 - 18:56:35: [ReAPI] RegisterHookChain: function (PlayerBlind) is not available, ReGameDLL required.
L 11/23/2017 - 18:56:35: [AMXX] Run time error 10 (plugin "no_teamflash.amxx" (native "RegisterHookChain" - debug not enabled!
L 11/23/2017 - 18:56:35: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 11/23/2017 - 18:56:35: [AMXX] Plugin ("adminfreelook.amxx" is setting itself as failed.
L 11/23/2017 - 18:56:35: [AMXX] Plugin says: ReGameDLL is
oh, no i made a mistake
"game version" in console and write here
it seems you didn't install ReGameDll
 

SeeR

Пользователь
Регистрация
6 Окт 2017
Сообщения
37
Симпатии
0
#8
I had an old version of reapi, and when I put a new one, that looks like that, and I installed regamedll.
24 Ноя 2017
[ReAPI]: ReGameDLL API minor version mismatch; expected at least 4, real 3
[ReAPI]: Please update the ReGameDLL up to a minor version API >= 4
[HACKD] Found compatible ReHLDS engine.
[ReAimDetector] Version: 0.1.7 Linux 'Counter-Strike 1.6'
[ReAimDetector] Success: Build ReHLDS version defined Linux '1201'.
[ReAuthCheck] Version: 0.1.6 Linux 'Counter-Strike 1.6'
[ReAuthCheck] Success: Configuration executed.
[ReAuthCheck] Success: Build ReHLDS version defined Linux '1201'
[WHB] Version: 1.5.692 Linux (Usage SSE 4.1)
[WHB] Success: Build ReHLDS version defined Linux '1201'
[WHB] Success: Configuration executed.
[ReSRDetector] Version: 0.1.0 Linux 'Counter-Strike 1.6'
[ReSRDetector] Success: Configuration executed.
[ReSRDetector] Success: Build ReHLDS version defined Linux '1201'
ReGameDLL version: 5.3.0.218-dev

I'm not going to update to regamedll.
 

SeeR

Пользователь
Регистрация
6 Окт 2017
Сообщения
37
Симпатии
0
#9
It does not work to update to regamedll, it's still that version, why?
 

perfectblood0

Флудер
Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
974
Симпатии
284
#10

SeeR

Пользователь
Регистрация
6 Окт 2017
Сообщения
37
Симпатии
0
#11
Simply put everything from bug fixed in dlls to update regamedll and do not go to another version.
 

SeeR

Пользователь
Регистрация
6 Окт 2017
Сообщения
37
Симпатии
0
#13
24 Ноя 2017
Please look

https://www.youtube.com/watch?v=pnA7_SE1P-o
 

perfectblood0

Флудер
Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
974
Симпатии
284
#14

perfectblood0

Флудер
Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
974
Симпатии
284
#16
are you sure that cs.so loading from dlls? contact your support and give him archive to update your server
 

SeeR

Пользователь
Регистрация
6 Окт 2017
Сообщения
37
Симпатии
0
#17
I have no idea. Thank you very much for trying to help me.
 

San

Пользователь
Регистрация
4 Фев 2018
Сообщения
58
Симпатии
0
#18
Не знаю сюда пишу или нет. Что за ошибка и как исправить?
L 03/08/2018 - 03:08:21: [ReAPI] You need ReHlds or ReGameDll for use hookchains
L 03/08/2018 - 03:08:21: [AMXX] Run time error 10 (plugin "admin_loader.amxx") (native "RegisterHookChain") - debug not enabled!
билд 6153
 

San

Пользователь
Регистрация
4 Фев 2018
Сообщения
58
Симпатии
0
#20
Vaqtincha, То есть обновить билд?
Можно подробнее
 
Последнее редактирование: San