Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by Brainy

  1. Just downloaded the classic demo client for the blizzcon. What are your thoughts? Will I see some of you on demo servers?
  2. I want to work on a 'new classic' TrinityCore
  3. Brainy

    Making of TC

    Hey Undyne, I know this answer comes late but propably it may help you a bit. At first I wanna make clear, that I'm not a professional on this topic. I know something but not as much as e.g. Shauren. Yes you're right. There was no leak. The software has been written from scratch. The game itself is delivered as common executable binary file and many assets such as 3d models, maps and their terrain information, a client database, images/videos and the ui (the ui components are delivered as addon such as the third party addons). The most important part of the client data are: Maps Client Database I don't know much about the map files and can't tell you something about their structure but their are used to create server side map information for collision calculation and path finding of npcs. The client database contains static information about some ingame content. In 3.3.5 the client database tables are stored in DB2 and DBC files. The files contain information about spells, skills, races, basic item stuff and much more things. Other data for example quests, loot, ingame objects like creatures or gameobjects and their spawn positions are not available in dbc files. Last year I've written a small php library for DB2 file reading. Maybe this is interessting for you https://github.com/Caydan/php7-db2 Client and server communicates via a tcp connection. The traffic of this connection can be catched and evaluated. Each message has an own id in its header. TrinityCore call these ids opcodes. They are used to identify a message which allows us to read the message into the right structure. A list of all patch 3.3.5 opcodes can be found here https://github.com/TrinityCore/TrinityCore/blob/3.3.5/src/server/game/Server/Protocol/Opcodes.h The CMSG prefix means client to server message. SMSG means server to client message. Here an example for you: A player walks through the world and meets a quest giver. The client doesn't know anything (title, description, rewards etc) about this quest but its ID (let it be the ID 120). The client sends now a message CMSG_QUEST_QUERY which contains the ID 120 to the server. The server answers to this request with SMSG_QUEST_QUERY_RESPONSE which contains all information the client needs to display the quest. It is possible to catch the traffic between client and server on retail realms and use the messages to populate the server side database. TrinityCore uses https://github.com/TrinityCore/WowPacketParser to parse the raw data into text files which are readable to humans or in some cases directly into SQL. The opcodes are changing very often when the client gets updated. Also there are information inside the messages which have to be interpreted. Blizzard likes it to use flags e.g. the npc flags. The npc flags can be used to tell a creature to be a vendor, questgiver, inkeeper, banker etc. Blizzard stores this information as 32 bit integer. All these opcodes, the meanings of every bit of a bitmask or different enums are not provided by Blizzard. All these information has to be gathered by reverse engineering the Wow.exe. This can be done by loading the executable into a disassembler like IDA. It will translate the machine code into assembly. Now you have to research millions of lines of assembly code and try to understand what it does, how the client interpretes different messages etc. This kind of research is very fascinating but can also be very frustrating. Hopefully I was able to help you a bit. Cheers
  4. If you tell me what exactly you wanna do, I will write down a small script which does it. Do you just want to renumber the account ids to use unused account ids? Or do you simply want to merge two account databases?
  5. Just change the account ids and database names for following queries and run it on your mysql console. Be sure that no user is logged into the affected account while you're changing the ids. SET @OLD_ACCOUNT_ID := XXXXXX; SET @NEW_ACCOUNT_ID := XXXXXX; UPDATE auth.account SET id = @NEW_ACCOUNT_ID WHERE id = @OLD_ACCOUNT_ID; UPDATE characters.characters SET account = @NEW_ACCOUNT_ID WHERE account = @OLD_ACCOUNT_ID;
  6. Can someone give me the address offsets for packet send/receive functions in x86/x64 client?
  7. You can also buy very cheap dedicated servers at https://www.kimsufi.com (its an OVH company)
  8. I still don't understand why you are using an old 7.1.5 version. Upgrade your TrinityCore to the HEAD commit and connect with the 7.2.5 client.
  9. Use the latest TrinityCore for client version 7.2.5
  10. Check the address in your auth.realmlist table. It must be your public IP
  11. To answer your question. Yes it isnt a problem to install both libraries. But please notice that you are using an unsupported version of trinitycore
  12. In world database you will find different character template tables. Just put your data inside. After that you can use the template system on the character selection screen. I'm not sure but maybe you must apply a rbac permission before you are able to use it. But maybe its just at my local branch.
  13. Create a custom item and write an ItemScript which levels the user. You can also create a custom spell with a dummy effect using hotfixes. Then just create a spell script and let your custom item use the created spell.
  14. Brainy


    Maybe nobody wants to update it or just doesn't have time But seriously if there really are issues with 7.3.0 it would be nice to know which kind of issues
  15. I've found this article https://hackmag.com/uncategorized/deceiving-blizzard-warden/ Topic can be closed
  16. I wanna start to do some research for Warden. Does I understand it right, that the server sends information about an offset and the data length to check to the client, the client checks its memory for that offset and sends the result to the server? What does warden_checks.type mean? How it is possible to protect the warden responses from getting manipulated? Is there any technical documentation for Warden? Thanks in advance!
  17. Ah I understand. Thank you very much for your help!
  18. Ok understand. Thanks you Shauren. But now I have another question. For the AreaTable.db2 I can read this header DB2Header Object ( [magic] => WDB5 [recordCount] => 5564 [fieldCount] => 23 [recordSize] => 56 [stringTableSize] => 158430 [tableHash] => 1918102339 [layoutHash] => 886938365 [minId] => 1 [maxId] => 8623 [locale] => 1 [copyTableSize] => 0 [flags] => 262144 [idIndex] => 0 ) You see the recordSize of 56 but if I count the bytes of the structure excepting the ID field, it will be 58 bytes long. How is this possible?
  19. I did another test with ChatChannels.db2. It seems that the total amount of bytes in a record modulo 4 must be 0. So I've implemented following logic $bytesToSkip = 4 - ($recordSize % 4); if ($bytesToSkip != 4) $this->reader->skip($bytesToSkip); Is this correct or just a bad hack? EDIT#1: In general it seems to work [records:protected] => Array ( [0] => DB2\DB2Record Object ( [id:protected] => 1 [fields:protected] => Array ( [0] => 1572875 [1] => General - %s [2] => General [3] => 0 ) ) [1] => DB2\DB2Record Object ( [id:protected] => 2 [fields:protected] => Array ( [0] => 1048635 [1] => Trade - %s [2] => Trade [3] => 0 ) ) .....
  20. Hey a few hours ago I've started writing a PHP library to access the db2 files of the current WoW client. To test my library I've implemented the structure of CharTitles.db2. This looks like that: class CharTitles extends DB2File { public function __construct(File $file) { parent::__construct(new BinaryReader($file->getBuffer())); } public function getStructure() : array { return [ DB2File::FIELD_STR, DB2File::FIELD_STR, DB2File::FIELD_INT16, DB2File::FIELD_BYTE ]; } public function hasIndexFieldInData() : bool { return true; } } I've taken the structure from the current trinitycore version. If I load the file now, I'll just get one correct record (the first one). The others are containing bad data. The reason for this is a single byte after each record so if change the structure to this DB2File::FIELD_STR, DB2File::FIELD_STR, DB2File::FIELD_INT16, DB2File::FIELD_INT16 all will work as it should. Now my question. What exactly is that byte after each record? Is it a kind of seperator or is the structure of the current trinitycore just outdated? Thanks in advance!
  21. Brainy

    low dps

    Thank you for this very detailed report but you should use the issue tracker on github to get support for such a huge bug. Cheers
  22. You can try to compile with http://www.mingw.org/ but I guess it is not supported by TC. I believe you are able to change the compile for C and C++ applications by a simple export. export CC=C_COMPILER_NAME CXX=C++_COMPILER_NAME But why you don't build the project on a windows maschine? Should be easier.
  23. take a look at https://github.com/TrinityCore/TrinityCore/blob/6.x/doc/LoggingHOWTO.txt
  24. https://github.com/TrinityCore/TrinityCore/tree/3.3.5/sql/base
  25. Brainy

    CLion IDE

    Hi TrinityCore Community, a few weeks ago I was enraged and have uninstalled my Windows and installed Ubuntu again. Now I was looking for a good IDE for Ubuntu. In the past I've used Eclipse but the CMake support is really bad and you have to setup a lot of things before you're able to compile and debug trinitycore. Therefore I was looking for a new IDE and I found CLion created by JetBrains. CLion uses a native implementation of cmake for projects. Compilers and GDB are already configured. The only thing you have to do is defining some cmake parameters. CLion is a commercial software but for students and members of open source projects it is free. You can get a 30 days trial version from their website. Maybe there are some other linux users who have enough of Eclipse^^ Give this IDE a chance. It is really nice! https://www.jetbrains.com/clion/ Best regards Brainy
  • Create New...