48 lines
1.2 KiB
Rust
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
|
|
}
|
|
}
|