Commit 67f5afdf authored by 未闻皂名's avatar 未闻皂名

2024/4/19 新增:KP17新卡,添加获取上级召唤的解放怪兽数值的函数

parent b2081ce9
Pipeline #26572 passed with stages
in 7 minutes and 19 seconds
No preview for this file type
......@@ -199,7 +199,7 @@ function RushDuel.AdvanceCheckOperation(e, tp, eg, ep, ev, re, r, rp)
end
-- 获取召唤的解放数量
function RushDuel.GetTributeCount(card, advance)
function RushDuel.GetTributeCount(card)
if card:IsSummonType(SUMMON_VALUE_ZERO) then
return 0
elseif card:IsSummonType(SUMMON_VALUE_ONE) then
......@@ -208,10 +208,12 @@ function RushDuel.GetTributeCount(card, advance)
return 2
elseif card:IsSummonType(SUMMON_VALUE_THREE) then
return 3
elseif card:IsSummonType(SUMMON_TYPE_ADVANCE) then
return advance
else
elseif card:IsLevelBelow(4) then
return 0
elseif card:IsLevelBelow(6) then
return 1
else
return 2
end
end
......@@ -229,6 +231,47 @@ function RushDuel.SplitTribute(card, group)
return normal, double
end
-- 计算上级召唤时解放怪兽的合计值
function RushDuel.AdvanceMaterialCheck(card, effect, getter)
local e = Effect.CreateEffect(card)
e:SetType(EFFECT_TYPE_SINGLE)
e:SetCode(EFFECT_MATERIAL_CHECK)
e:SetLabelObject(effect)
e:SetValue(RushDuel.AdvanceMaterialCheckValue(getter))
card:RegisterEffect(e)
end
function RushDuel.AdvanceMaterialCheckValue(getter)
return function(e, c)
local g = c:GetMaterial()
local mat = RushDuel.GetTributeCount(c)
local count = g:GetCount()
local value1, value2 = 0, 0
if count == 1 then
value1 = getter(g:GetFirst(), count, mat) * mat
value2 = value1
elseif count == 2 then
local tc1, tc2 = g:GetFirst(), g:GetNext()
if mat == 2 then
value1 = getter(tc1, count, mat) + getter(tc2, count, mat)
value2 = value1
elseif mat == 3 then
local ng, dg = RushDuel.SplitTribute(c)
if dg:GetCount() == 1 then
value1 = getter(ng:GetFirst(), count, mat) + getter(dg:GetFirst(), count, mat) * 2
value2 = value1
else
value1 = getter(tc1, count, mat) * 2 + getter(tc2, count, mat)
value2 = getter(tc1, count, mat) + getter(tc2, count, mat) * 2
end
end
elseif count == 3 then
value1 = g:GetSum(getter, count, mat)
value2 = value1
end
e:GetLabelObject():SetLabel(value1, value2)
end
end
-- 记录攻击表示上级召唤的状态
function RushDuel.CreateAdvanceSummonFlag(card, flag)
local e1 = Effect.CreateEffect(card)
......
......@@ -18,8 +18,8 @@ function cm.costfilter(c)
return c:IsFaceup() and c:IsRace(RACE_BEASTWARRIOR) and c:IsAbleToGraveAsCost()
end
function cm.cost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsExistingMatchingCard(cm.costfilter,tp,LOCATION_MZONE,0,1,e:GetHandler()) end
local max=Duel.GetMatchingGroupCount(Card.IsDefensePos,tp,0,LOCATION_MZONE,nil)
if chk==0 then return max>0 and Duel.IsExistingMatchingCard(cm.costfilter,tp,LOCATION_MZONE,0,1,e:GetHandler()) end
RD.SelectAndDoAction(HINTMSG_TOGRAVE,cm.costfilter,tp,LOCATION_MZONE,0,1,math.min(max,2),e:GetHandler(),function(g)
e:SetLabel(Duel.SendtoGrave(g,REASON_COST))
end)
......
......@@ -23,7 +23,7 @@ function cm.condition(e,tp,eg,ep,ev,re,r,rp)
return RD.IsSummonTurn(e:GetHandler())
end
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
local ct=RD.GetTributeCount(e:GetHandler(),2)
local ct=RD.GetTributeCount(e:GetHandler())
if chk==0 then return ct>0 and Duel.IsExistingMatchingCard(cm.thfilter,tp,LOCATION_GRAVE,0,ct,nil) end
e:SetLabel(ct)
Duel.SetOperationInfo(0,CATEGORY_TOHAND,nil,1,tp,LOCATION_GRAVE)
......
......@@ -12,29 +12,13 @@ function cm.initial_effect(c)
e1:SetValue(cm.atkval)
c:RegisterEffect(e1)
--Material Check
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_SINGLE)
e2:SetCode(EFFECT_MATERIAL_CHECK)
e2:SetLabelObject(e1)
e2:SetValue(cm.check)
c:RegisterEffect(e2)
RD.AdvanceMaterialCheck(c,e1,cm.getter)
--Continuous Effect
RD.AddContinuousEffect(c,e1)
end
--Material Check
function cm.check(e,c)
local atk=0
local g=c:GetMaterial()
if g:GetCount()==1 then
atk=RD.GetBaseAttackOnTribute(g:GetFirst())*2
elseif g:GetCount()==2 then
atk=RD.GetBaseAttackOnTribute(g:GetFirst())+RD.GetBaseAttackOnTribute(g:GetNext())
end
if atk>0 then
e:GetLabelObject():SetLabel(atk)
else
e:GetLabelObject():SetLabel(0)
end
function cm.getter(c)
return RD.GetBaseAttackOnTribute(c)
end
--Atk Up
function cm.atkval(e,c)
......
......@@ -12,25 +12,13 @@ function cm.initial_effect(c)
e1:SetValue(cm.atkval)
c:RegisterEffect(e1)
--Material Check
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_SINGLE)
e2:SetCode(EFFECT_MATERIAL_CHECK)
e2:SetLabelObject(e1)
e2:SetValue(cm.check)
c:RegisterEffect(e2)
RD.AdvanceMaterialCheck(c,e1,cm.getter)
--Continuous Effect
RD.AddContinuousEffect(c,e1)
end
--Material Check
function cm.check(e,c)
local tc=c:GetMaterial():GetFirst()
local atk=0
if tc then atk=RD.GetBaseAttackOnTribute(tc)*2 end
if atk>0 then
e:GetLabelObject():SetLabel(atk)
else
e:GetLabelObject():SetLabel(0)
end
function cm.getter(c)
return RD.GetBaseAttackOnTribute(c)*2
end
--Atk Up
function cm.atkval(e,c)
......
......@@ -24,12 +24,7 @@ function cm.initial_effect(c)
e2:SetOperation(cm.atkop)
c:RegisterEffect(e2)
--Material Check
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE)
e3:SetCode(EFFECT_MATERIAL_CHECK)
e3:SetLabelObject(e2)
e3:SetValue(cm.check)
c:RegisterEffect(e3)
RD.AdvanceMaterialCheck(c,e2,cm.getter)
--Continuous Effect
RD.AddContinuousEffect(c,e1)
end
......@@ -46,28 +41,12 @@ function cm.atkop(e,tp,eg,ep,ev,re,r,rp)
e:GetLabelObject():SetLabel(atk1)
end
--Material Check
function cm.check(e,c)
if not c:IsSummonType(SUMMON_VALUE_THREE) then return end
local atk1,atk2=0,0
local mg=c:GetMaterial()
if mg:GetCount()==3 then
atk1=mg:GetSum(Card.GetOriginalLevel)
atk2=atk1
elseif mg:GetCount()==2 then
local ng,dg=RD.SplitTribute(c)
if dg:GetCount()==1 then
atk1=ng:GetFirst():GetOriginalLevel()+dg:GetFirst():GetOriginalLevel()*2
atk2=atk1
else
local lv1,lv2=mg:GetFirst():GetOriginalLevel(),mg:GetNext():GetOriginalLevel()
atk1=lv1*2+lv2
atk2=lv1+lv2*2
end
elseif mg:GetCount()==1 then
atk1=mg:GetFirst():GetOriginalLevel()*3
atk2=atk1
function cm.getter(c,ct,mat)
if mat==3 then
return c:GetOriginalLevel()*100
else
return 0
end
e:GetLabelObject():SetLabel(atk1*100,atk2*100)
end
--Atk Up
function cm.atkval(e,c)
......
local m=120261031
local cm=_G["c"..m]
cm.name="贤帝近卫兵"
function cm.initial_effect(c)
--Draw
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,0))
e1:SetCategory(CATEGORY_DRAW)
e1:SetType(EFFECT_TYPE_IGNITION)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetRange(LOCATION_MZONE)
e1:SetCondition(cm.condition)
e1:SetCost(cm.cost)
e1:SetTarget(cm.target)
e1:SetOperation(cm.operation)
c:RegisterEffect(e1)
end
--Draw
function cm.costfilter(c)
return not c:IsAttack(1200) and RD.IsDefense(c,1000) and c:IsAbleToDeckOrExtraAsCost()
end
function cm.condition(e,tp,eg,ep,ev,re,r,rp)
return Duel.GetFieldGroupCount(tp,LOCATION_DECK,0)>9
end
cm.cost=RD.CostSendGraveToDeck(cm.costfilter,4,4)
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsPlayerCanDraw(tp,1) end
RD.TargetDraw(tp,1)
end
function cm.operation(e,tp,eg,ep,ev,re,r,rp)
if RD.Draw()~=0 then
local c=e:GetHandler()
if c:IsFaceup() and c:IsRelateToEffect(e) then
RD.AttachLevel(e,c,2,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END)
end
end
end
\ No newline at end of file
local m=120261032
local list={120244046,120244056}
local cm=_G["c"..m]
cm.name="上级之力"
function cm.initial_effect(c)
RD.AddCodeList(c,list)
--To Deck
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,0))
e1:SetCategory(CATEGORY_TODECK+CATEGORY_GRAVE_ACTION+CATEGORY_TOHAND)
e1:SetType(EFFECT_TYPE_IGNITION)
e1:SetRange(LOCATION_MZONE)
e1:SetCost(cm.cost)
e1:SetTarget(cm.target)
e1:SetOperation(cm.operation)
c:RegisterEffect(e1)
end
--To Deck
function cm.filter(c)
return c:IsType(TYPE_MONSTER) and c:IsAbleToDeck()
end
function cm.thfilter(c)
return c:IsCode(list[1],list[2]) and c:IsAbleToHand()
end
function cm.cost(e,tp,eg,ep,ev,re,r,rp,chk)
local max=Duel.GetMatchingGroupCount(cm.filter,tp,0,LOCATION_GRAVE,nil)
if chk==0 then return max>0 and Duel.IsExistingMatchingCard(Card.IsAbleToGraveAsCost,tp,LOCATION_ONFIELD,0,1,nil) end
RD.SelectAndDoAction(HINTMSG_TOGRAVE,Card.IsAbleToGraveAsCost,tp,LOCATION_ONFIELD,0,1,math.min(max,2),nil,function(g)
e:SetLabel(Duel.SendtoGrave(g,REASON_COST))
end)
end
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsExistingMatchingCard(cm.filter,tp,0,LOCATION_GRAVE,1,nil) end
local ct=e:GetLabel()
local g=Duel.GetMatchingGroup(cm.filter,tp,0,LOCATION_GRAVE,nil)
Duel.SetOperationInfo(0,CATEGORY_TODECK,g,ct,0,0)
end
function cm.operation(e,tp,eg,ep,ev,re,r,rp)
local ct=e:GetLabel()
RD.SelectAndDoAction(HINTMSG_TODECK,aux.NecroValleyFilter(cm.filter),tp,0,LOCATION_GRAVE,ct,ct,nil,function(g)
if RD.SendToDeckAndExists(g) then
RD.CanSelectAndDoAction(aux.Stringid(m,1),HINTMSG_ATOHAND,aux.NecroValleyFilter(cm.thfilter),tp,LOCATION_GRAVE,0,1,1,nil,function(sg)
Duel.BreakEffect()
RD.SendToHandAndExists(sg,1-tp)
end)
end
end)
end
\ No newline at end of file
local m=120261043
local cm=_G["c"..m]
cm.name="神魔兽 加泽特"
function cm.initial_effect(c)
RD.AddSummonProcedureThree(c,aux.Stringid(m,0))
RD.CreateAdvanceSummonFlag(c,20261043)
--Atk Up
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetCode(EFFECT_UPDATE_ATTACK)
e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e1:SetRange(LOCATION_MZONE)
e1:SetValue(cm.atkval)
c:RegisterEffect(e1)
--Set Attack
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
e2:SetCode(EVENT_SUMMON_SUCCESS)
e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e2:SetLabelObject(e1)
e2:SetCondition(cm.atkcon)
e2:SetOperation(cm.atkop)
c:RegisterEffect(e2)
--Material Check
RD.AdvanceMaterialCheck(c,e2,cm.getter)
--Continuous Effect
RD.AddContinuousEffect(c,e1)
end
--Set Attack
function cm.atkcon(e,tp,eg,ep,ev,re,r,rp)
return e:GetHandler():IsSummonType(SUMMON_TYPE_ADVANCE)
end
function cm.atkop(e,tp,eg,ep,ev,re,r,rp)
local atk1,atk2=e:GetLabel()
if atk1~=atk2 then
Duel.Hint(HINT_SELECTMSG,tp,aux.Stringid(m,1))
atk1=Duel.AnnounceNumber(tp,atk1,atk2)
end
e:GetLabelObject():SetLabel(atk1)
end
--Material Check
function cm.getter(c)
if c:IsType(TYPE_EFFECT) then
return RD.GetBaseAttackOnTribute(c)
else
return 0
end
end
--Atk Up
function cm.atkval(e,c)
local atk=0
if c:GetFlagEffect(20261043)~=0 and c:IsSummonType(SUMMON_TYPE_ADVANCE) then
atk=atk+e:GetLabel()
end
if c:GetFlagEffect(20261043)~=0 and c:IsSummonType(SUMMON_VALUE_THREE) then
atk=atk+800
end
return atk
end
\ No newline at end of file
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