Редактирование: X-Ray extensions
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 8: | Строка 8: | ||
Real Wolf, kstn, _призрак_, SkyLoader | Real Wolf, kstn, _призрак_, SkyLoader | ||
|- | |- | ||
− | | ''' | + | | '''Официальный репозиторий''' || [https://github.com/KD87/xray-extensions GitHub] |
|- | |- | ||
− | | ''' | + | | '''Официальная тема''' || [http://www.amk-team.ru/forum/topic/10538-x-ray-extensions AMK форум] |
|} | |} | ||
</div> | </div> | ||
Этот проект представляет собой набор добавлений, расширяющих возможности движка для скриптеров, а также, в ряде случаев, меняющих поведение игры. Изменения реализованы в виде бинарных патчей библиотек и исполняемых файлов. | Этот проект представляет собой набор добавлений, расширяющих возможности движка для скриптеров, а также, в ряде случаев, меняющих поведение игры. Изменения реализованы в виде бинарных патчей библиотек и исполняемых файлов. | ||
− | Информация данной статьи актуальна для ''' | + | Информация данной статьи актуальна для '''184''' ревизии официального репозитория. |
=ТЧ= | =ТЧ= | ||
==Скриптовый API== | ==Скриптовый API== | ||
Строка 96: | Строка 96: | ||
bool is_cyclic_hud_animation() | bool is_cyclic_hud_animation() | ||
bool has_hud_animation(string) | bool has_hud_animation(string) | ||
− | |||
− | |||
uint get_hud_item_state() | uint get_hud_item_state() | ||
int get_hud_bone_id(string, int) | int get_hud_bone_id(string, int) | ||
Строка 167: | Строка 165: | ||
<code>set_actor_max_walk_weight(float<max_walk_weight>)</code> - устанавливает максимально-переносимый вес рюкзака.<br/> | <code>set_actor_max_walk_weight(float<max_walk_weight>)</code> - устанавливает максимально-переносимый вес рюкзака.<br/> | ||
<code>open_inventory_box(game_object*<box_obj>)</code> - открывает окно обыска инвентарного ящика.<br/> | <code>open_inventory_box(game_object*<box_obj>)</code> - открывает окно обыска инвентарного ящика.<br/> | ||
− | <code>set_camera_direction(vector< | + | <code>set_camera_direction(vector<x, y, z>)</code> - устанавливает направление камеры.<br/> |
<code>update_camera_direction(game_object*<target_obj>)</code> - направляет камеру в позицию объекта.<br/> | <code>update_camera_direction(game_object*<target_obj>)</code> - направляет камеру в позицию объекта.<br/> | ||
<code>enable_car_panel(bool<is_visible>)</code> - устанавливает видимость панели машины (прогресс-бар состояния).<br/> | <code>enable_car_panel(bool<is_visible>)</code> - устанавливает видимость панели машины (прогресс-бар состояния).<br/> | ||
Строка 208: | Строка 206: | ||
<code>set_bone_visible(string<bone_name>, int<visible>[0 or 1])</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>int<bone_id> get_bone_id(string<bone_name>)</code> - возвращает id кости по имени.<br/> | ||
− | <code>string<bone_name> get_bone_name()</code> - возвращает имя кости по id (для | + | <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>bool<visual> has_visual()</code> - возвратит true, если объект имеет визуал.<br/> | ||
<code>ini_file* get_visual_ini()</code> - возвращает ссылку на внутренний конфиг модели.<br/> | <code>ini_file* get_visual_ini()</code> - возвращает ссылку на внутренний конфиг модели.<br/> | ||
Строка 227: | Строка 225: | ||
<code>bool<is_cyclic> is_cyclic_hud_animation()</code> - возвратит true, если текущая анимация зациклена.<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>bool<has_anim> has_hud_animation(string<anim_name>)</code> - возвратит true, если анимация есть в модели.<br/> | ||
− | |||
− | |||
<code>uint<state> get_hud_item_state()</code> - возвращает номер текущего стейта.<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>int<bone_id> get_hud_bone_id(string<bone_name>)</code> - возвращает id кости по имени.<br/> | ||
Строка 365: | Строка 361: | ||
''Смещение'' - это позиция нужной переменной в памяти относительно начала класса. Узнать смещение можно несколькими способами:<br/> | ''Смещение'' - это позиция нужной переменной в памяти относительно начала класса. Узнать смещение можно несколькими способами:<br/> | ||
− | |||
# при помощи движка с отладочной информацией через дизассемблер (например, в ''IDA Pro'' выбрав нужную структуру во вкладке ''Local Types'');<br/> | # при помощи движка с отладочной информацией через дизассемблер (например, в ''IDA Pro'' выбрав нужную структуру во вкладке ''Local Types'');<br/> | ||
# сканируя все смещения и выводя их значения в лог (однако, чтобы выяснить какое значение соответствует какому свойству класса, необходимо проводить дополнительные проверки). | # сканируя все смещения и выводя их значения в лог (однако, чтобы выяснить какое значение соответствует какому свойству класса, необходимо проводить дополнительные проверки). | ||
Строка 551: | Строка 546: | ||
<code>advance_game_time(int<time_ms>)</code> - прокручивает игровое время вперед на заданное количество миллисекунд.<br/> | <code>advance_game_time(int<time_ms>)</code> - прокручивает игровое время вперед на заданное количество миллисекунд.<br/> | ||
<code>game_object*<obj> get_second_talker()</code> - возвращает игровой объект, с которым в данный момент открыто окно разговора.<br/> | <code>game_object*<obj> get_second_talker()</code> - возвращает игровой объект, с которым в данный момент открыто окно разговора.<br/> | ||
− | <code>int<lvid> vertex_id()</code> - возвращает level_vertex_id по позиции на уровне (для | + | <code>int<lvid> vertex_id()</code> - возвращает level_vertex_id по позиции на уровне (для установки позиции, необходимо использовать функцию игрового объекта <code>obj:set_vector_global_arg_1(vector<pos>)</code>).<br/> |
<code>float<value> get_memory_float(nil, int<addr>)</code> - возвращает число с плавающей точкой по абсолютному адресу.<br/> | <code>float<value> get_memory_float(nil, int<addr>)</code> - возвращает число с плавающей точкой по абсолютному адресу.<br/> | ||
Строка 735: | Строка 730: | ||
<code>float<value> GetFValue()</code> - возвращает текущее значение ползунка.<br/> | <code>float<value> GetFValue()</code> - возвращает текущее значение ползунка.<br/> | ||
<code>bool<changed> IsChanged()</code> - возвратит true, если значение было изменено с момента последнего сохранения окна опций.<br/> | <code>bool<changed> IsChanged()</code> - возвратит true, если значение было изменено с момента последнего сохранения окна опций.<br/> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Дополнительная информация=== | ===Дополнительная информация=== | ||
====Подсветка текста в консоли==== | ====Подсветка текста в консоли==== | ||
Строка 841: | Строка 751: | ||
После спец-символа цвета обязательно должен быть хотя бы один пробел, иначе строка будет выведена обрезанной. | После спец-символа цвета обязательно должен быть хотя бы один пробел, иначе строка будет выведена обрезанной. | ||
====Общие рекомендации==== | ====Общие рекомендации==== | ||
− | При использовании правок движка из этого проекта, рекомендуется расширить некоторые таблицы новыми значениями, например таблицы с идентификаторами колбеков, идентификаторами клавиш и т.п | + | При использовании правок движка из этого проекта, рекомендуется расширить некоторые таблицы новыми значениями, например таблицы с идентификаторами колбеков, идентификаторами клавиш и т.п.<br/> |
− | + | Код следует поместить в главный модуль '''_g.script'''. | |
− | Код следует поместить в главный модуль '''_g.script'''. | ||
− | + | '''callback''' | |
<syntaxhighlight lang="lua">callback["on_key_press"] = 123 | <syntaxhighlight lang="lua">callback["on_key_press"] = 123 | ||
callback["on_key_release"] = 124 | callback["on_key_release"] = 124 | ||
Строка 943: | Строка 852: | ||
rqtDyn = 13, -- rqtObject + rqtShape + rqtObstacle | rqtDyn = 13, -- rqtObject + rqtShape + rqtObstacle | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
− | + | Также рекомендуется использовать следующие скриптовые обвязки:<br/> | |
+ | |||
'''Глобальное пространство имен''' | '''Глобальное пространство имен''' | ||
<syntaxhighlight lang="lua">-- возвращает имя кости по ее индексу | <syntaxhighlight lang="lua">-- возвращает имя кости по ее индексу | ||
Строка 949: | Строка 859: | ||
set_int_arg0(bone_id) | set_int_arg0(bone_id) | ||
return obj:get_bone_name() | return obj:get_bone_name() | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end</syntaxhighlight> | end</syntaxhighlight> | ||
'''level''' | '''level''' |