internal S_USER_LOCATION(TeraMessageReader reader) : base(reader) { Entity = reader.ReadEntityId(); Start = reader.ReadVector3f(); Heading = reader.ReadAngle(); HeadingLook = reader.Factory.ReleaseVersion < 6200 ? Heading : reader.ReadAngle();//not sure when it appeared Speed = reader.ReadInt16(); Finish = reader.ReadVector3f(); Ltype = reader.ReadInt32(); InShuttle = reader.ReadBoolean(); // Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Start} {Heading} -> {Finish}, S:{Speed} ,{Ltype} {unk1} {unk2}" ); }
internal C_PLAYER_LOCATION(TeraMessageReader reader) : base(reader) { Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); if (reader.Factory.ReleaseVersion >= 4000) { LookDirection = reader.ReadAngle(); // wasn't there on classic, but not sure when it's appeared. } Finish = reader.ReadVector3f(); Ltype = reader.ReadInt32(); Speed = reader.ReadInt16();//jumping speed InShuttle = reader.ReadBoolean(); TimeStamp = reader.ReadInt32(); //Debug.WriteLine($"{Time.Ticks} {Start} {Heading} -> {Finish}, S:{Speed} ,{Ltype} {unk1} {unk2} {TimeStamp}" ); }
internal S_INSTANT_MOVE(TeraMessageReader reader) : base(reader) { Entity = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); // Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Finish} {Heading}"); }
internal S_CREATURE_ROTATE(TeraMessageReader reader) : base(reader) { Entity = reader.ReadEntityId(); Heading = reader.ReadAngle(); NeedTime = reader.ReadInt16(); // Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Heading} {Time}"); }
internal SpawnUserServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(8); var nameOffset = reader.ReadUInt16(); if (reader.Version > 306637) { reader.Skip(14); } else { reader.Skip(16); } ServerId = reader.ReadUInt32(); // not sure, whether full uint32 is serverid, or only first 2 bytes and the rest part of it is actualy a part of PlayerId, or something else, but it always come along with PlayerID as complex player id PlayerId = reader.ReadUInt32(); Id = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); reader.Skip(4); RaceGenderClass = new RaceGenderClass(reader.ReadInt32()); reader.Skip(11); Dead = (reader.ReadByte() & 1) == 0; reader.Skip(121); Level = reader.ReadInt16(); reader.BaseStream.Position = nameOffset - 4; Name = reader.ReadTeraString(); GuildName = reader.ReadTeraString(); //Debug.WriteLine(Name + ":" + BitConverter.ToString(BitConverter.GetBytes(Id.Id))+ ":"+ ServerId.ToString()+" "+ BitConverter.ToString(BitConverter.GetBytes(PlayerId))+" "+Dead); }
internal S_ACTION_STAGE(TeraMessageReader reader) : base(reader) { reader.Skip(4); //Effects array count and offset Entity = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); Model = reader.ReadUInt32(); SkillId = new SkillId(reader).Id; Stage = reader.ReadUInt32(); Speed = reader.ReadSingle(); if (reader.Factory.ReleaseVersion >= 7500) { reader.Skip(4); //projectilespeed } Id = reader.ReadUInt32(); if (reader.Factory.ReleaseVersion <= 7100) { return; //classic, not sure when following things were added } EffectScale = reader.ReadSingle(); Moving = reader.ReadBoolean(); Destination = reader.ReadVector3f(); Target = reader.ReadEntityId(); // Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Start} {Heading}, S:{Speed}, {SkillId} {Stage} {Model} {unk} {Id}" ); }
internal EachSkillResultServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(4); Source = reader.ReadEntityId(); reader.Skip(8); Target = reader.ReadEntityId(); //I think it s some kind of source ID. //When I use a skill against any monstrer, it s always the same value //When I pick up a mana mote, differente ID Unknow1 = reader.ReadBytes(4); SkillId = new SkillId(reader).Id; //Not sure if it s a int32. or int16 or int64 or other thing //When using a skill with many hit, each hit seem to have a different number (ex: 0, 1, 2, or 3) HitId = reader.ReadInt32(); //No f*****g idea. I think I see 3 different part in that thing Unknow2 = reader.ReadBytes(12); //unknown, id, time Amount = reader.ReadInt64(); // KR now use 64 bit FlagsDebug = reader.ReadInt32(); Flags = (SkillResultFlags)FlagsDebug; IsCritical = (reader.ReadByte() & 1) != 0; ConsumeEdge = (reader.ReadByte() & 1) != 0; Blocked = (reader.ReadByte() & 1) != 0; reader.Skip(reader.Factory.ReleaseVersion >= 7401 ? 8 : 12); //KR removed something Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); //if (Position.X!=0) // Trace.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Target.Id))} {SkillId} {Position} {Heading}"); }
internal SNpcLocation(TeraMessageReader reader) : base(reader) { Entity = reader.ReadEntityId(); Start = reader.ReadVector3f(); Heading = reader.ReadAngle(); Speed = reader.ReadInt16(); Finish = reader.ReadVector3f(); Ltype = reader.ReadInt32(); }
internal SpawnMeServerMessage(TeraMessageReader reader) : base(reader) { Id = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); Dead = (reader.ReadByte() & 1) == 0; unk1 = reader.ReadByte(); }
internal SNpcLocation(TeraMessageReader reader) : base(reader) { Entity = reader.ReadEntityId(); Start = reader.ReadVector3f(); Heading = reader.ReadAngle(); Speed = reader.ReadInt16(); Finish = reader.ReadVector3f(); Ltype = reader.ReadInt32(); //0 = Move, 7= Rotate standing // Trace.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Start} {Heading} -> {Finish}, S:{Speed} ,{Ltype}"); }
internal S_SPAWN_COLLECTION(TeraMessageReader reader) : base(reader) { EntityId = reader.ReadEntityId(); CollectionId = reader.ReadInt32(); Amount = reader.ReadInt32(); Position = reader.ReadVector3f(); Angle = reader.ReadAngle(); Extractor = reader.ReadBoolean(); ExtractorDisabled = reader.ReadBoolean(); }
internal S_ACTION_END(TeraMessageReader reader) : base(reader) { Entity = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); Model = reader.ReadUInt32(); SkillId = new SkillId(reader).Id; unk = reader.ReadInt32(); Id = reader.ReadUInt32(); // Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Start} {Heading} -> {Finish}, S:{Speed} ,{Ltype} {unk1} {unk2}" ); }
internal C_PLAYER_LOCATION(TeraMessageReader reader) : base(reader) { Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); unk1 = reader.ReadInt16(); Finish = reader.ReadVector3f(); Ltype = reader.ReadInt32(); Speed = reader.ReadInt16(); unk2 = reader.ReadByte(); TimeStamp = reader.ReadInt32(); //Debug.WriteLine($"{Time.Ticks} {Start} {Heading} -> {Finish}, S:{Speed} ,{Ltype} {unk1} {unk2} {TimeStamp}" ); }
internal S_USER_LOCATION(TeraMessageReader reader) : base(reader) { Entity = reader.ReadEntityId(); Start = reader.ReadVector3f(); Heading = reader.ReadAngle(); unk1 = reader.ReadInt16(); Speed = reader.ReadInt16(); Finish = reader.ReadVector3f(); Ltype = reader.ReadInt32(); unk2 = reader.ReadByte(); // Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Start} {Heading} -> {Finish}, S:{Speed} ,{Ltype} {unk1} {unk2}" ); }
internal S_INSTANT_DASH(TeraMessageReader reader) : base(reader) { Entity = reader.ReadEntityId(); Target = reader.ReadEntityId(); if (reader.Factory.ReleaseVersion >= 6000) { reader.Skip(4); //0, not sure when it was added } Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); // Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Finish} {Heading}"); }
internal S_ACTION_STAGE(TeraMessageReader reader) : base(reader) { reader.Skip(4); //Effects array count and offset Entity = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); Model = reader.ReadUInt32(); SkillId = new SkillId(reader).Id; Stage = reader.ReadUInt32(); Speed = reader.ReadSingle(); Id = reader.ReadUInt32(); unk = reader.ReadSingle(); // Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Start} {Heading}, S:{Speed}, {SkillId} {Stage} {Model} {unk} {Id}" ); }
internal SpawnNpcServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(6); Id = reader.ReadEntityId(); TargetId = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); reader.Skip(4); TemplateId = reader.ReadInt32(); HuntingZoneId = reader.ReadUInt16(); ModelId = reader.ReadUInt32(); reader.Skip(31); OwnerId = reader.ReadEntityId(); }
internal SpawnNpcServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(6); Id = reader.ReadEntityId(); TargetId = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); reader.Skip(4); NpcId = reader.ReadUInt32(); NpcArea = reader.ReadUInt16(); CategoryId = reader.ReadUInt32(); reader.Skip(31); OwnerId = reader.ReadEntityId(); }
internal SpawnNpcServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(reader.Factory.ReleaseVersion >= 7100 ? 10 : 6);//classic staff, not sure when additional array appeared Id = reader.ReadEntityId(); TargetId = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); reader.Skip(4); NpcId = reader.ReadUInt32(); NpcArea = reader.ReadUInt16(); reader.Skip(reader.Factory.ReleaseVersion >= 7900? 43 : //remainingEnrageTime reader.Factory.ReleaseVersion >= 6801 ? 39 : 35); //KR added 4 bytes (shapeId) OwnerId = reader.ReadEntityId(); }
internal SpawnNpcServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(6); Id = reader.ReadEntityId(); TargetId = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); reader.Skip(4); NpcId = reader.ReadUInt32(); NpcType = reader.ReadUInt16(); ModelId = reader.ReadUInt32(); reader.Skip(31); OwnerId = reader.ReadEntityId(); }
public S_ACTION_STAGE(TeraMessageReader reader) : base(reader) { reader.BaseStream.Position = 0; GameId = reader.ReadUInt64(); reader.ReadVector3f(); reader.ReadAngle(); reader.Skip(4); TemplateId = reader.ReadUInt32(); //reader.Skip(3); Skill = reader.ReadUInt32() - 0x04000000; Stage = reader.ReadInt32(); Speed = reader.ReadSingle(); Id = reader.ReadUInt32(); reader.Skip(4 + 1 + 12); Target = reader.ReadUInt64(); }
} //0 = Hidden, 1 = Damage, 2 = Heal, 3 = MP, bit16+ = DataCenter.NocTanEffectData internal EachSkillResultServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(4); Source = reader.ReadEntityId(); if (reader.Factory.ReleaseVersion >= 7402) { var owner = reader.ReadEntityId(); if (owner.Id != 0) { Source = owner; } } // not sure, when it was added Target = reader.ReadEntityId(); TemplateId = reader.ReadInt32(); SkillId = new SkillId(reader).Id; HitId = reader.ReadInt32(); //index in TargetingList (NOT id) - See DataCenter.SkillData Unknow2 = reader.ReadBytes(12); //index in area, id, time Amount = reader.Factory.ReleaseVersion < 6200 ? reader.ReadInt32() : reader.ReadInt64(); // KR now use 64 bit FlagsDebug = reader.ReadInt32(); Flags = (SkillResultFlags)FlagsDebug; IsCritical = (reader.ReadByte() & 1) != 0; ConsumeEdge = (reader.ReadByte() & 1) != 0; if (reader.Factory.ReleaseVersion >= 3707) //brawler stuff { Blocked = (reader.ReadByte() & 1) != 0; ///SuperArmor SuperArmorId = reader.ReadInt32(); HitCylinderId = reader.ReadInt32(); reader.Skip(4); // reaction bools: enable,push,air, airchain } else { reader.Skip(2); //reaction bools: enable, push } Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); //if (Position.X!=0) // Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Target.Id))} {SkillId} {Position} {Heading}"); }
internal SpawnUserServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(8); var nameOffset = reader.ReadUInt16(); reader.Skip(14); ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); Id = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); Relation = (RelationType)reader.ReadInt32(); RaceGenderClass = new RaceGenderClass(reader.ReadInt32()); reader.Skip(11); Dead = reader.ReadByte() == 0; reader.Skip(121); Level = reader.ReadInt16(); reader.BaseStream.Position = nameOffset - 4; Name = reader.ReadTeraString(); GuildName = reader.ReadTeraString(); //Trace.WriteLine(Name + ":" + BitConverter.ToString(BitConverter.GetBytes(Id.Id))+ ":"+ ServerId.ToString()+" "+ BitConverter.ToString(BitConverter.GetBytes(PlayerId))+" "+Dead); }
internal SpawnUserServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(reader.Factory.ReleaseVersion >= 4500 ? 8 : 4);//not sure when account benefits array appeared there var nameOffset = reader.ReadUInt16(); reader.Skip(reader.Factory.ReleaseVersion >= 4500 ? 14 : 16); //not sure when they deleted guild title ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); Id = reader.ReadEntityId(); Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); reader.Skip(4); //relation RaceGenderClass = new RaceGenderClass(reader.ReadInt32()); reader.Skip(11); // huntingZoneId, walkSpeed, runSpeed, actionMode, status, bool visible Dead = (reader.ReadByte() & 1) == 0; reader.Skip(reader.Factory.ReleaseVersion >= 4500 ? 121 : 105); // not sure when they added dye colors Level = reader.ReadInt16(); reader.BaseStream.Position = nameOffset - 4; Name = reader.ReadTeraString(); GuildName = reader.ReadTeraString(); //Debug.WriteLine(Name + ":" + BitConverter.ToString(BitConverter.GetBytes(Id.Id))+ ":"+ ServerId.ToString()+" "+ BitConverter.ToString(BitConverter.GetBytes(PlayerId))+" "+Dead); }
internal EachSkillResultServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(4); Source = reader.ReadEntityId(); Target = reader.ReadEntityId(); //I think it s some kind of source ID. //When I use a skill against any monstrer, it s always the same value //When I pick up a mana mote, differente ID Unknow1 = reader.ReadBytes(4); SkillId = reader.ReadInt32() & 0x3FFFFFF; //Not sure if it s a int32. or int16 or int64 or other thing //When using a skill with many hit, each hit seem to have a different number (ex: 0, 1, 2, or 3) HitId = reader.ReadInt32(); //No f*****g idea. I think I see 3 different part in that thing Unknow2 = reader.ReadBytes(12); //unknown, id, time Amount = reader.ReadInt32(); FlagsDebug = reader.ReadInt32(); Flags = (SkillResultFlags)FlagsDebug; IsCritical = (reader.ReadUInt16() & 1) != 0; Knockdown = (reader.ReadByte() & 1) != 0; reader.Skip(1);//unknown Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); if (IsMana) { Amount = Math.Abs(Amount); } }
internal C_PLAYER_LOCATION(TeraMessageReader reader) : base(reader) { Position = reader.ReadVector3f(); Heading = reader.ReadAngle(); }