Commit 8bb4bcb5 authored by POLYMER's avatar POLYMER

fix

parent 209dfbda
...@@ -2,11 +2,12 @@ ...@@ -2,11 +2,12 @@
local cm,m=GetID() local cm,m=GetID()
function cm.initial_effect(c) function cm.initial_effect(c)
--effect1 --effect1
local custom_code=cm.RegisterMergedEvent_ToSingleCard(c,m,EVENT_TO_GRAVE)
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,1)) e1:SetDescription(aux.Stringid(m,1))
e1:SetCategory(CATEGORY_SPECIAL_SUMMON) e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O) e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
e1:SetCode(EVENT_TO_GRAVE) e1:SetCode(custom_code)
e1:SetRange(LOCATION_HAND) e1:SetRange(LOCATION_HAND)
e1:SetProperty(EFFECT_FLAG_DELAY) e1:SetProperty(EFFECT_FLAG_DELAY)
e1:SetCountLimit(2,m) e1:SetCountLimit(2,m)
...@@ -14,12 +15,17 @@ function cm.initial_effect(c) ...@@ -14,12 +15,17 @@ function cm.initial_effect(c)
e1:SetTarget(cm.sptg) e1:SetTarget(cm.sptg)
e1:SetOperation(cm.spop) e1:SetOperation(cm.spop)
c:RegisterEffect(e1) c:RegisterEffect(e1)
--[[local e1x=e1:Clone()
e1x:SetCode(EVENT_TO_GRAVE)
e1x:SetCondition(aux.FALSE)
c:RegisterEffect(e1x)--]]
--effect2 --effect2
local custom_code2=cm.RegisterMergedEvent_ToSingleCard(c,m,EVENT_TO_HAND)
local e2=Effect.CreateEffect(c) local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(m,2)) e2:SetDescription(aux.Stringid(m,2))
e2:SetCategory(CATEGORY_TOHAND+CATEGORY_SEARCH) e2:SetCategory(CATEGORY_TOHAND+CATEGORY_SEARCH)
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O) e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
e2:SetCode(EVENT_TO_HAND) e2:SetCode(custom_code2)
e2:SetRange(LOCATION_MZONE) e2:SetRange(LOCATION_MZONE)
e2:SetProperty(EFFECT_FLAG_DELAY) e2:SetProperty(EFFECT_FLAG_DELAY)
e2:SetCountLimit(2,m) e2:SetCountLimit(2,m)
...@@ -39,9 +45,113 @@ function cm.initial_effect(c) ...@@ -39,9 +45,113 @@ function cm.initial_effect(c)
e6:SetValue(0x6d) e6:SetValue(0x6d)
c:RegisterEffect(e6) c:RegisterEffect(e6)
end end
function cm.RegisterMergedEvent_ToSingleCard(c,code,events)
local g=Group.CreateGroup()
g: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
if type(events) == "table" then
for _, event in ipairs(events) do
cm.RegisterMergedEvent_ToSingleCard_AddOperation(c,g,event,event_code_single)
end
else
cm.RegisterMergedEvent_ToSingleCard_AddOperation(c,g,events,event_code_single)
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:SetLabelObject(g)
e3:SetOperation(cm.ThisCardMovedToPublicResetCheck_ToSingleCard)
c:RegisterEffect(e3)
return event_code_single
end
function cm.RegisterMergedEvent_ToSingleCard_AddOperation(c,g,event,event_code_single)
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:SetLabelObject(g)
e1:SetOperation(cm.MergedDelayEventCheck1_ToSingleCard)
c:RegisterEffect(e1)
--[[local _GetCode=Effect.GetCode
function Effect.GetCode(e,...)
return _GetCode(e,...)==event_code_single and event or _GetCode(e,...)
end--]]
local ec={
EVENT_CHAIN_ACTIVATING,
EVENT_CHAINING,
EVENT_ATTACK_ANNOUNCE,
EVENT_BREAK_EFFECT,
EVENT_CHAIN_SOLVING,
EVENT_CHAIN_SOLVED,
EVENT_CHAIN_END,
EVENT_SUMMON,
EVENT_SPSUMMON
}
for _,code in ipairs(ec) do
local ce=e1:Clone()
ce:SetCode(code)
ce:SetOperation(cm.MergedDelayEventCheck2_ToSingleCard)
c:RegisterEffect(ce)
end
end
function cm.MergedDelayEventCheck1_ToSingleCard(e,tp,eg,ep,ev,re,r,rp)
local g=e:GetLabelObject()
local c=e:GetOwner()
g:Merge(eg)
if Duel.CheckEvent(EVENT_MOVE) then
local _,meg=Duel.CheckEvent(EVENT_MOVE,true)
if meg:IsContains(c) and (c:IsFaceup() or c:IsPublic()) then
g:Clear()
end
end
if Duel.GetCurrentChain()==0 and #g>0 then
local _eg=g:Clone()
Duel.RaiseEvent(_eg,e:GetLabel(),re,r,rp,ep,ev)
g:Clear()
end
end
function cm.MergedDelayEventCheck2_ToSingleCard(e,tp,eg,ep,ev,re,r,rp)
local g=e:GetLabelObject()
if Duel.CheckEvent(EVENT_MOVE) then
local _,meg=Duel.CheckEvent(EVENT_MOVE,true)
local c=e:GetOwner()
if meg:IsContains(c) and (c:IsFaceup() or c:IsPublic()) then
g:Clear()
end
end
if #g>0 then
local _eg=g:Clone()
Duel.RaiseEvent(_eg,e:GetLabel(),re,r,rp,ep,ev)
g:Clear()
end
end
function cm.ThisCardMovedToPublicResetCheck_ToSingleCard(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetOwner()
local g=e:GetLabelObject()
if c:IsFaceup() or c:IsPublic() then
g:Clear()
end
end
function cm.spcon(e,tp,eg,ep,ev,re,r,rp) function cm.spcon(e,tp,eg,ep,ev,re,r,rp)
local num=eg:FilterCount(Card.IsType,nil,TYPE_MONSTER) local num=eg:FilterCount(Card.IsType,nil,TYPE_MONSTER)
return rp==1-tp and num>=1 return num>=1 and rp==1-tp
end end
function cm.tgfilter(c) function cm.tgfilter(c)
return c:IsType(TYPE_MONSTER) and c:IsLocation(LOCATION_GRAVE) return c:IsType(TYPE_MONSTER) and c:IsLocation(LOCATION_GRAVE)
......
...@@ -16,7 +16,7 @@ function cm.initial_effect(c) ...@@ -16,7 +16,7 @@ function cm.initial_effect(c)
--effect2 --effect2
local e2=Effect.CreateEffect(c) local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(m,2)) e2:SetDescription(aux.Stringid(m,2))
e2:SetCategory(CATEGORY_SPECIAL_SUMMON) e2:SetCategory(CATEGORY_TOHAND)
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O) e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
e2:SetCode(EVENT_CHAIN_SOLVED) e2:SetCode(EVENT_CHAIN_SOLVED)
e2:SetRange(LOCATION_GRAVE) e2:SetRange(LOCATION_GRAVE)
...@@ -112,7 +112,7 @@ function cm.ngtg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -112,7 +112,7 @@ function cm.ngtg(e,tp,eg,ep,ev,re,r,rp,chk)
Duel.SetOperationInfo(0,CATEGORY_NEGATE,nil,1,0,0) Duel.SetOperationInfo(0,CATEGORY_NEGATE,nil,1,0,0)
end end
function cm.ngop(e,tp,eg,ep,ev,re,r,rp) function cm.ngop(e,tp,eg,ep,ev,re,r,rp)
if not e:GetHandler():IsRelateToEffect(e) then return end --if not e:GetHandler():IsRelateToEffect(e) then return end
local list={} local list={}
for i=1,ev do for i=1,ev do
local te,tgp=Duel.GetChainInfo(i,CHAININFO_TRIGGERING_EFFECT,CHAININFO_TRIGGERING_PLAYER) local te,tgp=Duel.GetChainInfo(i,CHAININFO_TRIGGERING_EFFECT,CHAININFO_TRIGGERING_PLAYER)
...@@ -122,7 +122,7 @@ function cm.ngop(e,tp,eg,ep,ev,re,r,rp) ...@@ -122,7 +122,7 @@ function cm.ngop(e,tp,eg,ep,ev,re,r,rp)
Duel.Hint(HINT_SELECTMSG,tp,aux.Stringid(m,1)) Duel.Hint(HINT_SELECTMSG,tp,aux.Stringid(m,1))
local num=Duel.AnnounceNumber(tp,table.unpack(list)) local num=Duel.AnnounceNumber(tp,table.unpack(list))
local te=Duel.GetChainInfo(num,CHAININFO_TRIGGERING_EFFECT) local te=Duel.GetChainInfo(num,CHAININFO_TRIGGERING_EFFECT)
if Duel.NegateActivation(num) and te:GetHandler():IsDestructable() and e:GetHandler():IsRelateToEffect(e) then if Duel.NegateActivation(num) and te:GetHandler():IsRelateToEffect(te) and te:GetHandler():IsDestructable() and e:GetHandler():IsRelateToEffect(e) then
local dg=Group.FromCards(e:GetHandler(),te:GetHandler()) local dg=Group.FromCards(e:GetHandler(),te:GetHandler())
Duel.Destroy(dg,REASON_EFFECT) Duel.Destroy(dg,REASON_EFFECT)
end end
...@@ -139,7 +139,7 @@ end ...@@ -139,7 +139,7 @@ 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)
local c=e:GetHandler() local c=e:GetHandler()
local num=e:GetLabel() local num=e:GetLabel()
if chk==0 then return (num>=2 or (Duel.IsPlayerAffectedByEffect(tp,11451482) and num>=1)) and not Duel.IsPlayerAffectedByEffect(tp,59822133) and Duel.GetLocationCount(tp,LOCATION_MZONE)>1 and c:IsCanBeSpecialSummoned(e,0,tp,false,false) and Duel.IsExistingMatchingCard(cm.spfilter,tp,LOCATION_HAND,0,1,nil,e,tp) and c:GetFlagEffect(m)==0 end if chk==0 then return (num>=2 or (Duel.IsPlayerAffectedByEffect(tp,11451482) and num>=1)) and c:IsAbleToHand() and Duel.IsExistingMatchingCard(Card.IsAbleToHand,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,1,nil) end --and not Duel.IsPlayerAffectedByEffect(tp,59822133) and Duel.GetLocationCount(tp,LOCATION_MZONE)>1 and c:IsCanBeSpecialSummoned(e,0,tp,false,false) and Duel.IsExistingMatchingCard(cm.spfilter,tp,LOCATION_HAND,0,1,nil,e,tp) and c:GetFlagEffect(m)==0 end
c:RegisterFlagEffect(m,RESET_EVENT+RESETS_STANDARD+RESET_CHAIN,0,1) c:RegisterFlagEffect(m,RESET_EVENT+RESETS_STANDARD+RESET_CHAIN,0,1)
if Duel.IsPlayerAffectedByEffect(tp,11451482) then if Duel.IsPlayerAffectedByEffect(tp,11451482) then
if num>=2 then if num>=2 then
...@@ -154,15 +154,24 @@ function cm.sptg(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -154,15 +154,24 @@ function cm.sptg(e,tp,eg,ep,ev,re,r,rp,chk)
Duel.ResetFlagEffect(tp,11451481) Duel.ResetFlagEffect(tp,11451481)
end end
end end
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,2,tp,LOCATION_HAND+LOCATION_GRAVE) Duel.SetOperationInfo(0,CATEGORY_TOHAND,e:GetHandler(),2,PLAYER_ALL,LOCATION_ONFIELD+c:GetLocation())
--Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,2,tp,LOCATION_HAND+LOCATION_GRAVE)
end end
function cm.spop(e,tp,eg,ep,ev,re,r,rp) function cm.spop(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler() local c=e:GetHandler()
if not c:IsRelateToEffect(e) then return end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RTOHAND)
local g=Duel.SelectMatchingCard(tp,Card.IsAbleToHand,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,1,1,nil)
local tc=g:GetFirst()
if not tc then return end
local rg=Group.FromCards(c,tc)
Duel.SendtoHand(rg,nil,REASON_EFFECT)
--[[local c=e:GetHandler()
if Duel.IsPlayerAffectedByEffect(tp,59822133) or Duel.GetLocationCount(tp,LOCATION_MZONE)<2 or not c:IsRelateToEffect(e) or not c:IsCanBeSpecialSummoned(e,0,tp,false,false) then return end if Duel.IsPlayerAffectedByEffect(tp,59822133) or Duel.GetLocationCount(tp,LOCATION_MZONE)<2 or not c:IsRelateToEffect(e) or not c:IsCanBeSpecialSummoned(e,0,tp,false,false) then return end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON)
local g=Duel.SelectMatchingCard(tp,cm.spfilter,tp,LOCATION_HAND,0,1,1,nil,e,tp) local g=Duel.SelectMatchingCard(tp,cm.spfilter,tp,LOCATION_HAND,0,1,1,nil,e,tp)
if g:GetCount()>0 then if g:GetCount()>0 then
g:AddCard(c) g:AddCard(c)
Duel.SpecialSummon(g,0,tp,tp,false,false,POS_FACEUP) Duel.SpecialSummon(g,0,tp,tp,false,false,POS_FACEUP)
end end--]]
end end
\ No newline at end of file
--魔人★双子使徒 小雪 --魔人★双子使徒 小雪
local cm,m=GetID() local cm,m=GetID()
function cm.initial_effect(c) function cm.initial_effect(c)
Duel.EnableGlobalFlag(GLOBALFLAG_DETACH_EVENT) --Duel.EnableGlobalFlag(GLOBALFLAG_DETACH_EVENT)
--effect1 --effect1
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetCategory(CATEGORY_REMOVE) e1:SetCategory(CATEGORY_REMOVE)
...@@ -16,7 +16,7 @@ function cm.initial_effect(c) ...@@ -16,7 +16,7 @@ function cm.initial_effect(c)
local e3=Effect.CreateEffect(c) local e3=Effect.CreateEffect(c)
e3:SetDescription(aux.Stringid(m,1)) e3:SetDescription(aux.Stringid(m,1))
e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O) e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
e3:SetCode(EVENT_DETACH_MATERIAL) e3:SetCode(EVENT_TO_GRAVE)
e3:SetRange(LOCATION_GRAVE) e3:SetRange(LOCATION_GRAVE)
e3:SetProperty(EFFECT_FLAG_DELAY) e3:SetProperty(EFFECT_FLAG_DELAY)
e3:SetCountLimit(2,m) e3:SetCountLimit(2,m)
...@@ -84,10 +84,10 @@ function cm.reop(e,tp,eg,ep,ev,re,r,rp) ...@@ -84,10 +84,10 @@ function cm.reop(e,tp,eg,ep,ev,re,r,rp)
Duel.Remove(sg,POS_FACEUP,REASON_EFFECT) Duel.Remove(sg,POS_FACEUP,REASON_EFFECT)
end end
function cm.thfilter(c,tp) function cm.thfilter(c,tp)
return c:GetPreviousControler()==tp and c:IsPreviousLocation(LOCATION_OVERLAY) return c:IsPreviousLocation(LOCATION_OVERLAY) --and c:GetPreviousControler()==tp
end end
function cm.thcon(e,tp,eg,ep,ev,re,r,rp) function cm.thcon(e,tp,eg,ep,ev,re,r,rp)
return eg:IsExists(cm.thfilter,1,1,nil,tp) --and not eg:IsContains(e:GetHandler()) return eg:IsExists(cm.thfilter,1,1,nil,tp) and not eg:IsContains(e:GetHandler())
end end
function cm.thtg(e,tp,eg,ep,ev,re,r,rp,chk) function cm.thtg(e,tp,eg,ep,ev,re,r,rp,chk)
local g=Duel.GetFieldGroup(tp,0,LOCATION_ONFIELD) local g=Duel.GetFieldGroup(tp,0,LOCATION_ONFIELD)
......
...@@ -30,6 +30,24 @@ function cm.initial_effect(c) ...@@ -30,6 +30,24 @@ function cm.initial_effect(c)
ge4:SetLabelObject(ge3) ge4:SetLabelObject(ge3)
ge4:SetOperation(cm.checkop4) ge4:SetOperation(cm.checkop4)
Duel.RegisterEffect(ge4,0) Duel.RegisterEffect(ge4,0)
local ec={
EVENT_CHAIN_ACTIVATING,
EVENT_CHAINING,
EVENT_ATTACK_ANNOUNCE,
EVENT_BREAK_EFFECT,
EVENT_CHAIN_SOLVING,
EVENT_CHAIN_SOLVED,
EVENT_CHAIN_END,
EVENT_SUMMON,
EVENT_SPSUMMON
}
for _,code in ipairs(ec) do
local ce=ge3:Clone()
ce:SetCode(code)
ce:SetLabelObject(ge3)
ce:SetOperation(cm.checkop31)
Duel.RegisterEffect(ce,0)
end
end end
end end
function cm.checkop3(e,tp,eg,ep,ev,re,r,rp) function cm.checkop3(e,tp,eg,ep,ev,re,r,rp)
...@@ -37,7 +55,6 @@ function cm.checkop3(e,tp,eg,ep,ev,re,r,rp) ...@@ -37,7 +55,6 @@ function cm.checkop3(e,tp,eg,ep,ev,re,r,rp)
for tc in aux.Next(g) do for tc in aux.Next(g) do
tc:RegisterFlagEffect(m,RESET_EVENT+RESETS_STANDARD,0,1,e:GetLabel()) tc:RegisterFlagEffect(m,RESET_EVENT+RESETS_STANDARD,0,1,e:GetLabel())
end end
e:SetLabel(e:GetLabel()+1)
end end
function cm.checkop4(e,tp,eg,ep,ev,re,r,rp) function cm.checkop4(e,tp,eg,ep,ev,re,r,rp)
local te=e:GetLabelObject() local te=e:GetLabelObject()
...@@ -47,6 +64,10 @@ function cm.checkop4(e,tp,eg,ep,ev,re,r,rp) ...@@ -47,6 +64,10 @@ function cm.checkop4(e,tp,eg,ep,ev,re,r,rp)
end end
te:SetLabel(te:GetLabel()+1) te:SetLabel(te:GetLabel()+1)
end end
function cm.checkop31(e,tp,eg,ep,ev,re,r,rp)
local te=e:GetLabelObject()
te:SetLabel(te:GetLabel()+1)
end
function cm.fieldid(c) function cm.fieldid(c)
return c:GetFlagEffectLabel(m) or -1 return c:GetFlagEffectLabel(m) or -1
end end
......
...@@ -18,6 +18,24 @@ function cm.initial_effect(c) ...@@ -18,6 +18,24 @@ function cm.initial_effect(c)
ge3:SetCode(EVENT_TO_GRAVE) ge3:SetCode(EVENT_TO_GRAVE)
ge3:SetOperation(cm.checkop3) ge3:SetOperation(cm.checkop3)
Duel.RegisterEffect(ge3,0) Duel.RegisterEffect(ge3,0)
local ec={
EVENT_CHAIN_ACTIVATING,
EVENT_CHAINING,
EVENT_ATTACK_ANNOUNCE,
EVENT_BREAK_EFFECT,
EVENT_CHAIN_SOLVING,
EVENT_CHAIN_SOLVED,
EVENT_CHAIN_END,
EVENT_SUMMON,
EVENT_SPSUMMON
}
for _,code in ipairs(ec) do
local ce=ge3:Clone()
ce:SetCode(code)
ce:SetLabelObject(ge3)
ce:SetOperation(cm.checkop31)
Duel.RegisterEffect(ce,0)
end
end end
end end
function cm.checkop3(e,tp,eg,ep,ev,re,r,rp) function cm.checkop3(e,tp,eg,ep,ev,re,r,rp)
...@@ -25,7 +43,10 @@ function cm.checkop3(e,tp,eg,ep,ev,re,r,rp) ...@@ -25,7 +43,10 @@ function cm.checkop3(e,tp,eg,ep,ev,re,r,rp)
for tc in aux.Next(g) do for tc in aux.Next(g) do
tc:RegisterFlagEffect(m,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END,0,1,e:GetLabel()) tc:RegisterFlagEffect(m,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END,0,1,e:GetLabel())
end end
e:SetLabel(e:GetLabel()+1) end
function cm.checkop31(e,tp,eg,ep,ev,re,r,rp)
local te=e:GetLabelObject()
te:SetLabel(te:GetLabel()+1)
end end
function cm.fieldid(c) function cm.fieldid(c)
return c:GetFlagEffectLabel(m) return c:GetFlagEffectLabel(m)
......
...@@ -16,16 +16,18 @@ function cm.initial_effect(c) ...@@ -16,16 +16,18 @@ function cm.initial_effect(c)
local e2=Effect.CreateEffect(c) local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_SINGLE) e2:SetType(EFFECT_TYPE_SINGLE)
e2:SetRange(LOCATION_GRAVE) e2:SetRange(LOCATION_GRAVE)
e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e2:SetCode(m) e2:SetCode(m)
c:RegisterEffect(e2) c:RegisterEffect(e2)
local custom_code=cm.RegisterMergedEvent_ToSingleCard(c,m,{EVENT_LEAVE_FIELD,EVENT_LEAVE_GRAVE,EVENT_MOVE,EVENT_CUSTOM+m+1})
local e4=Effect.CreateEffect(c) local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e4:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e4:SetCode(EVENT_LEAVE_FIELD) e4:SetCode(custom_code)
e4:SetRange(0xff) e4:SetRange(0xff)
e4:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) e4:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
e4:SetOperation(cm.leaveop) e4:SetOperation(cm.leaveop)
c:RegisterEffect(e4) c:RegisterEffect(e4)
local e5=e4:Clone() --[[local e5=e4:Clone()
e5:SetCode(EVENT_LEAVE_GRAVE) e5:SetCode(EVENT_LEAVE_GRAVE)
c:RegisterEffect(e5) c:RegisterEffect(e5)
local e6=e4:Clone() local e6=e4:Clone()
...@@ -33,7 +35,7 @@ function cm.initial_effect(c) ...@@ -33,7 +35,7 @@ function cm.initial_effect(c)
c:RegisterEffect(e6) c:RegisterEffect(e6)
local e7=e4:Clone() local e7=e4:Clone()
e7:SetCode(EVENT_CUSTOM+m+1) e7:SetCode(EVENT_CUSTOM+m+1)
c:RegisterEffect(e7) c:RegisterEffect(e7)--]]
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) local ge1=Effect.CreateEffect(c)
...@@ -67,6 +69,106 @@ function cm.initial_effect(c) ...@@ -67,6 +69,106 @@ function cm.initial_effect(c)
end end
end end
end end
function cm.RegisterMergedEvent_ToSingleCard(c,code,events)
local g=Group.CreateGroup()
g: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
if type(events) == "table" then
for _, event in ipairs(events) do
cm.RegisterMergedEvent_ToSingleCard_AddOperation(c,g,event,event_code_single)
end
else
cm.RegisterMergedEvent_ToSingleCard_AddOperation(c,g,events,event_code_single)
end
return event_code_single
end
function cm.RegisterMergedEvent_ToSingleCard_AddOperation(c,g,event,event_code_single)
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e1:SetCode(event)
e1:SetValue(event)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_SET_AVAILABLE)
e1:SetRange(0xff)
e1:SetLabel(event_code_single)
e1:SetLabelObject(g)
e1:SetOperation(cm.MergedDelayEventCheck1_ToSingleCard)
c:RegisterEffect(e1)
--[[local _GetCode=Effect.GetCode
function Effect.GetCode(e,...)
return _GetCode(e,...)==event_code_single and event or _GetCode(e,...)
end--]]
local ec={
EVENT_CHAIN_ACTIVATING,
EVENT_CHAINING,
EVENT_ATTACK_ANNOUNCE,
EVENT_BREAK_EFFECT,
EVENT_CHAIN_SOLVING,
EVENT_CHAIN_SOLVED,
EVENT_CHAIN_END,
EVENT_SUMMON,
EVENT_SPSUMMON
}
for _,code in ipairs(ec) do
local ce=e1:Clone()
ce:SetCode(code)
ce:SetOperation(cm.MergedDelayEventCheck2_ToSingleCard)
c:RegisterEffect(ce)
end
end
function cm.MergedDelayEventCheck1_ToSingleCard(e,tp,eg,ep,ev,re,r,rp)
local g=e:GetLabelObject()
local c=e:GetOwner()
g:Merge(eg)
if Duel.GetCurrentChain()==0 and #g>0 then
local _eg=g:Clone()
if g:IsContains(c) and (c:IsFaceup() or c:IsPreviousPosition(POS_FACEUP)) then
if e:GetValue()==EVENT_MOVE then
local loc=0
if c:GetPreviousLocation()&LOCATION_ONFIELD>0 then
loc=LOCATION_GRAVE
elseif c:GetPreviousLocation()&LOCATION_GRAVE>0 then
loc=LOCATION_ONFIELD
end
_eg=_eg:Filter(Card.IsPreviousLocation,nil,loc)
end
if #_eg>0 then Duel.RaiseEvent(_eg,e:GetLabel(),re,r,rp,ep,ev) end
end
g:Clear()
end
end
function cm.MergedDelayEventCheck2_ToSingleCard(e,tp,eg,ep,ev,re,r,rp)
local g=e:GetLabelObject()
local c=e:GetOwner()
if #g>0 then
local _eg=g:Clone()
if g:IsContains(c) and (c:IsFaceup() or c:IsPreviousPosition(POS_FACEUP)) then
if e:GetValue()==EVENT_MOVE then
local loc=0
if c:GetPreviousLocation()&LOCATION_ONFIELD>0 then
loc=LOCATION_GRAVE
elseif c:GetPreviousLocation()&LOCATION_GRAVE>0 then
loc=LOCATION_ONFIELD
end
_eg=_eg:Filter(Card.IsPreviousLocation,nil,loc)
end
if #_eg>0 then Duel.RaiseEvent(_eg,e:GetLabel(),re,r,rp,ep,ev) end
end
g:Clear()
end
end
function cm.check(e,tp,eg,ep,ev,re,r,rp) function cm.check(e,tp,eg,ep,ev,re,r,rp)
local tf=re:GetHandler():IsRelateToEffect(re) local tf=re:GetHandler():IsRelateToEffect(re)
local cid=re:GetHandler():GetRealFieldID() local cid=re:GetHandler():GetRealFieldID()
...@@ -175,17 +277,7 @@ function cm.leaveop(e,tp,eg,ep,ev,re,r,rp) ...@@ -175,17 +277,7 @@ function cm.leaveop(e,tp,eg,ep,ev,re,r,rp)
if not eg:IsContains(c) then return end if not eg:IsContains(c) then return end
local g=eg:Clone() local g=eg:Clone()
if c:IsFacedown() and c:IsPreviousPosition(POS_FACEDOWN) then return end if c:IsFacedown() and c:IsPreviousPosition(POS_FACEDOWN) then return end
if e:GetCode()==EVENT_MOVE then Duel.Hint(HINT_CARD,0,m)
local loc=0
if c:GetPreviousLocation()&LOCATION_ONFIELD>0 then
loc=LOCATION_GRAVE
elseif c:GetPreviousLocation()&LOCATION_GRAVE>0 then
loc=LOCATION_ONFIELD
else return end
g=eg:Filter(Card.IsPreviousLocation,nil,loc)
else
Duel.Hint(HINT_CARD,0,m)
end
for tc in aux.Next(g) do for tc in aux.Next(g) do
if tc:IsPreviousPosition(POS_FACEUP) then if tc:IsPreviousPosition(POS_FACEUP) then
local c=e:GetHandler() local c=e:GetHandler()
......
...@@ -27,7 +27,8 @@ function cm.initial_effect(c) ...@@ -27,7 +27,8 @@ function cm.initial_effect(c)
end end
cm.lvup={m-4} cm.lvup={m-4}
function cm.condition(e,tp,eg,ep,ev,re,r,rp) function cm.condition(e,tp,eg,ep,ev,re,r,rp)
return not e:GetHandler():IsStatus(STATUS_SET_TURN) or e:GetHandler():IsHasEffect(EFFECT_QP_ACT_IN_SET_TURN) local c=e:GetHandler()
return (not c:IsLocation(LOCATION_HAND) or Duel.GetTurnPlayer()==tp or c:IsHasEffect(EFFECT_QP_ACT_IN_NTPHAND)) and (not c:IsStatus(STATUS_SET_TURN) or c:IsHasEffect(EFFECT_QP_ACT_IN_SET_TURN))
end end
function cm.tdfilter(c) function cm.tdfilter(c)
return (c:IsLocation(LOCATION_GRAVE) or c:IsFaceup()) and c:IsSetCard(0x41) and c:IsAbleToDeck() return (c:IsLocation(LOCATION_GRAVE) or c:IsFaceup()) and c:IsSetCard(0x41) and c:IsAbleToDeck()
......
...@@ -22,6 +22,7 @@ function s.initial_effect(c) ...@@ -22,6 +22,7 @@ function s.initial_effect(c)
e3:SetDescription(aux.Stringid(id,2)) e3:SetDescription(aux.Stringid(id,2))
e3:SetProperty(EFFECT_FLAG_UNCOPYABLE) e3:SetProperty(EFFECT_FLAG_UNCOPYABLE)
e3:SetCountLimit(1,id) e3:SetCountLimit(1,id)
e3:SetCondition(s.condition)
e3:SetTarget(s.target) e3:SetTarget(s.target)
e3:SetOperation(s.activate) e3:SetOperation(s.activate)
local e4=Effect.CreateEffect(c) local e4=Effect.CreateEffect(c)
...@@ -66,6 +67,10 @@ function s.hspval2(e,c) ...@@ -66,6 +67,10 @@ function s.hspval2(e,c)
for tc in aux.Next(lg) do zone=zone|tc:GetColumnZone(LOCATION_MZONE,1-tp) end for tc in aux.Next(lg) do zone=zone|tc:GetColumnZone(LOCATION_MZONE,1-tp) end
return 0,zone return 0,zone
end end
function s.condition(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
return (not c:IsLocation(LOCATION_HAND) or Duel.GetTurnPlayer()==tp or c:IsHasEffect(EFFECT_QP_ACT_IN_NTPHAND)) and (not c:IsStatus(STATUS_SET_TURN) or c:IsHasEffect(EFFECT_QP_ACT_IN_SET_TURN))
end
function s.filter(c,e,tp) function s.filter(c,e,tp)
return c:IsSetCard(0x108) and c:IsCanBeSpecialSummoned(e,0,tp,false,false) return c:IsSetCard(0x108) and c:IsCanBeSpecialSummoned(e,0,tp,false,false)
end end
......
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