Gen7ScriptsRs/gen_7_scripts/src/moves/drain.rs

48 lines
1.2 KiB
Rust

use crate::common_usings::*;
script!(Drain, "drain", heal_modifier: AtomicF32);
impl Script for Drain {
fn new() -> Self {
Self {
heal_modifier: Default::default(),
}
}
fn get_name(&self) -> &'static str {
Self::get_const_name()
}
fn get_capabilities(&self) -> &[ScriptCapabilities] {
&[
ScriptCapabilities::Initialize,
ScriptCapabilities::OnSecondaryEffect,
]
}
fn on_initialize(
&self,
_library: DynamicLibrary,
parameters: Option<ImmutableList<Rc<EffectParameter>>>,
) {
self.heal_modifier.store(
parameters.unwrap().get(0).unwrap().as_float(),
Ordering::SeqCst,
);
}
fn on_secondary_effect(&self, mv: ExecutingMove, target: Pokemon, hit: u8) {
let hit_data = mv.get_hit_data(&target, hit);
let damage = hit_data.damage();
let mut modifier = self.heal_modifier.load(Ordering::SeqCst);
if mv.user().has_held_item("big_root") {
modifier *= 1.3;
}
mv.user().heal((damage as f32 * modifier) as u32, false);
}
fn as_any(&self) -> &dyn Any {
self
}
}