public S_INVEN(TeraMessageReader reader) : base(reader) { //TODO if (SessionManager.CurrentPlayer.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++) { reader.Skip(2); //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 { // ignored } }
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_CLEAR_COUNT_LIST(TeraMessageReader reader) : base(reader) { try { var count = reader.ReadUInt16(); reader.Skip(2); //var offset = reader.ReadUInt16(); PlayerId = reader.ReadUInt32(); DungeonClears = new Dictionary <uint, int>(); for (var i = 0; i < count; i++) { //reader.BaseStream.Position = 8; reader.Skip(2); //var current = reader.ReadUInt16(); var next = reader.ReadUInt16(); var id = reader.ReadUInt32(); var clears = reader.ReadInt32(); reader.Skip(1); if (next != 0) { reader.BaseStream.Position = next - 4; } DungeonClears.Add(id, clears); } } catch { Failed = true; } }
public GuildQuestList(TeraMessageReader r) : base(r) { itemsCount = r.ReadUInt16(); firstQuestOffset = r.ReadUInt16(); guildNameOffset = r.ReadUInt16(); masterNameOffset = r.ReadUInt16(); guildId = r.ReadUInt64(); guildLvl = r.ReadUInt32(); totalXp = r.ReadUInt32(); unk1 = r.ReadUInt32(); nextLvXp = r.ReadUInt32(); unk2 = r.ReadUInt32(); funds = r.ReadUInt32(); unk3 = r.ReadUInt32(); totalChars = r.ReadUInt32(); totalAccounts = r.ReadUInt32(); guildSize = r.ReadUInt32(); dateCreated = r.ReadUInt64(); dailyQuestsDone = r.ReadUInt32(); maxDailyQuests = r.ReadUInt32(); guildName = r.ReadTeraString(); masterName = r.ReadTeraString(); Quests = new List <GuildQuest>(); for (int i = 0; i < itemsCount; i++) { r.Skip(4); var q = new GuildQuest(r); Quests.Add(q); } }
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; } } }
internal C_WHISPER(TeraMessageReader reader) : base(reader) { TargetOffset = reader.ReadUInt16(); TextOffset = reader.ReadUInt16(); Target = reader.ReadTeraString(); Text = reader.ReadTeraString(); }
public S_REQUEST_CITY_WAR_MAP_INFO(TeraMessageReader reader) : base(reader) { Guilds = new List <CityWarGuildData>(); try { var count = reader.ReadUInt16(); var offset = reader.ReadUInt16(); reader.Skip(4 + 4 + 4); //id, state, timeRemaining reader.BaseStream.Position = offset - 4; for (var i = 0; i < count; i++) { reader.Skip(2); // var current = reader.ReadUInt16(); var next = reader.ReadUInt16(); var self = reader.ReadInt32(); var id = reader.ReadUInt32(); var kills = reader.ReadInt32(); var deaths = reader.ReadInt32(); var towerHp = reader.ReadSingle(); Guilds.Add(new CityWarGuildData(self, id, kills, deaths, towerHp)); if (next != 0) { reader.BaseStream.Position = next - 4; } } } catch { // ignored } }
internal S_CHECK_TO_READY_PARTY(TeraMessageReader reader) : base(reader) { //PrintRaw(); Count = reader.ReadUInt16(); var offset = reader.ReadUInt16(); for (var i = 1; i <= Count; i++) { reader.BaseStream.Position = offset - 4; var pointer = reader.ReadUInt16(); var nextOffset = reader.ReadUInt16(); var serverId = reader.ReadUInt32(); var playerId = reader.ReadUInt32(); var status = reader.ReadByte(); Party.Add(new ReadyPartyMember { ServerId = serverId, PlayerId = playerId, Status = status == 1? ReadyStatus.Ready : ReadyStatus.NotReady }); offset = nextOffset; } }
internal S_CHECK_TO_READY_PARTY(TeraMessageReader reader) : base(reader) { PrintRaw(); Count = reader.ReadUInt16(); var offset = reader.ReadUInt16(); for (var i = 1; i <= Count; i++) { reader.BaseStream.Position = offset - 4; var pointer = reader.ReadUInt16(); Debug.Assert(pointer == offset);//should be the same var nextOffset = reader.ReadUInt16(); var serverId = reader.ReadUInt32(); var playerId = reader.ReadUInt32(); var status = reader.ReadByte(); Party.Add(new ReadyPartyMembers { ServerId = serverId, PlayerId = playerId, Status = status }); offset = nextOffset; } Debug.WriteLine($"Count:{Count}"); foreach (var menber in Party) { Debug.WriteLine($"ServerId:{BitConverter.ToString(BitConverter.GetBytes(menber.ServerId))}, PlayerId:{BitConverter.ToString(BitConverter.GetBytes(menber.PlayerId))}, State:{menber.Status}"); } }
internal S_GET_USER_LIST(TeraMessageReader reader) : base(reader) { var count = reader.ReadUInt16(); var offset = reader.ReadUInt16(); for (var i = 1; i <= count; i++) { reader.BaseStream.Position = offset - 4; var pointer = reader.ReadUInt16(); Debug.Assert(pointer == offset);//should be the same var nextOffset = reader.ReadUInt16(); reader.Skip(14); var gNameOffset = reader.ReadUInt16(); var playerId = reader.ReadUInt32(); if (reader.Factory.ReleaseVersion >= 4000) { //{ //no guildid on classic, will get id from userguildlogo // reader.Skip(reader.Factory.ReleaseVersion < 6200 ? 286 : 294); // if (reader.Factory.ReleaseVersion >= 6603) reader.Skip(121); //added accessory transformation // var guildId = reader.ReadUInt32(); // PlayerGuilds.Add(playerId, guildId); // reader.BaseStream.Position = gNameOffset - 4; // var gName = reader.ReadTeraString(); // PlayerGuildNames.Add(playerId, gName); //} offset = nextOffset; } } }
public S_GET_USER_GUILD_LOGO(TeraMessageReader reader) : base(reader) { var offset = reader.ReadUInt16(); var size = reader.ReadUInt16(); PlayerId = reader.ReadUInt32(); GuildId = reader.ReadUInt32(); //Debug.WriteLine("icon size:"+size+";offset:"+offset+";player:"+PlayerId+";GuildId:"+GuildId); var logo = reader.ReadBytes(size); GuildLogo = new Bitmap(64, 64, PixelFormat.Format8bppIndexed); var paletteSize = (size - 0x1018) / 3; if (paletteSize > 0x100 || paletteSize < 1) { Debug.WriteLine("Missed guild logo format"); return; } var palette = GuildLogo.Palette; for (var i = 0; i < paletteSize; i++) { palette.Entries[i] = Color.FromArgb(logo[0x14 + i * 3], logo[0x15 + i * 3], logo[0x16 + i * 3]); } var pixels = GuildLogo.LockBits(new Rectangle(0, 0, 64, 64), ImageLockMode.WriteOnly, GuildLogo.PixelFormat); Marshal.Copy(logo, size - 0x1000, pixels.Scan0, 0x1000); GuildLogo.UnlockBits(pixels); GuildLogo.Palette = palette; //GuildLogo.Save($"q:\\{Time.Ticks}.bmp",ImageFormat.Bmp); //System.IO.File.WriteAllBytes($"q:\\{Time.Ticks}.bin", logo); }
internal S_WHISPER(TeraMessageReader reader) : base(reader) { SenderOffset = reader.ReadUInt16(); ReceiverOffset = reader.ReadUInt16(); TextOffset = reader.ReadUInt16(); reader.Skip(11); Sender = reader.ReadTeraString(); Receiver = reader.ReadTeraString(); Text = reader.ReadTeraString(); }
internal S_PRIVATE_CHAT(TeraMessageReader reader) : base(reader) { AuthorNameOffset = reader.ReadUInt16(); TextOffset = reader.ReadUInt16(); Channel = reader.ReadInt32(); AuthorId = reader.ReadUInt64(); AuthorName = reader.ReadTeraString(); Text = reader.ReadTeraString(); Debug.WriteLine("Channel:" + Channel + ";Username:"******";Text:" + Text + ";AuthorId:" + AuthorId); }
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); //unk1 = reader.ReadUInt32(); //unk2 = reader.ReadUInt32(); //unk3 = reader.ReadUInt16(); //unk4 = reader.ReadUInt16(); _leaderServerId = reader.ReadUInt32(); _leaderPlayerId = reader.ReadUInt32(); reader.Skip(19); //unk5 = reader.ReadUInt32(); //unk6 = reader.ReadUInt32(); //unk7 = reader.ReadByte(); //unk8 = reader.ReadUInt32(); //unk9 = reader.ReadByte(); //unk10 = reader.ReadUInt32(); //unk11 = reader.ReadByte(); Members = new List <User>(); for (var i = 0; i < count; i++) { var u = new User(WindowManager.GroupWindow.Dispatcher); reader.BaseStream.Position = offset - 4; reader.Skip(2); // var pointer = reader.ReadUInt16(); var nextOffset = reader.ReadUInt16(); var nameOffset = reader.ReadUInt16(); u.ServerId = reader.ReadUInt32(); u.PlayerId = reader.ReadUInt32(); u.Level = reader.ReadUInt32(); u.UserClass = (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.BaseStream.Position = nameOffset - 4; u.Name = reader.ReadTeraString(); u.Alive = true; u.IsLeader = u.ServerId == LeaderServerId && u.PlayerId == LeaderPlayerId; Members.Add(u); offset = nextOffset; } }
public S_REQUEST_SPAWN_SERVANT(TeraMessageReader reader) : base(reader) { // ReSharper disable UnusedVariable var giftedSkillsCount = reader.ReadUInt16(); var giftedSkillsOffset = reader.ReadUInt16(); var abilitiesCount = reader.ReadUInt16(); var abilitiesOffset = reader.ReadUInt16(); var nameOffset = reader.ReadUInt16(); GameId = reader.ReadUInt64(); var dbid = reader.ReadUInt64(); var loc = reader.ReadVector3f(); var h = reader.ReadUInt16(); var type = reader.ReadUInt32(); Id = reader.ReadUInt32(); var linkedNpcTemplateId = reader.ReadUInt32(); var linkedNpcZoneId = reader.ReadUInt16(); var walkSpeed = reader.ReadUInt16(); var runSpeed = reader.ReadUInt16(); Owner = reader.ReadUInt64(); var energy = reader.ReadUInt32(); var spawnType = reader.ReadUInt32(); var level = reader.ReadUInt32(); FellowShip = reader.ReadUInt32(); // ReSharper restore UnusedVariable }
internal S_CHAT(TeraMessageReader reader) : base(reader) { UsernameOffset = reader.ReadUInt16(); TextOffset = reader.ReadUInt16(); var channel = reader.ReadInt32(); Channel = (ChannelEnum)channel; reader.Skip(11); Username = reader.ReadTeraString(); Text = reader.ReadTeraString(); }
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 (int 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) { 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)); Console.WriteLine(itemId + " " + enchant + " [" + slot + "]"); reader.BaseStream.Position = next - 4; } } catch {} }
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_USER_BLOCK_LIST(TeraMessageReader reader) : base(reader) { BlockedUsers = new List <string>(); var count = reader.ReadUInt16(); var offest = reader.ReadUInt16(); for (var i = 0; i < count; i++) { BlockedUsers.Add(ParseBlockedUser(reader)); } }
internal S_PARTY_MEMBER_LIST(TeraMessageReader reader) : base(reader) { var count = reader.ReadUInt16(); var offset = reader.ReadUInt16(); Ims = reader.ReadBoolean(); Raid = reader.ReadBoolean(); reader.Skip(12); LeaderServerId = reader.ReadUInt32(); LeaderPlayerId = reader.ReadUInt32(); reader.Skip(19); for (var i = 1; i <= count; i++) { reader.BaseStream.Position = offset - 4; var pointer = reader.ReadUInt16(); Debug.Assert(pointer == offset);//should be the same var nextOffset = reader.ReadUInt16(); var nameoffset = reader.ReadUInt16(); var ServerId = reader.ReadUInt32(); var PlayerId = reader.ReadUInt32(); var Level = reader.ReadUInt32(); var PlayerClass = (PlayerClass)(reader.ReadInt32() + 1); var Status = reader.ReadByte(); var Id = reader.ReadEntityId(); var Order = reader.ReadUInt32(); var CanInvite = reader.ReadByte(); var unk1 = reader.ReadUInt32(); // var unk2 = reader.ReadUInt32(); //probably awakened status, appeared with KR awakening update reader.BaseStream.Position = nameoffset - 4; var Name = reader.ReadTeraString(); offset = nextOffset; Party.Add(new PartyMember { ServerId = ServerId, PlayerId = PlayerId, Level = Level, PlayerClass = PlayerClass, Status = Status, Id = Id, Order = Order, CanInvite = CanInvite, unk1 = unk1, Name = Name }); } ; //Debug.WriteLine($"leader:{BitConverter.ToString(BitConverter.GetBytes(LeaderPlayerId))}, party:"); //foreach (PartyMember member in Party) //{ // Debug.WriteLine($"{member.PlayerClass} {BitConverter.ToString(BitConverter.GetBytes(member.PlayerId))} {member.Name} :{member.Id.ToString()} caninvite: {member.CanInvite} Status: {member.Status}"); //} }
public S_CHAT(TeraMessageReader reader) : base(reader) { var authorNameOffset = reader.ReadUInt16(); var messageOffset = reader.ReadUInt16(); var ch = reader.ReadUInt32(); AuthorId = reader.ReadUInt64(); reader.Skip(3); reader.BaseStream.Position = authorNameOffset - 4; AuthorName = reader.ReadTeraString(); reader.BaseStream.Position = messageOffset - 4; Message = reader.ReadTeraString(); Channel = ch == 212 ? (ChatChannel)26 : (ChatChannel)ch; }
public S_PARTY_MATCH_LINK(TeraMessageReader reader) : base(reader) { var nameOffset = reader.ReadUInt16(); var msgOffset = reader.ReadUInt16(); Id = reader.ReadUInt32(); reader.Skip(1); Raid = reader.ReadBoolean(); reader.BaseStream.Position = nameOffset - 4; Name = reader.ReadTeraString(); reader.BaseStream.Position = msgOffset - 4; Message = StringUtils.ReplaceHtmlEscapes(reader.ReadTeraString()); }
public S_CHAT(TeraMessageReader reader) : base(reader) { var authorNameOffset = reader.ReadUInt16(); var messageOffset = reader.ReadUInt16(); Channel = reader.ReadUInt32(); AuthorId = reader.ReadUInt64(); reader.Skip(1); IsGm = reader.ReadBoolean(); reader.Skip(1); reader.BaseStream.Position = authorNameOffset - 4; AuthorName = reader.ReadTeraString(); reader.BaseStream.Position = messageOffset - 4; Message = reader.ReadTeraString(); }
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 S_LEAVE_PARTY_MEMBER(TeraMessageReader reader) : base(reader) { /*var nameoffset = */ reader.ReadUInt16(); ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); Name = reader.ReadTeraString(); }
internal S_MY_PARTY_MATCH_INFO(TeraMessageReader reader) : base(reader) { var offset = reader.ReadUInt16(); reader.Skip(1); Message = reader.ReadTeraString(); }
public S_SPAWN_USER(TeraMessageReader reader) : base(reader) { reader.Skip(2 + 2 + 2 + 2); var nameOffset = reader.ReadUInt16() - 4; reader.Skip(2 + 2 + 2 + 2 + 2 + 2 + 2); ServerId = reader.ReadUInt32(); PlayerId = reader.ReadUInt32(); //if(!WindowManager.GroupWindow.VM.Exists(PlayerId,ServerId)) return; EntityId = reader.ReadUInt64(); reader.Skip(4 + 4 + 4 + 2 + 4 + 4 + 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 GearItem(weaponId, GearTier.Low, GearPiece.Weapon, 0, 0); Armor = new GearItem(armorId, GearTier.Low, GearPiece.Armor, 0, 0); Gloves = new GearItem(glovesId, GearTier.Low, GearPiece.Hands, 0, 0); Boots = new GearItem(bootsId, GearTier.Low, GearPiece.Feet, 0, 0); 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.BaseStream.Position = nameOffset; Name = reader.ReadTeraString(); //System.Console.WriteLine("[S_SPAWN_USER] {0} {1}", EntityId, Name); }
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_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 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(); }