protected virtual void ActivateStatusEffectAction() { if (AbilityDef.Action != AbilityAction.StatusEffect) { EpicLoot.LogError($"Tried to activate a status effect ability ({AbilityDef.ID}) that was not marked as Action=StatusEffect!"); return; } var statusEffectName = AbilityDef.ActionParams.FirstOrDefault(); if (string.IsNullOrEmpty(statusEffectName)) { EpicLoot.LogError($"Tried to activate a status effect ability ({AbilityDef.ID}) but the status effect name param was missing!"); return; } var statusEffect = EpicLoot.LoadAsset <StatusEffect>(statusEffectName); if (statusEffect == null) { EpicLoot.LogError($"Tried to activate a status effect ability ({AbilityDef.ID}) but the status effect asset could not be found ({statusEffectName})!"); return; } _player.GetSEMan().AddStatusEffect(statusEffect); }
public static bool Prefix(Attack __instance) { if (__instance.m_character.IsPlayer() && __instance.m_weapon != null) { var player = (Player)__instance.m_character; var weaponDamage = __instance.GetWeapon()?.GetDamage(); if (player.HasActiveMagicEffect(MagicEffectType.FrostDamageAOE) && weaponDamage.HasValue && weaponDamage.Value.m_frost > 0) { Modified = true; __instance.m_triggerEffect.m_effectPrefabs = __instance.m_triggerEffect.m_effectPrefabs.AddItem(new EffectList.EffectData { m_prefab = EpicLoot.LoadAsset <GameObject>(FxPrefabName), m_enabled = true }).ToArray(); var colliderPrefab = EpicLoot.LoadAsset <GameObject>("IceSpikesCollider"); var transform = player.transform; var attackOrigin = __instance.GetAttackOrigin(); var effectPosition = attackOrigin.position + Vector3.up * __instance.m_attackHeight + transform.forward * __instance.m_attackRange + transform.right * __instance.m_attackOffset; var collider = Object.Instantiate(colliderPrefab, effectPosition, transform.rotation, attackOrigin); var damageController = collider.AddComponent <FrostAOEDamageController>(); var damage = __instance.m_weapon.GetDamage(); damage.Modify(__instance.m_damageMultiplier); damage.Modify(player.GetRandomSkillFactor(__instance.m_weapon.m_shared.m_skillType)); damage.Modify(__instance.GetLevelDamageFactor()); damageController.SetDamage(damage, player); } } return(true); }
public virtual void TryInitialize(InventoryGui inventoryGui, int tabIndex, Action <TabController> onTabPressed) { if (EpicLoot.HasAuga) { var exists = Auga.API.Workbench_HasWorkbenchTab(GetTabButtonId()); if (IsCustomTab && !exists) { var buttonSprite = EpicLoot.LoadAsset <Sprite>($"{GetTabButtonId().ToLower()}_tabicon"); AugaTabData = Auga.API.Workbench_AddWorkbenchTab(GetTabButtonId(), buttonSprite, GetTabButtonText(), (index) => onTabPressed(this)); var tabButtonGameObject = AugaTabData.TabButtonGO; TabButton = tabButtonGameObject.GetComponent <Button>(); } } else { var tabContainer = GetTabContainer(inventoryGui); var existingButton = tabContainer.Find(GetTabButtonId()); if (IsCustomTab && existingButton == null) { var go = Object.Instantiate(GetTabPrefab(inventoryGui), tabContainer, true).gameObject; go.name = GetTabButtonId(); TabButton = go.GetComponent <Button>(); var label = go.GetComponentInChildren <Text>(); if (label != null) { label.text = GetTabButtonText(); } go.RectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, GetTabWidth()); TabButton.gameObject.RectTransform().anchoredPosition = TabButton.gameObject.RectTransform().anchoredPosition + new Vector2(107 * (tabIndex + 1), 0); go.transform.SetSiblingIndex(tabContainer.childCount - 2); TabButton.onClick = new Button.ButtonClickedEvent(); TabButton.onClick.AddListener(TabButton.GetComponent <ButtonSfx>().OnClick); TabButton.onClick.AddListener(() => onTabPressed(this)); } } if (TabButton != null) { var gp = TabButton.GetComponent <UIGamePad>(); if (gp != null) { GamepadHint = gp.m_hint; Object.Destroy(gp); } } }
public virtual void Refresh(Ability ability) { if (_index < 0 || ability == null || ability.AbilityDef == null) { return; } if (Icon.sprite == null || Icon.sprite.name != ability.AbilityDef.IconAsset) { Icon.sprite = EpicLoot.LoadAsset <Sprite>(ability.AbilityDef.IconAsset); } Binding.enabled = ability.AbilityDef.ActivationMode == AbilityActivationMode.Activated; var bindingText = EpicLoot.AbilityKeyCodes[_index].Value.ToUpperInvariant(); if (Binding.text != bindingText) { Binding.text = bindingText; } var cooldownSecondsRemaining = ability.TimeUntilCooldownEnds(); var cooldownPercentComplete = ability.PercentCooldownComplete(); var onCooldown = ability.IsOnCooldown(); CooldownText.enabled = onCooldown; CooldownProgress.enabled = onCooldown; if (onCooldown) { var cooldownTime = TimeSpan.FromSeconds(cooldownSecondsRemaining); CooldownText.text = cooldownTime.ToString(@"m\:ss"); CooldownProgress.fillAmount = 1 - cooldownPercentComplete; } Icon.color = onCooldown ? new Color(1, 0, 1, 0) : Color.white; }
private static void Postfix(Player __instance) { var currentFeatherFallAura = __instance.transform.Find(FeatherFallEffectName); if (!__instance.IsOnGround() && __instance.HasActiveMagicEffect(MagicEffectType.FeatherFall) && __instance.m_body) { var velocity = __instance.m_body.velocity; if (velocity.y <= MaxFallSpeed + float.Epsilon * 10) { if (currentFeatherFallAura != null && currentFeatherFallAura.GetComponent <ParticleSystem>().isStopped) { currentFeatherFallAura.GetComponent <ParticleSystem>().Play(); currentFeatherFallAura.GetComponent <AudioSource>().Play(); } else if (currentFeatherFallAura == null) { var effect = Object.Instantiate(EpicLoot.LoadAsset <GameObject>(FeatherFallEffectName), __instance.transform); effect.name = FeatherFallEffectName; effect.GetComponent <AudioSource>().outputAudioMixerGroup = AudioMan.instance.m_ambientMixer; } velocity.x = Mathf.Lerp(velocity.x, 0, 1 / 30f); velocity.z = Mathf.Lerp(velocity.z, 0, 1 / 30f); } velocity.y = Math.Max(MaxFallSpeed, velocity.y); __instance.m_body.velocity = velocity; } if (__instance.IsOnGround() && currentFeatherFallAura != null) { currentFeatherFallAura.GetComponent <ParticleSystem>().Stop(); currentFeatherFallAura.GetComponent <AudioSource>().Stop(); } }
protected override void ActivateCustomAction() { _player.GetSEMan().AddStatusEffect(EpicLoot.LoadAsset <StatusEffect>("UndyingStatusEffect")); }