Il
est apparu que contrôler les unités qui viennent
de spawner était impossible. Je vous présente ici
une technique qui permet de le faire. Ce n'est pas la technique
par excellence mais elle permet malgré quelques inconvénients
de contrôler les AI.
1/
MAPPING
Sur
la map test vous trouverez :
- une AI qui est déjà présente sur la map
au depart ("actor_axis_snow_wehrmacht_nco_mp40")
- 2 AI ("actor_axis_fallschirmjager_soldiergrey_kar98k")
qui spawnent lorsque l'on active le trigger 1 (ne pas oublier
de cocher la case "SPAWNER").
- 2 AI ("actor_axis_kriegsmarine_soldier_mp40")
qui spawnent lorsque l'on active le trigger 2 (ne pas oublier
de cocher la case "SPAWNER").

Vue de la map
dans radiant.
Si vous ne vous êtes pas encore familiarisé avec
les spawns voici un autre tuto.
2/
SCRIPTING
Voici
le script.
main()
{
maps\_load::main();
//GIVE
PLAYER WEAPONS
level.player takeallweapons();
level.player giveWeapon("panzerfaust");
level.player giveWeapon("thompson");
level.player giveWeapon("colt");
level.player giveWeapon("fraggrenade");
level.player switchToWeapon("thompson");
thread
objectif1();
thread objectif2();
thread objectifs();
}
/////////Definition
des objectifs//////////////////////
objectifs()
{
objective_add(1,"active",&"LES_SPAWNS_3_OBJ1");
objective_add(2,"active",&"LES_SPAWNS_3_OBJ2");
objective_current(1,2);
}
////////Tuer plusieurs allemands.///////////////////////
objectif1()
{
trig = getent ("dos_trigg","targetname");
trig waittill("trigger");
iprintlnbold("trig_1");
dos = getaiarray("axis");
for (i=0; i<dos.size; i++)
if (isalive(dos[i]))
{
dos[i] waittill("death");
}
objective_state(1,"done");
}
/////Tuer
les marins/////////
objectif2()
{
trig_ma = getent ("marins_trig","targetname");
trig_ma waittill("trigger");
iprintlnbold("trig_2");
marin = getentarray("actor_axis_kriegsmarine_soldier_mp40","classname");
for (i=0; i<marin.size; i++)
if (isalive(marin[i]))
{
marin[i] waittill("death");
}
objective_state(2,"done");
}
Explications.
main()
{
maps\_load::main();
//GIVE
PLAYER WEAPONS
level.player takeallweapons();
level.player giveWeapon("panzerfaust");
level.player giveWeapon("thompson");
level.player giveWeapon("colt");
level.player giveWeapon("fraggrenade");
level.player switchToWeapon("thompson");
thread
objectif1();
thread objectif2();
thread objectifs();
}
/////////Definition
des objectifs//////////////////////
objectifs()
{
objective_add(1,"active",&"LES_SPAWNS_3_OBJ1");
objective_add(2,"active",&"LES_SPAWNS_3_OBJ2");
objective_current(1,2);//permet d'avoir
les 2 objectifs activés (touche TAB).
}
////////Tuer plusieurs allemands.///////////////////////
objectif1()
{
trig = getent ("dos_trigg","targetname");//définition
du trigger 1
trig waittill("trigger");//on
attend l'activation du trigger pour à la fois faire spawner
les 2 AI mais aussi pour continuer le script.
iprintlnbold("trig_1");//permet
de voir si on a activé le trigger
dos = getaiarray("axis");//une
fois spawnées, on récupère les AI dans un
tableau selon leur équipe.
ensuite on gére l'objectif comme on l'a fait dans l'autre
tuto. (tuto
"for")
for (i=0; i<dos.size; i++)
if (isalive(dos[i]))
{
dos[i] waittill("death");
}
objective_state(1,"done");
}
/////Tuer
les marins/////////
objectif2()
{
trig_ma = getent ("marins_trig","targetname");//définition
du trigger 2
trig_ma waittill("trigger");//on
attend l'activation du trigger pour à la fois faire spawner
les 2 marins mais aussi pour continuer le script.
iprintlnbold("trig_2");//permet
de voir si on a activé le trigger
marin = getentarray("actor_axis_kriegsmarine_soldier_mp40","classname");//une
fois spawnés, on récupère les marins dans
un tableau cette fois-ci selon leur "classname". Eensuite
on gére l'objectif comme on l'a fait dans l'autre thread.
for (i=0; i<marin.size; i++)
if (isalive(marin[i]))
{
marin[i] waittill("death");
}
objective_state(2,"done");
}
Technique
de l'objectif 1
Voici,
c'est tout simple. mais il existe un inconvenient. Lorsque vous
récupérez les AI "Axes",
vous récupérez non seulement les AI qui viennent
de spawner , mais aussi celles présentent sur la map qu'elles
soient impliquées dans votre objectif ou non.
Technique
de l'objectif 2
Ici
on a affiné la sélection puisqu'on ne sélectionne
que les AI avec comme "classname"
"actor_axis_kriegsmarine_soldier_mp40", mais
il existe toujours le même inconvenient. Lorsque vous récupérez
les AI selon leur "classname" vous récupérez
non seulement les AI qui viennent de spawner , mais aussi
celles présentent sur la map (ayant la même "classname")
qu'elles soient impliquées dans votre objectif ou non.
3/
EN JEU.
Cas
1.
Promenez-vous sur la map pour tuer le soldat en blanc (snow).
Puis activez le trigger et ensuite le trigger 2.
Pour réaliser l'objectif 1 vous devrez tuer les 2 AI spawnées.
Pour réaliser l'objectif 2 vous devrez tuer les 2 marins
spawnés.
Cas
2.
Trigger 1 activé avant le trigger 2 sans tuer l'axe snow
avant.
Pour réaliser l'objectif 1 vous devrez tuer 3 AI : les
2 AI spawnées plus l'AI déjà présente
sur la map au start l'axe (snow).
Pour réaliser l'objectif 2 vous devrez tuer les 2 marins
spawnés.
Cas
3.
Trigger 2 activé avant le trigger 1 sans tuer l'axe snow.
Pour réaliser l'objectif 1 vous devrez tuer 5 AI : les
2 marins spawnés, l'AI déjà présente
sur la map au start l'axe (snow), puis les 2 autres AI que l'on
fait spawnées. Du coup il y a 5 AI présentes sur
la map lorsque l'on met les AI AXE en tableau.
Pour réaliser l'objectif 2 vous devrez tuer les 2 marins
spawnés.
Dans ce cas, les 2 objectifs se réalisent en même
temps.
Voila j'espère que cela pourra vous servir je continue
à affiner la sélection car il est possible de le
faire je crois.
Téléchargez
l'exemple. (uniquement pour CODUO)
Suite
: Contrôler finement les
AI qui spawnent.