Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
        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
        }