Ejemplo n.º 1
0
            public void Start()
            {
                if (!projectileController)
                {
                    projectileController = gameObject.GetComponent <RoR2.Projectile.ProjectileController>();
                }

                if (projectileController)
                {
                    var owner = projectileController.Networkowner;
                    if (owner)
                    {
                        deployableTracker = owner.GetComponent <ProjectileDeployableTracker>();
                    }
                }
                if (deployableTracker)
                {
                    switch (deployableType)
                    {
                    case PerPlayerDeployableType.Saw:
                        deployableTracker.sawList.Add(gameObject);
                        break;
                    }
                }
            }
Ejemplo n.º 2
0
 private void ProjectileController_OnDestroy(On.RoR2.Projectile.ProjectileController.orig_OnDestroy orig, RoR2.Projectile.ProjectileController self)
 {
     orig(self);
     if (!self.GetComponent <ProjectileHasValidHitFlag>() &&
         self.owner == this.localUser.cachedBodyObject)
     {
         userProfile.statSheet.PushStatValue(Mug.instance.whiffsStatDef, 1UL);
         if (ProgressForAchievement() >= 1.0f)
         {
             Grant();
         }
     }
 }
Ejemplo n.º 3
0
        private void ProjectileController_OnTriggerEnter(On.RoR2.Projectile.ProjectileController.orig_OnTriggerEnter orig, RoR2.Projectile.ProjectileController self, Collider collider)
        {
            orig(self, collider);
            if (!collider.gameObject)
            {
                return;
            }
            var hb = collider.gameObject.GetComponent <HurtBox>();

            if (hb && hb.healthComponent)
            {
                self.gameObject.AddComponent <ProjectileHasValidHitFlag>();
            }
        }
Ejemplo n.º 4
0
        void UpdateThreatAssessment(float dt)
        {
            float threatDist = 1000f;
            float dist       = 100f;
            float num        = float.PositiveInfinity;

            Collider[] colliders  = Physics.OverlapSphere(character.transform.position, 100f, LayerIndex.entityPrecise.mask);
            Collider[] colliders1 = Physics.OverlapSphere(character.transform.position, 25f, LayerIndex.projectile.mask);
            if (colliders.Length > 30 || colliders1.Length > 30)
            {
                threatDist = 0f;
            }
            else
            {
                foreach (Collider collider in colliders)
                {
                    float distance = Vector3.Distance(character.transform.position, collider.transform.position);
                    if (distance < num)
                    {
                        HurtBox a = collider.GetComponent <HurtBox>();
                        if (a)
                        {
                            HealthComponent b = a.healthComponent;
                            if (b && (b.gameObject == character.gameObject || b.body.teamComponent.teamIndex <= TeamIndex.Player))
                            {
                                continue;
                            }
                            if (distance == 0)
                            {
                                threatDist = 0;
                                break;
                            }
                            num = distance;
                        }
                    }
                }
                if (threatDist != 0f)
                {
                    foreach (Collider collider in colliders1)
                    {
                        float distance = Vector3.Distance(character.transform.position, collider.transform.position);
                        if (distance < num)
                        {
                            //HurtBox a = collider.GetComponent<HurtBox>();
                            //if (a)
                            //{
                            //    HealthComponent b = a.healthComponent;
                            //    if (b && b.gameObject == character.gameObject)
                            //    {
                            //        continue;
                            //    }
                            //    if (distance == 0)
                            //    {
                            //        threatDist = 0;
                            //        break;
                            //    }
                            //    num = distance;
                            //}
                            RoR2.Projectile.ProjectileController projectileController = collider.transform.root.GetComponentInChildren <RoR2.Projectile.ProjectileController>();
                            if (projectileController)
                            {
                                if (projectileController.teamFilter.teamIndex <= TeamIndex.Player || projectileController.owner == character.gameObject)
                                {
                                    continue;
                                }
                            }
                            if (distance == 0)
                            {
                                threatDist = 0;
                                break;
                            }
                            num = distance;
                        }
                    }
                }
                if (!float.IsPositiveInfinity(num))
                {
                    threatDist = num;
                }
                else
                {
                    threatDist = dist;
                }
            }



            //List<Collider> colliderList = new List<Collider>();

            //Collider[] tempColliders;
            //Collider[] tempColliders2;
            //tempColliders = Physics.OverlapBox(character.transform.position, new Vector3(50f, 50f, 50f), character.transform.rotation, LayerIndex.projectile.mask);
            //tempColliders2 = Physics.OverlapBox(character.transform.position, new Vector3(50f, 50f, 50f), character.transform.rotation, LayerIndex.entityPrecise.mask);
            //if (tempColliders.Length > 0)
            //{
            //    foreach (Collider col in tempColliders)
            //    {
            //        if (col.gameObject.transform.root.GetComponentInChildren<RoR2.Projectile.ProjectileController>().owner!=character.gameObject)
            //            colliderList.Add(col);
            //    }
            //}

            //if (tempColliders2.Length > 0)
            //{
            //    foreach (Collider coll in tempColliders2)
            //    {
            //        if (coll.gameObject.transform.root.GetComponentInChildren<CharacterBody>() != null)
            //        {
            //            GameObject root = coll.gameObject.transform.root.gameObject;
            //            if (root.GetComponentInChildren<CharacterBody>().teamComponent.teamIndex >= TeamIndex.Monster && root.GetComponentInChildren<HurtBoxGroup>().mainHurtBox.collider == coll)
            //                colliderList.Add(coll);
            //        }
            //        else
            //        {
            //            R2API.Utils.ChatMessage.Send("Found " + coll.gameObject.name + "'s collider");

            //        }

            //    }
            //}
            //if (colliderList.Contains(character.mainHurtBox.collider))
            //    R2API.Utils.ChatMessage.Send("Still added Samus' collider");



            //if (colliderList.Count != 0)
            //{

            //R2API.Utils.ChatMessage.Send(dt+": found " + colliderList.Count + " colliders");

            //foreach (Collider item in colliderList)
            //{
            //    float tempDist = Vector3.Distance( item.transform.position,temp);

            //    if (tempDist < dist&&item!=character.mainHurtBox.collider)
            //        dist = tempDist;
            //}
            //R2API.Utils.ChatMessage.Send("closest dist: "+dist);
            //if (dist < threatDist)
            //    threatDist = dist;


            //}
            //colliderList.Clear();
            //solveEnvironentDamage();
            //if(envDamage)
            //{
            //    threatDist = 0f;
            //}
            if (threatIntf.isActive(false))
            {
                threatIntf.SetThreatDistance(threatDist);
            }
        }
Ejemplo n.º 5
0
        private void ProjectileController_OnTriggerEnter(On.RoR2.Projectile.ProjectileController.orig_OnTriggerEnter orig, RoR2.Projectile.ProjectileController self, Collider collider)
        {
            orig(self, collider);
            if (collider == null || !collider.gameObject || !self || !self.owner)
            {
                return;
            }
            var hb    = collider.gameObject.GetComponent <HurtBox>();
            var ob    = self.owner.GetComponent <CharacterBody>();
            var count = GetCount(ob);

            if (hb && hb.healthComponent && count > 0 && hb.healthComponent != self.owner.GetComponent <HealthComponent>() && hb.teamIndex == TeamComponent.GetObjectTeam(self.owner))
            {
                new MsgHealTargetAndSelf(hb.healthComponent, ob.healthComponent, count * self.procCoefficient, self.procChainMask)
                .Send(R2API.Networking.NetworkDestination.Server);
            }
        }