Rechercher
 
 

Résultats par :
 


Rechercher Recherche avancée

Derniers sujets
» FR-mapping ! ouverture du site prochainement
par Wolf_silver Jeu 28 Nov - 17:19

» Nightmare prend les commandes
par Wolf_silver Mer 27 Nov - 15:49

» SITE HEBERGER FERME !
par Razor1700 Ven 25 Mai - 13:36

» problème de motivation
par Enzotoy Dim 25 Oct - 20:33

» [FR-Mapping mod]Changer soi-même son menu principale!!
par Wolf_silver Sam 24 Oct - 17:19

-40%
Le deal à ne pas rater :
Tefal Ingenio Emotion – Batterie de cuisine 10 pièces (induction, ...
59.99 € 99.99 €
Voir le deal

Partie2

Voir le sujet précédent Voir le sujet suivant Aller en bas

Partie2 Empty Partie2

Message par Wolf_silver Ven 3 Juil - 17:32

Hello nous voici à la partie 2 de l'apprentissage de comment scripter sur WAW?

Tout d'abord voici la solution à l'énigme de la partie 1:
Code:
#include common_scripts\utility;
#include maps\_utility;
#include maps\_zombiemode_utility;
#include maps\_anim;

main() // Pour l'appeler dans nazi_zombie_???.gsc : thread maps\monscript::main();
{
 level.object_found = 0;
 thread Object1();
 thread Object2();
 thread Object3();
}
Object1()
{
    Object1 = getEnt("object1", "targetname");
 Object1_trig = getEnt("object1_trig", "targetname");
 Object1_trig waittill("trigger");
 Object1_trig delete();
 Object1 delete();
 while(1)
 {
 if (level.object_found == 0)
{
 iprintlnbold("1 object de trouve!");
 level.object_found = 1;
 break;
}
 if (level.object_found == 1)
{
 iprintlnbold("Encore un autre object!");
 level.object_found = 2;
 break;
}
 if (level.object_found == 2)
{
 iprintlnbold("Un bruit etrange a retenti dans la salle...");
 level.object_found = 3;
 break;
}
}
}
Object2()
{
 Object2 = getEnt("object2", "targetname");
     Object2_trig = getEnt("object2_trig", "targetname");
 Object2_trig waittill("trigger");
 Object2_trig delete();
 Object2 delete();
 while(1)
 {
 if (level.object_found == 0)
{
 iprintlnbold("1 object de trouve!");
 level.object_found = 1;
 break;
}
 if (level.object_found == 1)
{
 iprintlnbold("Encore un autre object!");
 level.object_found = 2;
 break;
}
 if (level.object_found == 2)
{
 iprintlnbold("Un bruit etrange a retenti dans la salle...");
 level.object_found = 3;
 break;
}
}
}
Object3()
{
 Object3 = getEnt("object3", "targetname");
     Object3_trig = getEnt("object3_trig", "targetname");
 Object3_trig waittill("trigger");
 Object3_trig delete();
 Object3 delete();
 while(1)
 {
 if (level.object_found == 0)
{
 iprintlnbold("1 object de trouve!");
 level.object_found = 1;
 break;
}
 if (level.object_found == 1)
{
 iprintlnbold("Encore un autre object!");
 level.object_found = 2;
 break;
}
 if (level.object_found == 2)
{
 iprintlnbold("Un bruit etrange a retenti dans la salle...");
 level.object_found = 3;
 break;
}
}
}

La fonction main() sert à charger les autres fonctions en même temps! Voila pourquoi dans les indices je vous avais mis que vous devrez utilisez plusieurs fonctions car tout mettre dans une fonction créer un ordre pour ramasser les objects! En clair, tant que l'object 1 n'a pas été ramassé l'object 2 ne peut l'être.... et exactement pareil dans le cas où vous n'aurez créer que 3 fonctions (1 pour chaque object) et appeler les autres fonctions à la fin de la 1ère fonction!
Salaud! tu nous a menti!! tu nous a dit que while() fesait repéter tout ce qui était entre crochet!!

On se calme ! on se calme! Smile je vous ai aussi dit que "break;" "cassait" la boucle while et d'ailleurs n'importe quel autre boucle...
Hein! Il y'en à d'autre des boucles??

oui ;oui il y'en a deux autres DoWhile() et for()

DoWhile() je n'en parlerai pas car c'est franchement inutile dans waw
et for()est en fait est une boucle que l'on retrouve très frequemment!

surtout ça:
Code:
for( i = 0; i < players.size; i++ )

C'est farfaitement normal que vous ne compreniez c'est très compliqué à dechifrer sans comprendre comment marche une boucle for mais déja sachez que i++ est comme par exemple mavariable ++ ou mavariable -- qui sont en fait un calcul! Respectivement le 1er calcul est égal à mavariable + 1 et le 2nd à mavariable - 1 après il y'a aussi:
-mavariable //       Divise par 1
-mavariable ** multiplie par 1
-mavariable %% Division euclidienne par 1
-mavariable /=   7     Divise par 7
-mavariable +=  3    multiplie par 3         ....etc bref il y'en à vraiment beaucoup!
anecdote sur le nom du C++:

Du coup maintenant on va déchiffrer le contenu de la boucle:
Code:
for( i = 0; i < players.size; i++ )

Soit:
Code:
for(Déclaration de variables "i"; Si i est inférieurs à players.size; i + 1)

Donc les arguments c'est à dire les valeurs à rentrer dans une commande;fonctions...etc sont:
Code:
for(Déclaration de variables; Condition; Calcul)

Bon vous n'avez pas compris pourquoi mettre en plus de la condition une déclarations de variables et un calcul? c'est normal!

Mais maintenant si je vous dis qu'a l'instar de while() for() necessite que la condition soit vérifié pour que la boucle soit répété et à la différence de while() le calcul à gauche se fait à chaque fois que la boucle se répète!! donc en occurence ce for sert à égaler i au nombres de joueurs dans la partie !! Donc l'ordi en voyant cette ligne comprend:
-Ah d'accord! i est égal à 0
- Si i est inférieur au nombres de joueur je répéte le calcul et l'intérieur de la boucle ok!
-donc le calcul est de rajouter de 1 à i
-(dans le cas où le nombres de joueur serait 2)
-Ah bas i est inférieur à 2! je fait le calcul ok!
-merde! c'est encore le cas!! j'en ai marre moi de refaire la boucle! y'en à pas qui peux ragequit?
-Ah ca y'est i est égal au nombres de joueur je ne refait plus la boucle!

Bon voilà grossomodo ce qui se passe plus tard nous parlerons de [i] une fonction avancé de for()!

Bon vous en avez pas marre vous de voir sans arrêt des messages à l'écrans sans accent?? moi si!

Les hintstrings = Les tables de chaînes
à la place de :
Code:
iprintlnbold("Un bruit etrange a retenti dans la salle...");

Mettez par exemple:
Code:
iprintlnbold(&"ZOMBIE_???");

??? à remplacer par un ID (ce que voulez) tant que c'est c'est en majuscules et inutilisé par défaut le "ZOMBIE_" est obligatoire par  contre enfin pas vraiment bref vous verrez plus tard Wink

Ca veut dire quoi cette ligne??
ça veut dire que le jeu va chercher la phrase avec pour ID "ZOMBIE_???" et le remplacer

Comment créer un nouveau ID
Il faut ouvrir zombie.str qui se trouve dans raw/english/localized_strings et ajouter en dessous de :
Code:
CONFIG              "C:\cod5\cod\cod5\bin\StringEd.cfg"
FILENOTES           ""

et ajouter:
Code:

REFERENCE           ???
LANG_FRENCH        "Un bruit étrange a retenti dans la salle..."
vous remarquerez que je ne n'ai pas mis "ZOMBIE_???" mais "???" tout simplement qu'il ne faut pas le mettre en faite ça sert à trouver le nom du fichier .str qui possèdent l'ID! donc oui vous pouvez mettre autre chose que ZOMBIE_ (zombie.str)vous pouvez aussi mettre WEAPONS_ ???(weapons.str) ou bien encore MOD_??? mod.str seulement c'est trois fichiers sont chargées si vous voulez un autre cil faut ajouter:
Code:
localize,LE_NOM_DU_FICHIER
à mod.csv

Bon passons aux Self

Très simple! Par exemple ce code:
Code:
 
main()
{      trigger1 = getEnt("trigger1", "targetname");
      trigger1 waittill("trigger");
      trigger1 delete();
      trigger2 = getEnt("trigger2", "targetname");
      trigger2 waittill("trigger");
      trigger2 delete();
      trigger3 = getEnt("trigger3", "targetname");
      trigger3 waittill("trigger");
      trigger3 delete();
      trigger4 = getEnt("trigger4", "targetname");
      trigger4 waittill("trigger");
      trigger4 delete();
      trigger5 = getEnt("trigger5", "targetname");
      trigger5 waittill("trigger");
      trigger5 delete();
      trigger6 = getEnt("trigger6", "targetname");
      trigger6 waittill("trigger");
      trigger6 delete();
      trigger7 = getEnt("trigger7", "targetname");
      trigger7 waittill("trigger");
      trigger7 delete();
      trigger8 = getEnt("trigger8", "targetname");
      trigger8 waittill("trigger");
      trigger8 delete();
      trigger9 = getEnt("trigger9", "targetname");
      trigger9 waittill("trigger");
      trigger9 delete();
      trigger10 = getEnt("trigger10", "targetname");
      trigger10 waittill("trigger");
      trigger10 delete();
      trigger11 = getEnt("trigger11", "targetname");
      trigger11 waittill("trigger");
      trigger11 delete();
      trigger12 = getEnt("trigger12", "targetname");
      trigger12 waittill("trigger");
      trigger12 delete();
      trigger13 = getEnt("trigger13", "targetname");
      trigger13 waittill("trigger");
      trigger13 delete();
      trigger14 = getEnt("trigger14", "targetname");
      trigger14 waittill("trigger");
      trigger14 delete();
}
      

C'est un peu long hein! Maintenant on va le remplacer par ce code:
Code:
       trigger1 = getEnt("trigger1", "targetname");
      self waittill("trigger");
      self delete();
      trigger2 = getEnt("trigger2", "targetname");
      self waittill("trigger");
      self delete();
      trigger3 = getEnt("trigger3", "targetname");
      self waittill("trigger");
      self delete();
      trigger4 = getEnt("trigger4", "targetname");
      self waittill("trigger");
      self delete();
      trigger5 = getEnt("trigger5", "targetname");
      self waittill("trigger");
      self delete();
      trigger6 = getEnt("trigger6", "targetname");
      self waittill("trigger");
      self delete();
      trigger7 = getEnt("trigger7", "targetname");
      self waittill("trigger");
      self delete();
      trigger8 = getEnt("trigger8", "targetname");
      self waittill("trigger");
      self delete();
      trigger9 = getEnt("trigger9", "targetname");
      self waittill("trigger");
      self delete();
      trigger10 = getEnt("trigger10", "targetname");
      self waittill("trigger");
      self delete();
      trigger11 = getEnt("trigger11", "targetname");
      self waittill("trigger");
      self  delete();
      trigger12 = getEnt("trigger12", "targetname");
      self  waittill("trigger");
      self  delete();
      trigger13 = getEnt("trigger13", "targetname");
      self  waittill("trigger");
      self  delete();
      trigger14 = getEnt("trigger14", "targetname");
      self  waittill("trigger");
      self  delete();
      

Bon ca n'a pas tellement diminué c'est vrai... mais ça vous permet d'expliquer ce qu'est "self" c'est tout simplement un redirecteur vers la dernière variable définie par getEnt()

Maintenant regardez ce code:
Code:
       main()
      {
      trigger1 = getEnt("trigger1", "targetname");
      trigger1 Fonction15();
      trigger2 = getEnt("trigger2", "targetname");
      trigger2 Fonction15();
      trigger3 = getEnt("trigger3", "targetname");
      trigger3 Fonction15();
      trigger4 = getEnt("trigger4", "targetname");
      trigger4 Fonction15();
      trigger5 = getEnt("trigger5", "targetname");
      trigger5 Fonction15();
      trigger6 = getEnt("trigger6", "targetname");
      trigger6 Fonction15();
      trigger7 = getEnt("trigger7", "targetname");
      trigger7 Fonction15();
      trigger8 = getEnt("trigger8", "targetname");
      trigger8 Fonction15();
      trigger9 = getEnt("trigger9", "targetname");
      trigger9 Fonction15();
      trigger10 = getEnt("trigger10", "targetname");
      trigger10 Fonction15();
      trigger11 = getEnt("trigger11", "targetname");
      trigger11 Fonction15();
      trigger12 = getEnt("trigger12", "targetname");
      trigger12 Fonction15();
      trigger13 = getEnt("trigger13", "targetname");
      trigger13 Fonction15();
      trigger14 = getEnt("trigger14", "targetname");
      trigger14 Fonction15();
      }
      Fonction15()
      {
      self  waittill("trigger");
      self  delete();
      }
      

C'est déjà un petit peu plus court non?

Attention ce n'est plus :
Code:
thread Fonction15()
mais:
Code:
NOM_DE_LA_VARIABLE Fonction15();

oh et au fait! qu'est ce que [i]? souvenez-vous de la boucle for! et bien c'est tout simple...
Dans notre cas:
Code:
for( i = 0; i < players.size; i++ )

Voici à quoi pourrait servir '[i]'

Code:
main()
{
   players = get_players(); // La variable player n'est pas défini par défaut mais ne vous occupez pas de ça en cas de besoin de ce for copiez ce code pour la variable!
   for(i=0;i<players.size;i++) // le fameux code!
   {
   old_gun = player getcurrentweapon(); //sert à déterminer l'arme que porte le joueur
   players[i].free_laser = false;
if(player[i].free_laser == false) // si le joueur n'a pas déjà pris la laser
{
   Laser_trig[i] waittill("trigger"); // Le petit [i]!
        players[i] takeweapon("old_gun");
   players[i] giveweapon("ray_gun");
   players[i] switchtoweapon("ray_gun"); // ces trois commandes sont necessaires pour ne pas avoir de bug lors du changement d'arme!
   player[i].free_laser = true; // dit que le joueur à déjà pris le laser
}
   }
wait 0.1; // lors d'une boucle for à mettre après pour éviter les freezes et lag
}

Bon si vous ne comprenez pas le commandes ce n'est pas bien grave elle sont assez hardcore! il faut juste que vous compreniez le [i]

Mais à quoi sert-t-il ce [i]??
Il sert tout simplement dans ce cas là là a que soit CHAQUE joueur qui active le triger pour recevoir SON laser donc si richtofen active son trigger il reçoit le laser mais pas nikolai qui devra lui aussi le recevoir en utilisant le trigger!

Rere-grardez bien ce code:
Code:
   for(i=0;i<players.size;i++)
et particulièrement ça:
Code:
players.size

En fait c'est le nombre d'entités correspondant à la variable players! donc Object1.size serait le nombre d'entités avec pour targetname Object1

Si l'on remplace ça:
Code:
   Laser_trig[i] waittill("trigger");
        players[i] takeweapon("old_gun");
   players[i] giveweapon("ray_gun");
   players[i] switchtoweapon("ray_gun");

Par ça:
Code:
   Laser_trig waittill("trigger");
        players takeweapon("old_gun");
   players giveweapon("ray_gun");
   players switchtoweapon("ray_gun");

Là si UN joueur active le trigger TOUS les joueurs recevront le laser

Et voilà! Smile
Wolf_silver
Wolf_silver
Administrateur
Administrateur

Messages : 947
Réputation : 4
Date d'inscription : 23/04/2015
Age : 25
Localisation : Pontault-Combault, île de France

https://frmappingcod5.forumgaming.fr

Revenir en haut Aller en bas

Partie2 Empty Re: Partie2

Message par Wolf_silver Ven 3 Juil - 17:59

Les énigmes... et oui je n'avais pas oubliè... je sens l'angoisse monter.... Twisted Evil

1) Mettez des hintstring là où c'est neccessaire (à vous de juger là où ça l'est)
2)Mettre des self pour les ObjectX_trigger dans une fonction à part
3)Prenez le code source du début et en plus de reçevoir des messages; donner le laser à tous les joueurs des le 3ème object ramassé...
indices:
-un Array (le fameux [i]) vous sera utile!
-c'est en vérité d'une simplicité extrème! vous allez forcement y arriver! si vous n'y arrivez pas c'est soit que vous n'avez pas compris l'énigme ou alors que ... que ... hmm ben vous n'avez pas compris l'énigme

Franchement je pense que ça sera plus facile pour vous qu'avant...
Wolf_silver
Wolf_silver
Administrateur
Administrateur

Messages : 947
Réputation : 4
Date d'inscription : 23/04/2015
Age : 25
Localisation : Pontault-Combault, île de France

https://frmappingcod5.forumgaming.fr

Revenir en haut Aller en bas

Partie2 Empty Re: Partie2

Message par Razor1700 Ven 3 Juil - 20:33

#include common_scripts\utility;
#include maps\_utility;
#include maps\_zombiemode_utility;
#include maps\_anim;

main() // Pour l'appeler dans nazi_zombie_???.gsc : thread maps\monscript::main();
{
level.object_found = 0;
thread Object1();
thread Object2();
thread Object3();
}
Object1()
{
   Object1 = getEnt("object1", "targetname");
Object1_trig = getEnt("object1_trig", "targetname");
self waittill("trigger");
self delete();
Object1 delete();
thread  LeTexte();
}
Object2()
{
Object2 = getEnt("object2", "targetname");
Object2_trig = getEnt("object2_trig", "targetname");
self waittill("trigger");
self delete();
Object2 delete();
thread  LeTexte();
}
Object3()
{
Object3 = getEnt("object3", "targetname");
Object3_trig = getEnt("object3_trig", "targetname");
self waittill("trigger");
self delete();
Object3 delete();
thread  LeTexte();
}
LeTexte()
{
while(1)
{
if (level.object_found == 0)
{
iprintlnbold(&"ZOMBIE_DEBUT");
level.object_found = 1;
break;
}
if (level.object_found == 1)
{
iprintlnbold(&"ZOMBIE_MID");
level.object_found = 2;
break;
}
if (level.object_found == 2)
{
 iprintlnbold(&"ZOMBIE_FIN");
 level.object_found = 3;
  players = get_players();
  for(i=0;i<players.size;i++)
{
  old_gun = player getcurrentweapon();
  players[i].free_laser = false;
if(player[i].free_laser == false)
{
  players[i] takeweapon("old_gun");
  players[i] giveweapon("ray_gun");
  players[i] switchtoweapon("ray_gun");
iprintlnbold("Recevez l'arme suprême(ou pas)!");
  player[i].free_laser = true;
}
  }
wait 0.1;
}
break;
}
}


}
//J'ai ajouter a zombie.str:
//REFERENCE          FIN
//LANG_FRENCH        "Un bruit étrange a retenti dans la salle..."
//REFERENCE          DEBUT
//LANG_FRENCH        "1 object de trouve!"
//REFERENCE          MID
//LANG_FRENCH        "Encore un autre object!"


Dernière édition par Razor1700 le Ven 3 Juil - 23:29, édité 3 fois
Razor1700
Razor1700
Prestige 13
Prestige 13

Messages : 386
Réputation : 1
Date d'inscription : 25/04/2015
Age : 26
Localisation : Moselle

Revenir en haut Aller en bas

Partie2 Empty Re: Partie2

Message par Wolf_silver Ven 3 Juil - 20:41

??
si vous n'y arrivez pas c'est soit que vous n'avez pas compris l'énigme ou alors que ... que ... hmm ben vous n'avez pas compris l'énigme
C'est exactement ton cas! lol!
Il ne faut pas un trig à part! il faut que une fois les 3 object trouvé ; tu as un message qui apparait et directement sans rien faire d'autre le laser! Mais si tu voulais un trig à part c'est vrai en revanche

En plus tu n'as pas fait les "self" en plus je sait que tu savais déjà en faire!
Wolf_silver
Wolf_silver
Administrateur
Administrateur

Messages : 947
Réputation : 4
Date d'inscription : 23/04/2015
Age : 25
Localisation : Pontault-Combault, île de France

https://frmappingcod5.forumgaming.fr

Revenir en haut Aller en bas

Partie2 Empty Re: Partie2

Message par Razor1700 Ven 3 Juil - 20:48

C'est mieux comme ça
Razor1700
Razor1700
Prestige 13
Prestige 13

Messages : 386
Réputation : 1
Date d'inscription : 25/04/2015
Age : 26
Localisation : Moselle

Revenir en haut Aller en bas

Partie2 Empty Re: Partie2

Message par Wolf_silver Ven 3 Juil - 20:54

euh oui si tu veux mais c'était du coup un peux faux ^^
Wolf_silver
Wolf_silver
Administrateur
Administrateur

Messages : 947
Réputation : 4
Date d'inscription : 23/04/2015
Age : 25
Localisation : Pontault-Combault, île de France

https://frmappingcod5.forumgaming.fr

Revenir en haut Aller en bas

Partie2 Empty Re: Partie2

Message par Razor1700 Ven 3 Juil - 22:08

Nan mais je demander ^^J'ai modif mon message entre temps
Razor1700
Razor1700
Prestige 13
Prestige 13

Messages : 386
Réputation : 1
Date d'inscription : 25/04/2015
Age : 26
Localisation : Moselle

Revenir en haut Aller en bas

Partie2 Empty Re: Partie2

Message par Wolf_silver Ven 3 Juil - 22:59

Code:
Object3_trig  LeTexte();

?? ca sert à rien çà laisse en thread il n'y a aucun self dans "LeTexte()" Wink
Wolf_silver
Wolf_silver
Administrateur
Administrateur

Messages : 947
Réputation : 4
Date d'inscription : 23/04/2015
Age : 25
Localisation : Pontault-Combault, île de France

https://frmappingcod5.forumgaming.fr

Revenir en haut Aller en bas

Partie2 Empty Re: Partie2

Message par Razor1700 Ven 10 Juil - 1:38

Comment on fait attendre des dégat de grenade Et de claymore a un trigger damage
Razor1700
Razor1700
Prestige 13
Prestige 13

Messages : 386
Réputation : 1
Date d'inscription : 25/04/2015
Age : 26
Localisation : Moselle

Revenir en haut Aller en bas

Partie2 Empty Re: Partie2

Message par Wolf_silver Ven 10 Juil - 16:26

faut cochez je sais plus quoi dans la fenetre dees kvp du trigger_damage
Wolf_silver
Wolf_silver
Administrateur
Administrateur

Messages : 947
Réputation : 4
Date d'inscription : 23/04/2015
Age : 25
Localisation : Pontault-Combault, île de France

https://frmappingcod5.forumgaming.fr

Revenir en haut Aller en bas

Partie2 Empty Re: Partie2

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum