Log Parser [Résolu]

Signaler
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012
-
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012
-
Bonjour,

Grand amateur de MMORPG je joue régulièrement à Everquest et Rift.
Je souhaite, notamment pour Everquest, programmer un parser d'un fichier log pour en retirer 2 choses :

- ce qu'on appelle le kikimeter ou dps parser
- un text trigger pour declencher des alertes à partir de messages particuliers.

Seulement voilà je ne sais pas par quel bout commencer. Je sais manipuler un fichier, naiviguer à l'intérieur mais ce que je ne sais pas c'est récupérer un évènement à partir du fichier.
Par exemple, à chaque dommage opéré à la cible, chaque sort incanté ... une ligne de texte est ajoutée au fichier log, ce que j'aimerai savoir donc est comment savoir qu'une nouvelle ligne de texte à été ajoutée au log afin d'en récupérer les infos et de pouvoir créer mon parser personnel (le dernier dédié à Everquest date de 4 à 5 ans).

Pour ceux qui ne connaitraient pas ce qu'est un parser log vous pouvez avoir un apercu en cherchant "advanced Combat Tracker" , "Rift junkies" , "EQ Companion" (celui dont je parlais pour EQ).

Merci de me renseigner ou me diriger vers cet exercice nouveau pour moi car je pars de 0 sur ce projet.

Christophe

11 réponses

Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020
29
Salut,

pour surveiller les modifications de fichiers dans un répertoire donné ... une piste par ici:
SURVEILLANCE D'UN RÉPERTOIRE


[hr]@+Cirec
[hr]
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

En fait pour "rift junkies" c'est incomplet, cherchez "Rift junkies combat parser".

Cordialement.

Christophe
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
Bonjour,

Le mieux serait de déposer ce fichier ou un extrait dont tu veux assurer la surveillance.

et de préciser l'information et sa structure qui peut-être ajoutée à tout moment sur ce log.

cantador
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

Bonjour,

Tout d'abord merci pour la réponse.
Déposer le fichier ne changerait rien à ma demande, le log contient en fait toutes les actions de combat effectuées dans le jeu
- joueur X tape monstre Y pour 250 dommages
- Joueur Z commence à incanter sort Z1 ...

En fait je me charge de cette partie, ce que je cherche c'est comment savoir à quel moment mon programme pourra aller traiter une nouvelle entrée.
Je pense être sur une piste avec TStreamData mais je n'ai pas trouvé d'exemple sur le site.

Pour schematiser je souhaite :

1) Programme surveille le fichier EQ_NomDuJoueur.log
2) Une entrée est effectuée dans le fichier par le jeu (sous forme d'une ligne ascii dont voici un exemple)


[Tue Jun 12 13:12:00 2012] Jenekab kicks an emerald scale drake for 74 points of damage.
[Tue Jun 12 13:12:00 2012] Shaix scores a critical hit! (996)
[Tue Jun 12 13:12:00 2012] Jenekab bites an emerald scale drake for 120 points of damage.
[Tue Jun 12 13:12:01 2012] Shaix`s warder scores a critical hit! (990)
[Tue Jun 12 13:12:01 2012] Shaix`s warder scores a critical hit! (990)
[Tue Jun 12 13:12:01 2012] Your Elegant Defiant Chain Leggings shimmers briefly.
[Tue Jun 12 13:12:01 2012] You begin casting Malosinatia.
[Tue Jun 12 13:12:02 2012] Jenekab bites an emerald scale drake for 35 points of damage.
[Tue Jun 12 13:12:02 2012] Jenekab tries to bite an emerald scale drake, but an emerald scale drake dodges!
[Tue Jun 12 13:12:02 2012] Jenekab tries to bite an emerald scale drake, but an emerald scale drake dodges!
[Tue Jun 12 13:12:02 2012] Jenekab tries to bite an emerald scale drake, but misses!
[Tue Jun 12 13:12:02 2012] Shaix scores a critical hit! (606)


3) Le programme détecte que des données viennent d'être ajoutées au fichier log (c'est ce que je cherche ! comment être prévenu ?)
4) Le programme traite les données ( début du combat, dommages par secondes, statistiques...)
5) Le programme déclenche une alarme par affichage en overlay dans la fenêtre du jeu (un sort vient d'expirer, un buff vient d'être lancé ...)
6) Goto 1

J'espère être suffisamment clair car il est évident que je comprends mon charabia de gamer ce qui ne l'est peut être pas par un autre.

Je continue en // de me pencher sur le problème.

Cordialement.
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
Bonsoir,

ce n'est pas compliqué..
il faut deux choses que ce soit :

- rapide (car c'est un jeu) et
- indépendant

donc, il te faut effectivement une lecture de chaine
en STREAM (détection d'apparition de chaine dans une chaine)
et
un bon gros THREAD pour ne pas altérer le déroulement du jeu


cantador
Messages postés
637
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2
Bonsoir,

J'ajouterai une idée à celle de cantador:

1) celle de déceler un changement, une modification dans le fichier.
Pour cela soit tu utilise la date de modification d'un fichier, soit éventuellement, la taille de ton fichier ou le nombre de ligne..;

Yo

Jean_Jean
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
oui Jean_Jean

Donc, si on résume tu n'as que des fonctions qui sont déjà existantes
avec un peu de traitement de chaine de caractère

Reste aussi à traduire l'évènement et à le communiquer au joueur et de quelle manière ?

mais là c'est ton truc..

cantador
Messages postés
637
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2
Intéressant ce code Cirec en Thread en plus!
Mais je crois que Christophe ne souhaite surveiller qu'un seul fichier...

Il suffit dans ce cas d'appliquer éventuellement un flitre supplémentaire pour les bonnes extensions par exemple...

J'ai essayé ce bout de code issu de cette pagequi utilise la Dll Kernell32 par l'interfaçage de windows. Je vais en faire un snippet s'il ça n'existe pas encore:

HFILE OpenFile(
  LPCSTR lpFileName,
  LPOFSTRUCT lpReOpenBuff,
  UINT uStyle
);

L'aide précise : uStyle est un entier qui représente des constantes du mode d'utilisation de la fonction:
En choisissant OF_SHARE_DENY_NONE, tu permettra au fichier l'accès à d'autres processus d'utiliser le fichier.


Jean_Jean
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

Bonsoir,

Tout d'abord merci de vous pencher sur mon problème.

Le lien de Cirec ne fonctionne pas chez moi.
J'ai trouvé une piste ici : Surveillance d'un repertoire par Nono40
Cela semblait être pile ce que je cherchais mais après avoir testé il semble que cela ne fonctionne pas sous Win7 (l'auteur marque que c'est prévu pour WIn NT mais comme c'est ancien je pensais que l'api fonctionnerait quand même).

Je continue ma recherche.

Cordialement.
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020
29
Re,

1°) le lien que j'ai donné est exactement le même que le tien !!!! je ne vois donc pas ce qui peut empêcher son fonctionnement ... bizarre.

2°) le code fonctionne très bien sur XP, Vista et Seven (J'ai testé les 3. compilé sous D7)
Maintenant si tu utilises un Delphi >= D2009
il faut l'adapter à l'Unicode. Mais le code fonctionne


[hr]@+Cirec
[hr]
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

Bonsoir à tous,

1) Un lag serveur éventuellement qui faisait que le lien ne s'affichait pas, j'ai réessayé ce soir et en effet çà tombe sur la page de Nono40
2) J'ai testé uniquement pour voir s'il fonctionnait rien qu'avec le jeu, je vais retester de façon plus complète.
En effet je compile sous Delphi XE2 Pro.

Je vais clore le sujet à moins que vous ayez des exemples ou idées d'autres approches.

Merci de votre participation.

Cordialement