Worms 4 Tweaking
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Worms 4 Tweaking

Le tweaking ou comment créer ses armes au delà de l'usine d'armes
 
AccueilPortailRechercherDernières imagesS'enregistrerConnexion
Le deal à ne pas rater :
Display Star Wars Unlimited Ombres de la Galaxie : où l’acheter ?
Voir le deal

 

 [Débuter en Lua] Le Wormpot

Aller en bas 
4 participants
AuteurMessage
Easytwk
Graphiste du Forum
Easytwk


Nombre de messages : 924
Age : 30
Localisation : Zoll
Date d'inscription : 31/10/2007

[Débuter en Lua] Le Wormpot Empty
MessageSujet: [Débuter en Lua] Le Wormpot   [Débuter en Lua] Le Wormpot EmptyMar 30 Juin 2009, 23:28

Bonjour,

Me voilà de retour avec un tout nouveau tutorial consacrer au modification du Wormpot (je ne sais pas si je devais le metre ici, je n'ai trouvé aucun autre endroit Very Happy).
Dans ce tutorial, nous allons apprendre à :

  • Modifier un dès choix du Wormpot,
  • Effectuer des actions sur l'inventaire des équipes en jeu,
  • Effectuer des actions sur le tweak.xml (Vitesse des worms, Jetpack...) ou sur le WeapTwk.xml (propriétés des armes...),
  • Effectuer des actions sur les noms ou les habits des worms,
  • Débuter dans le codage du Lua.
Bon alors commençons :

I. Débuter le Lua :

Je sais que ce n'est pas la partie la plus amusante mais il faut connaitre un peu de code avant de se lancer dans les modification.

Pour commencer, vous devez savoir que le Lua est un codage qui
ressemble beaucoup aux autre, si vous connaissez déjà le C, le C++,
l'actionscript ou même le python, vous aurrez moins de mal à comprendre
le Lua car beaucoup de fonctions se ressemblent.

1. Les Variables :

Déjà, les variables, ce sont les bases nécéssaire pour modifier les fonctions du wormpot.

[ i ] Les variables sont des valeur (nombres ou mots) qui sont assignées à des mots ou à des lettres.

Ils en existes plusieur types mais pour ce qui nous intéresses, je vais en regrouper certaines :

Il y a les variables numériques :
Code:
Vari = 12
Comme son nom l'indique, cette variable sert à contenir des nombres.

Il y a les variables textuels appellés aussi strings :
Code:
Vari = "mon texte"
Cette variable permet de mémoriser du texte.

Il y a les Booléans :
Code:
Vari = true
Les booléans peuvent contenir 2 valeur : true ou false qui correspondent en français à Vrai ou Faux.

Voilà pour ce qui est les variables, vous n'aurrez besoin de rien d'autre les concérnant pour le Wormpot.

2. Les Conditions :

Les conditions sont les moyens d'éffectuer des actions en fonction d'autres actions.

Il y a la condition if ... then ... end :
Code:
if Vari == 5 then
    Option = true
end
On peut voir que la fonction s'étend sur plusieur lignes. Pour traduire cette fonction, on peut dire que "Si Vari est strictement égale à 5, la valeur de Option sera true." Je pense que celà est facilement compréensible.

[ i ] on voit qu'il y a 2 = entre Vari et 5, c'est pour définir que les 2 = soit reconnu en tant qu'opérateur et non qu'il servent à définir une valeur a Vari. Il en existe plusieur :
Code:
Vari == 5  :  Vari est strictement égale à 5
Vari > 5  :  Vari est strictement supérieur à 5
Vari >= 5  :  Vari est supérieur ou égale à 5
Vari < 5  :  Vari est strictement inférieur à 5
Vari <= 5  :  Vari est inférieur ou égale à 5
Vari ~= 5  :    Vari est différent de 5

Il y a la condition else et else if :
Code:
if Vari == 5 then
    Option = true
else if Option == false then
    Vari = 0;
else
    Vari = -1
end
On devine facilement : else = sinon, autrement dit Si la première condition (Vari == 5) n'est pas respecté, on regarde si la deuxième (Option == false) est respecté et si elle ne l'est pas, on assigne -1 à Vari.

3. Les Boucles :

Cette partie est moins importante si vous ne voulez modifier que le Wormpot mais elle peut-être utile pour les autres script.

Les boucles sont les fonction qui permettent de répéter une action plusieur fois :
Code:
while Vari != 5 do
    Vari = Vari + 1
end
Signifi "Tant que Vari n'est pas égale à 5, Vari sera égale à Vari + 1 (il augmentera de 1 à chaque fois que la boucle recommencera)." Je resterais assez bref sur cette partie car elle n'est pas spécialement nécéssaire.

II. Votre 1er slot :

Le but de cette première partie de modification sera créer un slot Moonwalk (les worms marcheront à l'envers Very Happy).

1. Introduction :

Pour commencer, entrez dans le dossier script du dossier data de worms 4 et ouvrez le fichier Wormpot.lua.

[ i ] Vous pouvez déjà remarquer que la plupart des fonction présenté avant sont visible.

2. Décryptage :

Allez jusqu'aux lignes
Code:
   if Wormpot.DoubleDamage == true then
      SetData("DoubleDamage",1)
   end
Ici, il y a des fonction que l'on connait et d'autre que l'on connait moins pour le moment Very Happy.

if Wormpot.DoubleDamage == true then
...
end

Là, on reconnait tout Very Happy : le if ... then ... end, on voit aussi un Booléan Wormpot.DoubleDamage qu'on peut déduire comme l'activité du slot Dégat Doublé.

SetData("DoubleDamage",1)
Ici, on reconnait moins, on peut pensé à une fonction mais pas sùr.

DoubleDamage est en faite une variable externe du fichier lua, elle se trouve dans un autre fichier qui n'est pas lua et la différence avec une variable normale, c'est que l'on ne peut pas la définir en "DoubleDamage = 1", mais on doit la définir en mettant SetData("DoubleDamage",1).

[ i ] Grace à cette technique, vous pouvez modifier toutes les variables du tweak.xml par le WormPot.

3. Création du Solt :

Nous y voilà donc, la création de votre premier slot en homage au "roi de la pop" récement décédé : le mod Moonwalk Worms.

[ i ] A SAVOIR : vous connaissez certainement la variable de tweak.xml, "Worm.Walk.Speed" Elle défini à la base la vitesse des worms, mais ici le but va être de la rendre négative de façon à faire reculer le worms.

Rendu à ce point, vous avez toutes les cartes en mains pour pouvoir créer votre slot Moonwalk (Attention, par "créer" j'entend bien "remplacer un slot éxistant", il est malheureusement impossible d'ajouté un nouveau slot à l'heure actuelle), Je vous laisse donc faire votre slot avant de passer à la correction Wink...

DRIIIING !!! Je ramasse les copie Razz, Alors voyont la correction sans plus attendre :
Spoiler:

J'éspère que cette partie vous aura été utile et que vos pack de wormpot vont bientôt voir le jour Very Happy.


III. Création d'un "Slot avancé" :

Le but de cette partie est de savoir créer un slot avancé se nommant "Armes sans gravité" Wink.

1. Introduction :

Avant de commencer, je vais vous éxpliquer plus en détails ce que nous allons faire.

Je suppose que vous vous êtes déjà poser la question "Worms 4 fonctionne avec du xml et du lua, pourquoi Team17 n'a pas utilisé un seul codage à la place des 2 ?" Eh bien c'est tout simplement parceque ces 2 codages ont des fonctions très différentes :

Le xml est en faite un grand regroupement de variables (bah oui, quand vous tweaker, vous changer ces valeurs de façon à ce que le jeu éfféctue une autre action en lisant ce fichier), il peut y avoir des variables numérique, des variable de texte, des booléans (true/false)... Et des variables contenant d'autres variables !!! Eh oui, c'est plus pratique pour le tri Wink

[ i ] Attend, où est-ce que tu voix des variables contenant d'autres variable toi ?

Dans le fichier xml le plus connu du forum, j'ai nommé le Weaptwk.xml.
Vous ne voyez toujours pas ? Ah tout de même, les variables tels que "kweaponbazooka" ! Eh oui, toutes les variables d'armes contienent une cinquantaine de variables, que ce soit "scale" ou "DamageRadius", ce sont des variables dans une autre variables.
Le nom de ces variables contenant d'autre variables est (un mot qui va sans doute vous rappeller des choses) Container.

Le lua lui est un language différent car (dans le cas présent) il éfféctue des actions en fonction d'autres action. par exemple "Si une roue du wormpot est sur dégat doublé, Alors tous les dégats du jeu seront multipliés par 2", je simplifie là, mais c'est dans le principe.

Pourquoi je vous ai expliquer ça ? tout simplement parce que nous allons nous attaquer à la modification d'arme par le wormpot.

[ i ] Et alors ? Il suffirait de mètre SetData("kWeaponBazooka.Scale", 10) non ?

Eh bien non justement, les container, ça ne se modifie pas comme n'importe quel variable Very Happy.


2. Décryptage :

Je ne vais pas tourner autour du pot, nous allons faire comme si nous ne connaissions rien Wink :

Allons voir vers la fin du document ceci :
Code:
function SetWeaponWind(ContainerName, IsAffectedByWind)

   local ContainerLock, Container = EditContainer(ContainerName)
   Container.IsAffectedByWind = IsAffectedByWind
   CloseContainer(ContainerLock)
end
Hum... nous pouvons remarqué que nous avons ici une fonction.

[ i ] Qu'est-ce que c'est que ça ?

Alors une fonction, c'est ce qui nous permet de répéter un action plusieur fois.
Par exemple :
Code:
function SetMaxAltitudeNull()
        SetData("JetPack.MaxAltitude", 0);
end
Pour mêtre l'altitude du jetpack à 0 par exemple, et pour l'utiliser :
Code:
if ... then
        SetMaxAltitudeNull();
end
Tout simplement, et voilà vous avez une fonction Very Happy.

[ i ] Bah oui mais c'est inutile, les valeurs ne change jamais.

Oh que si, les valeurs peuvent changer grace à ce que l'on peut appeller un "Système de variable interne" aux fonction (Oui c'est barbare mais ça marche Very Happy). Il s'agit en fait de variable créer pour la fonction et qui ne sont utilisé uniquement DANS la fonction.
Par exemple :
Code:
function SetMaxAltitude(AltitudeVariable)
          SetData("Jetpack.MaxAltitude", AltitudeVariable);
end
Et on l'utilise de la même manière dans notre code :
Code:
if ... then
          SetMaxAltitude(0)
end
Tout simplement ^^
/!\ Une fonction est toujours défini à l'extèrieur "d'autres fonctions".

Revenons à notre code maintenant
Code:
function SetWeaponWind(ContainerName, IsAffectedByWind)

   local ContainerLock, Container = EditContainer(ContainerName)
   Container.IsAffectedByWind = IsAffectedByWind
   CloseContainer(ContainerLock)
end
On voit donc qu'il s'agit d'une fonction avec 2 variables, ContainerName et IsAffectedByWind.
Maintenant, regardons la 1ère ligne de cette fonction :
Code:
local ContainerLock, Container = EditContainer(ContainerName)
On peut en déduire que ici, on "ouvre" un Container pour l'éditer. Ce n'est pas hyper évident à comprendre mais on admettera que cette ligne sert à ouvrir le container "ContainerName" (qui est le nom du container défini par notre fonction Wink) afin d'en éditer les valeurs.
Et comme tout ce que l'on ouvre, on doit le fermer, on doit alors voir dans la fonction :
Code:
CloseContainer(ContainerLock)
Qui sert donc à fermer le container portant la variable "ContainerLock" Smile

Ca va ? vous comprenez à peu prés ?
Si vous ne comprenez pas vraiment comment marche ce système de container, ce n'est pas grave, il vous suffit juste d'admettre que celà marche Smile.

Ensuite, pendant que notre container est ouvert on voit ceci :
Code:
Container.IsAffectedByWind = IsAffectedByWind
Que voit-on ici ? on voit que l'on défini une variable. On voit aussi que la valeur de cette variable est le second argument de notre fonction Smile.

/!\ La valeur "Container.IsAffectedByWind" ne contient pas le second argument, il s'agit d'une variable à part entière et non pas un valeur tel que "Container.0" (si le second argument est égale à 0 par exemple)

Donc en somme, si on traduit la fonction dans son intrégalité gràce à cet exemple :
Code:
SetWeaponWind(kWeaponGrenade, true)
Il se passera ceci :
- La fonction ouvre le container "kWeaponGrendade",
- Elle défini la variable <IsAffectedByWind> par true,
- Elle ferme le container précédement ouvert.
Le résultat dans le jeu, la grenade sera affécté par le vent.

[ i ] Okay j'ai compris, mais à quoi sa sert de metre tout cela dans une fonction ?

Alors, je vais vous expliquer la différence par un exemple :

Code SANS fonction :
Code:
...
local ContainerLock, Container = EditContainer(kWeaponGrenade)
Container.IsAffectedByWind = true
CloseContainer(ContainerLock)
...
Code AVEC fonction :
Code:
...
SetWeaponWind(kWeaponGrenade, true)
...
Compris ? =)

[ i ] Ouais, pour 2 lignes en moins franchement...

Okay okay, un autre exemple :

Code AVEC fonction :
Code:
...
SetWeaponWind(kWeaponArmeDeEasytwk, true)
SetWeaponWind(kWeaponArmeDeTweakMan, true)
SetWeaponWind(kWeaponArmeDeDamageMagnitude, true)
SetWeaponWind(kWeaponArmeDeKilburn, true)
SetWeaponWind(kWeaponArmeDeMaycne, true)
...
Maintenant, imaginez la taille du code SANS fonction... Very Happy

Vous voyez donc l'utilité des fonction =)


3. Création d'un slot "Armes Sans Gravite" :

Bon maintenant, je vais vous donner un petit exercice à faire Smile
Vous allez me créer (remplacer) un slot qui aura pour propriété de suprimer la gravite de la plupart des armes (n'allez pas me retirer la gravité de l'attaque aérienne !).

Vous avez à présent toutes les cartes en mains pour réussir cet éxercice mais je vais tout de même vous donner 2 indices si jamais vous avez du mal :

1er Indice :
Spoiler:
2nd Indice :
Spoiler:
.


Vous avez réussi ? non ? alors voici la correction :
Spoiler:

Et voilà, ce laborieux tutorial se termine enfin, j'éspère qu'il sera utile et je verais bientot des pack de wormpot sur le forum =)

EDIT Maycne: Passage en Post-it.


Dernière édition par Easytwk le Mer 09 Juin 2010, 17:02, édité 12 fois
Revenir en haut Aller en bas
http://soundcloud.com/Shlyglypotassin
_Kilburn
Admin
_Kilburn


Nombre de messages : 1118
Age : 32
Localisation : data\\Tweak\\
Date d'inscription : 25/05/2006

[Débuter en Lua] Le Wormpot Empty
MessageSujet: Re: [Débuter en Lua] Le Wormpot   [Débuter en Lua] Le Wormpot EmptyMer 01 Juil 2009, 08:36

Minute...

Code:
Vari != 5  :  Vari est différent de 5
Vari ~= 5  :  Vari est environs égale à 5

Je crois qu'il y a eu confusion entre l'opérateur C et l'opérateur Lua, != n'existe pas en Lua, et ~= signifie "différent de", y'a pas d'opérateur "environ égal à". Razz

Toute façon, c'est pas un gros problème, si on veut vraiment comparer deux nombres A et B avec une marge d'erreur E, suffit de voir si A>B-E et A<B+E.
Y'a des maths simples comme ça qu'il faut comprendre si on veut programmer, on a beau connaître le langage par coeur, on n'ira pas loin si on n'est pas entraîné en algorithmique.

Enfin bon, faut un début à tout, bonne chance à ceux qui veulent se frotter au Lua, c'est pas un langage bien compliqué, mais y'a quand même quelques subtilités à saisir. Pour les courageux à qui l'anglais fait pas peur, vous avez de la documentation sur le site officiel du Lua.

http://www.lua.org/pil/
Revenir en haut Aller en bas
https://w4-tweaking.forumgaming.fr
Easytwk
Graphiste du Forum
Easytwk


Nombre de messages : 924
Age : 30
Localisation : Zoll
Date d'inscription : 31/10/2007

[Débuter en Lua] Le Wormpot Empty
MessageSujet: Re: [Débuter en Lua] Le Wormpot   [Débuter en Lua] Le Wormpot EmptyMer 01 Juil 2009, 13:16

Ok merci _kilburn, je n'avais jamais vraiment utilisé ces opérateur dans le Lua Very Happy.
Revenir en haut Aller en bas
http://soundcloud.com/Shlyglypotassin
Easytwk
Graphiste du Forum
Easytwk


Nombre de messages : 924
Age : 30
Localisation : Zoll
Date d'inscription : 31/10/2007

[Débuter en Lua] Le Wormpot Empty
MessageSujet: Re: [Débuter en Lua] Le Wormpot   [Débuter en Lua] Le Wormpot EmptyMer 09 Juin 2010, 17:04

[Mise à Jour]
|- FIN DU TUTORIAL;
[/]
Revenir en haut Aller en bas
http://soundcloud.com/Shlyglypotassin
WormsS
Membre
WormsS


Nombre de messages : 555
Age : 26
Localisation : data/scripts
Date d'inscription : 28/06/2009

[Débuter en Lua] Le Wormpot Empty
MessageSujet: Re: [Débuter en Lua] Le Wormpot   [Débuter en Lua] Le Wormpot EmptySam 07 Juin 2014, 00:35

Hem...
Je me permet de remonter ce tutoriel plutôt vieux pour demander quelque chose, j'ai cherché et essayé beaucoup de choses sans résultats.
Comme beaucoup le savent il existe des variables numériques, textuelles, ou booléans, mais également des variables de couleur ou de vecteur, indiquées soit par trois axes x y z, soit par trois couleurs r g b. Mais je n'ai jamais réussi à les modifier via le lua, je m'explique:
Disons que je veuille changer la taille de la particule WXPF_GreenGlowBang, je me retrouve avec ce code:

Code:
  local Lock, Particle = EditContainer("WXPF_GreenGlowBang")
   Particle.ParticleSize =            <-- et là je met quoi ? :/
   CloseContainer(Lock)

J'ai essayé {0, 0}, 0 0, x=0 y=0... Bref...
Ne m'en voulez pas trop pour le remontage, mais bon c'est un sujet en post-it et c'est pour une question relativement pertinente, alors j'en déduis que ce n'est pas si grave que ça. Smile
Revenir en haut Aller en bas
Easytwk
Graphiste du Forum
Easytwk


Nombre de messages : 924
Age : 30
Localisation : Zoll
Date d'inscription : 31/10/2007

[Débuter en Lua] Le Wormpot Empty
MessageSujet: Re: [Débuter en Lua] Le Wormpot   [Débuter en Lua] Le Wormpot EmptySam 07 Juin 2014, 16:50

Tu es tout pardonné ^^

Donc pour repartir sur de bonne base, revoyons le vocabulaire :
Un fichier XML est composé de balises (<balise></balise>) qui peuvent contenir d'autre balises ou une valeurs (<balise>valeur</balise>). Certaines balises possèdes également des attributs (<balise attribut="valeur"></balise>).

Voilà pour le petit rappel, maintenant ce que tu cherche à modifier c'est un attribut. Ca fait très très longtemps mais il me semble avoir déjà parlé de sa avec _Kilburn et nous n'avions pas trouver de solutions. Cependant après réflexions, je pense que le moyen pouvant être utilisé serait un stockage de variables dans un fichier XML. En effet, il existe d'autres type de variable que les containers de variables (chaines de caractères, nombres entiers, nombres décimaux, vecteurs...) il n'y a qu'a regarder dans le fichier Local.xml. La solution serait donc d'ajouter une variable de type vecteur contenant les x, y et z que l'on souhaite obtenir, ainsi il suffirait d'appelé la variable à modifier et de lui assigner cette nouvelle valeur de variable.
Revenir en haut Aller en bas
http://soundcloud.com/Shlyglypotassin
WormsS
Membre
WormsS


Nombre de messages : 555
Age : 26
Localisation : data/scripts
Date d'inscription : 28/06/2009

[Débuter en Lua] Le Wormpot Empty
MessageSujet: Re: [Débuter en Lua] Le Wormpot   [Débuter en Lua] Le Wormpot EmptySam 07 Juin 2014, 20:27

Ah, zut, ça me semblait être une super idée, j'ai essayé, mais... négatif.

Au début je voulais le faire avec la variable de couleur de l'exemple de mon message précédent, mais le problème est que dans une variable de type "ColorResources" il y a R, G, B, et .. A (alpha), la transparence. Comme dans PartTwk.xml les balises ParticleColor ne font jamais appel à alpha, j'ai préféré changer d'exemple.
J'ai essayé avec le vecteur ImpulseDirection des armes de corps-à-corps de WeapTwk.xml.
J'ai créé la variable NewVector de type "VectorResources" dans Local.xml, puis je l'ai appelée lorsque la partie démarre comme ceci:

Code:
  local ImpDirection = GetData("NewVector")
 
  local Lock, weapon = EditContainer("kWeaponFirePunch")
  weapon.ImpulseDirection = ImpDirection
  CloseContainer(Lock)

Mais tout ce que ça fait c'est, au lancement d'une partie, un mouvement de caméra circulaire autour du terrain sans fin, qui se fait à chaque fois qu'il y a un bug dans un script lua (expérience personnelle ^^).
J'ai peut-être fait quelque chose de travers ?
Revenir en haut Aller en bas
Mehdirauch
Membre



Nombre de messages : 1
Age : 22
Localisation : data\\Tweak\\
Date d'inscription : 07/06/2014

[Débuter en Lua] Le Wormpot Empty
MessageSujet: Re: [Débuter en Lua] Le Wormpot   [Débuter en Lua] Le Wormpot EmptySam 07 Juin 2014, 21:03

Excellent tutoriel je m'y mettrais d'est que j'aurais le temps  Smile .
La modif de Worpot pourraient être génial en Multi si plusieurs joueurs ont les même fichiers.
Cela pourrait être une bonne idée de créer une section sur des nouvelles règles du Wormpot crée de facon a ce que l'on puisse poster ses créations.  Bravo 
Revenir en haut Aller en bas
Contenu sponsorisé





[Débuter en Lua] Le Wormpot Empty
MessageSujet: Re: [Débuter en Lua] Le Wormpot   [Débuter en Lua] Le Wormpot Empty

Revenir en haut Aller en bas
 
[Débuter en Lua] Le Wormpot
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Worms 4 Tweaking :: Tutoriels et ressources :: Tutoriels :: Scripting-
Sauter vers: