Plusieurs conditions pour
que l'objectif soit réalisé. (COD et CODUO)
ET / OU / level.ma_variable
Tutorial créer par Tropheus.
Dans ce tutorial vous allez apprendre à utiliser plusieurs choses :les variables "level.ma_variable", les opérateurs mathématiques ET et OU ainsi que égal et différents. Beaucoup de chose en perspective, mais vous verrez très simples à utiliser.
1/ MAPPING
Ici rien de plus simple, une pièce avec 2 soldats axes dont les targetnames sont respectivement soldat1 et soldat2.
2/ SCRIPTING
a) les variables "level.ma_variable"
Jusqu'alors on avait défini nos variables de la façon suivante :
mon_ami = getent("mon_ami","targtename");
Mais cette façon de faire n'est valable que si on utilise la variable dans
le thread où elle est définie.
Ici nous avons besoin de cette variable sur 2 threads différents.
(en plus sur le second on regarde si notre soldat est mort
et il est impossible de définir comme variable un soldat mort
sous peine de plantage scriptal).
Ainsi pour pouvoir uitliser une varaible sur plusieurs threads (sans être obliger de la définir plusieurs fois) on la définit de la façon suivante : on écrit devant la variable à définir "level." (ne pas oublier le point).
level.mon_ami = getent("mon_ami","targetname");
Ainsi on pourra utiliser cette variable partout dans le script sans pour autant la redéfinir à chaque fois.
b) condition 1 ET condition 2.
Ici la condition pour que l'objectif soit réalisé sera de tuer les 2 soldats axes.
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.soldat1=getent("soldat1","targetname");
level.soldat2=getent("soldat2","targetname");
level.soldat1 thread objectif();
level.soldat2 thread objectif();
}
////////Tuer les soldats///////////////////////
objectif()
{
self
waittill("death");
thread compile();
}
compile()
{
cond1=!isalive(level.soldat1);
cond2=!isalive(level.soldat2);
if((cond1==true) && (cond2==true))
missionsuccess("test_et",true);
}
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");
level.soldat1=getent("soldat1","targetname");//définition
de la variable level.soldat1
level.soldat2=getent("soldat2","targetname");//définition
de la variable level.soldat2
level.soldat1
thread objectif();//envoi vers le thread "objectif"
level.soldat2 thread objectif();//envoi vers le thread "objectif"
//Ici le fait que ce soit la variable qui envoie vers le thread
cela nous permet d'utilser la variable "self" dans le thread
objectif.
}
////////Tuer les soldats///////////////////////
objectif()
{
self
waittill("death");//les soldats (1 ou 2) attendent de mourir.
thread compile();//une fois mort on envoie vers le test
de condition (le thread
compile)
}
/////////Test
des conditions////////////
compile()
{
cond1=!isalive(level.soldat1);//définition de la condition 1 (cond1 = le soldat1
est mort)
cond2=!isalive(level.soldat2);//définition de
la condition 2 (cond2 = le soldat2 est mort)
if((cond1==true) && (cond2==true))//test de condition (si cond1 est
vraie et cond2 est vraie on continue sinon on attend)
missionsuccess("test_et",true);//les 2 conditions sont remplies
on induit la fin de la map.
}
c) condition 1 OU condition 2.
Ici pour que l'objectif soit rempli il ne faudra tuer qu'un seul des soldats
(soit le 1 ssoit le 2 peu importe).
Je ne vous remets
pas le script en entier car seule l'avant dernière ligne change.
if((cond1==true) || (cond2==true))
ce qui revient à dire si la condition 1 est vraie ou la condition 2 est vraie alors on passe à la ligne suivante.
NB pour obtenir les | il faut appuyer sur les touches "Alt GR" + "6"
d) égal et différent.
Vous avez surement remarqué
que on avait uitliser le signe "égal" de
2 façons diférentes dans le script.
cond1=!isalive(soldat1)); et cond1
== true;
Dans le premir cas un seul signe "égal" car ici on attribue une
valeur à une variable
Dans le second cas 2 signes "égal" car ici on vérifie une
variable.
On utilise 2 signes
"égal" (==)
en opposition à l'expression "différent"
qui s'écrit comme ceci != , mais aussi à plus petit ou égal (<=),
plus grand ou égal (>=).
Voila de quoi mettre un
peu de piment dans vos maps.
Bon mapping et bon scripting.
Téléchargez les maps modeles pour CODUO seulement.
Dézipper le pk3 dans le
repertoire UO et les fichiers .bat dans le
répertoire call of duty.
Tropheus
Pour CaskAmiProd
et MohaaScriptLib
by Tropheus©
juillet 2005