コード例 #1
0
 internal StartUserProjectileServerMessage(TeraMessageReader reader)
     : base(reader)
 {
     OwnerId = reader.ReadEntityId();
     reader.Skip(8);
     Id = reader.ReadEntityId();
 }
コード例 #2
0
 internal SpawnProjectileServerMessage(TeraMessageReader reader)
     : base(reader)
 {
     Id = reader.ReadEntityId();
     reader.Skip(37);
     OwnerId = reader.ReadEntityId();
 }
コード例 #3
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();
 }
コード例 #4
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();
 }
コード例 #5
0
 internal EachSkillResultServerMessage(TeraMessageReader reader)
     : base(reader)
 {
     reader.Skip(4);
     Source = reader.ReadEntityId();
     Target = reader.ReadEntityId();
     reader.Skip(4);
     SkillId = reader.ReadInt32() & 0x3FFFFFF;
     reader.Skip(16);
     Amount = reader.ReadInt32();
     Flags = (SkillResultFlags)reader.ReadInt32();
     IsCritical = (reader.ReadByte() & 1) != 0;
 }
コード例 #6
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();
 }
コード例 #7
0
 internal ParsedMessage(TeraMessageReader reader)
     : base(reader.Message.Time, reader.Message.Direction, reader.Message.Data)
 {
     OpCodeName = reader.OpCodeName;
 }
コード例 #8
0
 internal UnknownMessage(TeraMessageReader reader)
     : base(reader)
 {
 }
コード例 #9
0
        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();
        }
コード例 #10
0
 public S_ASK_BIDDING_RARE_ITEM(TeraMessageReader reader) : base(reader)
 {
     //needed only to setup the rolling phase, so not actually parsed
 }
コード例 #11
0
ファイル: SkillId.cs プロジェクト: tuita520/Tera
 public SkillId(TeraMessageReader reader) : this()
 {
     _version = reader.Factory.ReleaseVersion;
     _raw     = _version >= 7401 ? reader.ReadUInt64() : reader.ReadUInt32();
 }
コード例 #12
0
 internal SpawnNpcServerMessage(TeraMessageReader reader)
     : base(reader)
 {
     reader.Skip(6);
     Id = reader.ReadEntityId();
 }
コード例 #13
0
ファイル: S_GUILD_QUEST_LIST.cs プロジェクト: tuita520/Tera
        internal S_GUILD_QUEST_LIST(TeraMessageReader reader) : base(reader)
        {
            //PrintRaw();
            GuildQuests = new List <GuildQuest>();
            var counter           = reader.ReadUInt16();
            var questOffset       = reader.ReadUInt16();
            var guildNameOffset   = reader.ReadUInt16();
            var guildMasterOffset = reader.ReadUInt16();

            var guildId       = reader.ReadUInt32();
            var guildMasterId = reader.ReadInt32();

            GuildLevel            = reader.ReadUInt32();
            GuildXpCurrent        = reader.ReadUInt64();
            GuildXpNextLevel      = reader.ReadUInt64();
            Gold                  = reader.ReadUInt64();
            NumberCharacters      = reader.ReadUInt32();
            NumberAccount         = reader.ReadUInt32();
            GuildSize             = (GuildSizeType)reader.ReadUInt32();
            GuildCreationTime     = UnixTimeStampToDateTime(reader.ReadUInt64());
            NumberQuestsDone      = reader.ReadUInt32();
            NumberTotalDailyQuest = reader.ReadUInt32();
            GuildName             = reader.ReadTeraString();
            GuildMaster           = reader.ReadTeraString();

            for (var i = 1; i <= counter; i++)
            {
                reader.BaseStream.Position = questOffset - 4;
                var pointer = reader.ReadUInt16();
                Debug.Assert(pointer == questOffset);//should be the same
                var nextOffset = reader.ReadUInt16();

                var countTargets  = reader.ReadUInt16();
                var offsetTargets = reader.ReadUInt16();

                var countUnk2  = reader.ReadUInt16();
                var offsetUnk2 = reader.ReadUInt16();

                var countRewards  = reader.ReadUInt16();
                var offsetRewards = reader.ReadUInt16();

                var offsetName        = reader.ReadUInt16();
                var offsetDescription = reader.ReadUInt16();
                var offsetGuildName   = reader.ReadUInt16();

                var id         = reader.ReadUInt32();
                var questType2 = (GuildQuestType2)reader.ReadUInt32();
                var questSize  = (QuestSizeType)reader.ReadUInt32();
                var unk3       = reader.ReadInt32(); //2 if rally
                var totalTime  = reader.ReadInt32();
                var active     = reader.ReadInt32(); //0=not taken, 1= in progress, 2=completed
                //Debug.WriteLine(active.ToString("X"));
                var activeBool = active == 1;

                //in seconds
                var timeRemaining = reader.ReadUInt32();


                var guildQuestType = (GuildQuestType)reader.ReadUInt32();
                var unk5           = reader.ReadByte();
                var unk6           = reader.ReadInt32();

                var guildQuestDescriptionLabel = reader.ReadTeraString();
                var guildQuestTitleLabel       = reader.ReadTeraString();
                var questguildname             = reader.ReadTeraString();
                //Debug.WriteLine(
                // ";unk3:" + unk3 +
                // ";unk4:" + unk4 +
                // ";unk5:" + unk5.ToString("X") +
                // ";unk6:" + unk6 +
                // ";unk7:" + BitConverter.ToString(unk7) +
                // ";countUnk2:" + countUnk2 +
                // ";offsetUnk2:" + offsetUnk2
                // );
                List <GuildQuestTarget> targets = new List <GuildQuestTarget>();
                reader.BaseStream.Position = offsetTargets - 4;
                for (var j = 1; j <= countTargets; j++)
                {
                    var currentPosition  = reader.ReadUInt16();
                    var nextTargetOffset = reader.ReadUInt16();
                    var zoneId           = reader.ReadUInt32();
                    var targetId         = reader.ReadUInt32();
                    var countQuest       = reader.ReadUInt32();
                    var totalQuest       = reader.ReadUInt32();
                    targets.Add(new GuildQuestTarget(zoneId, targetId, countQuest, totalQuest));
                }

                var nextUnk2Offset = offsetUnk2;
                for (var j = 1; j <= countUnk2; j++)
                {
                    reader.BaseStream.Position = nextUnk2Offset - 4;
                    var currentPosition = reader.ReadUInt16();
                    nextUnk2Offset = reader.ReadUInt16();
                    Debug.WriteLine("unk2:" + reader.ReadByte().ToString("X") + " ;" + j + "/" + countUnk2);
                }

                List <GuildQuestItem> rewards = new List <GuildQuestItem>();
                reader.BaseStream.Position = offsetRewards - 4;
                for (var j = 1; j <= countRewards; j++)
                {
                    var currentPosition  = reader.ReadUInt16();
                    var nextRewardOffset = reader.ReadUInt16();
                    var item             = reader.ReadUInt32();
                    var amount           = reader.ReadUInt64();

                    rewards.Add(new GuildQuestItem(item, amount));
                }

                questOffset = nextOffset;

                var quest = new GuildQuest(
                    guildQuestType,
                    questType2,
                    guildQuestDescriptionLabel,
                    guildQuestTitleLabel,
                    questguildname,
                    targets,
                    activeBool,
                    rewards,
                    timeRemaining,
                    questSize

                    );
                GuildQuests.Add(quest);
            }

            // Debug.WriteLine(ToString());
        }
コード例 #14
0
 internal SpawnNpcServerMessage(TeraMessageReader reader)
     : base(reader)
 {
     reader.Skip(6);
     Id = reader.ReadEntityId();
 }
コード例 #15
0
 public S_CHANGE_RELATION(TeraMessageReader reader) : base(reader)
 {
     EntityId = reader.ReadEntityId();
     Relation = reader.ReadInt32();
 }
コード例 #16
0
 internal S_AVAILABLE_EVENT_MATCHING_LIST(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(24);
     Badges  = reader.ReadInt32();
     Credits = reader.ReadInt32();
 }
コード例 #17
0
 public S_BAN_PARTY(TeraMessageReader reader) : base(reader)
 {
 }
コード例 #18
0
 public S_RESULT_ITEM_BIDDING(TeraMessageReader reader) : base(reader)
 {
     //used only to end rolling phase, so not actually parsed
 }
コード例 #19
0
 internal ParsedMessage(TeraMessageReader reader)
     : base(reader.Message.Time, reader.Message.Direction, reader.Message.Data)
 {
     OpCodeName = reader.OpCodeName;
 }
コード例 #20
0
 public S_SYSTEM_MESSAGE(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(2);
     Message = reader.ReadTeraString();
 }
コード例 #21
0
 public C_REQUEST_GAMESTAT_PING(TeraMessageReader reader) : base(reader)
 {
 }
コード例 #22
0
ファイル: S_USER_STATUS.cs プロジェクト: skstbdl/Tera
 internal SUserStatus(TeraMessageReader reader) : base(reader)
 {
     User   = reader.ReadEntityId();
     Status = reader.ReadByte();
 }
コード例 #23
0
 public UnknownMessage(TeraMessageReader reader)
     : base(reader)
 {
 }
コード例 #24
0
 public S_DESPAWN_NPC(TeraMessageReader reader) : base(reader)
 {
     Target = reader.ReadUInt64();
     reader.Skip(3 * 4);
     Type = (DespawnType)reader.ReadUInt32();
 }
コード例 #25
0
 internal UnknownMessage(TeraMessageReader reader)
     : base(reader)
 {
 }
コード例 #26
0
        public S_LOAD_TOPO(TeraMessageReader reader) : base(reader)
        {

        }
コード例 #27
0
 internal SpawnProjectileServerMessage(TeraMessageReader reader)
     : base(reader)
 {
     Id = reader.ReadEntityId();
 }
コード例 #28
0
 public S_ABNORMALITY_END(TeraMessageReader reader) : base(reader)
 {
     TargetId      = reader.ReadUInt64();
     AbnormalityId = reader.ReadUInt32();
 }
コード例 #29
0
 public S_RESPONSE_GAMESTAT_PONG(TeraMessageReader reader) : base(reader)
 {
 }
コード例 #30
0
 internal SpawnMeServerMessage(TeraMessageReader reader)
     : base(reader)
 {
     Id = reader.ReadEntityId();
 }
コード例 #31
0
ファイル: S_ABNORMALITY_END.cs プロジェクト: tuita520/Tera
 internal SAbnormalityEnd(TeraMessageReader reader) : base(reader)
 {
     TargetId      = reader.ReadEntityId();
     AbnormalityId = reader.ReadInt32();
 }
コード例 #32
0
 public S_FIELD_EVENT_ON_LEAVE(TeraMessageReader reader) : base(reader)
 {
 }
コード例 #33
0
        public new void Process(ParsedMessage message)
        {
            base.Process(message);
            if (IsKnown || OpcodeFinder.Instance.IsKnown(message.OpCode))
            {
                return;
            }
            if (message.Payload.Count < 2 + 4 + 4 + 4 + 1 + 1 + 4 + 4)
            {
                return;
            }
            var nameOffset = Reader.ReadUInt16();
            var unk        = Reader.ReadUInt32();
            var model      = Reader.ReadUInt32();

            if (model < 10101 || model > 11108)
            {
                return;                                 //could me made more accurate by checking actual race/gender/class ranges
            }
            var level    = Reader.ReadUInt32();
            var hasParty = Reader.ReadByte();
            var hasGuild = Reader.ReadByte();
            var serverId = Reader.ReadUInt32();

            if (level > 65)
            {
                return;
            }
            if (hasParty != 0 && hasParty != 1)
            {
                return;
            }
            if (hasGuild != 0 && hasGuild != 1)
            {
                return;
            }

            //assume it's a player from our same server
            if (BasicTeraData.Instance.Servers.GetServer(serverId) == null)
            {
                return;
            }
            string name;

            try
            {
                name = Reader.ReadTeraString();
                if (message.Payload.Count != 2 + 4 + 4 + 4 + 1 + 1 + 4 + 2 + 2 * name.Length)
                {
                    return;
                }
            }
            catch (Exception e) { return; }

            OpcodeFinder.Instance.SetOpcode(message.OpCode, OPCODE);
            for (int i = 0; i < 5; i++)
            {
                var msg = OpcodeFinder.Instance.GetMessage(OpcodeFinder.Instance.PacketCount - 1 - i);
                if (msg.Direction == MessageDirection.ClientToServer)
                {
                    var tmr = new TeraMessageReader(msg);
                    try
                    {
                        tmr.Skip(2 + 4 + 4);
                        if (tmr.ReadTeraString() == name)
                        {
                            OpcodeFinder.Instance.SetOpcode(msg.OpCode, OpcodeEnum.C_ASK_INTERACTIVE);
                        }
                    }
                    catch (Exception e) { continue; }
                }
            }
            //if (OpcodeFinder.Instance.GetMessage(OpcodeFinder.Instance.PacketCount - 1).OpCode == C_ASK_INTERACTIVE.PossibleOpcode) { C_ASK_INTERACTIVE.Confirm(); }
        }
コード例 #34
0
        public ParsedMessage Create(Message message)
        {
            var reader = new TeraMessageReader(message, PacketProcessor.OpCodeNamer, this, PacketProcessor.SystemMessageNamer);

            return(Instantiate(message.OpCode, reader));
        }
コード例 #35
0
 public S_FIELD_EVENT_ON_ENTER(TeraMessageReader reader) : base(reader)
 {
 }
コード例 #36
0
        public S_GET_USER_LIST(TeraMessageReader reader) : base(reader)
        {
            CharacterList = new List <Character>();
            RawCharacters = new List <RawChar>();
            count         = reader.ReadInt16();
            offset        = reader.ReadInt16();
            short nextAddr = offset;

            unkh1   = reader.ReadByte();
            unkh2   = reader.ReadInt32();
            maxChar = reader.ReadInt32();
            unkh4   = reader.ReadInt32();
            unkh5   = reader.ReadInt16();
            unkh6   = reader.ReadInt32();
            unkh7   = reader.ReadInt32();
            unkh8   = reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                var c = new RawChar();
                reader.BaseStream.Position = nextAddr - 4;
                reader.Skip(2);
                nextAddr         = reader.ReadInt16();
                c.unk1           = reader.ReadInt32();
                c.nameOffset     = reader.ReadInt16();
                c.detailsOffset  = reader.ReadInt16();
                c.detailsCount   = reader.ReadInt16();
                c.details2offset = reader.ReadInt16();
                c.details2count  = reader.ReadInt16();
                c.guildOffset    = reader.ReadInt16();
                c.id             = reader.ReadInt32();
                c.gender         = reader.ReadInt32();
                c.race           = reader.ReadInt32();
                c.charClass      = reader.ReadInt32();
                c.level          = reader.ReadInt32();
                c.unk2           = reader.ReadInt32();
                c.unk3           = reader.ReadInt32();
                c.loc1           = reader.ReadInt32();
                c.loc2           = reader.ReadInt32();
                c.loc3           = reader.ReadInt32();
                c.lastOnline     = reader.ReadInt64();
                c.unk4           = reader.ReadByte();
                c.unk5           = reader.ReadInt32();
                c.unk6           = reader.ReadInt32();
                c.unk7           = reader.ReadInt32();
                c.unk8           = reader.ReadInt32();
                c.earring1       = reader.ReadInt32();
                c.earring2       = reader.ReadInt32();
                c.chest          = reader.ReadInt32();
                c.gloves         = reader.ReadInt32();
                c.boots          = reader.ReadInt32();
                c.unk9           = reader.ReadInt32();
                c.ring1          = reader.ReadInt32();
                c.ring2          = reader.ReadInt32();
                c.innerwear      = reader.ReadInt32();
                c.head           = reader.ReadInt32();
                c.face           = reader.ReadInt32();
                c.appearance     = reader.ReadInt64();
                c.unk10          = reader.ReadInt32();
                c.unk11          = reader.ReadInt32();
                c.unk12          = reader.ReadInt32();
                c.unk13          = reader.ReadInt16();
                c.unk14          = reader.ReadInt32();
                c.unk15          = reader.ReadInt32();
                c.unk16          = reader.ReadInt32();
                c.unk17          = reader.ReadInt32();
                c.unk18          = reader.ReadInt32();
                c.unk19          = reader.ReadInt32();
                c.unk20          = reader.ReadInt32();
                c.unk21          = reader.ReadInt32();
                c.unk22          = reader.ReadInt32();
                c.unk23          = reader.ReadInt32();
                c.unk24          = reader.ReadInt32();
                c.unk25          = reader.ReadInt32();
                c.unk26          = reader.ReadInt32();
                c.unk27          = reader.ReadInt32();
                c.unk28          = reader.ReadInt32();
                c.chestDye       = reader.ReadInt32();
                c.glovesDye      = reader.ReadInt32();
                c.bootsDye       = reader.ReadInt32();
                c.unk29          = reader.ReadInt32();
                c.unk30          = reader.ReadInt32();
                c.unk31          = reader.ReadInt32();
                c.unk32          = reader.ReadInt32();
                c.unk33          = reader.ReadInt32();
                c.unk33b         = reader.ReadInt32();
                c.unk33c         = reader.ReadInt32();
                c.headDecoration = reader.ReadInt32();
                c.mask           = reader.ReadInt32();
                c.backDecoration = reader.ReadInt32();
                c.weaponSkin     = reader.ReadInt32();
                c.costume        = reader.ReadInt32();
                c.unk35          = reader.ReadInt32();
                c.weaponEnchant  = reader.ReadInt32();
                c.curRestExp     = reader.ReadInt32();
                c.maxRestExp     = reader.ReadInt32();
                c.unk38          = reader.ReadInt32();
                c.unk39          = reader.ReadInt16();
                c.rested         = reader.ReadByte();
                c.curRestExpPerc = reader.ReadInt32();
                c.achiPoints     = reader.ReadInt32();
                c.laurel         = reader.ReadInt32();
                c.pos            = reader.ReadInt32();
                c.guildId        = reader.ReadInt32();
                c.name           = reader.ReadTeraString();

                //c.details = new byte[c.detailsCount];
                //for (int j = 0; j < c.detailsCount; j++)
                //{
                //    c.details[j] = reader.ReadByte();
                //}

                //c.details2 = new byte[c.details2count];
                //for (int k = 0; k < c.details2count; k++)
                //{
                //    c.details2[k] = reader.ReadByte();
                //}

                //c.guild = reader.ReadTeraString();

                CharacterList.Add(new Character(c.name, (Class)c.charClass, (Laurel)c.laurel));
                RawCharacters.Add(c);
            }
        }
コード例 #37
0
 public C_LOAD_TOPO_FIN(TeraMessageReader reader) : base(reader)
 {
 }
コード例 #38
0
ファイル: S_BAN_PARTY.cs プロジェクト: tuita520/Tera
 internal S_BAN_PARTY(TeraMessageReader reader) : base(reader)
 {
 }
コード例 #39
0
 public S_ACCOMPLISH_ACHIEVEMENT(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(16);
     AchievementId = reader.ReadUInt32();
 }
コード例 #40
0
 public ParsedMessage(TeraMessageReader reader)
     : base(reader.Message.Time, reader.Message.Direction, reader.Message.Data)
 {
     Raw        = reader.Message.Payload.Array;
     OpCodeName = reader.OpCodeName;
 }