Scripts : Partie E
Dans cette partie, nous vous proposons différents types de scripts avancés.
Voici un script d'accrochage, par Stimo
Accrochage des canons
Il est en deux parties :
- un bout de script dans le trigger principal, qui indique qui accrocher à quoi :
// ACCROCHAGES
Set @numero = 0 // Pas toucher. Sert à identifier les TriggerInstance
// accrochage des canons aux tracteurs
Add ( @numero , 1 ) // Pas toucher : incrémentation automatique des TriggerInstance
Set @armee = 2 // Le n° d'armée du canon et du tracteur
Set @groupe_tracteur = "Ger_Tracteur_1" // le nom de groupe du tracteur
Set @groupe_canon = "Ger_Pak_1" // Le nom de groupe du canon
Set @groupe_equipage = "Main_1" // Le nom du groupe de l'équipage du canon
RunTriggerInstance ( "accrochage" , @numero , @armee , @groupe_tracteur , @groupe_canon , @groupe_equipage )
Petite pause pour expliquer ça, parce que c'est pas ce qu'il y a de plus facile à comprendre dans les scripts ToWesques :
La fonction RunTriggerInstance va lancer un trigger indépendant et unique qui porte un nom (ici accrochage) et un numéro (ici, celui qui est contenu dans la variable @numéro, en l'occurence 1).
L'accrochage du premier canon sera donc géré par un trigger créé pour l'occasion et qui sera nommé accrochage1.
Le script des TriggerInstances est celui du modèle accrochage donné plus bas.
Ensuite, viennent les noms des variables dont a besoin le TriggerInstance : armee concernée, tracteur, canon, servants.
Delay ( 5000 ) // On lui laisse un peu de temps pour démarrer son accrochage avant d'ordonner celui de son voisin.
On peut ajouter autant de ces blocs que l'on veut...
Add ( @numero , 1 )
Set @armee = 2
Set @groupe_tracteur = "Ger_Tracteur_2"
Set @groupe_canon = "Ger_Pak_2"
Set @groupe_equipage = "Main_3"
RunTriggerInstance ( "accrochage" , @numero , @armee , @groupe_tracteur , @groupe_canon , @groupe_equipage )
Le second canon sera accroché par le trigger accrochage2 et ainsi de suite.
Delay ( 5000 )
(ad lib...)
- un trigger unique et indépendant qui sert de base à un TriggerInstance par accrochage.
Ce trigger est nommé accrochage
Param In @armee // transfert des noms de groupes au TriggerInstance
Param In @groupe_tracteur
Param In @groupe_canon
Param In @groupe_equipage
SetWorkArmy ( Army , @armee )
Set @unite_tracteur = GetUnitID ( Group , @groupe_tracteur , 1 ) // Récupération du numéro d'unité du tracteur
Set @unite_canon = GetUnitID ( Group , @groupe_canon , 1 ) // Récupération du numéro d'unité du canon
Ces numéros d'unités sont indispensables à la commande ATTACH car seule une UNIT peut être prise en remorque.
Label accrochage
RunCommand ( Unit , @unite_tracteur , Attach , Unit , @unite_canon ) // Ordre d'accrochage
Delay ( 5000 )
Set @ordre = GetCurrentCommand ( Unit , @unite_tracteur ) // On demande au tracteur quel est l'ordre qu'il suit à cet instant...
Tant que le canon n'est pas accroché, le camion a un ordre ATTACH. Lorsque le canon est accroché, le camion passe automatiquement en mode DEFEND.
On interroge donc le tracteur pour détecter quand l'accrochage est terminé.
if ( @ordre = "ATTACH" ) Then //Tant que le camion est en mode ATTACH...
GoTo accrochage // ... on lui répète son ordre d'accrochage...
Endif
// ... on n'arrive donc ici que lorsque le canon est accroché et que le camion est passé en mode DEFEND
Label embarquement // On va faire embarquer les servants du canon dans le tracteur.
On utilise le fait que dans ToW, les humains qui sont membres d'un groupe ne font plus partie de leur groupe lorsqu'ils embarquent dans un véhicule.
Ils seront à nouveau comptés dans leur groupe lorsqu'ils débarqueront.
RunCommand ( Group , @groupe_equipage , In_Crew , Unit , @unite_tracteur ) // On ordonne au groupe de servants (qui ne contient plus que ceux qui n'ont pas encore embarqués) de monter à bord du tracteur
Delay ( 10000 ) // On leur en laisse le temps
Set @dehors = GetNUnits ( Group , @groupe_equipage , Human ) // On compte les servants du canon qui n'ont pas encore embarqué
If ( @dehors > 0 ) Then // Tant qu'il reste des servants dehors...
Goto embarquement // ... on leur répète l'ordre d'embarquer
Endif
On n'arrive ici que si tous les servants ont embarqués
Halt
Notez que ce script fonctionne même sous le feu et si des servants sont tués pendant l'opération.
La répétition systématique des ordres permet d'éviter que les soldats gérés par l'IA ne suivent leur fâcheux penchant à monter au feu plutôt qu'à suivre l'ordre qu'on leur a donné.