Dans ce tutorial
vous allez apprendre à contrôler les entités
une fois qu'elles ont spawnées. Mais cette fois-ci contrairement
à l'autre tutorial vous pourrez
les controler grâce à leur targetname. C'est à
dire quelque soit leur équipe, leur classname ...
1/ MAPPING.
Sur la map
proposée, vous trouverez :
- le spawn d'une seule entité (Trigger (fin_trigg)
entourant le Numéro 1). (Targetname
/ fin)
- le spawn de 3 unités (Trigger (ens_trigg)
entourant le Numéro 2). (Targetname
/ ensemble)
Ces entités
après leur spawn se retrouveront "pacifiques"
et ce dirigeront vers leur "node".
De plus les 3 Ai seront mises en tableau et leur mort constituera
un objectif.
N'oubliez
pas de cocher la case spawner.
2/ SCRIPTING.
a/ Fichier
.gsc
//Tutorial
cree par Tropheus.
// Tutorial created by Tropheus.
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");
level.spawn_ens_array = getentarray("ensemble" , "targetname");
level.count=level.spawn_ens_array.size;
thread cont_spawn_seul();
thread cont_spawn_groupe();
thread compteur();
}
/////Controler
seulement une entite apres son spawn.////////////
cont_spawn_seul()
{
level.spawner = getent("fin","targetname");
trig = getent ("fin_trigg","targetname");
trig waittill("trigger");
level.spawner = level.spawner dospawn();
level.spawner.pacifist=1;
node = getnode(level.spawner.target ,"targetname");
level.spawner setgoalnode (node);
}
///////////Controler plusieurs entites apres leur spawn.//////////
cont_spawn_groupe()
{
trig=getent("ens_trigg","targetname");
trig waittill("trigger");
thread obj();
for(i=0;i<level.spawn_ens_array.size;i++)//
{
level.spawn_ens_array[i]
= level.spawn_ens_array[i] dospawn();
level.spawn_ens_array[i].pacifist
= 1;
level.spawn_ens_array[i]
thread bot();
node = getnode(level.spawn_ens_array[i].target
,"targetname");
level.spawn_ens_array[i]
setgoalnode (node);
}
}
/////////////////////////////////////////////////
///////////Définition de l'objectif !////////////
/////////////////////////////////////////////////
obj()
{
objective_add(1,"active",&"CONT_SPAWN_OBJ1");
objective_string(1, &"CONT_SPAWN_OBJ1",
level.count);
objective_current(1);
}
//////////////////////////////////////////////////////////////////////////
///////////Décrémentation du compteur en fct de
la mort des AI////////////
//////////////////////////////////////////////////////////////////////////
bot()
{
self waittill("death");
level.count--;
level notify("update_objective_1");
}
//////////////////////////////////////////////////////////////////////////
////////////Compteur // Affichage // Statut de l'objectif/////////////////
//////////////////////////////////////////////////////////////////////////
compteur()
{
while(level.count>0)
{
level waittill("update_objective_1");
objective_string(1, &"CONT_SPAWN_OBJ1",
level.count);
}
objective_state(1,"done");
objective_string(1,&"CONT_SPAWN_OBJ1_FINI");
}
Explications.
//Tutorial
cree par Tropheus.//moi l'auteur.
// Tutorial created by Tropheus.//le même
mais en anglais.
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");
level.spawn_ens_array = getentarray("ensemble" , "targetname");//mise
en tableau des entités à spawner.
C'est à dire qu'on met en tableau les spawners.
level.count=level.spawn_ens_array.size;//définition
de la valeur du compteur.(cf
tuto)
thread cont_spawn_seul();//envoi vers le
spawn simple.
thread cont_spawn_groupe();//envoi
vers le spawn de groupe.
thread compteur();//envoi vers
l'affichage et l'update de celui-ci.
}
/////Controler
seulement une entite apres son spawn.
cont_spawn_seul()
{
level.spawner = getent("fin","targetname");//definition
de l'entité.
trig = getent ("fin_trigg","targetname");//definition
du trigger.
trig waittill("trigger");//trigger
attend l'activation.
level.spawner = level.spawner dospawn();//définition
de l'entité spawnée.
level.spawner.pacifist=1;//elle
devient pacifiste
node = getnode(level.spawner.target ,"targetname");//définition
du noeud de destination.
level.spawner setgoalnode (node);//déplacement
vers le node.
}
///////////Controler plusieurs entites apres
leur spawn.
cont_spawn_groupe()
{
trig=getent("ens_trigg","targetname");//definition
du trigger.
trig waittill("trigger");//trigger
attend l'activation.
thread obj();//envoi
vers le thread "obj".
A mettre ici car si on le met dès le début,
l'objectif s'affiche alors qu'aucun axe n'est présent
sur la map.
for(i=0;i<level.spawn_ens_array.size;i++)//boucle
"for" pour le spawn de l'entité et ses caractéristiques.
{
level.spawn_ens_array[i]
= level.spawn_ens_array[i] dospawn();//définition
de l'entité spawnée.
level.spawn_ens_array[i].pacifist
= 1;//elle devient pacifiste
level.spawn_ens_array[i]
thread bot();//envoi vers le thread "bot".
node = getnode(level.spawn_ens_array[i].target
,"targetname");//définition
du noeud de destination.
level.spawn_ens_array[i]
setgoalnode (node);//déplacement
vers le node.
}
}
/////////////////////////////////////////////////
///////////Définition de l'objectif.
/////////////////////////////////////////////////
obj()
{
objective_add(1,"active",&"CONT_SPAWN_OBJ1");
objective_string(1, &"CONT_SPAWN_OBJ1",
level.count);
objective_current(1);
}
//////////////////////////////////////////////////////////////////////////
///////////Décrémentation du compteur en fct de
la mort des AI.
//////////////////////////////////////////////////////////////////////////
bot()
{
self waittill("death"); //on
attend que l'entité meure
level.count--;//decrémentation
de la valeur du compteur
level notify("update_objective_1");//mise
à jour de l'objectif.
}
//////////////////////////////////////////////////////////////////////////
////////////Compteur // Affichage // Statut de l'objectif.
//////////////////////////////////////////////////////////////////////////
compteur()
{
while(level.count>0)//tant
que la valeur de level.count est supérieure à 0
{
level waittill("update_objective_1");//on
attend que l'objectif soit mis à jour
objective_string(1, &"CONT_SPAWN_OBJ1",
level.count);//texte à afficher.
}
//si level.count<0 alors lecture de ces 2 lignes.
objective_state(1,"done");//objectif
accompli
objective_string(1,&"CONT_SPAWN_OBJ1_FINI");//affichage
du texte.
}
b/
Fichier .str
REFERENCE
OBJ1
LANG_FRENCH "Il reste encore %s Allemands à
tuer."
REFERENCE
OBJ1_FINI
LANG_FRENCH "Vous avez tué tous les Allemands."
ENDMARKER
Voila j'espère
que cela vous aidera.
Bye
Télécharger
le pk3 de test (pour CODUO seulement)