Commit b5423d11 authored by POLYMER's avatar POLYMER

fix

parent 62fa0a32
...@@ -30,7 +30,7 @@ function cm.op(e,tp,eg,ep,ev,re,r,rp) ...@@ -30,7 +30,7 @@ function cm.op(e,tp,eg,ep,ev,re,r,rp)
g:AddCard(c) g:AddCard(c)
local tc=g:Select(tp,1,1,nil):GetFirst() local tc=g:Select(tp,1,1,nil):GetFirst()
if tc~=c then if tc~=c then
Debug.Message(tc:GetLocation()) --Debug.Message(tc:GetLocation())
for rc in aux.Next(g) do cm[rc]=2 end for rc in aux.Next(g) do cm[rc]=2 end
cm[tc]=1 cm[tc]=1
cm[c]=nil cm[c]=nil
...@@ -41,6 +41,7 @@ function cm.op(e,tp,eg,ep,ev,re,r,rp) ...@@ -41,6 +41,7 @@ function cm.op(e,tp,eg,ep,ev,re,r,rp)
local g=Duel.SelectMatchingCard(tp,nil,tp,LOCATION_HAND,0,1,1,c) local g=Duel.SelectMatchingCard(tp,nil,tp,LOCATION_HAND,0,1,1,c)
if #g>0 then if #g>0 then
cm[c]=nil cm[c]=nil
Duel.Hint(HINT_CARD,0,m)
Duel.ConfirmCards(1-tp,g) Duel.ConfirmCards(1-tp,g)
Duel.RegisterFlagEffect(tp,m,RESET_CHAIN,0,1) Duel.RegisterFlagEffect(tp,m,RESET_CHAIN,0,1)
if KOISHI_CHECK then if KOISHI_CHECK then
...@@ -54,6 +55,8 @@ function cm.op(e,tp,eg,ep,ev,re,r,rp) ...@@ -54,6 +55,8 @@ function cm.op(e,tp,eg,ep,ev,re,r,rp)
c:ReplaceEffect(m,0) c:ReplaceEffect(m,0)
cm.initial_effect=ini cm.initial_effect=ini
end end
Duel.ConfirmCards(1-tp,c)
Duel.ShuffleDeck(tp)
else else
local loc=c:GetLocation() local loc=c:GetLocation()
Duel.SendtoGrave(c,REASON_EFFECT) Duel.SendtoGrave(c,REASON_EFFECT)
......
...@@ -68,23 +68,6 @@ function cm.initial_effect(c) ...@@ -68,23 +68,6 @@ function cm.initial_effect(c)
e6:SetCode(EVENT_SPSUMMON) e6:SetCode(EVENT_SPSUMMON)
c:RegisterEffect(e6) c:RegisterEffect(e6)
end end
function cm.SynMaterialFilter(c,syncard)
return c:IsFaceup() and c:IsCanBeSynchroMaterial(syncard)
end
function cm.SynLimitFilter(c,f,e,syncard)
return f and not f(e,c,syncard)
end
function cm.GetSynchroLevelFlowerCardian(c)
return 2
end
function cm.GetSynMaterials(tp,syncard)
local mg=Duel.GetMatchingGroup(cm.SynMaterialFilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,syncard)
if mg:IsExists(Card.GetHandSynchro,1,nil) then
local mg2=Duel.GetMatchingGroup(Card.IsCanBeSynchroMaterial,tp,LOCATION_HAND,0,nil,syncard)
if mg2:GetCount()>0 then mg:Merge(mg2) end
end
return mg
end
function cm.SynMixCondition(f1,f2,f3,f4,minc,maxc,gc) function cm.SynMixCondition(f1,f2,f3,f4,minc,maxc,gc)
return function(e,c,smat,mg1,min,max) return function(e,c,smat,mg1,min,max)
if c==nil then return true end if c==nil then return true end
...@@ -96,6 +79,7 @@ function cm.SynMixCondition(f1,f2,f3,f4,minc,maxc,gc) ...@@ -96,6 +79,7 @@ function cm.SynMixCondition(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
if smat and not smat:IsCanBeSynchroMaterial(c) then return false end
local tp=c:GetControler() local tp=c:GetControler()
local mg local mg
local mgchk=false local mgchk=false
...@@ -103,7 +87,7 @@ function cm.SynMixCondition(f1,f2,f3,f4,minc,maxc,gc) ...@@ -103,7 +87,7 @@ function cm.SynMixCondition(f1,f2,f3,f4,minc,maxc,gc)
mg=mg1 mg=mg1
mgchk=true mgchk=true
else else
mg=cm.GetSynMaterials(tp,c) mg=aux.GetSynMaterials(tp,c)
end end
if smat~=nil then mg:AddCard(smat) end if smat~=nil then mg:AddCard(smat) end
return mg:IsExists(cm.SynMixFilter1,1,nil,f1,f2,f3,f4,minc,maxc,c,mg,smat,gc,mgchk) return mg:IsExists(cm.SynMixFilter1,1,nil,f1,f2,f3,f4,minc,maxc,c,mg,smat,gc,mgchk)
...@@ -118,6 +102,7 @@ function cm.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc) ...@@ -118,6 +102,7 @@ function cm.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
...@@ -125,19 +110,28 @@ function cm.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc) ...@@ -125,19 +110,28 @@ function cm.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc)
mg=mg1 mg=mg1
mgchk=true mgchk=true
else else
mg=cm.GetSynMaterials(tp,c) mg=aux.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,cm.SynMixFilter1,1,1,nil,f1,f2,f3,f4,minc,maxc,c,mg,smat,gc,mgchk):GetFirst() c1=mg:Filter(cm.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,cm.SynMixFilter2,1,1,c1,f2,f3,f4,minc,maxc,c,mg,smat,c1,gc,mgchk):GetFirst() c2=mg:Filter(cm.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,cm.SynMixFilter3,1,1,Group.FromCards(c1,c2),f3,f4,minc,maxc,c,mg,smat,c1,c2,gc,mgchk):GetFirst() c3=mg:Filter(cm.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
...@@ -145,20 +139,21 @@ function cm.SynMixTarget(f1,f2,f3,f4,minc,maxc,gc) ...@@ -145,20 +139,21 @@ function cm.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(cm.SynMixCheckRecursive,g4,tp,g4,mg2,i,minc,maxc,c,g,smat,gc,mgchk) local cg=mg2:Filter(cm.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=cm.SynMixCheckGoal(tp,g4,minc,i,c,g,smat,gc,mgchk)
if cm.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
...@@ -205,7 +200,7 @@ function cm.SynMixFilter4(c,f4,minc,maxc,syncard,mg1,smat,c1,c2,c3,gc,mgchk) ...@@ -205,7 +200,7 @@ function cm.SynMixFilter4(c,f4,minc,maxc,syncard,mg1,smat,c1,c2,c3,gc,mgchk)
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
...@@ -234,12 +229,12 @@ function cm.SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat,gc,mgchk) ...@@ -234,12 +229,12 @@ function cm.SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat,gc,mgchk)
if Duel.GetLocationCountFromEx(tp,tp,g,syncard)<=0 then return false end if Duel.GetLocationCountFromEx(tp,tp,g,syncard)<=0 then return false end
if gc and not gc(g) then return false end if gc and not gc(g) then return false end
if smat and not g:IsContains(smat) then return false end if smat and not g:IsContains(smat) then return false end
if not cm.MustMaterialCheck(g,tp,EFFECT_MUST_BE_SMATERIAL) then return false end if not aux.MustMaterialCheck(g,tp,EFFECT_MUST_BE_SMATERIAL) then return false end
if not g:CheckWithSumEqual(Card.GetSynchroLevel,8,g:GetCount(),g:GetCount(),syncard) if not g:CheckWithSumEqual(Card.GetSynchroLevel,8,g:GetCount(),g:GetCount(),syncard)
and (not g:IsExists(Card.IsHasEffect,1,nil,89818984) and (not g:IsExists(Card.IsHasEffect,1,nil,89818984)
or not g:CheckWithSumEqual(cm.GetSynchroLevelFlowerCardian,8,g:GetCount(),g:GetCount(),syncard)) or not g:CheckWithSumEqual(aux.GetSynchroLevelFlowerCardian,8,g:GetCount(),g:GetCount(),syncard))
then return false end then return false end
local hg=g:Filter(Card.IsLocation,nil,LOCATION_HAND) local hg=g:Filter(aux.SynMixHandFilter,nil,tp,syncard)
local hct=hg:GetCount() local hct=hg:GetCount()
if hct>0 and not mgchk then if hct>0 and not mgchk then
local found=false local found=false
...@@ -247,7 +242,7 @@ function cm.SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat,gc,mgchk) ...@@ -247,7 +242,7 @@ function cm.SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat,gc,mgchk)
local he,hf,hmin,hmax=c:GetHandSynchro() local he,hf,hmin,hmax=c:GetHandSynchro()
if he then if he then
found=true found=true
if hf and hg:IsExists(cm.SynLimitFilter,1,c,hf,he,syncard) then return false end if hf and hg:IsExists(aux.SynLimitFilter,1,c,hf,he,syncard) then return false end
if (hmin and hct<hmin) or (hmax and hct>hmax) then return false end if (hmin and hct<hmin) or (hmax and hct>hmax) then return false end
end end
end end
...@@ -261,7 +256,7 @@ function cm.SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat,gc,mgchk) ...@@ -261,7 +256,7 @@ function cm.SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat,gc,mgchk)
local llct=g:FilterCount(Card.IsLocation,c,lloc) local llct=g:FilterCount(Card.IsLocation,c,lloc)
if llct~=lct then return false end if llct~=lct then return false end
end end
if lf and g:IsExists(cm.SynLimitFilter,1,c,lf,le,syncard) then return false end if lf and g:IsExists(aux.SynLimitFilter,1,c,lf,le,syncard) then return false end
if (lmin and lct<lmin) or (lmax and lct>lmax) then return false end if (lmin and lct<lmin) or (lmax and lct>lmax) then return false end
end end
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