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