private void GenericGameEvents_OnInteractionBegin(Interactor interactor, IInteractable interactable, GameObject interactableObject, bool canProc) { if (NetworkServer.active && canProc) { CharacterBody characterBody = interactor.GetComponent <CharacterBody>(); if (characterBody) { Inventory inventory = characterBody.inventory; if (inventory) { int itemCount = inventory.GetItemCount(MysticsItemsContent.Items.MysticsItems_HealOrbOnBarrel); if (itemCount > 0) { GameObject spawner = Object.Instantiate(delayedHealOrbSpawner, interactableObject.transform.position, interactableObject.transform.rotation); MysticsItemsHealOrbOnBarrelSpawner component = spawner.GetComponent <MysticsItemsHealOrbOnBarrelSpawner>(); spawner.transform.position = interactableObject.transform.position + Vector3.up * 2f; ChildLocator childLocator = interactableObject.GetComponent <ChildLocator>(); if (childLocator) { Transform fireworkOrigin = childLocator.FindChild("FireworkOrigin"); if (fireworkOrigin) { spawner.transform.position = fireworkOrigin.position; } } component.interactor = interactor; component.itemCount = itemCount; } } } } }
public override void OnLoad() { base.OnLoad(); itemDef.name = "MysticsItems_HealOrbOnBarrel"; SetItemTierWhenAvailable(ItemTier.Tier1); itemDef.tags = new ItemTag[] { ItemTag.Healing, ItemTag.Utility, ItemTag.AIBlacklist, ItemTag.InteractableRelated }; itemDef.pickupModelPrefab = PrepareModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Donut/Model.prefab")); itemDef.pickupIconSprite = Main.AssetBundle.LoadAsset <Sprite>("Assets/Items/Donut/Icon.png"); foreach (Transform childTransform in itemDef.pickupModelPrefab.transform.Find("Torus.001")) { GameObject child = childTransform.gameObject; Renderer renderer = child.GetComponentInChildren <Renderer>(); Color.RGBToHSV(renderer.material.color, out float h, out float s, out float v); h += Random.value; renderer.material.color = Color.HSVToRGB(h % 1, s, v); } itemDisplayPrefab = PrepareItemDisplayModel(PrefabAPI.InstantiateClone(itemDef.pickupModelPrefab, itemDef.pickupModelPrefab.name + "Display", false)); onSetupIDRS += () => { AddDisplayRule("CommandoBody", "Head", new Vector3(0f, 0.35f, 0f), new Vector3(0f, 180f, 0f), new Vector3(0.15f, 0.15f, 0.15f)); AddDisplayRule("HuntressBody", "Head", new Vector3(0F, 0.302F, -0.049F), new Vector3(0F, 180F, 0F), new Vector3(0.12F, 0.12F, 0.12F)); AddDisplayRule("Bandit2Body", "Hat", new Vector3(0F, 0.055F, -0.016F), new Vector3(336.039F, 0F, 0F), new Vector3(0.209F, 0.209F, 0.209F)); AddDisplayRule("ToolbotBody", "Head", new Vector3(0.053F, 2.57F, 1.265F), new Vector3(55.266F, 359.983F, 0.119F), new Vector3(1.5F, 1.5F, 1.5F)); AddDisplayRule("EngiBody", "HeadCenter", new Vector3(0F, 0.131F, -0.014F), new Vector3(356.315F, 0.001F, 359.976F), new Vector3(0.175F, 0.175F, 0.175F)); AddDisplayRule("EngiTurretBody", "Head", new Vector3(0F, 0.548F, 0F), new Vector3(0F, 180F, 0F), new Vector3(1.447F, 1.447F, 1.447F)); AddDisplayRule("EngiWalkerTurretBody", "Head", new Vector3(0F, 1.13F, -1.52F), new Vector3(351.692F, 180F, 0F), new Vector3(0.684F, 0.399F, 0.478F)); AddDisplayRule("MageBody", "Head", new Vector3(0F, 0.112F, -0.121F), new Vector3(66.476F, 180F, 0F), new Vector3(0.149F, 0.149F, 0.149F)); AddDisplayRule("MercBody", "Chest", new Vector3(0.013F, 0.184F, -0.259F), new Vector3(71.925F, 180F, 0F), new Vector3(0.15F, 0.15F, 0.15F)); AddDisplayRule("TreebotBody", "HandL", new Vector3(0.055F, 0.638F, 0.354F), new Vector3(12.464F, 0.568F, 10.583F), new Vector3(0.315F, 0.315F, 0.315F)); AddDisplayRule("LoaderBody", "Head", new Vector3(0F, 0.231F, 0F), new Vector3(0F, 180F, 0F), new Vector3(0.15F, 0.15F, 0.15F)); AddDisplayRule("CrocoBody", "Head", new Vector3(-0.946F, 3.963F, -0.229F), new Vector3(279.836F, 0F, 170.118F), new Vector3(1.602F, 1.602F, 1.602F)); AddDisplayRule("CaptainBody", "Stomach", new Vector3(0.002F, 0.134F, 0.176F), new Vector3(313.466F, 271.294F, 278.969F), new Vector3(0.086F, 0.086F, 0.086F)); AddDisplayRule("BrotherBody", "Head", BrotherInfection.white, new Vector3(-0.01F, 0.044F, 0.12F), new Vector3(65.585F, 339.303F, 255.053F), new Vector3(0.107F, 0.107F, 0.107F)); if (SoftDependencies.SoftDependenciesCore.itemDisplaysSniper) { AddDisplayRule("SniperClassicBody", "AntennaL", new Vector3(-0.00991F, 0.78285F, 0.00312F), new Vector3(0F, 0F, 0F), new Vector3(0.11502F, 0.11502F, 0.11502F)); AddDisplayRule("SniperClassicBody", "AntennaR", new Vector3(0.01191F, 0.78284F, 0.00313F), new Vector3(0F, 0F, 0F), new Vector3(0.11502F, 0.11502F, 0.11502F)); } AddDisplayRule("RailgunnerBody", "Head", new Vector3(0F, 0.19007F, -0.03365F), new Vector3(0F, 0F, 0F), new Vector3(0.15172F, 0.15172F, 0.15172F)); AddDisplayRule("VoidSurvivorBody", "Head", new Vector3(0.00001F, 0.16656F, 0.00005F), new Vector3(0F, 0F, 0F), new Vector3(0.17803F, 0.17803F, 0.17803F)); }; GenericGameEvents.OnInteractionBegin += GenericGameEvents_OnInteractionBegin; On.RoR2.GravitatePickup.FixedUpdate += (orig, self) => { var ror1style = self.GetComponent <GravitatePickupRoR1Style>(); if (ror1style && !ror1style.normalBehaviour) { var positionDifference = Vector3.Distance(ror1style.targetPosition, self.transform.position); if (positionDifference > ror1style.lastPositionDifference || ror1style.moveTime >= ror1style.moveTimeMax) { ror1style.moveTime = ror1style.moveTimeMax; self.rigidbody.velocity = Vector3.MoveTowards(self.rigidbody.velocity, Vector3.zero, self.acceleration * 0.25f); if (ror1style.floatTime < ror1style.floatTimeMax) { ror1style.floatTime += Time.fixedDeltaTime; if (ror1style.floatTime >= ror1style.floatTimeMax) { ror1style.floatTime = ror1style.floatTimeMax; ror1style.normalBehaviour = true; self.rigidbody.useGravity = true; } } } else { self.rigidbody.velocity = Vector3.MoveTowards(self.rigidbody.velocity, (ror1style.targetPosition - self.transform.position).normalized * self.maxSpeed, self.acceleration); ror1style.moveTime += Time.fixedDeltaTime; } ror1style.lastPositionDifference = positionDifference; } else { orig(self); } }; delayedHealOrbSpawner = PrefabAPI.InstantiateClone(new GameObject(), "MysticsItems_DelayedHealOrbSpawner"); MysticsItemsHealOrbOnBarrelSpawner delayedSpawnerComponent = delayedHealOrbSpawner.AddComponent <MysticsItemsHealOrbOnBarrelSpawner>(); }