More documentation for script hooks, reworks stat changes to only be changeable through a function that allows for script hooks, and events.
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-06-27 18:26:27 +02:00
parent 1c9edd4d9c
commit cf4d74d898
5 changed files with 119 additions and 9 deletions

View File

@@ -12,7 +12,6 @@ use crate::dynamic_data::models::damage_source::DamageSource;
use crate::dynamic_data::models::learned_move::{LearnedMove, MoveLearnMethod};
use crate::dynamic_data::script_handling::{ScriptSource, ScriptSourceData, ScriptWrapper};
use crate::dynamic_data::{DynamicLibrary, Script, ScriptCategory, ScriptContainer, ScriptSet, VolatileScripts};
use crate::static_data::Ability;
use crate::static_data::AbilityIndex;
use crate::static_data::DataLibrary;
use crate::static_data::Form;
@@ -20,6 +19,7 @@ use crate::static_data::Gender;
use crate::static_data::Item;
use crate::static_data::Nature;
use crate::static_data::Species;
use crate::static_data::{Ability, Statistic};
use crate::static_data::{ClampedStatisticSet, StatisticSet};
use crate::utils::Random;
use crate::{script_hook, PkmnResult, StringKey};
@@ -277,9 +277,57 @@ impl<'own, 'library> Pokemon<'own, 'library> {
pub fn boosted_stats(&self) -> &StatisticSet<AtomicU32> {
&self.boosted_stats
}
pub fn stat_boost(&self) -> &ClampedStatisticSet<AtomicI8, -6, 6> {
&self.stat_boost
pub fn stat_boost(&self, stat: Statistic) -> i8 {
self.stat_boost.get_stat(stat)
}
pub fn change_stat_boost(&self, stat: Statistic, mut diff_amount: i8, self_inflicted: bool) -> bool {
let mut prevent = false;
script_hook!(
prevent_stat_boost_change,
self,
self,
stat,
diff_amount,
self_inflicted,
&mut prevent
);
if prevent {
return false;
}
script_hook!(
change_stat_boost_change,
self,
self,
stat,
self_inflicted,
&mut diff_amount
);
if diff_amount == 0 {
return false;
}
let mut changed = false;
let old_value = self.stat_boost.get_stat(stat);
if diff_amount > 0 {
changed = self.stat_boost.increase_stat(stat, diff_amount);
} else if diff_amount < 0 {
changed = self.stat_boost.decrease_stat(stat, -diff_amount);
}
if changed {
if let Some(battle) = self.get_battle() {
let new_value = self.stat_boost(stat);
battle.event_hook().trigger(Event::StatBoostChange {
user: self,
stat,
old_value,
new_value,
})
}
self.recalculate_boosted_stats();
}
return changed;
}
pub fn individual_values(&self) -> &ClampedStatisticSet<AtomicU8, 0, 31> {
&self.individual_values
}