Commit e8a98a72 authored by Nemo Ma's avatar Nemo Ma

231231 wild

parent be54eddc
No preview for this file type
--朋克世纪末主题演奏
local s,id,o=GetID()
function s.initial_effect(c)
--
if c:GetOriginalCode()==id then
--c:SetUniqueOnField(1,0,id)
--activate from hand
local e0=Effect.CreateEffect(c)
e0:SetType(EFFECT_TYPE_SINGLE)
e0:SetCode(EFFECT_TRAP_ACT_IN_HAND)
c:RegisterEffect(e0)
--adjust
local e01=Effect.CreateEffect(c)
e01:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e01:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
e01:SetCode(EVENT_ADJUST)
e01:SetRange(0xff)
e01:SetOperation(s.adjustop)
c:RegisterEffect(e01)
--change effect type
local e02=Effect.CreateEffect(c)
e02:SetType(EFFECT_TYPE_FIELD)
e02:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e02:SetCode(id)
e02:SetRange(LOCATION_SZONE)
e02:SetTargetRange(1,0)
c:RegisterEffect(e02)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
e1:SetHintTiming(TIMING_DRAW_PHASE,TIMING_DRAW_PHASE+TIMING_END_PHASE)
c:RegisterEffect(e1)
local e0=e1:Clone()
e0:SetDescription(aux.Stringid(id,0))
e0:SetRange(LOCATION_DECK)
e0:SetCost(s.cost2)
c:RegisterEffect(e0)
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_FIELD)
e4:SetCode(EFFECT_ACTIVATE_COST)
e4:SetRange(LOCATION_DECK)
e4:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e4:SetTargetRange(1,0)
e4:SetTarget(s.actarget2)
e4:SetOperation(s.costop2)
c:RegisterEffect(e4)
--activate from hand
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD)
e2:SetCode(EFFECT_QP_ACT_IN_NTPHAND)
e2:SetRange(LOCATION_SZONE)
e2:SetTarget(aux.TargetBoolFunction(Card.IsSetCard,0x171))
e2:SetTargetRange(LOCATION_HAND,0)
c:RegisterEffect(e2)
local e3=e2:Clone()
e3:SetCode(EFFECT_TRAP_ACT_IN_HAND)
c:RegisterEffect(e3)
if not s.global_activate_check then
s.global_activate_check=true
s.activate_sequence={}
local _GetActivateLocation=Effect.GetActivateLocation
local _GetActivateSequence=Effect.GetActivateSequence
function Effect.GetActivateLocation(e)
if e:GetDescription()==aux.Stringid(id,0) then
return LOCATION_SZONE
end
return _GetActivateLocation(e)
end
function Effect.GetActivateSequence(e)
if e:GetDescription()==aux.Stringid(id,0) then
return s.activate_sequence[e]
end
return _GetActivateSequence(e)
end
local ge1=Effect.CreateEffect(c)
ge1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
ge1:SetCode(EVENT_CHAIN_SOLVED)
ge1:SetOperation(s.checkop)
Duel.RegisterEffect(ge1,0)
end
end
end
function s.checkop(e,tp,eg,ep,ev,re,r,rp)
local rc=re:GetHandler()
if re:GetValue()~=id+1 then return end
if rc:IsLocation(LOCATION_MZONE) and rc:GetFlagEffect(id)==0 then
rc:RegisterFlagEffect(id,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END,0,1)
end
end
function s.filter(c)
return c:IsSetCard(0x171) and not c:IsCode(id)
end
function s.actarget(e,te,tp)
--prevent activating
local tc=te:GetHandler()
return ((te:GetValue()==id or te:GetValue()==id+2) and (not Duel.IsPlayerAffectedByEffect(te:GetHandlerPlayer(),id) or tc:GetFlagEffect(id)~=0))
--prevent normal activating beside S&T on field
or (te:GetValue()==id+1 and Duel.IsPlayerAffectedByEffect(te:GetHandlerPlayer(),id) and not (te:IsHasType(EFFECT_TYPE_ACTIVATE) and tc:IsLocation(LOCATION_SZONE)))
--prevent quick activating on field
or (te:GetValue()==id+2 and te:IsHasType(EFFECT_TYPE_QUICK_O) and tc:IsLocation(LOCATION_SZONE))
end
function s.adjustop(e,tp,eg,ep,ev,re,r,rp)
--
if not s.globle_check then
s.globle_check=true
local ge0=Effect.CreateEffect(e:GetHandler())
ge0:SetType(EFFECT_TYPE_FIELD)
ge0:SetCode(EFFECT_ACTIVATE_COST)
ge0:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CANNOT_DISABLE)
ge0:SetCost(aux.FALSE)
ge0:SetTargetRange(1,1)
ge0:SetTarget(s.actarget)
Duel.RegisterEffect(ge0,0)
--Activate to field
local ge1=Effect.CreateEffect(e:GetHandler())
ge1:SetType(EFFECT_TYPE_FIELD)
ge1:SetCode(EFFECT_ACTIVATE_COST)
ge1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_CANNOT_DISABLE)
ge1:SetTargetRange(1,0)
ge1:SetTarget(s.actarget2)
ge1:SetOperation(s.costop)
Duel.RegisterEffect(ge1,0)
local ge2=ge1:Clone()
Duel.RegisterEffect(ge2,1)
local g=Duel.GetMatchingGroup(s.filter,0,0xff,0xff,nil)
cregister=Card.RegisterEffect
esetcountLimit=Effect.SetCountLimit
table_effect={}
table_countlimit_flag=0
table_countlimit_count=0
Effect.SetCountLimit=function(effect,count,flag)
table_countlimit_flag=flag
table_countlimit_count=count
return esetcountLimit(effect,count,flag)
end
Card.RegisterEffect=function(card,effect,flag)
if effect then
local eff=effect:Clone()
if (table_countlimit_flag~=0 and table_countlimit_count==1) or effect:IsHasType(EFFECT_TYPE_IGNITION) or
(effect:IsHasType(EFFECT_TYPE_ACTIVATE) and not card:IsType(TYPE_TRAP) and not card:IsType(TYPE_QUICKPLAY)) then
eff:SetValue(id+1)
--effect edit
local eff2=effect:Clone()
--id remove
if table_countlimit_flag~=0 and table_countlimit_count==1 then
esetcountLimit(eff2,1,0)
end
--spell speed 2
if eff2:IsHasType(EFFECT_TYPE_IGNITION) then
eff2:SetType(EFFECT_TYPE_QUICK_O)
eff2:SetCode(EVENT_FREE_CHAIN)
eff2:SetHintTiming(TIMING_END_PHASE,TIMING_DRAW_PHASE+TIMING_END_PHASE+TIMINGS_CHECK_MONSTER)
end
eff2:SetValue(id)
--spell activate in hand
if eff2:IsHasType(EFFECT_TYPE_ACTIVATE) and not card:IsType(TYPE_TRAP) and not card:IsType(TYPE_QUICKPLAY) then
eff2:SetType(EFFECT_TYPE_QUICK_O)
eff2:SetCode(EVENT_FREE_CHAIN)
eff2:SetRange(LOCATION_HAND)
eff2:SetValue(id+2)
eff2:SetHintTiming(TIMING_END_PHASE,TIMING_DRAW_PHASE+TIMING_END_PHASE+TIMINGS_CHECK_MONSTER)
end
table.insert(table_effect,eff2)
end
table.insert(table_effect,eff)
end
table_countlimit_flag=0
table_countlimit_count=0
return
end
for tc in aux.Next(g) do
table_effect={}
tc:ReplaceEffect(id,0)
Duel.CreateToken(0,tc:GetOriginalCode())
for key,eff in ipairs(table_effect) do
cregister(tc,eff)
end
end
Card.RegisterEffect=cregister
Effect.SetCountLimit=esetcountLimit
end
e:Reset()
end
function s.actarget2(e,te,tp)
local tc=te:GetHandler()
e:SetLabelObject(te)
return tc:IsSetCard(0x171) and te:IsHasType(EFFECT_TYPE_QUICK_O) and tc:IsLocation(LOCATION_HAND) and tc:IsType(TYPE_SPELL)
end
function s.costop(e,tp,eg,ep,ev,re,r,rp)
local te=e:GetLabelObject()
local tc=te:GetHandler()
local tp=te:GetHandlerPlayer()
te:SetType(EFFECT_TYPE_ACTIVATE)
if tc:IsType(TYPE_FIELD) then
local fc=Duel.GetFieldCard(tp,LOCATION_FZONE,0)
if fc then
Duel.SendtoGrave(fc,REASON_RULE)
Duel.BreakEffect()
end
Duel.MoveToField(tc,tp,tp,LOCATION_FZONE,POS_FACEUP,false)
else
Duel.MoveToField(tc,tp,tp,LOCATION_SZONE,POS_FACEUP,false)
end
local ge3=Effect.CreateEffect(tc)
ge3:SetType(EFFECT_TYPE_CONTINUOUS+EFFECT_TYPE_FIELD)
ge3:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
ge3:SetCode(EVENT_CHAIN_SOLVED)
ge3:SetLabelObject(te)
ge3:SetReset(RESET_PHASE+PHASE_END)
ge3:SetOperation(s.resetop)
Duel.RegisterEffect(ge3,tp)
local ge4=ge3:Clone()
ge4:SetCode(EVENT_CHAIN_NEGATED)
Duel.RegisterEffect(ge4,tp)
end
function s.resetop(e,tp,eg,ep,ev,re,r,rp)
if re==e:GetLabelObject() and re:IsHasType(EFFECT_TYPE_ACTIVATE) then
re:SetType(EFFECT_TYPE_QUICK_O)
e:Reset()
end
end
function s.actarget2(e,te,tp)
e:SetLabelObject(te)
return te:GetHandler()==e:GetHandler()
end
function s.costop2(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
local te=e:GetLabelObject()
Duel.MoveToField(c,tp,tp,LOCATION_SZONE,POS_FACEUP,false)
s.activate_sequence[te]=c:GetSequence()
c:CreateEffectRelation(te)
local ev0=Duel.GetCurrentChain()+1
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetCode(EVENT_CHAIN_SOLVING)
e1:SetCountLimit(1)
e1:SetCondition(function(e,tp,eg,ep,ev,re,r,rp) return ev==ev0 end)
e1:SetOperation(s.rsop2)
e1:SetReset(RESET_CHAIN)
Duel.RegisterEffect(e1,tp)
local e2=e1:Clone()
e2:SetCode(EVENT_CHAIN_NEGATED)
Duel.RegisterEffect(e2,tp)
end
function s.rsop2(e,tp,eg,ep,ev,re,r,rp)
local rc=re:GetHandler()
if e:GetCode()==EVENT_CHAIN_SOLVING and rc:IsRelateToEffect(re) then
rc:SetStatus(STATUS_EFFECT_ENABLED,true)
end
if e:GetCode()==EVENT_CHAIN_NEGATED and rc:IsRelateToEffect(re) and not (rc:IsOnField() and rc:IsFacedown()) then
rc:SetStatus(STATUS_ACTIVATE_DISABLED,true)
end
end
function s.cost2(e,tp,eg,ep,ev,re,r,rp,chk)
local ft=Duel.GetLocationCount(tp,LOCATION_SZONE)
if chk==0 then return ft>=1 end
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