/// <summary> /// Applies the modifications from a status effect to a character. /// </summary> /// <param name="status">The status effect to apply the modifications from.</param> /// <param name="character">The character to apply the modifications to.</param> private void ApplyStatusEffects(StatusEffect status, Character character) { int preSpeedChange = character.CurrentStats.Speed; character.Armor += status.Armor; character.ArmorPercentage += status.ArmorPercentage; character.CurrentMaxHealth += status.ModifyMaxHealth; character.CurrentMaxMana += status.ModifyMaxMana; character.CurrentStats += status.ModifyStats; character.DamageModifier += status.DamageModifier; character.DamagePercentageModifier += status.DamagePercentageModifier; character.CritChance += status.CritChance; character.CritMultiplier += status.CritMultiplier; character.ResistAll += status.ResistAll; character.ResistAllPercentage += status.ResistAllPercentage; character.SpellDamageModifier += status.SpellDamageModifier; character.SpellDamagePercentageModifier += status.SpellDamagePercentageModifier; if (status.ModifyStats.Speed != 0) { CharacterSpeedChanged?.Invoke(this, new CharacterSpeedChangedEventArgs() { CharacterId = character.Id, PreSpeedChange = preSpeedChange, SpeedChange = status.ModifyStats.Speed }); } }
/// <summary> /// Removes modifications from a status effect from a character. Takes into account how many stacks /// have been previously applied to a character. /// </summary> /// <param name="status">The status effect to remove modifications.</param> /// <param name="character">The character to remove modifications from.</param> private void RemoveStatusEffects(AppliedStatus status, Character character, bool removePermanent = false) { if (status.BaseStatus.IsPermanent && !removePermanent) { return; } int preSpeedChange = character.CurrentStats.Speed; var baseStatus = status.BaseStatus; character.Armor -= baseStatus.Armor * status.StackCount; character.ArmorPercentage -= baseStatus.ArmorPercentage * status.StackCount; character.CurrentMaxHealth -= baseStatus.ModifyMaxHealth * status.StackCount; character.CurrentMaxMana -= baseStatus.ModifyMaxMana * status.StackCount; character.CurrentStats -= baseStatus.ModifyStats * status.StackCount; character.DamageModifier -= baseStatus.DamageModifier * status.StackCount; character.DamagePercentageModifier -= baseStatus.DamagePercentageModifier * status.StackCount; character.CritChance -= baseStatus.CritChance * status.StackCount; character.CritMultiplier -= baseStatus.CritMultiplier * status.StackCount; character.ResistAll -= baseStatus.ResistAll * status.StackCount; character.ResistAllPercentage -= baseStatus.ResistAllPercentage * status.StackCount; character.SpellDamageModifier -= baseStatus.SpellDamageModifier * status.StackCount; character.SpellDamagePercentageModifier -= baseStatus.SpellDamagePercentageModifier * status.StackCount; if (baseStatus.ModifyStats.Speed != 0) { CharacterSpeedChanged?.Invoke(this, new CharacterSpeedChangedEventArgs() { CharacterId = character.Id, PreSpeedChange = preSpeedChange, SpeedChange = baseStatus.ModifyStats.Speed }); } }
private void OnCharacterSpeedChanged(object sender, CharacterSpeedChangedEventArgs args) { CharacterSpeedChanged?.Invoke(sender, args); }
private void OnCharacterSpeedChanged(object sender, CharacterSpeedChangedEventArgs args) { CombatStateHandler.OnCharacterSpeedChanged(sender, args); CharacterSpeedChanged?.Invoke(sender, args); }