public S_INVEN(TeraMessageReader reader) : base(reader) { //TODO if (BuffBarWindowViewModel.Instance.Player.InfBuffs.Any(x => AbnormalityDatabase.NoctIds.Contains(x.Abnormality.Id))) { return; } var count = reader.ReadUInt16(); var invOffset = reader.ReadUInt16(); reader.Skip(8 + 8); IsOpen = reader.ReadBoolean(); if (!IsOpen) { return; } First = reader.ReadBoolean(); if (First) { Items = new List <Tuple <uint, int, uint> >(); } More = reader.ReadBoolean(); if (invOffset == 0) { return; } reader.BaseStream.Position = invOffset - 4; try { for (var i = 0; i < count; i++) { var offset = reader.ReadUInt16(); var next = reader.ReadUInt16(); reader.Skip(6); var itemId = reader.ReadUInt32(); reader.Skip(8 + 8); var slot = reader.ReadUInt32(); if (slot > 39) { if (itemId == 151643) { reader.Skip(4); ElleonMarks = reader.ReadUInt32(); } reader.BaseStream.Position = next - 4; continue; } reader.Skip(4 + 4); var enchant = reader.ReadInt32(); reader.Skip(4 + 1 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 8 + 1 + 4 + 4 + 4 + 4 + 4 + 4 + 1 + 4 + 4 + 4 + 4 + 1 + 1); var exp = reader.ReadUInt32(); Items.Add(new Tuple <uint, int, uint>(itemId, enchant, exp)); reader.BaseStream.Position = next - 4; } } catch { } }
public S_BAN_PARTY_MEMBER(TeraMessageReader reader) : base(reader) { var nameOffset = reader.ReadUInt16(); serverId = reader.ReadUInt32(); playerId = reader.ReadUInt32(); reader.Skip(4); //0xFFFFFFFF name = reader.ReadTeraString(); }
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); }
public S_PARTY_MEMBER_ABNORMAL_ADD(TeraMessageReader reader) : base(reader) { ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); Id = reader.ReadUInt32(); Duration = reader.ReadUInt32(); reader.Skip(4); Stacks = reader.ReadInt32(); }
internal S_BAN_PARTY_MEMBER(TeraMessageReader reader) : base(reader) { var nameoffset = reader.ReadUInt16(); ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); reader.Skip(4); //unknown ffffffff Name = reader.ReadTeraString(); }
internal S_VISIT_NEW_SECTION(TeraMessageReader reader) : base(reader) { IsFirsVisit = reader.ReadBoolean(); MapId = reader.ReadUInt32(); GuardId = reader.ReadUInt32(); SectionId = reader.ReadUInt32(); Debug.Print("S_VISIT_NEW_SECTION"); }
public S_ABNORMALITY_BEGIN(TeraMessageReader reader) : base(reader) { TargetId = reader.ReadUInt64(); CasterId = reader.ReadUInt64(); AbnormalityId = reader.ReadUInt32(); Duration = reader.ReadUInt32(); reader.Skip(4); Stacks = reader.ReadInt32(); }
public S_CREST_MESSAGE(TeraMessageReader reader) : base(reader) { reader.Skip(4); Type = reader.ReadUInt32(); SkillId = reader.ReadUInt32(); //Debug.WriteLine(nameof(S_CREST_MESSAGE)); //Debug.WriteLine("\t Type: {0}", Type); //Debug.WriteLine("\t SkillId: {0}", SkillId); }
public S_PARTY_MEMBER_INTERVAL_POS_UPDATE(TeraMessageReader reader) : base(reader) { ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); X = reader.ReadSingle(); Y = reader.ReadSingle(); Z = reader.ReadSingle(); ContinentId = reader.ReadUInt32(); Channel = reader.ReadInt32(); }
internal SPartyMemberAbnormalAdd(TeraMessageReader reader) : base(reader) { ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); AbnormalityId = reader.ReadInt32(); Duration = reader.ReadInt64(); Stack = reader.ReadInt32(); // Debug.WriteLine("target = " + TargetId + ";Abnormality:" + AbnormalityId + ";Duration:" + Duration + // ";Stack:" + Stack); }
public S_ANSWER_INTERACTIVE(TeraMessageReader reader) : base(reader) { reader.Skip(2 + 4); Model = reader.ReadUInt32(); Level = reader.ReadUInt32(); HasParty = reader.ReadBoolean(); HasGuild = reader.ReadBoolean(); reader.Skip(4); //server ID Name = reader.ReadTeraString(); }
public S_PARTY_MEMBER_CHANGE_HP(TeraMessageReader reader) : base(reader) { serverId = reader.ReadUInt32(); playerId = reader.ReadUInt32(); currentHP = reader.ReadInt32(); //if (reader.Version < 321550 || reader.Version > 321600) reader.Skip(4); maxHP = reader.ReadInt32(); }
internal SPartyMemberAbnormalRefresh(TeraMessageReader reader) : base(reader) { // PrintRaw(); ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); AbnormalityId = reader.ReadInt32(); Duration = reader.ReadInt64(); StackCounter = reader.ReadInt32(); //Debug.WriteLine("Target:"+TargetId+";Abnormality:"+AbnormalityId+";Duration:"+Duration+";Uknow:"+Unknow+";Stack:"+StackCounter); }
internal S_BOSS_GAGE_INFO(TeraMessageReader reader) : base(reader) { EntityId = reader.ReadEntityId(); HuntingZoneId = reader.ReadUInt32(); TemplateId = reader.ReadUInt32(); TargetId = reader.ReadEntityId(); Unk1 = reader.ReadInt32(); Unk2 = reader.ReadByte(); //enrage? HpRemaining = reader.ReadInt64(); TotalHp = reader.ReadInt64(); }
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}" ); }
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(); }
public S_TRADE_BROKER_DEAL_SUGGESTED(TeraMessageReader reader) : base(reader) { var nameOffset = reader.ReadUInt16(); PlayerId = reader.ReadUInt32(); Listing = reader.ReadUInt32(); Item = reader.ReadInt32(); Amount = reader.ReadInt64(); SellerPrice = reader.ReadInt64(); OfferedPrice = reader.ReadInt64(); Name = reader.ReadTeraString(); }
public S_PLAYER_CHANGE_EXP(TeraMessageReader reader) : base(reader) { GainedTotalExp = reader.ReadUInt64(); TotalExp = reader.ReadUInt64(); LevelExp = reader.ReadUInt64(); NextLevelExp = reader.ReadUInt64(); KilledMobEntityId = reader.ReadUInt64(); reader.Skip(4); GainedRestedExp = reader.ReadUInt32(); RestedExp = reader.ReadUInt32(); // float, u32, u32 (unks) }
public S_NOTIFY_GUILD_QUEST_URGENT(TeraMessageReader reader) : base(reader) { /* * offset quest * * short type # 0 = announce, 1 = spawn, 3 = death * int templateId * int zoneId * string quest # "@GuildQuest:questId" for StrSheet_GuildQuest lookup (if type == announce), "\0" for spawn and death types */ //announce //1200 # questOffset //00000000 # type //9800 # zone //00005a1b # template //0000 # quest //... //0000 //spawn //1200 # questOffset //01000000 # type //9800 # zone //00005a1b # template //00000000 # quest //0000 //death //1200 # questOffset //03000000 # type //9800 # zone //00005a1b # template //00000000 # quest //0000 try { var questOffset = reader.ReadInt16(); var t = reader.ReadInt32(); Type = (GuildBamQuestType)t; ZoneId = reader.ReadUInt32(); TemplateId = reader.ReadUInt32(); reader.BaseStream.Position = questOffset - 4; Quest = reader.ReadTeraString(); } catch { //Log.F($"[{nameof(S_NOTIFY_GUILD_QUEST_URGENT)}] Error while reading packet: {e}\nData: {Payload.Array.ToStringEx()}"); //Log.N("Warning", "A non-fatal error occured while parsing guild bam notification. More detailed info have been written to error.log. Please report this to the developer on Discord or Github.", NotificationType.Warning, 10000); } }
internal S_CREST_MESSAGE(TeraMessageReader reader) : base(reader) { //PrintRaw(); var unknow = reader.ReadUInt32(); //Type? 6 = reset? var typeId = reader.ReadUInt32(); // Debug.WriteLine("Crest type id:" + typeId); Type = (CrestType)typeId; SkillId = reader.ReadInt32() & 0x3FFFFFF; // Debug.WriteLine("Crest :" + Type + ";Skill Id "+SkillId); }
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 LoginServerMessage(TeraMessageReader reader) : base(reader) { int nameOffset = reader.ReadInt16(); reader.Skip(8); RaceGenderClass = new RaceGenderClass(reader.ReadInt32()); Id = reader.ReadEntityId(); 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(); reader.Skip(nameOffset - 34); Name = reader.ReadTeraString(); // Console.WriteLine(Name + ":" + BitConverter.ToString(BitConverter.GetBytes(Id.Id)) + ":" + ServerId.ToString() + " " + BitConverter.ToString(BitConverter.GetBytes(PlayerId))); }
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 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(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_REQUEST_CITY_WAR_MAP_INFO_DETAIL(TeraMessageReader reader) : base(reader) { GuildDetails = new List <Tuple <uint, string> >(); try { var count = reader.ReadUInt16(); if (count == 0) { return; } var offset = reader.ReadUInt16(); reader.BaseStream.Position = offset - 4; for (var i = 0; i < count; i++) { reader.Skip(2); // var current = reader.ReadUInt16(); var next = reader.ReadUInt16(); reader.Skip(6); var id = reader.ReadUInt32(); var name = reader.ReadTeraString(); /*var gm = */ reader.ReadTeraString(); /*var logo = */ reader.ReadTeraString(); //TODO: use gm and logo? GuildDetails.Add(new Tuple <uint, string>(id, name)); if (next != 0) { reader.BaseStream.Position = next - 4; } } } catch { // ignored } }
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_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(); }
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 C_CHECK_VERSION(TeraMessageReader reader) : base(reader) { var count = reader.ReadUInt16(); var offset = reader.ReadUInt16(); for (var i = 1; i <= count; i++) { reader.BaseStream.Position = offset - 4; reader.Skip(2); var nextOffset = reader.ReadUInt16(); var versionKey = reader.ReadUInt32(); var versionValue = reader.ReadUInt32(); Versions.Add(versionKey, versionValue); offset = nextOffset; } }
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 LoginServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(10); RaceGenderClass = new RaceGenderClass(reader.ReadInt32()); Id = reader.ReadEntityId(); reader.Skip(4); PlayerId = reader.ReadUInt32(); reader.Skip(260); Name = reader.ReadTeraString(); }
internal SpawnUserServerMessage(TeraMessageReader reader) : base(reader) { reader.Skip(30); PlayerId = reader.ReadUInt32(); Id = reader.ReadEntityId(); reader.Skip(18); RaceGenderClass=new RaceGenderClass(reader.ReadInt32()); reader.Skip(208); Name = reader.ReadTeraString(); GuildName = reader.ReadTeraString(); }