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; } }
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); }
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(); } } }
public static bool Prefix(SEMan __instance, ref string name) { if (__instance.HaveStatusEffect("Waterproof") && name == "Wet") { return(false); } return(true); }
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()); } }
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; } }
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()}"); } }
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; } }
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; } }
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()}"); } }
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); }
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); } }
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); } }
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; } } }
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; } } }
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; } }
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(); } }
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; } } }
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); }
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(); }
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); } } } }
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); }
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); }
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"); }
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(); } }
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); }
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; } }