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_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_BEGIN_THROUGH_ARBITER_CONTRACT(TeraMessageReader reader) : base(reader) { var senderOffset = reader.ReadUInt16(); var recipientOffset = reader.ReadUInt16(); reader.Skip(2); Type = (RequestType)reader.ReadUInt32(); reader.RepositionAt(senderOffset); Sender = reader.ReadTeraString(); reader.RepositionAt(recipientOffset); Recipient = reader.ReadTeraString(); }
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); } }
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_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); } }
public S_PARTY_MEMBER_LIST(TeraMessageReader reader) : base(reader) { var count = reader.ReadUInt16(); var offset = reader.ReadUInt16(); Im = reader.ReadBoolean(); Raid = reader.ReadBoolean(); reader.Skip(12); LeaderServerId = reader.ReadUInt32(); LeaderPlayerId = reader.ReadUInt32(); reader.Skip(19); Members = new List <GroupMemberData>(); for (var i = 0; i < count; i++) { var u = new GroupMemberData(); reader.RepositionAt(offset); reader.Skip(2); var nextOffset = reader.ReadUInt16(); var nameOffset = reader.ReadUInt16(); u.ServerId = reader.ReadUInt32(); u.PlayerId = reader.ReadUInt32(); u.Level = reader.ReadUInt32(); u.Class = (Class)reader.ReadUInt32(); u.Online = reader.ReadBoolean(); u.EntityId = reader.ReadUInt64(); u.Order = reader.ReadInt32(); u.CanInvite = reader.ReadBoolean(); u.Laurel = (Laurel)reader.ReadUInt32(); u.Awakened = reader.ReadInt32() > 0; reader.RepositionAt(nameOffset); u.Name = reader.ReadTeraString(); u.Alive = true; u.IsLeader = u.ServerId == LeaderServerId && u.PlayerId == LeaderPlayerId; Members.Add(u); offset = nextOffset; } }
private string ParseBlockedUser(TeraMessageReader reader) { reader.Skip(4); var nameOffset = reader.ReadUInt16(); reader.RepositionAt(nameOffset); var name = reader.ReadTeraString(); reader.ReadTeraString(); //skips notes return(name); }
public C_LOGIN_ARBITER(TeraMessageReader reader) : base(reader) { var nameOffset = reader.ReadUInt16(); reader.Skip(9); Language = (LangEnum)reader.ReadUInt32(); Version = reader.ReadInt32(); reader.RepositionAt(nameOffset); AccountName = reader.ReadTeraString(); reader.Factory.ReleaseVersion = Version; }
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(); reader.RepositionAt(nameOffset); Name = reader.ReadTeraString(); }
public S_ANSWER_INTERACTIVE(TeraMessageReader reader) : base(reader) { var nameOffset = reader.ReadUInt16(); reader.Skip(4); // type if (reader.Factory.ReleaseVersion / 100 >= 103) { PlayerId = reader.ReadUInt32(); } TemplateId = reader.ReadInt32(); Level = reader.ReadInt32(); HasParty = reader.ReadBoolean(); HasGuild = reader.ReadBoolean(); ServerId = reader.ReadUInt32(); reader.RepositionAt(nameOffset); Name = reader.ReadTeraString(); }
public S_GET_USER_LIST(TeraMessageReader reader) : base(reader) { CharacterList = new List <CharacterData>(); var count = reader.ReadInt16(); var next = reader.ReadInt16(); for (var i = 0; i < count; i++) { var c = new CharacterData(); reader.RepositionAt(next); 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 = (Class)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.LastWorldId = reader.ReadUInt32(); c.LastGuardId = reader.ReadUInt32(); c.LastSectionId = reader.ReadUInt32(); reader.Skip(4); // dungeon gauntlet difficulty id c.LastOnline = reader.ReadInt64(); reader.Skip(367); c.Laurel = (Laurel)reader.ReadInt32(); c.Position = reader.ReadInt32(); c.GuildId = reader.ReadUInt32(); //TODO: use adventureCoins and itemLevel from here (added in p103) reader.RepositionAt(nameOffset); c.Name = reader.ReadTeraString(); try { reader.RepositionAt(guildOffset); c.GuildName = reader.ReadTeraString(); } catch { } CharacterList.Add(c); //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_SPAWN_USER(TeraMessageReader reader) : base(reader) { reader.Skip(2 + 2 + 2 + 2); var nameOffset = reader.ReadUInt16(); var guildNameOffset = reader.ReadUInt16(); var guildRankOffset = reader.ReadUInt16(); reader.Skip(2 + 2 + 2 + 2 + 2); ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); //if(!WindowManager.GroupWindow.VM.Exists(PlayerId,ServerId)) return; EntityId = reader.ReadUInt64(); reader.Skip(12); reader.Skip(2); reader.Skip(4); TemplateId = reader.ReadUInt32(); reader.Skip(2 + 2 + 2 + 2 + 2 + 1 + 1 + 4 + 4); var weaponId = reader.ReadUInt32(); var armorId = reader.ReadUInt32(); var glovesId = reader.ReadUInt32(); var bootsId = reader.ReadUInt32(); Weapon = new GearItemData(weaponId, GearTier.Low, GearPiece.Weapon); Armor = new GearItemData(armorId, GearTier.Low, GearPiece.Armor); Gloves = new GearItemData(glovesId, GearTier.Low, GearPiece.Hands); Boots = new GearItemData(bootsId, GearTier.Low, GearPiece.Feet); // ReSharper disable UnusedVariable var underwear = reader.ReadUInt32(); var head = reader.ReadUInt32(); var face = reader.ReadUInt32(); var spawnFx = reader.ReadInt32(); var mount = reader.ReadInt32(); var pose = reader.ReadInt32(); var title = reader.ReadInt32(); var shuttleId = reader.ReadInt64(); var guildLogo = reader.ReadInt32(); var exarch = reader.ReadBoolean(); var gm = reader.ReadBoolean(); var gmInv = reader.ReadBoolean(); var weapModel = reader.ReadUInt32(); var bodyModel = reader.ReadUInt32(); var handModel = reader.ReadUInt32(); var feetModel = reader.ReadUInt32(); var weapDye = reader.ReadUInt32(); var bodyDye = reader.ReadUInt32(); var handDye = reader.ReadUInt32(); var feetDye = reader.ReadUInt32(); var underwearDye = reader.ReadUInt32(); var backDye = reader.ReadUInt32(); var headDye = reader.ReadUInt32(); var faceDye = reader.ReadUInt32(); var weapEnch = reader.ReadUInt32(); var woldEventTarget = reader.ReadBoolean(); var pkEnabled = reader.ReadBoolean(); // ReSharper restore UnusedVariable Level = reader.ReadInt32(); //reader.Skip(4 + 4 + 4 + 4 + 4 + 4 + 4 + 8 + 4 + 1 + 1 + 1 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4); reader.RepositionAt(nameOffset); Name = reader.ReadTeraString(); reader.RepositionAt(guildNameOffset); GuildName = reader.ReadTeraString(); reader.RepositionAt(guildRankOffset); GuildRank = reader.ReadTeraString(); //System.Console.WriteLine("[S_SPAWN_USER] {0} {1}", EntityId, Name); }
public S_ITEMLIST(TeraMessageReader r) : base(r) { Items = new Dictionary <uint, ItemAmount>(); GearItems = new Dictionary <uint, ParsedGearItem>(); try { var count = r.ReadUInt16(); var offset = r.ReadUInt16(); r.Skip(8); // gameId Container = r.ReadInt32(); Pocket = r.ReadInt32(); NumPockets = r.ReadInt32(); Size = r.ReadInt32(); r.Skip(8); // var money = r.ReadInt64(); r.Skip(4); // var lootPriority = r.ReadInt32(); IsOpen = r.ReadBoolean(); r.Skip(1); // var requested = r.ReadBoolean(); First = r.ReadBoolean(); More = r.ReadBoolean(); LastInBatch = r.ReadBoolean(); if (offset == 0) { return; } r.RepositionAt(offset); for (var i = 0; i < count; i++) { r.Skip(2); // var curr = reader.ReadUInt16(); var next = r.ReadUInt16(); r.Skip(4); // crystals ref r.Skip(4); // passivity ref r.Skip(4); // merged passivity ref r.Skip(2); // custom string offset var itemId = r.ReadUInt32(); r.Skip(8); // dbid r.Skip(8); // ownerId (playerId) var slot = r.ReadUInt32(); //if(slot <= 39) continue; var amount = r.ReadInt32(); r.Skip(4); // enchant r.Skip(4); // durability r.Skip(4); // soulbound r.Skip(4); // passivity sets r.Skip(4); // extra passivity sets r.Skip(4); // remodel r.Skip(4); // dye r.Skip(4); // dye sec remaining r.Skip(8); // dye date r.Skip(8); // dye expire date r.Skip(1); // masterwork r.Skip(4); // enigma r.Skip(4); // times brokered r.Skip(4); // enchant advantage r.Skip(4); // enchant bonus r.Skip(4); // enchant bonus max plus r.Skip(8); // bound to player (playerId) r.Skip(1); // awakened r.Skip(4); // liberation count r.Skip(4); // feedstock r.Skip(4); // bound to item r.Skip(1); // has etching r.Skip(1); // pc bang r.Skip(8); // exp Items[slot] = new ItemAmount(itemId, amount); //if (slot > 39) Items[slot] = new ItemAmount(itemId, amount); //else GearItems[itemId] = new ParsedGearItem(itemId, enchant, exp); if (next == 0) { break; } r.RepositionAt(next); } } catch { Failed = true; } }
public S_GET_USER_LIST(TeraMessageReader reader) : base(reader) { CharacterList = new List <CharacterData>(); var count = reader.ReadInt16(); var next = reader.ReadInt16(); for (var i = 0; i < count; i++) { var c = new CharacterData(); reader.RepositionAt(next); 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 = (Class)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.LastWorldId = reader.ReadUInt32(); c.LastGuardId = reader.ReadUInt32(); c.LastSectionId = reader.ReadUInt32(); c.LastOnline = reader.ReadInt64(); reader.Skip(reader.Factory.ReleaseVersion >= 8600 ? 367 : 359); c.Laurel = (Laurel)reader.ReadInt32(); c.Position = reader.ReadInt32(); c.GuildId = reader.ReadUInt32(); reader.RepositionAt(nameOffset); c.Name = reader.ReadTeraString(); try { reader.RepositionAt(guildOffset); c.GuildName = reader.ReadTeraString(); } catch { } CharacterList.Add(c); //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(); }