コード例 #1
0
 internal C_WHISPER(TeraMessageReader reader) : base(reader)
 {
     TargetOffset = reader.ReadUInt16();
     TextOffset   = reader.ReadUInt16();
     Target       = reader.ReadTeraString();
     Text         = reader.ReadTeraString();
 }
コード例 #2
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);
                }
            }
コード例 #3
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;
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 internal S_WHISPER(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(17);
     Sender   = reader.ReadTeraString();
     Receiver = reader.ReadTeraString();
     Text     = reader.ReadTeraString();
 }
コード例 #6
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
     }
 }
コード例 #7
0
        internal S_BEGIN_THROUGH_ARBITER_CONTRACT(TeraMessageReader reader)
            : base(reader)
        {
            //reader.Skip(18);
            reader.Skip(8);
            var type = reader.ReadByte();

            if (type == 0x23)
            {
                Console.Beep();
                Console.WriteLine("ERROR TYPE 23:");
                PrintRaw();
            }
            reader.Skip(9);
            InviteName = reader.ReadTeraString();
            try
            {
                PlayerName = reader.ReadTeraString();
            }
            catch
            {
                PlayerName = "Error parsing S_BEGIN_THROUGH_ARBITER_CONTRACT: " + BitConverter.ToString(Raw);
            }

            //Debug.WriteLine("InviteName:" + InviteName + " PlayerName:" + PlayerName);
        }
コード例 #8
0
        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();
        }
コード例 #9
0
 public S_PRIVATE_CHAT(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(4);
     Channel    = reader.ReadUInt32();
     AuthorId   = reader.ReadUInt64();
     AuthorName = reader.ReadTeraString();
     Message    = reader.ReadTeraString();
 }
コード例 #10
0
ファイル: S_USER_DEATH.cs プロジェクト: SoliaRdi/TeraCompass
 internal S_USER_DEATH(TeraMessageReader reader) : base(reader)
 {
     Enemy = (reader.ReadByte() & 1) == 0;
     reader.Skip(4);
     Killed = reader.ReadTeraString();
     Killer = reader.ReadTeraString();
     File.AppendAllText("combat.log", $"{DateTime.Now}|{Enemy}|{Killed}|{Killer}\n");
 }
コード例 #11
0
ファイル: S_PRIVATE_CHAT.cs プロジェクト: qipa/delegate
 internal S_PRIVATE_CHAT(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(4);//offsets
     Channel    = reader.ReadUInt32();
     AuthorId   = reader.ReadUInt64();
     AuthorName = reader.ReadTeraString();
     Text       = reader.ReadTeraString();
     Console.WriteLine("Channel:" + Channel + ";Username:"******";Text:" + Text + ";AuthorId:" + AuthorId);
 }
コード例 #12
0
 public S_WHISPER(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(6);
     PlayerId = reader.ReadUInt64();
     reader.Skip(3);
     Author    = reader.ReadTeraString();
     Recipient = reader.ReadTeraString();
     Message   = reader.ReadTeraString();
 }
コード例 #13
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);
 }
コード例 #14
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();
 }
コード例 #15
0
        internal S_CHAT(TeraMessageReader reader) : base(reader)
        {
            reader.Skip(4);//offsets
            var channel = reader.ReadUInt32();

            Channel = (ChannelEnum)channel;
            reader.Skip(11);
            Username = reader.ReadTeraString();
            Text     = reader.ReadTeraString();
        }
コード例 #16
0
        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;
            }
        }
コード例 #17
0
ファイル: S_GUILD_NAME.cs プロジェクト: tuita520/Tera
        internal S_GUILD_NAME(TeraMessageReader reader) : base(reader)
        {
            reader.Skip(8);
            UserId    = reader.ReadEntityId();
            GuildName = reader.ReadTeraString();
            return; //we don't need the rest now, uncomment if needed

            GuildRank  = reader.ReadTeraString();
            GuildTitle = reader.ReadTeraString();
            GuildLogo  = reader.ReadTeraString();
        }
コード例 #18
0
 public S_WHISPER(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(6);
     GameId = reader.ReadUInt64();
     reader.Skip(1);
     IsGm = reader.ReadBoolean();
     reader.Skip(1);
     Author    = reader.ReadTeraString();
     Recipient = reader.ReadTeraString();
     Message   = reader.ReadTeraString();
 }
コード例 #19
0
        public S_GUILD_TOWER_INFO(TeraMessageReader reader) : base(reader)
        {
            reader.Skip(2);
            var nameOffset = reader.ReadUInt16();

            TowerId  = reader.ReadUInt64();
            GuildId  = reader.ReadUInt32();
            LogoInfo = reader.ReadTeraString();
            reader.BaseStream.Position = nameOffset - 4;
            GuildName = reader.ReadTeraString();
        }
コード例 #20
0
 internal SpawnUserServerMessage(TeraMessageReader reader)
     : base(reader)
 {
     reader.Skip(0x22);
     Id = reader.ReadEntityId();
     reader.Skip(18);
     RaceGenderClass = new RaceGenderClass(reader.ReadInt32());
     reader.Skip(208);
     Name      = reader.ReadTeraString();
     GuildName = reader.ReadTeraString();
 }
コード例 #21
0
        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);
        }
コード例 #22
0
 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();
 }
コード例 #23
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();
        }
コード例 #24
0
        internal SpawnUserServerMessage(TeraMessageReader reader)
            : base(reader)
        {
            reader.Skip(26);
            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();
            reader.Skip(18);
            RaceGenderClass = new RaceGenderClass(reader.ReadInt32());
            reader.Skip(208);
            Name      = reader.ReadTeraString();
            GuildName = reader.ReadTeraString();
//            Console.WriteLine(Name + ":" + BitConverter.ToString(BitConverter.GetBytes(Id.Id))+ ":"+ ServerId.ToString()+" "+ BitConverter.ToString(BitConverter.GetBytes(PlayerId)));
        }
コード例 #25
0
        internal S_REQUEST_CONTRACT(TeraMessageReader reader) : base(reader)
        {
            //PrintRaw();
            reader.Skip(24);
            short type = reader.ReadInt16();

            Type = (RequestType)type;
            reader.Skip(14);
            //int unk3 = reader.ReadInt32();
            //int time = reader.ReadInt32();
            Sender    = reader.ReadTeraString();
            Recipient = reader.ReadTeraString();
            Debug.WriteLine("type:" + type + ";translated:" + Type + "; Sender:" + Sender + ";Recipient" + Recipient);
        }
コード例 #26
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;
        }
コード例 #27
0
        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);
            }
        }
コード例 #28
0
        private SimpleUser ParseFriend(TeraMessageReader reader)
        {
            reader.Skip(4);
            var nameOffset = reader.ReadUInt16();

            reader.Skip(4);
            var id = reader.ReadUInt32();

            reader.BaseStream.Position = nameOffset - 4;
            var name = reader.ReadTeraString();

            reader.ReadTeraString();
            reader.ReadTeraString();
            return(new SimpleUser(id, name));
        }
コード例 #29
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());
        }
コード例 #30
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();
        }
コード例 #31
0
 internal S_LEAVE_PARTY_MEMBER(TeraMessageReader reader) : base(reader)
 {
     /*var nameoffset = */ reader.ReadUInt16();
     ServerId = reader.ReadUInt32();
     PlayerId = reader.ReadUInt32();
     Name     = reader.ReadTeraString();
 }
コード例 #32
0
 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();
 }