C# - Read FFXIV log files and in-game chat menu

User Tag List

Results 1 to 5 of 5
  1. #1
    Dyr Fenrir's Avatar Member
    Reputation
    1
    Join Date
    Feb 2015
    Posts
    3
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    C# - Read FFXIV log files and in-game chat

    Greetings,

    I am looking for help in C# coding to be able to read the content of the FFXIV log folder as well as the game's memory chat entries.

    I am new to C# coding and this is a little project I am starting.

    I am willing to learn and I need the help of someone really more experienced than me in coding to achieve this as it requires to read memory addresses which I have never done.

    Can someone help me out?

    Thanks a lot for your time and help.

    Here is my progress so far:

    I have been trying, during the weekend, to find the memory address for the chat log, just to get started.

    I was able to find one and even do a pointer scan, but I cannot get the time stamp.

    According to the log files, the structure in the memory should be the following (the log files are memory dumps):

    https://i.imgur.com/by3VaAX.png

    Any hints as to how I could find the exact location of the time stamp, type of chat and then the message string in the game's memory?

    I was able to find this on another website as well:

    "The chat log is a memory dump of the internal text table when it rolls off. It takes 1000 lines to roll off and only when this roll off occurs is the log dumped to the file. So, the log is not "live" and if you log off you lose everything in memory (they are not written out). So defeats the purpose of building an app around the logs.

    Either way, I wrote an audio trigger app during beta (chatmon 2), that I currently only distro between my fc. Here is what I discovered about the chat line, which I will share here.

    •delimited by 3 colons: STAMPCHANNEL:SENDER:TEXT
    •sender can be empty

    TIMESTAMP = first 8 hex characters (4 bytes) Filter = 9th byte Channel = 10th byte

    51C4A21C0839::Player joins the party.

    51C4A242000C: tell TO Player

    51C4A6B5000D: tell from Player

    51C4A23B000B: [02 27 05 01 01 01 01 03] Player [02 27 05 CF 01 01 01 03] :anyone got visual on goblin muggers and coords ?

    51C686B7103E:: [02 27 05 01 01 01 01 03] Player [02 27 05 CF 01 01 01 03] successfully converts the [02 13 06 FE FF F3 F3 F3 03]decorated bone staff [02 13 02 EC 03] into an [02 13 06 FE FF F3 F3 F3 03] ice materia I [02 13 02 EC 03].

    filter = where it was sourced from (other, party, system, etc), and channel is the type

    Known channels: 03 - motd / server announcements 0A - say 0B - shout 0C - outgoing tell 0D - incoming tell 0E - party 10 - linkshell 18 - Free company 1D - Emote 1E - Yell 29 - Incoming Damage 2A - Incoming Miss / No effect / Resist 2B - Player/Enemy finished using/casting ability 2C - Player uses food (or item?) 2D - -> Player recovers HP. 2E - Player loses/gains <buff> 2F - Player/Enemy suffers from <effect> 38 - Echo 39 - Notification EX: item equipped / instance has ended / area is no longer sealed / You have entered a sanctuary. // you sell an item // party leader registered for duty // item put in armory // loot list updated // joined party // quest accepted 3A - You/other defeats/is defeated 3C - Error EX: cannot change gear, cannot send tell in when in duty 3D - NPC Chat 3E - You/Other obtains/converts an item 40 - You/other gain exp/level 41 - You/Other rolls on an item 45 - Player has logged in/out A9 - Outgoing Damage AA - Outgoing Miss / No effect / Resist AB - Player/Enemy readies/casting ability AE - -> You/Other gain/lose the effect of <buff>. AF - -> You/Enemy suffers from <effect> BA - Player/Enemy defeated

    Tokens aka "garbage": * byte 1 is the header [02] * byte 2 is the type 0x27 = name 0x13 = color change. payload: [?? ?? RED GRN BLU 03] 0x2E = auto translate * byte 3 is the size of the remaining payload, including terminator [03]

    [02 27 05 01 01 01 01 03] name start [02 27 05 CF 01 01 01 03] name end [02 13 06 FE FF F3 F3 F3 03] item start (white) color = F3F3F3 [02 13 06 FE FF FA 89 B6 03] item start (purple) color = FA89B6 [02 13 02 EC 03] item end (reset)

    [02 2E 05 09 F2 03 CE 03] translate: (Roegadyn) [02 2E 05 0A F2 05 10 03] translate: (/disappointed)

    Text is UTF-8 encoded:

    [EE 80 BC] U+E03C - little materia symbol at end of "attaches" message [EE 81 AF] U+E06F - litte -> arrow next to battles stuff"

    C# - Read FFXIV log files and in-game chat
  2. #2
    Dyr Fenrir's Avatar Member
    Reputation
    1
    Join Date
    Feb 2015
    Posts
    3
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Greetings,

    After trying a little bit again, I was able to find the right memory location for the timestamp + the text that appears in the log.

    Although, it's a dynamic address, and what I am having issues finding is the "legend" or the base address. You can see what I mean in the picture I provided, the part in memory where it tells the length of the strings.

    The memory location is just like the log file, but text is added right after the previous one and at some point it dumps the memory content to the log files (I think it's at 1000 lines), so the address will reset completely at this point.

    Without the base address, I cannot get just the new line and parsing a text that can reset at any moment, it can be tricky.

    Anyone could help me out to find the base address please?

    I could mess with pointers in Cheat Engine, but I prefer checking the memory directly, although I have no idea as to where to look for that "legend" part. It gives me an insane amount of results if I do it that way.

    I am looking to do this the right way, and I also want to understand so I don't have to ask next time.

    Thanks a lot for your time and help again.

  3. #3
    codezzie's Avatar Sergeant
    Reputation
    14
    Join Date
    Apr 2010
    Posts
    48
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Look at ffxivapp src for the memory address they use.

  4. #4
    kidz14's Avatar Member
    Reputation
    1
    Join Date
    Jun 2016
    Posts
    4
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    well not sure if this reply is to late, but I've been working on a similar project myself. I figure maybe i can just link you my source and you can peek around. although i wasn't interested in the log files themselves, for me it was all about reading it from memory, also got the char name, HP, MP, GP, TP loading in the title bar as well. Also included is a keyboard.dll file that you can use to send text to the game in the background, and I've also included my own hard coded keyboard events that you can check out as well (only thing is my hard-coded keyboard function can't do two keys at a time ie: ctrl+5 so that's why the keyboard.dll is in the debug folder). I'm not a pro or nothing just thought it might help to see it then to try to explain it, from what I've been reading you seem to maybe even have a better idea of it's structure then i do. But it's not a single pointer you're looking for, ffxiv has what's know as multiple pointers aka pointer chains, and from what i can tell I've been finding the chatlog using the base pointer and three offsets to get to what i actually need (you'll see what i mean when you peek at the timer function and see how I've set it up in there.).

    If you need anything else you can reach me on hangouts @ t3chnicald3ath , not sure i'll have all the answers but two heads are better then one.

    Teknicalz Picker Up'r.rar
    Last edited by kidz14; 06-10-2016 at 02:32 PM.

  5. #5
    kidz14's Avatar Member
    Reputation
    1
    Join Date
    Jun 2016
    Posts
    4
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Another thing you might want to do is take a peek at icehunter's ffxiv memory API that was made for the ffxiv app, it's not 100% working but I as able to get party info right off the bat without changing anything(at least member 0 of the array loads ok), and as i was going through the code of the dll I've learnt a lot about ffxiv memory signatures and also how to use the pointers I already had with it, now I'm able to load all inventories, player info, chatLog info, as well as all NPCs & Monsters around me.

Similar Threads

  1. [Buying] Buying massive FFXIV gil for real money,trading cd keys and in-game gold for gil
    By Shayeeda in forum Final Fantasy XIV Buy Sell Trade
    Replies: 412
    Last Post: 12-10-2016, 08:32 AM
  2. [Diablo3] MPQ game files and *.gam file info
    By Muaziz in forum Diablo 3 Memory Editing
    Replies: 8
    Last Post: 05-19-2012, 10:19 AM
  3. Replies: 5
    Last Post: 06-14-2009, 06:09 AM
  4. Cheaters and Gms log files
    By onelastsin in forum WoW EMU Guides & Tutorials
    Replies: 5
    Last Post: 01-25-2009, 11:35 PM
All times are GMT -5. The time now is 06:56 AM. Powered by vBulletin® Version 4.2.3
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search