Commit 3064f601 authored by 未闻皂名's avatar 未闻皂名

2025/10/11 选择卡片优化

parent b31873f8
Pipeline #41001 passed with stages
in 13 minutes and 10 seconds
......@@ -151,6 +151,16 @@ end
-- 让玩家选择卡片组的 min ~ max 张卡,可以取消
function RushDuel.SelectGroup(player, group, min, max)
-- 单选优化
if min == 1 and max == 1 then
local tc = group:SelectUnselect(nil, player, false, true, 1, 1)
if tc then
return Group.FromCards(tc)
else
return nil
end
end
-- 多选
local sg = Group.CreateGroup()
local finish = (#sg >= min and #sg <= max)
while #sg < max do
......
......@@ -17,20 +17,17 @@ RushDuel.FusionSummonPosition = POS_FACEUP
function RushDuel.MakeFusionMaterial(card, ...)
local codes = {}
local funcs = {}
local unspecified = false
for _, val in ipairs {...} do
local val_type = type(val)
if val_type == "number" then
RushDuel.AddCodeFusionMaterial(codes, funcs, val)
elseif val_type == "function" then
unspecified = true
RushDuel.AddFuncFusionMaterial(codes, funcs, val)
elseif val_type == "table" then
local res = RushDuel.AddMixFusionMaterial(codes, funcs, val)
unspecified = unspecified or res
RushDuel.AddMixFusionMaterial(codes, funcs, val)
end
end
return codes, funcs, unspecified
return codes, funcs
end
-- 融合素材 - 卡名
function RushDuel.AddCodeFusionMaterial(codes, funcs, code)
......@@ -48,12 +45,10 @@ end
-- 融合素材 - 混合
function RushDuel.AddMixFusionMaterial(codes, funcs, list)
local mixs = {}
local unspecified = true
for _, val in ipairs(list) do
local val_type = type(val)
if val_type == "number" then
RushDuel.AddCodeFusionMaterial(codes, mixs, val)
unspecified = false
elseif val_type == "function" then
RushDuel.AddFuncFusionMaterial(codes, mixs, val)
end
......@@ -66,11 +61,10 @@ function RushDuel.AddMixFusionMaterial(codes, funcs, list)
end
return false
end)
return unspecified
end
-- 设置融合素材数据
function RushDuel.SetFusionMaterialData(card, codes, min, max, unspecified)
function RushDuel.SetFusionMaterialData(card, codes, min, max)
local mt = getmetatable(card)
-- 卡名记述的素材
if codes ~= nil then
......@@ -85,10 +79,6 @@ function RushDuel.SetFusionMaterialData(card, codes, min, max, unspecified)
if mt.material_count == nil then
mt.material_count = {min, max}
end
-- 包含不指定卡名的融合素材
if unspecified ~= nil then
mt.unspecified_funsion = unspecified
end
end
-- 创建融合手续
......@@ -219,8 +209,8 @@ function RushDuel.AddFusionProcedure(card, sub, insf, ...)
sub = true
end
-- 融合素材
local codes, funcs, unspecified = RushDuel.MakeFusionMaterial(card, table.unpack(vals))
RushDuel.SetFusionMaterialData(card, codes, #funcs, #funcs, unspecified)
local codes, funcs = RushDuel.MakeFusionMaterial(card, table.unpack(vals))
RushDuel.SetFusionMaterialData(card, codes, #funcs, #funcs)
return RushDuel.CreateFusionProcedure(card, insf, sub, funcs, nil, 0, nil)
end
......@@ -248,8 +238,8 @@ function RushDuel.AddFusionProcedureRep(card, insf, sub, func, min, max, ...)
table.insert(vals, func)
end
-- 融合素材
local codes, funcs, unspecified = RushDuel.MakeFusionMaterial(card, table.unpack(vals))
RushDuel.SetFusionMaterialData(card, codes, #funcs + min, #funcs + max, unspecified)
local codes, funcs = RushDuel.MakeFusionMaterial(card, table.unpack(vals))
RushDuel.SetFusionMaterialData(card, codes, #funcs + min, #funcs + max)
return RushDuel.CreateFusionProcedure(card, insf, sub, funcs, func, max - min, nil)
end
......@@ -317,7 +307,7 @@ function RushDuel.ContactFusionOperation(e, tp, eg, ep, ev, re, r, rp, c)
if #cg > 0 then
Duel.ConfirmCards(1 - c:GetControler(), cg)
end
Duel.SendtoDeck(g, nil, SEQ_DECKSHUFFLE, REASON_MATERIAL + REASON_COST)
Duel.SendtoDeck(g, nil, SEQ_DECKSHUFFLE, REASON_MATERIAL + REASON_FUSION + REASON_COST)
g:DeleteGroup()
end
......@@ -414,11 +404,9 @@ function RushDuel.ExecuteFusionSummon(e, tp, list, chkf, gc, mat_move, cancelabl
local fc = nil
Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
if cancelable then
local g = RushDuel.SelectGroup(tp, sg, 1, 1)
if not g then
fc = sg:SelectUnselect(nil, tp, false, true, 1, 1)
if not fc then
return nil
else
fc = g:GetFirst()
end
else
fc = sg:Select(tp, 1, 1, nil):GetFirst()
......
......@@ -186,11 +186,9 @@ function RushDuel.ExecuteRitualSummon(e, tp, type, list, chkf, gc, mat_move, can
local rc = nil
Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
if cancelable then
local g = RushDuel.SelectGroup(tp, sg, 1, 1)
if not g then
rc = sg:SelectUnselect(nil, tp, false, true, 1, 1)
if not rc then
return nil
else
rc = g:GetFirst()
end
else
rc = sg:Select(tp, 1, 1, nil):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