Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

[Script] Gestion des logs Version 2

Par Tyn' le 14/10/2002 à 16:09:26 (#2333899)

Script initialement proposé par Gargantuel !Voici un script de gestion des logs. Celui ci a pour objectif de vous aider a debugger vos modules mais aussi de tracer ce que ferons vos joueurs (achat de maison, quetes, etc ...)
Attention il s'adresse plutot à ceux qui veulent mettre un univers persistant ou semi persistant en place.

L'idée est de rendre son emploi le plus souple et simple possible.

Initialisation de la log :

Dans le OnModuleStart ajoutez :

#include "s_global"
void main()
{
SetGlobalLog(LOG_ALL, LOG_FILTER_ALL, LOG_FILTER_ALL, GetModule());
}
(Pensez bien à ajouter la 1ere ligne #include dans votre script)

Le premier parametre permet de savoir à qui vont etre envoyé les messages de log :
- LOG_NONE => personne
- LOG_FILE => les messages sont envoyés à la log de NWN
- LOG_DM => Les messages sont envoyés à la log et aux DM
- LOG_ALL => Envoyés à la log, aux DM et aux joueurs

Le 2eme parametre indique quels sont les messages qui doivent etre affichés aux DM/joueurs :
- LOG_FILTER_NONE => Aucun message n'est envoyé
- LOG_FILTER_ERROR => Seuls les messages d'erreurs sont envoyés
- LOG_FILTER_INFO => Seuls les messages d'erreurs et d'info sont envoyés
- LOG_FILTER_ALL => Tous les messages sont envoyés

Le 3eme parametre indique quels sont les messages qui doivent etre envoyés dans la log NWN.
- LOG_FILTER_NONE => Aucun message n'est envoyé
- LOG_FILTER_ERROR => Seuls les messages d'erreurs sont envoyés
- LOG_FILTER_INFO => Seuls les messages d'erreurs et d'info sont envoyés
- LOG_FILTER_ALL => Tous les messages sont envoyés

Le 4eme parametre indique le niveau auquel la configuration de la log doit etre appliqué (dans ce cas au niveau du module). Ca peut etre fait soit :
- Au niveau du module (global)
- Au niveau d'une zone (auquel cas, cela "overidera" les parametres globaux)


Ensuite dans vos scripts il suffit d'employer la fonction WriteLog pour envoyer des messages à la log :
#include "s_global"
void main()
{
// la porte se ferme
WriteLog("La porte de se ferme", LOG_DEBUG);
SetLocked(GetObjectByTag("dt_CastodelToDodie"), TRUE);
}
(Pensez bien à ajouter la 1ere ligne #include dans votre script)

Dans ce cas la fonction WriteLog envoi un message de debug
Le premier parametre est le texte du message.
Le 2eme parametre indique le type de message envoyé :
LOG_ERROR => indique un message d'erreur
LOG_INFO => indique un message d'information (quete, achat, ...)
LOG_DEBUG => indique un message de debug

Le 3eme parametre indique, si nécessaire, à quel joueur le message s'applique. Dans ce cas, le nom, l'ip et la clé du joueur seront consignés dans la log.


Voici enfin le script s_global à mettre dans votre module :////////////////////////////
// FileName a_inc_global //
////////////////////////////
// Created By: Gargantuel //
// Created On: 24/07/2002 //
////////////////////////////
// Mode de fonctionnement de la log
int LOG_OFF = 100; // desactive le mode debug
int LOG_FILE = 110; // debug dans le fichier de log
int LOG_DM = 120; // debug envoyé au fichier de log et aux DMs
int LOG_ALL = 130; // debug envoyé au fichier de log, aux DMs et aux joueurs

// Niveau de gravite des logs
int LOG_ERROR = 10; // Message d'erreur
int LOG_INFO = 20; // Message d'information
int LOG_DEBUG = 30; // Message de debug

// Filtre d'affichage des logs
int LOG_FILTER_NONE = 0; // n'affiche rien a l'ecran
int LOG_FILTER_ERROR = 10; // affiche juste les erreurs
int LOG_FILTER_INFO = 20; // Affiche les erreurs et les informations
int LOG_FILTER_ALL = 30; // affiche erreurs, infos et debug

// Nom des variables locales
string LOG_NAME = "GlobalLog"; // Variable locale pour les logs affectee au module
string LOG_FILTER_DISPLAY_NAME = "GlobalFilterDisplay"; // filtre d'affichage affectee au module
string LOG_FILTER_PRINT_NAME = "GlobalFilterPrint"; // filtre d'impression affectee au module

// Fonction permettant d'activer ou de desactiver la log
// et d'appliquer des filtres sur les messages
// Soit la fonction doit etre appelée à partir d'un OnModuleLoad d'un module ou d'un OnEnter d'une "area"
// Soit l'objet passé en parametre doit etre un module ou une zone
// Par defaut iMode=LOG_DM, iFilterDisplay=LOG_FILTER_ERROR, iFilterPrint=LOG_FILTER_INFO
void SetGlobalLog(int iMode=20, int iFilterDisplay=10, int iFilterPrint=20, object oObject=OBJECT_SELF)
{
if (GetIsObjectValid(oObject))
{
SetLocalInt(oObject, LOG_NAME, iMode);
SetLocalInt(oObject, LOG_FILTER_DISPLAY_NAME, iFilterDisplay);
SetLocalInt(oObject, LOG_FILTER_PRINT_NAME, iFilterPrint);
string sTextToPrint = "[LOG] Log activé à " + IntToString(iMode) + " avec un filtre d'affichage a " +
IntToString(iFilterDisplay) + " et un filtre d'impression a " + IntToString(iFilterPrint) +
"pour l'object " + GetName(oObject);
WriteTimestampedLogEntry(sTextToPrint);
} else
{
string sTextToPrint = "[LOG] [ERROR] Erreur d'activation de la log. La fonction SetGlobalLog a été utilisé de manière incorrecte.";
WriteTimestampedLogEntry(sTextToPrint);
}
}

// Fonction permettant d'envoyer du texte en mode debug
// Par defaut iLevel=LOG_INFO
void WriteLog(string sText, int iLevel=20, object oPC=OBJECT_INVALID)
{
object oArea = GetArea(OBJECT_SELF);
object oObject;

// Vérification si les parametres de log ont été overidés au niveau de la zone en cours
if (GetIsObjectValid(oArea) && GetLocalInt(oArea, LOG_NAME) > 0)
{
// Les parametres ont été overidés au niveau de la zone
oObject = oArea;
}
else
{
// On prends le parametrage global du module
oObject = GetModule();
}

// Recuperation du parametrage de la log
int iMode =GetLocalInt(oObject, LOG_NAME);
int iFilterDisplay = GetLocalInt(oObject, LOG_FILTER_DISPLAY_NAME);
int iFilterPrint = GetLocalInt(oObject, LOG_FILTER_PRINT_NAME);

// Si la log est superieure a 0 on prepare le message a ecrire/afficher
if (iMode > LOG_OFF)
{
// Preparation des messages
string sTextToPrint = "[LOG] ";;
string sTextToDisplay;

// Ajout du niveau de gravite du message
if(iLevel == LOG_INFO)
{
sTextToPrint += "[INFO] ";
sTextToDisplay = "[INFO] ";
} else if(iLevel == LOG_ERROR)
{
sTextToPrint += "[ERROR] ";
sTextToDisplay = "[ERROR] ";
} else if(iLevel == LOG_DEBUG)
{
sTextToPrint += "[DEBUG] ";
sTextToDisplay = "[DEBUG] ";
} else
{
sTextToPrint += "[UNKNOW] ";
sTextToDisplay = "[UNKNOW] ";
}

// Ajout des informations du joueur
if (GetIsPC(oPC))
{
sTextToPrint += " ";
sTextToDisplay += " - ";
}

// Ajout du texte
sTextToPrint += sText;
sTextToDisplay += sText;


// Si le filtre est compatible on ecrit la log dans le fichier
if (iLevel LOG_FILE && iLevel LOG_DM)
{
object oPCMessage = GetFirstPC();
while (GetIsPC(oPCMessage))
{
SendMessageToPC(oPCMessage, sTextToDisplay);
oPCMessage = GetNextPC();
}
}
}
}
}

JOL Archives 1.0.1
@ JOL / JeuxOnLine