コード例 #1
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");
            }
        }
コード例 #2
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;
                }
            }
        }
コード例 #3
0
        public S_LOAD_EP_INFO(TeraMessageReader r) : base(r)
        {
            Perks = new Dictionary <uint, uint>();

            var perksCount = r.ReadInt16();

            if (perksCount == 0)
            {
                return;
            }

            var perksOffset = r.ReadInt16();

            r.RepositionAt(perksOffset);

            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);
            }
        }
コード例 #4
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();
        }
コード例 #5
0
        internal S_PLAYER_STAT_UPDATE(TeraMessageReader reader) : base(reader)
        {
            HpRemaining = reader.ReadInt32();
            MpRemaining = reader.ReadInt32();
            reader.Skip(4);
            TotalHp = reader.ReadInt32();
            TotalMp = reader.ReadInt32();
            return; //we don't need all other things now, but if we need - just remove return.

            BasePower         = reader.ReadInt32();
            BaseEndurance     = reader.ReadInt32();
            BaseImpactFactor  = reader.ReadInt32();
            BaseBalanceFactor = reader.ReadInt32();
            BaseMovementSpeed = reader.ReadInt16();
            reader.Skip(2);
            BaseAttackSpeed     = reader.ReadInt16();
            BaseCritRate        = reader.ReadSingle();
            BaseCritResist      = reader.ReadSingle();
            BaseCritPower       = reader.ReadSingle();
            BaseAttack          = reader.ReadInt32();
            BaseAttack2         = reader.ReadInt32();
            BaseDefence         = reader.ReadInt32();
            BaseImpcat          = reader.ReadInt32();
            BaseBalance         = reader.ReadInt32();
            BaseResistWeakening = reader.ReadSingle();
            BaseResistPeriodic  = reader.ReadSingle();
            BaseResistStun      = reader.ReadSingle();
            BonusPower          = reader.ReadInt32();
            BonusEndurance      = reader.ReadInt32();
            BonusImpactFactor   = reader.ReadInt32();
            BonusBalanceFactor  = reader.ReadInt32();
            BonusMovementSpeed  = reader.ReadInt16();
            reader.Skip(2);
            BonusAttackSpeed     = reader.ReadInt16();
            BonusCritRate        = reader.ReadSingle();
            BonusCritResist      = reader.ReadSingle();
            BonusCritPower       = reader.ReadSingle();
            BonusAttack          = reader.ReadInt32();
            BonusAttack2         = reader.ReadInt32();
            BonusDefence         = reader.ReadInt32();
            BonusImpcat          = reader.ReadInt32();
            BonusBalance         = reader.ReadInt32();
            BonusResistWeakening = reader.ReadSingle();
            BonusResistPeriodic  = reader.ReadSingle();
            BonusResistStun      = reader.ReadSingle();
            Level        = reader.ReadInt32();
            Vitality     = reader.ReadInt16();
            Status       = reader.ReadByte();
            BonusHp      = reader.ReadInt32();
            BonusMp      = reader.ReadInt32();
            Stamina      = reader.ReadInt32();
            TotalStamina = reader.ReadInt32();
            ReRemaining  = reader.ReadInt32();
            TotalRe      = reader.ReadInt32();
            reader.Skip(8);
            ItemLevelInventory = reader.ReadInt32();
            ItemLevel          = reader.ReadInt32();

            // Something else unknown later
        }
コード例 #6
0
        public S_PARTY_MEMBER_STAT_UPDATE(TeraMessageReader reader) : base(reader)
        {
            ServerId = reader.ReadUInt32();
            PlayerId = reader.ReadUInt32();

            CurrentHP = /*reader.Version < 321550 || reader.Version > 321600 ? */ reader.ReadInt64() /*: reader.ReadInt32()*/;
            CurrentMP = reader.ReadInt32();
            MaxHP     = /*reader.Version < 321550 || reader.Version > 321600 ? */ reader.ReadInt64() /*: reader.ReadInt32()*/;
            MaxMP     = reader.ReadInt32();

            Level    = reader.ReadInt16();
            InCombat = reader.ReadInt16() > 0;
            Vitality = reader.ReadInt16();

            Alive = reader.ReadBoolean();

            reader.Skip(4);
            CurrentRE = reader.ReadInt32();
            MaxRE     = reader.ReadInt32();

            GroupMemberData = new GroupMemberData()
            {
                ServerId  = ServerId,
                PlayerId  = PlayerId,
                CurrentHP = CurrentHP,
                CurrentMP = CurrentMP,
                CurrentST = CurrentRE,
                MaxHP     = MaxHP,
                MaxMP     = MaxMP,
                MaxST     = MaxRE,
                Level     = (uint)Level,
                InCombat  = InCombat,
                Alive     = Alive
            };
        }
コード例 #7
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();
        }
コード例 #8
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;
            }
        }
コード例 #9
0
        internal S_OTHER_USER_APPLY_PARTY(TeraMessageReader reader) : base(reader)
        {
            reader.Skip(7);
            var clas = reader.ReadInt16();

            PlayerClass = (PlayerClass)(clas + 1);
            reader.Skip(4);
            Lvl = reader.ReadInt16();
            reader.Skip(1);
            PlayerName = reader.ReadTeraString();
        }
コード例 #10
0
 internal C_PLAYER_LOCATION(TeraMessageReader reader) : base(reader)
 {
     Position  = reader.ReadVector3f();
     Heading   = reader.ReadAngle();
     unk1      = reader.ReadInt16();
     Finish    = reader.ReadVector3f();
     Ltype     = reader.ReadInt32();
     Speed     = reader.ReadInt16();
     unk2      = reader.ReadByte();
     TimeStamp = reader.ReadInt32();
     //Debug.WriteLine($"{Time.Ticks} {Start} {Heading} -> {Finish}, S:{Speed} ,{Ltype} {unk1} {unk2} {TimeStamp}" );
 }
コード例 #11
0
        internal S_USER_LOCATION(TeraMessageReader reader) : base(reader)
        {
            Entity  = reader.ReadEntityId();
            Start   = reader.ReadVector3f();
            Heading = reader.ReadAngle();
            unk1    = reader.ReadInt16();
            Speed   = reader.ReadInt16();
            Finish  = reader.ReadVector3f();
            Ltype   = reader.ReadInt32();
            unk2    = reader.ReadByte();
//            Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Start} {Heading} -> {Finish}, S:{Speed} ,{Ltype} {unk1} {unk2}" );
        }
コード例 #12
0
        public S_OTHER_USER_APPLY_PARTY(TeraMessageReader reader) : base(reader)
        {
            var nameOffset = reader.ReadUInt16();

            reader.Skip(1);
            PlayerId = reader.ReadUInt32();
            Class    = (Class)reader.ReadInt16();
            reader.Skip(4);
            Level = reader.ReadInt16();
            reader.BaseStream.Position = nameOffset - 4;
            Name = reader.ReadTeraString();
        }
コード例 #13
0
 public S_LOAD_ACHIEVEMENT_LIST(TeraMessageReader reader) : base(reader)
 {
     achiCount     = reader.ReadInt16();
     achiOffset    = reader.ReadInt16();
     historyCount  = reader.ReadInt16();
     historyOffset = reader.ReadInt16();
     cid           = reader.ReadInt64();
     unk1          = reader.ReadInt32();
     achis         = reader.ReadInt32();
     unk3          = reader.ReadInt32();
     unk4          = reader.ReadInt32();
     reader.Skip(ACHIEVEMENT_LENGHT * achiCount);
 }
コード例 #14
0
 public S_LOAD_ACHIEVEMENT_LIST(TeraMessageReader reader) : base(reader)
 {
     achiCount     = reader.ReadInt16();
     achiOffset    = reader.ReadInt16();
     historyCount  = reader.ReadInt16();
     historyOffset = reader.ReadInt16();
     cid           = reader.ReadInt64();
     unk1          = reader.ReadInt32();
     achis         = reader.ReadInt32();
     unk3          = reader.ReadInt32();
     unk4          = reader.ReadInt32();
     reader.Skip(ACHIEVEMENT_LENGHT * achiCount);
     //System.Console.WriteLine("{0}-{1}-{2}", unk1, unk3, unk4);
 }
コード例 #15
0
        internal SCreatureChangeHp(TeraMessageReader reader) : base(reader)
        {
            HpRemaining = reader.ReadInt32();
            TotalHp     = reader.ReadInt32();
            HpChange    = reader.ReadInt16();
            Type        = reader.ReadInt32();
            Unknow3     = reader.ReadInt16();
            TargetId    = reader.ReadEntityId();
            SourceId    = reader.ReadEntityId();
            Critical    = reader.ReadInt16();


            //           Debug.WriteLine("target = " + TargetId + ";Source:" + SourceId + ";Critical:" + Critical + ";Hp left:" + HpRemaining + ";Max HP:" + TotalHp+";HpLost/Gain:"+ HpChange + ";Type:"+ Type + ";Unknow3:"+Unknow3);
        }
コード例 #16
0
ファイル: S_PLAYER_CHANGE_MP.cs プロジェクト: tuita520/Tera
        internal SPlayerChangeMp(TeraMessageReader reader) : base(reader)
        {
            MpRemaining = reader.ReadInt32();
            TotalMp     = reader.ReadInt32();
            MpChange    = reader.ReadInt16();
            Type        = reader.ReadInt32();
            Unknow3     = reader.ReadInt16();
            TargetId    = reader.ReadEntityId();
            SourceId    = reader.ReadEntityId();
//            Critical = reader.ReadInt16(); Not here anymore


            // Debug.WriteLine("target = " + TargetId + ";Source:" + SourceId + ";Critical:" + Critical + ";Mp left:" + MpRemaining + ";Max MP:" + TotalMp + ";MpLost/Gain:" + MpChange + ";Type:" + Type + ";Unknow3:" + Unknow3);
        }
コード例 #17
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);
            }
        }
コード例 #18
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)));
        }
コード例 #19
0
        internal S_CREATURE_ROTATE(TeraMessageReader reader) : base(reader)
        {
            Entity   = reader.ReadEntityId();
            Heading  = reader.ReadAngle();
            NeedTime = reader.ReadInt16();
//            Debug.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Heading} {Time}");
        }
コード例 #20
0
        public S_LEARN_EP_PERK(TeraMessageReader r) : base(r)
        {
            var perksCount = r.ReadInt16();

            //var perksOffset = r.ReadInt16();
            //var success = r.ReadBoolean();
            //var usedPoints = r.ReadUInt32();

            r.Skip(7);

            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);
            }
        }
コード例 #21
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);
        }
コード例 #22
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);
            }
        }
コード例 #23
0
        public S_SPAWN_NPC(TeraMessageReader reader) : base(reader)
        {
            //reader.Skip(10);
            //id = reader.ReadUInt64();
            //var target = reader.ReadUInt64();
            //var pos = reader.ReadVector3f();
            //var angle = reader.ReadUInt16();
            //var relation = reader.ReadUInt32();
            //templateId = reader.ReadUInt32();
            //huntingZoneId = reader.ReadUInt16();
            //var unk1 = reader.ReadInt32();
            //var walkSpeed = reader.ReadInt16();
            //var runSpeed = reader.ReadInt16();
            //var unk5 = reader.ReadInt16();
            //var unk6 = reader.ReadBoolean();
            //var unk7 = reader.ReadInt32();
            //var visible = reader.ReadBoolean();
            //var villager = reader.ReadBoolean();
            //var spawnType = reader.ReadUInt32();
            //var unk11 = reader.ReadUInt64();
            //var unk12 = reader.ReadUInt64();
            //var unk13 = reader.ReadUInt16();
            //var unk14 = reader.ReadUInt32();
            //var unk15 = reader.ReadBoolean();
            //var owner = reader.ReadUInt64();
            //var unk16 = reader.ReadUInt32();
            //var unk17 = reader.ReadUInt32();
            //var unk18 = reader.ReadUInt64();
            //var unk19 = reader.ReadByte();
            //var unk20 = reader.ReadUInt32();
            //var unk25 = reader.ReadUInt32();

            reader.Skip(10); // seatsRef [4] + partsRef[4] + npcNameRef [2]
            EntityId = reader.ReadUInt64();
            reader.Skip(8);  // target
            Level           = reader.ReadInt32();
            MaxHP           = reader.ReadInt64();
            EnrageThreshold = reader.ReadInt64();
            reader.Skip(12); //var loc = reader.ReadVector3f();
            reader.Skip(2);  //var angle = reader.ReadInt16();
            reader.Skip(4);  //var relation = reader.ReadInt32();
            TemplateId    = reader.ReadUInt32();
            HuntingZoneId = reader.ReadUInt16();
            reader.Skip(4                                  // shapeID
                        + 2 + 2                            // walkSpeed + runSpeed
                        );
            reader.Skip(2);                                // status
            IsEnraged           = reader.ReadInt16() == 1; //var enrage = reader.ReadUInt16(); // 0/1
            RemainingEnrageTime = reader.ReadInt32();
            reader.Skip(2                                  // hpLevel
                        + 2                                // questInfo
                        + 1);                              // visible
            Villager = reader.ReadBoolean();
            //reader.Skip(4);
            //reader.Skip(4+8+4+4);
            //var aggressive = reader.ReadBoolean();

            //Console.WriteLine("[S_SPAWN NPC] id:{0} tId:{1} hzId:{2}", id, templateId, huntingZoneId);
        }
コード例 #24
0
 internal SPartyMemberChangeHp(TeraMessageReader reader) : base(reader)
 {
     TargetId    = reader.ReadEntityId();
     HpRemaining = reader.ReadInt32();
     TotalHp     = reader.ReadInt32();
     Unknow3     = reader.ReadInt16();
     // Console.WriteLine("target = " + TargetId + ";Hp left:" + HpRemaining + ";Max HP:" + TotalHp + ";Unknow3:" + Unknow3);
 }
コード例 #25
0
 internal SNpcLocation(TeraMessageReader reader) : base(reader)
 {
     Entity  = reader.ReadEntityId();
     Start   = reader.ReadVector3f();
     Heading = reader.ReadAngle();
     Speed   = reader.ReadInt16();
     Finish  = reader.ReadVector3f();
     Ltype   = reader.ReadInt32();
 }
コード例 #26
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);
 }
コード例 #27
0
        internal S_PARTY_MEMBER_STAT_UPDATE(TeraMessageReader reader) : base(reader)
        {
            ServerId    = reader.ReadUInt32();
            PlayerId    = reader.ReadUInt32();
            HpRemaining = reader.ReadInt64(); // KR now use 64 bit
            MpRemaining = reader.ReadInt32();
            TotalHp     = reader.ReadInt64(); // KR now use 64 bit
            TotalMp     = reader.ReadInt32();
            Level       = reader.ReadInt16();
            InCombat    = reader.ReadInt16();
            Vitality    = reader.ReadInt16();
            Alive       = reader.ReadByte(); //not sure
            Stamina     = reader.ReadInt32();
            ReRemaining = reader.ReadInt32();
            TotalRe     = reader.ReadInt32();
            Unknow3     = reader.ReadInt32();

            //Trace.WriteLine("target = " + PlayerId + ";Hp left:" + HpRemaining + ";Max HP:" + TotalHp + ";Unknow3:" + Unknow3);
        }
コード例 #28
0
        internal SNpcLocation(TeraMessageReader reader) : base(reader)
        {
            Entity  = reader.ReadEntityId();
            Start   = reader.ReadVector3f();
            Heading = reader.ReadAngle();
            Speed   = reader.ReadInt16();
            Finish  = reader.ReadVector3f();
            Ltype   = reader.ReadInt32(); //0 = Move, 7= Rotate standing
//            Trace.WriteLine($"{Time.Ticks} {BitConverter.ToString(BitConverter.GetBytes(Entity.Id))}: {Start} {Heading} -> {Finish}, S:{Speed} ,{Ltype}");
        }
コード例 #29
0
        public S_PARTY_MEMBER_STAT_UPDATE(TeraMessageReader reader) : base(reader)
        {
            serverId = reader.ReadUInt32();
            playerId = reader.ReadUInt32();

            curHP = /*reader.Version < 321550 || reader.Version > 321600 ? */ reader.ReadInt64() /*: reader.ReadInt32()*/;
            curMP = reader.ReadInt32();
            maxHP = /*reader.Version < 321550 || reader.Version > 321600 ? */ reader.ReadInt64() /*: reader.ReadInt32()*/;
            maxMP = reader.ReadInt32();

            level    = reader.ReadInt16();
            combat   = reader.ReadInt16();
            vitality = reader.ReadInt16();

            alive = reader.ReadBoolean();

            stamina = reader.ReadInt32();
            curRE   = reader.ReadInt32();
            maxRE   = reader.ReadInt32();
        }
コード例 #30
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();
        }