Полурабочая механика целеуказания для РСЗО

Относительно недавно улитка добавила новые РСЗО для события “Ядерная эскалация”. При этом эти РСЗО не только стреляют, но улитка также дала возможность РСЗО атаковать цель напрямую. Т.е. раньше, чтобы заставить РСЗО-бота стрелять, нужно было ставить цель (зону, например) в небо, регулируя таким образом направление и градус атаки. Естественно, ни о какой прицельной стрельбе речи и быть не могло (возможно, конечно, но очень затратно по времени). Теперь же можно напрямую указать наземную цель, и РСЗО будет эту цель атаковать. То же самое, кстати, и для артиллерии.

Также, в триггерах я нашел условие “ИгрокВидитЦель”. Т.е. если игрок смотрит на цель даже через прицельный контейнер, то триггер это понимает. Регулируя параметры (например, угол наблюдения цели), можно давать целеуказание для РСЗО с целью атаки конкретной цели.

Ниже код миссии, где расположены 4 цели на большом удалении. Понадобится Су-30СМ2. Через контейнер наведитесь на желаемую цель и удерживаете ее в течение 10 секунд. Если сделаете все правильно, РСЗО начнет работу.

Успешно навелись на цель

Удержали 10 секунд

Не удержали 10 секунд

Работа РСЗО

Код Миссии

selected_tag:t=“”
bin_dump_file:t=“”

mission_settings{
player{
army:i=1
wing:t=“Player”
}

player_teamB{
army:i=2
}

mission{
type:t=“singleMission”
level:t=“levels/tunisia.bin”
environment:t=“Day”
weather:t=“good”
locName:t=“Tunisa - Aim for MLRS Test”
locDesc:t=“Choose target for MLRS strike”
}
}

imports{}
triggers{
isCategory:b=yes
is_enabled:b=yes

“Mission Setting”{
is_enabled:b=yes
comments:t=“”

props{
  actionsType:t="PERFORM_ONE_BY_ONE"
  conditionsType:t="ALL"
  enableAfterComplete:b=no
}

events{
  initMission{}
}

conditions{}
actions{
  __missionMarkAsRespawnPoint{
    loc_name:t=""
    radius:r=-1
    target:t="Zone_P_Spawn"
    team:t="A"
    isStrictSpawn:b=yes
    isIndividual:b=yes
    showOnMap:b=yes

    tags{
      air:b=yes
      type_bomber:b=yes
      type_fighter:b=yes
      type_assault:b=yes
      type_interceptor:b=yes
      type_aa_fighter:b=yes
      type_light_bomber:b=yes
      type_frontline_bomber:b=yes
      type_longrange_bomber:b=yes
    }
  }

  unitSetProperties{
    object:t="SQUAD_Enemies"
    object:t="Smerch"
    forceVisibleOnMap:b=yes
  }

  unitSetProperties{
    object:t="Smerch"
    attack_type:t="dont_aim"
  }
}

else_actions{}

}

Aiming_E01{
is_enabled:b=yes
comments:t=“”

props{
  actionsType:t="PERFORM_ONE_BY_ONE"
  conditionsType:t="ALL"
  enableAfterComplete:b=yes
}

events{
  periodicEvent{
    time:r=6
  }
}

conditions{
  playerSeesUnit{
    target_type:t="isAlive"
    check_targets:t="any"
    target:t="E_01"
    viewAngle:r=0.05
  }
}

actions{
  playHint{
    hintType:t="standard"
    name:t="Preparing coordinates...."
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=7
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
    shouldBlink:b=yes
  }

  wait{
    time:r=10
  }

  triggerActivate{
    target:t="MLRS Strike_E01"
    activate_type:t="checkConidtions"
    check_trigger_status:b=no
    after_activation:t="disable"
  }
}

else_actions{}

}

“MLRS Strike_E01”{
is_enabled:b=no
comments:t=“”

props{
  actionsType:t="PERFORM_ONE_BY_ONE"
  conditionsType:t="ALL"
  enableAfterComplete:b=no
}

events{
  periodicEvent{
    time:r=0
  }
}

conditions{
  playerSeesUnit{
    target_type:t="isAlive"
    check_targets:t="any"
    target:t="E_01"
    viewAngle:r=0.05
  }
}

actions{
  playHint{
    hintType:t="standard"
    name:t="Coordinates received! MLRS is preparing for strike!"
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=3
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
  }

  unitRestore{
    target_marking:i=0
    ressurectIfDead:b=no
    fullRestore:b=yes
    target:t="Smerch"
    ammoRestore:b=yes
  }

  wait{
    time:r=3
  }

  unitAttackTarget{
    playerAttracted:b=no
    object:t="Smerch"
    target:t="E_01"
  }
}

else_actions{
  playHint{
    hintType:t="standard"
    name:t="Failed to transfer coordinates!"
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=4
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
  }
}

}

Aiming_E02{
is_enabled:b=yes
comments:t=“”

props{
  actionsType:t="PERFORM_ONE_BY_ONE"
  conditionsType:t="ALL"
  enableAfterComplete:b=yes
}

events{
  periodicEvent{
    time:r=6
  }
}

conditions{
  playerSeesUnit{
    target_type:t="isAlive"
    check_targets:t="any"
    target:t="E_02"
    viewAngle:r=0.05
  }
}

actions{
  playHint{
    hintType:t="standard"
    name:t="Preparing coordinates...."
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=7
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
    shouldBlink:b=yes
  }

  wait{
    time:r=10
  }

  triggerActivate{
    target:t="MLRS Strike_E02"
    activate_type:t="checkConidtions"
    check_trigger_status:b=no
    after_activation:t="disable"
  }
}

else_actions{}

}

“MLRS Strike_E02”{
is_enabled:b=no
comments:t=“”

props{
  actionsType:t="PERFORM_ONE_BY_ONE"
  conditionsType:t="ALL"
  enableAfterComplete:b=no
}

events{
  periodicEvent{
    time:r=0
  }
}

conditions{
  playerSeesUnit{
    target_type:t="isAlive"
    check_targets:t="any"
    target:t="E_02"
    viewAngle:r=0.05
  }
}

actions{
  playHint{
    hintType:t="standard"
    name:t="Coordinates received! MLRS is preparing for strike!"
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=3
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
  }

  unitRestore{
    target_marking:i=0
    ressurectIfDead:b=no
    fullRestore:b=yes
    target:t="Smerch"
    ammoRestore:b=yes
  }

  wait{
    time:r=3
  }

  unitAttackTarget{
    playerAttracted:b=no
    object:t="Smerch"
    target:t="E_02"
  }
}

else_actions{
  playHint{
    hintType:t="standard"
    name:t="Failed to transfer coordinates!"
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=4
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
  }
}

}

Aiming_E03{
is_enabled:b=yes
comments:t=“”

props{
  actionsType:t="PERFORM_ONE_BY_ONE"
  conditionsType:t="ALL"
  enableAfterComplete:b=yes
}

events{
  periodicEvent{
    time:r=6
  }
}

conditions{
  playerSeesUnit{
    target_type:t="isAlive"
    check_targets:t="any"
    target:t="E_03"
    viewAngle:r=0.05
  }
}

actions{
  playHint{
    hintType:t="standard"
    name:t="Preparing coordinates...."
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=7
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
    shouldBlink:b=yes
  }

  wait{
    time:r=10
  }

  triggerActivate{
    target:t="MLRS Strike_E03"
    activate_type:t="checkConidtions"
    check_trigger_status:b=no
    after_activation:t="disable"
  }
}

else_actions{}

}

“MLRS Strike_E03”{
is_enabled:b=no
comments:t=“”

props{
  actionsType:t="PERFORM_ONE_BY_ONE"
  conditionsType:t="ALL"
  enableAfterComplete:b=no
}

events{
  periodicEvent{
    time:r=0
  }
}

conditions{
  playerSeesUnit{
    target_type:t="isAlive"
    check_targets:t="any"
    target:t="E_03"
    viewAngle:r=0.05
  }
}

actions{
  playHint{
    hintType:t="standard"
    name:t="Coordinates received! MLRS is preparing for strike!"
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=3
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
  }

  unitRestore{
    target_marking:i=0
    ressurectIfDead:b=no
    fullRestore:b=yes
    target:t="Smerch"
    ammoRestore:b=yes
  }

  wait{
    time:r=3
  }

  unitAttackTarget{
    playerAttracted:b=no
    object:t="Smerch"
    target:t="E_03"
  }
}

else_actions{
  playHint{
    hintType:t="standard"
    name:t="Failed to transfer coordinates!"
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=4
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
  }
}

}

Aiming_E04{
is_enabled:b=yes
comments:t=“”

props{
  actionsType:t="PERFORM_ONE_BY_ONE"
  conditionsType:t="ALL"
  enableAfterComplete:b=yes
}

events{
  periodicEvent{
    time:r=6
  }
}

conditions{
  playerSeesUnit{
    target_type:t="isAlive"
    check_targets:t="any"
    target:t="E_04"
    viewAngle:r=0.05
  }
}

actions{
  playHint{
    hintType:t="standard"
    name:t="Preparing coordinates...."
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=7
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
    shouldBlink:b=yes
  }

  wait{
    time:r=10
  }

  triggerActivate{
    target:t="MLRS Strike_E04"
    activate_type:t="checkConidtions"
    check_trigger_status:b=no
    after_activation:t="disable"
  }
}

else_actions{}

}

“MLRS Strike_E04”{
is_enabled:b=no
comments:t=“”

props{
  actionsType:t="PERFORM_ONE_BY_ONE"
  conditionsType:t="ALL"
  enableAfterComplete:b=no
}

events{
  periodicEvent{
    time:r=0
  }
}

conditions{
  playerSeesUnit{
    target_type:t="isAlive"
    check_targets:t="any"
    target:t="E_04"
    viewAngle:r=0.05
  }
}

actions{
  playHint{
    hintType:t="standard"
    name:t="Coordinates received! MLRS is preparing for strike!"
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=3
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
  }

  unitRestore{
    target_marking:i=0
    ressurectIfDead:b=no
    fullRestore:b=yes
    target:t="Smerch"
    ammoRestore:b=yes
  }

  wait{
    time:r=3
  }

  unitAttackTarget{
    playerAttracted:b=no
    object:t="Smerch"
    target:t="E_04"
  }
}

else_actions{
  playHint{
    hintType:t="standard"
    name:t="Failed to transfer coordinates!"
    action:t="show"
    shouldFadeOut:b=no
    isOverFade:b=no
    time:r=4
    priority:i=0
    target_marking:i=0
    object_var_name:t=""
    object_var_comp_op:t="equal"
    object_var_value:i=0
  }
}

}
}

mission_objectives{
isCategory:b=yes
is_enabled:b=yes
}

variables{}
dialogs{}
airfields{}
effects{}
units{
tankModels{
name:t=“E_01”
tm:m=[[0.382683, 0, -0.92388] [0, 1, 0] [0.92388, 0, 0.382683] [-8266, 110.934, 22516.2]]
unit_class:t=“us_m1a2_sep3_abrams”
objLayer:i=1
closed_waypoints:b=no
isShipSpline:b=no
shipTurnRadius:r=100
weapons:t=“”
bullets0:t=“”
bullets1:t=“”
bullets2:t=“”
bullets3:t=“”
bulletsCount0:i=0
bulletsCount1:i=0
bulletsCount2:i=0
bulletsCount3:i=0
crewSkillK:r=0
applyAllMods:b=no

props{
  army:i=2
  count:i=1
  formation_type:t="rows"
  formation_div:i=3
  formation_step:p2=2.5, 2
  formation_noise:p2=0.1, 0.1
}

way{}

}

tankModels{
name:t=“E_02”
tm:m=[[0.382683, 0, -0.92388] [0, 1, 0] [0.92388, 0, 0.382683] [-8475.99, 110.934, 22439.3]]
unit_class:t=“us_ai_sam_launcher_m901”
objLayer:i=1
closed_waypoints:b=no
isShipSpline:b=no
shipTurnRadius:r=100
weapons:t=“”
bullets0:t=“”
bullets1:t=“”
bullets2:t=“”
bullets3:t=“”
bulletsCount0:i=0
bulletsCount1:i=0
bulletsCount2:i=0
bulletsCount3:i=0
crewSkillK:r=0
applyAllMods:b=no

props{
  army:i=2
  count:i=1
  formation_type:t="rows"
  formation_div:i=3
  formation_step:p2=2.5, 2
  formation_noise:p2=0.1, 0.1
}

way{}

}

tankModels{
name:t=“E_03”
tm:m=[[-0.34202, 0, 0.939693] [0, 1, 0] [-0.939693, 0, -0.34202] [-7464.2, 97.8672, 22623.7]]
unit_class:t=“us_ai_sam_radar_an_mpq_53”
objLayer:i=1
closed_waypoints:b=no
isShipSpline:b=no
shipTurnRadius:r=100
weapons:t=“”
bullets0:t=“”
bullets1:t=“”
bullets2:t=“”
bullets3:t=“”
bulletsCount0:i=0
bulletsCount1:i=0
bulletsCount2:i=0
bulletsCount3:i=0
crewSkillK:r=0
applyAllMods:b=no

props{
  army:i=2
  count:i=1
  formation_type:t="rows"
  formation_div:i=3
  formation_step:p2=2.5, 2
  formation_noise:p2=0.1, 0.1
}

way{}

}

tankModels{
name:t=“E_04”
tm:m=[[0.573577, 0, -0.819152] [0, 1, 0] [0.819152, 0, 0.573577] [-7307.72, 96.626, 22721.1]]
unit_class:t=“germ_iris_slm_launcher”
objLayer:i=1
closed_waypoints:b=no
isShipSpline:b=no
shipTurnRadius:r=100
weapons:t=“”
bullets0:t=“”
bullets1:t=“”
bullets2:t=“”
bullets3:t=“”
bulletsCount0:i=0
bulletsCount1:i=0
bulletsCount2:i=0
bulletsCount3:i=0
crewSkillK:r=0
applyAllMods:b=no

props{
  army:i=2
  count:i=1
  formation_type:t="rows"
  formation_div:i=3
  formation_step:p2=2.5, 2
  formation_noise:p2=0.1, 0.1
}

way{}

}

squad{
name:t=“SQUAD_Enemies”
tm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [-7899.77, 92.9547, 22766.2]]

props{
  squad_members:t="E_01"
  squad_members:t="E_02"
  squad_members:t="E_03"
  squad_members:t="E_04"
}

}

tankModels{
name:t=“Smerch”
tm:m=[[0.347773, 0, 0.937579] [0, 1, 0] [-0.937579, 0, 0.347773] [-7967.1, 139.109, -7676.89]]
unit_class:t=“ussr_ai_mlrs_9a52_2_smerch”
objLayer:i=1
closed_waypoints:b=no
isShipSpline:b=no
shipTurnRadius:r=100
weapons:t=“”
bullets0:t=“”
bullets1:t=“”
bullets2:t=“”
bullets3:t=“”
bulletsCount0:i=0
bulletsCount1:i=0
bulletsCount2:i=0
bulletsCount3:i=0
crewSkillK:r=0
applyAllMods:b=no

props{
  army:i=1
  count:i=1
  formation_type:t="rows"
  formation_div:i=3
  formation_step:p2=2.5, 2
  formation_noise:p2=0.1, 0.1
}

way{}

}

armada{
name:t=“Player”
tm:m=[[0.0871558, 0, 0.996195] [0, 1, 0] [-0.996195, 0, 0.0871558] [-8715.02, 536.616, -15513.3]]
unit_class:t=“su_30sm2”
objLayer:i=1
closed_waypoints:b=no
isShipSpline:b=no
shipTurnRadius:r=100
weapons:t=“su_30sm2_kh_38l”
bullets0:t=“su_x29td_x59m”
bullets1:t=“”
bullets2:t=“”
bullets3:t=“”
bulletsCount0:i=0
bulletsCount1:i=0
bulletsCount2:i=0
bulletsCount3:i=0
modification:t=“su_x29td_x59m”
modification:t=“su_25_x38ml”
modification:t=“t_220”
modification:t=“asm”
modification:t=“su_kab_gps”
crewSkillK:r=0
applyAllMods:b=no

props{
  army:i=1
  count:i=1
  free_distance:r=70
  floating_distance:r=50
  minimum_distance_to_earth:r=20
  altLimit:r=6000
  attack_type:t="fire_at_will"
  skill:i=4

  plane{
    wing_formation:t="Diamond"
    row_distances:r=3
    col_distances:r=3
    super_formation:t="Diamond"
    super_row_distances:r=1.5
    super_col_distances:r=1.5
    ai_skill:t="NORMAL"
    task:t="FLY_WAYPOINT"
  }
}

way{}

}
}

areas{
Zone_P_Spawn{
type:t=“Sphere”
tm:m=[[-84.326, 0, 640.519] [0, 646.046, 0] [-640.519, 0, -84.326] [-9047.65, 3687.1, -20751.9]]
objLayer:i=0

props{}

}
}

objLayers{
layer{
enabled:b=yes
}

layer{
enabled:b=yes
}

layer{
enabled:b=yes
}

layer{
enabled:b=yes
}
}

wayPoints{}

Почему я назвал эту механику полурабочей?

Во-первых, это работает пока только в пользовательских миссиях. Возможно, какой-то другой триггер можно использовать, чтобы выдавать целеуказание в миссиях через полигон.

Во-вторых, данная механика почему-то не работает для сквада, т.е. для каждой цели нужно делать два триггера, что жутко неудобно. Точнее, условие триггера для сквада срабатывает, но вот почему-то РСЗО не хочет атаковать цель из сквада.
У меня в планах было сделать миссию, где в одной из фаз надо найти ЗРК и выдать целеуказание на уничтожение. При этом на карте есть другие цели, поэтому надо искать и идентифицировать приоритетную цель, а не тратить время на уничтожение второстепенных целей. Пока отбой, к сожалению.

4 лайка