private static void HideFloatingItems(On.RoR2.ItemFollower.orig_Start orig, ItemFollower self) { CharacterModel componentInParent = self.GetComponentInParent <CharacterModel>(); if (componentInParent) { if (componentInParent.body.IsLocalBody()) { self.enabled = false; return; } } orig(self); }
public override void OnLoad() { base.OnLoad(); itemDef.name = "MysticsItems_MysticSword"; SetItemTierWhenAvailable(ItemTier.Tier2); itemDef.tags = new ItemTag[] { ItemTag.Damage, ItemTag.OnKillEffect, ItemTag.AIBlacklist }; itemDef.pickupModelPrefab = PrepareModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Mystic Sword/Model.prefab")); itemDef.pickupIconSprite = Main.AssetBundle.LoadAsset <Sprite>("Assets/Items/Mystic Sword/Icon.png"); var mat = itemDef.pickupModelPrefab.GetComponentInChildren <Renderer>().sharedMaterial; HopooShaderToMaterial.Standard.Apply(mat); HopooShaderToMaterial.Standard.Emission(mat, 1f, new Color32(0, 250, 255, 255)); itemDef.pickupModelPrefab.transform.Find("GameObject").localScale *= 0.1f; var swordFollowerPrefab = PrefabAPI.InstantiateClone(PrepareItemDisplayModel(PrepareModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Mystic Sword/DisplayModel.prefab"))), "MysticsItems_MysticSwordItemFollowerPrefab", false); swordFollowerPrefab.transform.Find("TranslatePivot").transform.localScale *= 0.02f; ObjectTransformCurve objectTransformCurve = swordFollowerPrefab.transform.Find("TranslatePivot").gameObject.AddComponent <ObjectTransformCurve>(); objectTransformCurve.translationCurveX = AnimationCurve.Constant(0f, 1f, 0f); var floatY = 0.1f; objectTransformCurve.translationCurveY = new AnimationCurve { keys = new Keyframe[] { new Keyframe(0.25f, floatY), new Keyframe(0.75f, -floatY) }, preWrapMode = WrapMode.PingPong, postWrapMode = WrapMode.PingPong }; objectTransformCurve.translationCurveZ = AnimationCurve.Constant(0f, 1f, 0f); objectTransformCurve.useTranslationCurves = true; objectTransformCurve.timeMax = 10f; objectTransformCurve.rotationCurveX = AnimationCurve.Constant(0f, 1f, 0f); objectTransformCurve.rotationCurveY = AnimationCurve.Linear(0f, 0f, 1f, 360f); objectTransformCurve.rotationCurveY.preWrapMode = WrapMode.Loop; objectTransformCurve.rotationCurveY.postWrapMode = WrapMode.Loop; objectTransformCurve.rotationCurveZ = AnimationCurve.Constant(0f, 1f, 0f); objectTransformCurve.useRotationCurves = true; objectTransformCurve.gameObject.AddComponent <MysticsRisky2Utils.MonoBehaviours.MysticsRisky2UtilsObjectTransformCurveLoop>(); itemDisplayPrefab = PrefabAPI.InstantiateClone(new GameObject("MysticsItems_MysticSwordFollower"), "MysticsItems_MysticSwordFollower", false); itemDisplayPrefab.AddComponent <ItemDisplay>(); ItemFollower itemFollower = itemDisplayPrefab.AddComponent <ItemFollower>(); itemFollower.followerPrefab = swordFollowerPrefab; itemFollower.distanceDampTime = 0.1f; itemFollower.distanceMaxSpeed = 20f; itemFollower.targetObject = itemDisplayPrefab; var itemDisplayHelper = itemDisplayPrefab.AddComponent <MysticsItemsMysticSwordItemDisplayHelper>(); itemDisplayHelper.itemFollower = itemFollower; onSetupIDRS += () => { AddDisplayRule("CommandoBody", "Base", new Vector3(0.17794F, -0.28733F, -0.73752F), new Vector3(3.15473F, 89.99998F, 270.0002F), Vector3.one); AddDisplayRule("HuntressBody", "Base", new Vector3(0.17816F, -0.23663F, -0.52846F), new Vector3(2.42504F, 269.9999F, 90.0001F), Vector3.one); AddDisplayRule("Bandit2Body", "Base", new Vector3(0.4537F, 0.29041F, -0.57258F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("ToolbotBody", "Base", new Vector3(-1.04879F, -4.19278F, 5.42458F), new Vector3(0F, 90F, 90F), Vector3.one); AddDisplayRule("EngiBody", "Base", new Vector3(0.0113F, -0.52335F, -0.69199F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("EngiTurretBody", "Base", new Vector3(1.03266F, 3.98892F, -2.18302F), new Vector3(0F, 90F, 0F), Vector3.one); AddDisplayRule("EngiWalkerTurretBody", "Base", new Vector3(1.53037F, 3.79942F, -2.10391F), new Vector3(0F, 90F, 0F), Vector3.one); AddDisplayRule("MageBody", "Base", new Vector3(0.38669F, -0.43447F, -0.48611F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("MercBody", "Base", new Vector3(0.38005F, -0.35752F, -0.53391F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("TreebotBody", "Base", new Vector3(0.69145F, -1.39195F, -1.94014F), new Vector3(270F, 0F, 0F), Vector3.one * 1f); AddDisplayRule("LoaderBody", "Base", new Vector3(0.26563F, -0.57799F, -0.60309F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("CrocoBody", "Base", new Vector3(2.43278F, 4.85691F, 4.92643F), new Vector3(90F, 0F, 0F), Vector3.one * 1f); AddDisplayRule("CaptainBody", "Base", new Vector3(0.52281F, -0.26508F, -0.8575F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("BrotherBody", "HandR", BrotherInfection.green, new Vector3(-0.00915F, 0.08592F, 0.02786F), new Vector3(77.05167F, 128.9087F, 289.6218F), new Vector3(0.06672F, 0.02927F, 0.06676F)); AddDisplayRule("ScavBody", "Base", new Vector3(4.53188F, 14.35975F, 10.88982F), new Vector3(90F, 0F, 0F), Vector3.one * 2f); if (SoftDependencies.SoftDependenciesCore.itemDisplaysSniper) { AddDisplayRule("SniperClassicBody", "Base", new Vector3(-0.74382F, 1.77236F, -0.52436F), new Vector3(0F, 0F, 0F), new Vector3(1F, 1F, 1F)); } AddDisplayRule("RailgunnerBody", "Base", new Vector3(0.25904F, -0.39171F, -0.30991F), new Vector3(270F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("VoidSurvivorBody", "Base", new Vector3(0.4739F, 0.74488F, 0.37712F), new Vector3(68.90421F, 0F, 0F), new Vector3(1F, 1F, 1F) * 0.8f); }; { onKillVFX = Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Mystic Sword/SwordPowerUpKillEffect.prefab"); EffectComponent effectComponent = onKillVFX.AddComponent <EffectComponent>(); effectComponent.applyScale = true; VFXAttributes vfxAttributes = onKillVFX.AddComponent <VFXAttributes>(); vfxAttributes.vfxPriority = VFXAttributes.VFXPriority.Medium; vfxAttributes.vfxIntensity = VFXAttributes.VFXIntensity.Medium; onKillVFX.AddComponent <DestroyOnTimer>().duration = 1f; MysticsItemsContent.Resources.effectPrefabs.Add(onKillVFX); } { onKillOrbEffect = Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Mystic Sword/SwordPowerUpOrbEffect.prefab"); EffectComponent effectComponent = onKillOrbEffect.AddComponent <EffectComponent>(); effectComponent.positionAtReferencedTransform = false; effectComponent.parentToReferencedTransform = false; effectComponent.applyScale = true; VFXAttributes vfxAttributes = onKillOrbEffect.AddComponent <VFXAttributes>(); vfxAttributes.vfxPriority = VFXAttributes.VFXPriority.Always; vfxAttributes.vfxIntensity = VFXAttributes.VFXIntensity.Medium; OrbEffect orbEffect = onKillOrbEffect.AddComponent <OrbEffect>(); orbEffect.startVelocity1 = new Vector3(-25f, 5f, -25f); orbEffect.startVelocity2 = new Vector3(25f, 50f, 25f); orbEffect.endVelocity1 = new Vector3(0f, 0f, 0f); orbEffect.endVelocity2 = new Vector3(0f, 0f, 0f); var curveHolder = onKillVFX.transform.Find("Origin/Particle System").GetComponent <ParticleSystem>().sizeOverLifetime; orbEffect.movementCurve = curveHolder.size.curve; orbEffect.faceMovement = true; orbEffect.callArrivalIfTargetIsGone = false; DestroyOnTimer destroyOnTimer = onKillOrbEffect.transform.Find("Origin/Unparent").gameObject.AddComponent <DestroyOnTimer>(); destroyOnTimer.duration = 0.5f; destroyOnTimer.enabled = false; MysticsRisky2Utils.MonoBehaviours.MysticsRisky2UtilsOrbEffectOnArrivalDefaults onArrivalDefaults = onKillOrbEffect.AddComponent <MysticsRisky2Utils.MonoBehaviours.MysticsRisky2UtilsOrbEffectOnArrivalDefaults>(); onArrivalDefaults.orbEffect = orbEffect; onArrivalDefaults.transformsToUnparentChildren = new Transform[] { onKillOrbEffect.transform.Find("Origin/Unparent") }; onArrivalDefaults.componentsToEnable = new MonoBehaviour[] { destroyOnTimer }; MysticsItemsContent.Resources.effectPrefabs.Add(onKillOrbEffect); } onKillSFX = ScriptableObject.CreateInstance <NetworkSoundEventDef>(); onKillSFX.eventName = "MysticsItems_Play_item_proc_MysticSword"; MysticsItemsContent.Resources.networkSoundEventDefs.Add(onKillSFX); CharacterMaster.onStartGlobal += CharacterMaster_onStartGlobal; GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal; RecalculateStatsAPI.GetStatCoefficients += RecalculateStatsAPI_GetStatCoefficients; if (!SoftDependencies.SoftDependenciesCore.itemStatsEnabled) { On.RoR2.UI.ItemIcon.SetItemIndex += ItemIcon_SetItemIndex; } GenericGameEvents.BeforeTakeDamage += GenericGameEvents_BeforeTakeDamage; MysticsItemsMysticSwordItemDisplayHelper.materialFlash = LegacyResourcesAPI.Load <Material>("Materials/matHuntressFlashBright"); MysticsItemsMysticSwordItemDisplayHelper.blinkEffect = Addressables.LoadAssetAsync <GameObject>("RoR2/Base/Huntress/HuntressBlinkEffect.prefab").WaitForCompletion(); }
public override void OnLoad() { base.OnLoad(); itemDef.name = "MysticsItems_RegenAndDifficultySpeed"; SetItemTierWhenAvailable(ItemTier.Lunar); itemDef.tags = new ItemTag[] { ItemTag.Healing, ItemTag.AIBlacklist, ItemTag.CannotCopy }; itemDef.pickupModelPrefab = PrepareModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Lunar Cube/Model.prefab")); itemDef.pickupIconSprite = Main.AssetBundle.LoadAsset <Sprite>("Assets/Items/Lunar Cube/Icon.png"); Material material = itemDef.pickupModelPrefab.GetComponentInChildren <Renderer>().sharedMaterial; HopooShaderToMaterial.Standard.Apply(material); ColorUtility.TryParseHtmlString("#9BFFFF", out Color color); HopooShaderToMaterial.Standard.Emission(material, 2f, color); var followerPrefab = PrefabAPI.InstantiateClone(PrepareItemDisplayModel(PrefabAPI.InstantiateClone(itemDef.pickupModelPrefab, itemDef.pickupModelPrefab.name + "Display", false)), "MysticsItems_MysticSwordItemFollowerPrefab", false); followerPrefab.transform.Find("Scaler").localScale *= 0.6f; ObjectTransformCurve objectTransformCurve = followerPrefab.transform.Find("Scaler").gameObject.AddComponent <ObjectTransformCurve>(); objectTransformCurve.useTranslationCurves = false; objectTransformCurve.timeMax = 20f; objectTransformCurve.rotationCurveX = AnimationCurve.Constant(0f, 1f, 0f); objectTransformCurve.rotationCurveY = AnimationCurve.Linear(0f, -360f, 1f, 0f); objectTransformCurve.rotationCurveY.preWrapMode = WrapMode.Loop; objectTransformCurve.rotationCurveY.postWrapMode = WrapMode.Loop; objectTransformCurve.rotationCurveZ = AnimationCurve.Constant(0f, 1f, 0f); objectTransformCurve.useRotationCurves = true; objectTransformCurve.gameObject.AddComponent <MysticsRisky2Utils.MonoBehaviours.MysticsRisky2UtilsObjectTransformCurveLoop>(); itemDisplayPrefab = PrefabAPI.InstantiateClone(new GameObject("MysticsItems_LunarCubeFollower"), "MysticsItems_LunarCubeFollower", false); itemDisplayPrefab.AddComponent <ItemDisplay>(); ItemFollower itemFollower = itemDisplayPrefab.AddComponent <ItemFollower>(); itemFollower.followerPrefab = followerPrefab; itemFollower.distanceDampTime = 0.1f; itemFollower.distanceMaxSpeed = 20f; itemFollower.targetObject = itemDisplayPrefab; onSetupIDRS += () => { AddDisplayRule("CommandoBody", "Base", new Vector3(-0.53829F, -0.13216F, 0.11265F), new Vector3(3.15473F, 89.99998F, 270.0002F), new Vector3(1F, 1F, 1F)); AddDisplayRule("HuntressBody", "Base", new Vector3(-0.50487F, -0.23664F, 0.24332F), new Vector3(2.42504F, 269.9999F, 90.0001F), new Vector3(1F, 1F, 1F)); AddDisplayRule("Bandit2Body", "Base", new Vector3(0.17414F, -0.32998F, -0.00678F), new Vector3(270F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("ToolbotBody", "Base", new Vector3(2.4828F, -4.92693F, 1.29549F), new Vector3(0F, 90F, 90F), new Vector3(1F, 1F, 1F)); AddDisplayRule("EngiBody", "Base", new Vector3(-0.60578F, -0.52338F, -0.14311F), new Vector3(270F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("EngiTurretBody", "Base", new Vector3(-1.18285F, 2.28749F, -2.48034F), new Vector3(0F, 90F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("EngiWalkerTurretBody", "Base", new Vector3(-0.87233F, 2.00669F, -2.59369F), new Vector3(0F, 90F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("MageBody", "Base", new Vector3(-0.43306F, -0.43867F, 0.26171F), new Vector3(270F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("MercBody", "Base", new Vector3(-0.52697F, -0.49787F, 0.45683F), new Vector3(270F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("TreebotBody", "Base", new Vector3(-0.75802F, -1.67818F, -0.93951F), new Vector3(270F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("LoaderBody", "Base", new Vector3(-0.43154F, -0.69567F, 0.22747F), new Vector3(270F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("CrocoBody", "Base", new Vector3(-4.12918F, 3.9816F, 0.70414F), new Vector3(90F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("CaptainBody", "Base", new Vector3(-0.35685F, -0.47045F, 0.06453F), new Vector3(270F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("BrotherBody", "ThighL", BrotherInfection.blue, new Vector3(0.07921F, -0.00948F, 0.04758F), new Vector3(68.71732F, 228.1228F, 69.86813F), new Vector3(0.09518F, 0.04176F, 0.09524F)); AddDisplayRule("ScavBody", "Base", new Vector3(-14.92595F, 3.65256F, 0.84163F), new Vector3(90F, 0F, 0F), new Vector3(4F, 4F, 4F)); if (SoftDependencies.SoftDependenciesCore.itemDisplaysSniper) { AddDisplayRule("SniperClassicBody", "Base", new Vector3(-0.5431F, 0.93526F, 0.49732F), new Vector3(10.681F, 0.007F, 0.071F), new Vector3(1F, 1F, 1F)); } AddDisplayRule("RailgunnerBody", "Base", new Vector3(-0.59444F, -0.29985F, 0.26853F), new Vector3(90F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("VoidSurvivorBody", "Base", new Vector3(-0.41662F, 0.33464F, -0.26613F), new Vector3(90F, 0F, 0F), new Vector3(1F, 1F, 1F)); }; RecalculateStatsAPI.GetStatCoefficients += RecalculateStatsAPI_GetStatCoefficients; On.RoR2.Run.Start += (orig, self) => { orig(self); extraDifficultyTime = 0f; }; On.RoR2.Run.RecalculateDifficultyCoefficentInternal += (orig, self) => { calculatingDifficultyCoefficient = true; orig(self); calculatingDifficultyCoefficient = false; }; On.RoR2.Run.GetRunStopwatch += (orig, self) => { return(orig(self) + (calculatingDifficultyCoefficient ? extraDifficultyTime : 0)); }; On.RoR2.Run.FixedUpdate += (orig, self) => { orig(self); if (totalItemCount > 0) { if (!self.isRunStopwatchPaused) { extraDifficultyTime += Time.fixedDeltaTime * (timerSpeedIncrease.Value / 100f + timerSpeedIncreasePerStack.Value / 100f * (float)(totalItemCount - 1)); } if (NetworkServer.active) { onlineSyncTimer -= Time.fixedDeltaTime; if (onlineSyncTimer <= 0f) { onlineSyncTimer = onlineSyncDuration; new SyncTimer(extraDifficultyTime).Send(NetworkDestination.Clients); } } } }; On.RoR2.CharacterBody.OnInventoryChanged += (orig, self) => { orig(self); int newTotalItemCount = 0; for (int team = 0; team < (int)TeamIndex.Count; team++) { newTotalItemCount += Util.GetItemCountForTeam((TeamIndex)team, itemDef.itemIndex, true); } if (totalItemCount > 0 && newTotalItemCount == 0 && NetworkServer.active) { new SyncTimer(extraDifficultyTime).Send(NetworkDestination.Clients); } totalItemCount = newTotalItemCount; }; }