// BasePlayer.Die() public static void 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 (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); OnPlayerDied.OnNext(pde); if (!pde.dropLoot) { player.inventory.Strip(); } }
// BasePlayer.Die() public static void PlayerDied(BasePlayer player, HitInfo info) { // works if (info == null) { info = new HitInfo(); info.damageType = player.metabolism.lastDamage; info.Initiator = player as BaseEntity; } Player victim = new Player(player); if (info.Initiator != null) { PlayerStats statsV = new PlayerStats(victim.SteamID); if (info.Initiator is BasePlayer) { Player p = new Player(info.Initiator as BasePlayer); PlayerStats stats = new PlayerStats(p.SteamID); stats.AddKill(true, false); p.Stats = stats; statsV.AddDeath(true, false); } else if (info.Initiator is BaseAnimal) { statsV.AddDeath(false, true); } victim.Stats = statsV; } Events.PlayerDeathEvent pde = new Events.PlayerDeathEvent(victim, info); OnPlayerDied.OnNext(pde); if (!pde.dropLoot) { player.inventory.Strip(); } }
// BasePlayer.Die() public static void 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 (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); OnPlayerDied.OnNext(pde); if (!pde.dropLoot) player.inventory.Strip(); }
// 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); } } } } }
// 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; }