public ObjectInfoRequest(GameClient client, ReceivablePacket packet) { // Read data. long objectId = packet.ReadLong(); // Get the acting player. Player player = client.GetActiveChar(); // Send the information. List <WorldObject> objects = WorldManager.GetVisibleObjects(player); for (int i = 0; i < objects.Count; i++) { WorldObject obj = objects[i]; if (obj.GetObjectId() == objectId) { if (obj.IsPlayer()) { client.ChannelSend(new PlayerInformation(obj.AsPlayer())); } else if (obj.IsNpc()) { client.ChannelSend(new NpcInformation(obj.AsNpc())); } // Send delayed animation update in case object was already moving. Task.Delay(1000).ContinueWith(task => SendAnimationInfo(client, obj)); break; } } }
private void BroadcastAndReceiveInfo(Player player) { // Send and receive visible object information. PlayerInformation playerInfo = new PlayerInformation(player); List <Player> players = WorldManager.GetVisiblePlayers(player); for (int i = 0; i < players.Count; i++) { Player nearby = players[i]; // Send the information to the current player. player.ChannelSend(new PlayerInformation(nearby)); // Send information to the other player as well. nearby.ChannelSend(playerInfo); } // Send nearby NPC information. List <WorldObject> objects = WorldManager.GetVisibleObjects(player); for (int i = 0; i < objects.Count; i++) { WorldObject nearby = objects[i]; if (!nearby.IsNpc()) { continue; } player.ChannelSend(new NpcInformation(nearby.AsNpc())); } }
public void SetLocation(float posX, float posY, float posZ, float heading) { _location.Update(posX, posY, posZ, heading); // When changing location test for appropriate region. RegionHolder testRegion = WorldManager.GetRegion(this); if (!testRegion.Equals(_region)) { if (_region != null) { // Remove this object from the region. _region.RemoveObject(this); // Broadcast change to players left behind when teleporting. if (_isTeleporting) { DeleteObject deleteObject = new DeleteObject(this); List <RegionHolder> regions = _region.GetSurroundingRegions(); for (int i = 0; i < regions.Count; i++) { List <WorldObject> objects = regions[i].GetObjects(); for (int j = 0; j < objects.Count; j++) { WorldObject nearby = objects[j]; if (nearby == this) { continue; } if (nearby.IsPlayer()) { nearby.AsPlayer().ChannelSend(deleteObject); } } } } } // Assign new region. _region = testRegion; _region.AddObject(this); // Send visible NPC information. // TODO: Exclude known NPCs? if (IsPlayer()) { List <WorldObject> objects = WorldManager.GetVisibleObjects(this); for (int i = 0; i < objects.Count; i++) { WorldObject nearby = objects[i]; if (!nearby.IsNpc()) { continue; } AsPlayer().ChannelSend(new NpcInformation(nearby.AsNpc())); } } } }
public static void Handle(Player player) { // Gather information. WorldObject target = player.GetTarget(); if (target == null) { ChatManager.SendSystemMessage(player, "You must select a target."); return; } Npc npc = target.AsNpc(); if (npc == null) { ChatManager.SendSystemMessage(player, "You must select an NPC."); return; } // Log admin activity. SpawnHolder npcSpawn = npc.GetSpawnHolder(); LocationHolder npcLocation = npcSpawn.GetLocation(); if (Config.LOG_ADMIN) { LogManager.LogAdmin(player.GetName() + " used command /delete " + npc + " " + npcLocation); } // Delete NPC. npc.DeleteMe(); // Send player success message. int npcId = npc.GetNpcHolder().GetNpcId(); ChatManager.SendSystemMessage(player, "You have deleted " + npcId + " from " + npcLocation); // Store in database. try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(SPAWN_DELETE_QUERY, con); cmd.Parameters.AddWithValue("npc_id", npcId); cmd.Parameters.AddWithValue("x", npcLocation.GetX()); cmd.Parameters.AddWithValue("y", npcLocation.GetY()); cmd.Parameters.AddWithValue("z", npcLocation.GetZ()); cmd.Parameters.AddWithValue("heading", npcLocation.GetHeading()); cmd.Parameters.AddWithValue("respawn_delay", npcSpawn.GetRespawnDelay()); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } }