ЗАКРЫТЬ
Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Новости

30-дек
29-дек
26-дек
15-дек

> Информационная доска

Образец багрепорта:
  1. Операционная система ( Linux / Windows )
  2. Build Сервера ( квар version )
  3. Версия Metamod ( квар meta version )
  4. Версия ReGameDLL [если установлен] ( квар game version )
  5. Версия AmxModX [если установлен] ( квар amxx version )
  6. Логи ( qconsole.log, так же другие если есть )
  7. Комментарий

[AMXX Module] Reapi

, AMXModX модуль, который умеет работать с API
Статус пользователя CBETJIAHA
сообщение 4.6.2016, 22:34
Сообщение #1


Стаж: 2 года 9 месяцев

Сообщений: 316
Благодарностей: 307
Полезность: 979

Команда разработки:
• Asmodai
• s1lent

Ссылки:
github

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

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

Установка:
Cкрытый текст
• Копируем из архива reapi_X_X_X.zip файл reapi_amxx_i386.so или reapi_amxx.dll (в зависимости от используемой ОС) в папку <gamedir>/addons/amxmodx/modules
• Установка Reapi завершена


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

HC_BREAK - прервать выполнение хуков и оригинала

2. Установка возвращаемого значения. Выполняется нативом SetHookChainReturn с двумя аргументами, в первом требуется указать тип возвращаемого значения, а во втором значение.
3. Получение возвращаемого значения. Делается нативом GetHookChainReturn, может быть вызвано только в post.
4. Замена аргументов в функции. Делается нативом SetHookChainArg, в первом аргументе указывается номер последовательности аргументов всегда начинается с 1, во втором тип аргумента и в третьем - значение.


Практические примеры:
1. SetHookChainReturn
Cкрытый текст
Для начала подключим include reapi.

Код:
#include <reapi> 


В plugin_init, зарегистрируем хук на DeadPlayerWeapons и повесим обработчик на CSGameRules_DeadPlayerWeapons

Код:
public plugin_init()
{
RegisterHookChain(RG_CSGameRules_DeadPlayerWeapons, "CSGameRules_DeadPlayerWeapons")
}


Далее создадим тело обработчик-функции

Код:
public CSGameRules_DeadPlayerWeapons(const index)
{

}


Следующим шагом для общего представления желательно заглянуть в исходник ReGameDLL_CS player.cpp#L1473,
понимая что функция должна возвращать некое значение в котором не ожидает GR_PLR_DROP_GUN_NO
и от этого будет зависеть далее выполняемый код, суть этой PackDeadPlayerItems функции заключается в том,
что выбрасывает оружия на землю после смерти игрока, попробуем это предотвратить,
для этого вернём значение GR_PLR_DROP_GUN_NO который не ожидает получить.

Код:
public CSGameRules_DeadPlayerWeapons(const index)
{
SetHookChainReturn(ATYPE_INTEGER, GR_PLR_DROP_GUN_NO);
}


Так как, в оригинальной функции, практически ничего нет, то нет надобности ее лишний раз вызывать, поэтому используем HC_SUPERCEDE

Код:
public CSGameRules_DeadPlayerWeapons(const index)
{
SetHookChainReturn(ATYPE_INTEGER, GR_PLR_DROP_GUN_NO);
return HC_SUPERCEDE;
}


Таким нехитрым способом, предотвратили любое появление оружия после смерти игрока, вполне себе сойдет для CSDM или GunGame модов.

Код:
#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;
}


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

Код:
#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-е.


3. SetHookChainArg
Cкрытый текст
Используя хук ShowVGUIMenu, мы вполне cможем видоизменять/русифицировать меню выбора для всех, за исключением VGUI меню,
так как функция ShowVGUIMenu, вызывается как для VGUI так и для old меню.

Код:
#include <amxmodx>
#include <reapi>

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

public ShowVGUIMenu(const index, VGUIMenu:menuType, const bitsSlots, szOldMenu[])
{
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 с обновленными инклюдами.

Источник:
www.dedicated-server.ru

Текущая версия 0.1.70:
Прикрепленный файл  reapi_0.1.68.zip ( 202.11 килобайт ) Кол-во скачиваний: 15

Прикрепленный файл  reapi_0.1.69.zip ( 215.15 килобайт ) Кол-во скачиваний: 41

Прикрепленный файл  reapi_0.1.70.zip ( 215.14 килобайт ) Кол-во скачиваний: 171


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   Цитировать сообщение
Статус пользователя CBETJIAHA
сообщение 5.6.2016, 10:31
Сообщение #2


Стаж: 2 года 9 месяцев

Сообщений: 316
Благодарностей: 307
Полезность: 979

LazyMoron, чтобы можно было в плагинах использовать функции из движка и игровой структуры! Читайте описание, там вроде все написано!


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tyne
сообщение 5.6.2016, 10:40
Сообщение #3


Стаж: 4 года

Сообщений: 468
Благодарностей: 122
Полезность: 96

Что только не придумают..но смысл?)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Unknown
сообщение 5.6.2016, 11:42
Сообщение #4
Стаж: 9 месяцев

Сообщений: 291
Благодарностей: 69
Полезность: < 0

tyne, Если ты не скриптер то это тупой вопрос.


Аткажитесъ от плагенов бес исходника.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя CBETJIAHA
сообщение 5.6.2016, 13:37
Сообщение #5


Стаж: 2 года 9 месяцев

Сообщений: 316
Благодарностей: 307
Полезность: 979

tyne, Это предоставляет разработчикам AMXX-plugins больше возможностей для реализации своих целей.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 5.6.2016, 19:05
Сообщение #6


Стаж: 2 года 9 месяцев

Сообщений: 1698
Благодарностей: 1132
Полезность: 854

Цитата(tyne @ 5.6.2016, 11:40) *
Что только не придумают..но смысл?)

Смысл в оптимизации .


Заходите на мясо в HLDM: connect 78.152.169.100:27016
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CBETJIAHA
сообщение 12.6.2016, 0:59
Сообщение #7


Стаж: 2 года 9 месяцев

Сообщений: 316
Благодарностей: 307
Полезность: 979

Обновление:
Текущая версия модуля 0.1.50 (Обновлена совместимость)


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iFrank
сообщение 30.6.2016, 8:23
Сообщение #8


Стаж: 1 год 3 месяца
Город: Москва

Сообщений: 101
Благодарностей: 20
Полезность: 125

В modules.ini прописывать Reapi не надо?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DexteR
сообщение 14.12.2016, 10:41
Сообщение #9
Стаж: 1 год 3 месяца
Город: Москва

Сообщений: 120
Благодарностей: 4
Полезность: 30

Также тут Обновите шапку темы уже есть версия
Прикрепленные файлы:
Прикрепленный файл  reapi_0.1.80.zip ( 216.56 килобайт ) Кол-во скачиваний: 8
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя adva
сообщение 14.12.2016, 12:50
Сообщение #10


Стаж: 3 года 7 месяцев

Сообщений: 1267
Благодарностей: 584
Полезность: 944

Меценат Меценат

Цитата(DexteR @ 14.12.2016, 11:41) *
Также тут Обновите шапку темы уже есть версия


82 версия уже есть

Цитата(iFrank @ 30.6.2016, 9:23) *
В modules.ini прописывать Reapi не надо?

Нет
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DexteR
сообщение 14.12.2016, 15:31
Сообщение #11
Стаж: 1 год 3 месяца
Город: Москва

Сообщений: 120
Благодарностей: 4
Полезность: 30

adva, да уже 84 есть
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя adva
сообщение 14.12.2016, 15:43
Сообщение #12


Стаж: 3 года 7 месяцев

Сообщений: 1267
Благодарностей: 584
Полезность: 944

Меценат Меценат

Цитата(DexteR @ 14.12.2016, 16:31) *
adva, да уже 84 есть

Релизной 84 еще нет, это пока dev версия
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DexteR
сообщение 11.1.2017, 21:27
Сообщение #13
Стаж: 1 год 3 месяца
Город: Москва

Сообщений: 120
Благодарностей: 4
Полезность: 30

Обновление:
Текущая версия модуля 0.1.85
Прикрепленные файлы:
Прикрепленный файл  reapi_0.1.85.zip ( 217.91 килобайт ) Кол-во скачиваний: 0
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя niceserver
сообщение 11.1.2017, 21:42
Сообщение #14
Стаж: 6 месяцев

Сообщений: 136
Благодарностей: 13
Полезность: 78

DexteR, а dev здесь не в моде?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 2 гостей читают эту тему: