public new bool HurtPlayer(PlayerStats.HitInfo info, GameObject go) { if (!go.GetComponent <CharacterClassManager>().isLocalPlayer&& info.GetDamageType() != DamageTypes.None && !go.GetComponent <CharacterClassManager>().GodMode) { //if (Commands.CustomInternalCommands.nodamageplayers.ContainsKey(go.GetComponent<RemoteAdmin.QueryProcessor>().PlayerId)) // info.Amount = 0; PheggPlayer pPlayer = new PheggPlayer(go); PlayerStats Pstats = go.GetComponent <PlayerStats>(); PheggPlayer pAttacker = null; if (info.GetPlayerObject() != null) { pAttacker = new PheggPlayer(info.GetPlayerObject()); } if (Pstats.Health - info.Amount < 1) { try { Base.Debug("Triggering PlayerDeathEvent"); PluginManager.TriggerEvent <IEventHandlerPlayerDeath>(new PlayerDeathEvent(pPlayer, pAttacker, info.Amount, info.GetDamageType())); } catch (Exception e) { Base.Error($"Error triggering PlayerDeathEvent: {e.InnerException.ToString()}"); } } else { try { Base.Debug("Triggering PlayerHurtEvent"); PluginManager.TriggerEvent <IEventHandlerPlayerHurt>(new PlayerHurtEvent(pPlayer, pAttacker, info.Amount, info.GetDamageType())); } catch (Exception e) { Base.Error($"Error triggering PlayerHurtEvent: {e.InnerException.ToString()}"); } } } return(orig_HurtPlayer(info, go)); }
public static bool Prefix(Scp096 __instance, PlayerStats.HitInfo info) { if (info.GetDamageType().isWeapon&& SCP096Re.instance.Config.re096_damage_add_target) { GameObject playerObject = info.GetPlayerObject(); if (playerObject != null && __instance.CanEnrage) { __instance.AddTarget(playerObject); __instance.Windup(false); } } __instance.TimeUntilShieldRecharge = 10f; return(false); }
internal static void CalculateFF(GameObject Victim, PlayerStats.HitInfo info, out float damage) { try { damage = info.Amount; if (!DetectorEnabled || !DoCheck || Victim.GetComponent <CharacterClassManager>().CurClass == RoleType.Spectator || (!info.GetDamageType().isWeapon&& info.GetDamageType() != DamageTypes.Grenade)) { return; } FFInfo ffInfo = new FFInfo { DamageType = info.GetDamageType(), HitInfo = info, Target = ReferenceHub.GetHub(Victim), Attacker = ReferenceHub.GetHub(info.GetPlayerObject()), }; if (ffInfo.Attacker.playerId == ffInfo.Target.playerId) { return; } if (ffInfo.Target.characterClassManager.CurClass == RoleType.ClassD && ffInfo.Attacker.characterClassManager.CurClass == RoleType.ClassD) { UpdateLegitDamage(ffInfo.Attacker.characterClassManager.UserId); return; } if (ffInfo.DamageType == DamageTypes.Grenade) { if (GrenadeThrowers.ContainsKey(ffInfo.Attacker.characterClassManager.UserId)) { ffInfo.GrenadeThrower = GrenadeThrowers[ffInfo.Attacker.characterClassManager.UserId]; //Base.Info("FFInfoGrenadeThrower Set."); } else { ffInfo.GrenadeThrower = new GrenadeThrower { Role = ffInfo.Attacker.characterClassManager.CurClass, Team = ffInfo.Attacker.characterClassManager.CurRole.team, UserId = ffInfo.Attacker.characterClassManager.UserId, DetonatePosition = ffInfo.Target.playerMovementSync.RealModelPosition }; //Base.Info("FFInfoGrenadeThrower Default."); } ffInfo.NearbyPlayers = GetNearbyPlayersGrenade(GrenadeThrowers[ffInfo.Attacker.characterClassManager.UserId].DetonatePosition); } else { ffInfo.NearbyPlayers = GetNearbyPlayers(ffInfo); } if (ffInfo.Attacker.characterClassManager.CurRole.team == Team.RIP && ffInfo.DamageType == DamageTypes.Grenade) { ffInfo.AttackerTeam = ffInfo.GrenadeThrower.Team; } //Base.Info(ffInfo.AttackerTeam.ToString()); foreach (ReferenceHub hub in ffInfo.NearbyPlayers) { if (IsFF(ffInfo, hub)) { ffInfo.Friendlies.Add(hub); } else { ffInfo.Hostiles.Add(hub); } } bool isFF = IsFF(ffInfo, ffInfo.Target); //Base.Info(isFF.ToString()); if (DamageList.ContainsKey(ffInfo.Attacker.characterClassManager.UserId)) { ffInfo.LastLegitDamage = DamageList[ffInfo.Attacker.characterClassManager.UserId]; } else { ffInfo.LastLegitDamage = new DateTime(); } if (isFF) { if ((DateTime.Now - ffInfo.LastLegitDamage).TotalSeconds > 10 && (ffInfo.Hostiles.Count < 1 && ffInfo.Friendlies.Count > 0)) { damage = 0; HandleList(ffInfo); } } else { if (DamageList.ContainsKey(ffInfo.Attacker.characterClassManager.UserId)) { ffInfo.LastLegitDamage = DateTime.Now; } else { DamageList.Add(ffInfo.Attacker.characterClassManager.UserId, DateTime.Now); } } } catch (Exception e) { Base.Error(e.ToString()); damage = info.Amount; } #region E //damage = info.Amount; //if (!DoCheck || Victim.GetComponent<CharacterClassManager>().CurClass == RoleType.Spectator) // return; //DamageTypes.DamageType damageType = info.GetDamageType(); //if (!damageType.isWeapon && damageType != DamageTypes.Grenade) //{ // updateLegitDamage(info.GetPlayerObject().GetComponent<CharacterClassManager>().UserId); // return; //} //ReferenceHub vicHub = ReferenceHub.GetHub(Victim); //ReferenceHub attHub = ReferenceHub.GetHub(info.GetPlayerObject()); //if (vicHub.characterClassManager.CurClass == RoleType.ClassD && attHub.characterClassManager.CurClass == RoleType.ClassD) //{ // updateLegitDamage(info.GetPlayerObject().GetComponent<CharacterClassManager>().UserId); // return; //} //if (vicHub.playerId == attHub.playerId) //{ // updateLegitDamage(info.GetPlayerObject().GetComponent<CharacterClassManager>().UserId); // return; //} //List<ReferenceHub> Hubs = new List<ReferenceHub>(); //List<ReferenceHub> Hostiles = new List<ReferenceHub>(); //List<ReferenceHub> Friendlies = new List<ReferenceHub>(); //if (info.GetDamageType() == DamageTypes.Grenade) //{ // if (GrenadeThrowers.ContainsKey(attHub.characterClassManager.UserId)) // Hubs = GetNearbyPlayersGrenade(GrenadeThrowers[attHub.characterClassManager.UserId].DetonatePosition); //} //else // Hubs = GetNearbyPlayers(attHub, Victim); //Team attackerTeam = Team.RIP; //if (attHub.characterClassManager.CurClass == RoleType.Spectator && info.GetDamageType() == DamageTypes.Grenade) //{ // if (GrenadeThrowers.ContainsKey(attHub.characterClassManager.UserId)) // { // attackerTeam = GrenadeThrowers[attHub.characterClassManager.UserId].Team; // } //} //else // attackerTeam = attHub.characterClassManager.CurRole.team; //foreach (ReferenceHub hub in Hubs) //{ // if (!IsFF(attHub, hub, attackerTeam)) // Hostiles.Add(hub); // else // Friendlies.Add(hub); //} //if (!DamageList.ContainsKey(attHub.characterClassManager.UserId) || (DateTime.Now - DamageList[attHub.characterClassManager.UserId]).TotalSeconds > 9) //{ // if (Friendlies.Count > 0 && Hostiles.Count < 1) // { // damage = 0; // HandleList(attHub, info, Victim, Friendlies, Hostiles); // } //} //else //{ //AddLegitDamage: // updateLegitDamage(info.GetPlayerObject().GetComponent<CharacterClassManager>().UserId); //} #endregion }