Commit e206b55a authored by wind2009's avatar wind2009

Fix

parent e9d90e5e
Pipeline #43411 passed with stages
in 3 minutes and 32 seconds
...@@ -19,37 +19,35 @@ function s.xyzfiltr(c,g) ...@@ -19,37 +19,35 @@ function s.xyzfiltr(c,g)
return c:IsSetCard(0x8f,0x54,0x59,0x82,0x206f,0x6d,0x48,0x107e,0x207e) return c:IsSetCard(0x8f,0x54,0x59,0x82,0x206f,0x6d,0x48,0x107e,0x207e)
and c:IsXyzSummonable(g,2,2) and c:IsXyzSummonable(g,2,2)
end end
function s.CreateTempSwapLevelEffect(ec,c1,c2)
function s.CreateTempSwapLevelEffect(ec,c1,c2,reset)
local reset_flag=reset and RESET_EVENT+RESETS_STANDARD or 0
local e1=Effect.CreateEffect(ec) local e1=Effect.CreateEffect(ec)
e1:SetType(EFFECT_TYPE_SINGLE) e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_XYZ_LEVEL) e1:SetCode(EFFECT_XYZ_LEVEL)
e1:SetValue(s.xyzlv) e1:SetValue(s.xyzlv)
e1:SetLabel(c2:GetLevel()) e1:SetLabel(c2:GetLevel())
e1:SetReset(reset_flag) e1:SetReset(RESET_EVENT+RESETS_STANDARD)
c1:RegisterEffect(e1,true) c1:RegisterEffect(e1,true)
return e1 return e1
end end
function s.SetTempSwapLevel(ec,c,reset,callback) function s.SetTempSwapLevel(ec,c,reset,callback)
local e1=nil local e1=nil
local e2=nil local e2=nil
if ec:IsLevelAbove(1) then if ec:IsLevelAbove(1) then
e1=s.CreateTempSwapLevelEffect(ec,c,ec,reset) e1=s.CreateTempSwapLevelEffect(ec,c,ec)
end end
if c:IsLevelAbove(1) then if c:IsLevelAbove(1) then
e2=s.CreateTempSwapLevelEffect(c,ec,c,reset) e2=s.CreateTempSwapLevelEffect(c,ec,c)
end end
local res=callback() local res=callback()
if reset then
if e1 then e1:Reset() end if e1 then e1:Reset() end
if e2 then e2:Reset() end if e2 then e2:Reset() end
end
return res return res
end end
function s.spfilter(c,e,tp,ec) function s.spfilter(c,e,tp,ec)
if not (not c:IsCode(id) and c:IsSetCard(0x8f,0x54,0x59,0x82) and c:IsLevelAbove(1) and c:IsCanBeSpecialSummoned(e,0,tp,false,false)) then return false end if not (not c:IsCode(id) and c:IsSetCard(0x8f,0x54,0x59,0x82) and c:IsLevelAbove(1) and c:IsCanBeSpecialSummoned(e,0,tp,false,false)) then return false end
return s.SetTempSwapLevel(ec,c,false,function() return s.SetTempSwapLevel(ec,c,true,function()
return Duel.IsExistingMatchingCard(s.xyzfiltr,tp,LOCATION_EXTRA,0,1,nil,Group.FromCards(c,ec)) return Duel.IsExistingMatchingCard(s.xyzfiltr,tp,LOCATION_EXTRA,0,1,nil,Group.FromCards(c,ec))
end) end)
end end
...@@ -75,7 +73,7 @@ function s.spop(e,tp,eg,ep,ev,re,r,rp) ...@@ -75,7 +73,7 @@ function s.spop(e,tp,eg,ep,ev,re,r,rp)
if Duel.SpecialSummon(g,0,tp,tp,false,false,POS_FACEUP)==2 if Duel.SpecialSummon(g,0,tp,tp,false,false,POS_FACEUP)==2
and g:IsExists(Card.IsLocation,2,nil,LOCATION_MZONE) and g:IsExists(Card.IsLocation,2,nil,LOCATION_MZONE)
and g:IsExists(Card.IsFaceup,2,nil) then and g:IsExists(Card.IsFaceup,2,nil) then
s.SetTempSwapLevel(c,tc,true,function() s.SetTempSwapLevel(c,tc,false,function()
Duel.AdjustAll() Duel.AdjustAll()
local xyzg=Duel.GetMatchingGroup(s.xyzfiltr,tp,LOCATION_EXTRA,0,nil,g) local xyzg=Duel.GetMatchingGroup(s.xyzfiltr,tp,LOCATION_EXTRA,0,nil,g)
if xyzg:GetCount()>0 then if xyzg:GetCount()>0 then
......
...@@ -33,21 +33,20 @@ end ...@@ -33,21 +33,20 @@ end
function s.spcon(e,tp,eg,ep,ev,re,r,rp) function s.spcon(e,tp,eg,ep,ev,re,r,rp)
return eg:IsExists(s.cfilter,1,nil,1-tp) return eg:IsExists(s.cfilter,1,nil,1-tp)
end end
function s.CreateTempLevelEffect(ec,level_source,reset) function s.CreateTempLevelEffect(ec,level_source)
local reset_flag=reset and RESET_EVENT+RESETS_STANDARD or 0
local e1=Effect.CreateEffect(ec) local e1=Effect.CreateEffect(ec)
e1:SetType(EFFECT_TYPE_SINGLE) e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_XYZ_LEVEL) e1:SetCode(EFFECT_XYZ_LEVEL)
e1:SetValue(s.xyzlv) e1:SetValue(s.xyzlv)
e1:SetLabel(level_source:GetLevel()) e1:SetLabel(level_source:GetLevel())
e1:SetReset(reset_flag) e1:SetReset(RESET_EVENT+RESETS_STANDARD)
ec:RegisterEffect(e1,true) ec:RegisterEffect(e1,true)
return e1 return e1
end end
function s.SetTempLevel(ec,level_source,reset,callback) function s.SetTempLevel(ec,level_source,reset,callback)
local e1=s.CreateTempLevelEffect(ec,level_source,reset) local e1=s.CreateTempLevelEffect(ec,level_source)
local res=callback() local res=callback()
if e1 then e1:Reset() end if e1 and reset then e1:Reset() end
return res return res
end end
function s.xyzlv(e,c,rc) function s.xyzlv(e,c,rc)
...@@ -56,7 +55,7 @@ end ...@@ -56,7 +55,7 @@ end
function s.xyzfilter(c,tp,mc) function s.xyzfilter(c,tp,mc)
if not c:IsFaceup() or not c:IsLevelAbove(1) then return false end if not c:IsFaceup() or not c:IsLevelAbove(1) then return false end
local mg=Group.FromCards(c,mc) local mg=Group.FromCards(c,mc)
return s.SetTempLevel(mc,c,false,function() return s.SetTempLevel(mc,c,true,function()
return Duel.IsExistingMatchingCard(Card.IsXyzSummonable,tp,LOCATION_EXTRA,0,1,nil,mg,2,2) return Duel.IsExistingMatchingCard(Card.IsXyzSummonable,tp,LOCATION_EXTRA,0,1,nil,mg,2,2)
end) end)
end end
...@@ -78,7 +77,7 @@ function s.spop(e,tp,eg,ep,ev,re,r,rp) ...@@ -78,7 +77,7 @@ function s.spop(e,tp,eg,ep,ev,re,r,rp)
if not tc:IsRelateToChain() or tc:IsFacedown() or not tc:IsControler(tp) then return end if not tc:IsRelateToChain() or tc:IsFacedown() or not tc:IsControler(tp) then return end
local mg=Group.FromCards(c,tc) local mg=Group.FromCards(c,tc)
if mg:FilterCount(Card.IsLocation,nil,LOCATION_MZONE)<2 then return end if mg:FilterCount(Card.IsLocation,nil,LOCATION_MZONE)<2 then return end
s.SetTempLevel(c,tc,true,function() s.SetTempLevel(c,tc,false,function()
Duel.AdjustAll() Duel.AdjustAll()
local xyzg=Duel.GetMatchingGroup(Card.IsXyzSummonable,tp,LOCATION_EXTRA,0,nil,mg,2,2) local xyzg=Duel.GetMatchingGroup(Card.IsXyzSummonable,tp,LOCATION_EXTRA,0,nil,mg,2,2)
if xyzg:GetCount()>0 then if xyzg:GetCount()>0 then
......
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