public S_DUNGEON_COOL_TIME_LIST(TeraMessageReader reader) : base(reader) { DungeonCooldowns = new Dictionary <uint, short>(); try { reader.RepositionAt(4); var count = reader.ReadUInt16(); reader.Skip(2); //var offset = reader.ReadUInt16(); reader.Skip(4); for (var i = 0; i < count; i++) { reader.Skip(2); //var curr = reader.ReadUInt16(); var next = reader.ReadUInt16(); var id = reader.ReadUInt32(); reader.Skip(8); var daily = reader.ReadInt16(); var weekly = reader.ReadInt16(); var entries = (short)(daily == -1 ? weekly == -1 ? -1 : weekly : daily); if (entries != -1) { DungeonCooldowns[id] = entries; } if (next == 0) { return; } reader.RepositionAt(next); } } catch (System.Exception) { Log.F($"[S_DUNGEON_COOL_TIME_LIST] Failed to parse packet"); } }
public S_SHOW_PARTY_MATCH_INFO(TeraMessageReader reader) : base(reader) { var count = reader.ReadUInt16(); var offset = reader.ReadUInt16(); Page = reader.ReadInt16(); Pages = reader.ReadInt16(); if (Page == 0) { Listings.Clear(); } if (count == 0) { Listings.Clear(); //IsLast = true; return; } reader.BaseStream.Position = offset - 4; for (var i = 0; i < count; i++) { var l = new ListingData(); reader.Skip(2); // var curr = reader.ReadUInt16(); var next = reader.ReadUInt16(); var msgOffset = reader.ReadUInt16(); var leaderNameOffset = reader.ReadUInt16(); var leaderId = reader.ReadUInt32(); var isRaid = reader.ReadBoolean(); var playerCount = reader.ReadInt16(); reader.BaseStream.Position = msgOffset - 4; var msg = reader.ReadTeraString(); try { reader.BaseStream.Position = leaderNameOffset - 4; } catch { if (next != 0) { reader.BaseStream.Position = next - 4; } continue; } var leaderName = reader.ReadTeraString(); l.LeaderName = leaderName; l.LeaderId = leaderId; l.IsRaid = isRaid; l.Message = msg; l.PlayerCount = playerCount; { Listings.Add(l); } if (next != 0) { reader.BaseStream.Position = next - 4; } } }
public S_LOAD_EP_INFO(TeraMessageReader r) : base(r) { Perks = new Dictionary <uint, uint>(); var perksCount = r.ReadInt16(); if (perksCount == 0) { return; } var perksOffset = r.ReadInt16(); r.RepositionAt(perksOffset); for (var i = 0; i < perksCount; i++) { r.Skip(2); //var curr = r.ReadUInt16(); var next = r.ReadUInt16(); var perkId = r.ReadUInt32(); var perkLevel = r.ReadUInt32(); Perks[perkId] = perkLevel; if (next == 0) { break; } r.RepositionAt(next); } }
public S_EACH_SKILL_RESULT(TeraMessageReader reader) : base(reader) { reader.BaseStream.Position = 0; reader.Skip(4); Source = reader.ReadUInt64(); var owner = reader.ReadUInt64(); if (owner != 0) { Source = owner; } Target = reader.ReadUInt64(); // ReSharper disable UnusedVariable var template = reader.ReadInt32(); Skill = new SkillId(reader).Id; var stage = reader.ReadInt32(); var targeting = reader.ReadInt16(); var area = reader.ReadInt16(); var id = reader.ReadUInt32(); var time = reader.ReadInt32(); // ReSharper restore UnusedVariable Damage = reader.ReadUInt64(); Type = reader.ReadUInt16(); }
internal S_PLAYER_STAT_UPDATE(TeraMessageReader reader) : base(reader) { HpRemaining = reader.ReadInt32(); MpRemaining = reader.ReadInt32(); reader.Skip(4); TotalHp = reader.ReadInt32(); TotalMp = reader.ReadInt32(); return; //we don't need all other things now, but if we need - just remove return. BasePower = reader.ReadInt32(); BaseEndurance = reader.ReadInt32(); BaseImpactFactor = reader.ReadInt32(); BaseBalanceFactor = reader.ReadInt32(); BaseMovementSpeed = reader.ReadInt16(); reader.Skip(2); BaseAttackSpeed = reader.ReadInt16(); BaseCritRate = reader.ReadSingle(); BaseCritResist = reader.ReadSingle(); BaseCritPower = reader.ReadSingle(); BaseAttack = reader.ReadInt32(); BaseAttack2 = reader.ReadInt32(); BaseDefence = reader.ReadInt32(); BaseImpcat = reader.ReadInt32(); BaseBalance = reader.ReadInt32(); BaseResistWeakening = reader.ReadSingle(); BaseResistPeriodic = reader.ReadSingle(); BaseResistStun = reader.ReadSingle(); BonusPower = reader.ReadInt32(); BonusEndurance = reader.ReadInt32(); BonusImpactFactor = reader.ReadInt32(); BonusBalanceFactor = reader.ReadInt32(); BonusMovementSpeed = reader.ReadInt16(); reader.Skip(2); BonusAttackSpeed = reader.ReadInt16(); BonusCritRate = reader.ReadSingle(); BonusCritResist = reader.ReadSingle(); BonusCritPower = reader.ReadSingle(); BonusAttack = reader.ReadInt32(); BonusAttack2 = reader.ReadInt32(); BonusDefence = reader.ReadInt32(); BonusImpcat = reader.ReadInt32(); BonusBalance = reader.ReadInt32(); BonusResistWeakening = reader.ReadSingle(); BonusResistPeriodic = reader.ReadSingle(); BonusResistStun = reader.ReadSingle(); Level = reader.ReadInt32(); Vitality = reader.ReadInt16(); Status = reader.ReadByte(); BonusHp = reader.ReadInt32(); BonusMp = reader.ReadInt32(); Stamina = reader.ReadInt32(); TotalStamina = reader.ReadInt32(); ReRemaining = reader.ReadInt32(); TotalRe = reader.ReadInt32(); reader.Skip(8); ItemLevelInventory = reader.ReadInt32(); ItemLevel = reader.ReadInt32(); // Something else unknown later }
public S_PARTY_MEMBER_STAT_UPDATE(TeraMessageReader reader) : base(reader) { ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); CurrentHP = /*reader.Version < 321550 || reader.Version > 321600 ? */ reader.ReadInt64() /*: reader.ReadInt32()*/; CurrentMP = reader.ReadInt32(); MaxHP = /*reader.Version < 321550 || reader.Version > 321600 ? */ reader.ReadInt64() /*: reader.ReadInt32()*/; MaxMP = reader.ReadInt32(); Level = reader.ReadInt16(); InCombat = reader.ReadInt16() > 0; Vitality = reader.ReadInt16(); Alive = reader.ReadBoolean(); reader.Skip(4); CurrentRE = reader.ReadInt32(); MaxRE = reader.ReadInt32(); GroupMemberData = new GroupMemberData() { ServerId = ServerId, PlayerId = PlayerId, CurrentHP = CurrentHP, CurrentMP = CurrentMP, CurrentST = CurrentRE, MaxHP = MaxHP, MaxMP = MaxMP, MaxST = MaxRE, Level = (uint)Level, InCombat = InCombat, Alive = Alive }; }
public S_GET_USER_LIST(TeraMessageReader reader) : base(reader) { CharacterList = new List <Character>(); reader.BaseStream.Position = 0; var count = reader.ReadInt16(); var next = reader.ReadInt16(); for (var i = 0; i < count; i++) { var c = new RawChar(); reader.BaseStream.Position = next - 4; reader.Skip(2); next = reader.ReadInt16(); reader.Skip(4); var nameOffset = reader.ReadInt16(); reader.Skip(8); //array offsets and counts var guildOffset = reader.ReadInt16(); c.Id = reader.ReadUInt32(); reader.Skip(4); //c.gender = reader.ReadInt32(); reader.Skip(4); //c.race = reader.ReadInt32(); c.CharClass = reader.ReadInt32(); c.Level = reader.ReadInt32(); reader.Skip(8); //c.hp = reader.ReadInt32(); reader.Skip(4); //c.mp = reader.ReadInt32(); c.LastLocation = new Location(reader.ReadUInt32(), reader.ReadUInt32(), reader.ReadUInt32()); c.LastOnline = reader.ReadInt64(); reader.Skip(359); c.Laurel = reader.ReadInt32(); c.Pos = reader.ReadInt32(); c.GuildId = reader.ReadUInt32(); reader.BaseStream.Position = nameOffset - 4; c.Name = reader.ReadTeraString(); try { reader.BaseStream.Position = guildOffset - 4; c.GuildName = reader.ReadTeraString(); } catch { } CharacterList.Add(new Character(c.Name, (Class)c.CharClass, c.Id, c.Pos) { GuildName = c.GuildName, Laurel = (Laurel)c.Laurel, Level = c.Level, LastOnline = c.LastOnline, LastLocation = new Location(c.LastLocation.World, c.LastLocation.Guard, c.LastLocation.Section) }); } CharacterList = CharacterList.OrderBy(ch => ch.Position).ToList(); }
public S_SHOW_PARTY_MATCH_INFO(TeraMessageReader reader) : base(reader) { var count = reader.ReadUInt16(); var offset = reader.ReadUInt16(); var page = reader.ReadInt16(); var pages = reader.ReadInt16(); if (page == 0) { Listings.Clear(); } if (count == 0) { Listings.Clear(); IsLast = true; return; } reader.BaseStream.Position = offset - 4; for (var i = 0; i < count; i++) { var l = new Listing(); var curr = reader.ReadUInt16(); var next = reader.ReadUInt16(); var msgOffset = reader.ReadUInt16(); var leaderNameOffset = reader.ReadUInt16(); var leaderId = reader.ReadUInt32(); var isRaid = reader.ReadBoolean(); var playerCount = reader.ReadInt16(); reader.BaseStream.Position = msgOffset - 4; var msg = reader.ReadTeraString(); reader.BaseStream.Position = leaderNameOffset - 4; var leaderName = reader.ReadTeraString(); l.LeaderName = leaderName; l.LeaderId = leaderId; l.IsRaid = isRaid; l.Message = msg; l.PlayerCount = playerCount; Listings.Add(l); if (next != 0) { reader.BaseStream.Position = next - 4; } } if (page < pages) { Proxy.RequestNextLfgPage(page + 1); } if (page == pages) { IsLast = true; } }
internal S_OTHER_USER_APPLY_PARTY(TeraMessageReader reader) : base(reader) { reader.Skip(7); var clas = reader.ReadInt16(); PlayerClass = (PlayerClass)(clas + 1); reader.Skip(4); Lvl = reader.ReadInt16(); reader.Skip(1); PlayerName = reader.ReadTeraString(); }
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}" ); }
public S_OTHER_USER_APPLY_PARTY(TeraMessageReader reader) : base(reader) { var nameOffset = reader.ReadUInt16(); reader.Skip(1); PlayerId = reader.ReadUInt32(); Class = (Class)reader.ReadInt16(); reader.Skip(4); Level = reader.ReadInt16(); reader.BaseStream.Position = nameOffset - 4; Name = reader.ReadTeraString(); }
public S_LOAD_ACHIEVEMENT_LIST(TeraMessageReader reader) : base(reader) { achiCount = reader.ReadInt16(); achiOffset = reader.ReadInt16(); historyCount = reader.ReadInt16(); historyOffset = reader.ReadInt16(); cid = reader.ReadInt64(); unk1 = reader.ReadInt32(); achis = reader.ReadInt32(); unk3 = reader.ReadInt32(); unk4 = reader.ReadInt32(); reader.Skip(ACHIEVEMENT_LENGHT * achiCount); }
public S_LOAD_ACHIEVEMENT_LIST(TeraMessageReader reader) : base(reader) { achiCount = reader.ReadInt16(); achiOffset = reader.ReadInt16(); historyCount = reader.ReadInt16(); historyOffset = reader.ReadInt16(); cid = reader.ReadInt64(); unk1 = reader.ReadInt32(); achis = reader.ReadInt32(); unk3 = reader.ReadInt32(); unk4 = reader.ReadInt32(); reader.Skip(ACHIEVEMENT_LENGHT * achiCount); //System.Console.WriteLine("{0}-{1}-{2}", unk1, unk3, unk4); }
internal SCreatureChangeHp(TeraMessageReader reader) : base(reader) { HpRemaining = reader.ReadInt32(); TotalHp = reader.ReadInt32(); HpChange = reader.ReadInt16(); Type = reader.ReadInt32(); Unknow3 = reader.ReadInt16(); TargetId = reader.ReadEntityId(); SourceId = reader.ReadEntityId(); Critical = reader.ReadInt16(); // Debug.WriteLine("target = " + TargetId + ";Source:" + SourceId + ";Critical:" + Critical + ";Hp left:" + HpRemaining + ";Max HP:" + TotalHp+";HpLost/Gain:"+ HpChange + ";Type:"+ Type + ";Unknow3:"+Unknow3); }
internal SPlayerChangeMp(TeraMessageReader reader) : base(reader) { MpRemaining = reader.ReadInt32(); TotalMp = reader.ReadInt32(); MpChange = reader.ReadInt16(); Type = reader.ReadInt32(); Unknow3 = reader.ReadInt16(); TargetId = reader.ReadEntityId(); SourceId = reader.ReadEntityId(); // Critical = reader.ReadInt16(); Not here anymore // Debug.WriteLine("target = " + TargetId + ";Source:" + SourceId + ";Critical:" + Critical + ";Mp left:" + MpRemaining + ";Max MP:" + TotalMp + ";MpLost/Gain:" + MpChange + ";Type:" + Type + ";Unknow3:" + Unknow3); }
public S_GUILD_MEMBER_LIST(TeraMessageReader reader) : base(reader) { var membersCount = reader.ReadInt16(); var membersOffset = reader.ReadInt16(); reader.Skip(2); //gname offset var masterNameOffset = reader.ReadInt16(); MasterId = reader.ReadUInt32(); reader.RepositionAt(masterNameOffset); MasterName = reader.ReadTeraString(); //GuildMembersList = new Dictionary<uint, string>(); if (membersCount == 0) { return; } try { reader.RepositionAt(membersOffset); for (var i = 0; i < membersCount; i++) { var m = new GuildMemberData(); reader.Skip(2); //curr var next = reader.ReadUInt16(); var nameOffset = reader.ReadInt16(); reader.Skip(2); //noteOffset m.PlayerId = reader.ReadUInt32(); reader.RepositionAt(nameOffset); m.Name = reader.ReadTeraString(); Members.Add(m); //GuildMembersList[playerId] = name; if (next == 0) { return; } reader.RepositionAt(next); } } catch (Exception e) { Console.WriteLine($"[{nameof(S_GUILD_MEMBER_LIST)}] Failed to parse packet. \nContent:\n{Payload.Array.ToHexString()}\nException:\n{e.Message}\n{e.StackTrace}"); //WindowManager.ViewModels.NotificationArea.Enqueue("Warning", "A non-fatal error occured. More detailed info has been written to error.log. Please report this to the developer on Discord or Github.", NotificationType.Warning, 10000); } }
internal LoginServerMessage(TeraMessageReader reader) : base(reader) { int nameOffset = reader.ReadInt16(); reader.Skip(8); RaceGenderClass = new RaceGenderClass(reader.ReadInt32()); Id = reader.ReadEntityId(); ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); reader.Skip(27); Level = reader.ReadInt16(); reader.BaseStream.Position = nameOffset - 4; Name = reader.ReadTeraString(); // Debug.WriteLine(Name + ":" + BitConverter.ToString(BitConverter.GetBytes(Id.Id)) + ":" + ServerId.ToString() + " " + BitConverter.ToString(BitConverter.GetBytes(PlayerId))); }
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}"); }
public S_LEARN_EP_PERK(TeraMessageReader r) : base(r) { var perksCount = r.ReadInt16(); //var perksOffset = r.ReadInt16(); //var success = r.ReadBoolean(); //var usedPoints = r.ReadUInt32(); r.Skip(7); Perks = new Dictionary <uint, uint>(); if (perksCount == 0) { return; } for (var i = 0; i < perksCount; i++) { r.Skip(2); //var curr = r.ReadUInt16(); var next = r.ReadUInt16(); var perkId = r.ReadUInt32(); var perkLevel = r.ReadUInt32(); Perks[perkId] = perkLevel; if (next == 0) { break; } r.RepositionAt(next); } }
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); }
public S_LOAD_EP_INFO(TeraMessageReader r) : base(r) { var perksCount = r.ReadInt16(); //var perksOffset = r.ReadInt16(); //var lvl = r.ReadUInt32(); //var exp = r.ReadUInt64(); //var totPoints = r.ReadUInt32(); //var usedPoints = r.ReadUInt32(); //var dailyExp = r.ReadUInt32(); //var dailyExpMax = r.ReadUInt32(); //var prevLevel = r.ReadUInt32(); //var prevTotalPoints = r.ReadUInt32(); r.Skip(38); Perks = new Dictionary <uint, uint>(); if (perksCount == 0) { return; } for (var i = 0; i < perksCount; i++) { r.Skip(2); //var curr = r.ReadUInt16(); var next = r.ReadUInt16(); var perkId = r.ReadUInt32(); var perkLevel = r.ReadUInt32(); Perks[perkId] = perkLevel; if (next == 0) { break; } r.RepositionAt(next); } }
public S_SPAWN_NPC(TeraMessageReader reader) : base(reader) { //reader.Skip(10); //id = reader.ReadUInt64(); //var target = reader.ReadUInt64(); //var pos = reader.ReadVector3f(); //var angle = reader.ReadUInt16(); //var relation = reader.ReadUInt32(); //templateId = reader.ReadUInt32(); //huntingZoneId = reader.ReadUInt16(); //var unk1 = reader.ReadInt32(); //var walkSpeed = reader.ReadInt16(); //var runSpeed = reader.ReadInt16(); //var unk5 = reader.ReadInt16(); //var unk6 = reader.ReadBoolean(); //var unk7 = reader.ReadInt32(); //var visible = reader.ReadBoolean(); //var villager = reader.ReadBoolean(); //var spawnType = reader.ReadUInt32(); //var unk11 = reader.ReadUInt64(); //var unk12 = reader.ReadUInt64(); //var unk13 = reader.ReadUInt16(); //var unk14 = reader.ReadUInt32(); //var unk15 = reader.ReadBoolean(); //var owner = reader.ReadUInt64(); //var unk16 = reader.ReadUInt32(); //var unk17 = reader.ReadUInt32(); //var unk18 = reader.ReadUInt64(); //var unk19 = reader.ReadByte(); //var unk20 = reader.ReadUInt32(); //var unk25 = reader.ReadUInt32(); reader.Skip(10); // seatsRef [4] + partsRef[4] + npcNameRef [2] EntityId = reader.ReadUInt64(); reader.Skip(8); // target Level = reader.ReadInt32(); MaxHP = reader.ReadInt64(); EnrageThreshold = reader.ReadInt64(); reader.Skip(12); //var loc = reader.ReadVector3f(); reader.Skip(2); //var angle = reader.ReadInt16(); reader.Skip(4); //var relation = reader.ReadInt32(); TemplateId = reader.ReadUInt32(); HuntingZoneId = reader.ReadUInt16(); reader.Skip(4 // shapeID + 2 + 2 // walkSpeed + runSpeed ); reader.Skip(2); // status IsEnraged = reader.ReadInt16() == 1; //var enrage = reader.ReadUInt16(); // 0/1 RemainingEnrageTime = reader.ReadInt32(); reader.Skip(2 // hpLevel + 2 // questInfo + 1); // visible Villager = reader.ReadBoolean(); //reader.Skip(4); //reader.Skip(4+8+4+4); //var aggressive = reader.ReadBoolean(); //Console.WriteLine("[S_SPAWN NPC] id:{0} tId:{1} hzId:{2}", id, templateId, huntingZoneId); }
internal SPartyMemberChangeHp(TeraMessageReader reader) : base(reader) { TargetId = reader.ReadEntityId(); HpRemaining = reader.ReadInt32(); TotalHp = reader.ReadInt32(); Unknow3 = reader.ReadInt16(); // Console.WriteLine("target = " + TargetId + ";Hp left:" + HpRemaining + ";Max HP:" + TotalHp + ";Unknow3:" + Unknow3); }
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 SPartyMemberChangeMp(TeraMessageReader reader) : base(reader) { ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); MpRemaining = reader.ReadInt32(); TotalMp = reader.ReadInt32(); Unknow3 = reader.ReadInt16(); // Debug.WriteLine("target = " + TargetId + ";Mp left:" + MpRemaining + ";Max MP:" + TotalMp+";Unknow3:"+Unknow3); }
internal S_PARTY_MEMBER_STAT_UPDATE(TeraMessageReader reader) : base(reader) { ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); HpRemaining = reader.ReadInt64(); // KR now use 64 bit MpRemaining = reader.ReadInt32(); TotalHp = reader.ReadInt64(); // KR now use 64 bit TotalMp = reader.ReadInt32(); Level = reader.ReadInt16(); InCombat = reader.ReadInt16(); Vitality = reader.ReadInt16(); Alive = reader.ReadByte(); //not sure Stamina = reader.ReadInt32(); ReRemaining = reader.ReadInt32(); TotalRe = reader.ReadInt32(); Unknow3 = reader.ReadInt32(); //Trace.WriteLine("target = " + PlayerId + ";Hp left:" + HpRemaining + ";Max HP:" + TotalHp + ";Unknow3:" + Unknow3); }
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}"); }
public S_PARTY_MEMBER_STAT_UPDATE(TeraMessageReader reader) : base(reader) { serverId = reader.ReadUInt32(); playerId = reader.ReadUInt32(); curHP = /*reader.Version < 321550 || reader.Version > 321600 ? */ reader.ReadInt64() /*: reader.ReadInt32()*/; curMP = reader.ReadInt32(); maxHP = /*reader.Version < 321550 || reader.Version > 321600 ? */ reader.ReadInt64() /*: reader.ReadInt32()*/; maxMP = reader.ReadInt32(); level = reader.ReadInt16(); combat = reader.ReadInt16(); vitality = reader.ReadInt16(); alive = reader.ReadBoolean(); stamina = reader.ReadInt32(); curRE = reader.ReadInt32(); maxRE = reader.ReadInt32(); }
public S_PLAYER_STAT_UPDATE(TeraMessageReader reader) : base(reader) { reader.BaseStream.Position = 0; CurrentHP = reader.ReadInt64(); CurrentMP = reader.ReadInt32(); reader.Skip(8); MaxHP = reader.ReadInt64(); MaxMP = reader.ReadInt32(); reader.Skip(2 * 4); var baseCrit = reader.ReadSingle(); reader.Skip((((reader.Factory.ReleaseVersion / 100) >= 106 ? 16 : 14) * 4) + (3 * 2)); var magRes = reader.ReadInt32(); reader.Skip((12 * 4) + (3 * 2)); TotalCritFactor = reader.ReadSingle() + baseCrit; reader.Skip(12 * 4); TotalMagicalResistance = magRes + reader.ReadInt32(); reader.Skip(7 * 4); Level = reader.ReadInt16(); reader.Skip(4); Status = reader.ReadBoolean(); BonusHP = reader.ReadInt32(); BonusMP = reader.ReadInt32(); reader.Skip(8); CurrentST = reader.ReadInt32(); MaxST = reader.ReadInt32(); BonusST = reader.ReadInt32(); reader.Skip(8); Ilvl = reader.ReadSingle(); Edge = reader.ReadInt32(); reader.Skip(reader.Factory.ReleaseVersion / 100 >= 105 ? 32 : 28); Fire = reader.ReadUInt32() == 4; Ice = reader.ReadUInt32() == 4; Arcane = reader.ReadUInt32() == 4; Coins = reader.ReadUInt32(); MaxCoins = reader.ReadUInt32(); }