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); } }
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); } }
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); } }