Модуль orpheu (v2

Наприклад, припустимо, що ви хочете використовувати цю функцію:
void PM_Move (struct playermove_s * ppmove. qboolean server)

Вона отримує один аргумент типу «playermove_s» і інший типу «qboolean». Значення ця функція не повертає.

Поки типи, необхідні функції, використовуються в модулі, ви можете використовувати її. Якщо один з типів не використовується, то Ви можете підключити його безпосередньо, і все одно продовжувати працювати з функцією, наприклад підключати її, так як при підключенні функції Вам не треба піклуватися про всі її аргументах.

Існує кілька способів пошуку функцій в бібліотеках:

  • шляхом пошуку офсет функцій в бібліотеці. Цей метод використовується для швидкого тестування і на нього не слід покладатися, так як знайдені офсет можуть виявитися неправильними при оновленні або зміна бібліотеки.
  • шляхом знаходження покажчика функції у віртуальній таблиці функцій класу. Цей спосіб дозволяє використовувати безліч функцій, шляхом виявлення всього лише покажчика. Метод був узятий з Hamsandwich і перероблений для використання в Orpheu. Він дає можливість захоплення віртуальної функції ентіті і об'єкта, наприклад, CGameRules. На відміну від версії Hamsandwich додано наступне: тепер набір кодованих безпосередньо функцій не обмежений, а також Ви можете захоплювати деякі залежні від мода функції, які не могли бути захоплені раніше.

Щоб передати модулю інформацію про функції, ви повинні створити файл, відформатований у відповідність стандарту JSON і помістити в папку «configs / orpheu / functions».

Для функції:
CMBaseMonster * spawn_monster (int monster_type. Vector origin. float angle. int respawn_index)

Вміст файлу буде таким:

  • поля «info» не обов'язкові;
  • поле «name» має збігатися з ім'ям фала;
  • ім'я бібліотеки «mod» для модів, як cstrike, і "engine" для dll движка. Для бібліотек MetaMod вам необхідно створити файл, як той, що Ви можете знайти в директорії «configs \ orpheu \ libraries», що містить пару libraryname / libraryCvar, таким чином модуль розпізнається, як один з модулів Cvar.
  • "Identidiers" - це список гуртів «os» / »value» для ідентифікації функції. У разі, якщо бібліотека - "mod", необхідно додати додаткове поле "mod". Нехай сенс цього поля виключно формальний, проте саме поле обов'язково. Воно повинно виглядати так:
    "Mod". "Cstrike"

В цьому випадку для посилання на функцію використовується метод визначення імені. У разі використання сигнатур, поле "value" буде представлено послідовністю байтів, «*» або «?», Наприклад:
"Value". [0x1, "*", "?"]

«*» Необхідно використовувати в тому випадку, якщо значення цих байтів не важливо.

Тобто значення
"Value". [0x1, "*"]
рівносильно
[0x1,0x0]. [0x1,0x1]. [0x1,0xFF].

«?» Необхідно використовувати, якщо не важливо не тільки значення цих байтів, а й саме їхнє існування.
Тобто
"Value". [0x1, "?"]
передбачає значення
[0x1]. [0x1,0x0]. [0x1,0x1]. [0x1,0xFF].

JSON - це широко поширений тип файлів. Щоб переконатися в тому, що файл коректно відформатований, ви можете використовувати валідатор. У цьому проекті я трохи змінив бібліотеку для того, щоб JSON міг прочитати байти. Це робиться для перевірки файлів, що не містять сигнатури.

Окремо, варто згадати про функції, які належать до класу, наприклад:
void CMController. HandleAnimEvent (MonsterEvent_t * pEvent)

В даному випадку необхідно створити папку під ім'ям «CMController», а в ній файл «HandleAnimEvent». Це обов'язково і необхідно для більш зрозумілою організації. Вам також необхідно додати в файл поле "class". В результаті файл буде виглядати так:

OrpheuMemorySet ( "awpCost". 1. 1000)

Примітка: якщо необхідно замінити рядки, безпосередньо розміщені в пам'яті (таких більшість), вам слід використовувати тип «string» замість «char *».

Ще у нас є:

  • Модуль orpheu (v2
    Orpheu: Пошук функцій в бібліотеках
  • Модуль orpheu (v2
    Як зробити меню з 10+ пунктами
  • Модуль orpheu (v2
    Взаємодія MOTD і AMXX через PHP
  • Модуль orpheu (v2
    Динамічні стану (state)
  • Модуль orpheu (v2
    Зміна HUD у зброї (Weapon Custom Hud)
  • Модуль orpheu (v2
    [Модуль Amxx] Curl (Windows # 038; Linux)

Схожі статті