Gaming Zone Communautes Battlefield PiTrust Communautes Mods

Plusieurs conditions pour que l'objectif soit réalisé. (COD et CODUO)
ET / OU / level.ma_variable

Retour sommaire.

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