// BasePlayer.Die() public static void On_PlayerDied(BasePlayer player, HitInfo info) { using (TimeWarning.New("Player.Die", 0.1f)) { if (!player.IsDead()) { if (info == null) { info = new HitInfo(); info.damageTypes.Add(player.lastDamage, Single.MaxValue); info.Initiator = player as BaseEntity; } Player victim = Server.GetPlayer(player); if (!((bool)player.CallMethod("WoundInsteadOfDying", info))) { var pde = new PlayerDeathEvent(victim, info); OnNext("On_PlayerDied", pde); if (pde.Die) { if (info.Initiator != null) { PlayerStats statsV = victim.Stats; if (info.Initiator is BasePlayer) { Server.GetPlayer(info.Initiator as BasePlayer).Stats.AddKill(true, false); victim.Stats.AddDeath(true, false); } else if (info.Initiator is BaseNPC) { victim.Stats.AddDeath(false, true); } } if (!pde.dropLoot) { if (player.belt != null) { var vector = new Vector3(UnityEngine.Random.Range(-2f, 2f), 0.2f, UnityEngine.Random.Range(-2f, 2f)); player.belt.DropActive(vector.normalized * 3f); } player.inventory.Strip(); } player.CallMethodOnBase(typeof(BaseCombatEntity), "Die", info); } } } } }
/// <summary> /// Called from <c>BasePlayer.Die(HitInfo)</c> . /// </summary> public static void On_PlayerDied(BasePlayer basePlayer, HitInfo info) { using (TimeWarning.New("Player.Die", 0.1f)) { if (!basePlayer.IsDead()) { if (info == null) { info = new HitInfo(); info.damageTypes.Add(basePlayer.lastDamage, Single.MaxValue); info.Initiator = (BaseEntity)basePlayer; } Player victim = Server.GetPlayer(basePlayer); if (!((bool)basePlayer.CallMethod("WoundInsteadOfDying", info))) { var pde = new PlayerDeathEvent(victim, info); OnNext("On_PlayerDied", pde); if (pde.Die) { if (info.Initiator != null) { // PlayerStats statsV = victim.Stats; if (info.Initiator is BasePlayer) { Server.GetPlayer(info.Initiator as BasePlayer).Stats.AddKill(true, false); victim.Stats.AddDeath(true, false); } else if (info.Initiator is BaseNPC) { victim.Stats.AddDeath(false, true); } } if (!pde.dropLoot) { if (basePlayer.belt != null) { Vector3 vector = new Vector3(UnityEngine.Random.Range(-2f, 2f), 0.2f, UnityEngine.Random.Range(-2f, 2f)); basePlayer.belt.DropActive(vector.normalized * 3f); } basePlayer.inventory.Strip(); } basePlayer.CallMethodOnBase(typeof(BaseCombatEntity), "Die", info); } } } } }
// BasePlayer.Die() public static bool On_PlayerDied(BasePlayer player, HitInfo info) { if (info == null) { info = new HitInfo(); info.damageTypes.Add(player.lastDamage, Single.MaxValue); info.Initiator = player as BaseEntity; } Player victim = Server.GetPlayer(player); if (!((bool)player.CallMethod("WoundInsteadOfDying", info))) { if (info.Initiator != null) { PlayerStats statsV = victim.Stats; if (info.Initiator is BasePlayer) { Server.GetPlayer(info.Initiator as BasePlayer).Stats.AddKill(true, false); victim.Stats.AddDeath(true, false); } else if (info.Initiator is BaseNPC) { victim.Stats.AddDeath(false, true); } } Events.PlayerDeathEvent pde = new Events.PlayerDeathEvent(victim, info); OnNext("On_PlayerDied", pde); if (!pde.dropLoot) player.inventory.Strip(); return false; } return true; }