manabrew_engine/ability/effects/
heist_effect.rs1use forge_foundation::ZoneType;
8
9use super::{emit_zone_trigger, EffectContext};
10
11#[manabrew_engine_macros::spell_effect(HeistEffect)]
15fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
16 let controller = sa.activating_player;
17 let num = super::resolve_numeric_svar(ctx.game, sa, "Num", 1).max(0) as usize;
18
19 let target_player = sa
20 .target_chosen
21 .target_player
22 .unwrap_or_else(|| ctx.game.opponent_of(controller));
23
24 for _ in 0..num {
26 let lib = ctx
27 .game
28 .cards_in_zone(ZoneType::Library, target_player)
29 .to_vec();
30 let Some(&top) = lib.last() else { break };
31
32 let old_zone = ctx.game.card(top).zone;
33 ctx.game.card_mut(top).set_face_down(true);
34 ctx.move_card(top, ZoneType::Exile, target_player);
35
36 if let Some(sid) = sa.source {
38 ctx.game.card_mut(top).set_exiled_by(Some(sid));
39 }
40
41 emit_zone_trigger(ctx.trigger_handler, top, old_zone, ZoneType::Exile);
42 }
43}