Hey, so, I've reworked the protection a little. However, I noticed that they don't have protection while on the stack. This means that
Annul can counter a planeswalker. I've tried various things, but none of them prevent
Annul from countering the planeswalker I'm testing with (
Chandra Nalaar). This affects all zones except the battlefield. Things that target enchantments in your graveyard, library, or hand will catch planeswalkers, too.
I might have found a better way to handle the protection. It uses a function like the original, but it doesn't use a loop like it did. The entire function is handled in a single function with no other function calls, and this prevents the lag but retains the ability to NOT have to change every single planeswalker when a new card that targets enchantments is introduced. I've tested it with 4 planeswalkers in a deck. There is a bit of lag any time more than about 6 planeswalkers on the battlefield at the same time. It doesn't happen with one or two on the battlefield, though, only with a bunch, so in normal play, it shouldn't have any lag at all. I had out 4 and my opponent had out 2 for a total of 6, and experienced very little lag. It was noticeable, but it was very slight. If you want, I'll post the code and the cards I already changed to test and you can try it out yourself and let me know if you think it's quick enough. I'd like a second opinion before changing any more. Basically, the goal is to not have every planeswalker card have to be changed just because there's a new card that targets and enchantments.
Just for the record, the function in the LOL file is this:
- | Open
- Code: Select all
PLW_Filter = function()
-- The planeswalker protection filter
if EffectSource() ~= nil then
local filter = ClearFilter()
filter:Add(FE_CARD_NAME, OP_IS, "ENCHANTED_EVENING") -- With Enchanted Evening on the battlefield, Planeswalkers would be enchantments for real
if filter:CountStopAt(1) == 0 or EffectSource():GetZone() ~= ZONE_BATTLEFIELD then
filter = ClearFilter()
filter:SetZone( ZONE_ANYWHERE )
local subfilter = filter:AddSubFilter_Or()
subfilter:Add( FE_CARD_NAME, OP_IS, "ABOLISH" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ABSOLVER_THRULL" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ACIDIC_SLIME" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ALLAY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ALTARS_LIGHT" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ANNUL" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ARENSONS_AURA" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ARGIVIAN_FIND" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ARTISANS_SORROW" )
subfilter:Add( FE_CARD_NAME, OP_IS, "AURA_BLAST" )
subfilter:Add( FE_CARD_NAME, OP_IS, "AURA_EXTRACTION" )
subfilter:Add( FE_CARD_NAME, OP_IS, "AURA_FRACTURE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "AURA_MUTATION" )
subfilter:Add( FE_CARD_NAME, OP_IS, "AURA_OF_SILENCE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "AURA_SHARDS" )
subfilter:Add( FE_CARD_NAME, OP_IS, "AURAMANCER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "AVEN_CLOUDCHASER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "BALDUVIAN_SHAMAN" )
subfilter:Add( FE_CARD_NAME, OP_IS, "BLIGHTCASTER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "BLOOD_OATH" )
subfilter:Add( FE_CARD_NAME, OP_IS, "BREAK_ASUNDER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "CAPASHEN_UNICORN" )
subfilter:Add( FE_CARD_NAME, OP_IS, "CLEAR" )
subfilter:Add( FE_CARD_NAME, OP_IS, "CLOUDCHASER_EAGLE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "CONSIGN_TO_DUST" )
subfilter:Add( FE_CARD_NAME, OP_IS, "CREEPING_MOLD" )
subfilter:Add( FE_CARD_NAME, OP_IS, "CURSEBREAK" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DARU_SANCTIFIER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DAWN_TO_DUSK" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DAWNING_PURIST" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DEGLAMER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DEICIDE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DEMYSTIFY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DESECRATION_PLAGUE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DESTRUCTIVE_REVELRY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DEVOUT_CHAPLAIN" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DEVOUT_WITNESS" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DISEMPOWER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DISENCHANT" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DISMANTLING_BLOW" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DISPELLERS_CAPSULE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DOWSING_SHAMAN" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DRUID_LYRIST" )
subfilter:Add( FE_CARD_NAME, OP_IS, "DUERGAR_HEDGEMAGE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ECHOING_CALM" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ELF_REPLICA" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ELVISH_HEXHUNTER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ELVISH_LYRIST" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ERASE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ESPER_CHARM" )
subfilter:Add( FE_CARD_NAME, OP_IS, "FADE_INTO_ANTIQUITY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "FILIGREE_FRACTURE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "FRANTIC_PURIFICATION" )
subfilter:Add( FE_CARD_NAME, OP_IS, "GLEEFUL_SABOTAGE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "GOLGARI_CHARM" )
subfilter:Add( FE_CARD_NAME, OP_IS, "GRIFFIN_DREAMFINDER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "HANNA_SHIPS_NAVIGATOR" )
subfilter:Add( FE_CARD_NAME, OP_IS, "HARMONIC_SLIVER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "HIDE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "HOODWINK" )
subfilter:Add( FE_CARD_NAME, OP_IS, "HULL_BREACH" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ILLUMINATION" )
subfilter:Add( FE_CARD_NAME, OP_IS, "INDRIK_STOMPHOWLER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "KAMI_OF_ANCIENT_LAW" )
subfilter:Add( FE_CARD_NAME, OP_IS, "KEENING_APPARITION" )
subfilter:Add( FE_CARD_NAME, OP_IS, "KIORAS_DISMISSAL" )
subfilter:Add( FE_CARD_NAME, OP_IS, "KITHKIN_SPELLDUSTER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "KOR_SANCTIFIERS" )
subfilter:Add( FE_CARD_NAME, OP_IS, "KROSAN_GRIP" )
subfilter:Add( FE_CARD_NAME, OP_IS, "LEAVE_NO_TRACE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "LEONIN_RELICWARDER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "MINE_EXCAVATION" )
subfilter:Add( FE_CARD_NAME, OP_IS, "MOLDER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "MONK_IDEALIST" )
subfilter:Add( FE_CARD_NAME, OP_IS, "MONK_REALIST" )
subfilter:Add( FE_CARD_NAME, OP_IS, "MORTAL_OBSTINACY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "MYSTIC_MELTING" )
subfilter:Add( FE_CARD_NAME, OP_IS, "NANTUKO_CALMER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "NANTUKO_VIGILANTE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "NATURAL_END" )
subfilter:Add( FE_CARD_NAME, OP_IS, "NATURALIZE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "NATURES_CLAIM" )
subfilter:Add( FE_CARD_NAME, OP_IS, "NIKKOONNA" )
subfilter:Add( FE_CARD_NAME, OP_IS, "NULLMAGE_SHEPHERD" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ORIMS_THUNDER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "PEACE_AND_QUIET" )
subfilter:Add( FE_CARD_NAME, OP_IS, "POLIS_CRUSHER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "PRIEST_OF_IROAS" )
subfilter:Add( FE_CARD_NAME, OP_IS, "QASALI_PRIDEMAGE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "QUAGMIRE_DRUID" )
subfilter:Add( FE_CARD_NAME, OP_IS, "QUIET_PURITY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RAIN_OF_THORNS" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RAY_OF_DISSOLUTION" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RAY_OF_DISTORTION" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RAY_OF_REVELATION" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RECLAMATION_SAGE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RELIC_CRUSH" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RELIQUARY_MONK" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RENDING_VINES" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RETURN_TO_DUST" )
subfilter:Add( FE_CARD_NAME, OP_IS, "REVIVING_MELODY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "REVOKE_EXISTENCE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RONOM_UNICORN" )
subfilter:Add( FE_CARD_NAME, OP_IS, "RUST_SCARAB" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SCOUR" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SEAL_OF_CLEANSING" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SEAL_OF_PRIMORDIUM" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SEED_SPARK" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SERENE_OFFERING" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SERRAS_LITURGY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SHINEWEND" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SILENT_SENTINEL" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SILVERCHASE_FOX" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SKULL_OF_ORM" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SLICE_IN_TWAIN" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SOLEMN_OFFERING" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SOLTARI_VISIONARY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SPRING_CLEANING" )
subfilter:Add( FE_CARD_NAME, OP_IS, "STERN_PROCTOR" )
subfilter:Add( FE_CARD_NAME, OP_IS, "STOMP_AND_HOWL" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SUNDERING_GROWTH" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SUNDERING_VITAE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SWAN_SONG" )
subfilter:Add( FE_CARD_NAME, OP_IS, "SYLVOK_REPLICA" )
subfilter:Add( FE_CARD_NAME, OP_IS, "TATTOO_WARD" )
subfilter:Add( FE_CARD_NAME, OP_IS, "TEAR" )
subfilter:Add( FE_CARD_NAME, OP_IS, "TEFERIS_CARE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "TERASHIS_GRASP" )
subfilter:Add( FE_CARD_NAME, OP_IS, "THUNDERSCAPE_BATTLEMAGE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "TOLARIAN_EMISSARY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "TRAGIC_POET" )
subfilter:Add( FE_CARD_NAME, OP_IS, "TREASURY_THRULL" )
subfilter:Add( FE_CARD_NAME, OP_IS, "TRITON_CAVALRY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "TRYGON_PREDATOR" )
subfilter:Add( FE_CARD_NAME, OP_IS, "UNRAVEL_THE_AETHER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "URGENT_EXORCISM" )
subfilter:Add( FE_CARD_NAME, OP_IS, "VIRIDIAN_ZEALOT" )
subfilter:Add( FE_CARD_NAME, OP_IS, "WANE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "WAR_PRIEST_OF_THUNE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "WEAR_AWAY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "WICKERBOUGH_ELDER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "WILD_SWING" )
subfilter:Add( FE_CARD_NAME, OP_IS, "WIPE_CLEAN" )
subfilter:Add( FE_CARD_NAME, OP_IS, "WISPMARE" )
if EffectSource():GetCardType():Test(CARD_TYPE_CREATURE) == false then
subfilter:Add( FE_CARD_NAME, OP_IS, "ANGELIC_EDICT" )
subfilter:Add( FE_CARD_NAME, OP_IS, "BANISHING_STROKE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "BANISHMENT_DECREE" )
subfilter:Add( FE_CARD_NAME, OP_IS, "CRIME" )
subfilter:Add( FE_CARD_NAME, OP_IS, "ETHERSWORN_ADJUDICATOR" )
subfilter:Add( FE_CARD_NAME, OP_IS, "FEAST_OF_DREAMS" )
subfilter:Add( FE_CARD_NAME, OP_IS, "IONAS_JUDGMENT" )
subfilter:Add( FE_CARD_NAME, OP_IS, "MORTIFY" )
subfilter:Add( FE_CARD_NAME, OP_IS, "PHARIKAS_MENDER" )
subfilter:Add( FE_CARD_NAME, OP_IS, "TREVAS_CHARM" )
end
end
end
return filter
end
The code on the planeswalkers is this:
- | Open
- Code: Select all
<STATIC_ABILITY>
<CONTINUOUS_ACTION layer="0">
PLW_Filter()
EffectSource():Protection()
</CONTINUOUS_ACTION>
</STATIC_ABILITY>
Note: This does not fix planeswalkers in zones other than the battlefield being targeted like enchantments. I've tried a couple fixes for that, but I've had no success, yet. I think the only solution to this would be to have cards that target enchantments specifically exclude planeswalkers. If we were dealing with any that target enchantments, then the protection could be removed. If we only deal with those that target enchantments not on the battlefield, then there will be far fewer to change and it'll work the way it should.