Можно ли дать технике несколько орудий?

Катеру выдать орудие или Ка Чи выдать шесть орудий например
Как сделать?

2 лайка

Думаю, что любой технике можно дать орудия. Любое количество. Проблема в том, что пока что не можем повлиять на внешность и на точки крепления (node) техники. Или пока не можем редактировать/загружать свои animchar. И из-за этого не получится красиво добавить новое орудие или как-то свободно изменить его.

Как сделать?

  1. Для этого надо будет добавить еще один turret_control__turretInfo c gun. Самое главное - указать уникальный turretName. Остальное несильно влияет, тем не менее распишу их.
  • Свойство trigger отвечает за активацию орудии той или иной клавишей. По умолчанию machine_guns и cannons активируются путем нажатия на клик, bombs на [Пробел], rockets на [R] и flamethrower_turrets, вроде, на [G].

  • Свойство turretGroup отвечает за группировку орудии, за показ патронов. Может иметь, наверное, любое значение. Если одинаковое, то объединяет орудия.
    image
    На скрине 20мм и 7.62мм отдельно от друг друга именно из-за того, что у них разные группы.

  • Свойства barrelDm, breechDm, verDriveDm и horDriveDm вероятно отвечает за привязку повреждении к орудию.

  • Вероятно needsAssignedGunner передает управление всем бойцам в технике, а не только наводчику. Надо бы проверить.

  • Про salt не могу ничего сказать. Не очень уверен за что отвечает. Но есть только у техники.

  1. После этого даем экипажу возможность использовать данное орудие (настраиваем turretNames). Если в планах есть дать возможность бойцу выглядывать (включаем hatchNodes, указываем место) и оставляем возможность использования орудии, то еще и прописываем hatchTurretNames. В turretNames указываем то, что задавали в turret_control__turretInfo.

  2. И если надо, то редактируем и сам код орудия. Снаряды вылетают из gun__shootNodeName. Если в планах нету создания копии одного и того орудия, то можно поменять свойство в технике, изменив turretsInitialComponents. В нем добавляем object и gun__shotNodeName. Если в планах изменение 5ого орудия, но не первых четырех, то создаем четыре object, а в пятом добавляем свойства.

Все это возможно сделать только в рамках scene.blk или entities.blk. Рекомендуется последний вариант использовать. Иначе код сцены будет слишком большим + могут быть проблемы.

3 лайка

Берешь код из .blkx файлов техники, копируешь его и соответственно в нём прописываешь новые орудия. В целом ничего сложного, но нужно что-то придумать с наведением. Сам пока не пытался, так что высказываю только свои предположения

1 лайк

Не очень понял, но очень интересно

1 лайк

Отдельный shared object внутри turret_control__turretInfo.


Вот в этой технике всего три орудия. Какое? Указано в gun.

Изменить можем только в scene.blk или в entities.blk.

1 лайк

Еще вероятно надо будет поменять и другие свойства.


Наверное надо еще добавить еще поля к animVars и emitterNodes.

Хотя, похоже, необязательно это все делать. Просто не будут создаваться эффекты выстрелов.
Еще, кажется, что внутри triggerMapping расписаны имена для trigger.

1 лайк

Можете ли вы составить примерный код? Я не понимаю((

Немного лениво все сделал, но в общем как-то так.

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"
      }
    }
  }
}
2 лайка

Спасибо, а можно способ создания Винтовки Тип 99 Длинной (с флагом как на скрине)
И возможно ли?

1 лайк

Да. Для этого создай любое оружие и в свойствах поменяй 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.

1 лайк

Теперь у меня новый вопрос. Как сделать свои иконки точкам? не те которые bunker и т.д
а самолёт например? (заранее спасибо)

К сожалению, на это я не смогу ответить точно.

Вероятно aircraft, aircraft_icon, pilot_assaulter или pilot_fighter. Последние два, вроде, должны содержать иконку самолета, так как название класса. Вводить надо уже иначе, чем просто название. Скорее всего как тут:

1 лайк

А свою иконку возможно добавить?
И как?
Например…
Вот этого на круглешок:
127175_2

Любое изображение можно закинуть в папку с модом для того, чтобы сделать как загрузочный экран (в объекте briefing) или как иконку для некоторых объектов (там где есть полный путь к изображению, например, !ui/skin#engineer.svg, то можно заменить изображение на свое из папки с модом).

Если что путь такой же как и у пользовательского набора отрядов. Точно должен принимать png изображения.

1 лайк

Сражение за подвал, где Кеофокс держит разрабов?)

1 лайк

Наверно, битву за подвал с целью освободить товарища КеО от Рабства разработчика