コード例 #1
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;
 }
コード例 #2
0
        public S_INVEN(TeraMessageReader reader) : base(reader)
        {
            //TODO
            if (SessionManager.CurrentPlayer.InfBuffs.Any(x => AbnormalityDatabase.NoctIds.Contains(x.Abnormality.Id)))
            {
                return;
            }
            var count     = reader.ReadUInt16();
            var invOffset = reader.ReadUInt16();

            reader.Skip(8 + 8);
            IsOpen = reader.ReadBoolean();
            if (!IsOpen)
            {
                return;
            }
            First = reader.ReadBoolean();
            if (First)
            {
                Items = new List <Tuple <uint, int, uint> >();
            }
            More = reader.ReadBoolean();
            if (invOffset == 0)
            {
                return;
            }
            reader.BaseStream.Position = invOffset - 4;
            try
            {
                for (var i = 0; i < count; i++)
                {
                    reader.Skip(2); //var offset = reader.ReadUInt16();
                    var next = reader.ReadUInt16();
                    reader.Skip(6);
                    var itemId = reader.ReadUInt32();
                    reader.Skip(8 + 8);
                    var slot = reader.ReadUInt32();
                    if (slot > 39)
                    {
                        if (itemId == 151643)
                        {
                            reader.Skip(4);
                            ElleonMarks = reader.ReadUInt32();
                        }
                        reader.BaseStream.Position = next - 4;
                        continue;
                    }
                    reader.Skip(4 + 4);
                    var enchant = reader.ReadInt32();
                    reader.Skip(4 + 1 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 8 + 1 + 4 + 4 + 4 + 4 + 4 + 4 + 1 + 4 + 4 + 4 + 4 + 1 + 1);
                    var exp = reader.ReadUInt32();
                    Items.Add(new Tuple <uint, int, uint>(itemId, enchant, exp));
                    reader.BaseStream.Position = next - 4;
                }
            }
            catch
            {
                // ignored
            }
        }
コード例 #3
0
 public S_WEAK_POINT(TeraMessageReader reader) : base(reader)
 {
     Target           = reader.ReadUInt64();
     RemovedRunemarks = reader.ReadUInt32();
     TotalRunemarks   = reader.ReadInt32();
     type             = reader.ReadUInt32();
     SkillId          = reader.ReadUInt32();
 }
コード例 #4
0
ファイル: S_ADD_CHARM_STATUS.cs プロジェクト: tuita520/Tera
        internal SAddCharmStatus(TeraMessageReader reader) : base(reader)
        {
            TargetId = reader.ReadEntityId();
            CharmId  = reader.ReadUInt32();
            Status   = reader.ReadByte();
            Duration = reader.ReadInt32();
//            Debug.WriteLine("target = "+TargetId+";Charm:"+CharmId+";Duration:"+Duration+";Status:"+Status);
        }
コード例 #5
0
        public S_USER_EFFECT(TeraMessageReader reader) : base(reader)
        {
            User   = reader.ReadUInt64();
            Source = reader.ReadUInt64();
            circle = reader.ReadInt32();
            action = reader.ReadInt32();

            //string sourceName = Source.ToString();
            //if (EntitiesManager.CurrentBosses.FirstOrDefault(x => x.EntityId == Source) != null)
            //{
            //    sourceName = EntitiesManager.CurrentBosses.FirstOrDefault(x => x.EntityId == Source).Name;
            //}
            //string userName = User.ToString();
            //if (User == SessionManager.CurrentPlayer.EntityId) userName = SessionManager.CurrentPlayer.Name;

            //Console.WriteLine("[S_USER_EFFECT] {0} > {1} ({2} {3})", sourceName, userName, Action, Circle);
        }
コード例 #6
0
 internal C_LOGIN_ARBITER(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(11);
     Language = (LangEnum)reader.ReadUInt32();
     Version  = reader.ReadInt32();
     reader.Factory.ReleaseVersion = Version;
     reader.Factory.ReloadSysMsg();
 }
コード例 #7
0
 public S_ABNORMALITY_REFRESH(TeraMessageReader reader) : base(reader)
 {
     TargetId      = reader.ReadUInt64();
     AbnormalityId = reader.ReadUInt32();
     Duration      = reader.ReadUInt32();
     reader.Skip(4);
     Stacks = reader.ReadInt32();
 }
コード例 #8
0
 internal SPartyMemberCharmAdd(TeraMessageReader reader) : base(reader)
 {
     ServerId = reader.ReadUInt32();
     PlayerId = reader.ReadUInt32();
     CharmId  = reader.ReadUInt32();
     Duration = reader.ReadInt32();
     Status   = reader.ReadByte();
 }
コード例 #9
0
        public S_ANSWER_INTERACTIVE(TeraMessageReader reader) : base(reader)
        {
            var nameOffset = reader.ReadUInt16();

            reader.Skip(4); // type
            if (reader.Factory.ReleaseVersion / 100 >= 103)
            {
                PlayerId = reader.ReadUInt32();
            }
            TemplateId = reader.ReadInt32();
            Level      = reader.ReadInt32();
            HasParty   = reader.ReadBoolean();
            HasGuild   = reader.ReadBoolean();
            ServerId   = reader.ReadUInt32();
            reader.RepositionAt(nameOffset);
            Name = reader.ReadTeraString();
        }
コード例 #10
0
ファイル: C_LOGIN_ARBITER.cs プロジェクト: tuita520/Tera
 internal C_LOGIN_ARBITER(TeraMessageReader reader) : base(reader)
 {
     reader.Skip(11);
     Language = (LangEnum)reader.ReadUInt32();
     Version  = reader.Factory.Region.Contains("C")? 2707 :reader.ReadInt32();//hardcoded EUC/KRC, since its version is not sent via network
     reader.Factory.ReleaseVersion = Version;
     reader.Factory.ReloadSysMsg();
 }
コード例 #11
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);
            EntityId = reader.ReadUInt64();
            reader.Skip(8);  //var target = reader.ReadUInt64();
            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 // walkSpeed
                        );
            reader.Skip(2); //var enrage = reader.ReadUInt16(); // 0/1
            if (reader.Factory.ReleaseVersion / 100 >= 79)
            {
                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);
        }
コード例 #12
0
        public S_VIEW_WARE_EX(TeraMessageReader reader) : base(reader)
        {
            var itemsArrayCount = reader.ReadUInt16();

            if (itemsArrayCount == 0)
            {
                return;
            }
            var itemsArrayOffset = reader.ReadUInt16();

            reader.Skip(8);
            var type = reader.ReadInt32();

            if (type > 1)
            {
                return;
            }
            reader.Skip(4);
            var index = reader.ReadInt32();

            Pages[index / 72].Items.Clear();
            reader.Skip(4);
            reader.Skip(8);
            reader.Skip(2); // var tabsCount = reader.ReadInt16();
            reader.BaseStream.Position = itemsArrayOffset - 4;
            for (var i = 0; i < itemsArrayCount; i++)
            {
                reader.Skip(2); // var current = reader.ReadUInt16();
                var next = reader.ReadUInt16();
                reader.Skip(4); //crystals array count and offset
                var id = reader.ReadInt32();
                reader.Skip(8);
                reader.Skip(8);
                var slot = reader.ReadUInt32();
                reader.Skip(4);
                reader.Skip(4); //amountTotal (????)
                var amount = reader.ReadInt32();
                Pages[index / 72].Items.Add(new BankItem(id, slot, amount));
                if (next == 0)
                {
                    break;
                }
                reader.BaseStream.Position = next - 4;
            }
        }
コード例 #13
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();
 }
コード例 #14
0
 internal LoginServerMessage(TeraMessageReader reader)
     : base(reader)
 {
     reader.Skip(10);
     RaceGenderClass = new RaceGenderClass(reader.ReadInt32());
     Id = reader.ReadEntityId();
     reader.Skip(268);
     Name = reader.ReadTeraString();
 }
コード例 #15
0
 internal SNpcStatus(TeraMessageReader reader) : base(reader)
 {
     Npc                 = reader.ReadEntityId();
     Enraged             = (reader.ReadByte() & 1) == 1;
     RemainingEnrageTime = reader.Factory.ReleaseVersion >= 7900 ? reader.ReadInt32() : 36000;
     reader.Skip(4);
     Target = reader.ReadEntityId();
     //Debug.WriteLine("NPC:" + Npc + ";Target:" + Target + (Enraged?" Enraged":""));
 }
コード例 #16
0
 public S_PARTY_MEMBER_ABNORMAL_REFRESH(TeraMessageReader reader) : base(reader)
 {
     ServerId = reader.ReadUInt32();
     PlayerId = reader.ReadUInt32();
     Id       = reader.ReadUInt32();
     Duration = reader.ReadUInt32();
     reader.Skip(4);
     Stacks = reader.ReadInt32();
 }
コード例 #17
0
        public S_JOIN_PRIVATE_CHANNEL(TeraMessageReader reader) : base(reader)
        {
            reader.Skip(4);
            var nameOffset = reader.ReadUInt16();

            Index = reader.ReadInt32();
            Id    = reader.ReadUInt32();
            reader.BaseStream.Position = nameOffset - 4;
            Name = reader.ReadTeraString();
        }
コード例 #18
0
        public S_PARTY_MEMBER_LIST(TeraMessageReader reader) : base(reader)
        {
            var count  = reader.ReadUInt16();
            var offset = reader.ReadUInt16();

            Im   = reader.ReadBoolean();
            Raid = reader.ReadBoolean();

            reader.Skip(12);

            LeaderServerId = reader.ReadUInt32();
            LeaderPlayerId = reader.ReadUInt32();

            reader.Skip(19);

            Members = new List <GroupMemberData>();

            for (var i = 0; i < count; i++)
            {
                var u = new GroupMemberData();
                reader.RepositionAt(offset);
                reader.Skip(2);
                var nextOffset = reader.ReadUInt16();
                var nameOffset = reader.ReadUInt16();
                u.ServerId  = reader.ReadUInt32();
                u.PlayerId  = reader.ReadUInt32();
                u.Level     = reader.ReadUInt32();
                u.Class     = (Class)reader.ReadUInt32();
                u.Online    = reader.ReadBoolean();
                u.EntityId  = reader.ReadUInt64();
                u.Order     = reader.ReadInt32();
                u.CanInvite = reader.ReadBoolean();
                u.Laurel    = (Laurel)reader.ReadUInt32();
                u.Awakened  = reader.ReadInt32() > 0;

                reader.RepositionAt(nameOffset);
                u.Name     = reader.ReadTeraString();
                u.Alive    = true;
                u.IsLeader = u.ServerId == LeaderServerId && u.PlayerId == LeaderPlayerId;
                Members.Add(u);
                offset = nextOffset;
            }
        }
コード例 #19
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();
 }
コード例 #20
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);
 }
コード例 #21
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}");
        }
コード例 #22
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();
 }
コード例 #23
0
        internal S_CHAT(TeraMessageReader reader) : base(reader)
        {
            UsernameOffset = reader.ReadUInt16();
            TextOffset     = reader.ReadUInt16();
            var channel = reader.ReadInt32();

            Channel = (ChannelEnum)channel;
            reader.Skip(11);
            Username = reader.ReadTeraString();
            Text     = reader.ReadTeraString();
        }
コード例 #24
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();
        }
コード例 #25
0
 internal SpawnProjectileServerMessage(TeraMessageReader reader)
     : base(reader)
 {
     Id = reader.ReadEntityId();
     reader.Skip(4);
     Model  = reader.ReadInt32();
     Start  = reader.ReadVector3f();
     Finish = reader.ReadVector3f();
     reader.Skip(5);
     OwnerId = reader.ReadEntityId();
 }
コード例 #26
0
        public C_LOGIN_ARBITER(TeraMessageReader reader) : base(reader)
        {
            var nameOffset = reader.ReadUInt16();

            reader.Skip(9);
            Language = (LangEnum)reader.ReadUInt32();
            Version  = reader.ReadInt32();
            reader.RepositionAt(nameOffset);
            AccountName = reader.ReadTeraString();
            reader.Factory.ReleaseVersion = Version;
        }
コード例 #27
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();
 }
コード例 #28
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();
 }
コード例 #29
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}" );
        }
コード例 #30
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();
            Combat   = reader.ReadInt16();
            Vitality = reader.ReadInt16();

            Alive = reader.ReadBoolean();

            reader.Skip(4);
            CurrentRE = reader.ReadInt32();
            MaxRE     = reader.ReadInt32();
        }
コード例 #31
0
 public S_USER_STATUS(TeraMessageReader reader) : base(reader)
 {
     EntityId = reader.ReadUInt64();
     if (reader.ReadInt32() == 1)
     {
         IsInCombat = true;
     }
     else
     {
         IsInCombat = false;
     }
 }
コード例 #32
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}" );
        }
コード例 #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();
 }
コード例 #34
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);
     TemplateId = reader.ReadInt32();
     HuntingZoneId = reader.ReadUInt16();
     ModelId = reader.ReadUInt32();
     reader.Skip(31);
     OwnerId = reader.ReadEntityId();
 }