Commit 267f898a authored by 未闻皂名's avatar 未闻皂名

2025/10/25 融合素材卡名的逻辑修改

parent ac19b470
Pipeline #41273 failed with stages
in 6 minutes and 35 seconds
......@@ -114,14 +114,9 @@ function RushDuel.IsCanBeDoubleFusionMaterial(card, code)
return false
end
-- 条件: 可以宣言融合素材的卡名
function RushDuel.IsCanAnnounceFusionMaterialCode(card, code)
local mats = card.material or {}
local codes = card.material_codes or {}
local count = #codes
if code ~= nil and mats[code] then
count = count - 1
end
return count > 0
function RushDuel.IsCanAnnounceFusionMaterialCode(card, target)
local codes = RushDuel.GetAnnouncableFusionMaterialCodes(card, target)
return #codes > 0
end
-- 条件: 位置变化前的控制者
......
......@@ -111,12 +111,12 @@ function RushDuel.SetFusionMaterialData(card, codes, min, max)
local mt = getmetatable(card)
-- 卡名记述的素材
if codes ~= nil then
RushDuel.AddCodeList(card, codes)
local mat = {}
for _, code in ipairs(codes) do
mat[code] = true
end
mt.material = mat
mt.material_codes = codes
end
-- 素材的数量
if mt.material_count == nil then
......@@ -574,14 +574,21 @@ function RushDuel.FusionToDeckBottom(tp, mat)
Auxiliary.PlaceCardsOnDeckBottom(tp, mat, REASON_EFFECT + REASON_MATERIAL + REASON_FUSION)
end
-- 获取融合素材的卡名
function RushDuel.GetFusionMaterialCodes(card)
return card.material_codes or {}
-- 获取可以宣言的融合素材的卡名
function RushDuel.GetAnnouncableFusionMaterialCodes(card, target)
local codes = {}
local code = card:GetCode()
for code, _ in pairs(target.material or {}) do
if not card:IsCode(code) then
table.insert(codes, code)
end
end
return codes
end
-- 宣言融合素材的卡名
function RushDuel.AnnounceFusionMaterialCode(player, card)
local codes = card.material_codes or {}
function RushDuel.AnnounceFusionMaterialCode(player, card, target)
local codes = RushDuel.GetAnnouncableFusionMaterialCodes(card, target)
if #codes > 0 then
return RushDuel.AnnounceCodes(player, codes)
else
......
......@@ -14,13 +14,13 @@ end
--Change Code
function cm.costfilter(c,e)
return c:IsType(TYPE_FUSION) and c:IsLevel(9) and c:IsRace(RACE_CYBORG)
and RD.IsCanAnnounceFusionMaterialCode(c,e:GetHandler():GetCode())
and RD.IsCanAnnounceFusionMaterialCode(e:GetHandler(),c)
end
cm.cost=RD.CostShowExtra(cm.costfilter,1,1,nil,Group.GetFirst)
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
local tc=e:GetLabelObject()
local ac=RD.AnnounceFusionMaterialCode(tp,tc)
local ac=RD.AnnounceFusionMaterialCode(tp,e:GetHandler(),tc)
Duel.SetTargetParam(ac)
Duel.SetOperationInfo(0,CATEGORY_ANNOUNCE,nil,0,tp,0)
end
......
......@@ -13,13 +13,13 @@ function cm.initial_effect(c)
end
--Change Code
function cm.costfilter(c,e)
return c:IsType(TYPE_FUSION) and RD.IsCanAnnounceFusionMaterialCode(c,e:GetHandler():GetCode())
return c:IsType(TYPE_FUSION) and RD.IsCanAnnounceFusionMaterialCode(e:GetHandler(),c)
end
cm.cost=RD.CostShowExtra(cm.costfilter,1,1,nil,Group.GetFirst)
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
local tc=e:GetLabelObject()
local ac=RD.AnnounceFusionMaterialCode(tp,tc)
local ac=RD.AnnounceFusionMaterialCode(tp,e:GetHandler(),tc)
Duel.SetTargetParam(ac)
Duel.SetOperationInfo(0,CATEGORY_ANNOUNCE,nil,0,tp,0)
end
......
......@@ -16,13 +16,13 @@ end
--Fusion Code
function cm.costfilter(c,e)
return c:IsType(TYPE_FUSION) and c:IsLevel(9) and c:IsRace(RACE_GALAXY)
and RD.IsCanAnnounceFusionMaterialCode(c,e:GetHandler():GetCode())
and RD.IsCanAnnounceFusionMaterialCode(e:GetHandler(),c)
end
cm.cost=RD.CostShowExtra(cm.costfilter,1,1,nil,Group.GetFirst)
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
local tc=e:GetLabelObject()
local ac=RD.AnnounceFusionMaterialCode(tp,tc)
local ac=RD.AnnounceFusionMaterialCode(tp,e:GetHandler(),tc)
Duel.SetTargetParam(ac)
Duel.SetOperationInfo(0,CATEGORY_ANNOUNCE,nil,0,tp,0)
end
......
......@@ -14,13 +14,13 @@ end
--Change Code
function cm.costfilter(c,e)
return c:IsType(TYPE_FUSION) and c:IsAttribute(ATTRIBUTE_DARK) and c:IsRace(RACE_SPELLCASTER)
and RD.IsDefense(c,2100) and RD.IsCanAnnounceFusionMaterialCode(c,e:GetHandler():GetCode())
and RD.IsDefense(c,2100) and RD.IsCanAnnounceFusionMaterialCode(e:GetHandler(),c)
end
cm.cost=RD.CostShowExtra(cm.costfilter,1,1,nil,Group.GetFirst)
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
local tc=e:GetLabelObject()
local ac=RD.AnnounceFusionMaterialCode(tp,tc)
local ac=RD.AnnounceFusionMaterialCode(tp,e:GetHandler(),tc)
Duel.SetTargetParam(ac)
Duel.SetOperationInfo(0,CATEGORY_ANNOUNCE,nil,0,tp,0)
end
......
......@@ -14,13 +14,13 @@ end
--Change Code
function cm.costfilter(c,e)
return c:IsType(TYPE_FUSION) and c:IsAttribute(ATTRIBUTE_LIGHT) and c:IsRace(RACE_HYDRAGON)
and RD.IsCanAnnounceFusionMaterialCode(c,e:GetHandler():GetCode())
and RD.IsCanAnnounceFusionMaterialCode(e:GetHandler(),c)
end
cm.cost=RD.CostShowExtra(cm.costfilter,1,1,nil,Group.GetFirst)
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
local tc=e:GetLabelObject()
local ac=RD.AnnounceFusionMaterialCode(tp,tc)
local ac=RD.AnnounceFusionMaterialCode(tp,e:GetHandler(),tc)
Duel.SetTargetParam(ac)
Duel.SetOperationInfo(0,CATEGORY_ANNOUNCE,nil,0,tp,0)
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