Катеру выдать орудие или Ка Чи выдать шесть орудий например
Как сделать?
Думаю, что любой технике можно дать орудия. Любое количество. Проблема в том, что пока что не можем повлиять на внешность и на точки крепления (node) техники. Или пока не можем редактировать/загружать свои animchar. И из-за этого не получится красиво добавить новое орудие или как-то свободно изменить его.
Как сделать?
- Для этого надо будет добавить еще один turret_control__turretInfo c gun. Самое главное - указать уникальный turretName. Остальное несильно влияет, тем не менее распишу их.
-
Свойство trigger отвечает за активацию орудии той или иной клавишей. По умолчанию machine_guns и cannons активируются путем нажатия на клик, bombs на [Пробел], rockets на [R] и flamethrower_turrets, вроде, на [G].
-
Свойство turretGroup отвечает за группировку орудии, за показ патронов. Может иметь, наверное, любое значение. Если одинаковое, то объединяет орудия.
На скрине 20мм и 7.62мм отдельно от друг друга именно из-за того, что у них разные группы. -
Свойства barrelDm, breechDm, verDriveDm и horDriveDm вероятно отвечает за привязку повреждении к орудию.
-
Вероятно needsAssignedGunner передает управление всем бойцам в технике, а не только наводчику. Надо бы проверить.
-
Про salt не могу ничего сказать. Не очень уверен за что отвечает. Но есть только у техники.
-
После этого даем экипажу возможность использовать данное орудие (настраиваем turretNames). Если в планах есть дать возможность бойцу выглядывать (включаем hatchNodes, указываем место) и оставляем возможность использования орудии, то еще и прописываем hatchTurretNames. В turretNames указываем то, что задавали в turret_control__turretInfo.
-
И если надо, то редактируем и сам код орудия. Снаряды вылетают из gun__shootNodeName. Если в планах нету создания копии одного и того орудия, то можно поменять свойство в технике, изменив turretsInitialComponents. В нем добавляем object и gun__shotNodeName. Если в планах изменение 5ого орудия, но не первых четырех, то создаем четыре object, а в пятом добавляем свойства.
Все это возможно сделать только в рамках scene.blk или entities.blk. Рекомендуется последний вариант использовать. Иначе код сцены будет слишком большим + могут быть проблемы.
Берешь код из .blkx файлов техники, копируешь его и соответственно в нём прописываешь новые орудия. В целом ничего сложного, но нужно что-то придумать с наведением. Сам пока не пытался, так что высказываю только свои предположения
Не очень понял, но очень интересно
Отдельный shared object внутри turret_control__turretInfo.
Вот в этой технике всего три орудия. Какое? Указано в gun.
Изменить можем только в scene.blk или в entities.blk.
Еще вероятно надо будет поменять и другие свойства.
Наверное надо еще добавить еще поля к animVars и emitterNodes.
Хотя, похоже, необязательно это все делать. Просто не будут создаваться эффекты выстрелов.
Еще, кажется, что внутри triggerMapping расписаны имена для trigger.
Можете ли вы составить примерный код? Я не понимаю((
Немного лениво все сделал, но в общем как-то так.
test_broken_ka_chi{
_extends:t="jp_type_3_ka_chi_common"
skin__template:t="type_3_ka_chi_pacific_premium_skins"
"turret_gun_flash_fx__flashNodes:shared:array"{
node:t="emtr_gun_flame"
node:t="emtr_gun_flame"
node:t="emtr_gun_flame"
node:t="emtr_gun_flame"
node:t="emtr_gun_flame"
node:t="emtr_gun_flame"
}
"turret_gun_flash_fx__flashFx:shared:array"{
fx:t="muzzle_ground_60mm"
fx:t="muzzle_ground_60mm"
fx:t="muzzle_ground_60mm"
fx:t="muzzle_ground_60mm"
fx:t="muzzle_ground_60mm"
fx:t="muzzle_ground_60mm"
}
"turret_gun_flash_fx__flashFxScale:shared:array"{
scale:r=1.0
scale:r=1.0
scale:r=1.0
scale:r=1.0
scale:r=1.0
scale:r=1.0
}
"turret_control__emitterNodes:shared:array"{
node:t="bone_gun_barrel"
node:t="bone_gun_barrel"
node:t="bone_gun_barrel"
node:t="bone_gun_barrel"
node:t="bone_gun_barrel"
node:t="bone_gun_barrel"
}
"turret_control__animVars:shared:array"{
"vars:object"{
curYawParamName:t="turret_01_yaw"
curPitchParamName:t="gun_01_pitch"
aimActiveParamName:t="aim_01_active"
paramYawSpeed:t="turret_01_yaw_speed"
paramYawSpeedMul:t="turret_01_yaw_mul"
paramYawAccel:t="turret_01_yaw_accel"
paramMinYawAngle:t="turret_01_min_yaw_angle"
paramMaxYawAngle:t="turret_01_max_yaw_angle"
paramMinPitchAngle:t="turret_01_min_pitch_angle"
paramMaxPitchAngle:t="turret_01_max_pitch_angle"
paramPitchSpeed:t="gun_01_pitch_speed"
paramPitchSpeedMul:t="gun_01_pitch_mul"
paramPitchAccel:t="gun_01_pitch_accel"
wishYawParamName:t="gun_01_aim:targetYaw"
wishPitchParamName:t="gun_01_aim:targetPitch"
gunRecoilParamName:t="gun_01_recoil"
hasStabilizerParamName:t="gun_01_aim:hasStab"
stabilizerPitchParamName:t="gun_01_aim:stabPitch"
stabilizerErrorParamName:t="gun_01_aim:stabError"
stabilizerPitchMultParamName:t="gun_01_aim:stabPitchMult"
}
"vars:object"{
curYawParamName:t="turret_01_yaw"
curPitchParamName:t="gun_01_pitch"
aimActiveParamName:t="aim_01_active"
paramYawSpeed:t="turret_01_yaw_speed"
paramYawSpeedMul:t="turret_01_yaw_mul"
paramYawAccel:t="turret_01_yaw_accel"
paramMinYawAngle:t="turret_01_min_yaw_angle"
paramMaxYawAngle:t="turret_01_max_yaw_angle"
paramMinPitchAngle:t="turret_01_min_pitch_angle"
paramMaxPitchAngle:t="turret_01_max_pitch_angle"
paramPitchSpeed:t="gun_01_pitch_speed"
paramPitchSpeedMul:t="gun_01_pitch_mul"
paramPitchAccel:t="gun_01_pitch_accel"
wishYawParamName:t="gun_01_aim:targetYaw"
wishPitchParamName:t="gun_01_aim:targetPitch"
gunRecoilParamName:t="gun_01_recoil"
hasStabilizerParamName:t="gun_01_aim:hasStab"
stabilizerPitchParamName:t="gun_01_aim:stabPitch"
stabilizerErrorParamName:t="gun_01_aim:stabError"
stabilizerPitchMultParamName:t="gun_01_aim:stabPitchMult"
}
"vars:object"{
curYawParamName:t="turret_01_yaw"
curPitchParamName:t="gun_01_pitch"
aimActiveParamName:t="aim_01_active"
paramYawSpeed:t="turret_01_yaw_speed"
paramYawSpeedMul:t="turret_01_yaw_mul"
paramYawAccel:t="turret_01_yaw_accel"
paramMinYawAngle:t="turret_01_min_yaw_angle"
paramMaxYawAngle:t="turret_01_max_yaw_angle"
paramMinPitchAngle:t="turret_01_min_pitch_angle"
paramMaxPitchAngle:t="turret_01_max_pitch_angle"
paramPitchSpeed:t="gun_01_pitch_speed"
paramPitchSpeedMul:t="gun_01_pitch_mul"
paramPitchAccel:t="gun_01_pitch_accel"
wishYawParamName:t="gun_01_aim:targetYaw"
wishPitchParamName:t="gun_01_aim:targetPitch"
gunRecoilParamName:t="gun_01_recoil"
hasStabilizerParamName:t="gun_01_aim:hasStab"
stabilizerPitchParamName:t="gun_01_aim:stabPitch"
stabilizerErrorParamName:t="gun_01_aim:stabError"
stabilizerPitchMultParamName:t="gun_01_aim:stabPitchMult"
}
"vars:object"{
curYawParamName:t="turret_01_yaw"
curPitchParamName:t="gun_01_pitch"
aimActiveParamName:t="aim_01_active"
paramYawSpeed:t="turret_01_yaw_speed"
paramYawSpeedMul:t="turret_01_yaw_mul"
paramYawAccel:t="turret_01_yaw_accel"
paramMinYawAngle:t="turret_01_min_yaw_angle"
paramMaxYawAngle:t="turret_01_max_yaw_angle"
paramMinPitchAngle:t="turret_01_min_pitch_angle"
paramMaxPitchAngle:t="turret_01_max_pitch_angle"
paramPitchSpeed:t="gun_01_pitch_speed"
paramPitchSpeedMul:t="gun_01_pitch_mul"
paramPitchAccel:t="gun_01_pitch_accel"
wishYawParamName:t="gun_01_aim:targetYaw"
wishPitchParamName:t="gun_01_aim:targetPitch"
gunRecoilParamName:t="gun_01_recoil"
hasStabilizerParamName:t="gun_01_aim:hasStab"
stabilizerPitchParamName:t="gun_01_aim:stabPitch"
stabilizerErrorParamName:t="gun_01_aim:stabError"
stabilizerPitchMultParamName:t="gun_01_aim:stabPitchMult"
}
"vars:object"{
curYawParamName:t="turret_01_yaw"
curPitchParamName:t="gun_01_pitch"
aimActiveParamName:t="aim_01_active"
paramYawSpeed:t="turret_01_yaw_speed"
paramYawSpeedMul:t="turret_01_yaw_mul"
paramYawAccel:t="turret_01_yaw_accel"
paramMinYawAngle:t="turret_01_min_yaw_angle"
paramMaxYawAngle:t="turret_01_max_yaw_angle"
paramMinPitchAngle:t="turret_01_min_pitch_angle"
paramMaxPitchAngle:t="turret_01_max_pitch_angle"
paramPitchSpeed:t="gun_01_pitch_speed"
paramPitchSpeedMul:t="gun_01_pitch_mul"
paramPitchAccel:t="gun_01_pitch_accel"
wishYawParamName:t="gun_01_aim:targetYaw"
wishPitchParamName:t="gun_01_aim:targetPitch"
gunRecoilParamName:t="gun_01_recoil"
hasStabilizerParamName:t="gun_01_aim:hasStab"
stabilizerPitchParamName:t="gun_01_aim:stabPitch"
stabilizerErrorParamName:t="gun_01_aim:stabError"
stabilizerPitchMultParamName:t="gun_01_aim:stabPitchMult"
}
"vars:object"{
curYawParamName:t="turret_01_yaw"
curPitchParamName:t="gun_01_pitch"
aimActiveParamName:t="aim_01_active"
paramYawSpeed:t="turret_01_yaw_speed"
paramYawSpeedMul:t="turret_01_yaw_mul"
paramYawAccel:t="turret_01_yaw_accel"
paramMinYawAngle:t="turret_01_min_yaw_angle"
paramMaxYawAngle:t="turret_01_max_yaw_angle"
paramMinPitchAngle:t="turret_01_min_pitch_angle"
paramMaxPitchAngle:t="turret_01_max_pitch_angle"
paramPitchSpeed:t="gun_01_pitch_speed"
paramPitchSpeedMul:t="gun_01_pitch_mul"
paramPitchAccel:t="gun_01_pitch_accel"
wishYawParamName:t="gun_01_aim:targetYaw"
wishPitchParamName:t="gun_01_aim:targetPitch"
gunRecoilParamName:t="gun_01_recoil"
hasStabilizerParamName:t="gun_01_aim:hasStab"
stabilizerPitchParamName:t="gun_01_aim:stabPitch"
stabilizerErrorParamName:t="gun_01_aim:stabError"
stabilizerPitchMultParamName:t="gun_01_aim:stabPitchMult"
}
}
"turret_control__triggerMapping:shared:array"{
"triggerHotkey:object"{
name:t="rockets"
hotkey:t="Mech.ShootSecondary"
}
"triggerHotkey:object"{
name:t="flamethrower_turrets"
hotkey:t="Mech.ShootFlamethrower"
}
}
"turret_control__turretInfo:shared:array"{
"turretInfo:object"{
turretName:t="turret_01"
gun:t="type_3_ka_chi_turret_01_47mm_type1+turret_with_several_types_of_shells+main_turret"
barrelDm:t="gun_barrel"
breechDm:t="cannon_breech"
verDriveDm:t="drive_turret_v"
horDriveDm:t="drive_turret_h"
turretGroup:t="main_turrets"
salt:i=1
}
"turretInfo:object"{
turretName:t="turret_02"
gun:t="type_3_ka_chi_turret_01_47mm_type1+turret_with_several_types_of_shells+main_turret"
barrelDm:t="gun_barrel"
breechDm:t="cannon_breech"
verDriveDm:t="drive_turret_v"
horDriveDm:t="drive_turret_h"
turretGroup:t="main_turrets"
salt:i=1
}
"turretInfo:object"{
turretName:t="turret_03"
gun:t="type_3_ka_chi_turret_01_47mm_type1+turret_with_several_types_of_shells"
barrelDm:t="gun_barrel"
breechDm:t="cannon_breech"
verDriveDm:t="drive_turret_v"
horDriveDm:t="drive_turret_h"
turretGroup:t="alt_turrets"
salt:i=1
}
"turretInfo:object"{
turretName:t="turret_04"
gun:t="type_3_ka_chi_turret_01_47mm_type1+turret_with_several_types_of_shells"
barrelDm:t="gun_barrel"
breechDm:t="cannon_breech"
verDriveDm:t="drive_turret_v"
horDriveDm:t="drive_turret_h"
turretGroup:t="alt_turrets"
salt:i=1
}
"turretInfo:object"{
turretName:t="turret_05"
gun:t="type_3_ka_chi_turret_01_47mm_type1+turret_with_several_types_of_shells"
barrelDm:t="gun_barrel"
breechDm:t="cannon_breech"
verDriveDm:t="drive_turret_v"
horDriveDm:t="drive_turret_h"
turretGroup:t="third_turrets"
salt:i=1
}
"turretInfo:object"{
turretName:t="turret_06"
gun:t="type_3_ka_chi_turret_01_47mm_type1+turret_with_several_types_of_shells"
barrelDm:t="gun_barrel"
breechDm:t="cannon_breech"
verDriveDm:t="drive_turret_v"
horDriveDm:t="drive_turret_h"
turretGroup:t="third_turrets"
salt:i=1
}
}
"vehicle_seats__seats:shared:array"{
"seats:object"{
name:t="main_gunner"
locName:t="vehicle_seats/gunner"
attachNode:t="gunner"
ignoreAttachNodeRotation:b=yes
attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.5, 0.0]]
seatComponent:t="isGunner"
nextSeat:t="driver"
shouldHideOwner:b=yes
receiveDamageFromDMPart:t="gunner"
cameraNodeName:t="bone_camera_gunner"
cockpitTemplate:t="jp_type_3_ka_chi_gunner_cockpit"
"turretNames:array"{
turret:t="turret_01"
turret:t="turret_02"
turret:t="turret_03"
turret:t="turret_04"
turret:t="turret_05"
turret:t="turret_06"
}
}
"seats:object"{
name:t="driver"
locName:t="vehicle_seats/driver"
seatOwnsEntityControl:b=yes
attachNode:t="driver"
ignoreAttachNodeRotation:b=yes
attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.25, 0.0]]
seatComponent:t="isDriver"
nextSeat:t="main_gunner"
shouldHideOwner:b=yes
receiveDamageFromDMPart:t="driver"
cameraNodeName:t="bone_camera_driver"
cameraOffset:p3=0.15, -0.0, -0.0
cockpitTemplate:t="jp_type_3_ka_chi_driver_cockpit"
}
"seats:object"{
name:t="commander"
locName:t="vehicle_seats/commander"
attachNode:t="commander"
shouldHideOwner:b=yes
maxPosWithOpenHatch:r=2.2
hatchRotationAxis:p3=0.8, 0.0, 0.0
ignoreAttachNodeRotation:b=yes
attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.1, -0.75, 0.0]]
seatComponent:t="isDriver"
receiveDamageFromDMPart:t="commander"
cameraNodeName:t="bone_turret"
cockpitTemplate:t="jp_type_3_ka_chi_commander_cockpit"
"hatchNodes:array"{
node:t="hatch_01"
}
}
"seats:object"{
attachNode:t="loader"
locName:t="vehicle_seats/loader"
ignoreAttachNodeRotation:b=yes
attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.5, 0.0]]
seatComponent:t="isPassenger"
shouldHideOwner:b=yes
receiveDamageFromDMPart:t="loader"
cameraNodeName:t="bone_camera_driver"
"loaderTurretNames:array"{
turret:t="turret_01"
turret:t="turret_02"
}
}
"seats:object"{
attachNode:t="machine_gunner"
locName:t="vehicle_seats/radioman"
ignoreAttachNodeRotation:b=yes
attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.5, 0.0]]
seatComponent:t="isPassenger"
shouldHideOwner:b=yes
receiveDamageFromDMPart:t="machine_gunner"
cameraNodeName:t="bone_camera_driver"
"loaderTurretNames:array"{
turret:t="turret_03"
turret:t="turret_04"
}
}
"seats:object"{
attachNode:t="machine_gunner"
locName:t="vehicle_seats/crew"
ignoreAttachNodeRotation:b=yes
attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.5, 0.0]]
seatComponent:t="isPassenger"
shouldHideOwner:b=yes
receiveDamageFromDMPart:t="machine_gunner_01"
cameraNodeName:t="bone_camera_driver"
"loaderTurretNames:array"{
turret:t="turret_05"
turret:t="turret_06"
}
}
"seats:object"{
attachNode:t="machine_gunner"
locName:t="vehicle_seats/crew"
ignoreAttachNodeRotation:b=yes
attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.5, 0.0]]
seatComponent:t="isPassenger"
shouldHideOwner:b=yes
receiveDamageFromDMPart:t="machine_gunner_02"
cameraNodeName:t="bone_camera_driver"
"loaderTurretNames:array"{
turret:t="turret_01"
turret:t="turret_02"
turret:t="turret_03"
}
}
}
}
Да. Для этого создай любое оружие и в свойствах поменяй item__weapTemplate на arisaka_type_99_long_gun.
Для внешнего вида оружия (предмета для подбора), возможно, лучше всего подойдет arisaka_type_99_late_gun или просто меняешь свойство animchar__res на arisaka_type_99_long_char.
В меню all можно найти некоторое оружие, которое отсутствует в списке weapons.
Это связано с тем, что у оружия немного уникальный анимчар и т.п.
Такая же проблема есть у mosin_1928_grenade_launcher, stl_mosin_1928_grenade_launcher, smle_mk3_grenade_launcher и у browning_m1916a6_gun.
Теперь у меня новый вопрос. Как сделать свои иконки точкам? не те которые bunker и т.д
а самолёт например? (заранее спасибо)
К сожалению, на это я не смогу ответить точно.
Вероятно aircraft, aircraft_icon, pilot_assaulter или pilot_fighter. Последние два, вроде, должны содержать иконку самолета, так как название класса. Вводить надо уже иначе, чем просто название. Скорее всего как тут:
А свою иконку возможно добавить?
И как?
Например…
Вот этого на круглешок:
Любое изображение можно закинуть в папку с модом для того, чтобы сделать как загрузочный экран (в объекте briefing) или как иконку для некоторых объектов (там где есть полный путь к изображению, например, !ui/skin#engineer.svg, то можно заменить изображение на свое из папки с модом).
Если что путь такой же как и у пользовательского набора отрядов. Точно должен принимать png изображения.
Сражение за подвал, где Кеофокс держит разрабов?)