示例#1
0
 public static void Prefix(Character __instance, SEMan ___m_seman, ref float ___m_maxAirAltitude)
 {
     if (___m_seman.HaveStatusEffect("SE_Feather"))
     {
         ___m_maxAirAltitude = __instance.transform.position.y;
     }
 }
示例#2
0
    public bool IsValid(SpawnSessionContext context)
    {
        if (RequiredStatusEffects.Count == 0)
        {
            return(true);
        }

        if (SearchDistance <= 0)
        {
            return(true);
        }

        List <Player> players = PlayerUtils.GetPlayersInRadius(context.SpawnerZdo.GetPosition(), SearchDistance);

        foreach (var player in players)
        {
            SEMan statusEffectManager = player.GetSEMan();

            if (RequiredStatusEffects.Any(x => statusEffectManager.HaveStatusEffect(x)))
            {
                return(true);
            }
        }

        return(false);
    }
示例#3
0
 static void Postfix(Character __instance, ref SEMan ___m_seman)
 {
     /*if (___m_seman.HaveStatusEffect("Wolftears"))
      * {
      *  SE_Wolftears effect = ___m_seman.GetStatusEffect("Wolftears") as SE_Wolftears;
      *  if (__instance.GetHealthPercentage() > effect.GetActivationHP() && effect.m_icon != null)
      *  {
      *      effect.ClearIcon();
      *  }
      *  else if (__instance.GetHealthPercentage() <= effect.GetActivationHP() && effect.m_icon == null)
      *  {
      *      effect.SetIcon();
      *  }
      * }*/
     if (___m_seman.HaveStatusEffect("Battle Furor"))
     {
         SE_FullHPDamageBonus effect = ___m_seman.GetStatusEffect("Battle Furor") as SE_FullHPDamageBonus;
         if (__instance.GetHealthPercentage() < effect.GetActivationHP() && effect.m_icon != null)
         {
             effect.ClearIcon();
         }
         else if (__instance.GetHealthPercentage() >= effect.GetActivationHP() && effect.m_icon == null)
         {
             effect.SetIcon();
         }
     }
 }
示例#4
0
 public static bool Prefix(SEMan __instance, ref string name)
 {
     if (__instance.HaveStatusEffect("Waterproof") && name == "Wet")
     {
         return(false);
     }
     return(true);
 }
示例#5
0
 public static void DamagePrefix(SEMan __instance, HitData hit)
 {
     if (__instance.m_character.IsPlayer() && hit.m_statusEffect == "ChainExplosionListener")
     {
         hit.m_damage.m_damage = 0f;
         //Log.LogInfo("NewDamage From Explosion " + hit.GetTotalDamage());
     }
 }
示例#6
0
 public static void Postfix(SEMan __instance, float baseDrain, ref float drain)
 {
     if (__instance.m_character.IsPlayer())
     {
         var player = (Player)__instance.m_character;
         drain *= 1 - player.GetTotalActiveMagicEffectValue(MagicEffectType.ModifySprintStaminaUse, 0.01f);
     }
 }
 public static void Postfix(SEMan __instance, ref float staminaUse)
 {
     if (__instance.m_character.IsPlayer())
     {
         var player         = (Player)__instance.m_character;
         var jumpStaminaUse = player.GetTotalActiveMagicEffectValue(MagicEffectType.ModifyJumpStaminaUse, 0.01f);
         staminaUse *= 1 - jumpStaminaUse;
     }
 }
示例#8
0
        static void OnDamagedPrefix(Character __instance, ref HitData hit)
        {
            if (hit.HaveAttacker() && hit.GetAttacker().IsPlayer() && hit.GetAttacker().GetSEMan().HaveStatusEffect("Wyrdarrow"))
            {
                (hit.GetAttacker().GetSEMan().GetStatusEffect("Wyrdarrow") as SE_AoECounter).IncreaseCounter();
            }
            if (hit.HaveAttacker() && hit.GetAttacker().IsPlayer() && hit.GetAttacker().GetSEMan().HaveStatusEffect("Brassflesh Listener"))
            {
                if (hit.GetAttacker().GetSEMan().HaveStatusEffect("Brassflesh"))
                {
                    (hit.GetAttacker().GetSEMan().GetStatusEffect("Brassflesh") as SE_ArmorOnHit).OnHit();
                }
                else
                {
                    SEMan seman    = hit.GetAttacker().GetSEMan();
                    float maxArmor = (seman.GetStatusEffect("Brassflesh Listener") as SE_ArmorOnHitListener).GetMaxArmor();
                    seman.AddStatusEffect("Brassflesh");
                    (seman.GetStatusEffect("Brassflesh") as SE_ArmorOnHit).SetMaxArmor(maxArmor);
                }
            }

            if (__instance.IsPlayer() && __instance.GetSEMan().HaveStatusEffect("Challenge Move Speed"))
            {
                //Log.LogInfo($"starting damage: {hit.GetTotalDamage()}");
                float damageMod = 2f;
                hit.m_damage.m_blunt     *= damageMod;
                hit.m_damage.m_chop      *= damageMod;
                hit.m_damage.m_damage    *= damageMod;
                hit.m_damage.m_fire      *= damageMod;
                hit.m_damage.m_frost     *= damageMod;
                hit.m_damage.m_lightning *= damageMod;
                hit.m_damage.m_pickaxe   *= damageMod;
                hit.m_damage.m_pierce    *= damageMod;
                hit.m_damage.m_poison    *= damageMod;
                hit.m_damage.m_slash     *= damageMod;
                hit.m_damage.m_spirit    *= damageMod;
                //Log.LogInfo($"ending damage: {hit.GetTotalDamage()}");
            }

            if (__instance.IsPlayer() && __instance.GetSEMan().HaveStatusEffect("Brassflesh"))
            {
                //Log.LogInfo($"starting damage: {hit.GetTotalDamage()}");
                float damageMod = (__instance.GetSEMan().GetStatusEffect("Brassflesh") as SE_ArmorOnHit).GetCurrentDamageReduction();
                hit.m_damage.m_blunt     *= 1 - damageMod;
                hit.m_damage.m_chop      *= 1 - damageMod;
                hit.m_damage.m_damage    *= 1 - damageMod;
                hit.m_damage.m_fire      *= 1 - damageMod;
                hit.m_damage.m_frost     *= 1 - damageMod;
                hit.m_damage.m_lightning *= 1 - damageMod;
                hit.m_damage.m_pickaxe   *= 1 - damageMod;
                hit.m_damage.m_pierce    *= 1 - damageMod;
                hit.m_damage.m_poison    *= 1 - damageMod;
                hit.m_damage.m_slash     *= 1 - damageMod;
                hit.m_damage.m_spirit    *= 1 - damageMod;
                //Log.LogInfo($"ending damage: {hit.GetTotalDamage()}");
            }
        }
示例#9
0
 public static void Postfix(Rigidbody ___m_body, SEMan ___m_seman, float dt)
 {
     if (___m_seman.HaveStatusEffect("SE_Feather"))
     {
         var vel = ___m_body.velocity;
         ((SE_Feather)___m_seman.GetStatusEffect("SE_Feather")).ModifyFall(ref vel, dt);
         ___m_body.velocity = vel;
     }
 }
示例#10
0
 public static void Postfix(SEMan __instance, ref float limit)
 {
     if (__instance.m_character.IsPlayer())
     {
         var player           = __instance.m_character as Player;
         var carryWeightBonus = player.GetTotalActiveMagicEffectValue(MagicEffectType.AddCarryWeight);
         limit += carryWeightBonus;
     }
 }
示例#11
0
 public static void Postfix(SEMan __instance, ref float regenMultiplier)
 {
     //Log.LogInfo("Total Val Increasing HP");
     if (__instance.HaveStatusEffect("HP Regen"))
     {
         //Log.LogInfo($"Total Val Has Effect HP${hp}");
         SE_HPRegen effect = __instance.GetStatusEffect("HP Regen") as SE_HPRegen;
         //Player player = __instance.m_character as Player;
         regenMultiplier += effect.getHealPercent();
         //Log.LogInfo($"Total Val Modded HP${hp} from effect ${effect.getHealthBonus()}");
     }
 }
示例#12
0
 static bool Prefix(ref StatusEffect __result, string name, SEMan __instance)
 {
     if (string.Equals(name, "Cold") && Config.PushingWarms.Value)
     {
         if (__instance.HaveStatusEffect("Warmed"))
         {
             __result = null;
             return(false);
         }
     }
     return(true);
 }
示例#13
0
    private static void UpdateStats_Prefix(Player __instance, float dt, SEMan ___m_seman, bool ___m_wallRunning, float ___m_staminaRegen, float ___m_stamina, float ___m_staminaRegenTimer)
    {
        UpdateEncumberedStaminaDrain(__instance);

        __instance.m_staminaRegenTimeMultiplier = __instance.GetCurrentWeapon() != null ? BetterStaminaPlugin.staminaRegenRateMultiplierWithWeapons.Value : BetterStaminaPlugin.staminaRegenRateMultiplier.Value;
        __instance.m_staminaRegenDelay          = BetterStaminaPlugin.staminaRegenDelay.Value;

        if (BetterStaminaPlugin.enableStaminaRegenLogging != null && BetterStaminaPlugin.enableStaminaRegenLogging.Value)
        {
            float newStamina = CalculateNewStamina(__instance, ___m_wallRunning, ___m_staminaRegen, ___m_stamina, ___m_seman, ref ___m_staminaRegenTimer, dt);
        }
    }
示例#14
0
        public static void DamagePostfix(Character __instance, HitData hit)
        {
            SEMan seman = __instance.GetSEMan();

            if (seman.HaveStatusEffect("Wolftears") && seman.m_character.GetHealth() <= hit.m_damage.GetTotalDamage() && !seman.HaveStatusEffect("Tear Protection Exhausted"))
            {
                Log.LogInfo($"Would Kill defender! Damage: {hit.m_damage.GetTotalDamage()}, attacker health: {__instance.GetHealth()}");

                hit.m_damage.Modify(0);
                seman.AddStatusEffect("Tear Protection Exhausted");
                __instance.SetHealth(1f);
            }
        }
示例#15
0
 public static void Postfix(SEMan __instance, float baseDrain, ref float drain)
 {
     if (__instance.m_character.IsPlayer())
     {
         var player = __instance.m_character as Player;
         var items  = player.GetMagicEquipmentWithEffect(MagicEffectType.ModifySprintStaminaUse);
         foreach (var item in items)
         {
             var sprintStaminaUse = item.GetMagicItem().GetTotalEffectValue(MagicEffectType.ModifySprintStaminaUse, 0.01f);
             drain *= 1 - sprintStaminaUse;
         }
     }
 }
 public static void Postfix(SEMan __instance, ref float staminaUse)
 {
     if (__instance.m_character.IsPlayer())
     {
         var player = __instance.m_character as Player;
         var items  = player.GetMagicEquipmentWithEffect(MagicEffectType.ModifyJumpStaminaUse);
         foreach (var item in items)
         {
             var jumpStaminaUse = item.GetMagicItem().GetTotalEffectValue(MagicEffectType.ModifyJumpStaminaUse, 0.01f);
             staminaUse *= 1 - jumpStaminaUse;
         }
     }
 }
示例#17
0
 public static void Postfix(SEMan __instance, ref float limit)
 {
     if (__instance.m_character.IsPlayer())
     {
         var player = __instance.m_character as Player;
         var items  = player.GetMagicEquipmentWithEffect(MagicEffectType.AddCarryWeight);
         foreach (var item in items)
         {
             var carryWeightBonus = item.GetMagicItem().GetTotalEffectValue(MagicEffectType.AddCarryWeight);
             limit += carryWeightBonus;
         }
     }
 }
示例#18
0
 public static void Postfix(SEMan __instance, ref float staminaMultiplier)
 {
     if (__instance.m_character.IsPlayer())
     {
         var player     = __instance.m_character as Player;
         var regenValue = 0f;
         ModifyWithLowHealth.Apply(player, MagicEffectType.ModifyStaminaRegen, effect =>
         {
             regenValue += player.GetTotalActiveMagicEffectValue(effect, 0.01f);
         });
         staminaMultiplier += regenValue;
     }
 }
示例#19
0
 public static void Postfix(SEMan __instance, ref float staminaMultiplier)
 {
     if (__instance.HaveStatusEffect("Stamina Regen"))
     {
         SE_StaminaRegen effect = __instance.GetStatusEffect("Stamina Regen") as SE_StaminaRegen;
         staminaMultiplier += effect.GetRegenPercent();
     }
     if (__instance.HaveStatusEffect("Sprinter"))
     {
         SE_ChallengeSprinter effect = __instance.GetStatusEffect("Sprinter") as SE_ChallengeSprinter;
         staminaMultiplier += effect.GetRegen();
     }
 }
示例#20
0
 public static void Postfix(SEMan __instance, ref float staminaMultiplier)
 {
     if (__instance.m_character.IsPlayer())
     {
         var player = __instance.m_character as Player;
         var items  = player.GetMagicEquipmentWithEffect(MagicEffectType.ModifyStaminaRegen);
         foreach (var item in items)
         {
             var regenValue = item.GetMagicItem().GetTotalEffectValue(MagicEffectType.ModifyStaminaRegen, 0.01f);
             staminaMultiplier += regenValue;
         }
     }
 }
示例#21
0
            public static bool Prefix(SEMan __instance, string name)
            {
                if (AddingStatusFromEnv > 0 && __instance.m_character.IsPlayer() && name == "Wet")
                {
                    var player = (Player)__instance.m_character;
                    var hasWaterproofEquipment = player.HasMagicEquipmentWithEffect(MagicEffectType.Waterproof);
                    if (hasWaterproofEquipment)
                    {
                        return(false);
                    }
                }

                return(true);
            }
示例#22
0
        static void Postfix(SEMan __instance, StatusEffect statusEffect, bool resetTime, ref StatusEffect __result)
        {
            var rune = SEMan_Prototype.GetTempRune(statusEffect);

            if (rune == null)
            {
                return;
            }

            __result.SetRune(rune);
            __instance.m_character?.ExtendedCharacter(true)?.AddRune(rune);

            SEMan_Prototype.UnsetTemp();
        }
示例#23
0
 public static void SetLocalPlayerPostFix(Player __instance, SEMan ___m_seman)
 {
     if (__instance != null)
     {
         if (___m_seman != null)
         {
             List <StatusEffect> statusEffects = (List <StatusEffect>)statusEffectsField.GetValue(___m_seman);
             foreach (StatusEffect se in statusEffects)
             {
                 UpdateStatusEffect(se, true);
             }
         }
     }
 }
示例#24
0
        static bool Prefix(SEMan __instance, string name, bool resetTime)
        {
            var parts = name.Split('|');

            if (parts[0] != "RUNICPOWER")
            {
                return(true);
            }

            var effectName   = parts[1];
            var effectCaster = Player.GetAllPlayers().Find(p => p.GetZDOID().ToString() == parts[2]);
            var effectBuffs  = parts[3];

            __instance.AddRunicEffect(effectName, effectCaster, effectBuffs, true);

            return(false);
        }
示例#25
0
        public static bool HasTooltipEffect(SEMan seman)
        {
            foreach (var effect in seman.GetStatusEffects())
            {
                switch (effect.m_name)
                {
                case "One Hand Damage Bonus":
                    return(true);

                case "Block Power Bonus":
                    return(true);

                case "Dagger/Spear Damage Bonus":
                    return(true);

                case "Melee Damage Bonus":
                    return(true);

                case "Ranged Damage Bonus":
                    return(true);

                case "Silver Damage Bonus":
                    return(true);

                case "Spirit Damage Bonus":
                    return(true);

                case "Two Handed Damage Bonus":
                    return(true);

                case "Backstab Bonus":
                    return(true);

                case "Throwing Damage Bonus":
                    return(true);

                case "Ranger Weapon Bonus":
                    return(true);

                default:
                    break;
                }
            }
            return(false);
        }
示例#26
0
 static void Prefix(ref float ___m_blockStaminaDrain, ref SEMan ___m_seman)
 {
     //Log.LogWarning("Blocking!");
     //Log.LogWarning("Stamina Use: " + ___m_blockStaminaDrain);
     if (___m_seman.HaveStatusEffect("Block Stamina Use") && (___m_seman.m_character as Humanoid).GetCurrentWeapon() != (___m_seman.m_character as Humanoid).m_unarmedWeapon.m_itemData)
     {
         SE_BlockStamUse effect = ___m_seman.GetStatusEffect("Block Stamina Use") as SE_BlockStamUse;
         //Log.LogMessage("Has Effect");
         ___m_blockStaminaDrain = baseStaminaUse * (1 - effect.getBlockStaminaUse());
         //Log.LogWarning("Stamina Use: " + ___m_blockStaminaDrain);
     }
     else if (___m_blockStaminaDrain != baseStaminaUse)
     {
         //Log.LogMessage("1");
         ___m_blockStaminaDrain = baseStaminaUse;
         //Log.LogMessage("2");
     }
     //Log.LogMessage("3");
 }
示例#27
0
            static bool Prefix(SEMan __instance, StatusEffect statusEffect, Character ___m_character, ref StatusEffect __result)
            {
                if (!modEnabled.Value || !___m_character.IsPlayer())
                {
                    return(true);
                }

                if (statusEffect.m_name == "$se_wet_name")
                {
                    var mod = GetNewDamageTypeMod(NewDamageTypes.Water, ___m_character);
                    if (mod == HitData.DamageModifier.Ignore || mod == HitData.DamageModifier.Immune)
                    {
                        __result = null;
                        return(false);
                    }
                }

                return(true);
            }
        public static void AddRunicEffect(this SEMan __instance, string name, Player caster, string dsbuffs, bool resetTime)
        {
            // getting the rune data of this runic effect
            var data = RunicPower.GetRuneData(name);

            // if there is none, stop here
            if (data == null)
            {
                return;
            }
            // checking if the target already has this effect
            var currentEffect = __instance.m_statusEffects.Find(se => se.GetRune()?.data.core == data.core);

            // if it does
            if (currentEffect != null)
            {
                var currentRune = currentEffect.GetRune();
                // and its rank is greater than the one we're trying to apply
                if (currentRune.data.rank > data.rank)
                {
                    // stop here. we won't replace the buff with a worse version of it!
                    return;
                }
                else
                {
                    // if the current rune is of equal or lower rank, let's remove it so it can be reapplied
                    __instance.RemoveStatusEffect(currentEffect, true);
                }
            }
            // preparing a new effect
            var rune   = RunicPower.CreateRunicEffect(name, caster, dsbuffs);
            var effect = rune?.statusEffect;

            // and adding it to the player
            if (effect != null)
            {
                SetTempRune(effect, rune);
                __instance.AddStatusEffect(effect);
                UnsetTemp();
            }
        }
示例#29
0
        static void Prefix(SEMan __instance, ref HitData hit, Character attacker)
        {
            if (hit == null)
            {
                return;
            }
            if (attacker == null)
            {
                return;
            }

            var prSteal = attacker.ExtendedCharacter(false)?.runicLifeSteal ?? 0;

            if (prSteal <= 0)
            {
                return;
            }

            var totalf = hit.GetTotalDamage();
            var back   = totalf * prSteal / 100f;

            attacker.Heal(back);
        }
示例#30
0
 static void Prefix(ref float ___m_dodgeStaminaUsage, ref SEMan ___m_seman)
 {
     //Log.LogWarning("Dodging!");
     //Log.LogWarning("Stamina Use: " + ___m_dodgeStaminaUsage);
     if (___m_seman.HaveStatusEffect("Dodge Stamina Use"))
     {
         SE_DodgeStamUse effect = ___m_seman.GetStatusEffect("Dodge Stamina Use") as SE_DodgeStamUse;
         //Log.LogMessage("Has Effect");
         ___m_dodgeStaminaUsage = baseStaminaUse * (1 - effect.getDodgeStaminaUse());
         //Log.LogWarning("Stamina Use: " + ___m_dodgeStaminaUsage);
     }
     else if (___m_seman.HaveStatusEffect("Challenge Dodge Bonus"))
     {
         SE_ChallengeDodgeBonus effect = ___m_seman.GetStatusEffect("Challenge Dodge Bonus") as SE_ChallengeDodgeBonus;
         //Log.LogMessage("Has Effect");
         ___m_dodgeStaminaUsage = baseStaminaUse * (1 - effect.GetDodgeBonus());
         //Log.LogWarning("Stamina Use: " + ___m_dodgeStaminaUsage);
     }
     else if (___m_dodgeStaminaUsage != baseStaminaUse)
     {
         ___m_dodgeStaminaUsage = baseStaminaUse;
     }
 }