X-Ray extensions — различия между версиями
RayTwitty (обсуждение | вклад) (Новая страница: «<div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"> <big>'''X-Ray extensions'''</big> ---- {| style="border: none" | ''…») |
RayTwitty (обсуждение | вклад) |
||
Строка 190: | Строка 190: | ||
<code>bool is_actor_creeping()</code> - возвратит true, если ГГ двигается в глубоком присяде.<br/> | <code>bool is_actor_creeping()</code> - возвратит true, если ГГ двигается в глубоком присяде.<br/> | ||
<code>bool is_actor_climbing()</code> - возвратит true, если ГГ двигается на лестнице.<br/> | <code>bool is_actor_climbing()</code> - возвратит true, если ГГ двигается на лестнице.<br/> | ||
+ | =====CCar===== | ||
+ | <code>float<fuel> get_fuel()</code> - возвращает текущее количество топлива.<br/> | ||
+ | <code>set_fuel(float<fuel>)</code> - устанавливает текущее количество топлива.<br/> | ||
+ | <code>float<consumption> get_fuel_consumption()</code> - возвращает расход топлива.<br/> | ||
+ | <code>set_fuel_consumption(float<consumption>)</code> - устанавливает расход топлива.<br/> | ||
+ | <code>float<tank_size> get_fuel_tank()</code> - возвращает размер топливного бака.<br/> | ||
+ | =====CEntityAlive===== | ||
+ | <code>heal_wounds(float<factor>)</code> - уменьшает силу кровотечения.<br/> | ||
+ | <code>update_condition()</code> - принудительно обновляет внутренние параметры состояния персонажа (жизнь, выносливость, кровотечение и т.д.).<br/> | ||
+ | =====CGameObject===== | ||
+ | <code>string<profile_name> specific_character()</code> - возвращает название профиля персонажа.<br/> | ||
+ | <code>int<is_visible>[0 or 1] get_bone_visible(string<bone_name>)</code> - возвращает видимость кости по имени.<br/> | ||
+ | <code>set_bone_visible(string<bone_name>, int<visible>[0 or 1])</code> - устанавливает видимость кости по имени.<br/> | ||
+ | <code>int<bone_id> get_bone_id(string<bone_name>)</code> - возвращает id кости по имени.<br/> | ||
+ | <code>string<bone_name> get_bone_name()</code> - возвращает имя кости по id (для установки id кости, необходимо использовать глобальную функцию <code>set_int_arg0(int<bone_id>)</code>).<br/> | ||
+ | <code>bool<visual> has_visual()</code> - возвратит true, если объект имеет визуал.<br/> | ||
+ | <code>ini_file* get_visual_ini()</code> - возвращает ссылку на внутренний конфиг модели.<br/> | ||
+ | <code>bool<is_usable> nonscript_usable()</code> - возвратит true, если над объектом разрешены нескриптовые действия.<br/> | ||
+ | =====CHangingLamp===== | ||
+ | <code>set_lsf_speed(float<speed>)</code> -- ###########???###########<br/> | ||
+ | <code>set_lsf_amount(float<amount>)</code><br/> | ||
+ | <code>set_lsf_smap_jitter(float<jitter>)</code><br/> | ||
+ | <code>float<speed> get_lsf_speed()</code><br/> | ||
+ | Эти методы изменяют параметры тени от источника света. Для их работы необходимы правки движка и шейдеров. Широко используются в моде OGSE.<br/> | ||
+ | =====CHolderCustom===== | ||
+ | <code>game_object*<owner_obj> get_holder_owner()</code> - возвращает владельца машины или станкового оружия.<br/> | ||
+ | =====CHudItem===== | ||
+ | <code>play_hud_animation(string<anim_name>, bool<mix_in>)</code> - проигрывает анимацию с заданным именем.<br/> | ||
+ | <code>uint<remaining_time> get_hud_animation_remaining_time()</code> - возвращает время, оставшееся до окончания текущей анимации.<br/> | ||
+ | <code>int<length> get_hud_animation_length(string<anim_name>)</code> - возвращает длительность анимации по её имени.<br/> | ||
+ | <code>bool<is_cyclic> is_cyclic_hud_animation()</code> - возвратит true, если текущая анимация зациклена.<br/> | ||
+ | <code>bool<has_anim> has_hud_animation(string<anim_name>)</code> - возвратит true, если анимация есть в модели.<br/> | ||
+ | <code>uint<state> get_hud_item_state()</code> - возвращает номер текущего стейта.<br/> | ||
+ | <code>int<bone_id> get_hud_bone_id(string<bone_name>)</code> - возвращает id кости по имени.<br/> | ||
+ | <code>vector<pos> get_hud_bone_pos(string<bone_name>)</code> - возвращает позицию кости по имени.<br/> | ||
+ | <code>int<is_visible>[0 or 1] get_hud_bone_visible(string<bone_name>)</code> - возвращает видимость кости по имени.<br/> | ||
+ | <code>set_hud_bone_visible(string<bone_name>, int<visible>[0 or 1])</code> - устанавливает видимость кости по имени.<br/> | ||
+ | =====CInventoryBox===== | ||
+ | <code>game_object*<item_obj> object_from_inv_box(int<object_number>)</code> - возвращает предмет в ящике по номеру.<br/> | ||
+ | <code>uint<items_count> inv_box_count()</code> - возвращает количество предметов в ящике.<br/> | ||
+ | =====CInventoryItem===== | ||
+ | <code>float<weight> get_weight()</code> - возвращает вес предмета.<br/> | ||
+ | =====CInventoryOwner===== | ||
+ | <code>bool<is_on_belt> is_on_belt(game_object*<item_obj>)</code> - возвратит true, если предмет на поясе.<br/> | ||
+ | <code>bool<is_in_ruck> is_in_ruck(game_object*<item_obj>)</code> - возвратит true, если предмет в рюкзаке.<br/> | ||
+ | <code>bool<is_in_slot> is_in_slot(game_object*<item_obj>)</code> - возвратит true, если предмет в слоте.<br/> | ||
+ | <code>move_to_ruck(game_object*<item_obj>)</code> - перемещает предмет в рюкзак.<br/> | ||
+ | <code>move_to_belt(game_object*<item_obj>)</code> - перемещает предмет на пояс.<br/> | ||
+ | <code>move_to_slot(game_object*<item_obj>)</code> - перемещает предмет в слот.<br/> | ||
+ | <code>move_to_slot_and_activate(game_object*<item_obj>)</code> - перемещает предмет в слот и активирует его.<br/> | ||
+ | <code>game_object*<item_obj> item_on_belt(int<object_number>)</code> - возвращает предмет на поясе по номеру.<br/> | ||
+ | <code>game_object*<item_obj> item_in_ruck(int<object_number>)</code> - возвращает предмет в рюкзаке по номеру.<br/> | ||
+ | <code>uint<count> belt_count()</code> - возвращает количество предметов на поясе.<br/> | ||
+ | <code>uint<count> ruck_count()</code> - возвращает количество предметов в рюкзаке.<br/> | ||
+ | <code>uint<number> slot_number()</code> - возвращает количество слотов.<br/> | ||
+ | <code>float<total_weight> get_inventory_weight()</code> - возвращает суммарный вес инвентаря.<br/> | ||
+ | <code>invalidate_inventory()</code> - принудительно обновляет все данные в инвентаре.<br/> | ||
+ | =====CObject===== | ||
+ | <code>float<radius> radius()</code> - возвращает виртуальный радиус объекта.<br/> | ||
+ | <code>string<path> get_visual_name()</code> - возвращает путь до визуала объекта.<br/> | ||
+ | <code>set_visual_name(string<path>)</code> - устанавливает путь до визуала объекта.<br/> | ||
+ | =====CProjector===== | ||
+ | <code>projector_on()</code> - включает прожектор.<br/> | ||
+ | <code>projector_off()</code> - выключает прожектор.<br/> | ||
+ | <code>bool<is_on> projector_is_on()</code> - возвратит true, если прожектор включён.<br/> | ||
+ | <code>switch_projector(bool<switch_on>)</code> - переключает прожектор.<br/> | ||
+ | =====CSpaceRestrictor===== | ||
+ | <code>float<radius> get_shape_radius()</code> - возвращает радиус рестриктора.<br/> | ||
+ | =====CTorch===== | ||
+ | <code>switch_torch(bool<switch_on>)</code> - переключает фонарь.<br/> | ||
+ | <code>bool<is_on> is_torch_enabled()</code> - возвратит true, если фонарь включён.<br/> | ||
+ | <code>set_torch_range(float<range>)</code> - устанавливает дальность основного света фонаря.<br/> | ||
+ | <code>set_torch_color(vector<R, G, B>)</code> - устанавливает цвет основного света от фонаря.<br/> | ||
+ | <code>set_torch_omni_range(float<range>)</code> - устанавливает дальность амбиент-света фонаря.<br/> | ||
+ | <code>set_torch_omni_color(vector<R, G, B>)</code> - устанавливает цвет амбиент-света от фонаря.<br/> | ||
+ | <code>set_torch_glow_radius(float<radius>)</code> - устанавливает радиус глоу-эффекта от фонарика.<br/> | ||
+ | <code>set_torch_spot_angle(float<angle>)</code> - устанавливает радиус светового пятна от фонарика.<br/> | ||
+ | <code>set_torch_color_animator(string<path>)</code> - устанавливает путь до аниматора цвета.<br/> | ||
+ | <code>switch_night_vision(bool<switch_on>)</code> - переключает состояние ПНВ.<br/> | ||
+ | =====CWeapon===== | ||
+ | <code>int<is_visible>[0 or 1] get_wpn_bone_visible(string<bone_name>)</code> - возвращает видимость кости оружия по имени.<br/> | ||
+ | <code>set_wpn_bone_visible(string<bone_name>, int<visible>[0 or 1])</code> - устанавливает видимость кости оружия по имени.<br/> | ||
+ | ====Хак для изменения значений в памяти объектов==== | ||
+ | =====Регистрация функций в движке===== | ||
+ | <syntaxhighlight lang="lua">// CActor | ||
+ | float get_actor_float(int) | ||
+ | set_actor_float(vector, float, int) | ||
+ | int get_actor_int(string, int) | ||
+ | set_actor_int(int, int) | ||
+ | int get_actor_int16(string, int) | ||
+ | string get_actor_shared_str() | ||
+ | int set_actor_shared_str(string, int) | ||
+ | float get_actor_condition_float(int) | ||
+ | set_actor_condition_float(vector, float, int) | ||
+ | int get_actor_condition_int(string, int) | ||
+ | |||
+ | // CCar | ||
+ | float get_car_float(int) | ||
+ | set_car_float(vector, float, int) | ||
+ | int get_car_int(string, int) | ||
+ | set_car_int(int, int) | ||
+ | int get_car_int16(string, int) | ||
+ | set_car_int16(int, int) | ||
+ | |||
+ | // CCustomMonster | ||
+ | float get_custom_monster_float(int) | ||
+ | int get_custom_monster_int(string, int) | ||
+ | |||
+ | // CGameObject | ||
+ | float get_go_float(int) | ||
+ | set_go_float(vector, float, int) | ||
+ | int get_go_int(string, int) | ||
+ | set_go_int(int, int) | ||
+ | int get_go_int16(string, int) | ||
+ | set_go_int16(int, int) | ||
+ | string get_go_shared_str() | ||
+ | int set_go_shared_str(string, int) | ||
+ | |||
+ | // CHolderCustom | ||
+ | int get_holder_int(string, int) | ||
+ | |||
+ | // CHudItem | ||
+ | float get_hud_float(int) | ||
+ | set_hud_float(vector, float, int) | ||
+ | string get_hud_shared_str() | ||
+ | int set_hud_shared_str(string, int) | ||
+ | int save_hud_bone_float(string, int) | ||
+ | |||
+ | // CInventoryItem | ||
+ | float get_inventory_item_float(int) | ||
+ | set_inventory_item_float(vector, float, int) | ||
+ | int get_inventory_item_int(string, int) | ||
+ | set_inventory_item_int(int, int) | ||
+ | int get_inventory_item_int8(string, int) | ||
+ | set_inventory_item_int8(int, int) | ||
+ | int get_inventory_item_int16(string, int) | ||
+ | set_inventory_item_int16(int, int) | ||
+ | string get_inventory_item_shared_str() | ||
+ | int set_inventory_item_shared_str(string, int) | ||
+ | |||
+ | // CWeapon | ||
+ | float get_wpn_float(int) | ||
+ | set_wpn_float(vector, float, int) | ||
+ | int get_wpn_int(string, int) | ||
+ | set_wpn_int(int, int) | ||
+ | string get_wpn_shared_str() | ||
+ | int set_wpn_shared_str(string, int) | ||
+ | |||
+ | // CWeaponMagazinedWGrenade | ||
+ | int get_wpn_gl_int(string, int) | ||
+ | |||
+ | // Memory access functions | ||
+ | float get_memory_float(int) | ||
+ | set_memory_float(vector, float, int) | ||
+ | int get_memory_int(string, int) | ||
+ | set_memory_int(int, int) | ||
+ | int get_memory_int8(string, int) | ||
+ | set_memory_int8(int, int) | ||
+ | int get_memory_int16(string, int) | ||
+ | set_memory_int16(int, int)</syntaxhighlight> | ||
+ | Методы предназначены для изменения тех значений в памяти игровых объектов, которые недоступны через стандартные средства.<br/> | ||
+ | Применение всех функций практически одинаково, так что рассматриваю только пример на классе CGameObject.<br/> | ||
+ | |||
+ | '''Смещение''' - это смещение адреса нашей переменной от начала класса. Узнать смещения можно несколькими способами:<br/> | ||
+ | 1) посмотреть в дебаговой версии движка, через какой-нибудь дизассембелер;<br/> | ||
+ | 2) прогнать в цикле все значения и вывести их значения в лог, после чего шаманить, сравнивая и догадываясь, какое значение за что отвечает :)<br/> | ||
+ | =====Функция для получения значений из класса CActor===== | ||
+ | '''type''' - тип значения (''integer'' или ''float'')<br/> | ||
+ | '''cycle_length''' - диапазон поиска значений (обычно хватает от 500 до 2000)<br/> | ||
+ | <syntaxhighlight lang="lua">function get_actor_values(type, cycle_length) | ||
+ | if cycle_length then | ||
+ | if type == "float" then | ||
+ | get_console():execute("clear_log") | ||
+ | for i = 1, cycle_length do | ||
+ | local value = db.actor:get_actor_float(i) | ||
+ | if value then log1("Float value = "..value.."; Position = "..i) end | ||
+ | end | ||
+ | flush_log() | ||
+ | elseif type == "integer" then | ||
+ | get_console():execute("clear_log") | ||
+ | for i = 1, cycle_length do | ||
+ | local value = db.actor:get_actor_int(nil, i) | ||
+ | if value then log1("Integer value = "..value.."; Position = "..i) end | ||
+ | end | ||
+ | flush_log() | ||
+ | end | ||
+ | end | ||
+ | end</syntaxhighlight> | ||
+ | Результат записывается в лог игры. | ||
+ | |||
+ | <code>float<value> get_go_float(int<offset>)</code> - возвращает значение с плавающей точкой по заданному смещению.<br/> | ||
+ | <code>set_go_float(nil, float<value>, int<offset>)</code> - устанавливает значение с плавающей точкой по заданному смещению (первый аргумент - заглушка).<br/> | ||
+ | <code>int<value> get_go_int(nil, int<offset>)</code> - возвращает целочисленное значение по заданному смещению (первый аргумент - заглушка).<br/> | ||
+ | <code>set_go_int(int<offset>, int<value>)</code> - устанавливает целочисленное значение по заданному смещению.<br/> | ||
+ | <code>string<value> get_go_shared_str()</code> - возвращает строковое значение по заданному смещению (смещение задается через глобальную функцию <code>set_int_arg0(int<offset>)</code>).<br/> | ||
+ | <code>set_go_shared_str(string<value>, int<offset>)</code> - устанавливает строковое значение по заданному смещению.<br/> | ||
+ | |||
+ | Также, пару слов о методах для ГГ - их существует два типа, для класса '''CActor''' и класса '''CActorCondition'''. В последнем лежит много параметров вроде сытости, алкоголизма, силы прыжка и т.п. | ||
+ | ====Методы для получения адреса базового объекта==== | ||
+ | =====Регистрация функций в движке===== | ||
+ | <syntaxhighlight lang="lua">uint cast_car() | ||
+ | uint cast_game_object() | ||
+ | uint cast_hud_item() | ||
+ | uint cast_inventory_box() | ||
+ | uint cast_inventory_item() | ||
+ | uint cast_weapon()</syntaxhighlight> | ||
+ | Методы позволяют получить адрес в памяти, откуда начинается базовый объект (адрес в большинстве случаев не совпадает с началом объекта в целом). Результат можно использовать в разных хаках, когда известно смещение относительно конкретного класса. | ||
+ | ====Методы для проверки типа объекта==== | ||
+ | =====Регистрация функций в движке===== | ||
+ | <syntaxhighlight lang="lua">bool is_actor() | ||
+ | bool is_ammo() | ||
+ | bool is_anomaly() | ||
+ | bool is_antirad() | ||
+ | bool is_artefact() | ||
+ | bool is_binoculars() | ||
+ | bool is_bottle_item() | ||
+ | bool is_car() | ||
+ | bool is_custom_monster() | ||
+ | bool is_eatable_item() | ||
+ | bool is_entity_alive() | ||
+ | bool is_explosive() | ||
+ | bool is_food_item() | ||
+ | bool is_game_object() | ||
+ | bool is_grenade() | ||
+ | bool is_grenade_launcher() | ||
+ | bool is_hanging_lamp() | ||
+ | bool is_helicopter() | ||
+ | bool is_holder() | ||
+ | bool is_hud_item() | ||
+ | bool is_inventory_box() | ||
+ | bool is_inventory_item() | ||
+ | bool is_inventory_owner() | ||
+ | bool is_knife() | ||
+ | bool is_medkit() | ||
+ | bool is_missile() | ||
+ | bool is_monster() | ||
+ | bool is_outfit() | ||
+ | bool is_physics_shell_holder() | ||
+ | bool is_projector() | ||
+ | bool is_scope() | ||
+ | bool is_script_zone() | ||
+ | bool is_silencer() | ||
+ | bool is_space_restrictor() | ||
+ | bool is_stalker() | ||
+ | bool is_torch() | ||
+ | bool is_trader() | ||
+ | bool is_weapon() | ||
+ | bool is_weapon_gl() | ||
+ | bool is_weapon_magazined() | ||
+ | bool is_weapon_pistol() | ||
+ | bool is_weapon_shotgun()</syntaxhighlight> | ||
+ | Методы предназначены для проверки типа объекта (к какому классу принадлежит). Применение достаточно простое: | ||
+ | <syntaxhighlight lang="lua">if obj:is_<class_name>() then | ||
+ | ... | ||
+ | end</syntaxhighlight> | ||
+ | ====Методы не имеющие привязки к определенному объекту==== | ||
+ | =====Регистрация функций в движке===== | ||
+ | <syntaxhighlight lang="lua">game_object* get_object_arg_1(int) | ||
+ | set_object_arg_1(game_object*) | ||
+ | set_calibrating_vector(vector) | ||
+ | set_vector_global_arg_1(vector) | ||
+ | set_vector_global_arg_2(vector) | ||
+ | set_vector_global_arg_3(vector) | ||
+ | set_vector_global_arg_4(vector)</syntaxhighlight> | ||
+ | Эти методы предназначены для передачи или получения значений в(из) другие(их) методы(ов), в которых, по причине отсутствия необходимого прототипа, штатно это сделать нельзя. | ||
+ | Могут вызываться для любого типа объекта в игре. | ||
+ | [[Категория:Редактирование движка]] |
Версия 01:57, 9 февраля 2016
X-Ray extensions
Тип | Расширения движка |
Авторы | malandrinus, kolmogor, K.D., RayTwitty (aka Shadows),
Real Wolf, kstn, _призрак_, SkyLoader |
Официальный репозиторий | GitHub |
Официальная тема | AMK форум |
Этот проект представляет собой набор добавлений, расширяющих возможности движка для скриптеров, а также, в ряде случаев, меняющих поведение игры. Изменения реализованы в виде бинарных патчей библиотек и исполняемых файлов.
Содержание
- 1 Изменения
- 1.1 ТЧ
- 1.1.1 Класс game_object
- 1.1.1.1 Основные методы
- 1.1.1.1.1 Регистрация функций в движке
- 1.1.1.1.2 CActor
- 1.1.1.1.3 CCar
- 1.1.1.1.4 CEntityAlive
- 1.1.1.1.5 CGameObject
- 1.1.1.1.6 CHangingLamp
- 1.1.1.1.7 CHolderCustom
- 1.1.1.1.8 CHudItem
- 1.1.1.1.9 CInventoryBox
- 1.1.1.1.10 CInventoryItem
- 1.1.1.1.11 CInventoryOwner
- 1.1.1.1.12 CObject
- 1.1.1.1.13 CProjector
- 1.1.1.1.14 CSpaceRestrictor
- 1.1.1.1.15 CTorch
- 1.1.1.1.16 CWeapon
- 1.1.1.2 Хак для изменения значений в памяти объектов
- 1.1.1.3 Методы для получения адреса базового объекта
- 1.1.1.4 Методы для проверки типа объекта
- 1.1.1.5 Методы не имеющие привязки к определенному объекту
- 1.1.1.1 Основные методы
- 1.1.1 Класс game_object
- 1.1 ТЧ
Изменения
ТЧ
Класс game_object
Основные методы
Регистрация функций в движке
// CActor
set_actor_visual(string)
float get_sprint_factor()
set_sprint_factor(float)
float get_actor_take_dist()
set_actor_take_dist(float)
float get_actor_max_weight()
set_actor_max_weight(float)
float get_actor_max_walk_weight()
set_actor_max_walk_weight(float)
open_inventory_box(game_object*)
set_camera_direction(vector)
update_camera_direction(game_object*)
enable_car_panel(bool)
attach_vehicle(game_object*)
detach_vehicle(vector)
set_goodwill_ex(int, int, int)
change_goodwill_ex(int, int, int)
float get_camera_fov()
set_camera_fov(float)
restore_camera_fov()
float get_hud_fov()
set_hud_fov(float)
set_hud_animation_channel(int)
set_hud_animation_callback_param(int)
set_use_hud_animation_callback(bool)
clear_personal_record(int, int)
uint actor_body_state()
bool is_actor_normal()
bool is_actor_crouch()
bool is_actor_creep()
bool is_actor_climb()
bool is_actor_walking()
bool is_actor_running()
bool is_actor_sprinting()
bool is_actor_crouching()
bool is_actor_creeping()
bool is_actor_climbing()
// CCar
float get_fuel()
set_fuel(float)
float get_fuel_consumption()
set_fuel_consumption(float)
float get_fuel_tank()
// CEntityAlive
heal_wounds(float)
update_condition()
// CGameObject
string specific_character()
int get_bone_visible(string, int)
int set_bone_visible(string, int)
int get_bone_id(string, int)
string get_bone_name()
bool has_visual()
ini_file* get_visual_ini()
bool nonscript_usable()
// CHangingLamp
set_lsf_speed(float)
set_lsf_amount(float)
set_lsf_smap_jitter(float)
float get_lsf_speed()
// CHolderCustom
game_object* get_holder_owner()
// CHudItem
play_hud_animation(string, bool)
uint get_hud_animation_remaining_time()
int get_hud_animation_length(string, int)
bool is_cyclic_hud_animation()
bool has_hud_animation(string)
uint get_hud_item_state()
int get_hud_bone_id(string, int)
vector get_hud_bone_pos(string)
int get_hud_bone_visible(string, int)
int set_hud_bone_visible(string, int)
// CInventoryBox
game_object* object_from_inv_box(int)
uint inv_box_count()
// CInventoryItem
float get_weight()
// CInventoryOwner
bool is_on_belt(game_object*)
bool is_in_ruck(game_object*)
bool is_in_slot(game_object*)
bool move_to_ruck(game_object*)
bool move_to_belt(game_object*)
bool move_to_slot(game_object*)
bool move_to_slot_and_activate(game_object*)
game_object* item_on_belt(int)
game_object* item_in_ruck(int)
uint belt_count()
uint ruck_count()
uint slot_number()
float get_inventory_weight()
invalidate_inventory()
// CObject
float radius()
string get_visual_name()
set_visual_name(string)
// CProjector
projector_on()
projector_off()
bool projector_is_on()
switch_projector(bool)
// CSpaceRestrictor
float get_shape_radius()
// CTorch
switch_torch(bool)
bool is_torch_enabled()
set_torch_range(float)
set_torch_color(vector)
set_torch_omni_range(float)
set_torch_omni_color(vector)
set_torch_glow_radius(float)
set_torch_spot_angle(float)
set_torch_color_animator(string)
switch_night_vision(bool)
// CWeapon
int get_wpn_bone_visible(string, int)
int set_wpn_bone_visible(string, int)
CActor
set_actor_visual(string<path>)
- устанавливает путь до визуала.
float<speed> get_sprint_factor()
- возвращает скорость бега.
set_sprint_factor(float<speed>)
- устанавливает скорость бега.
float<dist> get_actor_take_dist()
- возвращает дистанцию поднятия предметов.
set_actor_take_dist(float<dist>)
- устанавливает дистанцию поднятия предметов.
float<max_weight> get_actor_max_weight()
- возвращает максимальный вес рюкзака.
set_actor_max_weight(float<max_weight>)
- устанавливает максимальный вес рюкзака.
float<max_walk_weight> get_actor_max_walk_weight()
- возвращает максимально-переносимый вес рюкзака.
set_actor_max_walk_weight(float<max_walk_weight>)
- устанавливает максимально-переносимый вес рюкзака.
open_inventory_box(game_object*<box_obj>)
- открывает окно обыска инвентарого ящика.
set_camera_direction(vector<x, y, z>)
- устанавливает направление камеры.
update_camera_direction(game_object*<target_obj>)
- направляет камеру в позицию объекта.
enable_car_panel(bool<is_visible>)
- устанавливает видимость панели машины (прогресс-бар состояния).
attach_vehicle(game_object*<holder_obj>)
- садит ГГ в машину или станковое оружие.
detach_vehicle(vector<exit_pos>)
- высаживает ГГ из машины в заданную позицию на уровне.
set_goodwill_ex(int<who_id>, int<to_whom_id>, int<goodwill>)
- устанавливает отношения между персонажами.
change_goodwill_ex(int<who_id>, int<to_whom_id>, int<goodwill_change>)
- изменяет отношения между персонажами на заданное значение.
float<fov> get_camera_fov()
- возвращает текущий fov камеры.
set_camera_fov(float<fov>)
- устанавливает fov камеры.
restore_camera_fov()
- восстанавливает предыдущий fov камеры (заданный методом set_camera_fov
).
float<dist> get_hud_fov()
- возвращает расстояние от камеры до худа оружия.
set_hud_fov(float<dist>)
- устанавливает расстояние от камеры до худа оружия.
set_hud_animation_channel(int<blend_channel>)
-- устанавливает номер канала блендинга анимации, который будет передан в колбек на завершение анимации (только при проигрывании анимации через метод play_hud_animation
).
set_hud_animation_callback_param(int<param>)
-- устанавливает произвольный параметр, который будет передан в колбек на завершение анимации (только при проигрывании анимации через метод play_hud_animation
).
set_use_hud_animation_callback(bool<use_callback>)
-- включает использование колбека на завершение анимации (только при проигрывании анимации через метод play_hud_animation
).
clear_personal_record(int<id_from>, int<id_to>)
- очищает отношения между двумя мобами по их id.
uint<state> actor_body_state()
- возвращает номер текущего стейта.
bool is_actor_normal()
- возвратит true, если ГГ просто стоит.
bool is_actor_crouch()
- возвратит true, если ГГ присел.
bool is_actor_creep()
- возвратит true, если ГГ глубоко присел.
bool is_actor_climb()
- возвратит true, если ГГ находится на лестнице.
bool is_actor_walking()
- возвратит true, если ГГ идет медленным шагом.
bool is_actor_running()
- возвратит true, если ГГ идет быстрым шагом.
bool is_actor_sprinting()
- возвратит true, если ГГ бежит.
bool is_actor_crouching()
- возвратит true, если ГГ двигается в присяде.
bool is_actor_creeping()
- возвратит true, если ГГ двигается в глубоком присяде.
bool is_actor_climbing()
- возвратит true, если ГГ двигается на лестнице.
CCar
float<fuel> get_fuel()
- возвращает текущее количество топлива.
set_fuel(float<fuel>)
- устанавливает текущее количество топлива.
float<consumption> get_fuel_consumption()
- возвращает расход топлива.
set_fuel_consumption(float<consumption>)
- устанавливает расход топлива.
float<tank_size> get_fuel_tank()
- возвращает размер топливного бака.
CEntityAlive
heal_wounds(float<factor>)
- уменьшает силу кровотечения.
update_condition()
- принудительно обновляет внутренние параметры состояния персонажа (жизнь, выносливость, кровотечение и т.д.).
CGameObject
string<profile_name> specific_character()
- возвращает название профиля персонажа.
int<is_visible>[0 or 1] get_bone_visible(string<bone_name>)
- возвращает видимость кости по имени.
set_bone_visible(string<bone_name>, int<visible>[0 or 1])
- устанавливает видимость кости по имени.
int<bone_id> get_bone_id(string<bone_name>)
- возвращает id кости по имени.
string<bone_name> get_bone_name()
- возвращает имя кости по id (для установки id кости, необходимо использовать глобальную функцию set_int_arg0(int<bone_id>)
).
bool<visual> has_visual()
- возвратит true, если объект имеет визуал.
ini_file* get_visual_ini()
- возвращает ссылку на внутренний конфиг модели.
bool<is_usable> nonscript_usable()
- возвратит true, если над объектом разрешены нескриптовые действия.
CHangingLamp
set_lsf_speed(float<speed>)
-- ###########???###########
set_lsf_amount(float<amount>)
set_lsf_smap_jitter(float<jitter>)
float<speed> get_lsf_speed()
Эти методы изменяют параметры тени от источника света. Для их работы необходимы правки движка и шейдеров. Широко используются в моде OGSE.
CHolderCustom
game_object*<owner_obj> get_holder_owner()
- возвращает владельца машины или станкового оружия.
CHudItem
play_hud_animation(string<anim_name>, bool<mix_in>)
- проигрывает анимацию с заданным именем.
uint<remaining_time> get_hud_animation_remaining_time()
- возвращает время, оставшееся до окончания текущей анимации.
int<length> get_hud_animation_length(string<anim_name>)
- возвращает длительность анимации по её имени.
bool<is_cyclic> is_cyclic_hud_animation()
- возвратит true, если текущая анимация зациклена.
bool<has_anim> has_hud_animation(string<anim_name>)
- возвратит true, если анимация есть в модели.
uint<state> get_hud_item_state()
- возвращает номер текущего стейта.
int<bone_id> get_hud_bone_id(string<bone_name>)
- возвращает id кости по имени.
vector<pos> get_hud_bone_pos(string<bone_name>)
- возвращает позицию кости по имени.
int<is_visible>[0 or 1] get_hud_bone_visible(string<bone_name>)
- возвращает видимость кости по имени.
set_hud_bone_visible(string<bone_name>, int<visible>[0 or 1])
- устанавливает видимость кости по имени.
CInventoryBox
game_object*<item_obj> object_from_inv_box(int<object_number>)
- возвращает предмет в ящике по номеру.
uint<items_count> inv_box_count()
- возвращает количество предметов в ящике.
CInventoryItem
float<weight> get_weight()
- возвращает вес предмета.
CInventoryOwner
bool<is_on_belt> is_on_belt(game_object*<item_obj>)
- возвратит true, если предмет на поясе.
bool<is_in_ruck> is_in_ruck(game_object*<item_obj>)
- возвратит true, если предмет в рюкзаке.
bool<is_in_slot> is_in_slot(game_object*<item_obj>)
- возвратит true, если предмет в слоте.
move_to_ruck(game_object*<item_obj>)
- перемещает предмет в рюкзак.
move_to_belt(game_object*<item_obj>)
- перемещает предмет на пояс.
move_to_slot(game_object*<item_obj>)
- перемещает предмет в слот.
move_to_slot_and_activate(game_object*<item_obj>)
- перемещает предмет в слот и активирует его.
game_object*<item_obj> item_on_belt(int<object_number>)
- возвращает предмет на поясе по номеру.
game_object*<item_obj> item_in_ruck(int<object_number>)
- возвращает предмет в рюкзаке по номеру.
uint<count> belt_count()
- возвращает количество предметов на поясе.
uint<count> ruck_count()
- возвращает количество предметов в рюкзаке.
uint<number> slot_number()
- возвращает количество слотов.
float<total_weight> get_inventory_weight()
- возвращает суммарный вес инвентаря.
invalidate_inventory()
- принудительно обновляет все данные в инвентаре.
CObject
float<radius> radius()
- возвращает виртуальный радиус объекта.
string<path> get_visual_name()
- возвращает путь до визуала объекта.
set_visual_name(string<path>)
- устанавливает путь до визуала объекта.
CProjector
projector_on()
- включает прожектор.
projector_off()
- выключает прожектор.
bool<is_on> projector_is_on()
- возвратит true, если прожектор включён.
switch_projector(bool<switch_on>)
- переключает прожектор.
CSpaceRestrictor
float<radius> get_shape_radius()
- возвращает радиус рестриктора.
CTorch
switch_torch(bool<switch_on>)
- переключает фонарь.
bool<is_on> is_torch_enabled()
- возвратит true, если фонарь включён.
set_torch_range(float<range>)
- устанавливает дальность основного света фонаря.
set_torch_color(vector<R, G, B>)
- устанавливает цвет основного света от фонаря.
set_torch_omni_range(float<range>)
- устанавливает дальность амбиент-света фонаря.
set_torch_omni_color(vector<R, G, B>)
- устанавливает цвет амбиент-света от фонаря.
set_torch_glow_radius(float<radius>)
- устанавливает радиус глоу-эффекта от фонарика.
set_torch_spot_angle(float<angle>)
- устанавливает радиус светового пятна от фонарика.
set_torch_color_animator(string<path>)
- устанавливает путь до аниматора цвета.
switch_night_vision(bool<switch_on>)
- переключает состояние ПНВ.
CWeapon
int<is_visible>[0 or 1] get_wpn_bone_visible(string<bone_name>)
- возвращает видимость кости оружия по имени.
set_wpn_bone_visible(string<bone_name>, int<visible>[0 or 1])
- устанавливает видимость кости оружия по имени.
Хак для изменения значений в памяти объектов
Регистрация функций в движке
// CActor
float get_actor_float(int)
set_actor_float(vector, float, int)
int get_actor_int(string, int)
set_actor_int(int, int)
int get_actor_int16(string, int)
string get_actor_shared_str()
int set_actor_shared_str(string, int)
float get_actor_condition_float(int)
set_actor_condition_float(vector, float, int)
int get_actor_condition_int(string, int)
// CCar
float get_car_float(int)
set_car_float(vector, float, int)
int get_car_int(string, int)
set_car_int(int, int)
int get_car_int16(string, int)
set_car_int16(int, int)
// CCustomMonster
float get_custom_monster_float(int)
int get_custom_monster_int(string, int)
// CGameObject
float get_go_float(int)
set_go_float(vector, float, int)
int get_go_int(string, int)
set_go_int(int, int)
int get_go_int16(string, int)
set_go_int16(int, int)
string get_go_shared_str()
int set_go_shared_str(string, int)
// CHolderCustom
int get_holder_int(string, int)
// CHudItem
float get_hud_float(int)
set_hud_float(vector, float, int)
string get_hud_shared_str()
int set_hud_shared_str(string, int)
int save_hud_bone_float(string, int)
// CInventoryItem
float get_inventory_item_float(int)
set_inventory_item_float(vector, float, int)
int get_inventory_item_int(string, int)
set_inventory_item_int(int, int)
int get_inventory_item_int8(string, int)
set_inventory_item_int8(int, int)
int get_inventory_item_int16(string, int)
set_inventory_item_int16(int, int)
string get_inventory_item_shared_str()
int set_inventory_item_shared_str(string, int)
// CWeapon
float get_wpn_float(int)
set_wpn_float(vector, float, int)
int get_wpn_int(string, int)
set_wpn_int(int, int)
string get_wpn_shared_str()
int set_wpn_shared_str(string, int)
// CWeaponMagazinedWGrenade
int get_wpn_gl_int(string, int)
// Memory access functions
float get_memory_float(int)
set_memory_float(vector, float, int)
int get_memory_int(string, int)
set_memory_int(int, int)
int get_memory_int8(string, int)
set_memory_int8(int, int)
int get_memory_int16(string, int)
set_memory_int16(int, int)
Методы предназначены для изменения тех значений в памяти игровых объектов, которые недоступны через стандартные средства.
Применение всех функций практически одинаково, так что рассматриваю только пример на классе CGameObject.
Смещение - это смещение адреса нашей переменной от начала класса. Узнать смещения можно несколькими способами:
1) посмотреть в дебаговой версии движка, через какой-нибудь дизассембелер;
2) прогнать в цикле все значения и вывести их значения в лог, после чего шаманить, сравнивая и догадываясь, какое значение за что отвечает :)
Функция для получения значений из класса CActor
type - тип значения (integer или float)
cycle_length - диапазон поиска значений (обычно хватает от 500 до 2000)
function get_actor_values(type, cycle_length)
if cycle_length then
if type == "float" then
get_console():execute("clear_log")
for i = 1, cycle_length do
local value = db.actor:get_actor_float(i)
if value then log1("Float value = "..value.."; Position = "..i) end
end
flush_log()
elseif type == "integer" then
get_console():execute("clear_log")
for i = 1, cycle_length do
local value = db.actor:get_actor_int(nil, i)
if value then log1("Integer value = "..value.."; Position = "..i) end
end
flush_log()
end
end
end
Результат записывается в лог игры.
float<value> get_go_float(int<offset>)
- возвращает значение с плавающей точкой по заданному смещению.
set_go_float(nil, float<value>, int<offset>)
- устанавливает значение с плавающей точкой по заданному смещению (первый аргумент - заглушка).
int<value> get_go_int(nil, int<offset>)
- возвращает целочисленное значение по заданному смещению (первый аргумент - заглушка).
set_go_int(int<offset>, int<value>)
- устанавливает целочисленное значение по заданному смещению.
string<value> get_go_shared_str()
- возвращает строковое значение по заданному смещению (смещение задается через глобальную функцию set_int_arg0(int<offset>)
).
set_go_shared_str(string<value>, int<offset>)
- устанавливает строковое значение по заданному смещению.
Также, пару слов о методах для ГГ - их существует два типа, для класса CActor и класса CActorCondition. В последнем лежит много параметров вроде сытости, алкоголизма, силы прыжка и т.п.
Методы для получения адреса базового объекта
Регистрация функций в движке
uint cast_car()
uint cast_game_object()
uint cast_hud_item()
uint cast_inventory_box()
uint cast_inventory_item()
uint cast_weapon()
Методы позволяют получить адрес в памяти, откуда начинается базовый объект (адрес в большинстве случаев не совпадает с началом объекта в целом). Результат можно использовать в разных хаках, когда известно смещение относительно конкретного класса.
Методы для проверки типа объекта
Регистрация функций в движке
bool is_actor()
bool is_ammo()
bool is_anomaly()
bool is_antirad()
bool is_artefact()
bool is_binoculars()
bool is_bottle_item()
bool is_car()
bool is_custom_monster()
bool is_eatable_item()
bool is_entity_alive()
bool is_explosive()
bool is_food_item()
bool is_game_object()
bool is_grenade()
bool is_grenade_launcher()
bool is_hanging_lamp()
bool is_helicopter()
bool is_holder()
bool is_hud_item()
bool is_inventory_box()
bool is_inventory_item()
bool is_inventory_owner()
bool is_knife()
bool is_medkit()
bool is_missile()
bool is_monster()
bool is_outfit()
bool is_physics_shell_holder()
bool is_projector()
bool is_scope()
bool is_script_zone()
bool is_silencer()
bool is_space_restrictor()
bool is_stalker()
bool is_torch()
bool is_trader()
bool is_weapon()
bool is_weapon_gl()
bool is_weapon_magazined()
bool is_weapon_pistol()
bool is_weapon_shotgun()
Методы предназначены для проверки типа объекта (к какому классу принадлежит). Применение достаточно простое:
if obj:is_<class_name>() then
...
end
Методы не имеющие привязки к определенному объекту
Регистрация функций в движке
game_object* get_object_arg_1(int)
set_object_arg_1(game_object*)
set_calibrating_vector(vector)
set_vector_global_arg_1(vector)
set_vector_global_arg_2(vector)
set_vector_global_arg_3(vector)
set_vector_global_arg_4(vector)
Эти методы предназначены для передачи или получения значений в(из) другие(их) методы(ов), в которых, по причине отсутствия необходимого прототипа, штатно это сделать нельзя. Могут вызываться для любого типа объекта в игре.