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
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user