Commit 650cb08c authored by 未闻皂名's avatar 未闻皂名

2024/1/30 新增:电狮子磁带,召唤和攻击对象相关修改

parent e4c1c457
Pipeline #25189 passed with stages
in 14 minutes and 1 second
No preview for this file type
No preview for this file type
...@@ -18,7 +18,8 @@ EFFECT_CANNOT_DOUBLE_TRIBUTE = 120120029 -- 魔将 雅灭鲁拉 (不能使用: ...@@ -18,7 +18,8 @@ EFFECT_CANNOT_DOUBLE_TRIBUTE = 120120029 -- 魔将 雅灭鲁拉 (不能使用:
EFFECT_PLAYER_CANNOT_ATTACK = 120155054 -- 幻刃封锁 (对方不能攻击时不能发动) EFFECT_PLAYER_CANNOT_ATTACK = 120155054 -- 幻刃封锁 (对方不能攻击时不能发动)
EFFECT_PLAYER_RACE_CANNOT_ATTACK = 120155055 -- 幻刃封锁 (不能选择不能攻击的种族) EFFECT_PLAYER_RACE_CANNOT_ATTACK = 120155055 -- 幻刃封锁 (不能选择不能攻击的种族)
FLAG_NOT_SUMMON_TURN = 120000001 -- 召唤·特殊召唤的回合被盖放, 不再符合召唤·特殊召唤的回合的条件 FLAG_SUMMON_TURN = 120000011 -- 召唤·特殊召唤的回合被盖放, 不再符合召唤·特殊召唤的回合的条件
FLAG_ATTACK_ANNOUNCED = 120000012 -- 已经进行了攻击宣言, 不能向怪兽攻击的效果失效
-- 创建效果: 玩家对象的全局效果 -- 创建效果: 玩家对象的全局效果
function RushDuel.CreatePlayerTargetGlobalEffect(code, value) function RushDuel.CreatePlayerTargetGlobalEffect(code, value)
...@@ -142,15 +143,21 @@ function RushDuel.CreateCannotDirectAttackEffect(e, target, player, s_range, o_r ...@@ -142,15 +143,21 @@ function RushDuel.CreateCannotDirectAttackEffect(e, target, player, s_range, o_r
return e1 return e1
end end
-- 创建效果: 不能选择攻击目标 (对玩家效果) -- 创建效果: 不能选择攻击目标 (对玩家效果)
function RushDuel.CreateCannotSelectBattleTargetEffect(e, target, player, s_range, o_range, reset) function RushDuel.CreateCannotSelectBattleTargetEffect(e, condition, target, value, player, s_range, o_range, reset)
local e1 = Effect.CreateEffect(e:GetHandler()) local e1 = Effect.CreateEffect(e:GetHandler())
e1:SetType(EFFECT_TYPE_FIELD) e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET) e1:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET)
e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE) e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetTargetRange(s_range, o_range) e1:SetTargetRange(s_range, o_range)
e1:SetCondition(function (e)
return not RushDuel.IsAttacking(e) and (not condition or condition(e))
end)
if target ~= nil then if target ~= nil then
e1:SetTarget(target) e1:SetTarget(target)
end end
if value ~= nil then
e1:SetValue(value)
end
e1:SetReset(reset) e1:SetReset(reset)
Duel.RegisterEffect(e1, player) Duel.RegisterEffect(e1, player)
return e1 return e1
......
...@@ -7,11 +7,16 @@ function RushDuel.IsMaximumMode(card) ...@@ -7,11 +7,16 @@ function RushDuel.IsMaximumMode(card)
end end
-- 条件: 这张卡召唤的回合 -- 条件: 这张卡召唤的回合
function RushDuel.IsSummonTurn(card) function RushDuel.IsSummonTurn(card)
return card:IsReason(REASON_SUMMON) and card:IsStatus(STATUS_SUMMON_TURN) and card:GetFlagEffect(FLAG_NOT_SUMMON_TURN) == 0 return card:IsReason(REASON_SUMMON) and card:IsStatus(STATUS_SUMMON_TURN) and card:GetFlagEffect(FLAG_SUMMON_TURN) ~= 0
end end
-- 条件: 这张卡特殊召唤的回合 -- 条件: 这张卡特殊召唤的回合
function RushDuel.IsSpecialSummonTurn(card) function RushDuel.IsSpecialSummonTurn(card)
return card:IsReason(REASON_SPSUMMON) and card:IsStatus(STATUS_SPSUMMON_TURN) and card:GetFlagEffect(FLAG_NOT_SUMMON_TURN) == 0 return card:IsReason(REASON_SPSUMMON) and card:IsStatus(STATUS_SPSUMMON_TURN) and card:GetFlagEffect(FLAG_SUMMON_TURN) ~= 0
end
-- 条件: 处于攻击中
function RushDuel.IsAttacking(effect)
local player = Duel.GetTurnPlayer()
return Duel.GetFlagEffect(player, FLAG_ATTACK_ANNOUNCED) ~= 0
end end
-- 条件: 玩家的LP在 lp 以上 -- 条件: 玩家的LP在 lp 以上
function RushDuel.IsLPAbove(player, lp) function RushDuel.IsLPAbove(player, lp)
......
...@@ -4,6 +4,7 @@ RushDuel = RushDuel or {} ...@@ -4,6 +4,7 @@ RushDuel = RushDuel or {}
-- 初始化 -- 初始化
function RushDuel.Init() function RushDuel.Init()
RushDuel.InitRule() RushDuel.InitRule()
RushDuel.InitFlag()
Duel.BreakEffect = function() Duel.BreakEffect = function()
-- "那之后" 不打断时点 -- "那之后" 不打断时点
end end
...@@ -68,3 +69,17 @@ function RushDuel.InitRule() ...@@ -68,3 +69,17 @@ function RushDuel.InitRule()
-- 极大怪兽 -- 极大怪兽
RushDuel.InitMaximum() RushDuel.InitMaximum()
end end
-- 初始化标记
function RushDuel.InitFlag()
local reg_summon = function(e, tp, eg, ep, ev, re, r, rp)
eg:ForEach(function(tc)
tc:RegisterFlagEffect(FLAG_SUMMON_TURN, RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END, 0, 1)
end)
end
local reg_attack = function(e, tp, eg, ep, ev, re, r, rp)
Duel.RegisterFlagEffect(tp, FLAG_ATTACK_ANNOUNCED, RESET_PHASE + PHASE_DAMAGE, 0, 1)
end
RushDuel.CreateFieldGlobalEffect(true, EVENT_SUMMON_SUCCESS, reg_summon)
RushDuel.CreateFieldGlobalEffect(true, EVENT_SPSUMMON_SUCCESS, reg_summon)
RushDuel.CreateFieldGlobalEffect(true, EVENT_ATTACK_ANNOUNCE, reg_attack)
end
\ No newline at end of file
...@@ -36,9 +36,7 @@ function cm.activate(e,tp,eg,ep,ev,re,r,rp) ...@@ -36,9 +36,7 @@ function cm.activate(e,tp,eg,ep,ev,re,r,rp)
if RD.ChangePosition(g,POS_FACEUP_DEFENSE)~=0 and Duel.GetFlagEffect(tp,m)==0 then if RD.ChangePosition(g,POS_FACEUP_DEFENSE)~=0 and Duel.GetFlagEffect(tp,m)==0 then
RD.CreateHintEffect(e,aux.Stringid(m,1),tp,0,1,RESET_PHASE+PHASE_END) RD.CreateHintEffect(e,aux.Stringid(m,1),tp,0,1,RESET_PHASE+PHASE_END)
RD.CreateCannotDirectAttackEffect(e,nil,tp,0,LOCATION_MZONE,RESET_PHASE+PHASE_END) RD.CreateCannotDirectAttackEffect(e,nil,tp,0,LOCATION_MZONE,RESET_PHASE+PHASE_END)
local e1=RD.CreateCannotSelectBattleTargetEffect(e,nil,tp,0,LOCATION_MZONE,RESET_PHASE+PHASE_END) RD.CreateCannotSelectBattleTargetEffect(e,cm.atkcon,nil,cm.atklimit,tp,0,LOCATION_MZONE,RESET_PHASE+PHASE_END)
e1:SetCondition(cm.atkcon)
e1:SetValue(cm.atklmt)
Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1)
end end
end) end)
...@@ -46,6 +44,6 @@ end ...@@ -46,6 +44,6 @@ end
function cm.atkcon(e) function cm.atkcon(e)
return Duel.IsExistingMatchingCard(Card.IsDefensePos,e:GetHandlerPlayer(),LOCATION_MZONE,0,1,nil) return Duel.IsExistingMatchingCard(Card.IsDefensePos,e:GetHandlerPlayer(),LOCATION_MZONE,0,1,nil)
end end
function cm.atklmt(e,c) function cm.atklimit(e,c)
return not c:IsDefensePos() return not c:IsDefensePos()
end end
\ No newline at end of file
...@@ -28,23 +28,14 @@ function cm.activate(e,tp,eg,ep,ev,re,r,rp) ...@@ -28,23 +28,14 @@ function cm.activate(e,tp,eg,ep,ev,re,r,rp)
RD.Damage() RD.Damage()
if Duel.GetFlagEffect(tp,m)~=0 then return end if Duel.GetFlagEffect(tp,m)~=0 then return end
RD.CreateHintEffect(e,aux.Stringid(m,1),tp,0,1,RESET_PHASE+PHASE_END) RD.CreateHintEffect(e,aux.Stringid(m,1),tp,0,1,RESET_PHASE+PHASE_END)
local e1=Effect.CreateEffect(e:GetHandler()) RD.CreateCannotSelectBattleTargetEffect(e,cm.atkcon,nil,cm.atklimit,tp,0,LOCATION_MZONE,RESET_PHASE+PHASE_END)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET)
e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetTargetRange(0,LOCATION_MZONE)
e1:SetCondition(cm.atkcon)
e1:SetValue(cm.atklimit)
e1:SetLabel(tp)
e1:SetReset(RESET_PHASE+PHASE_END)
Duel.RegisterEffect(e1,tp)
Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1)
end end
function cm.atkcon(e) function cm.atkcon(e)
return Duel.IsExistingMatchingCard(Card.IsFaceup,e:GetLabel(),LOCATION_MZONE,0,1,nil) return Duel.IsExistingMatchingCard(Card.IsFaceup,e:GetHandlerPlayer(),LOCATION_MZONE,0,1,nil)
end end
function cm.atklimit(e,c) function cm.atklimit(e,c)
local g=Duel.GetMatchingGroup(Card.IsFaceup,e:GetLabel(),LOCATION_MZONE,0,nil) local g=Duel.GetMatchingGroup(Card.IsFaceup,e:GetHandlerPlayer(),LOCATION_MZONE,0,nil)
local sg=g:GetMinGroup(Card.GetLevel) local sg=g:GetMinGroup(Card.GetLevel)
return not sg:IsContains(c) or c:IsFacedown() return not sg:IsContains(c) or c:IsFacedown()
end end
\ No newline at end of file
...@@ -27,7 +27,7 @@ end ...@@ -27,7 +27,7 @@ end
--Cannot Be Battle Target --Cannot Be Battle Target
function cm.atkcon(e) function cm.atkcon(e)
local ec=e:GetHandler():GetEquipTarget() local ec=e:GetHandler():GetEquipTarget()
return ec and ec:GetControler()==e:GetHandlerPlayer() return not RD.IsAttacking(e) and ec and ec:GetControler()==e:GetHandlerPlayer()
end end
function cm.atktg(e,c) function cm.atktg(e,c)
return c:GetEquipCount()==0 return c:GetEquipCount()==0
......
...@@ -8,12 +8,16 @@ function cm.initial_effect(c) ...@@ -8,12 +8,16 @@ function cm.initial_effect(c)
e1:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET) e1:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET)
e1:SetRange(LOCATION_MZONE) e1:SetRange(LOCATION_MZONE)
e1:SetTargetRange(0,LOCATION_MZONE) e1:SetTargetRange(0,LOCATION_MZONE)
e1:SetCondition(cm.condition)
e1:SetValue(cm.target) e1:SetValue(cm.target)
c:RegisterEffect(e1) c:RegisterEffect(e1)
--Continuous Effect --Continuous Effect
RD.AddContinuousEffect(c,e1) RD.AddContinuousEffect(c,e1)
end end
--Cannot Be Battle Target --Cannot Be Battle Target
function cm.condition(e)
return not RD.IsAttacking(e)
end
function cm.target(e,c) function cm.target(e,c)
return c~=e:GetHandler() and c:IsFaceup() and c:IsRace(RACE_SPELLCASTER) return c~=e:GetHandler() and c:IsFaceup() and c:IsRace(RACE_SPELLCASTER)
end end
\ No newline at end of file
...@@ -33,28 +33,9 @@ function cm.activate(e,tp,eg,ep,ev,re,r,rp) ...@@ -33,28 +33,9 @@ function cm.activate(e,tp,eg,ep,ev,re,r,rp)
RD.SelectAndSpecialSummon(aux.NecroValleyFilter(cm.spfilter),tp,LOCATION_GRAVE,0,1,2,nil,e,POS_FACEUP) RD.SelectAndSpecialSummon(aux.NecroValleyFilter(cm.spfilter),tp,LOCATION_GRAVE,0,1,2,nil,e,POS_FACEUP)
if Duel.GetFlagEffect(tp,m)~=0 then return end if Duel.GetFlagEffect(tp,m)~=0 then return end
RD.CreateHintEffect(e,aux.Stringid(m,1),tp,1,0,RESET_PHASE+PHASE_END) RD.CreateHintEffect(e,aux.Stringid(m,1),tp,1,0,RESET_PHASE+PHASE_END)
local e1=Effect.CreateEffect(e:GetHandler()) RD.CreateCannotSelectBattleTargetEffect(e,nil,nil,cm.atklimit,tp,LOCATION_MZONE,0,RESET_PHASE+PHASE_END)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET)
e1:SetTargetRange(LOCATION_MZONE,LOCATION_MZONE)
e1:SetCondition(cm.atkcon)
e1:SetValue(cm.atklimit)
e1:SetReset(RESET_PHASE+PHASE_END)
Duel.RegisterEffect(e1,tp)
local e2=Effect.CreateEffect(e:GetHandler())
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e2:SetCode(EVENT_ATTACK_ANNOUNCE)
e2:SetOperation(cm.atkop)
e2:SetReset(RESET_PHASE+PHASE_END)
Duel.RegisterEffect(e2,tp)
Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1) Duel.RegisterFlagEffect(tp,m,RESET_PHASE+PHASE_END,0,1)
end end
function cm.atkcon(e)
return Duel.GetFlagEffect(e:GetHandler(),20247014)==0
end
function cm.atklimit(e,c) function cm.atklimit(e,c)
return c:IsPosition(POS_FACEUP_ATTACK) and c:IsAttackBelow(1200) return c:IsPosition(POS_FACEUP_ATTACK) and c:IsAttackBelow(1200)
end
function cm.atkop(e,tp,eg,ep,ev,re,r,rp)
Duel.RegisterFlagEffect(tp,20247014,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_DAMAGE,0,1)
end end
\ No newline at end of file
...@@ -8,7 +8,6 @@ function cm.initial_effect(c) ...@@ -8,7 +8,6 @@ function cm.initial_effect(c)
e1:SetCategory(CATEGORY_DECKDES) e1:SetCategory(CATEGORY_DECKDES)
e1:SetType(EFFECT_TYPE_IGNITION) e1:SetType(EFFECT_TYPE_IGNITION)
e1:SetRange(LOCATION_MZONE) e1:SetRange(LOCATION_MZONE)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetCondition(cm.condition) e1:SetCondition(cm.condition)
e1:SetTarget(cm.target) e1:SetTarget(cm.target)
e1:SetOperation(cm.operation) e1:SetOperation(cm.operation)
...@@ -28,13 +27,12 @@ function cm.target(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -28,13 +27,12 @@ function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
local g=Duel.GetMatchingGroup(Card.IsFaceup,tp,LOCATION_MZONE,0,nil) local g=Duel.GetMatchingGroup(Card.IsFaceup,tp,LOCATION_MZONE,0,nil)
local ct=g:GetClassCount(Card.GetRace) local ct=g:GetClassCount(Card.GetRace)
if chk==0 then return ct>0 and Duel.IsPlayerCanDiscardDeck(tp,ct) end if chk==0 then return ct>0 and Duel.IsPlayerCanDiscardDeck(tp,ct) end
RD.TargetDiscardDeck(tp,ct) Duel.SetOperationInfo(0,CATEGORY_DECKDES,nil,0,tp,ct)
end end
function cm.operation(e,tp,eg,ep,ev,re,r,rp) function cm.operation(e,tp,eg,ep,ev,re,r,rp)
local g=Duel.GetMatchingGroup(Card.IsFaceup,tp,LOCATION_MZONE,0,nil) local g=Duel.GetMatchingGroup(Card.IsFaceup,tp,LOCATION_MZONE,0,nil)
local ct=g:GetClassCount(Card.GetRace) local ct=g:GetClassCount(Card.GetRace)
if ct==0 then return end if ct>0 and RD.SendDeckTopToGraveAndExists(tp,ct,cm.exfilter,2,nil) then
if RD.SendDeckTopToGraveAndExists(tp,ct,cm.exfilter,2,nil) then
Duel.Draw(tp,1,REASON_EFFECT) Duel.Draw(tp,1,REASON_EFFECT)
end end
end end
\ No newline at end of file
...@@ -8,7 +8,6 @@ function cm.initial_effect(c) ...@@ -8,7 +8,6 @@ function cm.initial_effect(c)
e1:SetCategory(CATEGORY_DECKDES) e1:SetCategory(CATEGORY_DECKDES)
e1:SetType(EFFECT_TYPE_IGNITION) e1:SetType(EFFECT_TYPE_IGNITION)
e1:SetRange(LOCATION_MZONE) e1:SetRange(LOCATION_MZONE)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetCondition(cm.condition) e1:SetCondition(cm.condition)
e1:SetTarget(cm.target) e1:SetTarget(cm.target)
e1:SetOperation(cm.operation) e1:SetOperation(cm.operation)
......
...@@ -13,11 +13,15 @@ function cm.initial_effect(c) ...@@ -13,11 +13,15 @@ function cm.initial_effect(c)
e2:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET) e2:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET)
e2:SetRange(LOCATION_FZONE) e2:SetRange(LOCATION_FZONE)
e2:SetTargetRange(LOCATION_MZONE,LOCATION_MZONE) e2:SetTargetRange(LOCATION_MZONE,LOCATION_MZONE)
e2:SetCondition(cm.condition)
e2:SetTarget(cm.target) e2:SetTarget(cm.target)
e2:SetValue(aux.TRUE) e2:SetValue(aux.TRUE)
c:RegisterEffect(e2) c:RegisterEffect(e2)
end end
--Cannot Be Battle Target --Cannot Be Battle Target
function cm.condition(e)
return not RD.IsAttacking(e)
end
function cm.target(e,c) function cm.target(e,c)
local tp=c:GetControler() local tp=c:GetControler()
return Duel.GetFieldGroupCount(tp,LOCATION_MZONE,0)==1 and not c:IsRace(RACE_FISH+RACE_SEASERPENT+RACE_THUNDER+RACE_AQUA) return Duel.GetFieldGroupCount(tp,LOCATION_MZONE,0)==1 and not c:IsRace(RACE_FISH+RACE_SEASERPENT+RACE_THUNDER+RACE_AQUA)
......
local m=120257019
local cm=_G["c"..m]
cm.name="电狮子磁带"
function cm.initial_effect(c)
--Discard Deck
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(m,0))
e1:SetCategory(CATEGORY_DECKDES)
e1:SetType(EFFECT_TYPE_IGNITION)
e1:SetRange(LOCATION_MZONE)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetCondition(cm.condition)
e1:SetTarget(cm.target)
e1:SetOperation(cm.operation)
c:RegisterEffect(e1)
end
--Discard Deck
function cm.filter(c)
return c:IsFaceup() and c:IsRace(RACE_PYRO+RACE_AQUA+RACE_THUNDER)
end
function cm.condition(e,tp,eg,ep,ev,re,r,rp)
return Duel.GetFieldGroupCount(tp,LOCATION_MZONE,0)<=2
end
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
local ct=Duel.GetMatchingGroupCount(cm.filter,tp,LOCATION_MZONE,0,nil)*2
if chk==0 then return ct>0 and Duel.IsPlayerCanDiscardDeck(tp,ct) end
RD.TargetDiscardDeck(tp,ct)
end
function cm.operation(e,tp,eg,ep,ev,re,r,rp)
local ct=Duel.GetMatchingGroupCount(cm.filter,tp,LOCATION_MZONE,0,nil)*2
RD.DiscardDeck(nil,ct)
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