Commit 45397d1c authored by VanillaSalt's avatar VanillaSalt

Merge pull request #192 from DailyShana/patch-6

fix
parents 962c7393 2cc28b8e
...@@ -33,8 +33,14 @@ function c23187256.initial_effect(c) ...@@ -33,8 +33,14 @@ function c23187256.initial_effect(c)
local e4=e3:Clone() local e4=e3:Clone()
e4:SetCode(EFFECT_INDESTRUCTABLE_EFFECT) e4:SetCode(EFFECT_INDESTRUCTABLE_EFFECT)
c:RegisterEffect(e4) c:RegisterEffect(e4)
if not c23187256.xyz_filter then
c23187256.xyz_filter=function(mc)
return mc:IsType(TYPE_XYZ) and mc:IsSetCard(0x48) and mc:GetOverlayCount()>0 and mc:IsCanBeXyzMaterial(c)
end
end
end end
c23187256.xyz_number=93 c23187256.xyz_number=93
c23187256.xyz_count=2
function c23187256.mfilter(c,xyzc) function c23187256.mfilter(c,xyzc)
return c:IsFaceup() and c:IsType(TYPE_XYZ) and c:IsSetCard(0x48) and c:GetOverlayCount()>0 and c:IsCanBeXyzMaterial(xyzc) return c:IsFaceup() and c:IsType(TYPE_XYZ) and c:IsSetCard(0x48) and c:GetOverlayCount()>0 and c:IsCanBeXyzMaterial(xyzc)
end end
...@@ -44,32 +50,59 @@ end ...@@ -44,32 +50,59 @@ end
function c23187256.xyzfilter2(c,rk) function c23187256.xyzfilter2(c,rk)
return c:GetRank()==rk return c:GetRank()==rk
end end
function c23187256.xyzcon(e,c,og) function c23187256.xyzcon(e,c,og,min,max)
if c==nil then return true end if c==nil then return true end
local tp=c:GetControler() local tp=c:GetControler()
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE) local ft=Duel.GetLocationCount(tp,LOCATION_MZONE)
local ct=math.max(1,-ft) local minc=2
local mg=Duel.GetMatchingGroup(c23187256.mfilter,tp,LOCATION_MZONE,0,nil,c) local maxc=64
return mg:IsExists(c23187256.xyzfilter1,1,nil,mg,ct) if min then
minc=math.max(minc,min)
maxc=max
end
local ct=math.max(minc-1,-ft)
local mg=nil
if og then
mg=og:Filter(c23187256.mfilter,nil,c)
else
mg=Duel.GetMatchingGroup(c23187256.mfilter,tp,LOCATION_MZONE,0,nil,c)
end
return maxc>=2 and mg:IsExists(c23187256.xyzfilter1,1,nil,mg,ct)
end end
function c23187256.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og) function c23187256.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og,min,max)
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE) local g=nil
local ct=math.max(1,-ft) if og and not min then
local mg=Duel.GetMatchingGroup(c23187256.mfilter,tp,LOCATION_MZONE,0,nil,c) g=og
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL) else
local g1=mg:FilterSelect(tp,c23187256.xyzfilter1,1,1,nil,mg,ct) local mg=nil
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL) if og then
local g2=mg:FilterSelect(tp,c23187256.xyzfilter2,ct,63,g1:GetFirst(),g1:GetFirst():GetRank()) mg=og:Filter(c23187256.mfilter,nil,c)
g1:Merge(g2) else
mg=Duel.GetMatchingGroup(c23187256.mfilter,tp,LOCATION_MZONE,0,nil,c)
end
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE)
local minc=2
local maxc=64
if min then
minc=math.max(minc,min)
maxc=max
end
local ct=math.max(minc-1,-ft)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL)
g=mg:FilterSelect(tp,c23187256.xyzfilter1,1,1,nil,mg,ct)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL)
local g2=mg:FilterSelect(tp,c23187256.xyzfilter2,ct,maxc-1,g:GetFirst(),g:GetFirst():GetRank())
g:Merge(g2)
end
local sg=Group.CreateGroup() local sg=Group.CreateGroup()
local tc=g1:GetFirst() local tc=g:GetFirst()
while tc do while tc do
sg:Merge(tc:GetOverlayGroup()) sg:Merge(tc:GetOverlayGroup())
tc=g1:GetNext() tc=g:GetNext()
end end
Duel.SendtoGrave(sg,REASON_RULE) Duel.SendtoGrave(sg,REASON_RULE)
c:SetMaterial(g1) c:SetMaterial(g)
Duel.Overlay(c,g1) Duel.Overlay(c,g)
end end
function c23187256.filter(c,e,tp) function c23187256.filter(c,e,tp)
return c:IsRankBelow(9) and c:IsAttackBelow(3000) and c:IsSetCard(0x48) return c:IsRankBelow(9) and c:IsAttackBelow(3000) and c:IsSetCard(0x48)
......
...@@ -48,8 +48,14 @@ function c52653092.initial_effect(c) ...@@ -48,8 +48,14 @@ function c52653092.initial_effect(c)
e6:SetCost(c52653092.actcost) e6:SetCost(c52653092.actcost)
e6:SetOperation(c52653092.actop) e6:SetOperation(c52653092.actop)
c:RegisterEffect(e6) c:RegisterEffect(e6)
if not c52653092.xyz_filter then
c52653092.xyz_filter=function(mc)
return mc:IsType(TYPE_XYZ) and mc:IsSetCard(0x48) and mc:IsCanBeXyzMaterial(c)
end
end
end end
c52653092.xyz_number=0 c52653092.xyz_number=0
c52653092.xyz_count=3
function c52653092.cfilter(c) function c52653092.cfilter(c)
return c:IsSetCard(0x95) and c:GetType()==TYPE_SPELL and c:IsDiscardable() return c:IsSetCard(0x95) and c:GetType()==TYPE_SPELL and c:IsDiscardable()
end end
...@@ -65,25 +71,48 @@ end ...@@ -65,25 +71,48 @@ end
function c52653092.xyzfilter2(c,rk) function c52653092.xyzfilter2(c,rk)
return c:GetRank()==rk return c:GetRank()==rk
end end
function c52653092.xyzcon(e,c,og) function c52653092.xyzcon(e,c,og,min,max)
if c==nil then return true end if c==nil then return true end
local tp=c:GetControler() local tp=c:GetControler()
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE) local ft=Duel.GetLocationCount(tp,LOCATION_MZONE)
local ct=-ft local ct=-ft
if 3<=ct then return false end if 3<=ct then return false end
if ct<1 and Duel.IsExistingMatchingCard(aux.XyzAlterFilter,tp,LOCATION_MZONE,0,1,nil,c52653092.ovfilter,c) if min and (min>3 or max<3) then return false end
if ct<1 and not og and Duel.IsExistingMatchingCard(aux.XyzAlterFilter,tp,LOCATION_MZONE,0,1,nil,c52653092.ovfilter,c)
and Duel.IsExistingMatchingCard(c52653092.cfilter,tp,LOCATION_HAND,0,1,nil) then and Duel.IsExistingMatchingCard(c52653092.cfilter,tp,LOCATION_HAND,0,1,nil) then
return true return true
end end
local mg=Duel.GetMatchingGroup(c52653092.mfilter,tp,LOCATION_MZONE,0,nil,c) local mg=nil
if og then
mg=og:Filter(c52653092.mfilter,nil,c)
else
mg=Duel.GetMatchingGroup(c52653092.mfilter,tp,LOCATION_MZONE,0,nil,c)
end
return mg:IsExists(c52653092.xyzfilter1,1,nil,mg) return mg:IsExists(c52653092.xyzfilter1,1,nil,mg)
end end
function c52653092.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og) function c52653092.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og,min,max)
if og and not min then
local sg=Group.CreateGroup()
local tc=og:GetFirst()
while tc do
sg:Merge(tc:GetOverlayGroup())
tc=og:GetNext()
end
Duel.SendtoGrave(sg,REASON_RULE)
c:SetMaterial(og)
Duel.Overlay(c,og)
return
end
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE) local ft=Duel.GetLocationCount(tp,LOCATION_MZONE)
local ct=-ft local ct=-ft
local mg=Duel.GetMatchingGroup(c52653092.mfilter,tp,LOCATION_MZONE,0,nil,c) local mg=nil
if og then
mg=og:Filter(c52653092.mfilter,nil,c)
else
mg=Duel.GetMatchingGroup(c52653092.mfilter,tp,LOCATION_MZONE,0,nil,c)
end
local b1=mg:IsExists(c52653092.xyzfilter1,1,nil,mg) local b1=mg:IsExists(c52653092.xyzfilter1,1,nil,mg)
local b2=ct<1 and Duel.IsExistingMatchingCard(aux.XyzAlterFilter,tp,LOCATION_MZONE,0,1,nil,c52653092.ovfilter,c) local b2=ct<1 and not og and Duel.IsExistingMatchingCard(aux.XyzAlterFilter,tp,LOCATION_MZONE,0,1,nil,c52653092.ovfilter,c)
and Duel.IsExistingMatchingCard(c52653092.cfilter,tp,LOCATION_HAND,0,1,nil) and Duel.IsExistingMatchingCard(c52653092.cfilter,tp,LOCATION_HAND,0,1,nil)
if b2 and (not b1 or Duel.SelectYesNo(tp,aux.Stringid(52653092,0))) then if b2 and (not b1 or Duel.SelectYesNo(tp,aux.Stringid(52653092,0))) then
Duel.DiscardHand(tp,c52653092.cfilter,1,1,REASON_COST+REASON_DISCARD,nil) Duel.DiscardHand(tp,c52653092.cfilter,1,1,REASON_COST+REASON_DISCARD,nil)
......
...@@ -8,6 +8,7 @@ function c57707471.initial_effect(c) ...@@ -8,6 +8,7 @@ function c57707471.initial_effect(c)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE) e1:SetProperty(EFFECT_FLAG_UNCOPYABLE)
e1:SetRange(LOCATION_EXTRA) e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(c57707471.xyzcon) e1:SetCondition(c57707471.xyzcon)
e1:SetTarget(c57707471.xyztg)
e1:SetOperation(c57707471.xyzop) e1:SetOperation(c57707471.xyzop)
e1:SetValue(SUMMON_TYPE_XYZ) e1:SetValue(SUMMON_TYPE_XYZ)
c:RegisterEffect(e1) c:RegisterEffect(e1)
...@@ -39,27 +40,45 @@ function c57707471.ovfilter(c,tp,xyzc) ...@@ -39,27 +40,45 @@ function c57707471.ovfilter(c,tp,xyzc)
return c:IsFaceup() and c:IsType(TYPE_XYZ) and c:GetRank()==5 and c:IsCanBeXyzMaterial(xyzc) return c:IsFaceup() and c:IsType(TYPE_XYZ) and c:GetRank()==5 and c:IsCanBeXyzMaterial(xyzc)
and c:CheckRemoveOverlayCard(tp,1,REASON_COST) and c:CheckRemoveOverlayCard(tp,1,REASON_COST)
end end
function c57707471.xyzcon(e,c,og) function c57707471.xyzcon(e,c,og,min,max)
if c==nil then return true end if c==nil then return true end
local tp=c:GetControler() local tp=c:GetControler()
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE) local ft=Duel.GetLocationCount(tp,LOCATION_MZONE)
local ct=-ft local ct=-ft
if 2<=ct then return false end if 2<=ct then return false end
if min and (min>2 or max<2) then return false end
if ct<1 and not og and Duel.IsExistingMatchingCard(c57707471.ovfilter,tp,LOCATION_MZONE,0,1,nil,tp,c) then if ct<1 and not og and Duel.IsExistingMatchingCard(c57707471.ovfilter,tp,LOCATION_MZONE,0,1,nil,tp,c) then
return true return true
end end
return Duel.CheckXyzMaterial(c,nil,6,2,2,og) return Duel.CheckXyzMaterial(c,nil,6,2,2,og)
end end
function c57707471.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og) function c57707471.xyztg(e,tp,eg,ep,ev,re,r,rp,chk,c,og,min,max)
if og then if og and not min then
return true
end
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE)
local ct=-ft
local b1=Duel.CheckXyzMaterial(c,nil,6,2,2,og)
local b2=ct<1 and not og and Duel.IsExistingMatchingCard(c57707471.ovfilter,tp,LOCATION_MZONE,0,1,nil)
if b2 and (not b1 or Duel.SelectYesNo(tp,aux.Stringid(57707471,0))) then
e:SetLabel(1)
return true
else
e:SetLabel(0)
local g=Duel.SelectXyzMaterial(tp,c,nil,6,2,2,og)
if g then
g:KeepAlive()
e:SetLabelObject(g)
return true
else return false end
end
end
function c57707471.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og,min,max)
if og and not min then
c:SetMaterial(og) c:SetMaterial(og)
Duel.Overlay(c,og) Duel.Overlay(c,og)
else else
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE) if e:GetLabel()==1 then
local ct=-ft
local b1=Duel.CheckXyzMaterial(c,nil,6,2,2,og)
local b2=ct<1 and Duel.IsExistingMatchingCard(c57707471.ovfilter,tp,LOCATION_MZONE,0,1,nil,tp,c)
if b2 and (not b1 or Duel.SelectYesNo(tp,aux.Stringid(57707471,0))) then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL)
local mg=Duel.SelectMatchingCard(tp,c57707471.ovfilter,tp,LOCATION_MZONE,0,1,1,nil,tp,c) local mg=Duel.SelectMatchingCard(tp,c57707471.ovfilter,tp,LOCATION_MZONE,0,1,1,nil,tp,c)
mg:GetFirst():RemoveOverlayCard(tp,1,1,REASON_COST) mg:GetFirst():RemoveOverlayCard(tp,1,1,REASON_COST)
...@@ -70,9 +89,10 @@ function c57707471.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og) ...@@ -70,9 +89,10 @@ function c57707471.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og)
c:SetMaterial(mg) c:SetMaterial(mg)
Duel.Overlay(c,mg) Duel.Overlay(c,mg)
else else
local mg=Duel.SelectXyzMaterial(tp,c,nil,6,2,2) local mg=e:GetLabelObject()
c:SetMaterial(mg) c:SetMaterial(mg)
Duel.Overlay(c,mg) Duel.Overlay(c,mg)
mg:DeleteGroup()
end end
end end
end end
......
...@@ -59,7 +59,7 @@ end ...@@ -59,7 +59,7 @@ end
function c65305468.xyzfilter2(c,rk) function c65305468.xyzfilter2(c,rk)
return c:GetRank()==rk return c:GetRank()==rk
end end
function c65305468.xyzcon(e,c,og) function c65305468.xyzcon(e,c,og,min,max)
if c==nil then return true end if c==nil then return true end
local tp=c:GetControler() local tp=c:GetControler()
local mg=nil local mg=nil
...@@ -69,12 +69,13 @@ function c65305468.xyzcon(e,c,og) ...@@ -69,12 +69,13 @@ function c65305468.xyzcon(e,c,og)
mg=Duel.GetMatchingGroup(c65305468.mfilter,tp,LOCATION_MZONE,0,nil,c) mg=Duel.GetMatchingGroup(c65305468.mfilter,tp,LOCATION_MZONE,0,nil,c)
end end
return Duel.GetLocationCount(tp,LOCATION_MZONE)>-1 return Duel.GetLocationCount(tp,LOCATION_MZONE)>-1
and (not min or min<=2 and max>=2)
and mg:IsExists(c65305468.xyzfilter1,1,nil,mg) and mg:IsExists(c65305468.xyzfilter1,1,nil,mg)
end end
function c65305468.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og) function c65305468.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og,min,max)
local g=nil local g=nil
local sg=Group.CreateGroup() local sg=Group.CreateGroup()
if og then if og and not min then
g=og g=og
local tc=og:GetFirst() local tc=og:GetFirst()
while tc do while tc do
...@@ -82,7 +83,12 @@ function c65305468.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og) ...@@ -82,7 +83,12 @@ function c65305468.xyzop(e,tp,eg,ep,ev,re,r,rp,c,og)
tc=og:GetNext() tc=og:GetNext()
end end
else else
local mg=Duel.GetMatchingGroup(c65305468.mfilter,tp,LOCATION_MZONE,0,nil) local mg=nil
if og then
mg=og:Filter(c65305468.mfilter,nil,c)
else
mg=Duel.GetMatchingGroup(c65305468.mfilter,tp,LOCATION_MZONE,0,nil,c)
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL)
g=mg:FilterSelect(tp,c65305468.xyzfilter1,1,1,nil,mg) g=mg:FilterSelect(tp,c65305468.xyzfilter1,1,1,nil,mg)
local tc1=g:GetFirst() local tc1=g:GetFirst()
......
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