Использовать ревизию 232.19 и выше. Автомат OICW https://youtu.be/YzaOm9cKtH8 Автомат с подствольным интегрированным гранатомётом. https://ru.wikipedia.org/wiki/Objective_Individual_Combat_Weapon Боеприпасы: осколочно-фугасные, картечные, кумулятивные. Кумулятивные граната реально выстреливают пулю, которая имитирует кумулятивную струю, которая имеет высокую подражающую способность. Пока есть баг, ракета взрывается будучи внутри цели, из-за этого поражения кумулятивной пули не засчитывается Сама ревизия https://github.com/NanoBot-AMK/XRayExtensions Пока есть некоторые баги, которые в следующих ревизиях исправлю.
Добавлено (01.11.2019, 00:41) --------------------------------------------- Добавлю ещё кое что. Модель вылаживать не буду, т.к. она дефектная с дырой спереди. Но вот конфиг, довольно сырой, но рабочий.
#include "ammo_20x85.ltx"
[wpn_oicw]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "weapons\scar" ; option for Level Editor $npc = on ; option for Level Editor $prefetch = 8 scheduled = off ; option for ALife Simulator cform = skeleton class = WP_AK74 min_radius = 0 max_radius = 50 description = enc_weapons_wpn_oicw
ef_main_weapon_type = 2 ef_weapon_type = 6
;----------------------------------------------------------------------------------- holder_range_modifier = 1.0 ; во сколько раз увеличивается eye_range holder_fov_modifier = 0.7 ; во сколько раз увеличивается eye_fov ;-----------------------------------------------------------------------------------
slot = 2 ; // secondary animation_slot = 2 ; type of the animation that will be used
;----------------------------------------------------------------------------------- ;params of weapon recoil fire_dispersion_base = 0.05 ;базовая дисперсия оружия (без влияния износа) control_inertion_factor = 1.10f ;(похоже, влияет на шкалу "удобство" и на инерцию ствола в руках (скорость наведения на цель)) disp_rate = 1.9 ;предположительно нарастание рассеивания огня с каждым следующим выстрелом ;отдача cam_relax_speed = 5.6 ;скорость возврата в исходное положение cam_dispersion = 0.2 ;увеличения угла (в градусах) с каждым выстрелом cam_dispersion_inc = 0.1 ;увеличениe cam_dispersion с каждым выстрелом cam_dispertion_frac = 1.0 ;ствол будет подыматься на cam_dispersion*cam_dispertion_frac +- cam_dispersion*(1-cam_dispertion_frac) cam_max_angle = 8.5 ;максимальный угол отдачи cam_max_angle_horz = 9.0 ;(degree) maximum shot horizontal degree cam_step_angle_horz = 0.6 ;(degree) size of step camera moved in horizontal position while shooting
fire_dispersion_condition_factor= 5 ;увеличение дисперсии в процентах при максимальном износе misfire_probability = 0.003 ;вероятность осечки при максимальном износе condition_shot_dec = 0.0002 ;увеличение износа при каждом выстреле misfire_condition_k = 0.0007 ;--------------------------------------------------------------------------------
В качестве эксперемента добавил возможность в гранате взрыватся от удара.
Код
--[[---------------------------------------------------------------------------- Гранаты с ударным взрывателем. Version 1.06 Release Для модов ТЧ + XRay Extensions rev 232.11 Поддерживает эффекты только у актора.
(с) НаноБот Пос. изменение 4.12.2016 г. --]]----------------------------------------------------------------------------
local ini = system_ini()
function init(obj) if alife():object(obj:id()) == nil then -- если объект чисто клиент, то наш случай! obj:bind_object(CGrenadeUDZ(obj)) end end
class "CGrenadeUDZ" (object_binder) function CGrenadeUDZ:__init(obj) super(obj) local section = obj:section() self.dwTimeSafetylock = ini:r_u32(section, "time_safetylock") -- мс, время взвода взрывателя. self.fVelThreshold = ini:r_float(section, "vel_threshold") -- скорость (м/с) свыше которой срабатывает взрыватель obj:set_fastcall(self.UpdateCL, self) end
function CGrenadeUDZ:UpdateCL() local grn = self.object local ph_shel = grn:get_physics_shell() if self.bThrown then -- граната брошена if grn:is_exploding() then return true end local lvel = vector() ph_shel:get_linear_vel(lvel) if self.dwTimeSafetylock < time_global() and self.vLastLvel:distance_to(lvel) > self.fVelThreshold then grn:explode(0) return true end self.vLastLvel:set(lvel) elseif ph_shel then -- отслеживаем момент броска self.dwTimeSafetylock = self.dwTimeSafetylock + time_global() self.bThrown = true self.vLastLvel = vector() ph_shel:get_linear_vel(self.vLastLvel) end end
function CGrenadeUDZ:update(delta) end
Если не понравится, то закоментируйте строчку script_binding = bind_grenade.init И ещё. can_contact_explode = true ЗЫ Ах да, ещё забыл. Будет вылет из-за этой строчки. fly_particles = explosions\signal_light_00 Надо удалить или заменить на подходящий партикл, который у вас есть в моде.
Сообщение отредактировал NanoBot - Пятница, 01.11.2019, 00:52