Rechercher
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
Partie 1
Page 1 sur 1 • Partagez
Partie 1
Hello, Je demarre une petite serie que certaine personne m'ont proposé de faire en MP c'est comment scripter sur WAW?
J'y vais à petit pas ne vous inquiètez pas
les prérequis
il vous faut absolument un autre éditeur de texte que le bloc-notes ca va vous rendre la vie plus facile particuliérement grâce aux couleurs
Personelement j'utilise notepad ++ mais on peut aussi utiliser sublime text par exemple
[Vous devez être inscrit et connecté pour voir ce lien]
une fois notepad installé et ouvert alllez sur paramètrages >>> confiurateur de coloration syntaxique >>> C++ >>> et ajoutez "gsc" à ext. utilisateur en bas
Après ça créez un .gsc qui va s'appellez" monscript.gsc"
Ajoutez y ce code:
ça il vous faut TOUJOURS le mettre dans chaque script
Cela permet d'appeler des fonctions très utiles
Chaque chose en son temps! tout d'abord sachez qu'une fonction commence par
et se termine par:
Ce qui donne:
Alors allez-y inserez ce code dans votre script en changeant le nom de la fonction en per exemple "TestScript"!
Bon c'est bien beau mais il n'y a aucun script dans cette fonction... et de plus elle n'est pas chargée!!
Pour la chargé deux méthodes:
ou:
Dans notre cas c'est la 1ére méthode! Ne me demandez pas pourquoi vous ne comprendrez pas pour l'instant!
Il faut donc mettre:
Dans nazi_zombie_???.gsc en DESSOUS de (Car ça commence par thread):
Bon on a correctement créer et appeler la fonction mais une fois de plus en jeu il n'y aura aucune différences!
Bon on va rajouter du code alors... que dites-vous de si le joueur trouve 1 object par terre un message s'affiche ??
Tout d'abord entre les crochets de la fonction rajoutez:
Voici ce que l'on appeles des variables elles servent à donner une valeur à un nom ou bien associer un nom à une entité(sur radiant)
en occurence il vous faut créer un script_model sur radiant avec comme targetname "object1" et un trigger_use avec comme targetname "object1_trig".
Mais la variable "level.object_found" qui est égal à 0 ce qui servira plus tard surtout la 2ème partie...
C'est très simple un script_model car il vous faut un model pour votre object et le misc_model ne marche pas d'où le nom: Script_model!!
Et un trigger_use car sinon vous ne pourrez pas intéragir avec le model et "use" en anglais signifie "utilisez"
puis rajoutez au script:
La 1ère ligne veut dire que l'on attend que le trigger avec pour targetname : "object1_trig" (d'où l'intérêt des variables) est en attente d'activation et une fois le trigger activé on passe à ligne d'en dessous
qui signifie que le trigger disparait de la map puis quelques millièmes de secondes plus tard(au minimum) c'est au tour du model!
Suivant ajoutez ceci:
C'est normal! c'est le début! "while" est en fait ce qu'on appelle une boucle conditionnel c'est à dire que tant que la condition est vrai entre parenthèses la boucle se répètes! là en occurences j'ai mis "1" ce qui permet à la boucle de ne jamais s'arrêter elle est infinie!
Mettez entre la boucle ce code:
Un peu compliquer?? non vraiment pas en vérité la 1ère ligne dit que "si" la variable level.object_found est égal à 0 affichez le message "1 object de trouve!"
Oh et au fait qu'est ce qu'est un commentaire c'est EXTREMEMENT simple! c'est une partie du script qui n'esst pas lu par le jeu et le launcher il servent juste d'indications ou à prendre des notes ou encore a faire des backup avec des lignes de script
Un commentaire commence toujours toujours par:
ou alors:
Code source du script en entier:
J'y vais à petit pas ne vous inquiètez pas
les prérequis
il vous faut absolument un autre éditeur de texte que le bloc-notes ca va vous rendre la vie plus facile particuliérement grâce aux couleurs
Personelement j'utilise notepad ++ mais on peut aussi utiliser sublime text par exemple
[Vous devez être inscrit et connecté pour voir ce lien]
une fois notepad installé et ouvert alllez sur paramètrages >>> confiurateur de coloration syntaxique >>> C++ >>> et ajoutez "gsc" à ext. utilisateur en bas
Après ça créez un .gsc qui va s'appellez" monscript.gsc"
Ajoutez y ce code:
- Code:
#include common_scripts\utility;
#include maps\_utility;
#include maps\_zombiemode_utility;
#include maps\_anim;
ça il vous faut TOUJOURS le mettre dans chaque script
Cela permet d'appeler des fonctions très utiles
mais... qu'est ce qu'une fonction?? et appeler c'est quoi??
Chaque chose en son temps! tout d'abord sachez qu'une fonction commence par
- Code:
NOM_DE_LA_FONCTION()
{
et se termine par:
- Code:
}
NOM_D'UNE_AUTRE_FONCTION()
Ce qui donne:
- Code:
NOM_DE_LA_FONCTION()
{
}
NOM_D'UNE_AUTRE_FONCTION()
Alors allez-y inserez ce code dans votre script en changeant le nom de la fonction en per exemple "TestScript"!
- Attention!!:
- Sachez que en C++ (le language de WAW) le script est sensible à la casse c'est à dire qu'il diférencie les miniscules et les majuscules
Bon c'est bien beau mais il n'y a aucun script dans cette fonction... et de plus elle n'est pas chargée!!
Pour la chargé deux méthodes:
- Code:
thread maps\monscript::TestScript();
ou:
- Code:
maps\monscript::TestScript();
Dans notre cas c'est la 1ére méthode! Ne me demandez pas pourquoi vous ne comprendrez pas pour l'instant!
Il faut donc mettre:
- Code:
thread maps\monscript::TestScript();
Dans nazi_zombie_???.gsc en DESSOUS de (Car ça commence par thread):
- Code:
maps\_zombiemode::main();
- Attention!!:
- "monscript" est à remplacer par le nom du script custom et TestScript par le nom de la fonction à chargée
Bon on a correctement créer et appeler la fonction mais une fois de plus en jeu il n'y aura aucune différences!
Bon on va rajouter du code alors... que dites-vous de si le joueur trouve 1 object par terre un message s'affiche ??
Tout d'abord entre les crochets de la fonction rajoutez:
- Code:
Object1_trig = getEnt("object1_trig", "targetname");
Object1 = getEnt("object1" , "targetname");
level.object_found = 0
Voici ce que l'on appeles des variables elles servent à donner une valeur à un nom ou bien associer un nom à une entité(sur radiant)
en occurence il vous faut créer un script_model sur radiant avec comme targetname "object1" et un trigger_use avec comme targetname "object1_trig".
Mais la variable "level.object_found" qui est égal à 0 ce qui servira plus tard surtout la 2ème partie...
Mais pourquoi un trigger_uses et un script_model??? comment savoir quoi créer??
C'est très simple un script_model car il vous faut un model pour votre object et le misc_model ne marche pas d'où le nom: Script_model!!
Et un trigger_use car sinon vous ne pourrez pas intéragir avec le model et "use" en anglais signifie "utilisez"
puis rajoutez au script:
- Code:
Object1_trig waittill("trigger");
Object1_trig delete();
Object1 delete();
La 1ère ligne veut dire que l'on attend que le trigger avec pour targetname : "object1_trig" (d'où l'intérêt des variables) est en attente d'activation et une fois le trigger activé on passe à ligne d'en dessous
qui signifie que le trigger disparait de la map puis quelques millièmes de secondes plus tard(au minimum) c'est au tour du model!
Suivant ajoutez ceci:
- Code:
while(1)
{
}
Gné?? moi y'en a pas comprendre!??
C'est normal! c'est le début! "while" est en fait ce qu'on appelle une boucle conditionnel c'est à dire que tant que la condition est vrai entre parenthèses la boucle se répètes! là en occurences j'ai mis "1" ce qui permet à la boucle de ne jamais s'arrêter elle est infinie!
- Attention!!:
- Notez aussi la précenses de nouveaux crochets!! tout ce qui est entre ces crochets va se répéter tant que la boucle continue!
Mettez entre la boucle ce code:
- Code:
if (level.object_found == 0)
{
iprintlnbold("1 object de trouve!");
level.object_found = 1;
break;
}
Un peu compliquer?? non vraiment pas en vérité la 1ère ligne dit que "si" la variable level.object_found est égal à 0 affichez le message "1 object de trouve!"
- oui oui je sais..:
- (oui je suis au courant de l'accent qu'il manque à trouvé mais il faut utiliser une méthode différente pour afficher les accents et autres caractères spéciaux)
Oh et au fait qu'est ce qu'est un commentaire c'est EXTREMEMENT simple! c'est une partie du script qui n'esst pas lu par le jeu et le launcher il servent juste d'indications ou à prendre des notes ou encore a faire des backup avec des lignes de script
Un commentaire commence toujours toujours par:
- Code:
// Ceci n'est pas lu par le jeu
ou alors:
- Code:
/*
Ceci n'est pas lu par le jeu!
Cette ligne nom plus!
*/
Cette ligne ci par contre est lu...
Code source du script en entier:
- Code:
#include common_scripts\utility;
#include maps\_utility;
#include maps\_zombiemode_utility;
#include maps\_anim;
TestScript()
{
Object1_trig = getEnt("object1_trig", "targetname");
Object1 = getEnt("object1" , "targetname");
level.object_found = 0
while(1)
{
if (level.object_found == 0)
{
iprintlnbold("1 object de trouve!");
level.object_found = 1;
break;
}
}
}
Dernière édition par Wolf_silver le Jeu 2 Juil - 8:58, édité 3 fois
Re: Partie 1
Vous avez bien compris?? passons aux exercices
Exercice:
1)Changer de nom de fonction et de nom de script
2)Changer le message qui apparait
3)Changer de nom de variables et de targetnames dans radiant
4) (plus compliqué) 3 objects dans la map ! et pour 1 object trouvé telle message ; pour 2 objects un autre etc...
indices:
-Utliser une fonction pour chaque object peut être une bonne chose...
-level.object_found va vous êtres utile!
-souvenez vous de "break"
Postez vos réponces ici! la solution à l'enigme va venir dans la prochaine partie....
Exercice:
1)Changer de nom de fonction et de nom de script
2)Changer le message qui apparait
3)Changer de nom de variables et de targetnames dans radiant
4) (plus compliqué) 3 objects dans la map ! et pour 1 object trouvé telle message ; pour 2 objects un autre etc...
indices:
-Utliser une fonction pour chaque object peut être une bonne chose...
-level.object_found va vous êtres utile!
-souvenez vous de "break"
Postez vos réponces ici! la solution à l'enigme va venir dans la prochaine partie....
Re: Partie 1
Pour faire un secret en plusieurs étape Est-ce que je dois break mes while a l'intérieur d'une étape?Ou simplement faire en sorte qu'une condition soit remplis pour passer a la phase suivante de l'étape?
Et aussi Est-ce que le jeu peut "sauter" un while a la condition non remplis si un autre while est remplis?
Et aussi Est-ce que le jeu peut "sauter" un while a la condition non remplis si un autre while est remplis?
Razor1700- Prestige 13
- Messages : 386
Réputation : 1
Date d'inscription : 25/04/2015
Age : 26
Localisation : Moselle
Re: Partie 1
Pour faire un secret en plusieurs étape Est-ce que je dois break mes while a l'intérieur d'une étape?
Ca depend si c'est une boucle infini ou que tu veux que la s'arrête même si la condition de la boucle est vérifié oui
Ou simplement faire en sorte qu'une condition soit remplis pour passer a la phase suivante de l'étape?
ça marche aussi mais ça dépend de ta façon de créer le script
Et aussi Est-ce que le jeu peut "sauter" un while a la condition non remplis si un autre while est remplis?
Ben oui dans le while que tu veux sauter met en condition par exemple "mavaleur est égal à 1" et dans le while qui va faire sauter l'autre while met mavaleur à la valeur 1 si le while est joué
Mais franchement je ne pense pas que ce soit forcement utile il y'a aussi deux autres type de boucles que j'expliquerai demain (doWhile() et for())
Re: Partie 1
level.object_found c'est bien juste une variable c'est pas une ligne propre au code de cod(je demande psk le . dans la variable m'intrigue)
Razor1700- Prestige 13
- Messages : 386
Réputation : 1
Date d'inscription : 25/04/2015
Age : 26
Localisation : Moselle
Re: Partie 1
alors oui et non c'est un peu difficile de te répondre...
Dis toi juste que la lègere différence ne sert que pour des commandes que tu n'utiliseras certainement jamais de ta vie!
Dis toi juste que la lègere différence ne sert que pour des commandes que tu n'utiliseras certainement jamais de ta vie!
Re: Partie 1
- Code:
#include common_scripts\utility;
#include maps\_utility;
#include maps\_zombiemode_utility;
#include maps\_anim;
Etapes_secret()
{
e1_trig = getEnt("e1_trig", "targetname");
e1 = getEnt("e1" , "targetname");
e2_trig = getEnt("e2_trig", "targetname");
e2 = getEnt("e2" , "targetname");
e3_trig = getEnt("e3_trig", "targetname");
e3 = getEnt("e3" , "targetname");
level.object_found = 0
while(1)
{
e1_trig waittill("trigger");
e1_trig delete();
e1 delete();
if (level.object_found == 0)
{
iprintlnbold("Qu'est ce que c'est que ce truc!");
level.object_found = 1;
break;
}
if (level.object_found == 1)
{
iprintlnbold("Un deuxième par là!");
level.object_found = 2;
break;
}
if (level.object_found == 2)
{
iprintlnbold("Je crois que c'est le dernier!");
level.object_found = 3;
break;
}
}
while(1)
{
e2_trig waittill("trigger");
e2_trig delete();
e2 delete();
if (level.object_found == 0)
{
iprintlnbold("Qu'est ce que c'est que ce truc!");
level.object_found = 1;
break;
}
if (level.object_found == 1)
{
iprintlnbold("Un deuxième par là!");
level.object_found = 2;
break;
}
if (level.object_found == 2)
{
iprintlnbold("Je crois que c'est le dernier!");
level.object_found = 3;
break;
}
}
while(1)
{
e3_trig waittill("trigger");
e3_trig delete();
e3 delete();
if (level.object_found == 0)
{
iprintlnbold("Qu'est ce que c'est que ce truc!");
level.object_found = 1;
break;
}
if (level.object_found == 1)
{
iprintlnbold("Un deuxième par là!");
level.object_found = 2;
break;
}
if (level.object_found == 2)
{
iprintlnbold("Je crois que c'est le dernier!");
level.object_found = 3;
break;
}
}
}
Razor1700- Prestige 13
- Messages : 386
Réputation : 1
Date d'inscription : 25/04/2015
Age : 26
Localisation : Moselle
Re: Partie 1
Je sais que ça fait barbare sans mettre une fonction par objet mais je voulais laisser toute la première étape dans la même fonction
Razor1700- Prestige 13
- Messages : 386
Réputation : 1
Date d'inscription : 25/04/2015
Age : 26
Localisation : Moselle
Re: Partie 1
Pas loin! tu aurais dù créer plus de fonction tu vas voir pourquoi! j'ai quasiment finis la partie 2 mais c'est vrai que cet exo était compliquer...
Re: Partie 1
C'est pour la suite enfait je voulais faire en sorte que lorque cette 1ere étape est fini la deuxième peut commencer
Razor1700- Prestige 13
- Messages : 386
Réputation : 1
Date d'inscription : 25/04/2015
Age : 26
Localisation : Moselle
Re: Partie 1
alors dans ce cas bravo! mais petit détail:
or tu en a mis ce qui te mettras des points à la place en jeu
il faut utiliser une méthode différente pour afficher les accents et autres caractères spéciaux)
or tu en a mis ce qui te mettras des points à la place en jeu
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|