function cxxxx.initial_effect(c)
--xyz summon
c:EnableReviveLimit()
local e1=Effect.CreateEffect(c)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_SPSUMMON_PROC)
e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(cxxxx.xyzcon)
e1:SetOperation(cxxxx.xyzop)
e1:SetValue(SUMMON_TYPE_XYZ)
c:RegisterEffect(e1)
end
function cxxxx.mfilter(c,xyzc)
return c:IsFaceup() and c:IsType(TYPE_XYZ) and c:IsCanBeXyzMaterial(xyzc)
end
function cxxxx.xyzfilter1(c,g)
return g:IsExists(cxxxx.xyzfilter2,1,c,c:GetRank())
end
function cxxxx.xyzfilter2(c,rk)
return c:GetRank()+rk>=30
end
function cxxxx.xyzcon(e,c,og)
if c==nil then return true end
local tp=c:GetControler()
local mg=nil
if og then
mg=og:Filter(cxxxx.mfilter,nil,c)
else
mg=Duel.GetMatchingGroup(cxxxx.mfilter,tp,LOCATION_MZONE,0,nil,c)
end
return Duel.GetLocationCount(tp,LOCATION_MZONE)>-1
and mg:IsExists(cxxxx.xyzfilter1,1,nil,mg)
end
function cxxxx.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og)
local g=nil
local sg=Group.CreateGroup()
if og then
g=og
local tc=og:GetFirst()
while tc do
sg:Merge(tc:GetOverlayGroup())
tc=og:GetNext()
end
else
local mg=Duel.GetMatchingGroup(cxxxx.mfilter,tp,LOCATION_MZONE,0,nil)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL)
g=mg:FilterSelect(tp,cxxxx.xyzfilter1,1,1,nil,mg)
local tc1=g:GetFirst()
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL)
local g2=mg:FilterSelect(tp,cxxxx.xyzfilter2,1,1,tc1,tc1:GetRank())
local tc2=g2:GetFirst()
g:Merge(g2)
sg:Merge(tc1:GetOverlayGroup())
sg:Merge(tc2:GetOverlayGroup())
end
if sg:GetCount()~=0 then
Duel.Overlay(c,sg)
end
c:SetMaterial(g)
Duel.Overlay(c,g)
end