static void Postfix(float dt, Player __instance, ItemDrop.ItemData ___m_chestItem, ItemDrop.ItemData ___m_legItem, ItemDrop.ItemData ___m_helmetItem, ItemDrop.ItemData ___m_shoulderItem, SEMan ___m_seman) { if (!modEnabled.Value) { return; } if (___m_seman.HaveStatusEffect("Wet")) { HitData.DamageModifier water = GetNewDamageTypeMod(NewDamageTypes.Water, ___m_chestItem, ___m_legItem, ___m_helmetItem, ___m_shoulderItem); var wet = ___m_seman.GetStatusEffect("Wet"); var t = Traverse.Create(wet); if (water == HitData.DamageModifier.Ignore || water == HitData.DamageModifier.Immune) { ___m_seman.RemoveStatusEffect("Wet", true); } else if (water == HitData.DamageModifier.VeryResistant && !__instance.InLiquidSwimDepth()) { ___m_seman.RemoveStatusEffect("Wet", true); } else if (water == HitData.DamageModifier.Resistant) { t.Field("m_time").SetValue(t.Field("m_time").GetValue <float>() + dt); ___m_seman.RemoveStatusEffect("Wet", true); ___m_seman.AddStatusEffect(wet); } else if (water == HitData.DamageModifier.Weak) { t.Field("m_time").SetValue(t.Field("m_time").GetValue <float>() - dt / 3); ___m_seman.RemoveStatusEffect("Wet", true); ___m_seman.AddStatusEffect(wet); } else if (water == HitData.DamageModifier.VeryWeak) { t.Field("m_time").SetValue(t.Field("m_time").GetValue <float>() - dt * 2 / 3); ___m_seman.RemoveStatusEffect("Wet", true); ___m_seman.AddStatusEffect(wet); } } }
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(); } }