コード例 #1
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 (var 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)
                    {
                        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 { }
        }
コード例 #2
0
        public S_BAN_PARTY_MEMBER(TeraMessageReader reader) : base(reader)
        {
            var nameOffset = reader.ReadUInt16();

            serverId = reader.ReadUInt32();
            playerId = reader.ReadUInt32();
            reader.Skip(4); //0xFFFFFFFF
            name = reader.ReadTeraString();
        }
コード例 #3
0
 internal SPartyMemberChangeMp(TeraMessageReader reader) : base(reader)
 {
     ServerId    = reader.ReadUInt32();
     PlayerId    = reader.ReadUInt32();
     MpRemaining = reader.ReadInt32();
     TotalMp     = reader.ReadInt32();
     Unknow3     = reader.ReadInt16();
     //   Debug.WriteLine("target = " + TargetId + ";Mp left:" + MpRemaining + ";Max MP:" + TotalMp+";Unknow3:"+Unknow3);
 }
コード例 #4
0
 public S_PARTY_MEMBER_ABNORMAL_ADD(TeraMessageReader reader) : base(reader)
 {
     ServerId = reader.ReadUInt32();
     PlayerId = reader.ReadUInt32();
     Id       = reader.ReadUInt32();
     Duration = reader.ReadUInt32();
     reader.Skip(4);
     Stacks = reader.ReadInt32();
 }
コード例 #5
0
        internal S_BAN_PARTY_MEMBER(TeraMessageReader reader) : base(reader)
        {
            var nameoffset = reader.ReadUInt16();

            ServerId = reader.ReadUInt32();
            PlayerId = reader.ReadUInt32();
            reader.Skip(4); //unknown ffffffff
            Name = reader.ReadTeraString();
        }
コード例 #6
0
ファイル: S_VISIT_NEW_SECTION.cs プロジェクト: tuita520/Tera
 internal S_VISIT_NEW_SECTION(TeraMessageReader reader)
     : base(reader)
 {
     IsFirsVisit = reader.ReadBoolean();
     MapId       = reader.ReadUInt32();
     GuardId     = reader.ReadUInt32();
     SectionId   = reader.ReadUInt32();
     Debug.Print("S_VISIT_NEW_SECTION");
 }
コード例 #7
0
 public S_ABNORMALITY_BEGIN(TeraMessageReader reader) : base(reader)
 {
     TargetId      = reader.ReadUInt64();
     CasterId      = reader.ReadUInt64();
     AbnormalityId = reader.ReadUInt32();
     Duration      = reader.ReadUInt32();
     reader.Skip(4);
     Stacks = reader.ReadInt32();
 }
コード例 #8
0
        public S_CREST_MESSAGE(TeraMessageReader reader) : base(reader)
        {
            reader.Skip(4);
            Type    = reader.ReadUInt32();
            SkillId = reader.ReadUInt32();

            //Debug.WriteLine(nameof(S_CREST_MESSAGE));
            //Debug.WriteLine("\t Type: {0}", Type);
            //Debug.WriteLine("\t SkillId: {0}", SkillId);
        }
コード例 #9
0
 public S_PARTY_MEMBER_INTERVAL_POS_UPDATE(TeraMessageReader reader) : base(reader)
 {
     ServerId    = reader.ReadUInt32();
     PlayerId    = reader.ReadUInt32();
     X           = reader.ReadSingle();
     Y           = reader.ReadSingle();
     Z           = reader.ReadSingle();
     ContinentId = reader.ReadUInt32();
     Channel     = reader.ReadInt32();
 }
コード例 #10
0
 internal SPartyMemberAbnormalAdd(TeraMessageReader reader) : base(reader)
 {
     ServerId      = reader.ReadUInt32();
     PlayerId      = reader.ReadUInt32();
     AbnormalityId = reader.ReadInt32();
     Duration      = reader.ReadInt64();
     Stack         = reader.ReadInt32();
     //  Debug.WriteLine("target = " + TargetId + ";Abnormality:" + AbnormalityId + ";Duration:" + Duration +
     //                  ";Stack:" + Stack);
 }
コード例 #11
0
 public S_ANSWER_INTERACTIVE(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(2 + 4);
     Model    = reader.ReadUInt32();
     Level    = reader.ReadUInt32();
     HasParty = reader.ReadBoolean();
     HasGuild = reader.ReadBoolean();
     reader.Skip(4); //server ID
     Name = reader.ReadTeraString();
 }
コード例 #12
0
        public S_PARTY_MEMBER_CHANGE_HP(TeraMessageReader reader) : base(reader)
        {
            serverId = reader.ReadUInt32();
            playerId = reader.ReadUInt32();

            currentHP = reader.ReadInt32();
            //if (reader.Version < 321550 || reader.Version > 321600)
            reader.Skip(4);
            maxHP = reader.ReadInt32();
        }
コード例 #13
0
        internal SPartyMemberAbnormalRefresh(TeraMessageReader reader) : base(reader)
        {
            //   PrintRaw();
            ServerId      = reader.ReadUInt32();
            PlayerId      = reader.ReadUInt32();
            AbnormalityId = reader.ReadInt32();
            Duration      = reader.ReadInt64();
            StackCounter  = reader.ReadInt32();

            //Debug.WriteLine("Target:"+TargetId+";Abnormality:"+AbnormalityId+";Duration:"+Duration+";Uknow:"+Unknow+";Stack:"+StackCounter);
        }
コード例 #14
0
 internal S_BOSS_GAGE_INFO(TeraMessageReader reader) : base(reader)
 {
     EntityId      = reader.ReadEntityId();
     HuntingZoneId = reader.ReadUInt32();
     TemplateId    = reader.ReadUInt32();
     TargetId      = reader.ReadEntityId();
     Unk1          = reader.ReadInt32();
     Unk2          = reader.ReadByte(); //enrage?
     HpRemaining   = reader.ReadInt64();
     TotalHp       = reader.ReadInt64();
 }
コード例 #15
0
        internal S_ACTION_END(TeraMessageReader reader) : base(reader)
        {
            Entity   = reader.ReadEntityId();
            Position = reader.ReadVector3f();
            Heading  = reader.ReadAngle();
            Model    = reader.ReadUInt32();
            SkillId  = new SkillId(reader).Id;
            unk      = reader.ReadInt32();
            Id       = reader.ReadUInt32();
//            Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Start} {Heading} -> {Finish}, S:{Speed} ,{Ltype} {unk1} {unk2}" );
        }
コード例 #16
0
        public S_PLAYER_STAT_UPDATE(TeraMessageReader reader) : base(reader)
        {
            reader.BaseStream.Position = 0;
            CurrentHP = reader.ReadInt64();
            CurrentMP = reader.ReadInt32();
            reader.Skip(8);
            MaxHP = reader.ReadInt64();
            MaxMP = reader.ReadInt32();

            reader.Skip(2 * 4);

            var baseCrit = reader.ReadSingle();

            reader.Skip((((reader.Factory.ReleaseVersion / 100) >= 106 ? 16 : 14) * 4) + (3 * 2));

            var magRes = reader.ReadInt32();

            reader.Skip((12 * 4) + (3 * 2));

            TotalCritFactor = reader.ReadSingle() + baseCrit;

            reader.Skip(12 * 4);

            TotalMagicalResistance = magRes + reader.ReadInt32();

            reader.Skip(7 * 4);

            Level = reader.ReadInt16();

            reader.Skip(4);

            Status  = reader.ReadBoolean();
            BonusHP = reader.ReadInt32();
            BonusMP = reader.ReadInt32();

            reader.Skip(8);

            CurrentST = reader.ReadInt32();
            MaxST     = reader.ReadInt32();
            BonusST   = reader.ReadInt32();

            reader.Skip(8);

            Ilvl = reader.ReadSingle();
            Edge = reader.ReadInt32();

            reader.Skip(reader.Factory.ReleaseVersion / 100 >= 105 ? 32 : 28);

            Fire     = reader.ReadUInt32() == 4;
            Ice      = reader.ReadUInt32() == 4;
            Arcane   = reader.ReadUInt32() == 4;
            Coins    = reader.ReadUInt32();
            MaxCoins = reader.ReadUInt32();
        }
コード例 #17
0
        public S_TRADE_BROKER_DEAL_SUGGESTED(TeraMessageReader reader) : base(reader)
        {
            var nameOffset = reader.ReadUInt16();

            PlayerId     = reader.ReadUInt32();
            Listing      = reader.ReadUInt32();
            Item         = reader.ReadInt32();
            Amount       = reader.ReadInt64();
            SellerPrice  = reader.ReadInt64();
            OfferedPrice = reader.ReadInt64();
            Name         = reader.ReadTeraString();
        }
コード例 #18
0
 public S_PLAYER_CHANGE_EXP(TeraMessageReader reader) : base(reader)
 {
     GainedTotalExp    = reader.ReadUInt64();
     TotalExp          = reader.ReadUInt64();
     LevelExp          = reader.ReadUInt64();
     NextLevelExp      = reader.ReadUInt64();
     KilledMobEntityId = reader.ReadUInt64();
     reader.Skip(4);
     GainedRestedExp = reader.ReadUInt32();
     RestedExp       = reader.ReadUInt32();
     // float, u32, u32 (unks)
 }
コード例 #19
0
        public S_NOTIFY_GUILD_QUEST_URGENT(TeraMessageReader reader) : base(reader)
        {
            /*
             * offset quest
             *
             * short type # 0 = announce, 1 = spawn, 3 = death
             * int templateId
             * int zoneId
             * string quest # "@GuildQuest:questId" for StrSheet_GuildQuest lookup (if type == announce), "\0" for spawn and death types
             */

            //announce
            //1200      # questOffset
            //00000000  # type
            //9800      # zone
            //00005a1b  # template
            //0000      # quest
            //...
            //0000

            //spawn
            //1200     # questOffset
            //01000000  # type
            //9800      # zone
            //00005a1b  # template
            //00000000 # quest
            //0000

            //death
            //1200     # questOffset
            //03000000  # type
            //9800      # zone
            //00005a1b  # template
            //00000000 # quest
            //0000

            try
            {
                var questOffset = reader.ReadInt16();
                var t           = reader.ReadInt32();
                Type       = (GuildBamQuestType)t;
                ZoneId     = reader.ReadUInt32();
                TemplateId = reader.ReadUInt32();
                reader.BaseStream.Position = questOffset - 4;
                Quest = reader.ReadTeraString();
            }
            catch
            {
                //Log.F($"[{nameof(S_NOTIFY_GUILD_QUEST_URGENT)}] Error while reading packet: {e}\nData: {Payload.Array.ToStringEx()}");
                //Log.N("Warning", "A non-fatal error occured while parsing guild bam notification. More detailed info have been written to error.log. Please report this to the developer on Discord or Github.", NotificationType.Warning, 10000);
            }
        }
コード例 #20
0
ファイル: S_CREST_MESSAGE.cs プロジェクト: qipa/delegate
        internal S_CREST_MESSAGE(TeraMessageReader reader) : base(reader)
        {
            //PrintRaw();
            var unknow = reader.ReadUInt32();

            //Type? 6 = reset?
            var typeId = reader.ReadUInt32();

            // Debug.WriteLine("Crest type id:" + typeId);
            Type    = (CrestType)typeId;
            SkillId = reader.ReadInt32() & 0x3FFFFFF;
            //  Debug.WriteLine("Crest :" + Type + ";Skill Id "+SkillId);
        }
コード例 #21
0
        internal S_ACTION_STAGE(TeraMessageReader reader) : base(reader)
        {
            reader.Skip(4); //Effects array count and offset
            Entity   = reader.ReadEntityId();
            Position = reader.ReadVector3f();
            Heading  = reader.ReadAngle();
            Model    = reader.ReadUInt32();
            SkillId  = new SkillId(reader).Id;
            Stage    = reader.ReadUInt32();
            Speed    = reader.ReadSingle();
            Id       = reader.ReadUInt32();
            unk      = reader.ReadSingle();
//            Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Start} {Heading}, S:{Speed}, {SkillId} {Stage} {Model} {unk} {Id}" );
        }
コード例 #22
0
        internal LoginServerMessage(TeraMessageReader reader)
            : base(reader)
        {
            int nameOffset = reader.ReadInt16();

            reader.Skip(8);
            RaceGenderClass = new RaceGenderClass(reader.ReadInt32());
            Id       = reader.ReadEntityId();
            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();
            reader.Skip(nameOffset - 34);
            Name = reader.ReadTeraString();
//            Console.WriteLine(Name + ":" + BitConverter.ToString(BitConverter.GetBytes(Id.Id)) + ":" + ServerId.ToString() + " " + BitConverter.ToString(BitConverter.GetBytes(PlayerId)));
        }
コード例 #23
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);
            }
        }
コード例 #24
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();
     NpcArea    = reader.ReadUInt16();
     CategoryId = reader.ReadUInt32();
     reader.Skip(31);
     OwnerId = reader.ReadEntityId();
 }
コード例 #25
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();
 }
コード例 #26
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
     }
 }
コード例 #27
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");
            }
        }
コード例 #28
0
 public S_ACTION_STAGE(TeraMessageReader reader) : base(reader)
 {
     reader.BaseStream.Position = 0;
     GameId = reader.ReadUInt64();
     reader.ReadVector3f();
     reader.ReadAngle();
     reader.Skip(4);
     TemplateId = reader.ReadUInt32();
     //reader.Skip(3);
     Skill = reader.ReadUInt32() - 0x04000000;
     Stage = reader.ReadInt32();
     Speed = reader.ReadSingle();
     Id    = reader.ReadUInt32();
     reader.Skip(4 + 1 + 12);
     Target = reader.ReadUInt64();
 }
コード例 #29
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();
        }
コード例 #30
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;
            }
        }
コード例 #31
0
        internal LoginServerMessage(TeraMessageReader reader)
            : base(reader)
        {
            int nameOffset = reader.ReadInt16();

            reader.Skip(8);
            RaceGenderClass = new RaceGenderClass(reader.ReadInt32());
            Id       = reader.ReadEntityId();
            ServerId = reader.ReadUInt32();
            PlayerId = reader.ReadUInt32();
            reader.Skip(27);
            Level = reader.ReadInt16();
            reader.BaseStream.Position = nameOffset - 4;
            Name = reader.ReadTeraString();
//            Debug.WriteLine(Name + ":" + BitConverter.ToString(BitConverter.GetBytes(Id.Id)) + ":" + ServerId.ToString() + " " + BitConverter.ToString(BitConverter.GetBytes(PlayerId)));
        }
コード例 #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();
 }
コード例 #33
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();
 }