Example #1
0
        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);
                }
            }
        }