You must rewrite the way damage is dealt.
I'm on a phone, ignore shitty syntax
Create a class called DamageIstance or something like that,with the following fields
>source
>target
>bool ignored
Use the construction method to execute the attack and check among the target and source status of they want to modify the damage
DamageIstance(character tar, character sou ) {
Target = tar
Source=sou
Ignored =false
Foreach (status sts in sou.status)
Sts.recivedDamageInstance(this)
Foreach (status sts in tar.status)
Sts.recivedDamageInstance(this)
If! Ignored
Apply()
}
Then every time you need a different kind of attack you extend that class, for example
Class normalattack extend DamageIstance {
Int damage
Public normalattack (tar, sou, dmg) : base (tar, sou) {
Damage =dmg
}
Void apply () {
Target. Hp-=damage
}
}