Log Parser

Résolu
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012 - 11 juin 2012 à 16:42
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012 - 15 juin 2012 à 00:23
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

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 juin 2012 à 15:43
Salut,

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


[hr]@+Cirec
[hr]
3
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
11 juin 2012 à 16:47
En fait pour "rift junkies" c'est incomplet, cherchez "Rift junkies combat parser".

Cordialement.

Christophe
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
12 juin 2012 à 11:37
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
0
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
12 juin 2012 à 17:16
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
12 juin 2012 à 23:16
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
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
12 juin 2012 à 23:47
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
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 juin 2012 à 13:50
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
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
13 juin 2012 à 17:35
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
0
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
14 juin 2012 à 05:34
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.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
14 juin 2012 à 16:52
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]
0
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
15 juin 2012 à 00:23
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
0
Rejoignez-nous