Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: X-Ray extensions
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
NanoBot-AMK
Проект X-Ray extensions!
Буду сюда скидывать свои наработки. В планах от рефакторить проект, так что он больше был похож на проекты на основе исходников.
Максимальное использования макросов, меньше быдлокода, использования кода функций вне proc endp запрещено, максимально использовать структуры, которые берутся из декомпиляции IDA Pro исполняемых файлов с использованием дебаговых файлов. Так же код будет оформляться так, что бы можно было просто портировать в исходники, т.е. комментировать псевдокодом С++.
Мои ревизии:
rev231_nanobot
rev233_nanobot
rev234_nanobot
rev235_nanobot
rev236_nanobot
rev237_nanobot
rev238_nanobot
rev239_nanobot
rev230.10_nanobot
rev230.11_nanobot
rev230.12_nanobot
Проект создан на основе XRay_Extensions_portable macron'а.

Описание ревизий
rev231
ЧН Колбек на выстрел.

ЧН Для турелей на основе БТР сделал экспериментальную правку для без проблемного открывания дверей.

ЧН ЗП Вывод начального адреса xrGame.dll для вычисления реального адреса вылета при
вылетах типа XXXX:YYYYYYYY xrGame.dll
Реальный адрес вычисляется так: YYYYYYYY - StartAdress + 10000000h, полученное значение
вводят в IDA в поля вызываемой кнопкой G и получают функцию где произошло исключение.

ЧН ЗП Пофиксел вылет "смерть актера в машине".

(с) НаноБот

rev233
ЗП Колбек на выстрел (передаёт вектор направления)
ЗП Возможность использовать скрипты в мультиплеере (включение биндеров)
ЗП Добавлено пространство имён game_object_fix
Реализованы функции:
Проверка типа объекта (аналогичны функциям из ТЧ)
"is_game_object"
"cast_game_object"
"cast_car"
"is_car"
"is_helicopter"
"is_holder"
"is_entity_alive"
"is_inventory_item"
"cast_inventory_item"
"is_inventory_owner"
"is_actor"
"is_custom_monster"
"is_weapon"
"cast_weapon"
"is_weapon_gl"
"is_inventory_box"
"cast_inventory_box"
"is_medkit"
"is_eatable_item"
"is_antirad"
"is_outfit"
"is_scope"
"is_silencer"
"is_grenade_launcher"
"is_weapon_magazined"
"is_space_restrictor"
"is_stalker"
"is_anomaly"
"is_monster"
"is_explosive"
"is_script_zone"
"is_projector"
"is_trader"
"is_hud_item"
"cast_hud_item"
"is_food_item"
"is_artefact"
"is_ammo"
"is_missile"
"is_physics_shell_holder"
"is_grenade"
"is_bottle_item"
"is_hanging_lamp"
"is_knife"
"is_binoculars"
"is_weapon_pistol"
"is_weapon_shotgun"
"is_weapon_autoshotgun"

"is_exploded" ; взрывной объект взорван?
"object_luminocity" ; уровень освещенности объекта
; методы для оценки состояния актора
"is_actor_normal"
"is_actor_crouch"
"is_actor_creep"
"is_actor_climb"
"is_actor_walking"
"is_actor_running"
"is_actor_sprinting"
"is_actor_crouching"
"is_actor_creeping"
"is_actor_climbing"

; Для класса CWeaponMagazined
"get_fire_mode" ; получить режим огня
"get_default_ammo_type" ; получить дефолтовый тип патрона (имя секции)
"get_ammo_type" ; получить реальный тип патрона
"get_rpm" ; получить скорострельность
"set_rpm" ; установить скорострельность
"is_grenade_mode" ; режим гранатомёта?

ЗП В пространстве имён level добавлено:
Функции для трассировки геометрии.
"raypick_set_flags_dir_dist" ; установить - флаги, направление, дистанцию.
"raypick_set_ignoreobjid_pos" ; установить - ID игнорируемого объекта, позицию.
"raypick_query" ; выполнить трассировку.
"raypick_get_object" ; получить объект.
"raypick_get_distance" ; получить дистанцию.
"raypick_get_element" ; получить элемент геометрии или номер кости объекта.
"raypick_get_name_bone" ; получить имя кости объекта.
"raypick_get_normal" ; получить вектор нормали геометрии или объекта.
"raypick_get_end_point" ; получить позицию, куда упёрлась точка трассировки.
"raypick_get_shoot_factor" ; получить ShootFactor геометрии или объекта.
"raypick_get_flags" ; получить флаги геометрии или объекта.
Для мульти-плейра.
"current_actor" ; получить объект текущего актора
"on_server" ; проверка, это сервер?
ЗП В классе CUIStatic добавлено:
"SetColor" ; установить цвет текстуры (через Frect).
ЗП Метод explode изменён, теперь надо задавать объект инициатора, это обязательно. (bomb:explode(npc))
Класс CWeaponMagazinedWGrenade существенно доработан:
Есть возможность стрелять дробью.
При смене типа боеприпаса меняется также ракета. Ранее подствольный гранатомёт стрелял прежней гранатой при смене боеприпаса.
---------------------------------------------------------------
Rev234
Только для ЗП!
Проверка типа объекта
"is_weapon_rpg7"
"is_weapon_rg6"
"is_rocket_launcher"
"is_crow"
"blocked_rocket_rpg" ; блокировка выстрела гранаты для класса CWeaponRPG7
Функции для трассировки геометрии.
"raypick_get_transparency_factor" ; фактор прозрачности геометрии и объектов

; Возможность стрелять картечью из подствольного гранатомёта.
; Смена типа ракет при перезарядке
; Удаляем ракеты при разрядке CWeaponRG6, CWeaponRPG7, CWeaponMagazinedWGrenade.
; колбек на удар(выстрел) ножа, вызывается в объекте ножа
; блокировка автоперезарядки (перезарядка только кнопкой R), включается auto_reload = false в секции оружия
; Гранаты с ударным запалом!!! Полностью движковые!
; Кумулятивный эффект. Задаётся cumulative_sect = секция_кумулятивной_пули
; стабилизированная ракета (ракета разворачивается по курсу)

Колбек на смену типа режима огня для CWeaponMagazined (надо для абакана и иже)
Передаёт: новый_режим, старый_режим.

(с) НаноБот 27.11.2015 г.
----------------------------------------------------------------
Rev235
Добавил для ЗП:
Колбек на обновления кости граната для класса CWeaponRPG7
Передаёт: номер типа текущего боеприпаса (от 1)(m_ammoType++), номер_состояние_худа(GetState)
Это необходимо для скриптового отключения и/или включения костей гранат для многозарядных и много-типово-зарядных гранатомётов.

Для класса CWeaponMagazinedWGrenade теперь объём магазина подствольника не ограничен.

Мелкие правки. Обнуления m_bBlockRocket. Закоментировал лог-функции.

(с) НаноБот 28.11.2015 г.
----------------------------------------------------------------
rev236
Добавил для ЗП:
Новый режим работы для класса CEliteDetector, скриптовый класс DET_ELIT, детектор "велес"
Этот режим называется скриптовый, включается параметром script_mode
И позволяет в биндере (скриптах) отображать различные объекты. В точности надо для биодетектора.
Для этого используются методы:
detector_clear -- стерает список
detector_draw_object -- добавляет в список объект для отображения на панели детектора.
Пример:
detector:detector_clear() -- надо для зачистки экрана детектора, и вызывается в начале
detector:detector_draw_object(cobj, _type, vector(), 0)
cobj - объект для отображения,
_type - тип палитры, берётся в файле ui_detector_artefact.xml в теге script_detector
Сама пилитра должна быть типа такой.
<palette id="stalker" width="0.0022" height="0.0022" stretch="1" alignment="c">
<texture shader="hud\p3d">ui_inGame2_Detector_icon_artefact</texture>
</palette>
id="stalker" -- это имя палитры,
vector() -- вектор читается, но не используется, должен быть обязательно.
float -- читается, но не используется.
Эти методы работают только с указаным классом и при включенном режиме (script_mode = true).
Если при работе в логе выскакивает:
! RegisterItemToDraw. static not found for [%s]
Значит нету указаной палитры, просмотрите точно названия.


(с) НаноБот 1.12.2015 г.
----------------------------------------------------------------
rev237
Только для ЗП.
Проведён масштабный рефакторинг. Более полное использование макросов. Исправлены различные ошибки в работе оружия. Существенная переделка по сравнению с прежними ревизиями.
Добавлены методы:
set_air_resistance -- задать сопротивление воздуха.
get_air_res_linear -- получить линейное сопротивление.
get_air_res_angular -- получить сопротивление вращению.
Добавлены колбеки на нажатие и отпускание клавиш.
Для объекта CWeaponRPG7, CWeaponRG6 добавлена возможность вести автоогонь.
Для CWeaponRPG7 можно задавать размер магазина более 1.
Исправил блокировку перезарядки, ранее работала только для класса CWeaponMagazinedWGrenade, теперь работает для всех классов CWeaponMagazined и наследников.
При отсоединении подствольного гранатомёта, граната разряжается и в основном режиме (в оригинале не разряжалась).
Добавлена возможность использования осветительных ракет, при not_explosive = true ракета не взрывается от контакта с геометрией и так же не взрывается от самоликвидатора, просто удаляется.
Для класса CWeaponRG6, CWeaponMagazinedWGrenade работает прицеливание в объекты.
Фикс вылета если не указали для класса CWeaponMagazined параметр fire_modes.

Фикс изменение размера магазина у CWeaponMagazinedWGrenade после апгрейда.


(с) НаноБот22.12.2015 г.
----------------------------------------------------------------
rev238
Только для ЗП.
класс CWeaponBM16 стреляет очередями:
В конфиге двустволки добавить:
fire_modes = 1, 2 ; режим 2 стрельба дуплетом
base_dispersioned_bullets_count = 2 ; от выст. нет отдачи
Фикс глюка, если fire_modes нет в конфиге, то некоторое оружие стреляет очередями.
Фикс не правильной работы CWeaponRG6, если одновременно заряжены картечные и ракетные боеприпасы.

(с) НаноБот 29.12.2015 г.
----------------------------------------------------------------
rev239
* Расширенный хит-колбек для наследников класса CEntity (Сталкеры, Актор, Монстры, машины, вертолёты).
Передаётся в упакованной форме тип хита и номер кости.
* При переходе в онлайн condition объекта не устанавливается принудительно в 1.0.

(с) НаноБот 12.02.2016
----------------------------------------------------------------
rev230.10
Для ТЧ
При переходе в онлайн кондишен объекта не устанавливается в 1 CGameObject::spawn_supplies
Загружаем свой список анимации для класса CAI_Stalker
Вывод стартового адреса xrGame.dll в логе

(с) НаноБот 23.03.2017
----------------------------------------------------------------
rev230.11
Для ТЧ
;----------------------
Исправление формулы расчёта статистики убийств в КПК. Окончательное!!! Всё работает! Больше не трогать!!!
Добавлены скриптовые методы для этой правки в пространстве actor_stats:
set_type_statistic(int) -- задать тип подсчёта: 0 - подсчёт по штукам, 1 - подсчёт по очкам.
get_type_statistic() -- возвращает тип подсчёта.
;----------------------
Добавил новый класс CBulletExplosive, взрывчатка в классе CBulletManager
Добавлены скриптовые методы для этой правки в пространстве level:
create_explosive(name_section, id_weapon) -- создать взрывчатку, вернёт id_explosive, или -1 если не получилось.
explode(id_explosive, pos, id_initiator) -- взорвать, вернёт 1 если успешно, или 0 если нет, например объекта такого нет.
delete_explosive(id_explosive) -- удалить, вернёт 1 если успешно, или 0 если нет, например объекта такого нет.
name_section -- имя секции взрывчатки
id_weapon -- ID оружия из которого произошёл выстрел(как правило это ID танка)
id_explosive -- ID взрывчатки
pos -- позиция взрыва
id_initiator -- ID инициатора, т.е. кто выстрелил взрывную пулю (актор, сталкер, или танк и вертолёт под логикой)
;----------------------
Добавлены колбеки на старт и стоп пули.
Включаются в конфиге патрона: callback_on = true
Приходят в биндер оружия.
;----------------------
Добавлены взрывные пули, при выстреле создаётся CBulletExplosive, и при попадании в геометрию или объект взрывается.
Если пуля улетела за уровень, то удаляется.
Для включения взрывных пуль надо в конфиге патрона указать:
sect_explosive = секция_взрывчатки
Если такой секции нет, то пуля считается обычной.
;----------------------
Рефакторинг колбеков нажатия клавиш, добавил колбеки в биндер активных объектов.
Оружия которое актор держит в руках, холдер в котором сидим (машины, турели, вертолёты?)
set_flag_callback_key(flags) -- задать флаги включения колбеков нажатий клавиш и колбек выстрел
get_flag_callback_key() -- получить флаги -->>--
;----------------------
Добавлен новый псевдокласс CTurrel, турель, для работы требует скриптовой обвязки.
Добавлены скриптовые методы для этого объекта:
car_weapon_rotation(dir_h, dir_p) -- развернуть башню по углам dir_h - азимут, dir_p - склонение от горизонта
car_weapon_dir_h() -- получить угол dir_h
car_weapon_dir_p() -- -->>-- dir_p
;----------------------
Добавлены скриптовые методы в game_object
is_exploding() -- взорван ли взрывной объект
get_type_camera() -- тип текущей камеры, работает для актора и машины.
car_show_crosshair(bool) -- включения прицела в машине.
;----------------------
Удалил weapon_stat_mgun_fix.asm т.к. всё равно не работает.
;----------------------
Рефакторинг level_ns_reg_macros.asm, теперь добавлять новые прототипы очень просто.
;----------------------
Добавлена блокировка цифр(0..9) на основной клавиатуре.
Методы в пространстве имён level.
enable_input_numbase() -- разблокировать
disable_input_numbase() -- заблокировать
;----------------------


(с) НаноБот 20.11.2017
----------------------------------------------------------------
rev230.12
Для ТЧ
Дополнительное описание к ревизии rev230.11
Возможность в машине прикреплять актора к указанной в конфиге кости, это может быть кость башни, тогда актор вращается в месте с башней.
Возможность в машине с оружием стрелять из некоторого количества стволов, сделано для ЗСУ-23-4 Шилка
При стрельбе из машины(БТР) назначается вредитель - владелец, если это актор, то хиты записываются от актора.
При вылезании из машины, смотрим туда, куда смотрели.
;---------------------------------------------------------------
Оптимизация правки "спрятать оружие на лестнице и в машине".
Удалён no_weapon_fix.asm за ненадобностью.
;----------------------
Фикс ошибки выделения памяти для CCarWeapon
;----------------------
Возможность назначать лучшие оружие скриптом.
set_script_best_weapon(best_wpn, bool) -- назначить лучшие оружие, булева - игнорировать наличие патронов
get_script_best_weapon() -- вернёт лучшие скриптовое оружие.
;----------------------
Добавлены структуры:
CWeapon и сопутствующие
CWeaponMagazined
;----------------------

(с) НаноБот 22.11.2017
----------------------------------------------------------------
RayTwitty
Цитата(NanoBot-AMK @ 22.11.2017, 22:25) *
is_exploding() -- взорван ли взрывной объект

Может быть правильнее is_exploded?

И почему это все не в https://github.com/KD87/xray-extensions ? Удобно же.
Trollz0r
А тут адрес запоминающийся: https://bitbucket.org/stalker/
Нанобот, херачь туда, там твои наработки будут легко находиться и ты прославишься на века, о тебе будут слагать легенды как о том самом наноботе, твоим именем будут пугать скрипткиддисов devil2.gif
NanoBot-AMK
Цитата(RayTwitty @ 23.11.2017, 13:59) *
Может быть правильнее is_exploded?

Назвал по имени флага в движке, flExploding
Ну а так, поначалу так и называл(is_exploded), но потом понял, лучше именно так назвать. Это флаг что взрывной объект находится в состоянии взрыва. Ещё надо для разрушаемых объектов(CBreakableObject) сделать, а то в игре не возможно проверить, разрушился объект или нет, т.е. is_breakabled.
ForserX
Цитата(RayTwitty @ 23.11.2017, 13:59) *
И почему это все не в https://github.com/KD87/xray-extensions ? Удобно же.

Он на АМК ещё писал, что не нравится ему это. Емнип
NanoBot-AMK
У меня есть репо оффлайн, а как его закачать в интернеты плохо представляю. И я не знаю, стоит ли ещё кого звать для коммитов, а то ещё накуралесит не так как надо. Я во обще хочу весь проект перезапустить. Новая утилита, которая создаёт две секции, код и данные, так может изменять адреса релокации основной секции. Что бы это заработало, надо перелопатить весь проект. Как вариант создаём всё с нуля, и постепенно переносим все правки, начиная от самых ранних, и походу всё это рефакторя, оптимизируя.
abramcumner
Цитата(NanoBot-AMK @ 24.11.2017, 03:58) *
а то ещё накуралесит не так как надо.

biggrin.gif

Цитата
Как вариант создаём всё с нуля, и постепенно переносим все правки, начиная от самых ранних, и походу всё это рефакторя, оптимизируя.

Не взлетит.
NanoBot-AMK
Турель на основе кара(CCar)
https://yadi.sk/d/LPeXw4xI3Q3H7a
Для оригинально ТЧ. Ящик с турелью выдаёт Волк, модах подправьте вес ящика с турелью, сейчас 1 кг, думаю нормально будет 20-25 кг.
ForserX
Топикстартер назначается куратором темы.

Цель простая: обновлять шапку и не допускать сильного флуда-оффтопа.
NanoBot-AMK
Проект X-Ray extensions 2!
Буду сюда скидывать свои наработки. В планах от рефакторить проект, так что он больше был похож на проекты на основе исходников.
Максимальное использования макросов, меньше быдлокода, использования кода функций вне proc endp запрещено, максимально использовать структуры, которые берутся из декомпиляции IDA Pro исполняемых файлов с использованием дебаговых файлов. Так же код будет оформляться так, что бы можно было просто портировать в исходники, т.е. комментировать псевдокодом С++.
Мои ревизии:
rev231_nanobot
rev233_nanobot
rev234_nanobot
rev235_nanobot
rev236_nanobot
rev237_nanobot
rev238_nanobot
rev239_nanobot
rev232.10_nanobot
rev232.11_nanobot
rev232.12_nanobot
rev232.13_nanobot
rev232.14_nanobot
rev232.15_nanobot
rev232.16_nanobot
rev232.17_nanobot
Проект создан на основе XRay_Extensions_portable macron'а ревизии 232.

Описание ревизий
rev231
ЧН Колбек на выстрел.

ЧН Для турелей на основе БТР сделал экспериментальную правку для без проблемного открывания дверей.

ЧН ЗП Вывод начального адреса xrGame.dll для вычисления реального адреса вылета при
вылетах типа XXXX:YYYYYYYY xrGame.dll
Реальный адрес вычисляется так: YYYYYYYY - StartAdress + 10000000h, полученное значение
вводят в IDA в поля вызываемой кнопкой G и получают функцию где произошло исключение.

ЧН ЗП Пофиксел вылет "смерть актера в машине".

(с) НаноБот

rev233
ЗП Колбек на выстрел (передаёт вектор направления)
ЗП Возможность использовать скрипты в мультиплеере (включение биндеров)
ЗП Добавлено пространство имён game_object_fix
Реализованы функции:
Проверка типа объекта (аналогичны функциям из ТЧ)
"is_game_object"
"cast_game_object"
"cast_car"
"is_car"
"is_helicopter"
"is_holder"
"is_entity_alive"
"is_inventory_item"
"cast_inventory_item"
"is_inventory_owner"
"is_actor"
"is_custom_monster"
"is_weapon"
"cast_weapon"
"is_weapon_gl"
"is_inventory_box"
"cast_inventory_box"
"is_medkit"
"is_eatable_item"
"is_antirad"
"is_outfit"
"is_scope"
"is_silencer"
"is_grenade_launcher"
"is_weapon_magazined"
"is_space_restrictor"
"is_stalker"
"is_anomaly"
"is_monster"
"is_explosive"
"is_script_zone"
"is_projector"
"is_trader"
"is_hud_item"
"cast_hud_item"
"is_food_item"
"is_artefact"
"is_ammo"
"is_missile"
"is_physics_shell_holder"
"is_grenade"
"is_bottle_item"
"is_hanging_lamp"
"is_knife"
"is_binoculars"
"is_weapon_pistol"
"is_weapon_shotgun"
"is_weapon_autoshotgun"

"is_exploded" ; взрывной объект взорван?
"object_luminocity" ; уровень освещенности объекта
; методы для оценки состояния актора
"is_actor_normal"
"is_actor_crouch"
"is_actor_creep"
"is_actor_climb"
"is_actor_walking"
"is_actor_running"
"is_actor_sprinting"
"is_actor_crouching"
"is_actor_creeping"
"is_actor_climbing"

; Для класса CWeaponMagazined
"get_fire_mode" ; получить режим огня
"get_default_ammo_type" ; получить дефолтовый тип патрона (имя секции)
"get_ammo_type" ; получить реальный тип патрона
"get_rpm" ; получить скорострельность
"set_rpm" ; установить скорострельность
"is_grenade_mode" ; режим гранатомёта?

ЗП В пространстве имён level добавлено:
Функции для трассировки геометрии.
"raypick_set_flags_dir_dist" ; установить - флаги, направление, дистанцию.
"raypick_set_ignoreobjid_pos" ; установить - ID игнорируемого объекта, позицию.
"raypick_query" ; выполнить трассировку.
"raypick_get_object" ; получить объект.
"raypick_get_distance" ; получить дистанцию.
"raypick_get_element" ; получить элемент геометрии или номер кости объекта.
"raypick_get_name_bone" ; получить имя кости объекта.
"raypick_get_normal" ; получить вектор нормали геометрии или объекта.
"raypick_get_end_point" ; получить позицию, куда упёрлась точка трассировки.
"raypick_get_shoot_factor" ; получить ShootFactor геометрии или объекта.
"raypick_get_flags" ; получить флаги геометрии или объекта.
Для мульти-плейра.
"current_actor" ; получить объект текущего актора
"on_server" ; проверка, это сервер?
ЗП В классе CUIStatic добавлено:
"SetColor" ; установить цвет текстуры (через Frect).
ЗП Метод explode изменён, теперь надо задавать объект инициатора, это обязательно. (bomb:explode(npc))
Класс CWeaponMagazinedWGrenade существенно доработан:
Есть возможность стрелять дробью.
При смене типа боеприпаса меняется также ракета. Ранее подствольный гранатомёт стрелял прежней гранатой при смене боеприпаса.
---------------------------------------------------------------
Rev234
Только для ЗП!
Проверка типа объекта
"is_weapon_rpg7"
"is_weapon_rg6"
"is_rocket_launcher"
"is_crow"
"blocked_rocket_rpg" ; блокировка выстрела гранаты для класса CWeaponRPG7
Функции для трассировки геометрии.
"raypick_get_transparency_factor" ; фактор прозрачности геометрии и объектов

; Возможность стрелять картечью из подствольного гранатомёта.
; Смена типа ракет при перезарядке
; Удаляем ракеты при разрядке CWeaponRG6, CWeaponRPG7, CWeaponMagazinedWGrenade.
; колбек на удар(выстрел) ножа, вызывается в объекте ножа
; блокировка автоперезарядки (перезарядка только кнопкой R), включается auto_reload = false в секции оружия
; Гранаты с ударным запалом!!! Полностью движковые!
; Кумулятивный эффект. Задаётся cumulative_sect = секция_кумулятивной_пули
; стабилизированная ракета (ракета разворачивается по курсу)

Колбек на смену типа режима огня для CWeaponMagazined (надо для абакана и иже)
Передаёт: новый_режим, старый_режим.

(с) НаноБот 27.11.2015 г.
----------------------------------------------------------------
Rev235
Добавил для ЗП:
Колбек на обновления кости граната для класса CWeaponRPG7
Передаёт: номер типа текущего боеприпаса (от 1)(m_ammoType++), номер_состояние_худа(GetState)
Это необходимо для скриптового отключения и/или включения костей гранат для многозарядных и много-типово-зарядных гранатомётов.

Для класса CWeaponMagazinedWGrenade теперь объём магазина подствольника не ограничен.

Мелкие правки. Обнуления m_bBlockRocket. Закоментировал лог-функции.

(с) НаноБот 28.11.2015 г.
----------------------------------------------------------------
rev236
Добавил для ЗП:
Новый режим работы для класса CEliteDetector, скриптовый класс DET_ELIT, детектор "велес"
Этот режим называется скриптовый, включается параметром script_mode
И позволяет в биндере (скриптах) отображать различные объекты. В точности надо для биодетектора.
Для этого используются методы:
detector_clear -- стерает список
detector_draw_object -- добавляет в список объект для отображения на панели детектора.
Пример:
detector:detector_clear() -- надо для зачистки экрана детектора, и вызывается в начале
detector:detector_draw_object(cobj, _type, vector(), 0)
cobj - объект для отображения,
_type - тип палитры, берётся в файле ui_detector_artefact.xml в теге script_detector
Сама пилитра должна быть типа такой.
<palette id="stalker" width="0.0022" height="0.0022" stretch="1" alignment="c">
<texture shader="hud\p3d">ui_inGame2_Detector_icon_artefact</texture>
</palette>
id="stalker" -- это имя палитры,
vector() -- вектор читается, но не используется, должен быть обязательно.
float -- читается, но не используется.
Эти методы работают только с указаным классом и при включенном режиме (script_mode = true).
Если при работе в логе выскакивает:
! RegisterItemToDraw. static not found for [%s]
Значит нету указаной палитры, просмотрите точно названия.


(с) НаноБот 1.12.2015 г.
----------------------------------------------------------------
rev237
Только для ЗП.
Проведён масштабный рефакторинг. Более полное использование макросов. Исправлены различные ошибки в работе оружия. Существенная переделка по сравнению с прежними ревизиями.
Добавлены методы:
set_air_resistance -- задать сопротивление воздуха.
get_air_res_linear -- получить линейное сопротивление.
get_air_res_angular -- получить сопротивление вращению.
Добавлены колбеки на нажатие и отпускание клавиш.
Для объекта CWeaponRPG7, CWeaponRG6 добавлена возможность вести автоогонь.
Для CWeaponRPG7 можно задавать размер магазина более 1.
Исправил блокировку перезарядки, ранее работала только для класса CWeaponMagazinedWGrenade, теперь работает для всех классов CWeaponMagazined и наследников.
При отсоединении подствольного гранатомёта, граната разряжается и в основном режиме (в оригинале не разряжалась).
Добавлена возможность использования осветительных ракет, при not_explosive = true ракета не взрывается от контакта с геометрией и так же не взрывается от самоликвидатора, просто удаляется.
Для класса CWeaponRG6, CWeaponMagazinedWGrenade работает прицеливание в объекты.
Фикс вылета если не указали для класса CWeaponMagazined параметр fire_modes.

Фикс изменение размера магазина у CWeaponMagazinedWGrenade после апгрейда.


(с) НаноБот22.12.2015 г.
----------------------------------------------------------------
rev238
Только для ЗП.
класс CWeaponBM16 стреляет очередями:
В конфиге двустволки добавить:
fire_modes = 1, 2 ; режим 2 стрельба дуплетом
base_dispersioned_bullets_count = 2 ; от выст. нет отдачи
Фикс глюка, если fire_modes нет в конфиге, то некоторое оружие стреляет очередями.
Фикс не правильной работы CWeaponRG6, если одновременно заряжены картечные и ракетные боеприпасы.

(с) НаноБот 29.12.2015 г.
----------------------------------------------------------------
rev239
* Расширенный хит-колбек для наследников класса CEntity (Сталкеры, Актор, Монстры, машины, вертолёты).
Передаётся в упакованной форме тип хита и номер кости.
* При переходе в онлайн condition объекта не устанавливается принудительно в 1.0.

(с) НаноБот 12.02.2016
----------------------------------------------------------------
rev230.10
Для ТЧ
При переходе в онлайн кондишен объекта не устанавливается в 1 CGameObject::spawn_supplies
Загружаем свой список анимации для класса CAI_Stalker
Вывод стартового адреса xrGame.dll в логе

(с) НаноБот 23.03.2017
----------------------------------------------------------------
rev230.11
Для ТЧ
;----------------------
Исправление формулы расчёта статистики убийств в КПК. Окончательное!!! Всё работает! Больше не трогать!!!
Добавлены скриптовые методы для этой правки в пространстве actor_stats:
set_type_statistic(int) -- задать тип подсчёта: 0 - подсчёт по штукам, 1 - подсчёт по очкам.
get_type_statistic() -- возвращает тип подсчёта.
;----------------------
Добавил новый класс CBulletExplosive, взрывчатка в классе CBulletManager
Добавлены скриптовые методы для этой правки в пространстве level:
create_explosive(name_section, id_weapon) -- создать взрывчатку, вернёт id_explosive, или -1 если не получилось.
explode(id_explosive, pos, id_initiator) -- взорвать, вернёт 1 если успешно, или 0 если нет, например объекта такого нет.
delete_explosive(id_explosive) -- удалить, вернёт 1 если успешно, или 0 если нет, например объекта такого нет.
name_section -- имя секции взрывчатки
id_weapon -- ID оружия из которого произошёл выстрел(как правило это ID танка)
id_explosive -- ID взрывчатки
pos -- позиция взрыва
id_initiator -- ID инициатора, т.е. кто выстрелил взрывную пулю (актор, сталкер, или танк и вертолёт под логикой)
;----------------------
Добавлены колбеки на старт и стоп пули.
Включаются в конфиге патрона: callback_on = true
Приходят в биндер оружия.
;----------------------
Добавлены взрывные пули, при выстреле создаётся CBulletExplosive, и при попадании в геометрию или объект взрывается.
Если пуля улетела за уровень, то удаляется.
Для включения взрывных пуль надо в конфиге патрона указать:
sect_explosive = секция_взрывчатки
Если такой секции нет, то пуля считается обычной.
;----------------------
Рефакторинг колбеков нажатия клавиш, добавил колбеки в биндер активных объектов.
Оружия которое актор держит в руках, холдер в котором сидим (машины, турели, вертолёты?)
set_flag_callback_key(flags) -- задать флаги включения колбеков нажатий клавиш и колбек выстрел
get_flag_callback_key() -- получить флаги -->>--
;----------------------
Добавлен новый псевдокласс CTurrel, турель, для работы требует скриптовой обвязки.
Добавлены скриптовые методы для этого объекта:
car_weapon_rotation(dir_h, dir_p) -- развернуть башню по углам dir_h - азимут, dir_p - склонение от горизонта
car_weapon_dir_h() -- получить угол dir_h
car_weapon_dir_p() -- -->>-- dir_p
;----------------------
Добавлены скриптовые методы в game_object
is_exploding() -- взорван ли взрывной объект
get_type_camera() -- тип текущей камеры, работает для актора и машины.
car_show_crosshair(bool) -- включения прицела в машине.
;----------------------
Удалил weapon_stat_mgun_fix.asm т.к. всё равно не работает.
;----------------------
Рефакторинг level_ns_reg_macros.asm, теперь добавлять новые прототипы очень просто.
;----------------------
Добавлена блокировка цифр(0..9) на основной клавиатуре.
Методы в пространстве имён level.
enable_input_numbase() -- разблокировать
disable_input_numbase() -- заблокировать
;----------------------


(с) НаноБот 20.11.2017
----------------------------------------------------------------
rev230.12
Для ТЧ
Дополнительное описание к ревизии rev230.11
Возможность в машине прикреплять актора к указанной в конфиге кости, это может быть кость башни, тогда актор вращается в месте с башней.
Возможность в машине с оружием стрелять из некоторого количества стволов, сделано для ЗСУ-23-4 Шилка
При стрельбе из машины(БТР) назначается вредитель - владелец, если это актор, то хиты записываются от актора.
При вылезании из машины, смотрим туда, куда смотрели.
;---------------------------------------------------------------
Оптимизация правки "спрятать оружие на лестнице и в машине".
Удалён no_weapon_fix.asm за ненадобностью.
;----------------------
Фикс ошибки выделения памяти для CCarWeapon
;----------------------
Возможность назначать лучшие оружие скриптом.
set_script_best_weapon(best_wpn, bool) -- назначить лучшие оружие, булева - игнорировать наличие патронов
get_script_best_weapon() -- вернёт лучшие скриптовое оружие.
;----------------------
Добавлены структуры:
CWeapon и сопутствующие
CWeaponMagazined
;----------------------

(с) НаноБот 22.11.2017
----------------------------------------------------------------
rev230.13
Для ТЧ
;----------------------
Доработал гильзы турели, БТРов.
;----------------------
Добавлены скриптовые методы в пространство имён game_object:
get_key_state(key) -- Нажата ли указанная клавиша.
spawn_artefact(sect_art, count) -- рождение указанного артефакта аномалии в указаном количестве.
allow_script_spawn_artefact(bool) -- разрешить рождение артефактов аномалии скриптом.
;----------------------
рефакторинг game_object_callbacks.asm
;----------------------
Добавлены колбеки для аномалии (CCustomZone)
GameObject__eZoneEnter = 4 -- вход объекта в зону аномалии, передаёт: объект.
GameObject__eZoneExit = 5 -- выход объекта из зоны аномалии, передаёт: объект.
eHitToAnomalyFromObject = 128 -- хит аномалией объекта, передаёт: объект которому нанесли хит, объект виновник, тип хита, вектор хита, сила хита.
eDesroyObjectInAnomaly = 34 -- Колбек на разрушения объекта в аномалии, передаёт объект.
;----------------------
Добавил пару прототипов для пространство имён game_object.
;----------------------
Добавил некоторые структуры.
;----------------------

(с) НаноБот 28.11.2017
----------------------------------------------------------------
rev232.14
Для ТЧ
;----------------------
Рефакторинг shoc_10006_exe
Добавил возможность задавать частоту монитора консольной командой vid_refresh_rate_hz
;----------------------

Для shoc_10006_xrgame, shoc_10006_xrcore, shoc_10006_exe
адаптировал под компилятор(UASM.exe), линковщик(polink.exe),
а так же утилиты bspatch и patcher заменил на add_code.
Теперь есть возможность изменять адреса релокаций, так же добавляется секция данных.
Теперь с помощью макроса static_str$ можно добавлять строки.
Макрос ALIGN удалён, в место его, для выравнивания процедур, использовать только align_proc
Сделал некоторые правки для нормальной работы ассемблера UASM

Проведён масштабный рефакторинг.
actor_input_fix_pda.asm
console_commands_reg_macro.asm
cuiwindow_reg_macro.asm
game_object_castings.asm
mydll.asm
game_object_fix.asm
level_ns_reg_macros.asm
level_ns_fix.asm
alife_simulator_fix.asm
global_ns_fix.asm
global_ns_fix2.asm

Добавлены структуры.

Доработал турель, фонарик актора светит куда смотрит актор, когда он в турели.
Добавил некоторые макросы нужные для работы UASM
Добавлено:
Можно ли выронить оружие при смерти сталкера.
Фикс для колбека "хит по вертолёту"
оптимизация тупокода(в баллистике)
Толщина трассера индивидуальна для каждого патрона.
блокировать использования оружие НПСом
Колбек на хит, вызывается для всех объектов, требует включения скриптом. obj:set_flag_callback_key(64)--1000000b

Добавлены скриптовые методы:
Для определения разных мутантов.
is_crow()
is_bloodsucker()
is_boar()
is_flesh()
is_pseudodog()
is_burer()
is_chimera()
is_pseudogigant()
is_poltergeist()
is_zombie()
is_fracture()
is_snork()
is_controller()
is_cat()
is_tushkano()
is_dog()
Переопределить параметры оружия в технике.
reload_car_weapon(sect_carwpn, name_bone_fire)
sect_carwpn - секция оружия в технике
name_bone_fire - имя кости в модели
получить вектор прицеливания активного оружия, надо для разного скриптового оружия.
get_LastFP() -- позиция огня
get_LastFP2() -- позиция огня 2
get_LastFD() -- направления огня
get_LastSP() -- позиция гильз
заблокировать оружие НПС
set_weapon_npc_blocked(bool)
get_weapon_npc_blocked()
Переработан метод set_visual_name, теперь для некоторых классов работает более корректно.
Вычислить упреждающую точку.
calc_future_position(velocity_target, res_pos_target)
velocity_target -- вектор скорости цели
res_pos_target -- вектор позиции цели
; задать инициатор броска для физической оболочки, т.е. кто кинул камень?
set_initiator_id(id)
get_initiator_id()
В пространство имён level добавлено:
;улучшеная функция трассировки пересечения луча и геометрии.
level.set_raypick_id_pos(id_ignor, pos) -- вернёт 0
level.test_raypick_flg_dir_dist(flags, dir, dist) -- вернёт номер елемента
flags - флаги поиска
pos - стартовая точка
dir - направление трассировки
dist - дистанция трассировки
id_ignor - ID игнорируемого объекта
;нормаль треугольника геометрии
level.get_static_normal_triangle(element)

Переделана работа колбека на поедание предмета, номер колбека 35.
Добавлено булева которая отключает удаления объекта при поедании: not_delete

Исправил ошибку в actor_input_fix.asm

(с) НаноБот 7.10.2018
----------------------------------------------------------------
rev232.15

Проекты: cop_1602_r1, cop_1602_r2, cop_1602_r3, cop_1602_r4, cop_1602_xrgame,
cs_1510_r1, cs_1510_r2, cs_1510_r3, cs_1510_xrgame, shoc_10006_r1, shoc_10006_r2
адаптированы под компилятор(UASM.exe), линковщик(polink.exe) и add_code.
В папке tools удалил ассемблер MASM, заменил add_code на новую версию(1.37), и изменил название на AddCode.exe.
В новой утилиты есть возможность добавлять, кроме кодой секции, ещё две, секция const и data.
В cs_1510_xrgame заменил xrGame_orig.dll на оригинальный файл, т.к. старый файл был нерабочий.
В shoc_10006_r2 немного от рефакторил, и добавил вывод стартового адреса в лог.
Так же для shoc_10006_r2 добавил структуры.

Для ТЧ
Новая баллистика, включается параметром type_ballistic в секции bullet_manager
0 - старая баллистика, 1 - баллистика из мультиплейера, 3 - вариант алгоритма №1
Функцию CBulletManager@@Load_ext переместил в level_explosive.asm.
Доработал метод calc_future_position с учётом этих 3-х типов баллистик.
Метод проверен, работает со всеми типами баллистики.

Рефакторинг: cuiwindow_reg_macro.asm, cuipdawnd_fix.asm, cuistatic_fix.asm
matrix_fix.asm, game_object_destructor_fix.asm, game_graph_distance_fix.asm,
misc.asm, inventory_box_fix.asm.
В пространсве имён matrix добавил два метода:
transform_tiny(vec.x, vec.y, vec.z)
transform_dir(vec.x, vec.y, vec.z)
Результат получаем методом res:get_result()

Добавлено пространство имён vector:
get_result() -- получить вектор из глобальной переменой.

Для класса game_object исправил несколько методов:
get_hud_bone_pos(name_bone) -- возвращает позицию кости в худовой модели, координаты глобальные.
specific_character() -- исправил ошибку, надо тестировать.
get_hud_animation_length(name_anim) -- получить длину анимации.

Удалил ненужные и переместил макросы и структуры из types.asm.

Добавил колбек №35(хит для всех объектов) для вертолёта.

Добавил проект shoc_10004_xrgame
xrGame.dll для 1.0004 патча.
Добавил вывод стартового адреса.

(с) НаноБот 31.10.2018
----------------------------------------------------------------
rev232.16

Для ТЧ
Исправил !!!_PROPATCHIT_EXE_!!!.cmd, не правильное имя файла.
За комментировал некоторые правки в shoc_10006_r2
Для xrGame.dll добавил правку:
Фикс пропадания звука дождя при загрузке уровня.
Небольшой рефакторинг, добавил некоторые структуры.

Для ЗП
Добавил несколько скриптовых методов.
get_go_float(addr) --получить значения float по смещению для гейм объекта
dir_up() --вектор верх для гейм объекта
dir_right() --вектор вправо для гейм объекта

Добавил файл macroses.asm - структуры, и macroses.asm - макросы.
Небольшой рефакторинг.

(с) НаноБот 20.06.2019
----------------------------------------------------------------
rev232.17

Для ТЧ
Для shoc_10006_r1.
Некоторый экспериментальный код, будет удалён.
Для shoc_10006_xrcore.
Исправлен файл !!!_PROPATCHIT_XRCORE_!!!.cmd.
Для shoc_10006_xrgame.
Небольшой рефакторинг global_ns_reg_macro2.asm, cuicombobox_fix.asm, cuioptionsitem_fix.asm,
cuiwpnparams_check_fix.asm, self_anim_stalker.asm, actor_hit_callback.asm, level_explosive.asm,
vector_reg_macro.asm (добавил макрос), game_object_reg_macro.asm (оптимизация макросов)

Рефакторинг game_object_fix.asm
оптимизация регистрации скриптовых методов пространства имён CGameObject
Исправлена ошибка в методах CScriptGameObject@@ChangeAlcohol, CScriptGameObject@@ChangeSatiety
Оптимизация в методе CScriptGameObject@@SetVisualName, меньше вероятности ошибки(CRC32) при сравнении строк.
Добавил методы:
get_grenade_mode_gl() --показать гранатомётный режим, для оружия с подствольником.
set_grenade_mode_gl(bool ) --установить -->>--
get_speed_rpg7() --показать скорость гранаты, для класса РПГ7
set_speed_rpg7(float speed) --установить -->>--
test_grenade_fire(Fvector pTargetPos, float ) --достижимость цели при стрельбе из гранатомётов,
без реактивного двигателя, для НПС. Экспериментальная!

Оптимизация регистрации скриптовых методов пространства имён vector
Для пространства имён vector, добавил метод:
test_throw(float throw_vel, float gravity_accel) --тест броска гранаты без реактивного двигателя,
доступ к движковой функции TransferenceAndThrowVelToThrowDir. Возвращает вектор броска, или нулевой вектор, если цель
недостижима.

Доработка классов гранатомётов(: CWeaponRG6, CWeaponRPG7, CWeaponMagazinedWGrenade.
В классе CRocketLauncher добавлено два метода:
CRocketLauncher::DeleteRockets() //удалить все ракеты
CRocketLauncher::SpawnRockets(xr_vector<CCartridge>& magazine) //спавне ракет согласно вектору magazine
Для этих классов правильно работает осечка.
Оружие не стреляет, если заблокировано методом set_queue_size(0).
Для класса CWeaponRG6(РГ-6), исправлен ряд ошибок:
Стрельба без патронов.
При спавне и перезарядке ракеты соответствуют патронам.
Исправлена ошибка при tri_state_reload = false, отключить анимацию подствольного или барабанного магазина.
Есть возможность стрелять картечью (для этого надо установить в конфиге патрона buck_shot = количество картечи,
и убрать параметр fake_grenade_name).
Добавлен параметр.
block_auto_aim_rg = bool ; заблокировать автоприцел для РГ-6
Доработка класса CWeaponShotgun, и как наследника CWeaponRG6:
При спавне разные патроны в магазине не теряются.

Добавил структуры, structures.asm.
Добавил перечисления, types.asm
Добавил макросы, macroses.asm.

Для класса CPhysicsShellHolder добавил метод:
CPhysicsShellHolder@@SetSpeedDescent speed_descent:real4 //задать скорость свободного падения.

Дополнительные скриптовый методы для класса CScriptParticles
CScriptParticles@@PlayAtPosDir pos:ptr Fvector, dir:ptr Fvector ;запустить партикл в точке pos, и развернуть по вектору dir
CScriptParticles@@MoveToPosDir pos:ptr Fvector, dir:ptr Fvector ;переместить партикл в точку pos, и развернуть по вектору dir
Эти методы пока не экспортированы в particles_object.

Доработка класса CExplosiveRocket
Оптимизация, перемещаем m_bEnginePresent в другое место структуры CCustomRocket.
Новые параметры:
can_contact_explode = bool ;возможность выключать в ракете взрываться от контакта с чем либо.
can_timer_explode = bool ;возможность выключать в ракете способность взрываться от самоликвидатора.
time_open_parachute = float ; парашют у ракеты, миллисекунд
speed_descent = float ;скорость снижения с открытым парашютом, м/с

Создал новый псевдокласс O_BATTAR, он же CPyroBattery
Пиробатарея создана на классе CAntirad, стреляет люсткугелями созданные на классе CExplosiveRocket,
которые взрываясь, разбрасывают определенным способом звёзды, которые так же созданы на классе CExplosiveRocket.
Параметры этих объектов соответствуют скриптовым объектам в bind_pyro.script (смотреть там).

Создал xr_vector.asm
Методы для xr_vector(он же std::vector)

Возможность добавлять собственные классы.

Для ЗП
Устранил ошибку, из-за которой компилятор UASM неправильно генерировал код.
Закомментировал нерабочий код.

Добавил utils\macro_base.asm
Универсальные макросы для всех проектов.

(с) НаноБот 18.08.2019
----------------------------------------------------------------


Исправил номер ревизии с 230 на 232, изначально взята именно 232 ревизия от макрона!
NanoBot-AMK
Турель на основе кара (1.03 релиз)
https://yadi.sk/d/wJs6KCQJ3Qg4xJ
Изменения:
Уменьшил зависимость от оригинальных файлов.
Добавил возможность разряжать турель, кнопка Y.
При смерти актора в турели, актор из неё выпадает.

Турель использует xrGame.dll ревизии 230.13, на старых ревизия не заработает. Описания файлов указана в текстовым файле.

ЗЫ
Логи не все удалил, после тестов, если не будет проблем, их надо самим закомментировать или удалить.
NanoBot-AMK
Командное меню.
https://yadi.sk/d/JaMDyEHy3RCEHs
Используется для управление напарниками, нанокостюмом, хенами и так далее.

Управление в игре:
Нажмите клавишу вызова конкретного меню, далее выберете номер команды цифрами на основной клавиатуре. Повторное нажатие на клавишу открытия меню, закрывает меню без вызова команды.

Управление сходно с движковым меню. В скритах номера меню и команд задаётся от 1. Так же можно задать озвучку команды, по легенде ГГ даёт команды напарникам именно по радио голосом, через радиогарнитуру, которую используют СпН.
Как подключить?, смотрите в файле Подключения.txt
Strong
Цитата(NanoBot-AMK @ 16.12.2017, 23:12) *
Турель на основе кара (1.03 релиз)
https://yadi.sk/d/wJs6KCQJ3Qg4xJ
Изменения:
Уменьшил зависимость от оригинальных файлов.
Добавил возможность разряжать турель, кнопка Y.
При смерти актора в турели, актор из неё выпадает.

Турель использует xrGame.dll ревизии 230.13, на старых ревизия не заработает. Описания файлов указана в текстовым файле.

ЗЫ
Логи не все удалил, после тестов, если не будет проблем, их надо самим закомментировать или удалить.


Привет, можешь выложить xrGame.dll ревизии 230.13, или как и чем скомпилить, мод заинтерисовал, давно искал такой.
NanoBot-AMK
12-я ревизия в полном составе.
https://yadi.sk/d/_jhEE5px3Pw6Fp
13 закинуть поверх и собрать кликом по батнику.
Strong
NanoBot-AMK Спасибо! Сейчас попробую wink_old.gif
Strong
NanoBot-AMK Все получилось мод заработал! спасибо за помощь!

Вот бы ещё турель который стреляет ракетами. wink_old.gif
NanoBot-AMK
Есть идея переделать проект на другой ассемблер, например UASM или asmC. У этих ассемблеров гораздо выше возможности, и меньше багов, так же высокая скорость компиляции, например: если MASM компилирует ТЧ за 17 сек, то UASM за 0.6 сек, т.е. в 28 раз быстрей! blink.gif Так же есть поддержка ООП, более высокие возможности макросистемы. Ну и наконец есть исходники самого ассемблера на С, VS1015, переделал на VS1010. rolleyes.gif
ЗЫ
Сейчас уже переделал проект на UASM, но возможно надо переделать на asmC.
ЗЫЫ
Короче, в 14 ревизии поддержка MASM'а будет прекращена, так же будут использованы свои утилиты для сборки проекта(AddCode).
ForserX
NanoBot-AMK, слушай, создай хоть акк на ГитХабе, чтоб я твои наработки хотя бы нормально указывать мог...
NanoBot-AMK
В общем, новая ревизия под номером 232.14

https://yadi.sk/d/JPPFqqqWvTiGxg

Почему 232? Оказывается изначально была 232 ревизия взята, тут я немного по путался, т.к. рабочая ревизия 230, а версированая версия именно 232, от макрона.

rev232.14
rev232.14
Для ТЧ
;----------------------
Рефакторинг shoc_10006_exe
Добавил возможность задавать частоту монитора консольной командой vid_refresh_rate_hz
;----------------------

Для shoc_10006_xrgame, shoc_10006_xrcore, shoc_10006_exe
адаптировал под компилятор(UASM.exe), линковщик(polink.exe),
а так же утилиты bspatch и patcher заменил на add_code.
Теперь есть возможность изменять адреса релокаций, так же добавляется секция данных.
Теперь с помощью макроса static_str$ можно добавлять строки.
Макрос ALIGN удалён, в место его, для выравнивания процедур, использовать только align_proc
Сделал некоторые правки для нормальной работы ассемблера UASM

Проведён масштабный рефакторинг.
actor_input_fix_pda.asm
console_commands_reg_macro.asm
cuiwindow_reg_macro.asm
game_object_castings.asm
mydll.asm
game_object_fix.asm
level_ns_reg_macros.asm
level_ns_fix.asm
alife_simulator_fix.asm
global_ns_fix.asm
global_ns_fix2.asm

Добавлены структуры.

Доработал турель, фонарик актора светит куда смотрит актор, когда он в турели.
Добавил некоторые макросы нужные для работы UASM
Добавлено:
Можно ли выронить оружие при смерти сталкера.
Фикс для колбека "хит по вертолёту"
оптимизация тупокода(в баллистике)
Толщина трассера индивидуальна для каждого патрона.
блокировать использования оружие НПСом
Колбек на хит, вызывается для всех объектов, требует включения скриптом. obj:set_flag_callback_key(64)--1000000b

Добавлены скриптовые методы:
Для определения разных мутантов.
is_crow()
is_bloodsucker()
is_boar()
is_flesh()
is_pseudodog()
is_burer()
is_chimera()
is_pseudogigant()
is_poltergeist()
is_zombie()
is_fracture()
is_snork()
is_controller()
is_cat()
is_tushkano()
is_dog()
Переопределить параметры оружия в технике.
reload_car_weapon(sect_carwpn, name_bone_fire)
sect_carwpn - секция оружия в технике
name_bone_fire - имя кости в модели
получить вектор прицеливания активного оружия, надо для разного скриптового оружия.
get_LastFP() -- позиция огня
get_LastFP2() -- позиция огня 2
get_LastFD() -- направления огня
get_LastSP() -- позиция гильз
заблокировать оружие НПС
set_weapon_npc_blocked(bool)
get_weapon_npc_blocked()
Переработан метод set_visual_name, теперь для некоторых классов работает более корректно.
Вычислить упреждающую точку.
calc_future_position(velocity_target, res_pos_target)
velocity_target -- вектор скорости цели
res_pos_target -- вектор позиции цели
; задать инициатор броска для физической оболочки, т.е. кто кинул камень?
set_initiator_id(id)
get_initiator_id()
В пространство имён level добавлено:
;улучшеная функция трассировки пересечения луча и геометрии.
level.set_raypick_id_pos(id_ignor, pos) -- вернёт 0
level.test_raypick_flg_dir_dist(flags, dir, dist) -- вернёт номер елемента
flags - флаги поиска
pos - стартовая точка
dir - направление трассировки
dist - дистанция трассировки
id_ignor - ID игнорируемого объекта
;нормаль треугольника геометрии
level.get_static_normal_triangle(element)

Переделана работа колбека на поедание предмета, номер колбека 35.
Добавлено булева которая отключает удаления объекта при поедании: not_delete

Исправил ошибку в actor_input_fix.asm

(с) НаноБот 7.10.2018
----------------------------------------------------------------

Изменений много, прежде всего использован ассемблер UASM, линкер polink, и сборщик AddCode.exe, это чисто мой продукт, с новыми возможностями.

Хорошо переработан game_object_fix.asm поэтому некоторые методы могут не работать, а некоторые наоборот заработали. Метод set_visual_name работает с мутантами без проблем, главное что в моделях были одинаковые кости и анимации, с сталкерами работает неплохо, есть но проблемы, анимация начинается заново, при попадании взрывной пули был вылет, так что надо дорабатывать, с вертолётом не работает.

Сборщик AddCode.exe позволяет менять адреса релокаций, так же добавляет секцию данных, пока одну, потом надо сделать что бы мог добавлять несколько, не инициализированные данные и константные.

Вроде всё.
RSFSR
Было бы классно исправить бяку с глючным источником света у аномалий. Он долго не затухает после срабатывания и часто в его свете мерцают треугольники геометрии
NanoBot-AMK
Ещё у взрывных объектов то же не гаснет источник света после взрыва, у простых объектов т.е. у CExplosiveItem. Я так понял, что это, из-за того, что метод UpdateCL получает вызовы не каждый фрейм, как надо, а редкие, как shedule_Update. Что очень странно, пока не разобрался почему. Возможно с аномалиями такая же аномалия происходит.
RSFSR
еще одна гадость есть в аномалиях карусель и воронка - трупы там разрывает только если близко подойти.
не знаю правда, в движке ли тут дело
Cossack-HD
Цитата(RSFSR @ 08.10.2018, 15:47) *
еще одна гадость есть в аномалиях карусель и воронка - трупы там разрывает только если близко подойти.
не знаю правда, в движке ли тут дело

В движке. Ты своим приближением триггеришь апдейт аномалии.
atanda
RSFSR, дык они же так устроены. Например, на свалке за лагерем бандитов имеются большие по радиусу аномалии. Чем ближе к центру аномалии, тем больше сила затягивания.
RSFSR
Цитата(buffy @ 08.10.2018, 15:15) *
RSFSR, дык они же так устроены. Например, на свалке за лагерем бандитов имеются большие по радиусу аномалии. Чем ближе к центру аномалии, тем больше сила затягивания.

выглядит не очень, когда несчастного бандита крутит по полчаса там. особенно хреново это выглядит в сочетании с рождением артефактов при смерти там нпс
atanda
Цитата(RSFSR @ 08.10.2018, 15:08) *
когда несчастного бандита крутит по полчаса там

Согласен, я когда копался добавлял партиклы при кручении, чтобы выглядело как-бы от трупа ошмётки отлетают.
RSFSR
или толпа монстров попала в аномалию - обязательно нужно подбежать к аномалии, чтоб трупы наконец разорвало и появился артефакт. издалека - ни-ни
acidicMercury8
NanoBot-AMK, почему ты не хочешь всё это поместить в репозиторий на какой-нибудь хостинг? Так ведь менее геморно будет всё собирать
Epic Samaritan
Что нужно включить в плане опций, чтобы заработала скриптовая анимация в Full Weapons Reanimation (Lite Pack Final)?
Просто хочу запилить этот скрипт в свой аддон и перенести анимации оружия из мода STALKER REANIMATION PROJECT для ЗП/ЧН в ТЧ.
macron
Цитата(Epic Samaritan @ 31.10.2018, 11:50) *
Что нужно включить в плане опций, чтобы заработала скриптовая анимация

Мы когда-то делали для ТЧ свой небольшой патч со скриптовыми анимациями оружия. Конретно на ТЧ на r232 должно заработать с такими правками xrgame. Как бы основной упор на включение скриптовых методов.

https://yadi.sk/i/lpn-DhO4UJvlyw
NanoBot-AMK
Вопрос по этим методам. Я сначала не разобрался что и как, думал что эти методы не работают, но вроде работают с правильными правками. В edx указатель не на IRender_Light, а на light, добавили новые проперти в этот класс, не указано как называются.
Вопрос конкретный. Как называются объекты по новым смещения?
код
Код
;Скорей всего эти методы не работают.
align_proc
CScriptGameObject@@SetLSFSpeed proc param:dword
    smart_cast    CHangingLamp, CGameObject, [ecx+4]
    ASSUME    eax:ptr CHangingLamp, edx:ptr light
    .if (eax)
        mov        edx, [eax].light_render.p_;resptr_core<IRender_Light,resptrcode_light>
        mrm        [edx].m_f278h, param        ;
    .endif
    ret
CScriptGameObject@@SetLSFSpeed endp

align_proc
CScriptGameObject@@SetLSFAmount proc param:dword
    smart_cast    CHangingLamp, CGameObject, [ecx+4]
    .if (eax)
        mov        edx, [eax].light_render.p_
        mrm        [edx].m_f27Ch, param
    .endif
    ret
CScriptGameObject@@SetLSFAmount endp

align_proc
CScriptGameObject@@SetLSFSMAPJitter proc param:dword
    smart_cast    CHangingLamp, CGameObject, [ecx+4]
    .if (eax)
        mov        edx, [eax].light_render.p_
        mrm        [edx].m_f280h, param
    .endif
    ret
CScriptGameObject@@SetLSFSMAPJitter endp

align_proc
CScriptGameObject@@GetLSFSpeed proc
    smart_cast    CHangingLamp, CGameObject, [ecx+4]
    fldz
    .if (eax)
        mov        edx, [eax].light_render.p_
        fld        [edx].m_f278h
    .endif
    ASSUME    eax:nothing, edx:nothing
    ret
CScriptGameObject@@GetLSFSpeed endp
NanoBot-AMK
Ревизия №15
https://yadi.sk/d/14VQJTmNkdJOcg
Описание
rev232.15

Проекты: cop_1602_r1, cop_1602_r2, cop_1602_r3, cop_1602_r4, cop_1602_xrgame,
cs_1510_r1, cs_1510_r2, cs_1510_r3, cs_1510_xrgame, shoc_10006_r1, shoc_10006_r2
адаптированы под компилятор(UASM.exe), линковщик(polink.exe) и add_code.
В папке tools удалил ассемблер MASM, заменил add_code на новую версию(1.37), и изменил название на AddCode.exe.
В новой утилиты есть возможность добавлять, кроме кодой секции, ещё две, секция const и data.
В cs_1510_xrgame заменил xrGame_orig.dll на оригинальный файл, т.к. старый файл был нерабочий.
В shoc_10006_r2 немного от рефакторил, и добавил вывод стартового адреса в лог.
Так же для shoc_10006_r2 добавил структуры.

Для ТЧ
Новая баллистика, включается параметром type_ballistic в секции bullet_manager
0 - старая баллистика, 1 - баллистика из мультиплейера, 3 - вариант алгоритма №1
Функцию CBulletManager@@Load_ext переместил в level_explosive.asm.
Доработал метод calc_future_position с учётом этих 3-х типов баллистик.
Метод проверен, работает со всеми типами баллистики.

Рефакторинг: cuiwindow_reg_macro.asm, cuipdawnd_fix.asm, cuistatic_fix.asm
matrix_fix.asm, game_object_destructor_fix.asm, game_graph_distance_fix.asm,
misc.asm, inventory_box_fix.asm.
В пространсве имён matrix добавил два метода:
transform_tiny(vec.x, vec.y, vec.z)
transform_dir(vec.x, vec.y, vec.z)
Результат получаем методом res:get_result()

Добавлено пространство имён vector:
get_result() -- получить вектор из глобальной переменой.

Для класса game_object исправил несколько методов:
get_hud_bone_pos(name_bone) -- возвращает позицию кости в худовой модели, координаты глобальные.
specific_character() -- исправил ошибку, надо тестировать.
get_hud_animation_length(name_anim) -- получить длину анимации.

Удалил ненужные и переместил макросы и структуры из types.asm.

Добавил колбек №35(хит для всех объектов) для вертолёта.

Добавил проект shoc_10004_xrgame
xrGame.dll для 1.0004 патча.
Добавил вывод стартового адреса.

(с) НаноБот 31.10.2018
----------------------------------------------------------------


Как видно добавил проект xrGame.dll для 1.0004 патча, правда там кроме вывода стартового адреса в лог ничего и нет, но потом, можно что нибудь добавлять. Есть мысль инвентарь из "Судьбы Зоны" сделать правками движка, так можно повысить ФПС.
Ещё исправил файл xrGame.dll в ЧН, там он оказался битым. В прочим надо проверить оригинальность файлов, могли попасть какие то левые, правленые неизвестно кем файлы.
ЗЫ
Ещё забыл/не успел добавить параметр k_speed, индивидуальная скорость пули.
NanoBot-AMK
Новые ревизии! smile.gif

rev232.16
https://yadi.sk/d/ySXEyslWv5DaZA
Описание 232.16

Для ТЧ
Исправил !!!_PROPATCHIT_EXE_!!!.cmd, не правильное имя файла.
За комментировал некоторые правки в shoc_10006_r2
Для xrGame.dll добавил правку:
Фикс пропадания звука дождя при загрузке уровня.
Небольшой рефакторинг, добавил некоторые структуры.

Для ЗП
Добавил несколько скриптовых методов.
get_go_float(addr) --получить значения float по смещению для гейм объекта
dir_up() --вектор верх для гейм объекта
dir_right() --вектор вправо для гейм объекта

Добавил файл macroses.asm - структуры, и macroses.asm - макросы.
Небольшой рефакторинг.

(с) НаноБот 20.06.2019


rev232.17
https://yadi.sk/d/yi4rd_i3MaHLBQ
Описание 232.17
Для ТЧ
Для shoc_10006_r1.
Некоторый экспериментальный код, будет удалён.
Для shoc_10006_xrcore.
Исправлен файл !!!_PROPATCHIT_XRCORE_!!!.cmd.
Для shoc_10006_xrgame.
Небольшой рефакторинг global_ns_reg_macro2.asm, cuicombobox_fix.asm, cuioptionsitem_fix.asm,
cuiwpnparams_check_fix.asm, self_anim_stalker.asm, actor_hit_callback.asm, level_explosive.asm,
vector_reg_macro.asm (добавил макрос), game_object_reg_macro.asm (оптимизация макросов)

Рефакторинг game_object_fix.asm
оптимизация регистрации скриптовых методов пространства имён CGameObject
Исправлена ошибка в методах CScriptGameObject@@ChangeAlcohol, CScriptGameObject@@ChangeSatiety
Оптимизация в методе CScriptGameObject@@SetVisualName, меньше вероятности ошибки(CRC32) при сравнении строк.
Добавил методы:
get_grenade_mode_gl() --показать гранатомётный режим, для оружия с подствольником.
set_grenade_mode_gl(bool ) --установить -->>--
get_speed_rpg7() --показать скорость гранаты, для класса РПГ7
set_speed_rpg7(float speed) --установить -->>--
test_grenade_fire(Fvector pTargetPos, float ) --достижимость цели при стрельбе из гранатомётов,
без реактивного двигателя, для НПС. Экспериментальная!

Оптимизация регистрации скриптовых методов пространства имён vector
Для пространства имён vector, добавил метод:
test_throw(float throw_vel, float gravity_accel) --тест броска гранаты без реактивного двигателя,
доступ к движковой функции TransferenceAndThrowVelToThrowDir. Возвращает вектор броска, или нулевой вектор, если цель
недостижима.

Доработка классов гранатомётов(: CWeaponRG6, CWeaponRPG7, CWeaponMagazinedWGrenade.
В классе CRocketLauncher добавлено два метода:
CRocketLauncher::DeleteRockets() //удалить все ракеты
CRocketLauncher::SpawnRockets(xr_vector<CCartridge>& magazine) //спавне ракет согласно вектору magazine
Для этих классов правильно работает осечка.
Оружие не стреляет, если заблокировано методом set_queue_size(0).
Для класса CWeaponRG6(РГ-6), исправлен ряд ошибок:
Стрельба без патронов.
При спавне и перезарядке ракеты соответствуют патронам.
Исправлена ошибка при tri_state_reload = false, отключить анимацию подствольного или барабанного магазина.
Есть возможность стрелять картечью (для этого надо установить в конфиге патрона buck_shot = количество картечи,
и убрать параметр fake_grenade_name).
Добавлен параметр.
block_auto_aim_rg = bool ; заблокировать автоприцел для РГ-6
Доработка класса CWeaponShotgun, и как наследника CWeaponRG6:
При спавне разные патроны в магазине не теряются.

Добавил структуры, structures.asm.
Добавил перечисления, types.asm
Добавил макросы, macroses.asm.

Для класса CPhysicsShellHolder добавил метод:
CPhysicsShellHolder@@SetSpeedDescent speed_descent:real4 //задать скорость свободного падения.

Дополнительные скриптовый методы для класса CScriptParticles
CScriptParticles@@PlayAtPosDir pos:ptr Fvector, dir:ptr Fvector ;запустить партикл в точке pos, и развернуть по вектору dir
CScriptParticles@@MoveToPosDir pos:ptr Fvector, dir:ptr Fvector ;переместить партикл в точку pos, и развернуть по вектору dir
Эти методы пока не экспортированы в particles_object.

Доработка класса CExplosiveRocket
Оптимизация, перемещаем m_bEnginePresent в другое место структуры CCustomRocket.
Новые параметры:
can_contact_explode = bool ;возможность выключать в ракете взрываться от контакта с чем либо.
can_timer_explode = bool ;возможность выключать в ракете способность взрываться от самоликвидатора.
time_open_parachute = float ; парашют у ракеты, миллисекунд
speed_descent = float ;скорость снижения с открытым парашютом, м/с

Создал новый псевдокласс O_BATTAR, он же CPyroBattery
Пиробатарея создана на классе CAntirad, стреляет люсткугелями созданные на классе CExplosiveRocket,
которые взрываясь, разбрасывают определенным способом звёзды, которые так же созданы на классе CExplosiveRocket.
Параметры этих объектов соответствуют скриптовым объектам в bind_pyro.script (смотреть там).

Создал xr_vector.asm
Методы для xr_vector(он же std::vector)

Возможность добавлять собственные классы.

Для ЗП
Устранил ошибку, из-за которой компилятор UASM неправильно генерировал код.
Закомментировал нерабочий код.

Добавил utils\macro_base.asm
Универсальные макросы для всех проектов.

(с) НаноБот 18.08.2019
Marafonec
NanoBot-AMK, можно ли как-то твои правки из 16 ревизии заставить работать на оригинальном SVN_portable_r230 от macrona?
Конкретно интересует одна-единственная правка, про которую мы с тобой уже давно говорим - "Фикс пропадания звука дождя при загрузке уровня".
NanoBot-AMK
Откат к старым ревизия не планируется, наоборот, сейчас это проблематично сделать, но можно адаптировать мод к моей ревизии, заодно как следует про тестируется. Ревизия 232.18 отрефакторина как следует, так что дальше, это будет ещё сложней сделать. sad.gif
Да что непонятно, dry.gif старые ревизии на основе Маландинуса и Ко дико устарели и уже не будут развиваться. blink.gif
ЗЫ
Хотя эта правка простая, так что сделать можно, но мне что-то лень и вроде что-то там вылаживал, так что попроси ещё кого, кто хоть не много шарит в асме.
macron
Цитата(NanoBot-AMK @ 30.08.2019, 02:24) *
rev232.16
rev232.17

Круто! А можно узнать, как этим вообще пользоваться, например чтобы пропатчить xrgame.dll ?
Marafonec
Цитата(NanoBot-AMK @ 31.08.2019, 00:52) *
но можно адаптировать мод к моей ревизии
Увы, нельзя. Мод уже год как релизнулся, и сейчас менять полностью движок, по новой проводить полный тест...
Цитата(NanoBot-AMK @ 31.08.2019, 00:52) *
попроси ещё кого, кто хоть не много шарит в асме
biggrin.gif Ну, да, здесь каждый второй работает с ассемблером. Большой выбор тех, к кому можно обратиться.
Ладно, нет - так нет.

Цитата(macron @ 31.08.2019, 01:25) *
как этим вообще пользоваться
За основу берешь rev232.14_nanobot из шапки, сверху накатываешь 15, 16, 17.

macron
Попробовал выделить бинарный патч для дождя для чистого xrgame - ни фига не вышло. Вылетает на загрузке музыки уровня. Нормально грузится только полностью пропатченный xrgame.
Marafonec
Цитата(macron @ 31.08.2019, 10:00) *
Вылетает на загрузке музыки уровня.
У меня тоже. Вчера полдня с этим делом провозился, но результат такой же, как и у тебя. Или вообще не видит ДЛЛ-ку.
macron
Вообще, я в OLR так и не смог повторить баги со звуком при дожде. Попробуй с такой сборкой, может без правки xrgame обойдется.

https://yadi.sk/d/Q-X9K7b1ePbwwQ
RayTwitty
Цитата
Попробовал выделить бинарный патч для дождя для чистого xrgame - ни фига не вышло.

А вы пробовали просто копипастить правку из сборки Нанобота в свою сборку? Там же по идее совместимо всё. Найдите коммит и сравните диф.
macron
Цитата(RayTwitty @ 31.08.2019, 20:07) *
А вы пробовали просто копипастить правку из сборки Нанобота в свою сборку? Там же по идее совместимо всё.

Да, совместил пару файлов, но "просто" не вышло. Патчер вылетает по каким-то asm-строкам из вставок... Короче, надоело.
Marafonec
Цитата(macron @ 31.08.2019, 16:00) *
Попробуй с такой сборкой
Спасибо!
Но не помогло.
Цитата(macron @ 31.08.2019, 16:00) *
в OLR так и не смог повторить баги со звуком при дожде
Да оно даже в оригинале ТЧ есть. Я как-то видео здесь уже сбрасывал.
NanoBot-AMK
Я же говорил что с проектом на основе маландринуса будут проблемы, там у него не переделываются адреса релокации, а у меня они переделываются. Остаётся только адаптировать ваш мод к моей сборки, по крайней мере мне удалось запустить OLR2.5 rev19, были вылеты, нерегулярные, ещё удалось запустить мод Left To Die но там не работает всё как в оригинале, правда без вылетов и работает пулемёт на классе кара(БТРа) с физикой, в ОЛР пулемёт тоже работает. Так что сборку можно адаптировать к любому моду. wink.gif
NanoBot-AMK
С помощью VS2017 удалось создать репо Git, а затем залить на сам GitHub.
https://github.com/NanoBot-AMK/XRayExtensions
Правда, я создал README.md, в результате произошла рассинхронизация.
У меня только 19 ревизий, а на гитхабе получилось 20... Э включил синхронизацию, теперь 20 ревизий.
Ладно, пусть следующая будет под номером 21.
Далее постараюсь по чаще версироватся, так лучше будет видно, где какая правка в каких файлах размещена.
ЗЫ
Описание.
рев232.18 и рев232.19
rev232.18

Для ТЧ
Рефакторинг почти всего shoc_10006_xrgame проекта.
Добавил некоторые структуры.
Попытка исправления правки "гранаты с пояса" (пока не работает как надо).
В классе physics_element добавлены методы:
set_torque(vector) --задать ускорение вращения
get_torque(vector) --получить ускорение вращения
set_linear_vel(vector) --задать линейную скорость
set_angular_vel(vector) --задать угловую скорость
get_angular_vel(vector) --получить угловую скорость

Новая версия утилиты AddCode.exe
Исправил ошибку в функции Str2Int
Теперь флаги кодовой секции по умолчанию, берутся из ресурсного файла. Ранее была константа 0E00000E0h.
Из-за этого подправил батники.

фикс ошибки при взрыве ракеты методом explode(0)

(с) НаноБот 10.10.2019

rev232.19

Для ТЧ
Для shoc_10006_xrgame добавил зависимость имён идентификаторов от регистра.

Небольшой рефакторинг turrel.asm, pyrobattery.asm, pyrotechnics.asm

Для класса CExplosiveRocket добавил метод RealGravity, возвращает реальную гравитацию ракеты.

Для пространства имён game_object добавил пару методов.
is_weapon_rg6() --это класс CWeaponRG6
is_weapon_custom_pistol() --это класс CWeaponCustomPistol

Всё оружие от класса CWeaponMagazined может стрелять очередями.
Если включен параметр fire_modes, и задан размер очереди больше 1 или -1.
Добавлена возможность заблокировать автоперезарядку, для это надо задать
в конфиге auto_reload = false
Пули и ракеты вылетают из дула, в том числе от третьего и второго лица.
При минимальной дистанции, вылет пуль перемещается в камеру, как и в оригинале.

Перенёс код CWeaponRG6 в отдельный файл.

Доработка CWeaponRPG7.
Теперь размер магазина не ограничен.
Гранаты вылетают из костей, так же можно настроить вылет каждой гранаты из своей кости.
Это надо, чтобы ракеты при старте не сталкивались, и не взрывались.
Добавлен параметр deflection_angles, угол заклона вылета ракеты по углу места и по азимуту(по часовой стрелке)
Добавлена возможность использовать многотипозарядный гранатомёт (пока не тестировалось).

Доработка CWeaponMagazinedWGrenade
Из подствольного гранатомёта можно стрелять пулями(картечью).
Размер магазина не ограничен.
Параметры ПГ(второго ствола) загружаются в конфиге ПГ.
ПГ очередями не стреляет.
Фикс некоторых ошибок:
Изменения типа патрона при загрузке.
Учёт веса патронов во втором стволе.

Кумулятивный эффект. Задаётся cumulative_sect = секция_кумулятивной_пули
Для ракет добавлено, задать силу сопротивления воздуха:
air_resistance_linear --линейную
air_resistance_angular --угловую

Добавлен макрос printf, вывод в лог, можно задавать любое количество параметров,
в строке эскейп-символы не разбираются. Префиксы: & - взять адрес, ^ - преобразовать
float в double.

В классе physics_element добавлены методы:
set_air_resistance(k_linear, k_angular) --задать силу сопротивления, линейную и угловую.
Дубликат оригинального метода get_angular_vel удалён.

(с) НаноБот 24.10.2019
DjPon3
Тут нашлась одна странная проблема. Источник её не совсем понятен. Если в последней ревизии, в папке с xrgame-ом от ТЧ 6-ого патча, в файле correction_list, "включить" новые слоты, то начинает нечто странное происходить со слотом костюма в инвентаре. А именно - при убирании из него брони и последующем возвращении - фактически она остаётся в инвентаре, но при этом появляются основные её характеристики, будто она одета. Контекстное меню срабатывает корректно. При выходе из инвентаре и последующем возвращении всё становится на свои места, но при снятии и одевании опять повторяется. Хотелось бы найти возможные способы исправления проблемы.
NanoBot-AMK
DjPon3, толком не тестировал эту правку т.к. я не являюсь автором, но рефакторинг делал, возможно что-то сделал не то. Не понятно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.