Commit 229efad8 authored by nanahira's avatar nanahira

Auto Push by Nanahira

parent a3a6780a
...@@ -144,97 +144,65 @@ function cm.CheckGroup(g,f,cg,min,max,...) ...@@ -144,97 +144,65 @@ function cm.CheckGroup(g,f,cg,min,max,...)
if ct>=min and ct<=max and f(sg,...) then return true end if ct>=min and ct<=max and f(sg,...) then return true end
return g:IsExists(cm.CheckGroupRecursive,1,sg,sg,g,f,min,max,ext_params) return g:IsExists(cm.CheckGroupRecursive,1,sg,sg,g,f,min,max,ext_params)
end end
if Group.SelectUnselect then function cm.SelectGroup(tp,desc,g,f,cg,min,max,...)
function cm.SelectGroup(tp,desc,g,f,cg,min,max,...) local min=min or 1
local min=min or 1 local max=max or g:GetCount()
local max=max or g:GetCount() local ext_params={...}
local ext_params={...} local sg=Group.CreateGroup()
local sg=Group.CreateGroup() local cg=cg or Group.CreateGroup()
local cg=cg or Group.CreateGroup() sg:Merge(cg)
sg:Merge(cg) local ct=sg:GetCount()
local ct=sg:GetCount() local ag=g:Filter(cm.CheckGroupRecursive,sg,sg,g,f,min,max,ext_params)
local ag=g:Filter(cm.CheckGroupRecursive,sg,sg,g,f,min,max,ext_params) while ct<max and ag:GetCount()>0 do
while ct<max and ag:GetCount()>0 do local finish=(ct>=min and ct<=max and f(sg,...))
local finish=(ct>=min and ct<=max and f(sg,...)) local seg=sg:Clone()
local seg=sg:Clone() local dmin=min-cg:GetCount()
local dmin=min-cg:GetCount() local dmax=math.min(max-cg:GetCount(),g:GetCount())
local dmax=math.min(max-cg:GetCount(),g:GetCount()) seg:Sub(cg)
seg:Sub(cg) Duel.Hint(HINT_SELECTMSG,tp,desc)
Duel.Hint(HINT_SELECTMSG,tp,desc) local tc=ag:SelectUnselect(seg,tp,finish,finish,dmin,dmax)
local tc=ag:SelectUnselect(seg,tp,finish,finish,dmin,dmax) if not tc then break end
if not tc then break end if sg:IsContains(tc) then
if sg:IsContains(tc) then sg:RemoveCard(tc)
sg:RemoveCard(tc) else
else sg:AddCard(tc)
sg:AddCard(tc)
end
ct=sg:GetCount()
ag=g:Filter(cm.CheckGroupRecursive,sg,sg,g,f,min,max,ext_params)
end
return sg
end
function cm.SelectGroupWithCancel(tp,desc,g,f,cg,min,max,...)
local min=min or 1
local max=max or g:GetCount()
local ext_params={...}
local sg=Group.CreateGroup()
local cg=cg or Group.CreateGroup()
sg:Merge(cg)
local ct=sg:GetCount()
local ag=g:Filter(cm.CheckGroupRecursive,sg,sg,g,f,min,max,ext_params)
while ct<max and ag:GetCount()>0 do
local finish=(ct>=min and ct<=max and f(sg,...))
local cancel=finish or ct==0
local seg=sg:Clone()
local dmin=min-cg:GetCount()
local dmax=math.min(max-cg:GetCount(),g:GetCount())
seg:Sub(cg)
Duel.Hint(HINT_SELECTMSG,tp,desc)
local tc=ag:SelectUnselect(seg,tp,finish,cancel,dmin,dmax)
if not tc then
if not finish then return end
break
end
if sg:IsContains(tc) then
sg:RemoveCard(tc)
else
sg:AddCard(tc)
end
ct=sg:GetCount()
ag=g:Filter(cm.CheckGroupRecursive,sg,sg,g,f,min,max,ext_params)
end end
return sg ct=sg:GetCount()
ag=g:Filter(cm.CheckGroupRecursive,sg,sg,g,f,min,max,ext_params)
end end
else return sg
function cm.SelectGroup(tp,desc,g,f,cg,min,max,...) end
local min=min or 1 function cm.SelectGroupWithCancel(tp,desc,g,f,cg,min,max,...)
local max=max or g:GetCount() local min=min or 1
local ext_params={...} local max=max or g:GetCount()
local sg=Group.CreateGroup() local ext_params={...}
if cg then local sg=Group.CreateGroup()
sg:Merge(cg) local cg=cg or Group.CreateGroup()
sg:Merge(cg)
local ct=sg:GetCount()
local ag=g:Filter(cm.CheckGroupRecursive,sg,sg,g,f,min,max,ext_params)
while ct<max and ag:GetCount()>0 do
local finish=(ct>=min and ct<=max and f(sg,...))
local cancel=finish or ct==0
local seg=sg:Clone()
local dmin=min-cg:GetCount()
local dmax=math.min(max-cg:GetCount(),g:GetCount())
seg:Sub(cg)
Duel.Hint(HINT_SELECTMSG,tp,desc)
local tc=ag:SelectUnselect(seg,tp,finish,cancel,dmin,dmax)
if not tc then
if not finish then return end
break
end end
local ct=sg:GetCount() if sg:IsContains(tc) then
local ag=g:Filter(cm.CheckGroupRecursive,sg,sg,g,f,min,max,ext_params) sg:RemoveCard(tc)
while ct<max and ag:GetCount()>0 do else
local minc=1 sg:AddCard(tc)
local finish=(ct>=min and ct<=max and f(sg,...))
if finish then
minc=0
if cm.master_rule_3_flag and not Duel.SelectYesNo(tp,210) then break end
end
Duel.Hint(HINT_SELECTMSG,tp,desc)
local tg=ag:Select(tp,minc,1,nil)
if tg:GetCount()==0 then break end
sg:Merge(tg)
ct=sg:GetCount()
ag=g:Filter(cm.CheckGroupRecursive,sg,sg,g,f,min,max,ext_params)
end end
return sg ct=sg:GetCount()
end ag=g:Filter(cm.CheckGroupRecursive,sg,sg,g,f,min,max,ext_params)
function cm.SelectGroupWithCancel(tp,desc,g,f,cg,min,max,...)
return cm.SelectGroup(tp,desc,g,f,cg,min,max,...)
end end
return sg
end end
--updated overlay --updated overlay
...@@ -1110,7 +1078,7 @@ function cm.PendConditionNanahira() ...@@ -1110,7 +1078,7 @@ function cm.PendConditionNanahira()
local t=cm.order_table[te:GetValue()] local t=cm.order_table[te:GetValue()]
if (t.location==LOCATION_EXTRA and eft>0) or (t.location~=LOCATION_EXTRA and mft>0) then if (t.location==LOCATION_EXTRA and eft>0) or (t.location~=LOCATION_EXTRA and mft>0) then
local exg=Duel.GetMatchingGroup(cm.PConditionFilterNanahira,tp,t.location,0,nil,e,tp,lscale,rscale,t.filter,te:GetHandler()) local exg=Duel.GetMatchingGroup(cm.PConditionFilterNanahira,tp,t.location,0,nil,e,tp,lscale,rscale,t.filter,te:GetHandler())
g:Merge(exg) g:Merge(exg)
end end
end end
for i,te in pairs(ext2) do for i,te in pairs(ext2) do
......
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