• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Does someone have the exaclty 8.6 tbia.dat bytes structure or tibia 8.6 dat protobuf file?

Lucas Alfare

New Member
Joined
May 20, 2019
Messages
6
Reaction score
1
I'm working in some parsers and I wondering to know if this can be used to read the bytes of the 8.6 version.

Also, by following the link, I tried perform the protobuf file and got this:
Code:
syntax = "proto2";

message DatFile {
    repeated Appearance objects = 1;
    repeated Appearance outfits = 2;
    repeated Appearance effects = 3;
    repeated Appearance missiles = 4;
}

message Appearance {
    required uint32 clientID = 1;
    repeated FrameGroup frameGroups = 2;
    required Attributes attributes = 3;
}

message FrameGroup {
    required uint32 fixedFrameGroup = 1; // ?
    required uint32 id = 2; // ?
    required SpriteInfo spriteInfo = 3;

    message SpriteInfo {
        required uint32 patternX = 1;
        required uint32 patternY = 2;
        required uint32 patternZ = 3;
        required uint32 layers = 4;
        repeated uint32 spriteIDs = 5;
        repeated SpriteAnimation animations = 6;
        optional uint32 cropSize = 7;
        optional bool isOpaque = 8;
        optional Size size = 9; // size does not seem to appear at all

        message SpriteAnimation {
            enum ANIMATION_LOOP_TYPE {
                ANIMATION_LOOP_TYPE_PINGPONG = -1;
                ANIMATION_LOOP_TYPE_INFINITE = 0;
                ANIMATION_LOOP_TYPE_COUNTED = 1;
            }

            optional uint32 startPhase = 1;
            optional bool synced = 2;
            optional bool randomStartPhase = 3 [default=false];
            required ANIMATION_LOOP_TYPE loopType = 4;
            optional uint32 loopCount = 5;
            repeated SpritePhase phases = 6;

            message SpritePhase {
                required uint32 minDuration = 1;
                required uint32 maxDuration = 2;
            }
        }

        message Size {
            required uint32 width = 1;
            required uint32 height = 2;
        }
    }
}

//all the flags I took from topic above
//note that doesn't exists any market data there/here
message Attributes {

    optional Ground groundTile = 0x1;
    optional bool onTop = 0x2;
    optional bool walkThroughA = 0x3;
    optional bool walkThroughB = 0x4;
    optional bool container = 0x5;
    optional bool stackable = 0x6;
    optional bool ladder = 0x7;
    optional bool usable = 0x8;
    optional bool rune = 0x9;
    optional Writable writable = 0xa;
    optional Readable readable = 0xb;
    optional bool fluidContainer = 0xc;
    optional bool splash = 0xd;
    optional bool blocking = 0xe;
    optional bool immovable = 0xf;
    optional bool blockMissile = 0x10;
    optional bool blockMonsterMovement = 0x11;
    optional bool equipable = 0x12;
    optional bool hangableWallItem = 0x13;
    optional bool horizontalWallItem = 0x14;
    optional bool verticalWallItem = 0x15;
    optional bool rotateable = 0x16;
    optional Light lightInfo = 0x17;
    optional bool unknown1 = 0x18;
    optional bool floorChangeDown = 0x19;
    optional DrawOffset drawOffset = 0x1a;
    optional Height height = 0x1b;
    //big to hold description..
    optional bool drawWithHeightOffsetForAllParts2x2OfTheSprite = 0x1c;
    optional bool offsetLifeBarForLArgeMonsters = 0x1d;
    optional MinimapColor minimapColor = 0x1e;
    optional FloorChange floorChange = 0x1f;
    optional bool unknown2 = 0x20;

    message Ground {
        required uint32 speed = 1;
    }

    message Writable {
        required uint32 maxTextLength = 1;
    }

    message Readable {
        required uint32 maxTextLength = 1;
    }

    message Light {
        required uint32 level = 1;
        required uint32 color = 2;
    }

    message DrawOffset {
        required uint32 xOffset = 1;
        required uint32 yOffset = 2;
    }

    message Height {
        required uint32 drawHeight = 1;
    }

    message MinimapColor {
        required uint32 color = 1;
    }

    message FloorChange {
        //big to hold the description..
        required uint32 openableHole86canBeUsedToGoDown77canBeUsedToGoUp76stairsUp82switch79 = 1;
        required uint32 thisMustAlwaysReturn4 = 2;
    }
}

However, this made got some exceptions after using the generated file from the protobuf compiler, such this:
Code:
Exception in thread "main" com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.

Then, someone can help fix this or even present me the real 8.6 dat structure?

Thanks in advance!
 
Item editor from mignari has support for 8.6
I'm trying to get bytes information by my own code, because this I'm trying to understand the dat structure.

8.6 didnt use protobuf yet, it started with Tibia 11
Ohh... Maybe I thought was possible use protobuf for parse any kind of bytes structure, in this case only create the correct fields for the given structure...

But, the post that I referred can be used as reference for building a reader for 8.6 dat file?
 
I'm trying to get bytes information by my own code, because this I'm trying to understand the dat structure.
That's why you should look into open source projects that have code that parse 8.60 .dat structure to understand it, if you would do this before making this thread then you would know that it doesn't use protobuf and because how specific protobuf parse data it is impossible to parse 8.6 .dat file by using it.

But, the post that I referred can be used as reference for building a reader for 8.6 dat file?
Yes, it can but it is pretty much old and isn't for 8.6
 
Back
Top