コード例 #1
0
        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
            }
        }
コード例 #2
0
 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
     }
 }
コード例 #3
0
 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;
     }
 }
コード例 #4
0
            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);
                }
            }
コード例 #5
0
        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");
            }
        }
コード例 #6
0
        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;
                }
            }
        }
コード例 #7
0
 internal C_WHISPER(TeraMessageReader reader) : base(reader)
 {
     TargetOffset = reader.ReadUInt16();
     TextOffset   = reader.ReadUInt16();
     Target       = reader.ReadTeraString();
     Text         = reader.ReadTeraString();
 }
コード例 #8
0
        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
            }
        }
コード例 #9
0
        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;
            }
        }
コード例 #10
0
        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}");
            }
        }
コード例 #11
0
        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;
                }
            }
        }
コード例 #12
0
        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);
        }
コード例 #13
0
 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();
 }
コード例 #14
0
 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);
 }
コード例 #15
0
        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;
            }
        }
コード例 #16
0
        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
        }
コード例 #17
0
        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();
        }
コード例 #18
0
        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 {}
        }
コード例 #19
0
        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();
        }
コード例 #20
0
        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));
            }
        }
コード例 #21
0
        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}");
            //}
        }
コード例 #22
0
        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;
        }
コード例 #23
0
        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());
        }
コード例 #24
0
        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();
        }
コード例 #25
0
        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;
            }
        }
コード例 #26
0
 internal S_LEAVE_PARTY_MEMBER(TeraMessageReader reader) : base(reader)
 {
     /*var nameoffset = */ reader.ReadUInt16();
     ServerId = reader.ReadUInt32();
     PlayerId = reader.ReadUInt32();
     Name     = reader.ReadTeraString();
 }
コード例 #27
0
        internal S_MY_PARTY_MATCH_INFO(TeraMessageReader reader) : base(reader)
        {
            var offset = reader.ReadUInt16();

            reader.Skip(1);
            Message = reader.ReadTeraString();
        }
コード例 #28
0
        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);
        }
コード例 #29
0
        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);
            }
        }
コード例 #30
0
        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();
        }
コード例 #31
0
 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();
 }