Esempio n. 1
0
 public static void HostileWildlifeAI_StateSim_Attack(HostileWildlifeAI AI, ulong millis)
 {
     object[] args = new object[]
     {
         AI,
         millis
     };
     Method.Invoke("RustExtended.RustHook.HostileWildlifeAI_StateSim_Attack", args);
 }
Esempio n. 2
0
 public static void HostileWildlifeAI_OnHurt(HostileWildlifeAI AI, DamageEvent damage)
 {
     object[] args = new object[]
     {
         AI,
         damage
     };
     Method.Invoke("RustExtended.RustHook.HostileWildlifeAI_OnHurt", args);
 }
Esempio n. 3
0
 public static void HostileWildlifeAI_Scent(HostileWildlifeAI AI, TakeDamage damage)
 {
     object[] args = new object[]
     {
         AI,
         damage
     };
     Method.Invoke("RustExtended.RustHook.HostileWildlifeAI_Scent", args);
 }
Esempio n. 4
0
        void OnKilled(TakeDamage takedamage, DamageEvent damage)
        {
            var tags = new Hash <string, string>();

            if (damage.attacker.client != null)
            {
                tags["weapon"]    = (damage.extraData is WeaponImpact) ? ((WeaponImpact)damage.extraData).dataBlock.name : "Unknown";
                tags["killer"]    = damage.attacker.client.userName;
                tags["killer-id"] = damage.attacker.client.userID.ToString();
                if (damage.victim.client != null)
                {
                    tags["killed"]    = damage.victim.client.userName;
                    tags["killed-id"] = damage.victim.client.userID.ToString();
                    if (damage.victim.client == damage.attacker.client)
                    {
                        if (suicide)
                        {
                            notifyDeath(tags, "suicideDeathMessage");
                        }
                        return;
                    }
                    else
                    {
                        if (player)
                        {
                            tags["distance"] = Math.Floor(Vector3.Distance(damage.victim.client.lastKnownPosition, damage.attacker.client.lastKnownPosition)).ToString();
                            tags["bodypart"] = BodyParts.GetNiceName(damage.bodyPart);
                            notifyDeath(tags, "playerDeathMessage");
                        }
                    }
                }
                else if (damage.victim.networkView != null && damage.victim.networkView.gameObject.GetComponent <HostileWildlifeAI>())
                {
                    HostileWildlifeAI hostileai = damage.victim.networkView.gameObject.GetComponent <HostileWildlifeAI>();
                    tags["distance"]  = Math.Floor(Vector3.Distance(damage.victim.networkView.position, damage.attacker.client.lastKnownPosition)).ToString();
                    tags["killed"]    = hostileai.gameObject.name.Replace("(Clone)", "").Replace("Mutant", "Mutant ").ToLower();
                    tags["killed-id"] = tags["killed"].Replace("mutant ", "");
                }
            }
            else if (damage.attacker.networkView != null && damage.attacker.networkView.gameObject.GetComponent <HostileWildlifeAI>())
            {
                HostileWildlifeAI hostileai = damage.attacker.networkView.gameObject.GetComponent <HostileWildlifeAI>();
                tags["killer"]    = hostileai.gameObject.name.Replace("(Clone)", "").Replace("Mutant", "Mutant ").ToLower();
                tags["killer-id"] = tags["killer"].Replace("mutant ", "");
                if (animals)
                {
                    notifyDeath(tags, "deathByAnimal");
                }
            }
        }
Esempio n. 5
0
        //public static void OverheadPlayerName_Open(RPOS.InfoLabel label, HumanController HC)
        //{
        //    PlayerClient instantiatedPlayerClient = HC.instantiatedPlayerClient;
        //    if (instantiatedPlayerClient != null)
        //    {
        //        if (vanishedList.Contains(instantiatedPlayerClient.userID.ToString()))
        //            label.text = "";
        //        else
        //            label.text = instantiatedPlayerClient.userName;
        //    }
        //    label.transform = HC.headBone;
        //    label.color = Color.yellow;
        //}
        //public static bool OverheadPlayerName_Update(RPOS.InfoLabel label, HumanController HC)
        //{
        //    PlayerClient instantiatedPlayerClient = HC.instantiatedPlayerClient;
        //    if (instantiatedPlayerClient != null)
        //    {
        //        if (vanishedList.Contains(instantiatedPlayerClient.userID.ToString()))
        //            label.text = "";
        //        else
        //            label.text = instantiatedPlayerClient.userName;
        //        label.offset = (Vector3)(label.transform.InverseTransformDirection(HC.transform.up) * 0.3f);
        //        return true;
        //    }
        //    return false;
        //}
        public static void HostileScent(TakeDamage damage, HostileWildlifeAI HWAI)
        {
            try
            {
                if (HWAI != null)
                {
                    if (damage != null)
                    {
                        bool b = false;
                        try
                        {
                            foreach (PlayerClient pc in AllPlayerClients)
                            {
                                if (pc.controllable != null)
                                {
                                    if (pc.controllable.GetComponent<TakeDamage>() != null)
                                    {
                                        if (pc.controllable.GetComponent<TakeDamage>() == damage)
                                        {
                                            PlayerClient playerClient = pc;
                                            if (HWAI._targetTD != null)
                                            {
                                                b = hiddenList.Contains(playerClient.userID.ToString()) && HWAI._targetTD == playerClient.controllable.GetComponent<TakeDamage>();

                                                try
                                                {
                                                    if (!b)
                                                    {
                                                        if (isPlayer(damage.idMain))
                                                        {
                                                            Character character = damage.idMain as Character;
                                                            foreach (string UID in hiddenList)
                                                            {
                                                                if (UID == character.playerClient.userID.ToString() && HWAI._targetTD == character.playerClient.controllable.GetComponent<TakeDamage>())
                                                                    b = true;
                                                            }
                                                        }
                                                    }
                                                }
                                                catch (Exception ex)
                                                {
                                                    Vars.conLog.Error("HS #3: " + ex.ToString());
                                                }
                                            }
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Vars.conLog.Error("HS #2: " + ex.ToString());
                        }

                        if (!HWAI.IsScentBlind() && (((HWAI._state != 2) && (HWAI._state != 7)) && !HWAI.HasTarget()) && !b)
                        {
                            HWAI.ExitCurrentState();
                            HWAI.SetAttackTarget(damage);
                            HWAI.EnterState_Chase();
                        }

                        if (b && HWAI.HasTarget())
                        {
                            ignoringAIList.Add(HWAI);
                            HWAI._targetTD = null;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Vars.conLog.Error("HS #1: " + ex.ToString());
            }
        }
Esempio n. 6
0
        public static void HostileHurt(DamageEvent damage, HostileWildlifeAI HWAI)
        {
            try
            {
                bool b = false;
                try
                {
                    if (isPlayer(damage.attacker.idMain))
                    {
                        b = hiddenList.Contains(damage.attacker.client.userID.ToString()) && HWAI._targetTD == damage.attacker.client.controllable.GetComponent<TakeDamage>();
                    }
                }
                catch (Exception ex)
                {
                    Vars.conLog.Error("HH: " + ex.ToString());
                }

                if (!HWAI.HasTarget() && (damage.attacker.character != null) && !b)
                {
                    HWAI.SetAttackTarget(damage.attacker.character.gameObject.GetComponent<TakeDamage>());
                    HWAI.ExitCurrentState();
                    HWAI.EnterState_Chase();
                }

                if (b && HWAI.HasTarget())
                    HWAI._targetTD = null;
            }
            catch (Exception ex)
            {
                Vars.conLog.Error(ex.ToString());
            }
        }
Esempio n. 7
0
        public static void HostileChase(ulong millis, HostileWildlifeAI HWAI)
        {
            try
            {
                if (HWAI != null)
                {
                    if (millis != null)
                    {
                        if (HWAI._targetTD == null)
                        {
                            if (ignoringAIList.Contains(HWAI))
                            {
                                HWAI.GoScentBlind(10f);
                                HWAI.ExitCurrentState();
                                HWAI.idleClock.ResetRandomDurationSeconds(0, 0);
                                HWAI._state = 1;
                                if (!HWAI.idleSoundRefireClock.once)
                                {
                                    HWAI.idleSoundRefireClock.ResetRandomDurationSeconds(2.0, 4.0);
                                }
                                ignoringAIList.Remove(HWAI);
                            }
                            else
                                HWAI.LoseTarget();

                            if (hadTarget.Contains(HWAI))
                                hadTarget.Remove(HWAI);
                        }
                        else
                        {
                            bool b = false;
                            if (!hadTarget.Contains(HWAI))
                            {
                                try
                                {
                                    foreach (PlayerClient pc in AllPlayerClients)
                                    {
                                        if (pc.controllable != null)
                                        {
                                            if (pc.controllable.GetComponent<TakeDamage>() != null)
                                            {
                                                if (pc.controllable.GetComponent<TakeDamage>() == HWAI._targetTD)
                                                {
                                                    PlayerClient playerClient = pc;
                                                    b = hiddenList.Contains(playerClient.userID.ToString()) && HWAI._targetTD == playerClient.controllable.GetComponent<TakeDamage>();

                                                    try
                                                    {
                                                        if (!b)
                                                        {
                                                            if (isPlayer(HWAI._targetTD.idMain))
                                                            {
                                                                Character character = HWAI._targetTD.idMain as Character;
                                                                foreach (string UID in hiddenList)
                                                                {
                                                                    if (UID == character.playerClient.userID.ToString() && HWAI._targetTD == character.playerClient.controllable.GetComponent<TakeDamage>())
                                                                        b = true;
                                                                }
                                                            }
                                                        }
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        Vars.conLog.Error("HC #3: " + ex.ToString());
                                                    }
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Vars.conLog.Error("HC #2: " + ex.ToString());
                                }
                                hadTarget.Add(HWAI);
                            }

                            if (!b)
                            {
                                float num = HWAI.TargetRange();
                                if (num > HWAI.loseTargetRange)
                                {
                                    HWAI.LoseTarget();
                                }
                                else
                                {
                                    Vector3 vector = HWAI._targetTD.transform.position - HWAI.transform.position;
                                    vector.y = 0f;
                                    if (num <= HWAI.attackRange)
                                    {
                                        HWAI._wildMove.SetLookDirection(vector.normalized);
                                        HWAI.ExitCurrentState();
                                        HWAI.EnterState_Attack();
                                    }
                                    else
                                    {
                                        if (HWAI._wildMove.IsStuck())
                                        {
                                            if (HWAI.wasStuck)
                                            {
                                                if (HWAI.stuckClock.IntegrateTime_Reached(millis))
                                                {
                                                    Vector3 position = HWAI._targetTD.transform.position;
                                                    HWAI.LoseTarget();
                                                    HWAI.ExitCurrentState();
                                                    HWAI.EnterState_Flee(position, 0x2710L);
                                                    return;
                                                }
                                            }
                                            else
                                            {
                                                HWAI.wasStuck = true;
                                                HWAI.stuckClock.ResetRandomDurationSeconds(1.0, 2.0);
                                            }
                                        }
                                        else
                                        {
                                            HWAI.wasStuck = false;
                                        }
                                        if (HWAI.chaseSoundClock.IntegrateTime_Reached(millis))
                                        {
                                            BasicWildLifeAI.AISound chase = BasicWildLifeAI.AISound.Chase;
                                            if (num < 5f)
                                            {
                                                chase = BasicWildLifeAI.AISound.ChaseClose;
                                            }
                                            HWAI.NetworkSound(chase);
                                            HWAI.chaseSoundClock.ResetRandomDurationSeconds(1.5, 2.5);
                                        }
                                        HWAI._wildMove.SetMoveTarget(HWAI._targetTD.gameObject, HWAI.runSpeed);
                                        if (HWAI.targetReachClock.IntegrateTime_Reached(millis))
                                        {
                                            HWAI.LoseTarget();
                                            HWAI.ExitCurrentState();
                                            HWAI.EnterState_Idle();
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                conLog.Error("HC #1: " + ex.ToString());
            }
        }