protected override bool ActivateEquipment(EquipmentSlot slot)
        {
            //We check for the characterbody, and if that has an inputbank that we'll be getting our aimray from. If we don't have it, we don't continue.
            if (!slot.characterBody || !slot.characterBody.inputBank)
            {
                return(false);
            }

            //Check for our targeting controller that we attach to the object if we have "Use Targeting" enabled.
            var targetComponent = slot.GetComponent <TargetingControllerComponent>();

            //Ensure we have a target component, and that component is reporting that we have an object targeted.
            if (targetComponent && targetComponent.TargetObject)
            {
                var chosenHurtbox = targetComponent.TargetFinder.GetResults().First();

                //Here we would use said hurtbox for something. Could be anything from firing a projectile towards it, applying a buff/debuff to it. Anything you can think of.
                if (chosenHurtbox)
                {
                    //stuff
                }

                return(true);
            }
            return(false);
        }
        public override bool Effect(EquipmentSlot slot)
        {
            var ownerBody = slot.GetComponent <CharacterBody>();

            if (!ownerBody)
            {
                return(false);
            }
            var ownerHealthComponent = ownerBody.GetComponent <HealthComponent>();

            if (!ownerHealthComponent || (ownerHealthComponent.health == ownerHealthComponent.fullHealth && ownerHealthComponent.shield == ownerHealthComponent.fullShield && ownerHealthComponent.godMode == false))
            {
                return(false);
            }
            var distillateComp = ownerBody.gameObject.GetComponent <DistillateBehaviour>();

            if (!distillateComp)
            {
                distillateComp    = ownerBody.gameObject.AddComponent <DistillateBehaviour>();
                distillateComp.hc = ownerHealthComponent;
                distillateComp.cb = ownerBody;
            }
            distillateComp.lifeTime = DistillateDuration;
            ownerBody.AddBuff(DistillateBuff.buffIndex);
            return(true);
        }
        public override bool OnUse(EquipmentSlot equipmentSlot)
        {
            MysticsRisky2UtilsEquipmentTarget targetInfo = equipmentSlot.GetComponent <MysticsRisky2UtilsEquipmentTarget>();

            if (targetInfo)
            {
                if (targetInfo.obj)
                {
                    PurchaseInteraction purchaseInteraction = targetInfo.obj.GetComponent <MysticsItemsDuplicatorLocator>().purchaseInteraction;
                    purchaseInteraction.SetAvailable(false);
                    purchaseInteraction.lockGameObject = null;
                    ShopTerminalBehavior shopTerminalBehavior = targetInfo.obj.GetComponent <MysticsItemsDuplicatorLocator>().shopTerminalBehavior;
                    EffectManager.SimpleEffect(LegacyResourcesAPI.Load <GameObject>("Prefabs/Effects/OmniEffect/OmniRecycleEffect"), shopTerminalBehavior.pickupDisplay.transform.position, Quaternion.identity, true);
                    shopTerminalBehavior.SetHasBeenPurchased(true);
                    for (var i = 0; i < amount; i++)
                    {
                        PickupDropletController.CreatePickupDroplet(
                            shopTerminalBehavior.pickupIndex,
                            (shopTerminalBehavior.dropTransform ? shopTerminalBehavior.dropTransform : shopTerminalBehavior.transform).position,
                            shopTerminalBehavior.transform.TransformVector(shopTerminalBehavior.dropVelocity)
                            );
                    }
                    shopTerminalBehavior.SetNoPickup();
                    targetInfo.Invalidate();
                    return(true);
                }
            }
            return(false);
        }
        public override bool OnUse(EquipmentSlot equipmentSlot)
        {
            MysticsRisky2UtilsEquipmentTarget targetInfo = equipmentSlot.GetComponent <MysticsRisky2UtilsEquipmentTarget>();

            if (targetInfo)
            {
                if (targetInfo.obj)
                {
                    var hackingManager = targetInfo.obj.AddComponent <MysticsItemsOmarHackToolHackingManager>();
                    hackingManager.purchaseInteraction = targetInfo.obj.GetComponent <MysticsItemsChestLocator>().purchaseInteraction;
                    if (equipmentSlot.characterBody)
                    {
                        hackingManager.interactor = equipmentSlot.characterBody.GetComponent <Interactor>();
                    }
                    if (hackingManager.GetComponent <ChestBehavior>())
                    {
                        hackingManager.delay = 0.1f;
                    }
                    else
                    {
                        hackingManager.purchaseInteraction.SetAvailable(false);
                    }

                    EffectManager.SpawnEffect(hackOverlayPrefab, new EffectData
                    {
                        rootObject = hackingManager.gameObject
                    }, true);

                    var component2 = equipmentSlot.GetComponent <MysticsItemsOmarHackToolBehaviour>();
                    if (component2 && component2.usesLeft > 0)
                    {
                        component2.usesLeft--;
                    }

                    targetInfo.Invalidate();

                    equipmentSlot.subcooldownTimer = 0.5f;
                    return(true);
                }
            }
            return(false);
        }
 public void UpdateItemDisplay()
 {
     if (equipmentSlot && hologramObject)
     {
         var component = equipmentSlot.GetComponent <MysticsItemsOmarHackToolBehaviour>();
         if (component)
         {
             hologramObject.SetActive(component.usesLeft > 0);
         }
     }
 }
示例#6
0
        public override bool OnUse(EquipmentSlot equipmentSlot)
        {
            MicrophoneSoundwaveLauncher component = equipmentSlot.GetComponent <MicrophoneSoundwaveLauncher>();

            if (!component)
            {
                component = equipmentSlot.gameObject.AddComponent <MicrophoneSoundwaveLauncher>();
            }
            component.ammo++;
            component.aimRay = equipmentSlot.GetAimRay();
            return(true);
        }
 private bool EquipmentSlot_ExecuteIfReady(On.RoR2.EquipmentSlot.orig_ExecuteIfReady orig, EquipmentSlot self)
 {
     if (self.equipmentIndex == equipmentDef.equipmentIndex)
     {
         var component = self.GetComponent <MysticsItemsOmarHackToolBehaviour>();
         if (component && component.usesLeft <= 0)
         {
             return(false);
         }
     }
     return(orig(self));
 }
示例#8
0
        public override bool Effect(EquipmentSlot equipmentSlot)
        {
            var transform      = equipmentSlot.transform;
            var placementRules = new DirectorPlacementRule
            {
                placementMode = DirectorPlacementRule.PlacementMode.Approximate,
                minDistance   = 10f,
                maxDistance   = 100f,
                spawnOnTarget = transform
            };
            var hateRequest = new DirectorSpawnRequest(hostileCard, placementRules, RoR2Application.rng)
            {
                ignoreTeamMemberLimit = false,
                teamIndexOverride     = TeamIndex.Monster
            };
            var spawn = DirectorCore.instance.TrySpawnObject(hateRequest);

            spawn.transform.TransformDirection(0, 100, 0);
            if (spawn)
            {
                CharacterMaster cm = spawn.GetComponent <CharacterMaster>();
                if (cm)
                {
                    cm.inventory.GiveItem(ItemIndex.BoostDamage, GetItemCountFromMultiplier(HostileDMG));
                    cm.inventory.GiveItem(ItemIndex.BoostHp, GetItemCountFromMultiplier((HostileHP)));
                }
            }
            var friendRequest = new DirectorSpawnRequest(friendCard, placementRules, RoR2Application.rng)
            {
                ignoreTeamMemberLimit = false,
                teamIndexOverride     = TeamIndex.Player,
                summonerBodyObject    = equipmentSlot.GetComponent <CharacterBody>().gameObject
            };
            var spawn2 = DirectorCore.instance.TrySpawnObject(friendRequest);

            spawn2.transform.TransformDirection(0, 100, 0);
            if (spawn2)
            {
                CharacterMaster cm = spawn2.GetComponent <CharacterMaster>();
                if (cm)
                {
                    cm.inventory.GiveItem(ItemIndex.BoostDamage, GetItemCountFromMultiplier(AllyDMG));
                    cm.inventory.GiveItem(ItemIndex.BoostHp, GetItemCountFromMultiplier((AllyHP)));
                }
            }
            if (spawn || spawn2)
            {
                return(true);
            }
            return(false);
        }
        private void EquipmentSlot_UpdateInventory(On.RoR2.EquipmentSlot.orig_UpdateInventory orig, EquipmentSlot self)
        {
            orig(self);
            var component = self.GetComponent <MysticsItemsOmarHackToolBehaviour>();

            if (component)
            {
                var maxStock = self.maxStock;
                if (component.maxUses != maxStock)
                {
                    component.maxUses = maxStock;
                    MysticsItemsOmarHackToolHUD.RefreshAll();
                    MysticsItemsOmarHackToolItemDisplayHelper.UpdateAllItemDisplays();
                }
            }
        }
示例#10
0
        public override bool Effect(EquipmentSlot slot)
        {
            var     ownerBody = slot.GetComponent <CharacterBody>();
            Vector3 pos       = Util.GetCorePosition(ownerBody);

            for (TeamIndex teamIndex = TeamIndex.Neutral; teamIndex < TeamIndex.Count; teamIndex++)
            {
                if (teamIndex != ownerBody.teamComponent.teamIndex)
                {
                    foreach (TeamComponent teamComponent in TeamComponent.GetTeamMembers(teamIndex))
                    {
                        if ((teamComponent.transform.position - pos).sqrMagnitude <= Mathf.Pow(Radius, 2))
                        {
                            CharacterBody component = teamComponent.GetComponent <CharacterBody>();
                            if (component)
                            {
                                var state = component.GetComponent <SetStateOnHurt>();
                                if (state)
                                {
                                    state.SetFrozen(FreezeDuration);
                                }
                            }
                        }
                    }
                }
            }
            GameObject explosionPreFab = UnityEngine.Object.Instantiate(Resources.Load <GameObject>("Prefabs/NetworkedObjects/GenericDelayBlast"), pos, Quaternion.identity);

            explosionPreFab.transform.localScale = new Vector3(Radius, Radius, Radius);
            DelayBlast delayBlast = explosionPreFab.GetComponent <DelayBlast>();

            delayBlast.explosionEffect = Resources.Load <GameObject>("Prefabs/Effects/ImpactEffects/AffixWhiteExplosion");
            delayBlast.delayEffect     = Resources.Load <GameObject>("Prefabs/Effects/AffixWhiteDelayEffect");
            delayBlast.position        = pos;
            delayBlast.baseDamage      = 0;
            delayBlast.baseForce       = 0f;
            delayBlast.radius          = Radius;
            delayBlast.maxTimer        = 0.1f;
            delayBlast.procCoefficient = 0f;

            return(true);
        }
示例#11
0
            public static void RefreshForHUDInstance(HUD hudInstance)
            {
                CharacterMaster targetMaster   = hudInstance.targetMaster;
                CharacterBody   characterBody  = hudInstance.targetBodyObject ? hudInstance.targetBodyObject.GetComponent <CharacterBody>() : null;
                EquipmentSlot   equipmentSlot  = characterBody ? characterBody.equipmentSlot : null;
                EquipmentIndex  equipmentIndex = characterBody && characterBody.inventory ? characterBody.inventory.currentEquipmentIndex : EquipmentIndex.None;

                var ei            = MysticsItemsContent.Equipment.MysticsItems_OmarHackTool.equipmentIndex;
                var shouldDisplay = equipmentSlot ? (equipmentSlot.equipmentIndex == ei || equipmentIndex == ei) : false;

                MysticsItemsOmarHackToolHUD targetIndicatorInstance = instancesList.FirstOrDefault(x => x.hud == hudInstance);

                if (targetIndicatorInstance != shouldDisplay)
                {
                    if (!targetIndicatorInstance)
                    {
                        if (hudInstance.mainUIPanel)
                        {
                            var transform = (RectTransform)hudInstance.mainUIPanel.transform.Find("SpringCanvas/BottomRightCluster/Scaler/EquipmentSlot/DisplayRoot");
                            if (transform)
                            {
                                targetIndicatorInstance     = Instantiate(hudPrefab, transform).GetComponent <MysticsItemsOmarHackToolHUD>();
                                targetIndicatorInstance.hud = hudInstance;
                            }
                        }
                    }
                    else
                    {
                        Destroy(targetIndicatorInstance.gameObject);
                    }
                }

                if (shouldDisplay && targetIndicatorInstance)
                {
                    targetIndicatorInstance.equipmentSlot      = equipmentSlot;
                    targetIndicatorInstance.equipmentBehaviour = equipmentSlot.GetComponent <MysticsItemsOmarHackToolBehaviour>();
                    targetIndicatorInstance.UpdateText();
                }
            }
示例#12
0
        public override bool OnUse(EquipmentSlot equipmentSlot)
        {
            CharacterMaster master = equipmentSlot.characterBody.master;

            if (master)
            {
                ArchaicMaskSummonLimit summonLimit = master.GetComponent <ArchaicMaskSummonLimit>();
                if (!summonLimit)
                {
                    summonLimit = master.gameObject.AddComponent <ArchaicMaskSummonLimit>();
                }

                MysticsRisky2UtilsEquipmentTarget targetInfo = equipmentSlot.GetComponent <MysticsRisky2UtilsEquipmentTarget>();
                if (targetInfo && targetInfo.obj)
                {
                    HurtBox targetHB = targetInfo.obj.GetComponent <CharacterBody>().mainHurtBox;
                    if (targetHB)
                    {
                        DirectorSpawnRequest directorSpawnRequest = new DirectorSpawnRequest((SpawnCard)LegacyResourcesAPI.Load <CharacterSpawnCard>("SpawnCards/CharacterSpawnCards/cscArchWisp"), new DirectorPlacementRule
                        {
                            placementMode = DirectorPlacementRule.PlacementMode.NearestNode,
                            spawnOnTarget = targetHB.transform
                        }, RoR2Application.rng)
                        {
                            summonerBodyObject = equipmentSlot.characterBody.gameObject
                        };
                        directorSpawnRequest.onSpawnedServer += (spawnResult) =>
                        {
                            GameObject      wispMasterObject = spawnResult.spawnedInstance;
                            CharacterMaster wispMaster       = wispMasterObject.GetComponent <CharacterMaster>();
                            wispMaster.inventory.GiveItem(RoR2Content.Items.HealthDecay, (int)duration.Value);
                            wispMaster.inventory.GiveItem(RoR2Content.Items.BoostDamage, (int)(wispDamage.Value - 100f) / 10);
                            wispMaster.inventory.GiveItem(RoR2Content.Items.BoostHp, (int)(wispHealth.Value - 100f) / 10);
                            wispMaster.inventory.GiveItem(RoR2Content.Items.AlienHead, (int)(wispCDR.Value - 100f) / 10);
                            wispMaster.inventory.GiveItem(RoR2Content.Items.BoostAttackSpeed, (int)(wispAttackSpeed.Value - 100f) / 10);
                            wispMaster.GetComponent <RoR2.CharacterAI.BaseAI>().currentEnemy.gameObject  = targetHB.healthComponent.gameObject;
                            wispMaster.GetComponent <RoR2.CharacterAI.BaseAI>().currentEnemy.bestHurtBox = targetHB;
                            summonLimit.Add(wispMasterObject);
                        };
                        DirectorCore.instance.TrySpawnObject(directorSpawnRequest);

                        targetInfo.Invalidate();
                        return(true);
                    }
                }

                {
                    DirectorSpawnRequest directorSpawnRequest = new DirectorSpawnRequest((SpawnCard)LegacyResourcesAPI.Load <CharacterSpawnCard>("SpawnCards/CharacterSpawnCards/cscArchWisp"), new DirectorPlacementRule
                    {
                        placementMode = DirectorPlacementRule.PlacementMode.NearestNode,
                        position      = equipmentSlot.GetAimRay().origin
                    }, RoR2Application.rng)
                    {
                        summonerBodyObject = equipmentSlot.characterBody.gameObject
                    };
                    directorSpawnRequest.onSpawnedServer += (spawnResult) =>
                    {
                        GameObject      wispMasterObject = spawnResult.spawnedInstance;
                        CharacterMaster wispMaster       = wispMasterObject.GetComponent <CharacterMaster>();
                        wispMaster.inventory.GiveItem(RoR2Content.Items.HealthDecay, (int)duration.Value);
                        wispMaster.inventory.GiveItem(RoR2Content.Items.BoostDamage, (int)(wispDamage.Value - 100f) / 10);
                        wispMaster.inventory.GiveItem(RoR2Content.Items.BoostHp, (int)(wispHealth.Value - 100f) / 10);
                        wispMaster.inventory.GiveItem(RoR2Content.Items.AlienHead, (int)(wispCDR.Value - 100f) / 10);
                        wispMaster.inventory.GiveItem(RoR2Content.Items.BoostAttackSpeed, (int)(wispAttackSpeed.Value - 100f) / 10);
                        summonLimit.Add(wispMasterObject);
                    };
                    DirectorCore.instance.TrySpawnObject(directorSpawnRequest);
                    return(true);
                }
            }
            return(false);
        }