Commit 1c8c052e authored by POLYMER's avatar POLYMER

fix

parent 066a4321
...@@ -19,64 +19,170 @@ function cm.initial_effect(c) ...@@ -19,64 +19,170 @@ function cm.initial_effect(c)
e2:SetCode(EVENT_FLIP) e2:SetCode(EVENT_FLIP)
c:RegisterEffect(e2) c:RegisterEffect(e2)
-- --
local custom_code=cm.RegisterMergedDelayedEvent_ToSingleCard(c,m,EVENT_CUSTOM+m)
local e3=Effect.CreateEffect(c) local e3=Effect.CreateEffect(c)
e3:SetDescription(aux.Stringid(m,0)) e3:SetDescription(aux.Stringid(m,0))
e3:SetCategory(CATEGORY_SUMMON+CATEGORY_DRAW) e3:SetCategory(CATEGORY_SUMMON+CATEGORY_DRAW)
e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O) e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
e3:SetCode(EVENT_MOVE) e3:SetCode(custom_code)
e3:SetRange(LOCATION_HAND+LOCATION_MZONE) e3:SetRange(LOCATION_HAND+LOCATION_MZONE)
e3:SetProperty(EFFECT_FLAG_DELAY) e3:SetProperty(EFFECT_FLAG_DELAY)
e3:SetCondition(cm.sumcon) --e3:SetCondition(cm.sumcon)
e3:SetTarget(cm.sumtg1) e3:SetTarget(cm.sumtg1)
e3:SetOperation(cm.sumop1) e3:SetOperation(cm.sumop1)
c:RegisterEffect(e3) c:RegisterEffect(e3)
local e31=e3:Clone() local e31=e3:Clone()
e31:SetCode(EVENT_CUSTOM+m+1) e31:SetCode(EVENT_CUSTOM+m+1)
c:RegisterEffect(e31) --c:RegisterEffect(e31)
local e4=e3:Clone() local e4=e3:Clone()
e4:SetCode(custom_code+1)
e4:SetDescription(aux.Stringid(m,1)) e4:SetDescription(aux.Stringid(m,1))
e4:SetCondition(cm.sumcon2) --e4:SetCondition(cm.sumcon2)
e4:SetTarget(cm.sumtg2) e4:SetTarget(cm.sumtg2)
e4:SetOperation(cm.sumop2) e4:SetOperation(cm.sumop2)
c:RegisterEffect(e4) c:RegisterEffect(e4)
local e41=e4:Clone() local e41=e4:Clone()
e41:SetCode(EVENT_CUSTOM+m+1) e41:SetCode(EVENT_CUSTOM+m+1)
c:RegisterEffect(e41) --c:RegisterEffect(e41)
local e5=e3:Clone() local e5=e3:Clone()
e5:SetCode(custom_code+2)
e5:SetDescription(aux.Stringid(m,2)) e5:SetDescription(aux.Stringid(m,2))
e5:SetCondition(cm.sumcon3) --e5:SetCondition(cm.sumcon3)
e5:SetTarget(cm.sumtg) e5:SetTarget(cm.sumtg)
e5:SetOperation(cm.sumop) e5:SetOperation(cm.sumop)
c:RegisterEffect(e5) c:RegisterEffect(e5)
local e51=e5:Clone() local e51=e5:Clone()
e51:SetCode(EVENT_CUSTOM+m+1) e51:SetCode(EVENT_CUSTOM+m+1)
c:RegisterEffect(e51) --c:RegisterEffect(e51)
local e6=e3:Clone() local e6=e3:Clone()
e6:SetDescription(aux.Stringid(m,4)) e6:SetDescription(aux.Stringid(m,4))
c:RegisterEffect(e6) c:RegisterEffect(e6)
local e61=e6:Clone() local e61=e6:Clone()
e61:SetCode(EVENT_CUSTOM+m+1) e61:SetCode(EVENT_CUSTOM+m+1)
c:RegisterEffect(e61) --c:RegisterEffect(e61)
local e7=e4:Clone() local e7=e4:Clone()
e7:SetDescription(aux.Stringid(m,4)) e7:SetDescription(aux.Stringid(m,4))
c:RegisterEffect(e7) c:RegisterEffect(e7)
local e71=e7:Clone() local e71=e7:Clone()
e71:SetCode(EVENT_CUSTOM+m+1) e71:SetCode(EVENT_CUSTOM+m+1)
c:RegisterEffect(e71) --c:RegisterEffect(e71)
local e8=e5:Clone()
e8:SetDescription(aux.Stringid(m,4))
c:RegisterEffect(e8)
if not cm.global_check then if not cm.global_check then
cm.global_check=true cm.global_check=true
local ge1=Effect.CreateEffect(c)
ge1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
ge1:SetCode(EVENT_MOVE)
ge1:SetOperation(cm.MergedDelayEventCheck1)
Duel.RegisterEffect(ge1,0)
local ge2=ge1:Clone()
ge2:SetCode(EVENT_CUSTOM+m+1)
Duel.RegisterEffect(ge2,0)
local _Overlay=Duel.Overlay local _Overlay=Duel.Overlay
function Duel.Overlay(xc,v,...) function Duel.Overlay(xc,v,...)
local t=Auxiliary.GetValueType(v) local t=Auxiliary.GetValueType(v)
local g=Group.CreateGroup() local g=Group.CreateGroup()
if t=="Card" then g:AddCard(v) else g=v end if t=="Card" then g:AddCard(v) else g=v end
if g:IsExists(Card.IsLocation,1,nil,LOCATION_DECK) then local res=_Overlay(xc,v,...)
Duel.RaiseEvent(g:Filter(Card.IsLocation,nil,LOCATION_DECK),EVENT_CUSTOM+m+1,e,0,0,0,0) Duel.RaiseEvent(g,EVENT_CUSTOM+m+1,e1,0,0,0,0)
end return res
return _Overlay(xc,v,...)
end end
end end
end end
function cm.RegisterMergedDelayedEvent_ToSingleCard(c,code,events)
local g=Group.CreateGroup()
g:KeepAlive()
local g2=Group.CreateGroup()
g2:KeepAlive()
local mt=getmetatable(c)
local seed=0
if type(events) == "table" then
for _, event in ipairs(events) do
seed = seed + event
end
else
seed = events
end
while(mt[seed]==true)
do
seed = seed + 1
end
mt[seed]=true
local event_code_single = (code ~ (seed << 16)) | EVENT_CUSTOM
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e1:SetCode(events)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_SET_AVAILABLE)
e1:SetRange(0xff)
e1:SetLabel(event_code_single)
e1:SetOperation(function(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetOwner()
g:Merge(eg:Filter(cm.cfilter,nil))
g2:Merge(eg:Filter(cm.cfilter2,nil))
if Duel.CheckEvent(EVENT_MOVE) then
_,meg=Duel.CheckEvent(EVENT_MOVE,true)
local c=e:GetOwner()
if meg:IsContains(c) and (c:IsFaceup() or c:IsPublic()) then
g:Clear()
g2:Clear()
end
end
if Duel.GetCurrentChain()==0 and not Duel.CheckEvent(EVENT_CHAIN_END) then
local _eg=g:Clone()
local _eg2=g2:Clone()
if #g>0 and #g2>0 then
Duel.RaiseEvent(_eg+_eg2,e:GetLabel()+2,re,r,rp,ep,ev)
elseif #g>0 then
Duel.RaiseEvent(_eg,e:GetLabel(),re,r,rp,ep,ev)
elseif #g2>0 then
Duel.RaiseEvent(_eg2,e:GetLabel()+1,re,r,rp,ep,ev)
end
g:Clear()
g2:Clear()
end
end)
c:RegisterEffect(e1)
local e2=e1:Clone()
e2:SetCode(EVENT_CHAIN_END)
e2:SetOperation(function(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetOwner()
if Duel.CheckEvent(EVENT_MOVE) then
_,meg=Duel.CheckEvent(EVENT_MOVE,true)
local c=e:GetOwner()
if meg:IsContains(c) and (c:IsFaceup() or c:IsPublic()) then
g:Clear()
g2:Clear()
end
end
local _eg=g:Clone()
local _eg2=g2:Clone()
if #g>0 and #g2>0 then
Duel.RaiseEvent(_eg+_eg2,e:GetLabel()+2,re,r,rp,ep,ev)
elseif #g>0 then
Duel.RaiseEvent(_eg,e:GetLabel(),re,r,rp,ep,ev)
elseif #g2>0 then
Duel.RaiseEvent(_eg2,e:GetLabel()+1,re,r,rp,ep,ev)
end
g:Clear()
g2:Clear()
end)
c:RegisterEffect(e2)
--listened to again
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
e3:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_SET_AVAILABLE)
e3:SetCode(EVENT_MOVE)
e3:SetOperation(function(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetOwner()
if c:IsFaceup() or c:IsPublic() then
g:Clear()
g2:Clear()
end
end)
c:RegisterEffect(e3)
return event_code_single
end
function cm.filter(c) function cm.filter(c)
return c:IsType(TYPE_FLIP) and c:IsAbleToHand() return c:IsType(TYPE_FLIP) and c:IsAbleToHand()
end end
......
...@@ -51,7 +51,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -51,7 +51,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
local g=eg:Filter(cm.repfilter,c,tp) local g=eg:Filter(cm.repfilter,c,tp)
if Duel.GetFlagEffect(tp,m)~=0 then return false end if Duel.GetFlagEffect(tp,m)~=0 then return false end
if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end
if not Duel.SelectYesNo(tp,aux.Stringid(m,0)) then return false end if not Duel.SelectEffectYesNo(tp,c,aux.Stringid(m,0)) then return false end
Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1)
if #g>1 then if #g>1 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD)
...@@ -91,7 +91,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -91,7 +91,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
end end
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,3)) e1:SetDescription(aux.Stringid(m,3))
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e1:SetType(EFFECT_TYPE_FIELD)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT) e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT)
e1:SetTargetRange(1,0) e1:SetTargetRange(1,0)
e1:SetReset(RESET_PHASE+PHASE_END) e1:SetReset(RESET_PHASE+PHASE_END)
...@@ -152,6 +152,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -152,6 +152,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk)
aux.PendulumChecklist=_PendulumChecklist aux.PendulumChecklist=_PendulumChecklist
return res return res
end end
e:GetHandler():ClearEffectRelation()
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0) Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0)
end end
function cm.pspop(e,tp,eg,ep,ev,re,r,rp) function cm.pspop(e,tp,eg,ep,ev,re,r,rp)
......
...@@ -51,7 +51,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -51,7 +51,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
local g=eg:Filter(cm.repfilter,c,tp) local g=eg:Filter(cm.repfilter,c,tp)
if Duel.GetFlagEffect(tp,m)~=0 then return false end if Duel.GetFlagEffect(tp,m)~=0 then return false end
if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end
if not Duel.SelectYesNo(tp,aux.Stringid(m,0)) then return false end if not Duel.SelectEffectYesNo(tp,c,aux.Stringid(m,0)) then return false end
Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1)
if #g>1 then if #g>1 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD)
...@@ -91,7 +91,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -91,7 +91,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
end end
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,3)) e1:SetDescription(aux.Stringid(m,3))
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e1:SetType(EFFECT_TYPE_FIELD)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT) e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT)
e1:SetTargetRange(1,0) e1:SetTargetRange(1,0)
e1:SetReset(RESET_PHASE+PHASE_END) e1:SetReset(RESET_PHASE+PHASE_END)
...@@ -152,6 +152,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -152,6 +152,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk)
aux.PendulumChecklist=_PendulumChecklist aux.PendulumChecklist=_PendulumChecklist
return res return res
end end
e:GetHandler():ClearEffectRelation()
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0) Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0)
end end
function cm.pspop(e,tp,eg,ep,ev,re,r,rp) function cm.pspop(e,tp,eg,ep,ev,re,r,rp)
......
...@@ -52,7 +52,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -52,7 +52,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
local g=eg:Filter(cm.repfilter,c,tp) local g=eg:Filter(cm.repfilter,c,tp)
if Duel.GetFlagEffect(tp,m)~=0 then return false end if Duel.GetFlagEffect(tp,m)~=0 then return false end
if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end
if not Duel.SelectYesNo(tp,aux.Stringid(m,0)) then return false end if not Duel.SelectEffectYesNo(tp,c,aux.Stringid(m,0)) then return false end
Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1)
if #g>1 then if #g>1 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD)
...@@ -92,7 +92,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -92,7 +92,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
end end
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,3)) e1:SetDescription(aux.Stringid(m,3))
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e1:SetType(EFFECT_TYPE_FIELD)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT) e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT)
e1:SetTargetRange(1,0) e1:SetTargetRange(1,0)
e1:SetReset(RESET_PHASE+PHASE_END) e1:SetReset(RESET_PHASE+PHASE_END)
...@@ -153,6 +153,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -153,6 +153,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk)
aux.PendulumChecklist=_PendulumChecklist aux.PendulumChecklist=_PendulumChecklist
return res return res
end end
e:GetHandler():ClearEffectRelation()
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0) Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0)
end end
function cm.pspop(e,tp,eg,ep,ev,re,r,rp) function cm.pspop(e,tp,eg,ep,ev,re,r,rp)
......
...@@ -51,7 +51,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -51,7 +51,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
local g=eg:Filter(cm.repfilter,c,tp) local g=eg:Filter(cm.repfilter,c,tp)
if Duel.GetFlagEffect(tp,m)~=0 then return false end if Duel.GetFlagEffect(tp,m)~=0 then return false end
if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end
if not Duel.SelectYesNo(tp,aux.Stringid(m,0)) then return false end if not Duel.SelectEffectYesNo(tp,c,aux.Stringid(m,0)) then return false end
Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1)
if #g>1 then if #g>1 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD)
...@@ -91,7 +91,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -91,7 +91,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
end end
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,3)) e1:SetDescription(aux.Stringid(m,3))
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e1:SetType(EFFECT_TYPE_FIELD)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT) e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT)
e1:SetTargetRange(1,0) e1:SetTargetRange(1,0)
e1:SetReset(RESET_PHASE+PHASE_END) e1:SetReset(RESET_PHASE+PHASE_END)
...@@ -152,6 +152,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -152,6 +152,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk)
aux.PendulumChecklist=_PendulumChecklist aux.PendulumChecklist=_PendulumChecklist
return res return res
end end
e:GetHandler():ClearEffectRelation()
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0) Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0)
end end
function cm.pspop(e,tp,eg,ep,ev,re,r,rp) function cm.pspop(e,tp,eg,ep,ev,re,r,rp)
......
...@@ -50,7 +50,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -50,7 +50,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
local g=eg:Filter(cm.repfilter,c,tp) local g=eg:Filter(cm.repfilter,c,tp)
if Duel.GetFlagEffect(tp,m)~=0 then return false end if Duel.GetFlagEffect(tp,m)~=0 then return false end
if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end
if not Duel.SelectYesNo(tp,aux.Stringid(m,0)) then return false end if not Duel.SelectEffectYesNo(tp,c,aux.Stringid(m,0)) then return false end
Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1)
if #g>1 then if #g>1 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD)
...@@ -90,7 +90,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -90,7 +90,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
end end
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,3)) e1:SetDescription(aux.Stringid(m,3))
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e1:SetType(EFFECT_TYPE_FIELD)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT) e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT)
e1:SetTargetRange(1,0) e1:SetTargetRange(1,0)
e1:SetReset(RESET_PHASE+PHASE_END) e1:SetReset(RESET_PHASE+PHASE_END)
...@@ -151,6 +151,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -151,6 +151,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk)
aux.PendulumChecklist=_PendulumChecklist aux.PendulumChecklist=_PendulumChecklist
return res return res
end end
e:GetHandler():ClearEffectRelation()
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0) Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0)
end end
function cm.pspop(e,tp,eg,ep,ev,re,r,rp) function cm.pspop(e,tp,eg,ep,ev,re,r,rp)
......
...@@ -50,7 +50,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -50,7 +50,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
local g=eg:Filter(cm.repfilter,c,tp) local g=eg:Filter(cm.repfilter,c,tp)
if Duel.GetFlagEffect(tp,m)~=0 then return false end if Duel.GetFlagEffect(tp,m)~=0 then return false end
if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end
if not Duel.SelectYesNo(tp,aux.Stringid(m,0)) then return false end if not Duel.SelectEffectYesNo(tp,c,aux.Stringid(m,0)) then return false end
Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1)
if #g>1 then if #g>1 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD)
...@@ -90,7 +90,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -90,7 +90,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
end end
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,3)) e1:SetDescription(aux.Stringid(m,3))
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e1:SetType(EFFECT_TYPE_FIELD)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT) e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT)
e1:SetTargetRange(1,0) e1:SetTargetRange(1,0)
e1:SetReset(RESET_PHASE+PHASE_END) e1:SetReset(RESET_PHASE+PHASE_END)
...@@ -151,6 +151,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -151,6 +151,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk)
aux.PendulumChecklist=_PendulumChecklist aux.PendulumChecklist=_PendulumChecklist
return res return res
end end
e:GetHandler():ClearEffectRelation()
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0) Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0)
end end
function cm.pspop(e,tp,eg,ep,ev,re,r,rp) function cm.pspop(e,tp,eg,ep,ev,re,r,rp)
......
...@@ -134,7 +134,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -134,7 +134,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
local g=eg:Filter(cm.repfilter,c,tp) local g=eg:Filter(cm.repfilter,c,tp)
if Duel.GetFlagEffect(tp,m)~=0 then return false end if Duel.GetFlagEffect(tp,m)~=0 then return false end
if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end if g:IsExists(Card.IsOnField,1,nil) then Duel.HintSelection(g) end
if not Duel.SelectYesNo(tp,aux.Stringid(m,0)) then return false end if not Duel.SelectEffectYesNo(tp,c,aux.Stringid(m,0)) then return false end
Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1)
if #g>1 then if #g>1 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD)
...@@ -174,7 +174,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -174,7 +174,7 @@ function cm.reptg(e,tp,eg,ep,ev,re,r,rp,chk)
end end
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,3)) e1:SetDescription(aux.Stringid(m,3))
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e1:SetType(EFFECT_TYPE_FIELD)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT) e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CLIENT_HINT)
e1:SetTargetRange(1,0) e1:SetTargetRange(1,0)
e1:SetReset(RESET_PHASE+PHASE_END) e1:SetReset(RESET_PHASE+PHASE_END)
...@@ -235,6 +235,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -235,6 +235,7 @@ function cm.psptg(e,tp,eg,ep,ev,re,r,rp,chk)
aux.PendulumChecklist=_PendulumChecklist aux.PendulumChecklist=_PendulumChecklist
return res return res
end end
e:GetHandler():ClearEffectRelation()
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0) Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,0,0)
end end
function cm.pspop(e,tp,eg,ep,ev,re,r,rp) function cm.pspop(e,tp,eg,ep,ev,re,r,rp)
......
...@@ -60,7 +60,7 @@ function cm.regop(e,tp,eg,ep,ev,re,r,rp) ...@@ -60,7 +60,7 @@ function cm.regop(e,tp,eg,ep,ev,re,r,rp)
local e4=e0:Clone() local e4=e0:Clone()
e4:SetType(EFFECT_TYPE_QUICK_F) e4:SetType(EFFECT_TYPE_QUICK_F)
e4:SetCondition(cm.spcon3) e4:SetCondition(cm.spcon3)
Duel.RegisterEffect(e4,tp) --Duel.RegisterEffect(e4,tp)
end end
function cm.valcheck(e,c) function cm.valcheck(e,c)
local g=c:GetMaterial() local g=c:GetMaterial()
...@@ -91,6 +91,7 @@ function cm.filter2(c,e,tp,mc) ...@@ -91,6 +91,7 @@ function cm.filter2(c,e,tp,mc)
end end
function cm.sptg(e,tp,eg,ep,ev,re,r,rp,chk) function cm.sptg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsExistingMatchingCard(cm.filter1,tp,LOCATION_MZONE,0,1,nil,e,tp) end if chk==0 then return Duel.IsExistingMatchingCard(cm.filter1,tp,LOCATION_MZONE,0,1,nil,e,tp) end
e:GetHandler():ClearEffectRelation()
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_EXTRA) Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_EXTRA)
end end
function cm.spop(e,tp,eg,ep,ev,re,r,rp) function cm.spop(e,tp,eg,ep,ev,re,r,rp)
......
...@@ -265,6 +265,7 @@ function cm.thtg2(e,tp,eg,ep,ev,re,r,rp,chk,chkc) ...@@ -265,6 +265,7 @@ function cm.thtg2(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
local c=e:GetHandler() local c=e:GetHandler()
if chkc then return false end if chkc then return false end
if chk==0 then return true end if chk==0 then return true end
e:GetHandler():ClearEffectRelation()
local te=e:GetLabelObject() local te=e:GetLabelObject()
e:SetTarget(aux.FALSE) e:SetTarget(aux.FALSE)
te:SetTarget(aux.FALSE) te:SetTarget(aux.FALSE)
......
...@@ -29,42 +29,42 @@ function cm.initial_effect(c) ...@@ -29,42 +29,42 @@ function cm.initial_effect(c)
e2:SetOperation(cm.op) e2:SetOperation(cm.op)
c:RegisterEffect(e2) c:RegisterEffect(e2)
-- --
local custom_code=cm.RegisterMergedDelayedEvent_ToSingleCard(c,m,{EVENT_MOVE,EVENT_LEAVE_FIELD,EVENT_CUSTOM+m+1})
local e3=Effect.CreateEffect(c) local e3=Effect.CreateEffect(c)
e3:SetDescription(aux.Stringid(m,1)) e3:SetDescription(aux.Stringid(m,1))
e3:SetCategory(CATEGORY_SEARCH+CATEGORY_TOHAND) e3:SetCategory(CATEGORY_SEARCH+CATEGORY_TOHAND)
e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_F) e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_F)
e3:SetCode(EVENT_MOVE) e3:SetCode(custom_code)
e3:SetRange(LOCATION_MZONE) e3:SetRange(LOCATION_MZONE)
e3:SetProperty(EFFECT_FLAG_DELAY) e3:SetProperty(EFFECT_FLAG_DELAY)
e3:SetCondition(cm.sumcon) e3:SetCountLimit(1,EFFECT_COUNT_CODE_CHAIN)
--e3:SetCondition(cm.sumcon)
e3:SetTarget(cm.sumtg) e3:SetTarget(cm.sumtg)
e3:SetOperation(cm.sumop1) e3:SetOperation(cm.sumop1)
c:RegisterEffect(e3) c:RegisterEffect(e3)
local e4=e3:Clone() local e4=e3:Clone()
e4:SetDescription(aux.Stringid(m,2)) e4:SetDescription(aux.Stringid(m,2))
e4:SetCode(EVENT_LEAVE_FIELD) e4:SetCode(custom_code+1)
e4:SetCondition(aux.TRUE) --cm.sumcon2) --e4:SetCondition(aux.TRUE) --cm.sumcon2)
e4:SetOperation(cm.sumop2) e4:SetOperation(cm.sumop2)
c:RegisterEffect(e4) c:RegisterEffect(e4)
local e5=e3:Clone() local e5=e3:Clone()
e5:SetCode(custom_code+2)
e5:SetDescription(aux.Stringid(m,3)) e5:SetDescription(aux.Stringid(m,3))
e5:SetCondition(cm.sumcon3) --e5:SetCondition(cm.sumcon3)
e5:SetOperation(cm.sumop) e5:SetOperation(cm.sumop)
c:RegisterEffect(e5) c:RegisterEffect(e5)
local e6=e3:Clone()
e6:SetCode(EVENT_CUSTOM+m+1)
c:RegisterEffect(e6)
if not cm.global_check then if not cm.global_check then
cm.global_check=true cm.global_check=true
local _Overlay=Duel.Overlay local _Overlay=Duel.Overlay
function Duel.Overlay(xc,v,...) function Duel.Overlay(xc,v,...)
local t=Auxiliary.GetValueType(v) local t=Auxiliary.GetValueType(v)
local g=Group.CreateGroup() local g=Group.CreateGroup()
if t=="Card" then g:AddCard(v) else g=v end if t=="Card" then g:AddCard(v) else g=v end
local res=_Overlay(xc,v,...) local res=_Overlay(xc,v,...)
Duel.RaiseEvent(g,EVENT_CUSTOM+m+1,e1,0,0,0,0) Duel.RaiseEvent(g,EVENT_CUSTOM+m+1,e1,0,0,0,0)
return res return res
end end
local ge2=Effect.CreateEffect(c) local ge2=Effect.CreateEffect(c)
ge2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) ge2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
ge2:SetCode(EVENT_CHAIN_ACTIVATING) ge2:SetCode(EVENT_CHAIN_ACTIVATING)
...@@ -73,6 +73,106 @@ function cm.initial_effect(c) ...@@ -73,6 +73,106 @@ function cm.initial_effect(c)
Duel.RegisterEffect(ge2,0) Duel.RegisterEffect(ge2,0)
end end
end end
function cm.RegisterMergedDelayedEvent_ToSingleCard(c,code,events)
local g=Group.CreateGroup()
g:KeepAlive()
local g2=Group.CreateGroup()
g2:KeepAlive()
local mt=getmetatable(c)
local seed=0
if type(events) == "table" then
for _, event in ipairs(events) do
seed = seed + event
end
else
seed = events
end
while(mt[seed]==true)
do
seed = seed + 1
end
mt[seed]=true
local event_code_single = (code ~ (seed << 16)) | EVENT_CUSTOM
for _, event in ipairs(events) do
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e1:SetCode(event)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_SET_AVAILABLE)
e1:SetRange(0xff)
e1:SetLabel(event_code_single)
e1:SetOperation(function(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetOwner()
if e:GetCode()==EVENT_MOVE then
g:Merge(eg:Filter(cm.cfilter,nil))
elseif e:GetCode()==EVENT_LEAVE_FIELD then
g2:Merge(eg)
else
g:Merge(eg)
end
if Duel.CheckEvent(EVENT_MOVE) then
_,meg=Duel.CheckEvent(EVENT_MOVE,true)
local c=e:GetOwner()
if meg:IsContains(c) and (c:IsFaceup() or c:IsPublic()) then
g:Clear()
g2:Clear()
end
end
if Duel.GetCurrentChain()==0 and not Duel.CheckEvent(EVENT_CHAIN_END) and not g:IsExists(Card.IsStatus,1,nil,STATUS_ACT_FROM_HAND) then
local _eg=g:Clone()
local _eg2=g2:Clone()
if #g>0 and #g2>0 then
Duel.RaiseEvent(_eg+_eg2,e:GetLabel()+2,re,r,rp,ep,ev)
elseif #g>0 then
Duel.RaiseEvent(_eg,e:GetLabel(),re,r,rp,ep,ev)
elseif #g2>0 then
Duel.RaiseEvent(_eg2,e:GetLabel()+1,re,r,rp,ep,ev)
end
g:Clear()
g2:Clear()
end
end)
c:RegisterEffect(e1)
local e2=e1:Clone()
e2:SetCode(EVENT_CHAIN_END)
e2:SetOperation(function(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetOwner()
if Duel.CheckEvent(EVENT_MOVE) then
_,meg=Duel.CheckEvent(EVENT_MOVE,true)
local c=e:GetOwner()
if meg:IsContains(c) and (c:IsFaceup() or c:IsPublic()) then
g:Clear()
g2:Clear()
end
end
local _eg=g:Clone()
local _eg2=g2:Clone()
if #g>0 and #g2>0 then
Duel.RaiseEvent(_eg+_eg2,e:GetLabel()+2,re,r,rp,ep,ev)
elseif #g>0 then
Duel.RaiseEvent(_eg,e:GetLabel(),re,r,rp,ep,ev)
elseif #g2>0 then
Duel.RaiseEvent(_eg2,e:GetLabel()+1,re,r,rp,ep,ev)
end
g:Clear()
g2:Clear()
end)
c:RegisterEffect(e2)
end
--listened to again
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
e3:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_SET_AVAILABLE)
e3:SetCode(EVENT_MOVE)
e3:SetOperation(function(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetOwner()
if c:IsFaceup() or c:IsPublic() then
g:Clear()
g2:Clear()
end
end)
c:RegisterEffect(e3)
return event_code_single
end
function cm.chkop(e,tp,eg,ep,ev,re,r,rp) function cm.chkop(e,tp,eg,ep,ev,re,r,rp)
Duel.RaiseEvent(e:GetHandler(),EVENT_CUSTOM+m,e,r,rp,ep,ev) Duel.RaiseEvent(e:GetHandler(),EVENT_CUSTOM+m,e,r,rp,ep,ev)
end end
......
...@@ -7,7 +7,7 @@ function cm.initial_effect(c) ...@@ -7,7 +7,7 @@ function cm.initial_effect(c)
e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_F) e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_F)
e3:SetCode(EVENT_LEAVE_DECK) e3:SetCode(EVENT_LEAVE_DECK)
e3:SetRange(LOCATION_MZONE) e3:SetRange(LOCATION_MZONE)
e3:SetCountLimit(1,EFFECT_COUNT_CODE_CHAIN) --e3:SetCountLimit(1,EFFECT_COUNT_CODE_CHAIN)
e3:SetProperty(EFFECT_FLAG_DELAY) e3:SetProperty(EFFECT_FLAG_DELAY)
e3:SetCondition(cm.sumcon) e3:SetCondition(cm.sumcon)
e3:SetTarget(cm.sumtg) e3:SetTarget(cm.sumtg)
......
...@@ -27,6 +27,12 @@ function c21692415.initial_effect(c) ...@@ -27,6 +27,12 @@ function c21692415.initial_effect(c)
e3:SetTarget(c21692415.syptg) e3:SetTarget(c21692415.syptg)
e3:SetOperation(c21692415.sypop) e3:SetOperation(c21692415.sypop)
c:RegisterEffect(e3) c:RegisterEffect(e3)
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_SINGLE)
e4:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e4:SetCode(21692415)
e4:SetRange(LOCATION_MZONE)
c:RegisterEffect(e4)
end end
c21692415.SetCard_ZW_ShLight=true c21692415.SetCard_ZW_ShLight=true
function c21692415.costfilter(c) function c21692415.costfilter(c)
...@@ -67,7 +73,36 @@ function c21692415.sypop(e,tp,eg,ep,ev,re,r,rp) ...@@ -67,7 +73,36 @@ function c21692415.sypop(e,tp,eg,ep,ev,re,r,rp)
end end
end end
end end
local _SynMixCheckGoal=Auxiliary.SynMixCheckGoal
function Auxiliary.SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat,gc,mgchk)
if ct<minc then return false end
local g=sg:Clone()
g:Merge(sg1)
if Duel.GetLocationCountFromEx(tp,tp,g,syncard)<=0 then return false end
if gc and not gc(g) then return false end
if smat and not g:IsContains(smat) then return false end
if not Auxiliary.MustMaterialCheck(g,tp,EFFECT_MUST_BE_SMATERIAL) then return false end
if Duel.IsPlayerAffectedByEffect(tp,8173184)
and not g:IsExists(Auxiliary.Tuner(Card.IsSetCard,0x2),1,nil,syncard) then return false end
if not g:CheckWithSumEqual(Card.GetSynchroLevel,syncard:GetLevel(),g:GetCount(),g:GetCount(),syncard)
and (not g:IsExists(Card.IsHasEffect,1,nil,21692415)
or not g:CheckWithSumEqual(function(c) return c:IsHasEffect(21692415)~=nil and c:GetSynchroLevel(syncard) or 2 end,syncard:GetLevel(),g:GetCount(),g:GetCount(),syncard))
and (not g:IsExists(Card.IsHasEffect,1,nil,89818984)
or not g:CheckWithSumEqual(Auxiliary.GetSynchroLevelFlowerCardian,syncard:GetLevel(),g:GetCount(),g:GetCount(),syncard))
then return false end
if not (mgchk or Auxiliary.SynMixHandCheck(g,tp,syncard)) then return false end
for c in Auxiliary.Next(g) do
local le,lf,lloc,lmin,lmax=c:GetTunerLimit()
if le then
local lct=g:GetCount()-1
if lloc then
local llct=g:FilterCount(Card.IsLocation,c,lloc)
if llct~=lct then return false end
end
if lf and g:IsExists(Auxiliary.SynLimitFilter,1,c,lf,le,syncard) then return false end
if (lmin and lct<lmin) or (lmax and lct>lmax) then return false end
end
end
if (g:IsExists(Card.IsHasEffect,1,nil,21692415) and g:CheckWithSumEqual(function(c) return c:IsHasEffect(21692415)~=nil and c:GetSynchroLevel(syncard) or 2 end,syncard:GetLevel(),g:GetCount(),g:GetCount(),syncard)) then return true end
return _SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat,gc,mgchk)
end
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment