Commit 33e612ee authored by salix5's avatar salix5

EFFECT_CANNOT_DISABLE, Relinquished

Now all the effects of Relinquished are monster effects.
parent 2c76eb11
......@@ -34,6 +34,7 @@ function c43455065.activate(e,tp,eg,ep,ev,re,r,rp)
local rct=1
if Duel.GetTurnPlayer()~=tp then rct=2 end
local c=e:GetHandler()
--indestructable
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_INDESTRUCTABLE_EFFECT)
......@@ -47,6 +48,7 @@ function c43455065.activate(e,tp,eg,ep,ev,re,r,rp)
e2:SetCode(EFFECT_INDESTRUCTABLE_BATTLE)
e2:SetTargetRange(0,LOCATION_MZONE)
Duel.RegisterEffect(e2,tp)
--cannot inactivate/disable
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD)
e2:SetCode(EFFECT_CANNOT_INACTIVATE)
......@@ -59,9 +61,18 @@ function c43455065.activate(e,tp,eg,ep,ev,re,r,rp)
e3:SetValue(c43455065.efilter)
e3:SetReset(RESET_PHASE+PHASE_END+RESET_OPPO_TURN,rct)
Duel.RegisterEffect(e3,tp)
--cannot disable
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_FIELD)
e4:SetCode(EFFECT_CANNOT_DISABLE)
e4:SetTargetRange(0,LOCATION_ONFIELD)
e4:SetProperty(EFFECT_FLAG_SET_AVAILABLE)
e4:SetTarget(c43455065.indtg)
e4:SetReset(RESET_PHASE+PHASE_END+RESET_OPPO_TURN,rct)
Duel.RegisterEffect(e4,tp)
end
function c43455065.indtg(e,c)
return c:IsLocation(LOCATION_SZONE) or (c:IsFaceup() and c:IsType(TYPE_SPELL+TYPE_TRAP))
return c:IsType(TYPE_SPELL+TYPE_TRAP)
end
function c43455065.efilter(e,ct)
local te,tp=Duel.GetChainInfo(ct,CHAININFO_TRIGGERING_EFFECT,CHAININFO_TRIGGERING_PLAYER)
......
......@@ -29,6 +29,15 @@ function c55428242.initial_effect(c)
e4:SetRange(LOCATION_MZONE)
e4:SetValue(c55428242.chainfilter)
c:RegisterEffect(e4)
--cannot disable
local e5=Effect.CreateEffect(c)
e5:SetType(EFFECT_TYPE_FIELD)
e5:SetCode(EFFECT_CANNOT_DISABLE)
e5:SetRange(LOCATION_MZONE)
e5:SetTargetRange(LOCATION_ONFIELD,0)
e5:SetProperty(EFFECT_FLAG_SET_AVAILABLE)
e5:SetTarget(c55428242.distarget)
c:RegisterEffect(e5)
end
function c55428242.efilter(e,te)
local c=te:GetHandler()
......@@ -37,6 +46,9 @@ end
function c55428242.etarget(e,c)
return c:GetType()==TYPE_TRAP and (c:IsSetCard(0x4c) or c:IsSetCard(0x89))
end
function c55428242.distarget(e,c)
return c:GetType()==TYPE_TRAP
end
function c55428242.chainfilter(e,ct)
local p=e:GetHandlerPlayer()
local te,tp=Duel.GetChainInfo(ct,CHAININFO_TRIGGERING_EFFECT,CHAININFO_TRIGGERING_PLAYER)
......
......@@ -22,7 +22,9 @@ function c5645210.initial_effect(c)
e3:SetType(EFFECT_TYPE_FIELD)
e3:SetCode(EFFECT_CANNOT_DISABLE)
e3:SetRange(LOCATION_MZONE)
e3:SetTargetRange(LOCATION_SZONE,0)
e3:SetTargetRange(LOCATION_ONFIELD,0)
e3:SetProperty(EFFECT_FLAG_SET_AVAILABLE)
e3:SetTarget(c5645210.distarget)
c:RegisterEffect(e3)
--inactivatable
local e4=Effect.CreateEffect(c)
......@@ -47,3 +49,6 @@ function c5645210.effectfilter(e,ct)
local tc=te:GetHandler()
return p==tp and tc:IsType(TYPE_SPELL+TYPE_TRAP)
end
function c5645210.distarget(e,c)
return c:IsType(TYPE_SPELL+TYPE_TRAP)
end
......@@ -4,29 +4,58 @@ function c63519819.initial_effect(c)
c:EnableReviveLimit()
aux.AddFusionProcCode2(c,64631466,27125110,true,true)
--equip
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(63519819,0))
e1:SetCategory(CATEGORY_EQUIP)
e1:SetType(EFFECT_TYPE_IGNITION)
e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
e1:SetRange(LOCATION_MZONE)
e1:SetCountLimit(1)
e1:SetCondition(c63519819.eqcon)
e1:SetTarget(c63519819.eqtg)
e1:SetOperation(c63519819.eqop)
c:RegisterEffect(e1)
--cannot attack
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(63519819,0))
e2:SetCategory(CATEGORY_EQUIP)
e2:SetType(EFFECT_TYPE_IGNITION)
e2:SetProperty(EFFECT_FLAG_CARD_TARGET)
e2:SetType(EFFECT_TYPE_FIELD)
e2:SetRange(LOCATION_MZONE)
e2:SetCountLimit(1)
e2:SetCondition(c63519819.eqcon)
e2:SetTarget(c63519819.eqtg)
e2:SetOperation(c63519819.eqop)
e2:SetCode(EFFECT_CANNOT_ATTACK)
e2:SetProperty(EFFECT_FLAG_SET_AVAILABLE)
e2:SetTargetRange(LOCATION_MZONE,LOCATION_MZONE)
e2:SetTarget(c63519819.antarget)
c:RegisterEffect(e2)
--cannot attack announce
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_FIELD)
e3:SetRange(LOCATION_MZONE)
e3:SetCode(EFFECT_CANNOT_ATTACK)
e3:SetTargetRange(LOCATION_MZONE,LOCATION_MZONE)
e3:SetTarget(c63519819.antarget)
local e3=e2:Clone()
e3:SetCode(EFFECT_CANNOT_CHANGE_POSITION)
c:RegisterEffect(e3)
local e4=e3:Clone()
e4:SetCode(EFFECT_CANNOT_CHANGE_POSITION)
e4:SetProperty(EFFECT_FLAG_SET_AVAILABLE)
--atk/def
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_SINGLE)
e4:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e4:SetRange(LOCATION_MZONE)
e4:SetCode(EFFECT_SET_ATTACK)
e4:SetCondition(c63519819.adcon)
e4:SetValue(c63519819.atkval)
e4:SetLabelObject(e1)
c:RegisterEffect(e4)
local e5=Effect.CreateEffect(c)
e5:SetType(EFFECT_TYPE_SINGLE)
e5:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e5:SetRange(LOCATION_MZONE)
e5:SetCode(EFFECT_SET_DEFENCE)
e5:SetCondition(c63519819.adcon)
e5:SetValue(c63519819.defval)
e5:SetLabelObject(e1)
c:RegisterEffect(e5)
--substitute
local e6=Effect.CreateEffect(c)
e6:SetType(EFFECT_TYPE_SINGLE)
e6:SetCode(EFFECT_DESTROY_SUBSTITUTE)
e6:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e6:SetRange(LOCATION_MZONE)
e6:SetCondition(c63519819.adcon)
e6:SetValue(c63519819.repval)
e6:SetLabelObject(e1)
c:RegisterEffect(e6)
end
function c63519819.eqcon(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
......@@ -47,48 +76,19 @@ end
function c63519819.eqop(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
local tc=Duel.GetFirstTarget()
if tc:IsRelateToEffect(e) then
if tc:IsRelateToEffect(e) and tc:IsType(TYPE_MONSTER) and tc:IsControler(1-tp) then
if c:IsFaceup() and c:IsRelateToEffect(e) then
local atk=tc:GetTextAttack()
local def=tc:GetTextDefence()
if tc:IsFacedown() or atk<0 then atk=0 end
if tc:IsFacedown() or def<0 then def=0 end
if not Duel.Equip(tp,tc,c,false) then return end
--Add Equip limit
tc:RegisterFlagEffect(63519819,RESET_EVENT+0x1fe0000,0,0)
e:SetLabelObject(tc)
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_COPY_INHERIT+EFFECT_FLAG_OWNER_RELATE)
e1:SetProperty(EFFECT_FLAG_OWNER_RELATE)
e1:SetCode(EFFECT_EQUIP_LIMIT)
e1:SetReset(RESET_EVENT+0x1fe0000)
e1:SetValue(c63519819.eqlimit)
tc:RegisterEffect(e1)
if atk>0 then
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_EQUIP)
e2:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE+EFFECT_FLAG_OWNER_RELATE)
e2:SetCode(EFFECT_SET_ATTACK)
e2:SetReset(RESET_EVENT+0x1fe0000)
e2:SetValue(atk)
tc:RegisterEffect(e2)
end
if def>0 then
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_EQUIP)
e3:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE+EFFECT_FLAG_OWNER_RELATE)
e3:SetCode(EFFECT_SET_DEFENCE)
e3:SetReset(RESET_EVENT+0x1fe0000)
e3:SetValue(def)
tc:RegisterEffect(e3)
end
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_EQUIP)
e4:SetCode(EFFECT_DESTROY_SUBSTITUTE)
e4:SetProperty(EFFECT_FLAG_SET_AVAILABLE)
e4:SetReset(RESET_EVENT+0x1fe0000)
e4:SetValue(c63519819.repval)
tc:RegisterEffect(e4)
else Duel.SendtoGrave(tc,REASON_EFFECT) end
end
end
......@@ -98,3 +98,25 @@ end
function c63519819.antarget(e,c)
return c~=e:GetHandler()
end
function c63519819.adcon(e,tp,eg,ep,ev,re,r,rp)
local ec=e:GetLabelObject():GetLabelObject()
return ec and ec:GetFlagEffect(63519819)~=0
end
function c63519819.atkval(e,c)
local ec=e:GetLabelObject():GetLabelObject()
local atk=ec:GetTextAttack()
if ec:IsFacedown() or bit.band(ec:GetOriginalType(),TYPE_MONSTER)==0 or atk<0 then
return 0
else
return atk
end
end
function c63519819.defval(e,c)
local ec=e:GetLabelObject():GetLabelObject()
local def=ec:GetTextDefence()
if ec:IsFacedown() or bit.band(ec:GetOriginalType(),TYPE_MONSTER)==0 or def<0 then
return 0
else
return def
end
end
......@@ -48,7 +48,6 @@ function c6387204.eqop(e,tp,eg,ep,ev,re,r,rp)
tc:RegisterEffect(e1)
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_EQUIP)
e2:SetProperty(EFFECT_FLAG_OWNER_RELATE+EFFECT_FLAG_IGNORE_IMMUNE)
e2:SetCode(EFFECT_UPDATE_ATTACK)
e2:SetReset(RESET_EVENT+0x1fe0000)
e2:SetValue(1000)
......
......@@ -13,16 +13,45 @@ function c64631466.initial_effect(c)
e1:SetTarget(c64631466.eqtg)
e1:SetOperation(c64631466.eqop)
c:RegisterEffect(e1)
--damage
--atk/def
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e2:SetProperty(EFFECT_FLAG_AVAILABLE_BD)
e2:SetCode(EVENT_DAMAGE)
e2:SetType(EFFECT_TYPE_SINGLE)
e2:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e2:SetRange(LOCATION_MZONE)
e2:SetCondition(c64631466.damcon)
e2:SetOperation(c64631466.damop)
e2:SetCode(EFFECT_SET_ATTACK)
e2:SetCondition(c64631466.adcon)
e2:SetValue(c64631466.atkval)
e2:SetLabelObject(e1)
c:RegisterEffect(e2)
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE)
e3:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e3:SetRange(LOCATION_MZONE)
e3:SetCode(EFFECT_SET_DEFENCE)
e3:SetCondition(c64631466.adcon)
e3:SetValue(c64631466.defval)
e3:SetLabelObject(e1)
c:RegisterEffect(e3)
--substitute
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_SINGLE)
e4:SetCode(EFFECT_DESTROY_SUBSTITUTE)
e4:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e4:SetRange(LOCATION_MZONE)
e4:SetCondition(c64631466.adcon)
e4:SetValue(c64631466.repval)
e4:SetLabelObject(e1)
c:RegisterEffect(e4)
--damage
local e5=Effect.CreateEffect(c)
e5:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e5:SetProperty(EFFECT_FLAG_AVAILABLE_BD)
e5:SetCode(EVENT_DAMAGE)
e5:SetRange(LOCATION_MZONE)
e5:SetCondition(c64631466.damcon)
e5:SetOperation(c64631466.damop)
e5:SetLabelObject(e1)
c:RegisterEffect(e5)
end
function c64631466.eqcon(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
......@@ -43,48 +72,19 @@ end
function c64631466.eqop(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
local tc=Duel.GetFirstTarget()
if tc:IsRelateToEffect(e) and tc:IsType(TYPE_MONSTER) then
if tc:IsRelateToEffect(e) and tc:IsType(TYPE_MONSTER) and tc:IsControler(1-tp) then
if c:IsFaceup() and c:IsRelateToEffect(e) then
local atk=tc:GetTextAttack()
local def=tc:GetTextDefence()
if tc:IsFacedown() or atk<0 then atk=0 end
if tc:IsFacedown() or def<0 then def=0 end
if not Duel.Equip(tp,tc,c,false) then return end
--Add Equip limit
tc:RegisterFlagEffect(64631466,RESET_EVENT+0x1fe0000,0,0)
e:SetLabelObject(tc)
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_COPY_INHERIT+EFFECT_FLAG_OWNER_RELATE)
e1:SetProperty(EFFECT_FLAG_OWNER_RELATE)
e1:SetCode(EFFECT_EQUIP_LIMIT)
e1:SetReset(RESET_EVENT+0x1fe0000)
e1:SetValue(c64631466.eqlimit)
tc:RegisterEffect(e1)
if atk>0 then
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_EQUIP)
e2:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE+EFFECT_FLAG_OWNER_RELATE)
e2:SetCode(EFFECT_SET_ATTACK)
e2:SetReset(RESET_EVENT+0x1fe0000)
e2:SetValue(atk)
tc:RegisterEffect(e2)
end
if def>0 then
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_EQUIP)
e3:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE+EFFECT_FLAG_OWNER_RELATE)
e3:SetCode(EFFECT_SET_DEFENCE)
e3:SetReset(RESET_EVENT+0x1fe0000)
e3:SetValue(def)
tc:RegisterEffect(e3)
end
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_EQUIP)
e4:SetCode(EFFECT_DESTROY_SUBSTITUTE)
e4:SetProperty(EFFECT_FLAG_SET_AVAILABLE)
e4:SetReset(RESET_EVENT+0x1fe0000)
e4:SetValue(c64631466.repval)
tc:RegisterEffect(e4)
else Duel.SendtoGrave(tc,REASON_EFFECT) end
end
end
......@@ -99,3 +99,25 @@ end
function c64631466.damop(e,tp,eg,ep,ev,re,r,rp)
Duel.Damage(1-tp,ev,REASON_EFFECT)
end
function c64631466.adcon(e,tp,eg,ep,ev,re,r,rp)
local ec=e:GetLabelObject():GetLabelObject()
return ec and ec:GetFlagEffect(64631466)~=0
end
function c64631466.atkval(e,c)
local ec=e:GetLabelObject():GetLabelObject()
local atk=ec:GetTextAttack()
if ec:IsFacedown() or bit.band(ec:GetOriginalType(),TYPE_MONSTER)==0 or atk<0 then
return 0
else
return atk
end
end
function c64631466.defval(e,c)
local ec=e:GetLabelObject():GetLabelObject()
local def=ec:GetTextDefence()
if ec:IsFacedown() or bit.band(ec:GetOriginalType(),TYPE_MONSTER)==0 or def<0 then
return 0
else
return def
end
end
......@@ -216,10 +216,10 @@ RESET_TEMP_REMOVE =0x00100000 --暂时除外重置
RESET_TOHAND =0x00200000 --回手牌或加入手牌重置
RESET_TODECK =0x00400000 --回卡组重置
RESET_LEAVE =0x00800000 --从场上移到其他位置/超量叠放重置
RESET_TOFIELD =0x01000000 --到场上重置
RESET_TOFIELD =0x01000000 --到场上重置(move_to_field())
RESET_CONTROL =0x02000000 --控制者变更重置
RESET_OVERLAY =0x04000000 --超量叠放重置
RESET_MSCHANGE =0x08000000 --从怪兽区到魔法区,或者从魔法区到怪兽区
RESET_MSCHANGE =0x08000000 --从怪兽区到魔法区,或者从魔法区到怪兽区(move_to_field()、寶玉獸)
--========== Types ========== --效果类型(定义效果触发类型,和codes一起使用)
EFFECT_TYPE_SINGLE =0x0001 --自己状态变化时触发
EFFECT_TYPE_FIELD =0x0002 --场上所有卡状态变化时触发
......@@ -247,7 +247,7 @@ EFFECT_FLAG_CANNOT_NEGATE =0x0200 --含有"此效果不會被無效"的敘述
EFFECT_FLAG_CANNOT_DISABLE =0x0400 --不会被无效
EFFECT_FLAG_PLAYER_TARGET =0x0800 --以玩家为对象
EFFECT_FLAG_BOTH_SIDE =0x1000 --双方都能使用(部分场地,弹压)
EFFECT_FLAG_COPY_INHERIT =0x2000 --继承复制的效果的Reset属性
EFFECT_FLAG_COPY_INHERIT =0x2000 --若由复制的效果產生則继承其Reset属性
EFFECT_FLAG_DAMAGE_STEP =0x4000 --可以在伤害步骤发动
EFFECT_FLAG_DAMAGE_CAL =0x8000 --可以在伤害计算时发动
EFFECT_FLAG_DELAY =0x10000 --場合型誘發效果、用於永續效果的EFFECT_TYPE_CONTINUOUS
......
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