Буду сюда скидывать свои наработки. В планах от рефакторить проект, так что он больше был похож на проекты на основе исходников.
Максимальное использования макросов, меньше быдлокода, использования кода функций вне proc endp запрещено, максимально использовать структуры, которые берутся из декомпиляции IDA Pro исполняемых файлов с использованием дебаговых файлов. Так же код будет оформляться так, что бы можно было просто портировать в исходники, т.е. комментировать псевдокодом С++.
Мои ревизии:
Проект создан на основе 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
----------------------------------------------------------------
ЧН Колбек на выстрел.
ЧН Для турелей на основе БТР сделал экспериментальную правку для без проблемного открывания дверей.
ЧН ЗП Вывод начального адреса 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
----------------------------------------------------------------