Hi.
I'm working on my small TERA server pet-project. Thanks to releases found here I finished DataCenter and Opcodes procssing and currently stuck on ingame system messages.
TERA System Messages system has two parts:
1. Mapping readableId to system message localized text in StrSheet_SystemMessage. ReadableID always unique and persistent between updates.
2. Mapping index to readableId in TERA.exe. Thy change(shift) when new messages added.
CheatEngine screenshot https://puu.sh/rflzZ.png
In S_SYSTEM_MESSAGE server sends index of system message, which being translated to readableID and looked in strsheet table for translation. Sniffer view https://puu.sh/rfoSJ.png
Hardcoding indexes is bad because they all can change after update. Thats why I use readableId instead, but this method requires more preparations.
I'm stuck on trying to figure out how to reconstruct original indexes of system messages for almost a week by now.
Simple operations like dumping SMT_ prefixed strings and starting numeration from 0 won't work. My tries to find code responsible for message lookup failed too (my reverse engineering skills not that good).
Update 20.09. I've found "Real" translation table in binary file. https://puu.sh/rh5OY.png But don't know how to dump them yet... Will try similar to opcode dumper method to make it automated (like auto datacenter decryptor)
Update 20.09 I've finally made a dump of them after locating GetMessageName function Used code from opcodesextractor.
I'm working on my small TERA server pet-project. Thanks to releases found here I finished DataCenter and Opcodes procssing and currently stuck on ingame system messages.
TERA System Messages system has two parts:
1. Mapping readableId to system message localized text in StrSheet_SystemMessage. ReadableID always unique and persistent between updates.
Code:
<String string="Welcome to TERA. Go to TERA.enmasse.com for news and information." delayTime="0.0" effect="-1" sound="-1" style="SMS_CHAT_INFO" readableId="SMT_PLAYTIME_START" chatChannel="201" displayChat="True"/>
<String string="The post has arrived." delayTime="0.0" effect="-1" sound="2008" style="SMS_CHAT_INFO_CHAT_ONLY" readableId="SMT_PARCEL_RECEIPT" chatChannel="201" displayChat="True"/>
Code:
start of table with readableids (NA latest client)
02099448 - SMT_DUNGEONMATCHING_BEGINNER
02099484 - SMT_UNION_SHARED_ACTIVITY_COST
020994C4 - SMT_INVEN_EXTENSION_SUCCESS
020994FC - SMT_DUNGEONMATCHING_RETRIABLE
ends with
020E0E98 - SMT_LOAN_INTEREST_PAYMENT_LOANEE
022BF618 - SMT_%s
valid indexes (collected manually)
464;SMT_MAX_ENCHANT_SUCCEED
888;SMT_PLAYTIME_START
1770;SMT_FRIEND_IS_CONNECTED
In S_SYSTEM_MESSAGE server sends index of system message, which being translated to readableID and looked in strsheet table for translation. Sniffer view https://puu.sh/rfoSJ.png
Hardcoding indexes is bad because they all can change after update. Thats why I use readableId instead, but this method requires more preparations.
I'm stuck on trying to figure out how to reconstruct original indexes of system messages for almost a week by now.
Simple operations like dumping SMT_ prefixed strings and starting numeration from 0 won't work. My tries to find code responsible for message lookup failed too (my reverse engineering skills not that good).
Update 20.09. I've found "Real" translation table in binary file. https://puu.sh/rh5OY.png But don't know how to dump them yet... Will try similar to opcode dumper method to make it automated (like auto datacenter decryptor)
Update 20.09 I've finally made a dump of them after locating GetMessageName function Used code from opcodesextractor.
Last edited: