コード例 #1
0
ファイル: Ability.cs プロジェクト: sbtoonz/ValheimMods
        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);
        }
コード例 #2
0
            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);
            }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
ファイル: AbilityBar.cs プロジェクト: sbtoonz/ValheimMods
        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;
        }
コード例 #5
0
        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();
            }
        }
コード例 #6
0
ファイル: Undying.cs プロジェクト: sbtoonz/ValheimMods
 protected override void ActivateCustomAction()
 {
     _player.GetSEMan().AddStatusEffect(EpicLoot.LoadAsset <StatusEffect>("UndyingStatusEffect"));
 }