def _enable(self): super(SimpleStaticAbility, self)._enable() self.effect_tracking = [ combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source) ]
def add_effects(self, card): self.effect_tracking[ card] = True # this is to prevent recursion when the effect is called self.effect_tracking[card] = [ combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source, card) ]
def new_controller(self, original): for remove in self.effect_tracking: remove() self.effect_tracking = [ combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source) ]
def detain(controller, card): do_until( combine( do_override(card, "canAttack", lambda self: False), do_override(card, "canBlock", lambda self: False), do_override(ActivatedAbility, "playable", lambda self: not self.source == card), ), NewTurnEvent(), lambda player: player == controller, )
def _enable(self): super(CardStaticAbility, self)._enable() self.control_changed.setup_trigger(self.source, self.new_controller, priority=CONTINUOUS_PRIORITY) self.effect_tracking = [ combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source) ]
def prevent_all_noncombat_damage(): def condition(self, amt, source, combat=False): return not combat msg = "~ - prevent all noncombat damage" return combine( do_replace(CreatureType, "assignDamage", preventAll, msg=msg, condition=condition), do_replace(Player, "assignDamage", preventAll, msg=msg, condition=condition), do_replace(PlaneswalkerType, "assignDamage", preventAll, msg=msg, condition=condition))
def prevent_all_damage(): msg = "~ - prevent all damage" return combine(do_replace(CreatureType, "assignDamage", preventAll, msg=msg), do_replace(Player, "assignDamage", preventAll, msg=msg), do_replace(PlaneswalkerType, "assignDamage", preventAll, msg=msg))
def new_controller(self, original): for remove in self.effect_tracking: remove() self.effect_tracking = [combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source)]
def add_effects(self, card): self.effect_tracking[card] = True # this is to prevent recursion when the effect is called self.effect_tracking[card] = [combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source, card)]
def effects(target): yield combine(*[do_override(target, func_name, mk_override(cond)) for func_name, cond in [("canBeAttachedBy", lambda o: not o==aura and condition(o)), ("canBeBlockedBy", condition), ("canBeTargetedBy", condition)]]+[prevent_damage(target, -1, txt="Protection effect", condition=prevent_condition)])
def protection_effect(target): yield combine(prevent_damage(target, -1, txt="Protection effect", condition=prevent_condition), do_override(target, "canBeAttachedBy", canBeAttachedBy), do_override(target, "canBeBlockedBy", canBeBlockedBy), do_override(target, "canBeTargetedBy", canBeTargetedBy))
def prevent_all_noncombat_damage_by(dmgsource): def condition(self, amt, source, combat=False): return source == dmgsource and not combat msg = "~ - prevent all noncombat damage by %s"%dmgsource.name return combine(do_replace(CreatureType, "assignDamage", preventAll, msg=msg, condition=condition), do_replace(Player, "assignDamage", preventAll, msg=msg, condition=condition), do_replace(PlaneswalkerType, "assignDamage", preventAll, msg=msg, condition=condition))
def prevent_all_noncombat_damage(): def condition(self, amt, source, combat=False): return not combat msg = "~ - prevent all noncombat damage" return combine(do_replace(CreatureType, "assignDamage", preventAll, msg=msg, condition=condition), do_replace(Player, "assignDamage", preventAll, msg=msg, condition=condition), do_replace(PlaneswalkerType, "assignDamage", preventAll, msg=msg, condition=condition))
def _enable(self): super(CardStaticAbility, self)._enable() self.control_changed.setup_trigger(self.source, self.new_controller, priority=CONTINUOUS_PRIORITY) self.effect_tracking = [combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source)]
def prevent_all_damage(): msg = "~ - prevent all damage" return combine( do_replace(CreatureType, "assignDamage", preventAll, msg=msg), do_replace(Player, "assignDamage", preventAll, msg=msg), do_replace(PlaneswalkerType, "assignDamage", preventAll, msg=msg))
def indestructible(target): def shouldDestroy(self): return False def destroy(self, regenerate=True): return False return combine(do_override(target, "shouldDestroy", shouldDestroy), do_override(target, "destroy", destroy))
def _enable(self): super(SimpleStaticAbility, self)._enable() self.effect_tracking = [combine(*removal_func) if isinstance(removal_func, tuple) else removal_func for removal_func in self.effect_generator(self.source)]