Ejemplo n.º 1
0
        public new void Process(ParsedMessage message)
        {
            base.Process(message);

            if (message.Payload.Count != 39)
            {
                return;
            }
            var origin      = Reader.ReadVector3f();
            var w           = Reader.ReadUInt16();
            var unknown1    = Reader.ReadUInt16();
            var destination = Reader.ReadVector3f();

            if (IsKnown || OpcodeFinder.Instance.IsKnown(message.OpCode))
            {
                UpdateLocationInDictionary(OpcodeFinder.KnowledgeDatabaseItem.PlayerLocation, destination);
                return;
            }
            var type     = Reader.ReadUInt32();
            var speed    = Reader.ReadUInt16();
            var unknown2 = Reader.ReadByte();
            var distance = origin.DistanceTo(destination);

            if (unknown1 == 0 && AcceptedTypeValue.Contains(type) && distance < 200 && distance >= 0 && speed == 0 && unknown2 == 0)
            {
                UpdateLocationInDictionary(OpcodeFinder.KnowledgeDatabaseItem.PlayerLocation, destination);

                OpcodeFinder.Instance.SetOpcode(message.OpCode, OPCODE);
            }
        }
Ejemplo n.º 2
0
        public new void Process(ParsedMessage message)
        {
            base.Process(message);

            if (message.Payload.Count != 43)
            {
                return;
            }
            var target      = Reader.ReadUInt64();
            var origin      = Reader.ReadVector3f();
            var w           = Reader.ReadUInt16();
            var unknown1    = Reader.ReadUInt16();
            var speed       = Reader.ReadUInt16();
            var destination = Reader.ReadVector3f();

            if (IsKnown || OpcodeFinder.Instance.IsKnown(message.OpCode))
            {
                // For the moment, only update our own location. If later it will become required, add other users location
                var self = (LoggedCharacter)OpcodeFinder.Instance.KnowledgeDatabase[OpcodeFinder.KnowledgeDatabaseItem.LoggedCharacter];
                if (self.Cid == target)
                {
                    UpdateLocationInDictionary(OpcodeFinder.KnowledgeDatabaseItem.PlayerLocation, destination);
                }
                return;
            }
            var type     = Reader.ReadUInt32();
            var unknown2 = Reader.ReadByte();
            var distance = origin.DistanceTo(destination);

            //added check for SpawnedUser, sUserLocation detect will work after sSpawnUser (you should tp into town as example)
            if (!OpcodeFinder.Instance.KnowledgeDatabase.ContainsKey(OpcodeFinder.KnowledgeDatabaseItem.SpawnedUsers))
            {
                return;
            }
            var users = (List <ulong>)OpcodeFinder.Instance.KnowledgeDatabase[OpcodeFinder.KnowledgeDatabaseItem.SpawnedUsers];

            if (!users.Contains(target))
            {
                return;
            }
            if (unknown1 == 0 && AcceptedTypeValue.Contains(type) && distance < 200 && distance >= 0 && unknown2 == 0)
            {
                var self = (LoggedCharacter)OpcodeFinder.Instance.KnowledgeDatabase[OpcodeFinder.KnowledgeDatabaseItem.LoggedCharacter];
                if (self.Cid == target)
                {
                    UpdateLocationInDictionary(OpcodeFinder.KnowledgeDatabaseItem.PlayerLocation, destination);
                }
                OpcodeFinder.Instance.SetOpcode(message.OpCode, OPCODE);
            }
        }
Ejemplo n.º 3
0
        public new void Process(ParsedMessage message)
        {
            base.Process(message);

            if (message.Payload.Count != 40)
            {
                return;
            }
            var target      = Reader.ReadUInt64();
            var origin      = Reader.ReadVector3f();
            var w           = Reader.ReadUInt16();
            var speed       = Reader.ReadUInt16();
            var destination = Reader.ReadVector3f();

            if (IsKnown || OpcodeFinder.Instance.IsKnown(message.OpCode))
            {
                return;
            }
            var type     = Reader.ReadUInt32();
            var distance = origin.DistanceTo(destination);

            if (!OpcodeFinder.Instance.KnowledgeDatabase.ContainsKey(OpcodeFinder.KnowledgeDatabaseItem.SpawnedNpcs))
            {
                return;
            }
            var npc = (List <Npc>)OpcodeFinder.Instance.KnowledgeDatabase[OpcodeFinder.KnowledgeDatabaseItem.SpawnedNpcs];

            if (npc.All(x => x.Cid != target))
            {
                return;
            }
            if (AcceptedTypeValue.Contains(type) && distance < 200 && distance >= 0)
            {
                OpcodeFinder.Instance.SetOpcode(message.OpCode, OPCODE);
            }
        }