Commit 552975bc authored by xiaoye's avatar xiaoye

update VgF.EffectDamage

parent 0acb55e2
...@@ -123,6 +123,8 @@ function VgD.ResetOperation(e, tp, eg, ep, ev, re, r, rp) ...@@ -123,6 +123,8 @@ function VgD.ResetOperation(e, tp, eg, ep, ev, re, r, rp)
if c:GetFlagEffect(FLAG_SUPPORT) > 0 then c:ResetFlagEffect(FLAG_SUPPORT) end if c:GetFlagEffect(FLAG_SUPPORT) > 0 then c:ResetFlagEffect(FLAG_SUPPORT) end
if c:GetFlagEffect(FLAG_SUPPORTED) > 0 then c:ResetFlagEffect(FLAG_SUPPORTED) end if c:GetFlagEffect(FLAG_SUPPORTED) > 0 then c:ResetFlagEffect(FLAG_SUPPORTED) end
if c:GetFlagEffect(FLAG_DEFENSE_ENTIRELY) > 0 then c:ResetFlagEffect(FLAG_DEFENSE_ENTIRELY) end if c:GetFlagEffect(FLAG_DEFENSE_ENTIRELY) > 0 then c:ResetFlagEffect(FLAG_DEFENSE_ENTIRELY) end
if c:GetFlagEffect(FLAG_ATTACK_TRIGGER) > 0 then c:ResetFlagEffect(FLAG_ATTACK_TRIGGER) end
if c:GetFlagEffect(FLAG_DAMAGE_TRIGGER) > 0 then c:ResetFlagEffect(FLAG_DAMAGE_TRIGGER) end
end end
---使卡片具有骑升的功能,已包含在 vgd.VgCard(c) 内 ---使卡片具有骑升的功能,已包含在 vgd.VgCard(c) 内
...@@ -315,15 +317,22 @@ function VgD.CardTrigger(c) ...@@ -315,15 +317,22 @@ function VgD.CardTrigger(c)
e2:SetCondition(VgD.CardTriggerCondtion('Normal')) e2:SetCondition(VgD.CardTriggerCondtion('Normal'))
e2:SetOperation(VgD.CardTriggerOperation('Normal')) e2:SetOperation(VgD.CardTriggerOperation('Normal'))
c:RegisterEffect(e2) c:RegisterEffect(e2)
local e3 = e1:Clone()
e3:SetCondition(VgD.CardTriggerCondtion('EffectDamage'))
e3:SetOperation(VgD.CardTriggerOperation('EffectDamage'))
c:RegisterEffect(e3)
end end
function VgD.CardTriggerCondtion(chkcon) function VgD.CardTriggerCondtion(chkcon)
return function (e, tp, eg, ep, ev, re, r, rp) return function (e, tp, eg, ep, ev, re, r, rp)
local c = e:GetHandler() local c = e:GetHandler()
if chkcon == 'EffectDamage' then
return c:IsLocation(LOCATION_TRIGGER) and Duel.GetFlagEffect(tp, FLAG_EFFECT_DAMAGE) > 0
end
local cp = tp local cp = tp
if chkcon == 'Damage' then if chkcon == 'Damage' then
cp = 1 - tp cp = 1 - tp
end end
return Duel.GetAttacker() and Duel.GetAttacker():GetControler() == cp and c:IsLocation(LOCATION_TRIGGER) return Duel.GetAttacker() and Duel.GetAttacker():GetControler() == cp and c:IsLocation(LOCATION_TRIGGER) and Duel.GetFlagEffect(tp, FLAG_EFFECT_DAMAGE) == 0
end end
end end
function VgD.CardTriggerOperation(chkop) function VgD.CardTriggerOperation(chkop)
...@@ -395,8 +404,7 @@ function VgD.CardTriggerOperation(chkop) ...@@ -395,8 +404,7 @@ function VgD.CardTriggerOperation(chkop)
Duel.Damage(tp, 1, REASON_TRIGGER) Duel.Damage(tp, 1, REASON_TRIGGER)
end end
end end
local rc = VgF.GetVMonster(tp) local bc = Duel.GetAttackTarget()
local bc = rc:GetBattleTarget()
local label = bc:GetFlagEffectLabel(FLAG_DAMAGE_TRIGGER) local label = bc:GetFlagEffectLabel(FLAG_DAMAGE_TRIGGER)
if not label then return end if not label then return end
if label > 0 then if label > 0 then
...@@ -406,9 +414,9 @@ function VgD.CardTriggerOperation(chkop) ...@@ -406,9 +414,9 @@ function VgD.CardTriggerOperation(chkop)
bc:RegisterFlagEffect(FLAG_DAMAGE_TRIGGER, RESET_EVENT + RESETS_STANDARD, 0, 1, label) bc:RegisterFlagEffect(FLAG_DAMAGE_TRIGGER, RESET_EVENT + RESETS_STANDARD, 0, 1, label)
elseif label == 0 then elseif label == 0 then
bc:ResetFlagEffect(FLAG_DAMAGE_TRIGGER) bc:ResetFlagEffect(FLAG_DAMAGE_TRIGGER)
Duel.RaiseEvent(rc, EVENT_CUSTOM + EVENT_DAMAGE_TRIGGER, e, 0, tp, tp, 0) Duel.RaiseEvent(bc, EVENT_CUSTOM + EVENT_DAMAGE_TRIGGER, e, 0, tp, tp, 0)
end end
else elseif chkop == 'Normal' then
if c:IsRace(TRIGGER_SUPER) then if c:IsRace(TRIGGER_SUPER) then
local ops = {} local ops = {}
local sel = {} local sel = {}
...@@ -447,16 +455,72 @@ function VgD.CardTriggerOperation(chkop) ...@@ -447,16 +455,72 @@ function VgD.CardTriggerOperation(chkop)
if VgD.OperationWhenCardTrigger(e, tp, eg, ep, ev, re, r, rp, c, 0) then VgD.OperationWhenCardTrigger(e, tp, eg, ep, ev, re, r, rp, c, 1) end if VgD.OperationWhenCardTrigger(e, tp, eg, ep, ev, re, r, rp, c, 0) then VgD.OperationWhenCardTrigger(e, tp, eg, ep, ev, re, r, rp, c, 1) end
if c:IsRelateToEffect(e) then VgF.Sendto(LOCATION_HAND, c, nil, REASON_TRIGGER) end if c:IsRelateToEffect(e) then VgF.Sendto(LOCATION_HAND, c, nil, REASON_TRIGGER) end
end end
local rc = VgF.GetVMonster(tp) local bc = Duel.GetAttacker()
local label = rc:GetFlagEffectLabel(FLAG_ATTACK_TRIGGER) local label = bc:GetFlagEffectLabel(FLAG_ATTACK_TRIGGER)
if not label then return end if not label then return end
if label > 1 then if label > 1 then
label = label - 1 label = label - 1
Duel.RaiseEvent(c, EVENT_CUSTOM + EVENT_TRIGGER, e, 0, tp, tp, 0) Duel.RaiseEvent(c, EVENT_CUSTOM + EVENT_TRIGGER, e, 0, tp, tp, 0)
rc:ResetFlagEffect(FLAG_ATTACK_TRIGGER) bc:ResetFlagEffect(FLAG_ATTACK_TRIGGER)
rc:RegisterFlagEffect(FLAG_ATTACK_TRIGGER, RESET_EVENT + RESETS_STANDARD, 0, 1, label) bc:RegisterFlagEffect(FLAG_ATTACK_TRIGGER, RESET_EVENT + RESETS_STANDARD, 0, 1, label)
elseif label == 1 then elseif label == 1 then
rc:ResetFlagEffect(FLAG_ATTACK_TRIGGER) bc:ResetFlagEffect(FLAG_ATTACK_TRIGGER)
end
else
if c:IsRace(TRIGGER_SUPER) then
local ops = {}
local sel = {}
if c:IsRelateToEffect(e) then
table.insert(ops, VgF.Stringid(VgID + 5, 3))
table.insert(sel, function ()
VgF.Sendto(LOCATION_EXILE, c, REASON_TRIGGER)
end)
end
if true then
table.insert(ops, VgF.Stringid(VgID + 5, 4))
table.insert(sel, function ()
Duel.Draw(tp, 1, REASON_TRIGGER)
end)
end
if VgF.IsExistingMatchingCard(nil, tp, LOCATION_MZONE, 0, 1, nil) then
table.insert(ops, VgF.Stringid(VgID + 5, 5))
table.insert(sel, function ()
local g = VgF.SelectMatchingCard(HINTMSG_ATKUP, e, tp, nil, tp, LOCATION_MZONE, 0, 1, 1, nil)
VgF.AtkUp(c, g, 100000000, nil)
end)
end
if VgD.OperationWhenCardTrigger(e, tp, eg, ep, ev, re, r, rp, c, 0) then
table.insert(ops, VgF.Stringid(VgID + 5, 5))
table.insert(sel, function ()
VgD.OperationWhenCardTrigger(e, tp, eg, ep, ev, re, r, rp, c, 1)
end)
end
while #ops > 0 do
local i = Duel.SelectOption(tp, table.unpack(ops)) + 1
sel[i]()
table.remove(ops, i)
table.remove(sel, i)
end
else
if VgD.OperationWhenCardTrigger(e, tp, eg, ep, ev, re, r, rp, c, 0) then VgD.OperationWhenCardTrigger(e, tp, eg, ep, ev, re, r, rp, c, 1) end
if c:IsRelateToEffect(e) then
VgF.Sendto(LOCATION_DAMAGE, c, tp, POS_FACEUP_ATTACK, REASON_EFFECT)
Duel.Damage(tp, 1, REASON_EFFECT)
end
end
if VgF.GetValueType(VgF.EffectDamageE) ~= "Effect" then return end
local bc = VgF.EffectDamageE:GetHandler()
local label = bc:GetFlagEffectLabel(FLAG_DAMAGE_TRIGGER)
if not label then return end
if label > 0 then
label = label - 1
Duel.RaiseEvent(c, EVENT_CUSTOM + EVENT_TRIGGER, e, 0, tp, tp, 0)
bc:ResetFlagEffect(FLAG_DAMAGE_TRIGGER)
bc:RegisterFlagEffect(FLAG_DAMAGE_TRIGGER, 0, 0, 1, label)
elseif label == 0 then
bc:ResetFlagEffect(FLAG_DAMAGE_TRIGGER)
VgF.EffectDamageE:Reset()
VgF.EffectDamageE = nil
end end
end end
end end
...@@ -695,15 +759,14 @@ function VgD.MonsterBattleDamageCondition(e, tp, eg, ep, ev, re, r, rp) ...@@ -695,15 +759,14 @@ function VgD.MonsterBattleDamageCondition(e, tp, eg, ep, ev, re, r, rp)
return VgF.VMonsterFilter(c) and c == Duel.GetAttackTarget() and atk >= def and bc:GetLeftScale() > 0 return VgF.VMonsterFilter(c) and c == Duel.GetAttackTarget() and atk >= def and bc:GetLeftScale() > 0
end end
function VgD.MonsterBattleDamageOperation(e, tp, eg, ep, ev, re, r, rp) function VgD.MonsterBattleDamageOperation(e, tp, eg, ep, ev, re, r, rp)
local c = e:GetHandler() local bc = Duel.GetAttacker()
local bc = c:GetBattleTarget()
local label = bc:GetLeftScale() - 1 local label = bc:GetLeftScale() - 1
bc:RegisterFlagEffect(FLAG_DAMAGE_TRIGGER, RESET_EVENT + RESETS_STANDARD, 0, 1, label) bc:RegisterFlagEffect(FLAG_DAMAGE_TRIGGER, RESET_EVENT + RESETS_STANDARD, 0, 1, label)
VgD.TriggerCard(e, tp, eg, ep, ev, re, r, rp) VgD.TriggerCard(e, tp, eg, ep, ev, re, r, rp)
end end
function VgD.MonsterNextTrigger(e, tp, eg, ep, ev, re, r, rp) function VgD.MonsterNextTrigger(e, tp, eg, ep, ev, re, r, rp)
local c = e:GetHandler() local c = e:GetHandler()
return eg:GetFirst():GetControler() == tp and VgF.VMonsterFilter(c) return VgF.ReturnCard(eg):GetControler() == tp and VgF.VMonsterFilter(c) and Duel.GetFlagEffect(tp, FLAG_EFFECT_DAMAGE) == 0
end end
function VgD.SupportCondition(e, tp, eg, ep, ev, re, r, rp) function VgD.SupportCondition(e, tp, eg, ep, ev, re, r, rp)
return VgF.GetColumnGroup(Duel.GetAttacker()):IsContains(e:GetHandler()) and Duel.GetTurnPlayer() == tp and e:GetHandler():IsAttribute(SKILL_SUPPORT) return VgF.GetColumnGroup(Duel.GetAttacker()):IsContains(e:GetHandler()) and Duel.GetTurnPlayer() == tp and e:GetHandler():IsAttribute(SKILL_SUPPORT)
...@@ -1804,4 +1867,4 @@ function VgD.GlobalCheckEffect(c, m, code, con, op) ...@@ -1804,4 +1867,4 @@ function VgD.GlobalCheckEffect(c, m, code, con, op)
if con then ge:SetCondition(con) end if con then ge:SetCondition(con) end
ge:SetOperation(op) ge:SetOperation(op)
Duel.RegisterEffect(ge, 0) Duel.RegisterEffect(ge, 0)
end end
\ No newline at end of file
...@@ -876,6 +876,7 @@ FLAG_IMPRISON = VgID + 8 --被收容 ...@@ -876,6 +876,7 @@ FLAG_IMPRISON = VgID + 8 --被收容
FLAG_SPELL_COUNT_LIMIT = VgID + 9 --指令卡次数 FLAG_SPELL_COUNT_LIMIT = VgID + 9 --指令卡次数
FLAG_SPELL_USED_COUNT = VgID + 10--指令卡已使用次数 FLAG_SPELL_USED_COUNT = VgID + 10--指令卡已使用次数
FLAG_ALSO_CAN_TRIGGER = VgID + 11--后防着也能驱动判定 FLAG_ALSO_CAN_TRIGGER = VgID + 11--后防着也能驱动判定
FLAG_EFFECT_DAMAGE = VgID + 12--效果伤害标识
--AffectedByEffect --AffectedByEffect
AFFECT_CODE_MIX = VgID --魔合成 AFFECT_CODE_MIX = VgID --魔合成
AFFECT_CODE_MIX_DIFFERENT_NAME = VgID + 1 --魔合成(卡名不同) AFFECT_CODE_MIX_DIFFERENT_NAME = VgID + 1 --魔合成(卡名不同)
......
...@@ -1399,3 +1399,32 @@ function VgF.GetLocCondition(loc, con) ...@@ -1399,3 +1399,32 @@ function VgF.GetLocCondition(loc, con)
end end
return loc, condition return loc, condition
end end
VgF.EffectDamageE = nil
---效果伤害的operation函数
---@param val number 伤害的数值
---@param p number 受伤的玩家
function VgF.EffectDamage(val, p)
return function (e, tp, eg, ep, ev, re, r, rp)
local c = e:GetHandler()
c:RegisterFlagEffect(FLAG_DAMAGE_TRIGGER, RESET_EVENT + RESETS_STANDARD, 0, 1, val - 1)
Duel.RegisterFlagEffect(p, FLAG_EFFECT_DAMAGE, 0, 0, 1)
VgD.TriggerCard(e, p, eg, ep, ev, re, r, rp)
local e1 = Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_F)
e1:SetCode(EVENT_CUSTOM + EVENT_TRIGGER)
e1:SetRange(LOCATION_ALL)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
e1:SetCondition(function (te, ttp, teg, tep, tev, tre, tr, trp)
return Duel.GetFlagEffect(p, FLAG_EFFECT_DAMAGE) > 0
end)
e1:SetOperation(VgD.TriggerCard)
c:RegisterEffect(e1)
if VgF.GetValueType(VgF.EffectDamageE) == "Effect" then
VgF.EffectDamageE:Reset()
VgF.EffectDamageE = nil
end
VgF.EffectDamageE = e1
end
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