Beispiel #1
0
		public virtual void Kill()
		{
			lock (_killSync)
			{
				if (IsDead) return;
				IsDead = true;

				Health = 0;
			}

			var player = Entity as Player;
			if (player != null)
			{
				player.SendUpdateAttributes();
			}

			Entity.BroadcastEntityEvent();

			if (player != null)
			{
				//SendWithDelay(2000, () =>
				//{
				//});

				Entity.BroadcastSetEntityData();
				Entity.DespawnEntity();

				if (!Entity.Level.KeepInventory)
				{
					player.DropInventory();
				}

				var mcpeRespawn = McpeRespawn.CreateObject();
				mcpeRespawn.x = player.SpawnPosition.X;
				mcpeRespawn.y = player.SpawnPosition.Y;
				mcpeRespawn.z = player.SpawnPosition.Z;
				player.SendPackage(mcpeRespawn);
			}
			else
			{
				// This is semi-good, but we need to give the death-animation time to play.

				SendWithDelay(2000, () =>
				{
					Entity.BroadcastSetEntityData();
					Entity.DespawnEntity();

					if (LastDamageSource is Player && Entity.Level.DoMobloot)
					{
						var drops = Entity.GetDrops();
						foreach (var drop in drops)
						{
							Entity.Level.DropItem(Entity.KnownPosition.ToVector3(), drop);
						}
					}
				});
			}
		}
Beispiel #2
0
        public virtual void Kill()
        {
            if (IsDead)
            {
                return;
            }

            IsDead = true;
            Health = 0;
            var player = Entity as Player;

            if (player != null)
            {
                // HACK
                if (LastDamageCause == DamageCause.EntityAttack)
                {
                    Player source = LastDamageSource as Player;
                    if (source != null)
                    {
                        source.Kills++;
                    }
                    player.Deaths++;
                }

                player.DropInventory();
                player.SendSetHealth();
                player.BroadcastEntityEvent();
            }

            Entity.BroadcastSetEntityData();
            Entity.DespawnEntity();

            if (player != null)
            {
                var mcpeRespawn = McpeRespawn.CreateObject();
                mcpeRespawn.x = player.SpawnPosition.X;
                mcpeRespawn.y = player.SpawnPosition.Y;
                mcpeRespawn.z = player.SpawnPosition.Z;
                player.SendPackage(mcpeRespawn);
            }
        }
        private void Player_PlayerTakeHit(object sender, HealthEventArgs e)
        {
            Player player = (Player)e.TargetEntity;//受けるほう

            player.BroadcastEntityEvent();
            if (0 >= player.HealthManager.Health)
            {
                //https://github.com/DarkLexFirst/SkyBlock-test/blob/25483451a6a2333da3b10bdf33ead546552df26f/SkyBlock%20betaRelease/SkyBlock%20betaRelease/Managers/InventoryManager.cs
                string Inv = player.Inventory.GetSlots()[0].Id + "," + player.Inventory.GetSlots()[0].Metadata + "," + player.Inventory.GetSlots()[0].Count;
                for (var i = 1; i < player.Inventory.Slots.Count; i++)
                {
                    Inv = Inv + "|" + player.Inventory.GetSlots()[i].Id + "," + player.Inventory.GetSlots()[i].Metadata + "," + player.Inventory.GetSlots()[i].Count;
                }
                string Arm = player.Inventory.Boots.Id + "," + player.Inventory.Boots.Metadata + "|" + player.Inventory.Leggings.Id + "," + player.Inventory.Leggings.Metadata + "|" + player.Inventory.Chest.Id + "," + player.Inventory.Chest.Metadata + "|" + player.Inventory.Helmet.Id + "," + player.Inventory.Helmet.Metadata;
                for (var i = 1; i < player.Inventory.Slots.Count; i++)
                {
                    player.Inventory.Slots[i] = new ItemAir();
                }
                inv.Add(player.Username, Inv);
                arm.Add(player.Username, Arm);
                player.Inventory.Clear();
                player.HealthManager.TakeHit((Player)e.SourceEntity, 100, player.HealthManager.LastDamageCause);
                player.SendMessage("aaa");

                if (player != null)
                {
                    player.SendUpdateAttributes();
                    player.BroadcastEntityEvent();
                }

                player.BroadcastSetEntityData();
                player.DespawnEntity();
                var mcpeRespawn = McpeRespawn.CreateObject();
                mcpeRespawn.x = player.SpawnPosition.X;
                mcpeRespawn.y = player.SpawnPosition.Y;
                mcpeRespawn.z = player.SpawnPosition.Z;
                player.SendPackage(mcpeRespawn);
                player.HealthManager.ResetHealth();
            }
        }
Beispiel #4
0
        public virtual void Kill()
        {
            if (IsDead)
            {
                return;
            }

            IsDead = true;
            Health = 0;
            var player = Entity as Player;

            if (player != null)
            {
                player.SendUpdateAttributes();
                player.BroadcastEntityEvent();
            }

            Entity.BroadcastSetEntityData();
            Entity.DespawnEntity();

            if (player != null)
            {
                player.DropInventory();

                var mcpeRespawn = McpeRespawn.CreateObject();
                mcpeRespawn.x = player.SpawnPosition.X;
                mcpeRespawn.y = player.SpawnPosition.Y;
                mcpeRespawn.z = player.SpawnPosition.Z;
                player.SendPackage(mcpeRespawn);
            }
            else
            {
                var drops = Entity.GetDrops();
                foreach (var drop in drops)
                {
                    Entity.Level.DropItem(Entity.KnownPosition.ToVector3(), drop);
                }
            }
        }