Commit 45f4ef3e authored by mercury233's avatar mercury233 Committed by GitHub

syn summon using SynMix can be canceled (#2048)

parent 46cead35
...@@ -508,6 +508,7 @@ function Auxiliary.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc) ...@@ -508,6 +508,7 @@ function Auxiliary.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc)
if max<maxc then maxc=max end if max<maxc then maxc=max end
if minc>maxc then return false end if minc>maxc then return false end
end end
::SynMixTargetSelectStart::
local g=Group.CreateGroup() local g=Group.CreateGroup()
local mg local mg
local mgchk=false local mgchk=false
...@@ -518,16 +519,25 @@ function Auxiliary.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc) ...@@ -518,16 +519,25 @@ function Auxiliary.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc)
mg=Auxiliary.GetSynMaterials(tp,c) mg=Auxiliary.GetSynMaterials(tp,c)
end end
if smat~=nil then mg:AddCard(smat) end if smat~=nil then mg:AddCard(smat) end
local c1
local c2
local c3
local cancel=Duel.IsSummonCancelable()
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local c1=mg:FilterSelect(tp,Auxiliary.SynMixFilter1,1,1,nil,f1,f2,f3,f4,minc,maxc,c,mg,smat,gc,mgchk):GetFirst() c1=mg:Filter(Auxiliary.SynMixFilter1,nil,f1,f2,f3,f4,minc,maxc,c,mg,smat,gc,mgchk):SelectUnselect(g,tp,false,cancel,1,1)
if not c1 then return false end
g:AddCard(c1) g:AddCard(c1)
if f2 then if f2 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local c2=mg:FilterSelect(tp,Auxiliary.SynMixFilter2,1,1,c1,f2,f3,f4,minc,maxc,c,mg,smat,c1,gc,mgchk):GetFirst() c2=mg:Filter(Auxiliary.SynMixFilter2,g,f2,f3,f4,minc,maxc,c,mg,smat,c1,gc,mgchk):SelectUnselect(g,tp,false,cancel,1,1)
if not c2 then return false end
if g:IsContains(c2) then goto SynMixTargetSelectStart end
g:AddCard(c2) g:AddCard(c2)
if f3 then if f3 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local c3=mg:FilterSelect(tp,Auxiliary.SynMixFilter3,1,1,Group.FromCards(c1,c2),f3,f4,minc,maxc,c,mg,smat,c1,c2,gc,mgchk):GetFirst() c3=mg:Filter(Auxiliary.SynMixFilter3,g,f3,f4,minc,maxc,c,mg,smat,c1,c2,gc,mgchk):SelectUnselect(g,tp,false,cancel,1,1)
if not c3 then return false end
if g:IsContains(c3) then goto SynMixTargetSelectStart end
g:AddCard(c3) g:AddCard(c3)
end end
end end
...@@ -535,20 +545,21 @@ function Auxiliary.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc) ...@@ -535,20 +545,21 @@ function Auxiliary.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc)
for i=0,maxc-1 do for i=0,maxc-1 do
local mg2=mg:Clone() local mg2=mg:Clone()
if f4 then if f4 then
mg2=mg2:Filter(f4,g,c) mg2=mg2:Filter(f4,g,c,c1,c2,c3)
else else
mg2:Sub(g) mg2:Sub(g)
end end
local cg=mg2:Filter(Auxiliary.SynMixCheckRecursive,g4,tp,g4,mg2,i,minc,maxc,c,g,smat,gc,mgchk) local cg=mg2:Filter(Auxiliary.SynMixCheckRecursive,g4,tp,g4,mg2,i,minc,maxc,c,g,smat,gc,mgchk)
if cg:GetCount()==0 then break end if cg:GetCount()==0 then break end
local minct=1 local finish=Auxiliary.SynMixCheckGoal(tp,g4,minc,i,c,g,smat,gc,mgchk)
if Auxiliary.SynMixCheckGoal(tp,g4,minc,i,c,g,smat,gc,mgchk) then
minct=0
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tg=cg:Select(tp,minct,1,nil) local c4=cg:SelectUnselect(g+g4,tp,finish,cancel,minc,maxc)
if tg:GetCount()==0 then break end if not c4 then
g4:Merge(tg) if finish then break
else return false end
end
if g:IsContains(c4) or g4:IsContains(c4) then goto SynMixTargetSelectStart end
g4:AddCard(c4)
end end
g:Merge(g4) g:Merge(g4)
if g:GetCount()>0 then if g:GetCount()>0 then
...@@ -595,11 +606,11 @@ function Auxiliary.SynMixFilter4(c,f4,minc,maxc,syncard,mg1,smat,c1,c2,c3,gc,mgc ...@@ -595,11 +606,11 @@ function Auxiliary.SynMixFilter4(c,f4,minc,maxc,syncard,mg1,smat,c1,c2,c3,gc,mgc
if c3 then sg:AddCard(c3) end if c3 then sg:AddCard(c3) end
local mg=mg1:Clone() local mg=mg1:Clone()
if f4 then if f4 then
mg=mg:Filter(f4,sg,syncard) mg=mg:Filter(f4,sg,syncard,c1,c2,c3)
else else
mg:Sub(sg) mg:Sub(sg)
end end
return aux.SynMixCheck(mg,sg,minc-1,maxc-1,syncard,smat,gc,mgchk) return Auxiliary.SynMixCheck(mg,sg,minc-1,maxc-1,syncard,smat,gc,mgchk)
end end
function Auxiliary.SynMixCheck(mg,sg1,minc,maxc,syncard,smat,gc,mgchk) function Auxiliary.SynMixCheck(mg,sg1,minc,maxc,syncard,smat,gc,mgchk)
local tp=syncard:GetControler() local tp=syncard:GetControler()
......
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