コード例 #1
0
 private bool OverlapAttack_Fire(On.RoR2.OverlapAttack.orig_Fire orig, OverlapAttack self, List <HealthComponent> hitResults)
 {
     if (self.attacker)
     {
         if (self.attacker.GetComponent <CharacterBody>() is CharacterBody characterBody && characterBody.inventory)
         {
             if (characterBody.inventory.GetItemCount(this.ItemIndex) is int count && count > 0)
             {
                 for (int i = 0; i < count; i++)
                 {
                     orig(self, hitResults);
                 }
             }
         }
     }
     return(orig(self, hitResults));
 }
コード例 #2
0
 private bool OverlapAttack_Fire(On.RoR2.OverlapAttack.orig_Fire orig, OverlapAttack self, List <HealthComponent> hitResults)
 {
     if (self.attacker)
     {
         if (self.attacker.GetComponent <CharacterBody>() is CharacterBody characterBody && characterBody.inventory)
         {
             if (characterBody.inventory.GetItemCount(this.ItemIndex) is int count && count > 0)
             {
                 List <OverlapAttack> attacks;
                 if (childAttacks.TryGetValue(self, out attacks))
                 {
                     foreach (var attack in attacks)
                     {
                         orig(attack, hitResults);
                     }
                 }
                 else
                 {
                     attacks = new List <OverlapAttack>();
                     for (int i = 0; i < count; i++)
                     {
                         OverlapAttack overlapAttack = new OverlapAttack();
                         overlapAttack.attacker          = self.attacker;
                         overlapAttack.attackerFiltering = self.attackerFiltering;
                         overlapAttack.damage            = self.damage;
                         overlapAttack.damageColorIndex  = self.damageColorIndex;
                         overlapAttack.damageType        = self.damageType;
                         overlapAttack.forceVector       = self.forceVector;
                         overlapAttack.hitBoxGroup       = self.hitBoxGroup;
                         overlapAttack.hitEffectPrefab   = self.hitEffectPrefab;
                         overlapAttack.inflictor         = self.inflictor;
                         overlapAttack.isCrit            = self.isCrit;
                         overlapAttack.procChainMask     = self.procChainMask;
                         overlapAttack.procCoefficient   = self.procCoefficient;
                         overlapAttack.teamIndex         = self.teamIndex;
                         attacks.Add(overlapAttack);
                         orig(overlapAttack, hitResults);
                     }
                     childAttacks.Add(self, attacks);
                 }
             }
         }
     }
     return(orig(self, hitResults));
 }
コード例 #3
0
        private bool OverlapAttack_Fire(On.RoR2.OverlapAttack.orig_Fire orig, OverlapAttack self, List <HurtBox> hitResults)
        {
            bool didAHit = orig(self, hitResults);

            HitboxGroupRevealer hitboxGroupRevealer = _hitboxGroupRevealers.Find((revealer) => {
                return(revealer != null && revealer.hitboxGroup == self.hitBoxGroup);
            });

            if (hitboxGroupRevealer == null)
            {
                hitboxGroupRevealer = self.hitBoxGroup.gameObject.AddComponent <HitboxGroupRevealer>();
                _hitboxGroupRevealers.Add(hitboxGroupRevealer);

                hitboxGroupRevealer.init(self.hitBoxGroup, _hitboxBoxPrefab, self.attacker);
            }

            hitboxGroupRevealer.reveal(true);

            return(didAHit);
        }
コード例 #4
0
 private bool OverlapAttack_Fire(On.RoR2.OverlapAttack.orig_Fire orig, OverlapAttack self, List <HealthComponent> hitResults)
 {
     self.damageType = ShockRoll(self.attacker, self.damageType, self.procCoefficient);
     return(orig(self, hitResults));
 }
コード例 #5
0
 private bool OverlapAttack_Fire(On.RoR2.OverlapAttack.orig_Fire orig, OverlapAttack self, System.Collections.Generic.List <HurtBox> hitResults)
 {
     self.damageType = ProcDamageType(self.attacker, itemDef, self.damageType, damageType, self.procCoefficient, BatteryBullets_ProcCoefficient, BatteryBullets_ProcCoefficientStack);
     return(orig(self, hitResults));
 }
コード例 #6
0
        private bool FireSwordOnMelee(On.RoR2.OverlapAttack.orig_Fire orig, RoR2.OverlapAttack self, List <RoR2.HealthComponent> hitResults)
        {
            var owner = self.inflictor;

            if (owner)
            {
                var body = owner.GetComponent <RoR2.CharacterBody>();
                if (body)
                {
                    var InventoryCount = GetCount(body);
                    if (InventoryCount > 0)
                    {
                        if (body.healthComponent.combinedHealthFraction >= 1)
                        {
                            Vector3 HitPositionSums = Vector3.zero;
                            if (self.overlapList.Count > 0)
                            {
                                for (int i = 0; i < self.overlapList.Count; i++)
                                {
                                    HitPositionSums += self.overlapList[i].hitPosition;
                                }

                                HitPositionSums /= self.overlapList.Count;
                            }
                            else
                            {
                                HitPositionSums += body.corePosition;
                            }
                            var inputBank = body.inputBank;

                            var cooldownHandler = owner.GetComponent <SwordCooldownHandlerIDunno>();
                            if (!cooldownHandler)
                            {
                                cooldownHandler = owner.AddComponent <SwordCooldownHandlerIDunno>();
                            }

                            if (!cooldownHandler.MeleeTracker.ContainsKey(self))
                            {
                                cooldownHandler.MeleeTracker.Add(self, 0);
                                var newProjectileInfo = new FireProjectileInfo();
                                newProjectileInfo.owner              = self.inflictor;
                                newProjectileInfo.projectilePrefab   = SwordProjectile;
                                newProjectileInfo.speedOverride      = 100.0f;
                                newProjectileInfo.damage             = body.damage * baseSwordDamageMultiplier + (body.damage * additionalSwordDamageMultiplier * (InventoryCount - 1));
                                newProjectileInfo.damageTypeOverride = null;
                                newProjectileInfo.damageColorIndex   = DamageColorIndex.Default;
                                newProjectileInfo.procChainMask      = default(ProcChainMask);
                                newProjectileInfo.position           = HitPositionSums;
                                newProjectileInfo.rotation           = RoR2.Util.QuaternionSafeLookRotation(inputBank ? inputBank.aimDirection : body.transform.forward);

                                try
                                {
                                    RecursionPrevention = true;
                                    RoR2.Projectile.ProjectileManager.instance.FireProjectile(newProjectileInfo);
                                }
                                finally
                                {
                                    RecursionPrevention = false;
                                }
                            }
                        }
                    }
                }
            }
            return(orig(self, hitResults));
        }