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); } } }
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)); }
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(); } } }
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); }
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(); } }
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); }