diff --git a/script/c511001948.lua b/script/c511001948.lua index d11612de..22f44a29 100644 --- a/script/c511001948.lua +++ b/script/c511001948.lua @@ -1,121 +1,57 @@ ---Bee Force - Big Ballista the Final Battle -function c511001948.initial_effect(c) - --synchro summon - c:EnableReviveLimit() - local e1=Effect.CreateEffect(c) - e1:SetType(EFFECT_TYPE_FIELD) - e1:SetCode(EFFECT_SPSUMMON_PROC) - e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_IGNORE_IMMUNE) - e1:SetRange(LOCATION_EXTRA) - e1:SetCondition(c511001948.syncon) - e1:SetOperation(c511001948.synop) - e1:SetValue(SUMMON_TYPE_SYNCHRO) - c:RegisterEffect(e1) - --atk down - local e2=Effect.CreateEffect(c) - e2:SetDescription(aux.Stringid(511001948,0)) - e2:SetCategory(CATEGORY_ATKCHANGE) - e2:SetProperty(EFFECT_FLAG_CARD_TARGET+EFFECT_FLAG_DAMAGE_STEP) - e2:SetType(EFFECT_TYPE_QUICK_O) - e2:SetHintTiming(TIMING_DAMAGE_STEP) - e2:SetCode(EVENT_FREE_CHAIN) - e2:SetRange(LOCATION_MZONE) - e2:SetCondition(c511001948.atkcon) - e2:SetCost(c511001948.atkcost) - e2:SetTarget(c511001948.atktg) - e2:SetOperation(c511001948.atkop) - c:RegisterEffect(e2) - --pierce - local e3=Effect.CreateEffect(c) - e3:SetType(EFFECT_TYPE_SINGLE) - e3:SetCode(EFFECT_PIERCE) - c:RegisterEffect(e3) -end -function c511001948.atkcon(e,tp,eg,ep,ev,re,r,rp) - return Duel.GetCurrentPhase()~=PHASE_DAMAGE or not Duel.IsDamageCalculated() -end -function c511001948.matfilter(c,syncard) - return c:IsFaceup() and c:IsCanBeSynchroMaterial(syncard) -end -function c511001948.synfilter1(c,syncard,lv,g) - local tlv=c:GetSynchroLevel(syncard) - if lv-tlv<=0 then return false end - if c:IsNotTuner() then return false end - local wg=g:Clone() - wg:RemoveCard(c) - return wg:IsExists(c511001948.synfilter2,1,nil,syncard,lv-tlv,wg) -end -function c511001948.synfilter2(c,syncard,lv,g) - if not c:IsSetCard(0x214) or not c:IsType(TYPE_SYNCHRO) then return false end - local tlv=c:GetSynchroLevel(syncard) - if lv-tlv<=0 then return false end - return g:IsExists(c511001948.synfilter3,1,c,syncard,lv-tlv) -end -function c511001948.synfilter3(c,syncard,lv) - local mlv=c:GetSynchroLevel(syncard) - local lv1=bit.band(mlv,0xffff) - local lv2=bit.rshift(mlv,16) - return c:IsNotTuner() and (lv1==lv or lv2==lv) -end -function c511001948.syncon(e,c,tuner) - if c==nil then return true end - local tp=c:GetControler() - local mg=Duel.GetMatchingGroup(c511001948.matfilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c) - local lv=c:GetLevel() - if tuner then return c511001948.synfilter1(tuner,c,lv,mg) end - return mg:IsExists(c511001948.synfilter1,1,nil,c,lv,mg) -end -function c511001948.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner) - local g=Group.CreateGroup() - local mg=Duel.GetMatchingGroup(c511001948.matfilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c) - local lv=c:GetLevel() - local m1=tuner - if not tuner then - Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) - local t1=mg:FilterSelect(tp,c511001948.synfilter1,1,1,nil,c,lv,mg) - m1=t1:GetFirst() - g:AddCard(m1) - end - lv=lv-m1:GetSynchroLevel(c) - mg:RemoveCard(m1) - Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) - local t2=mg:FilterSelect(tp,c511001948.synfilter2,1,1,nil,c,lv,mg) - local m2=t2:GetFirst() - g:AddCard(m2) - lv=lv-m2:GetSynchroLevel(c) - mg:RemoveCard(m2) - Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) - local t3=mg:FilterSelect(tp,c511001948.synfilter3,1,1,nil,c,lv) - g:Merge(t3) - c:SetMaterial(g) - Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO) -end -function c511001948.cfilter(c) - return c:IsSetCard(0x214) and c:IsType(TYPE_MONSTER) -end -function c511001948.atkcost(e,tp,eg,ep,ev,re,r,rp,chk) - local g=Duel.GetMatchingGroup(c511001948.cfilter,tp,LOCATION_GRAVE,0,e:GetHandler()) - if chk==0 then return g:GetCount()>0 and g:FilterCount(Card.IsAbleToRemoveAsCost,nil)==g:GetCount() end - e:SetLabel(g:GetCount()) - Duel.Remove(g,POS_FACEUP,REASON_COST) -end -function c511001948.atktg(e,tp,eg,ep,ev,re,r,rp,chk,chkc) - if chkc then return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(1-tp) and chkc:IsFaceup() end - if chk==0 then return Duel.IsExistingTarget(Card.IsFaceup,tp,0,LOCATION_MZONE,1,nil) end - Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP) - Duel.SelectTarget(tp,Card.IsFaceup,tp,0,LOCATION_MZONE,1,1,nil) -end -function c511001948.atkop(e,tp,eg,ep,ev,re,r,rp) - local tc=Duel.GetFirstTarget() - if tc and tc:IsRelateToEffect(e) then - local e1=Effect.CreateEffect(e:GetHandler()) - e1:SetType(EFFECT_TYPE_SINGLE) - e1:SetCode(EFFECT_UPDATE_ATTACK) - e1:SetValue(e:GetLabel()*-500) - e1:SetReset(RESET_EVENT+0x1fe0000) - tc:RegisterEffect(e1) - local e2=e1:Clone() - e2:SetCode(EFFECT_UPDATE_DEFENSE) - tc:RegisterEffect(e2) - end -end +--Bee Force - Big Ballista the Final Battle +function c511001948.initial_effect(c) + --synchro summon + c:EnableReviveLimit() + aux.AddSynchroProcedure(c,nil,aux.NonTuner(nil),1) + --atk down + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(511001948,0)) + e2:SetCategory(CATEGORY_ATKCHANGE) + e2:SetProperty(EFFECT_FLAG_CARD_TARGET+EFFECT_FLAG_DAMAGE_STEP) + e2:SetType(EFFECT_TYPE_QUICK_O) + e2:SetHintTiming(TIMING_DAMAGE_STEP) + e2:SetCode(EVENT_FREE_CHAIN) + e2:SetRange(LOCATION_MZONE) + e2:SetCondition(c511001948.atkcon) + e2:SetCost(c511001948.atkcost) + e2:SetTarget(c511001948.atktg) + e2:SetOperation(c511001948.atkop) + c:RegisterEffect(e2) + --pierce + local e3=Effect.CreateEffect(c) + e3:SetType(EFFECT_TYPE_SINGLE) + e3:SetCode(EFFECT_PIERCE) + c:RegisterEffect(e3) +end +function c511001948.atkcon(e,tp,eg,ep,ev,re,r,rp) + return Duel.GetCurrentPhase()~=PHASE_DAMAGE or not Duel.IsDamageCalculated() +end +function c511001948.cfilter(c) + return c:IsSetCard(0x214) and c:IsType(TYPE_MONSTER) +end +function c511001948.atkcost(e,tp,eg,ep,ev,re,r,rp,chk) + local g=Duel.GetMatchingGroup(c511001948.cfilter,tp,LOCATION_GRAVE,0,e:GetHandler()) + if chk==0 then return g:GetCount()>0 and g:FilterCount(Card.IsAbleToRemoveAsCost,nil)==g:GetCount() end + e:SetLabel(g:GetCount()) + Duel.Remove(g,POS_FACEUP,REASON_COST) +end +function c511001948.atktg(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + if chkc then return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(1-tp) and chkc:IsFaceup() end + if chk==0 then return Duel.IsExistingTarget(Card.IsFaceup,tp,0,LOCATION_MZONE,1,nil) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP) + Duel.SelectTarget(tp,Card.IsFaceup,tp,0,LOCATION_MZONE,1,1,nil) +end +function c511001948.atkop(e,tp,eg,ep,ev,re,r,rp) + local tc=Duel.GetFirstTarget() + if tc and tc:IsRelateToEffect(e) then + local e1=Effect.CreateEffect(e:GetHandler()) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetCode(EFFECT_UPDATE_ATTACK) + e1:SetValue(e:GetLabel()*-500) + e1:SetReset(RESET_EVENT+0x1fe0000) + tc:RegisterEffect(e1) + local e2=e1:Clone() + e2:SetCode(EFFECT_UPDATE_DEFENSE) + tc:RegisterEffect(e2) + end +end diff --git a/script/c511002113.lua b/script/c511002113.lua index 4945d0d9..1405c3cd 100644 --- a/script/c511002113.lua +++ b/script/c511002113.lua @@ -1,63 +1,64 @@ ---Different Dimension Barrier - Lost Force -function c511002113.initial_effect(c) - --Activate - local e1=Effect.CreateEffect(c) - e1:SetCategory(CATEGORY_DAMAGE) - e1:SetType(EFFECT_TYPE_ACTIVATE) - e1:SetCode(EVENT_ATTACK_ANNOUNCE) - e1:SetCondition(c511002113.condition) - e1:SetTarget(c511002113.target) - e1:SetOperation(c511002113.activate) - c:RegisterEffect(e1) - if not c511002113.global_check then - c511002113.global_check=true - c511002113[0]=true - c511002113[1]=true - local ge1=Effect.CreateEffect(c) - ge1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) - ge1:SetCode(EVENT_LEAVE_FIELD) - ge1:SetProperty(EFFECT_FLAG_DAMAGE_STEP) - ge1:SetOperation(c511002113.checkop) - Duel.RegisterEffect(ge1,0) - local ge2=Effect.CreateEffect(c) - ge2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) - ge2:SetCode(EVENT_ADJUST) - ge2:SetCountLimit(1) - ge2:SetOperation(c511002113.clear) - Duel.RegisterEffect(ge2,0) - end -end -function c511002113.cfilter(c,tp) - return c:IsPreviousLocation(LOCATION_MZONE) and c:IsType(TYPE_MONSTER) and not c:IsReason(REASON_BATTLE) -end -function c511002113.checkop(e,tp,eg,ep,ev,re,r,rp) - if eg:IsExists(c511002113.cfilter,1,nil,tp) then - c511002113[tp]=true - end - if eg:IsExists(c511002113.cfilter,1,nil,1-tp) then - c511002113[1-tp]=true - end -end -function c511002113.clear(e,tp,eg,ep,ev,re,r,rp) - c511002113[0]=false - c511002113[1]=false -end -function c511002113.condition(e,tp,eg,ep,ev,re,r,rp) - return tp~=Duel.GetTurnPlayer() and c511002113[tp] -end -function c511002113.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc) - local tg=Duel.GetAttacker() - if chk==0 then return tg:IsOnField() end - Duel.SetTargetCard(tg) - local dam=tg:GetAttack() - Duel.SetOperationInfo(0,CATEGORY_DAMAGE,nil,0,1-tp,dam) -end -function c511002113.activate(e,tp,eg,ep,ev,re,r,rp) - local tc=Duel.GetFirstTarget() - if tc and tc:IsRelateToEffect(e) then - if Duel.NegateAttack() then - Duel.BreakEffect() - Duel.Damage(1-tp,tc:GetAttack(),REASON_EFFECT) - end - end -end +--Different Dimension Barrier - Lost Force +function c511002113.initial_effect(c) + --Activate + local e1=Effect.CreateEffect(c) + e1:SetCategory(CATEGORY_DAMAGE) + e1:SetType(EFFECT_TYPE_ACTIVATE) + e1:SetCode(EVENT_ATTACK_ANNOUNCE) + e1:SetCondition(c511002113.condition) + e1:SetTarget(c511002113.target) + e1:SetOperation(c511002113.activate) + c:RegisterEffect(e1) + if not c511002113.global_check then + c511002113.global_check=true + c511002113[0]=true + c511002113[1]=true + local ge1=Effect.CreateEffect(c) + ge1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) + ge1:SetCode(EVENT_LEAVE_FIELD) + ge1:SetProperty(EFFECT_FLAG_DAMAGE_STEP) + ge1:SetOperation(c511002113.checkop) + Duel.RegisterEffect(ge1,0) + local ge2=Effect.CreateEffect(c) + ge2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) + ge2:SetCode(EVENT_ADJUST) + ge2:SetCountLimit(1) + ge2:SetOperation(c511002113.clear) + Duel.RegisterEffect(ge2,0) + end +end +function c511002113.cfilter(c,tp) + return c:IsPreviousLocation(LOCATION_MZONE) and c:IsType(TYPE_MONSTER) and not c:IsReason(REASON_BATTLE) + and c:GetPreviousControler()==tp +end +function c511002113.checkop(e,tp,eg,ep,ev,re,r,rp) + if eg:IsExists(c511002113.cfilter,1,nil,tp) then + c511002113[tp]=true + end + if eg:IsExists(c511002113.cfilter,1,nil,1-tp) then + c511002113[1-tp]=true + end +end +function c511002113.clear(e,tp,eg,ep,ev,re,r,rp) + c511002113[0]=false + c511002113[1]=false +end +function c511002113.condition(e,tp,eg,ep,ev,re,r,rp) + return tp~=Duel.GetTurnPlayer() and c511002113[tp] +end +function c511002113.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + local tg=Duel.GetAttacker() + if chk==0 then return tg:IsOnField() end + Duel.SetTargetCard(tg) + local dam=tg:GetAttack() + Duel.SetOperationInfo(0,CATEGORY_DAMAGE,nil,0,1-tp,dam) +end +function c511002113.activate(e,tp,eg,ep,ev,re,r,rp) + local tc=Duel.GetFirstTarget() + if tc and tc:IsRelateToEffect(e) then + if Duel.NegateAttack() then + Duel.BreakEffect() + Duel.Damage(1-tp,tc:GetAttack(),REASON_EFFECT) + end + end +end diff --git a/script/c511002795.lua b/script/c511002795.lua index 473bac41..61ee4efb 100644 --- a/script/c511002795.lua +++ b/script/c511002795.lua @@ -1,70 +1,70 @@ ---Black Feather Cursed Guard -function c511002795.initial_effect(c) - --Activate - local e2=Effect.CreateEffect(c) - e2:SetDescription(aux.Stringid(511000995,0)) - e2:SetCategory(CATEGORY_DISABLE) - e2:SetType(EFFECT_TYPE_ACTIVATE) - e2:SetProperty(EFFECT_FLAG_DAMAGE_STEP+EFFECT_FLAG_DAMAGE_CAL+EFFECT_FLAG_CARD_TARGET) - e2:SetCode(EVENT_CHAINING) - e2:SetCondition(c511002795.condition) - e2:SetTarget(c511002795.target) - e2:SetOperation(c511002795.activate) - c:RegisterEffect(e2) -end -function c511002795.condition(e,tp,eg,ep,ev,re,r,rp) - if not re:IsHasProperty(EFFECT_FLAG_CARD_TARGET) then return false end - local tg=Duel.GetChainInfo(ev,CHAININFO_TARGET_CARDS) - if not tg or tg:GetCount()~=1 or not tg:GetFirst():IsSetCard(0x33) or not tg:GetFirst():IsLocation(LOCATION_MZONE) - or tg:GetFirst():IsControler(1-tp) then return false end - return rp~=tp and re:IsActiveType(TYPE_MONSTER) and Duel.IsChainNegatable(ev) -end -function c511002795.target(e,tp,eg,ep,ev,re,r,rp,chk) - local tg=Duel.GetChainInfo(ev,CHAININFO_TARGET_CARDS) - local tc=tg:GetFirst() - if chk==0 then return tc and tc:IsCanBeEffectTarget(e) end - Duel.SetTargetCard(tc) - Duel.SetOperationInfo(0,CATEGORY_DISABLE,eg,1,0,0) -end -function c511002795.activate(e,tp,eg,ep,ev,re,r,rp) - local c=e:GetHandler() - local tc=Duel.GetFirstTarget() - if not c:IsFaceup() or not c:IsRelateToEffect(e) then return end - if c:IsRelateToEffect(e) and tc:IsFaceup() and tc:IsRelateToEffect(e) then - c:SetCardTarget(tc) - Duel.NegateEffect(ev) - --destroy replace - local e1=Effect.CreateEffect(c) - e1:SetType(EFFECT_TYPE_CONTINUOUS+EFFECT_TYPE_FIELD) - e1:SetCode(EFFECT_DESTROY_REPLACE) - e1:SetRange(LOCATION_SZONE) - e1:SetTarget(c511002795.destg) - e1:SetValue(c511002795.desval) - e1:SetReset(RESET_EVENT+0x1fe0000) - c:RegisterEffect(e1) - end -end -function c511002795.destg(e,tp,eg,ep,ev,re,r,rp,chk) - local c=e:GetHandler() - local tc=c:GetFirstCardTarget() - if chk==0 then return tc and eg:IsContains(tc) and tc:GetAttack()>=400 and tc:GetLevel()>1 end - if Duel.SelectYesNo(tp,aux.Stringid(511002795,0)) then - local e1=Effect.CreateEffect(c) - e1:SetType(EFFECT_TYPE_SINGLE) - e1:SetCode(EFFECT_UPDATE_ATTACK) - e1:SetValue(-400) - e1:SetReset(RESET_EVENT+0x1fe0000) - tc:RegisterEffect(e1) - local e2=Effect.CreateEffect(c) - e2:SetType(EFFECT_TYPE_SINGLE) - e2:SetCode(EFFECT_UPDATE_LEVEL) - e2:SetValue(-1) - e2:SetReset(RESET_EVENT+0x1fe0000) - tc:RegisterEffect(e2) - return true - else return false - end -end -function c511002795.desval(e,c) - return c==e:GetHandler():GetFirstCardTarget() -end +--Black Feather Cursed Guard +function c511002795.initial_effect(c) + --Activate + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(511000995,0)) + e2:SetCategory(CATEGORY_DISABLE) + e2:SetType(EFFECT_TYPE_ACTIVATE) + e2:SetProperty(EFFECT_FLAG_DAMAGE_STEP+EFFECT_FLAG_DAMAGE_CAL+EFFECT_FLAG_CARD_TARGET) + e2:SetCode(EVENT_CHAINING) + e2:SetCondition(c511002795.condition) + e2:SetTarget(c511002795.target) + e2:SetOperation(c511002795.activate) + c:RegisterEffect(e2) +end +function c511002795.condition(e,tp,eg,ep,ev,re,r,rp) + if not re:IsHasProperty(EFFECT_FLAG_CARD_TARGET) then return false end + local tg=Duel.GetChainInfo(ev,CHAININFO_TARGET_CARDS) + if not tg or tg:GetCount()~=1 or tg:GetFirst():IsFacedown() or not tg:GetFirst():IsSetCard(0x33) or not tg:GetFirst():IsLocation(LOCATION_MZONE) + or tg:GetFirst():IsControler(1-tp) then return false end + return rp~=tp and re:IsActiveType(TYPE_MONSTER) and Duel.IsChainNegatable(ev) +end +function c511002795.target(e,tp,eg,ep,ev,re,r,rp,chk) + local tg=Duel.GetChainInfo(ev,CHAININFO_TARGET_CARDS) + local tc=tg:GetFirst() + if chk==0 then return tc and tc:IsCanBeEffectTarget(e) end + Duel.SetTargetCard(tc) + Duel.SetOperationInfo(0,CATEGORY_DISABLE,eg,1,0,0) +end +function c511002795.activate(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + local tc=Duel.GetFirstTarget() + if not c:IsFaceup() or not c:IsRelateToEffect(e) then return end + if tc and tc:IsFaceup() and tc:IsRelateToEffect(e) then + c:SetCardTarget(tc) + Duel.NegateEffect(ev) + --destroy replace + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_CONTINUOUS+EFFECT_TYPE_FIELD) + e1:SetCode(EFFECT_DESTROY_REPLACE) + e1:SetRange(LOCATION_SZONE) + e1:SetTarget(c511002795.destg) + e1:SetValue(c511002795.desval) + e1:SetReset(RESET_EVENT+0x1fe0000) + c:RegisterEffect(e1) + end +end +function c511002795.destg(e,tp,eg,ep,ev,re,r,rp,chk) + local c=e:GetHandler() + local tc=c:GetFirstCardTarget() + if chk==0 then return tc and eg:IsContains(tc) and tc:GetAttack()>=400 and tc:GetLevel()>1 end + if Duel.SelectYesNo(tp,aux.Stringid(511002795,0)) then + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetCode(EFFECT_UPDATE_ATTACK) + e1:SetValue(-400) + e1:SetReset(RESET_EVENT+0x1fe0000) + tc:RegisterEffect(e1) + local e2=Effect.CreateEffect(c) + e2:SetType(EFFECT_TYPE_SINGLE) + e2:SetCode(EFFECT_UPDATE_LEVEL) + e2:SetValue(-1) + e2:SetReset(RESET_EVENT+0x1fe0000) + tc:RegisterEffect(e2) + return true + else return false + end +end +function c511002795.desval(e,c) + return c==e:GetHandler():GetFirstCardTarget() +end diff --git a/script/c511004100.lua b/script/c511004100.lua index be1427b8..ec92ddc3 100644 --- a/script/c511004100.lua +++ b/script/c511004100.lua @@ -1,123 +1,105 @@ ---Zombie Heart ---scripted by:urielkama -function c511004100.initial_effect(c) - --Activate - local e1=Effect.CreateEffect(c) - e1:SetCategory(CATEGORY_EQUIP) - e1:SetType(EFFECT_TYPE_ACTIVATE) - e1:SetCode(EVENT_FREE_CHAIN) - e1:SetProperty(EFFECT_FLAG_CARD_TARGET) - e1:SetTarget(c511004100.target) - e1:SetOperation(c511004100.operation) - c:RegisterEffect(e1) - --Equip limit - local e2=Effect.CreateEffect(c) - e2:SetType(EFFECT_TYPE_SINGLE) - e2:SetCode(EFFECT_EQUIP_LIMIT) - e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) - e2:SetValue(c511004100.eqlimit) - c:RegisterEffect(e2) - --damage - local e3=Effect.CreateEffect(c) - e3:SetCategory(CATEGORY_DAMAGE) - e3:SetProperty(EFFECT_FLAG_PLAYER_TARGET) - e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O) - e3:SetCode(EVENT_PHASE+PHASE_END) - e3:SetCountLimit(1) - e3:SetRange(LOCATION_SZONE) - e3:SetCondition(c511004100.con) - e3:SetTarget(c511004100.tg) - e3:SetOperation(c511004100.op) - c:RegisterEffect(e3) - --negate - local e3=Effect.CreateEffect(c) - e3:SetDescription(aux.Stringid(511004100,0)) - e3:SetCategory(CATEGORY_NEGATE) - e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_QUICK_O) - e3:SetCode(EVENT_CHAINING) - e3:SetRange(LOCATION_SZONE) - e3:SetCondition(c511004100.condition2) - e3:SetTarget(c511004100.target2) - e3:SetOperation(c511004100.operation2) - c:RegisterEffect(e3) - if not c511004100.global_check then - c511004100.global_check=true - c511004100[0]=false - c511004100[1]=false - local ge1=Effect.CreateEffect(c) - ge1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) - ge1:SetCode(EVENT_DAMAGE_STEP_END) - ge1:SetOperation(c511004100.checkop) - Duel.RegisterEffect(ge1,0) - local ge2=Effect.CreateEffect(c) - ge2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) - ge2:SetCode(EVENT_PHASE_START+PHASE_DRAW) - ge2:SetOperation(c511004100.clear) - Duel.RegisterEffect(ge2,0) - end -end -function c511004100.filter(c) - return c:IsFaceup() and c:IsRace(RACE_ZOMBIE) -end -function c511004100.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc) - if chkc then return chkc:IsLocation(LOCATION_MZONE) and c511004100.filter(chkc) end - if chk==0 then return Duel.IsExistingTarget(c511004100.filter,tp,LOCATION_MZONE,LOCATION_MZONE,1,nil) end - Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_EQUIP) - local g=Duel.SelectTarget(tp,c511004100.filter,tp,LOCATION_MZONE,LOCATION_MZONE,1,1,nil) - Duel.SetOperationInfo(0,CATEGORY_EQUIP,e:GetHandler(),1,0,0) -end -function c511004100.operation(e,tp,eg,ep,ev,re,r,rp) -local tc=Duel.GetFirstTarget() - if e:GetHandler():IsRelateToEffect(e) and tc:IsRelateToEffect(e) and tc:IsFaceup() then - Duel.Equip(tp,e:GetHandler(),tc) - end -end -function c511004100.eqlimit(e,c) - return c:IsRace(RACE_ZOMBIE) -end -function c511004100.checkop(e,tp,eg,ep,ev,re,r,rp) -local eqc=e:GetHandler():GetEquipTarget() -local a=Duel.GetAttacker() -local d=Duel.GetAttackTarget() -if not d or (a~=eqc and d~=eqc) then return end -local la=a:GetAttack() -local ld=d:GetAttack() - if (a==eqc and ld>=la) or (d==eqc and la>=ld) then - c511004100[0]=true - c511004100[1]=true - end -end -function c511004100.clear(e,tp,eg,ep,ev,re,r,rp) - c511004100[0]=false - c511004100[1]=false -end -function c511004100.eqfilter(c,ec,tp) - return c:IsOnField() and c:IsControler(tp) and c:GetEquipTarget()==ec -end -function c511004100.condition2(e,tp,eg,ep,ev,re,r,rp) - if e==re or e:GetHandler():IsStatus(STATUS_BATTLE_DESTROYED) or not Duel.IsChainNegatable(ev) then return false end - local ex,tg,tc=Duel.GetOperationInfo(ev,CATEGORY_DESTROY) - return ex and tg~=nil and tc+tg:FilterCount(c511004100.eqfilter,nil)-tg:GetCount()==1 and Duel.IsChainNegatable(ev) -end -function c511004100.target2(e,tp,eg,ep,ev,re,r,rp,chk) - if chk==0 then return true end - Duel.SetOperationInfo(0,CATEGORY_NEGATE,eg,1,0,0) -end -function c511004100.operation2(e,tp,eg,ep,ev,re,r,rp) - Duel.NegateActivation(ev) - e:GetHandler():RegisterFlagEffect(511004100,RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END,0,0) -end -function c511004100.con(e,tp,eg,ep,ev,re,r,rp) - return c511004100[tp] or e:GetHandler():GetFlagEffect(511004100)>0 -end -function c511004100.tg(e,tp,eg,ep,ev,re,r,rp,chk) - if chk==0 then return true end - local atk=e:GetHandler():GetEquipTarget():GetAttack() - Duel.SetTargetPlayer(1-tp) - Duel.SetTargetParam(atk) - Duel.SetOperationInfo(0,CATEGORY_DAMAGE,nil,0,1-tp,atk) -end -function c511004100.op(e,tp,eg,ep,ev,re,r,rp) - local p,d=Duel.GetChainInfo(0,CHAININFO_TARGET_PLAYER,CHAININFO_TARGET_PARAM) - Duel.Damage(p,d,REASON_EFFECT) -end \ No newline at end of file +--Zombie Heart +--scripted by:urielkama +--fixed by MLD +function c511004100.initial_effect(c) + --Activate + local e1=Effect.CreateEffect(c) + e1:SetCategory(CATEGORY_EQUIP) + e1:SetType(EFFECT_TYPE_ACTIVATE) + e1:SetCode(EVENT_FREE_CHAIN) + e1:SetProperty(EFFECT_FLAG_CARD_TARGET) + e1:SetTarget(c511004100.target) + e1:SetOperation(c511004100.operation) + c:RegisterEffect(e1) + --Equip limit + local e2=Effect.CreateEffect(c) + e2:SetType(EFFECT_TYPE_SINGLE) + e2:SetCode(EFFECT_EQUIP_LIMIT) + e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) + e2:SetValue(c511004100.eqlimit) + c:RegisterEffect(e2) + --damage + local e3=Effect.CreateEffect(c) + e3:SetCategory(CATEGORY_DAMAGE) + e3:SetProperty(EFFECT_FLAG_PLAYER_TARGET) + e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O) + e3:SetCode(EVENT_PHASE+PHASE_END) + e3:SetCountLimit(1) + e3:SetRange(LOCATION_SZONE) + e3:SetCondition(c511004100.damcon) + e3:SetTarget(c511004100.damtg) + e3:SetOperation(c511004100.damop) + c:RegisterEffect(e3) + --battle/effect + local e4=Effect.CreateEffect(c) + e4:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) + e4:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) + e4:SetCode(EVENT_DAMAGE_STEP_END) + e4:SetRange(LOCATION_SZONE) + e4:SetCondition(c511004100.atcon) + e4:SetOperation(c511004100.op) + c:RegisterEffect(e4) + local e5=Effect.CreateEffect(c) + e5:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) + e5:SetCode(EVENT_CHAINING) + e5:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_DAMAGE_STEP+EFFECT_FLAG_DAMAGE_CAL) + e5:SetRange(LOCATION_SZONE) + e5:SetCondition(c511004100.descon) + e5:SetOperation(c511004100.op) + c:RegisterEffect(e5) +end +function c511004100.eqlimit(e,c) + return c:IsRace(RACE_ZOMBIE) +end +function c511004100.filter(c) + return c:IsFaceup() and c:IsRace(RACE_ZOMBIE) +end +function c511004100.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + if chkc then return chkc:IsLocation(LOCATION_MZONE) and c511004100.filter(chkc) end + if chk==0 then return Duel.IsExistingTarget(c511004100.filter,tp,LOCATION_MZONE,LOCATION_MZONE,1,nil) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_EQUIP) + local g=Duel.SelectTarget(tp,c511004100.filter,tp,LOCATION_MZONE,LOCATION_MZONE,1,1,nil) + Duel.SetOperationInfo(0,CATEGORY_EQUIP,e:GetHandler(),1,0,0) +end +function c511004100.operation(e,tp,eg,ep,ev,re,r,rp) + local tc=Duel.GetFirstTarget() + if e:GetHandler():IsRelateToEffect(e) and tc and tc:IsRelateToEffect(e) and tc:IsFaceup() then + Duel.Equip(tp,e:GetHandler(),tc) + end +end +function c511004100.damcon(e,tp,eg,ep,ev,re,r,rp) + return e:GetHandler():GetFlagEffect(511004100)>0 +end +function c511004100.damtg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return true end + local atk=e:GetHandler():GetEquipTarget():GetAttack() + Duel.SetTargetPlayer(1-tp) + Duel.SetTargetParam(atk) + Duel.SetOperationInfo(0,CATEGORY_DAMAGE,nil,0,1-tp,atk) +end +function c511004100.damop(e,tp,eg,ep,ev,re,r,rp) + local p=Duel.GetChainInfo(0,CHAININFO_TARGET_PLAYER) + local ec=e:GetHandler():GetEquipTarget() + if not ec then return end + local atk=ec:GetAttack() + Duel.Damage(p,atk,REASON_EFFECT) +end +function c511004100.atcon(e,tp,eg,ep,ev,re,r,rp) + local ec=e:GetHandler():GetEquipTarget() + if not ec then return false end + local bc=ec:GetBattleTarget() + return bc and ec:GetAttack()0 +end +function c511004100.op(e,tp,eg,ep,ev,re,r,rp) + e:GetHandler():RegisterFlagEffect(511004100,RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END,0,0) +end diff --git a/script/c511004106.lua b/script/c511004106.lua index 066bf817..efd8ec05 100644 --- a/script/c511004106.lua +++ b/script/c511004106.lua @@ -1,54 +1,53 @@ ---Xyz Battle Chain ---scripted by:urielkama -function c511004106.initial_effect(c) ---activate -local e1=Effect.CreateEffect(c) -e1:SetCategory(CATEGORY_NEGATE+CATEGORY_DESTROY) -e1:SetType(EFFECT_TYPE_ACTIVATE) -e1:SetCode(EVENT_CHAINING) -e1:SetCondition(c511004106.con) -e1:SetTarget(c511004106.tg) -e1:SetOperation(c511004106.op) -c:RegisterEffect(e1) -end -function c511004106.filter(c) - return c:IsFaceup() and c:IsType(TYPE_XYZ) -end -function c511004106.cfilter(c) - return c:IsLocation(LOCATION_MZONE) and c:IsFaceup() and c:IsType(TYPE_XYZ) and c:GetEffectCount(EFFECT_CANNOT_ATTACK)==0 and c:GetEffectCount(EFFECT_CANNOT_ATTACK_ANNOUNCE)==0 and c:GetAttackedCount()==0 -end -function c511004106.con(e,tp,eg,ep,ev,re,r,rp) - if not re:IsHasProperty(EFFECT_FLAG_CARD_TARGET) then return end - if not (re:IsActiveType(TYPE_SPELL) or re:IsActiveType(TYPE_TRAP)) and not re:IsHasType(EFFECT_TYPE_ACTIVATE) then return false end - local tg=Duel.GetChainInfo(ev,CHAININFO_TARGET_CARDS) - return tg and tg:IsExists(c511004106.cfilter,1,nil) and Duel.IsChainNegatable(ev) and Duel.IsExistingMatchingCard(c511004106.filter,tp,LOCATION_MZONE,0,1,nil) and Duel.IsExistingMatchingCard(c511004106.filter,tp,0,LOCATION_MZONE,1,nil) -end -function c511004106.tg(e,tp,eg,ep,ev,re,r,rp,chk) - if chk==0 then return Duel.IsExistingTarget(c511004106.filter,tp,LOCATION_MZONE,0,1,nil) and not Duel.IsPlayerAffectedByEffect(1-tp,EFFECT_SKIP_M2) end - local g=Duel.SelectTarget(tp,c511004106.filter,tp,LOCATION_MZONE,0,1,1,nil) - Duel.SetOperationInfo(0,CATEGORY_NEGATE,eg,1,0,0) - if re:GetHandler():IsDestructable() and re:GetHandler():IsRelateToEffect(re) then - Duel.SetOperationInfo(0,CATEGORY_DESTROY,eg,1,0,0) - end -end -function c511004106.op(e,tp,eg,ep,ev,re,r,rp) - local tc=Duel.GetFirstTarget() - Duel.NegateActivation(ev) - if re:GetHandler():IsRelateToEffect(re) then - if tc and tc:IsRelateToEffect(e) and Duel.Destroy(eg,REASON_EFFECT)~=0 and Duel.GetTurnPlayer()~=tp and not (Duel.IsAbleToEnterBP() or (Duel.GetCurrentPhase()==PHASE_BATTLE_START and Duel.GetCurrentPhase()==PHASE_BATTLE)) then - local g=Duel.GetMatchingGroup(c511004106.cfilter,Duel.GetTurnPlayer(),LOCATION_MZONE,0,nil) - if g:GetCount()>0 then - local sg=g:Select(Duel.GetTurnPlayer(),1,1,nil) - Duel.HintSelection(sg) - Duel.CalculateDamage(sg:GetFirst(),tc) - if tc:IsStatus(STATUS_BATTLE_DESTROYED) then - Duel.Destroy(tc,REASON_BATTLE) - end - else Duel.NegateActivation(ev) - if re:GetHandler():IsRelateToEffect(re) then - Duel.Destroy(eg,REASON_EFFECT) - end - end - end - end -end \ No newline at end of file +--Xyz Battle Chain +--scripted by:urielkama +--fixed by MLD +function c511004106.initial_effect(c) + --activate + local e1=Effect.CreateEffect(c) + e1:SetCategory(CATEGORY_NEGATE+CATEGORY_DESTROY) + e1:SetType(EFFECT_TYPE_ACTIVATE) + e1:SetCode(EVENT_CHAINING) + e1:SetProperty(EFFECT_FLAG_CARD_TARGET) + e1:SetHintTiming(0,TIMING_END_PHASE) + e1:SetCondition(c511004106.condition) + e1:SetTarget(c511004106.target) + e1:SetOperation(c511004106.activate) + c:RegisterEffect(e1) +end +function c511004106.filter(c) + return c:IsFaceup() and c:IsType(TYPE_XYZ) +end +function c511004106.cfilter(c) + return c:IsLocation(LOCATION_MZONE) and c:IsFaceup() and c:IsType(TYPE_XYZ) +end +function c511004106.condition(e,tp,eg,ep,ev,re,r,rp) + if not re:IsHasProperty(EFFECT_FLAG_CARD_TARGET) or not re:IsHasType(EFFECT_TYPE_ACTIVATE) then return false end + local tg=Duel.GetChainInfo(ev,CHAININFO_TARGET_CARDS) + return tg and tg:IsExists(c511004106.cfilter,1,nil) and Duel.IsChainNegatable(ev) + and Duel.IsExistingMatchingCard(c511004106.filter,tp,LOCATION_MZONE,0,1,nil) + and Duel.IsExistingMatchingCard(c511004106.filter,tp,0,LOCATION_MZONE,1,nil) +end +function c511004106.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + if chkc then return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and c511004106.filter(chkc) end + if chk==0 then return Duel.IsExistingTarget(c511004106.filter,tp,LOCATION_MZONE,0,1,nil) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP) + Duel.SelectTarget(tp,c511004106.filter,tp,LOCATION_MZONE,0,1,1,nil) + Duel.SetOperationInfo(0,CATEGORY_NEGATE,eg,1,0,0) + if re:GetHandler():IsRelateToEffect(re) then + Duel.SetOperationInfo(0,CATEGORY_DESTROY,eg,1,0,0) + end +end +function c511004106.activate(e,tp,eg,ep,ev,re,r,rp) + local tc=Duel.GetFirstTarget() + Duel.NegateActivation(ev) + if re:GetHandler():IsRelateToEffect(re) and Duel.Destroy(eg,REASON_EFFECT)~=0 and tc and tc:IsRelateToEffect(e) and Duel.GetTurnPlayer()~=tp + and Duel.GetActivityCount(1-tp,ACTIVITY_BATTLE_PHASE)==0 and (not Duel.IsAbleToEnterBP() or Duel.GetCurrentPhase()==PHASE_END) then + local g=Duel.GetMatchingGroup(c511004106.filter,tp,0,LOCATION_MZONE,nil) + if g:GetCount()>0 then + Duel.BreakEffect() + local sg=g:Select(1-tp,1,1,nil) + Duel.HintSelection(sg) + Duel.CalculateDamage(sg:GetFirst(),tc) + end + end +end