/// <summary> /// Invoked whenever the player is damaged. /// If their buildmode is on, they get healed by the amount of damage they were dealt. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void OnPlayerDamage(object sender, PlayerDamageEventArgs e) { if (e.Player.IsBuildModeOn()) { e.Player.Heal(e.Player.TPlayer.statLifeMax); } }
private void Player_PlayerDamageEvent(PlayerDamageEventArgs ev) { //If either the killer or the victim is null (Potential damage inflicted by Server) if (ev.Killer is null || ev.Victim is null) { return; } //If the victim inflicted dmg to themselves / SCP-008 damage tick if (ev.Killer == ev.Victim || ev.HitInfo.GetDamageType().name == "FALLDOWN") { return; } //If the attacker is neither one of the infecting roles nor the doctor, leave. if (!SCP_008.Config.Scp008Configs.InfectingRoles.Contains(ev.Killer.RoleID) && ev.Killer.RoleType != RoleType.Scp049) { return; } //If the attacker was from one of the infecting roles, add to infectedPlayers if (SCP_008.Config.Scp008Configs.InfectingRoles.Contains(ev.Killer.RoleID)) { infectedPlayers.Add(ev.Killer); } //If doctor only one hit k.o.'s, leave if (SCP_008.Config.Scp049Configs.NonOHKChance == 0.0f) { return; } //Chance for non-one hit k.o. if (Random.Range(0f, 100f) <= SCP_008.Config.Scp049Configs.NonOHKChance) { ev.DamageAmount = (ev.Victim.MaxHealth * (SCP_008.Config.Scp049Configs.NonOHKDamage / 100)); } //If victim will die from it, leave. if ((ev.Victim.Health - ev.DamageAmount) <= 0.0f) { return; } //If doctor cannot infect victims, leave. if (SCP_008.Config.Scp049Configs.InfectChanceOnNonOHK == 0.0f) { return; } //Chance for infecting if (Random.Range(0f, 100f) <= SCP_008.Config.Scp049Configs.InfectChanceOnNonOHK) { infectedPlayers.Add(ev.Victim); } }
public void OnDamage(PlayerDamageEventArgs ev) { if (ev.Killer.RoleID == 682 && SynapseExtensions.CanHarmScp(ev.Killer, false)) { if (SCP682.Config.can_kill_on_oneshot) { ev.Victim.Kill(); } ev.Killer.Heal(SCP682.Config.heal_hp_when_eat); } }
internal void InvokePlayerDamageEvent(Player victim, Player killer, ref PlayerStats.HitInfo info, out bool allow) { var ev = new PlayerDamageEventArgs { HitInfo = info, Killer = killer, Victim = victim }; PlayerDamageEvent?.Invoke(ev); info = ev.HitInfo; allow = ev.Allow; }
internal void InvokePlayerDamageEvent(Player victim, Player killer, ref float damage, DamageType type, out bool allow) { var ev = new PlayerDamageEventArgs { Killer = killer, Victim = victim, Damage = damage, DamageType = type, }; PlayerDamageEvent?.Invoke(ev); damage = ev.Damage; allow = ev.Allow; }
private static bool OnPlayerDamage(byte id, byte dir, short dmg, bool pvp, bool crit) { if (PlayerDamage == null) return false; var args = new PlayerDamageEventArgs { ID = id, Direction = dir, Damage = dmg, PVP = pvp, Critical = crit, }; PlayerDamage.Invoke(null, args); return args.Handled; }