Débuggage

Répondre
Partager Rechercher
Sujet épineux n'est-ce pas .

Bon, je me lance dans les scripts, seulement, pour bien comprendre comment le système marche, rien ne vaut une bonne méthode de débuggage qui permettra à coup sur de bien observer ce qui se passe, de suivre l'évolution des différentes variables.

J'ai donc utilisé (je suis tombé dessus par hasard alors que je cherchais ça... donc finalement pas par hasard ) des trucs tout bête :
les PrintString, PrintInteger, etc... qui fonctionnent plutôt pas mal et qui restent exploitables facilement. Je pense que vous devez connaître, ça sort ce que je spécifie dans les PrintMachin dans un fichier log dans le répertoire du jeu.
Toutefois 2 questions me viennent à l'esprit :

1) Qu'utilisez vous pour le débuggage ? Y-a-t'il quelque chose de mieux, plus facile selon vous. Bref, vos recettes de grand mère. J'ai noté la présence de logiciel de compilation et de diverses méthodes dans les persistants et en faisant quelques recherches mais je m'en remets à votre avis.
Eclairez donc mes lanternes.

2) J'ai commencé l'utilisation du débuggage/traçage sur le script de Nek (script de rencontres aléatoires : https://forums.jeuxonline.info/showthread.php?t=266769).
Et j'ai donc testé en même temps qu'essayé de comprendre comment fonctionnait le script de Nek.

Je vous colle donc le code que j'ai utilisé :
(Tout ce que j'ai rajouté pour le traçage des variables a été mis à gauche sans indentation).

Code PHP:

void main()
{
    
//On recupere le Tag de la rencontre
    
string Srencontre_tag GetTag(OBJECT_SELF);

PrintString(Srencontre_tag);

    
//On prend les 3 derniers caracteres (3 chiffres, le pourcentage de declenchement de la rencontre
    
string Sproba GetStringRight(Srencontre_tag,3);

PrintString(Sproba);

    
//On le passe en integer et on le decremente de 1 pour coller avec le range du random
    
int Iproba StringToInt(Sproba) - 1;

PrintInteger(Iproba);

    
//Si la rencontre est deja active, on quitte le script
    
if (GetEncounterActive()) {
        return;
    } else {

        
//On tire un nombre aleatoire en 0 et 100 (100 exclus)
        
int Itirage Random(100);

PrintInteger(Itirage);

        
//On compare le nombre aleatoire a la probabilite de rencontre
        
if (Itirage <= Iproba) {
            
//Si le tirage est inferieur ou egal a la probabilite, on active la rencontre
            
SetEncounterActive(TRUE);
        } else {
            
//Sinon, on la desactive.
            
SetEncounterActive(FALSE);
        }


    }

Donc je sors les variables pour voir leur comportement et à ma surprise, en regardant le fichier de log, je vois ces variables apparaître plusieurs fois :
Code:
.R_FAC_GROUPE_ARAIGNEES_095 //Le nom à la con de ma rencontre
095 //Le string des 3 derniers caractères de mon nom de rencontre
95 //L'integer du string précédent
78 //Le nombre tiré par le random

/*On recommence sauf que le random n'est plus tiré
(ce qui me parait logique, je n'ai pas vesoin d'explication là dessus).*/

R_FAC_GROUPE_ARAIGNEES_095
095
95
.R_FAC_GROUPE_ARAIGNEES_095
095
95
Que sont les "." qui apparaissent dans le log ?

La répétition de mes variables me laisse penser que le OnEnter s'est déclenché plusieurs fois. Ma zone de rencontre est assez grande. Comment est géré le OnEnter d'une rencontre ? On ne rentre théoriquement qu'une fois dans la zone non ? (je n'ai pas fais de demi tour ou quoi que ce soit).
Comment peut-on expliquer alors que mon script ce soit exécuté plusieurs fois ? Tant que je ne vois pas les monstres ça relance le script ?
Je pige pas en fait.
Re: Débuggage
en fait, chaque monstre qui rentre dans la zone declenche le OnEnter.

enfin, plus precisement, chaque objet.

A noter qu'un spawn de monstre declenche donc le OnEnterArea, le OnEnterTrigger s'il apparait dans le trigger et les OnPerceptions divers et variés situes aux alentours (en plus de son OnSpawn)

D'ou l'utilité de mettre un If (GetIsPC(oEnter)) au debut des script de OnEnter
(et dans les OnExit/OnDeath, puisque la mort d'un objet le fait effectivement sortir de la zone, donc "triggue" le OnExitArea et OnExitTrigger)

Pour les debuggage, en general, j'tuilise le log ou des speakstring (ou des SendMessageToPC()), pour aller plus vite (ie : je peut voir en même temps que je teste).

Mais tout est valable.

ps :
- le ., c'est un interval de temps,
- le .R_FAC_GROUPE_ARAIGNEES_095
c'est parceque tu as ecris : .R_FAC_GROUPE_ARAIGNEES_095 //Le nom à la con de ma rencontre au dessous... (non, je blague, patapay))
Re: Re: Débuggage
Citation :
Provient du message de eMRaistlin
en fait, chaque monstre qui rentre dans la zone declenche le OnEnter.

enfin, plus precisement, chaque objet.
Ouai mais vu que j'étais tout seul
En fait, j'ai déclenché le truc et chaque monstre qui a été spawné a déclenché 1 fois le OnEnter ?

Citation :
A noter qu'un spawn de monstre declenche donc le OnEnterArea, le OnEnterTrigger s'il apparait dans le trigger et les OnPerceptions divers et variés situes aux alentours (en plus de son OnSpawn)
Ca se trouve où le OnEnterTrigger, dans quel type d'objet ? J'ai pas trouvé ce truc là

Citation :
D'ou l'utilité de mettre un If (GetIsPC(oEnter)) au debut des script de OnEnter
(et dans les OnExit/OnDeath, puisque la mort d'un objet le fait effectivement sortir de la zone, donc "triggue" le OnExitArea et OnExitTrigger)
Merci du conseil, je vais mettre ça en application .

Citation :
ou des SendMessageToPC())
Interessant ça

Pour les intervalles de temps, je m'en suis douté après .
"Each '†' represents 10 seconds" --> le truc bizarre c'est un "." en fait
Re: Re: Re: Débuggage
Citation :
Provient du message de Loekit
Ouai mais vu que j'étais tout seul
En fait, j'ai déclenché le truc et chaque monstre qui a été spawné a déclenché 1 fois le OnEnter ?
Voila, c'est exactement ca

Citation :
Ca se trouve où le OnEnterTrigger, dans quel type d'objet ? J'ai pas trouvé ce truc là
Euh, c'etait un raccourci pour dire : OnEnter du Trigger (dans les script des triggers, je sais pas si c'est dans les triggers de rencontre, mais y'en a dans les triggers generic. Enfin, tant que tu met des (GetIsPC()) partout, ca gère ^^)
Citation :
1) Qu'utilisez vous pour le débuggage ? Y-a-t'il quelque chose de mieux, plus facile selon vous. Bref, vos recettes de grand mère. J'ai noté la présence de logiciel de compilation et de diverses méthodes dans les persistants et en faisant quelques recherches mais je m'en remets à votre avis.
Eclairez donc mes lanternes.
euh...... bah bioware nous fournis quand même un débuggeur d'une puissance relative, mais tout de même plus efficasse que les bon vieux Print et Cie.

Pour l'utiliser, il faut dans un premier temp que tu compile en mode débuggeur (va voir dans les options d'aurora)

ensuite, tu place une fonction SpawnScriptDebugger() la où tu souhaite que se lance ton débugeur.
Une fois l'execution en break, tu peux facilement visualiser les variables de type standard (float, string, int), les structures (donc les vecteurs), l'affichage des object et locations est en revanche asset moyen, on aimerais bien un peu plus d'info que le type d'object et le tag s'il existe... ^^'

Au bon vieux temp, j'utilisait des SendMessageToObject(GetFirstPC(), de préférence foutu dans une fonction DEBUG(), ce qui évite d'aller fouiner dans les logs (la paresse légendaire du programmeur )
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés