Différences entre les versions de « TESCS2 : Les scripts »

De Wiwiki
Aller à la navigation Aller à la recherche
(Les bases du scripts, ou comment apprendre à faire soit même des scripts simples)
 
(While et EndWhile n'existent pas sur Oblivion vanilla...)
 
(12 versions intermédiaires par 5 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
Sur le forum quelqu'un demandais qu'on lui fasse un script alors que celui ci semblait n'avoir rien de compliqué. J'encourage donc tous les nouveaux TESCSeurs à apprendre à scripter pour faire eux même leurs scripts et donc permettre aux scripteurs foux d'aider ceux qui sont sur des scripts qu'ils ne pourront vraiment pas faire seul :)<br><br>
[[Catégorie:TESCS2 : Tutoriaux|Les Bases du Scripting]]
Je mets donc ici un tutorial sur les bases du scripting. J'en ferais un mieux présenté et plus complet plus tard mais vous pouvez déjà comencez à scripter avec ça.<br>
[[Catégorie:TESCS2 : Scripting|Scripting]]
N'oubliez pas : ''''Il y a pire que de ne pas y arriver, c'est de ne pas essayer & persévérer !''''<br><br>
Il ne faut pas voir les scripts comme quelque chose de compliqué, il s&#39;agit d&#39;un langage tout comme l&#39;anglais ou le français, mais en BEAUCOUP BEAUCOUP plus simple. Donc si tu sais parler Français tu sauras scripter. D&#39;autant que le language du TESCS est vraiment très simple (ce qui le rend compliqué lorsque l&#39;on veut faire des trucs un peu tordu ^^, car il manque de trop de possibilités). Ainsi tu as juste à connaitre 7 règles de grammaires (alors qu&#39;en Français y&#39;en a des centaines &#33;). A savoir :<br />


- La règle du &quot;script&quot; : un script commence toujours par :
Sur le forum quelqu'un demandait qu'on lui fasse un script alors que celui ci semblait n'avoir rien de compliqué. J'encourage donc tous les nouveaux TESCSeurs à apprendre à scripter pour faire eux même leurs scripts et donc permettre aux scripteurs fous d'aider ceux qui sont sur des scripts qu'ils ne pourront vraiment pas faire seuls. :)
<table width="600" border="1" cellpadding="0" cellspacing="0"><tr><td bgcolor="#EFEEE3"><small>CODE</small></td></tr>
<tr><td bgcolor="#FFFEF3"><tt>'''script''' nomDuScript</tt></td></tr></table><br />
- La règle des &quot;blocs de script&quot; : Une partie de script est toujours comprise entre
<table width="600" border="1" cellpadding="0" cellspacing="0"><tr><td bgcolor="#EFEEE3"><small>CODE</small></td></tr>
<tr><td bgcolor="#FFFEF3"><tt>'''Begin''' condition<br><br>Les instructions du Script<br><br>'''End'''</tt></td></tr></table>


- La règle des blocs de confition : Une bloc de condition (si, sinon si, sinon) commence toujours par
<table width="600" border="1" cellpadding="0" cellspacing="0"><tr><td bgcolor="#EFEEE3"><small>CODE</small></td></tr>
<tr><td bgcolor="#FFFEF3"><tt>'''if''' &#40;condition&#41;<br>
&nbps;&nbps;instructions<br>
'''endif'''</tt></td></tr></table>
Entre deux tu mets toutes les instructions qui doivent s&#39;effectuer SI la condition du '''if''' est remplie. S&#39;il y a plusieurs conditions différentes on peut utiliser les &quot;sinonsi&quot; ('''elseif''') et &quot;sinon&quot; ('''else'''), donc par exemple :<br />
<table width="600" border="1" cellpadding="0" cellspacing="0"><tr><td bgcolor="#EFEEE3"><small>CODE</small></td></tr>
<tr><td bgcolor="#FFFEF3"><tt>'''if''' &#40; Condition 1 &#41;<br />&nbsp;&nbsp;Afficher On est dans la condition 1<br />'''elseif''' &#40; Condition 2 &#41;<br />&nbsp;&nbsp;Afficher On est dans la condition 1<br />'''elseif''' &#40; Condition 3 &#41;<br />&nbsp;&nbsp;Afficher On est dans la condition 3<br />'''else'''<br />&nbsp;&nbsp;Afficher On est ni dans condition 1 ni dans condition 2 ni dans condition 3<br />'''endif'''<br /></tt></td></tr></table><br />


- la règle des objets : Le TESCS2 repose sur une logique objet, ainsi pour qu&#39;un objet (un PNJ, un coffre, une créature etc.) éxécute la fonction il suffit de faire : ObjetID.LaFonction. Donc pour que ce soit le joueur par exemple qui meurt, et bien il faut mettre : player.kill<br />
Je mets donc ici un tutorial sur les bases du scripting. J'en ferais un mieux présenté et plus complet plus tard mais vous pouvez déjà comencer à scripter avec ça.


- la règle des variables : il faut déclarer les variables avant de les utiliser. on a pas grand chose comme type possible :
N'oubliez pas : ''''Il y a pire que de ne pas y arriver, c'est de ne pas essayer & persévérer !''''
<table width="600" border="1" cellpadding="0" cellspacing="0"><tr><td bgcolor="#EFEEE3"><small>CODE</small></td></tr>
<tr><td bgcolor="#FFFEF3"><tt>short      -32 768 à 32 767 (entier court)<br />long      -2 147 483 648 à 2 147 483 647 (entier long)<br />float      1,18E-38 à 3,40E38 (precision = 7 digits) (nombre à virgule)<br />ref        un ObjetID (reférence sur un objet, comme un PNJ, un coffre etc.)</tt></td></tr></table><br />


- la règle des commentaires : tout ce qui est précédé par &quot;;&quot; est un commentaire. Donc :<br />
<table width="600" border="1" cellpadding="0" cellspacing="0"><tr><td bgcolor="#EFEEE3"><small>CODE</small></td></tr>
<tr><td bgcolor="#FFFEF3"><tt><br />; blablabla tout ça c&#39;est du comment<br />; '''if''' &#40;condition1&#41; est aussi un comment<br />'''if''' &#40;condition2&#41;<br />; mais le '''if''' &#40;condition2&#41; ci dessus ne l&#39;est pas<br /></tt></td></tr></table><br />


- Enfin, la règle d&#39;éxécution des scripts : ils sont éxécutés en boucle : à chaque frame, le script est éxécuté une fois (si les conditons d&#39;éxécutions sont rempliers. Donc si tu fais :
Il ne faut pas voir les scripts comme quelque chose de compliqué, il s&#39;agit d&#39;un langage tout comme l&#39;anglais ou le français, mais en BEAUCOUP BEAUCOUP plus simple. Donc si tu sais parler français tu sauras scripter. D&#39;autant que le language du TESCS est vraiment très simple (ce qui le rend compliqué lorsque l&#39;on veut faire des trucs un peu tordus ^^, car il manque de trop de possibilités). Ainsi tu as juste à connaitre 7 règles de grammaires (alors qu&#39;en français y&#39;en a des centaines &#33;). A savoir :
<table width="600" border="1" cellpadding="0" cellspacing="0"><tr><td bgcolor="#EFEEE3"><small>CODE</small></td></tr>
<tr><td bgcolor="#FFFEF3"><tt><br />'''script''' un_test<br />'''Begin''' GameMode<br />messageBox &#34;Mwaha tu peux plus jouer &#33;&#34;, &#34;Ok&#34;<br />'''end'''</tt></td></tr></table>
Celà va afficher la messageBox tout le temps et le joueur devra appuyer sur OK tout le temps sans avoir la possibilité de jouer.<br /><br /><br />


Ensuite il suffit de trouver les fonctions qui réalisent ce que tu veux faire (ajouter de la vie, renommer une cell etc.) ou d&#39;en créer une toi même (calcul de modulo, opérations de trigo etc.) si elles ne sont pas déjà implémentées.<br />


Donc en résumé voici un script à mettre sur l&#39;anneau qui sert à rien :<br />
- La règle du &quot;script&quot; : un script commence toujours par :
<table width="600" border="1" cellpadding="0" cellspacing="0"><tr><td bgcolor="#EFEEE3"><small>CODE</small></td></tr>
{| width="600" border="1" cellpadding="0" cellspacing="0"
<tr><td bgcolor="#FFFEF3"><tt><br />'''script''' mon_script_test<br />'''Begin''' OnActivate; ce qui est compris entre ce '''Begin''' et le '''End''' ne sera exécuté que si on active l&#39;anneau &#40;on le ramasse&#41;<br />&nbsp;&nbsp;short doOnce; déclaration d&#39;une variable de type entier court car elle ne prendra que -1 &#40;ou 0&#41; ou 1<br />&nbsp;&nbsp;short dayExec; idem<br />&nbsp;&nbsp;short monthExec; idem<br />&nbsp;&nbsp;short yearExec; idem<br />&nbsp;&nbsp;float hourExec; l&#39;heure qui est un float dans le jeu<br /><br />&nbsp;&nbsp;'''if''' &#40; doOnce &#33;= 1 &#41;; Si doOnce est différente de 1 &#40;elle est à 0 ou -1 par défaut à sa création.&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox &#34;C&#39;est la première et dernière fois que cette partie s&#39;éxécute&#34;, &#34;ok&#34;; on affiche ça<br />&nbsp;&nbsp;&nbsp;&nbsp;set doOnce to 1; on affecte la valeur 1 à doOnce<br />&nbsp;&nbsp;&nbsp;&nbsp;set hourExec to GameHour; hourExec récupère l&#39;heure actuelle dans le jeu&#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;set dayExec to GameDay; récupère le jour<br />&nbsp;&nbsp;&nbsp;&nbsp;set monthExec to GameMonth;idem pour le mois<br />&nbsp;&nbsp;&nbsp;&nbsp;set yearExec to GameYear;idem pour l&#39;année<br />&nbsp;&nbsp;'''endif'''<br /><br />&nbsp;&nbsp;Activate; on active l&#39;anneau car le OnActivate annule l&#39;activation donc si on ne mettait pas Activate ici on ne pourrait jamais le prendre<br />'''End'''<br /><br />'''Begin''' OnDeath player; ce qui suit ne sera exécuté qu&#39;à la mort du player<br />&nbsp;&nbsp;MessageBox &#34;Haha vous êtes morts &#33; Vous aviez pris l&#39;anneau pour la première fois le %.0f %.0f %.0f à %.2f&#34;, dayExec, monthExec, yearExec, hourExec, &#34;Snif&#34;<br />&#59; va afficher une boite de message avec le texte où les %.0f et %.2f seront remplacés dans l&#39;ordre par les variables qui suivent le message. Le seul bouton sur lequel on pourra cliquer sera le bouton &#34;snif&#34;<br />'''End'''<br /></tt></td></tr></table><br />
| bgcolor="#EFEEE3" | <small>CODE</small>
|-
| bgcolor="#FFFEF3" | <tt>'''scriptname''' nomDuScript</tt>
|}
Le "ScriptName" peut également être remplacé par son équivalent raccourci, "Scn" :
{| width="600" border="1" cellpadding="0" cellspacing="0"
| bgcolor="#EFEEE3" | <small>CODE</small>
|-
| bgcolor="#FFFEF3" | <tt>'''Scn''' nomDuScript</tt>
|}


Voilà tu as toutes les bases du scripting tu vois ce n&#39;est pas du tout compliqué.<br />
- La règle des &quot;blocs de script&quot; : une partie de script est toujours comprise entre un Begin et un End.
Dailleurs si tu veux essayer d&#39;apprendre à scripter autrement qu&#39;avec le TESCS2 (qui oblige à lancer Oblivion pour voir si le script fonctionne...) tu peux essayer d&#39;apprendre le JavaScript ou le PHP. Ce sont deux langages très simples qui s&#39;aprennent facilement. http://www.phpdebutant.org est très bien pour commencer. Sinon : http://developpez.com a de très bon tutos sur un peu tous les langages.<br /><br />
{| width="600" border="1" cellpadding="0" cellspacing="0"
En conclusion, il faut donc lire et écrire un script comme si tu parlais. Par exemple pour toi c&#39;est : (la personne qui voulait le script voulait ce qui suit)<br /><br />
| bgcolor="#EFEEE3" | <small>CODE</small>
Si le joueur a le signe &quot;MachinChose&quot; alors il doit avoir 0 de magie. Mais s&#39;il a plus de X point d&#39;intelligence, alors on lui accorde Y points de magie en fonction de ce qu&#39;il a et de X (par exemple Y = (&quot;Pts Int Joeurs&quot; - X ) * 3 + (&quot;Level Joueur&quot; * 2)<br /><br />
|-
Ce qui se traduit en script par quelquechode de ce genre (pas testé je peux pas faire touner Obliv là ou je suis) :<br /><br />
| bgcolor="#FFFEF3" | <tt>'''Begin''' condition


<table width="600" border="1" cellpadding="0" cellspacing="0"><tr><td bgcolor="#EFEEE3"><small>CODE</small></td></tr>
Les instructions du Script
<tr><td bgcolor="#FFFEF3"><tt><br />Script Exemple<br />'''Begin''' GameMode<br />&nbsp;&nbsp;short int<br />&nbsp;&nbsp;short will<br />&nbsp;&nbsp;short level<br />&nbsp;&nbsp;short permit<br /><br />&nbsp;&nbsp;'''if''' &#40; GetIsPlayerBirthsign &#34;MachinChose&#34; == 1 &#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;set int to player.GetActorValue intelligence<br />&nbsp;&nbsp;&nbsp;&nbsp;set will to player.GetActorValue WillPower<br />&nbsp;&nbsp;&nbsp;&nbsp;set level to player.getLevel&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;'''if''' &#40; int&nbsp;&nbsp;&#62; X &#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'''if''' &#40; will &#62; permit &#41;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; player.SetActorValue WillPower permit <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'''endif'''<br />&nbsp;&nbsp;&nbsp;&nbsp;'''else'''<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;player.SetActorValue WillPower 0<br />&nbsp;&nbsp;&nbsp;&nbsp;'''endif'''<br />&nbsp;&nbsp;'''endif'''<br />end<br /></tt></td></tr></table><br /><br />


Tu as tout pour en faire toi même maintenant. Evite de compter sur les autres pour les scripts pas trop compliqués et ce pour plusieurs raisons :<br />- personne ne pourra faire le script exactement comme tu l&#39;imagines (bon sauf si c&#39;est pour afficher un texte...)<br />- tu vas perdre un peu de temps au début en les faisant toi même car tu devras apprendre mais après ce sera beaucoup plus rapide que de trouver quelqu&#39;un, lui expliquer, verifier ce qu&#39;il a fait, lui dire ce qu&#39;il ne va pas, lui réexpliquer etc.
'''End'''</tt>
|}
Mais comme toutes les règles, il y a des exceptions : le "ScriptName" et les déclarations de variables locales (voir ci dessous) DOIVENT être en dehors du bloc Begin/End ! ;)


[[Utilisateur:Squallynou|Squallynou (Cordel D.)]] 2 avr 2006 à 05:27 (EDT)
- La règle des blocs de condition : un bloc de condition (si, sinon si, sinon) commence toujours par :
{| width="600" border="1" cellpadding="0" cellspacing="0"
| bgcolor="#EFEEE3" | <small>CODE</small>
|-
| bgcolor="#FFFEF3" | <tt>'''if''' &#40;condition&#41;
 
&nbsp;&nbsp;instructions
 
'''endif'''</tt>
|}
 
Entre deux tu mets toutes les instructions qui doivent s&#39;effectuer SI la condition du '''if''' est remplie. S&#39;il y a plusieurs conditions différentes on peut utiliser les &quot;sinonsi&quot; ('''elseif''') et &quot;sinon&quot; ('''else'''), donc par exemple :
 
{| width="600" border="1" cellpadding="0" cellspacing="0"
| bgcolor="#EFEEE3" | <small>CODE</small>
|-
| bgcolor="#FFFEF3" | <tt>'''if''' &#40; Condition 1 &#41;
 
&nbsp;&nbsp;Afficher On est dans la condition 1
 
'''elseif''' &#40; Condition 2 &#41;
 
&nbsp;&nbsp;Afficher On est dans la condition 1
 
'''elseif''' &#40; Condition 3 &#41;
 
&nbsp;&nbsp;Afficher On est dans la condition 3
 
'''else'''
 
&nbsp;&nbsp;Afficher On est ni dans condition 1 ni dans condition 2 ni dans condition 3
 
'''endif'''
 
</tt>
|}
 
- La règle des objets : Le TESCS2 repose sur une logique objet, ainsi pour qu&#39;un objet (un PNJ, un coffre, une créature etc.) exécute la fonction il suffit de faire : ObjetID.LaFonction. Donc pour que ce soit le joueur par exemple qui meurt, et bien il faut mettre : player.kill
 
 
- La règle des variables : il faut déclarer les variables avant de les utiliser. Soit elles sont déclarées en tant que variables globales dans le jeu (créées dans le menu "Gameplay"->"Globals..." du TESC2), soit elles sont déclarées uniquement dans le script en tant que variables locales (déclaration du genre : "TYPE variable"). On n'a pas grand chose comme types possibles :
{| width="600" border="1" cellpadding="0" cellspacing="0"
| bgcolor="#EFEEE3" | <small>CODE</small>
|-
| bgcolor="#FFFEF3" | <tt>short :    valeur entre -32 768 et 32 767 (entier court)
 
long :    valeur entre -2 147 483 648 et 2 147 483 647 (entier long)
 
float :    valeur entre 1,18E-38 et 3,40E38 (precision = 7 digits) (nombre à virgule)
 
ref :      un ObjetID (reférence sur un objet, comme un PNJ, un coffre etc.)</tt>
|}
 
- La règle des commentaires : tout ce qui est précédé par &quot;;&quot; est un commentaire. Donc :
 
{| width="600" border="1" cellpadding="0" cellspacing="0"
| bgcolor="#EFEEE3" | <small>CODE</small>
|-
| bgcolor="#FFFEF3" | <tt>
 
; blablabla tout ça c&#39;est du comment
 
; '''if''' &#40;condition1&#41; est aussi un comment
 
'''if''' &#40;condition2&#41;
 
; mais le '''if''' &#40;condition2&#41; ci dessus ne l&#39;est pas</tt>
|}
 
- Enfin, la règle d&#39;exécution des scripts : ils sont exécutés en boucle : à chaque frame, le script est éxécuté une fois (si les conditons d&#39;éxécutions sont rempliers). Donc si tu fais :
{| width="600" border="1" cellpadding="0" cellspacing="0"
| bgcolor="#EFEEE3" | <small>CODE</small>
|-
| bgcolor="#FFFEF3" | <tt>'''scriptname''' un_test
 
'''Begin''' GameMode
 
messageBox &#34;Mwaha tu peux plus jouer &#33;&#34;, &#34;Ok&#34;
 
'''end'''</tt>
|}
 
Celà va afficher la messageBox tout le temps et le joueur devra appuyer sur OK tout le temps sans avoir la possibilité de jouer.
 
 
 
Ensuite il suffit de trouver les fonctions qui réalisent ce que tu veux faire (ajouter de la vie, renommer une cell etc.) ou d&#39;en créer une toi même (calcul de modulo, opérations de trigo etc.) si elles ne sont pas déjà implémentées.
 
 
Donc en résumé voici un script à mettre sur l&#39;anneau qui sert à rien :
 
{| width="600" border="1" cellpadding="0" cellspacing="0"
| bgcolor="#EFEEE3" | <small>CODE</small>
|-
| bgcolor="#FFFEF3" | <tt>
 
'''scriptname''' mon_script_test
 
short dayExec; idem
 
short monthExec; idem
 
short yearExec; idem
 
float hourExec; l&#39;heure qui est un float dans le jeu
 
short doOnce; déclaration d&#39;une variable de type entier court car elle ne prendra que -1 &#40;ou 0&#41; ou 1
 
'''Begin''' OnActivate; ce qui est compris entre ce '''Begin''' et le '''End''' ne sera exécuté que si on active l&#39;anneau &#40;on le ramasse&#41;
 
&nbsp;&nbsp;'''if''' &#40; doOnce &#33;= 1 &#41;; Si doOnce est différente de 1 &#40;elle est à 0 ou -1 par défaut à sa création.&#41;
 
&nbsp;&nbsp;&nbsp;&nbsp;MessageBox &#34;C&#39;est la première et dernière fois que cette partie s&#39;éxécute&#34;, &#34;ok&#34;; on affiche ça
 
&nbsp;&nbsp;&nbsp;&nbsp;set doOnce to 1; on affecte la valeur 1 à doOnce
 
&nbsp;&nbsp;&nbsp;&nbsp;set hourExec to GameHour; hourExec récupère l&#39;heure actuelle dans le jeu&#41;
 
&nbsp;&nbsp;&nbsp;&nbsp;set dayExec to GameDay; récupère le jour
 
&nbsp;&nbsp;&nbsp;&nbsp;set monthExec to GameMonth;idem pour le mois
 
&nbsp;&nbsp;&nbsp;&nbsp;set yearExec to GameYear;idem pour l&#39;année
 
&nbsp;&nbsp;'''endif'''
 
 
&nbsp;&nbsp;Activate; on active l&#39;anneau car le OnActivate annule l&#39;activation donc si on ne mettait pas Activate ici on ne pourrait jamais le prendre
 
'''End'''
 
 
'''Begin''' OnDeath player; ce qui suit ne sera exécuté qu&#39;à la mort du player
 
&nbsp;&nbsp;MessageBox &#34;Haha vous êtes morts &#33; Vous aviez pris l&#39;anneau pour la première fois le %.0f %.0f %.0f à %.2f&#34;, dayExec, monthExec, yearExec, hourExec, &#34;Snif&#34;
 
&#59; va afficher une boite de message avec le texte où les %.0f et %.2f seront remplacés dans l&#39;ordre par les variables qui suivent le message. Le seul bouton sur lequel on pourra cliquer sera le bouton &#34;snif&#34;
 
'''End'''</tt>
|}
 
Voilà tu as toutes les bases du scripting tu vois ce n&#39;est pas du tout compliqué.
 
D'ailleurs si tu veux essayer d&#39;apprendre à scripter autrement qu&#39;avec le TESCS2 (qui oblige à lancer Oblivion pour voir si le script fonctionne...) tu peux essayer d&#39;apprendre le JavaScript ou le PHP. Ce sont deux langages très simples qui s&#39;aprennent facilement. http://www.phpdebutant.org est très bien pour commencer. Sinon : http://developpez.com a de très bon tutos sur un peu tous les langages.
 
 
En conclusion, il faut donc lire et écrire un script comme si tu parlais. Par exemple pour toi c&#39;est : (la personne qui voulait le script voulait ce qui suit)
 
 
Si le joueur a le signe &quot;MachinChose&quot; alors il doit avoir 0 de magie. Mais s&#39;il a plus de X point d&#39;intelligence, alors on lui accorde Y points de magie en fonction de ce qu&#39;il a et de X (par exemple Y = (&quot;Pts Int Joeurs&quot; - X ) * 3 + (&quot;Level Joueur&quot; * 2)
 
 
Ce qui se traduit en script par quelquechode de ce genre (pas testé je peux pas faire touner Obliv là ou je suis) :
 
 
{| width="600" border="1" cellpadding="0" cellspacing="0"
| bgcolor="#EFEEE3" | <small>CODE</small>
|-
| bgcolor="#FFFEF3" | <tt>'''Scriptname''' Exemple
 
short int
 
short will
 
short level
 
short permit
 
'''Begin''' GameMode
 
 
&nbsp;&nbsp;'''if''' &#40; GetIsPlayerBirthsign &#34;MachinChose&#34; == 1 &#41;
 
&nbsp;&nbsp;&nbsp;&nbsp;set int to player.GetActorValue intelligence
 
&nbsp;&nbsp;&nbsp;&nbsp;set will to player.GetActorValue WillPower
 
&nbsp;&nbsp;&nbsp;&nbsp;set level to player.getLevel&nbsp;&nbsp;&nbsp;&nbsp;
 
 
&nbsp;&nbsp;&nbsp;&nbsp;'''if''' &#40; int&nbsp;&nbsp;&#62; X &#41;
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'''if''' &#40; will &#62; permit &#41;
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; player.SetActorValue WillPower permit
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'''endif'''
 
&nbsp;&nbsp;&nbsp;&nbsp;'''else'''
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;player.SetActorValue WillPower 0
 
&nbsp;&nbsp;&nbsp;&nbsp;'''endif'''
 
&nbsp;&nbsp;'''endif'''
 
'''end'''</tt>
|}
 
 
Tu as tout pour en faire toi même maintenant. Evite de compter sur les autres pour les scripts pas trop compliqués et ce pour plusieurs raisons :
 
- personne ne pourra faire le script exactement comme tu l&#39;imagines (bon sauf si c&#39;est pour afficher un texte...)
 
- tu vas perdre un peu de temps au début en les faisant toi même car tu devras apprendre mais après ce sera beaucoup plus rapide que de trouver quelqu&#39;un, lui expliquer, verifier ce qu&#39;il a fait, lui dire ce qu&#39;il ne va pas, lui réexpliquer etc.
 
Le site du wiki officiel sur le cs : http://cs.elderscrolls.com/constwiki/index.php/Category:Scripting

Version actuelle datée du 31 octobre 2010 à 12:08


Sur le forum quelqu'un demandait qu'on lui fasse un script alors que celui ci semblait n'avoir rien de compliqué. J'encourage donc tous les nouveaux TESCSeurs à apprendre à scripter pour faire eux même leurs scripts et donc permettre aux scripteurs fous d'aider ceux qui sont sur des scripts qu'ils ne pourront vraiment pas faire seuls. :)


Je mets donc ici un tutorial sur les bases du scripting. J'en ferais un mieux présenté et plus complet plus tard mais vous pouvez déjà comencer à scripter avec ça.

N'oubliez pas : 'Il y a pire que de ne pas y arriver, c'est de ne pas essayer & persévérer !'


Il ne faut pas voir les scripts comme quelque chose de compliqué, il s'agit d'un langage tout comme l'anglais ou le français, mais en BEAUCOUP BEAUCOUP plus simple. Donc si tu sais parler français tu sauras scripter. D'autant que le language du TESCS est vraiment très simple (ce qui le rend compliqué lorsque l'on veut faire des trucs un peu tordus ^^, car il manque de trop de possibilités). Ainsi tu as juste à connaitre 7 règles de grammaires (alors qu'en français y'en a des centaines !). A savoir :


- La règle du "script" : un script commence toujours par :

CODE
scriptname nomDuScript

Le "ScriptName" peut également être remplacé par son équivalent raccourci, "Scn" :

CODE
Scn nomDuScript

- La règle des "blocs de script" : une partie de script est toujours comprise entre un Begin et un End.

CODE
Begin condition

Les instructions du Script

End

Mais comme toutes les règles, il y a des exceptions : le "ScriptName" et les déclarations de variables locales (voir ci dessous) DOIVENT être en dehors du bloc Begin/End ! ;)

- La règle des blocs de condition : un bloc de condition (si, sinon si, sinon) commence toujours par :

CODE
if (condition)

  instructions

endif

Entre deux tu mets toutes les instructions qui doivent s'effectuer SI la condition du if est remplie. S'il y a plusieurs conditions différentes on peut utiliser les "sinonsi" (elseif) et "sinon" (else), donc par exemple :

CODE
if ( Condition 1 )

  Afficher On est dans la condition 1

elseif ( Condition 2 )

  Afficher On est dans la condition 1

elseif ( Condition 3 )

  Afficher On est dans la condition 3

else

  Afficher On est ni dans condition 1 ni dans condition 2 ni dans condition 3

endif

- La règle des objets : Le TESCS2 repose sur une logique objet, ainsi pour qu'un objet (un PNJ, un coffre, une créature etc.) exécute la fonction il suffit de faire : ObjetID.LaFonction. Donc pour que ce soit le joueur par exemple qui meurt, et bien il faut mettre : player.kill


- La règle des variables : il faut déclarer les variables avant de les utiliser. Soit elles sont déclarées en tant que variables globales dans le jeu (créées dans le menu "Gameplay"->"Globals..." du TESC2), soit elles sont déclarées uniquement dans le script en tant que variables locales (déclaration du genre : "TYPE variable"). On n'a pas grand chose comme types possibles :

CODE
short : valeur entre -32 768 et 32 767 (entier court)

long : valeur entre -2 147 483 648 et 2 147 483 647 (entier long)

float : valeur entre 1,18E-38 et 3,40E38 (precision = 7 digits) (nombre à virgule)

ref : un ObjetID (reférence sur un objet, comme un PNJ, un coffre etc.)

- La règle des commentaires : tout ce qui est précédé par ";" est un commentaire. Donc :

CODE
; blablabla tout ça c'est du comment
; if (condition1) est aussi un comment

if (condition2)

; mais le if (condition2) ci dessus ne l'est pas

- Enfin, la règle d'exécution des scripts : ils sont exécutés en boucle : à chaque frame, le script est éxécuté une fois (si les conditons d'éxécutions sont rempliers). Donc si tu fais :

CODE
scriptname un_test

Begin GameMode

messageBox "Mwaha tu peux plus jouer !", "Ok"

end

Celà va afficher la messageBox tout le temps et le joueur devra appuyer sur OK tout le temps sans avoir la possibilité de jouer.


Ensuite il suffit de trouver les fonctions qui réalisent ce que tu veux faire (ajouter de la vie, renommer une cell etc.) ou d'en créer une toi même (calcul de modulo, opérations de trigo etc.) si elles ne sont pas déjà implémentées.


Donc en résumé voici un script à mettre sur l'anneau qui sert à rien :

CODE

scriptname mon_script_test

short dayExec; idem

short monthExec; idem

short yearExec; idem

float hourExec; l'heure qui est un float dans le jeu

short doOnce; déclaration d'une variable de type entier court car elle ne prendra que -1 (ou 0) ou 1

Begin OnActivate; ce qui est compris entre ce Begin et le End ne sera exécuté que si on active l'anneau (on le ramasse)

  if ( doOnce != 1 ); Si doOnce est différente de 1 (elle est à 0 ou -1 par défaut à sa création.)

    MessageBox "C'est la première et dernière fois que cette partie s'éxécute", "ok"; on affiche ça

    set doOnce to 1; on affecte la valeur 1 à doOnce

    set hourExec to GameHour; hourExec récupère l'heure actuelle dans le jeu)

    set dayExec to GameDay; récupère le jour

    set monthExec to GameMonth;idem pour le mois

    set yearExec to GameYear;idem pour l'année

  endif


  Activate; on active l'anneau car le OnActivate annule l'activation donc si on ne mettait pas Activate ici on ne pourrait jamais le prendre

End


Begin OnDeath player; ce qui suit ne sera exécuté qu'à la mort du player

  MessageBox "Haha vous êtes morts ! Vous aviez pris l'anneau pour la première fois le %.0f %.0f %.0f à %.2f", dayExec, monthExec, yearExec, hourExec, "Snif"

; va afficher une boite de message avec le texte où les %.0f et %.2f seront remplacés dans l'ordre par les variables qui suivent le message. Le seul bouton sur lequel on pourra cliquer sera le bouton "snif"

End

Voilà tu as toutes les bases du scripting tu vois ce n'est pas du tout compliqué.

D'ailleurs si tu veux essayer d'apprendre à scripter autrement qu'avec le TESCS2 (qui oblige à lancer Oblivion pour voir si le script fonctionne...) tu peux essayer d'apprendre le JavaScript ou le PHP. Ce sont deux langages très simples qui s'aprennent facilement. http://www.phpdebutant.org est très bien pour commencer. Sinon : http://developpez.com a de très bon tutos sur un peu tous les langages.


En conclusion, il faut donc lire et écrire un script comme si tu parlais. Par exemple pour toi c'est : (la personne qui voulait le script voulait ce qui suit)


Si le joueur a le signe "MachinChose" alors il doit avoir 0 de magie. Mais s'il a plus de X point d'intelligence, alors on lui accorde Y points de magie en fonction de ce qu'il a et de X (par exemple Y = ("Pts Int Joeurs" - X ) * 3 + ("Level Joueur" * 2)


Ce qui se traduit en script par quelquechode de ce genre (pas testé je peux pas faire touner Obliv là ou je suis) :


CODE
Scriptname Exemple

short int

short will

short level

short permit

Begin GameMode


  if ( GetIsPlayerBirthsign "MachinChose" == 1 )

    set int to player.GetActorValue intelligence

    set will to player.GetActorValue WillPower

    set level to player.getLevel    


    if ( int  > X )

      if ( will > permit )

         player.SetActorValue WillPower permit

      endif

    else

      player.SetActorValue WillPower 0

    endif

  endif

end


Tu as tout pour en faire toi même maintenant. Evite de compter sur les autres pour les scripts pas trop compliqués et ce pour plusieurs raisons :

- personne ne pourra faire le script exactement comme tu l'imagines (bon sauf si c'est pour afficher un texte...)

- tu vas perdre un peu de temps au début en les faisant toi même car tu devras apprendre mais après ce sera beaucoup plus rapide que de trouver quelqu'un, lui expliquer, verifier ce qu'il a fait, lui dire ce qu'il ne va pas, lui réexpliquer etc.

Le site du wiki officiel sur le cs : http://cs.elderscrolls.com/constwiki/index.php/Category:Scripting