public void KillPlayer(Player player) { if (player == null) return; if (!(player is NPC)) { Point spawnPoint = _map.getRandomSpawn(); Player newPlayer = new Player(_map, new Rectangle(spawnPoint.X, spawnPoint.Y, 16, 15), getID()); newPlayer.Name = player.Name; newPlayer.SetTeam(player.GroupID); //Send client their new playerID AssignPlayerMessage apm = (AssignPlayerMessage)Server.ProtocolHelper.NewMessage(MessageTypes.AssignPlayer); apm.objectID = newPlayer.ID; apm.Encode(); _server.SendClient(player, apm); //Add the new player to the game objects Add(newPlayer); newPlayer.Body = player.Body; newPlayer.Inventory = player.Inventory; for (int x = 0; x < player.Inventory.Count; x++) { Body.BodyPart part = player.Inventory[x] as Body.BodyPart; if(part==null) continue; PickupMessage pum = (PickupMessage)Server.ProtocolHelper.NewMessage(MessageTypes.Pickup); pum.id = part.GetID(); pum.autoEquip = false; pum.Encode(); _map.ObjectManager.Server.SendClient(player, pum); } //newPlayer.GetExp(player.TotalXP, Vector2.Zero); newPlayer.GetExp(0, Vector2.Zero); //Change the local clients stored playerid Client client = _server.getClient(player); if (client == null) return; client.PlayerID = newPlayer.ID; newPlayer.Body.SetOwner(newPlayer); newPlayer.Body.SendBody(null); KillMessage km = (KillMessage)Server.ProtocolHelper.NewMessage(MessageTypes.Kill); km.killerID = player.Attacker; km.deadID = player.ID; km.Encode(); player.Die(); _server.SendAllMapReliable(_map, km, true); RemoveQuiet(player); } else { Remove(player); Player killer = GetPlayer(player.Attacker); if (killer != null) { killer.GetExp((player as NPC).XPBonus, player.MidPosition); Console.WriteLine("Giving " + (player as NPC).XPBonus.ToString() + " XP to " + killer.Name); } } }
public override void Event(Player obj) { obj.GetExp(_expAmount, MidPosition); _map.ObjectManager.Remove(this); _parent.RemoveChild(); }