Commit 51bd442c authored by JoyJ's avatar JoyJ

update srv5555 scripts

parent 97f7935f
--村规决斗:一拳超人
--开局时,双方从卡组外将1张【神拳粉碎】(97570038)表侧表示从游戏中除外。
--这张【神拳粉碎】得到以下效果。
--①这个效果每名玩家在决斗中只能使用1次。这张卡被除外的状态下,自己主要阶段1开始时才能发动。这个效果不会被无效化。
--双方猜拳直到有一方败北。败北的玩家必须把自己场上·手卡·墓地的卡全部里侧表示除外。那之后,回合结束。
--细则:
--由于是带有不确定性的效果,因此王谷在场等情况下仍然可以发动并正常处理。
--由于是对玩家效果所以无视抗性。
CUNGUI = {}
function Auxiliary.PreloadUds()
--adjust
local e1=Effect.GlobalEffect()
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetCode(EVENT_ADJUST)
e1:SetOperation(CUNGUI.AdjustOperation)
Duel.RegisterEffect(e1,0)
end
function CUNGUI.AdjustOperation()
if not CUNGUI.INIT then
CUNGUI.INIT = true
CUNGUI.RegisterCardRule(0)
CUNGUI.RegisterCardRule(1)
end
if CUNGUI.RuleCard[0] and (not CUNGUI.RuleCard[0]:IsLocation(LOCATION_REMOVED) or not CUNGUI.RuleCard[0]:IsFaceup()) then
Duel.Remove(CUNGUI.RuleCard[0],POS_FACEUP,REASON_RULE)
end
if CUNGUI.RuleCard[1] and not CUNGUI.RuleCard[1]:IsLocation(LOCATION_REMOVED) then
Duel.Remove(CUNGUI.RuleCard[1],POS_FACEUP,REASON_RULE)
end
if CUNGUI.RuleCard[0] and not CUNGUI.RuleCard[0]:IsFaceup() then
Duel.ChangePosition(CUNGUI.RuleCard[0],POS_FACEUP)
end
if CUNGUI.RuleCard[1] and not CUNGUI.RuleCard[1]:IsFaceup() then
Duel.ChangePosition(CUNGUI.RuleCard[1],POS_FACEUP)
end
end
CUNGUI.RuleCard={}
CUNGUI.ForbiddenEffects={}
CUNGUI.ForbiddenEffects[0]={}
CUNGUI.ForbiddenEffects[1]={}
function CUNGUI.RegisterCardRule(tp)
local c=Duel.CreateToken(tp,97570038)
Duel.Remove(c,POS_FACEUP,REASON_RULE)
CUNGUI.RuleCard[tp]=c
--forbid
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_IGNITION)
e1:SetCountLimit(1,EFFECT_COUNT_CODE_DUEL)
e1:SetProperty(EFFECT_FLAG_CANNOT_INACTIVATE+EFFECT_FLAG_CANNOT_NEGATE+EFFECT_FLAG_CANNOT_DISABLE)
e1:SetRange(LOCATION_REMOVED)
e1:SetCondition(CUNGUI.rulecond)
e1:SetOperation(CUNGUI.ruleop)
c:RegisterEffect(e1)
end
function CUNGUI.rulecond(e,tp,eg,ep,ev,re,r,rp)
return Duel.GetCurrentPhase()==PHASE_MAIN1 and not Duel.CheckPhaseActivity()
end
function CUNGUI.ruleop(e,tp,eg,ep,ev,re,r,rp)
local p=1-Duel.RockPaperScissors()
local g=Duel.GetFieldGroup(p,LOCATION_HAND+LOCATION_ONFIELD+LOCATION_GRAVE)
Duel.Remove(g,POS_FACEDOWN,REASON_RULE)
Duel.SkipPhase(tp,PHASE_MAIN1,RESET_PHASE+PHASE_END,1)
local e1=Effect.CreateEffect(e:GetHandler())
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
e1:SetTargetRange(1,0)
e1:SetCode(EFFECT_CANNOT_BP)
e1:SetReset(RESET_PHASE+PHASE_END)
Duel.RegisterEffect(e1,tp)
end
--村规决斗:怨灵缠身
--所有卡得到以下效果:
--这张卡在墓地的场合,从墓地把任意张卡除外才能发动。场上1只和那个数量相同等级的表侧表示的怪兽破坏。
--这个效果在对方回合也能发动。
--后攻多抽1张。
CUNGUI = {}
function Auxiliary.PreloadUds()
--adjust
local e1=Effect.GlobalEffect()
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetCode(EVENT_ADJUST)
e1:SetCountLimit(1)
e1:SetOperation(CUNGUI.AdjustOperation)
Duel.RegisterEffect(e1,0)
end
CUNGUI.RegisteredMonsters = Group.CreateGroup()
function CUNGUI.AdjustOperation(e,tp,eg,ep,ev,re,r,rp)
local g = Duel.GetMatchingGroup(nil,0,0x7f,0x7f,nil)
g:ForEach(CUNGUI.RegisterMonsterSpecialEffects)
if not CUNGUI.Init then
CUNGUI.Init = true
Duel.Draw(1,1,REASON_RULE)
end
end
function CUNGUI.RegisterMonsterSpecialEffects(c)
if CUNGUI.RegisteredMonsters:IsContains(c) then return end
CUNGUI.RegisteredMonsters:AddCard(c)
--instant(chain)
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(6733059,1))
e2:SetCategory(CATEGORY_DESTROY)
e2:SetType(EFFECT_TYPE_QUICK_O)
e2:SetRange(LOCATION_GRAVE)
e2:SetCode(EVENT_FREE_CHAIN)
e2:SetHintTiming(0,TIMINGS_CHECK_MONSTER)
e2:SetCost(CUNGUI.cost)
e2:SetOperation(CUNGUI.operation)
c:RegisterEffect(e2)
end
function CUNGUI.cfilter(c)
return c:IsAbleToRemoveAsCost()
end
function CUNGUI.tfilter(c,lv)
return c:IsFaceup() and c:IsLevelBelow(lv)
end
function CUNGUI.cost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then
local cg=Duel.GetMatchingGroup(CUNGUI.cfilter,tp,LOCATION_GRAVE,0,nil)
local tg=Duel.GetMatchingGroup(CUNGUI.tfilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,cg:GetCount())
return tg:GetCount()>0
end
e:SetLabel(0)
local cg=Duel.GetMatchingGroup(CUNGUI.cfilter,tp,LOCATION_GRAVE,0,nil)
local tg=Duel.GetMatchingGroup(CUNGUI.tfilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,cg:GetCount())
local lvt={}
local tc=tg:GetFirst()
while tc do
local tlv=tc:GetLevel()
lvt[tlv]=tlv
tc=tg:GetNext()
end
local pc=1
for i=1,12 do
if lvt[i] then lvt[i]=nil lvt[pc]=i pc=pc+1 end
end
lvt[pc]=nil
Duel.Hint(HINT_SELECTMSG,tp,aux.Stringid(6733059,2))
local lv=Duel.AnnounceNumber(tp,table.unpack(lvt))
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_REMOVE)
local rg=cg:Select(tp,lv,lv,nil)
Duel.Remove(rg,POS_FACEUP,REASON_COST)
Duel.SetOperationInfo(0,CATEGORY_DESTROY,tg,1,0,0)
Duel.SetTargetParam(lv)
end
function CUNGUI.dfilter(c,lv)
return c:IsFaceup() and c:IsLevel(lv)
end
function CUNGUI.operation(e,tp,eg,ep,ev,re,r,rp,chk)
local lv=Duel.GetChainInfo(0,CHAININFO_TARGET_PARAM)
if lv==0 then return end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_DESTROY)
local g=Duel.SelectMatchingCard(tp,CUNGUI.dfilter,tp,LOCATION_MZONE,LOCATION_MZONE,1,1,nil,lv)
Duel.Destroy(g,REASON_EFFECT)
end
--村规决斗:盗版卫士
--所有卡都具有全字段。
--所有卡都视为全种类卡(怪兽+魔法+陷阱+仪式+同调……),也视为任何一张特定卡。
--细则:
--并不意味着有特定卡的效果,也不意味着场上受到了那张卡的影响。
--因此例如【场上有“海”才能发动】的效果,即使有卡也仍然是不能发动的。
--另外,在绝大多数情况下,如果在怪兽区域就仍然只能视为怪兽,
--在魔法陷阱区域就仍然只能视为魔法陷阱。
--所以类似【自己场上有连接怪兽2只以上存在的场合才能发动】的效果,
--只会检查前场有没有2只(不管是不是连接怪兽的)怪兽,
--类似旋风的效果也只能破坏后场的卡。
--在极少数情况下可能有部分效果脱离这个限制?目前没有发现。
CUNGUI = {}
Card.IsSetCard = function(c,setname) return true end
Card.IsType = function(c,typ) return true end
Card.IsCode = function(c,...) return true end
function Auxiliary.PreloadUds()
end
--村规决斗:巅峰出道
--所有其他诱发效果的触发时点都变为【有怪兽(包括自己)召唤·反转召唤·特殊召唤成功时】。
--如果原本就是这三个时点触发的效果,则没有变化。
--会直接导致一部分对触发时点有所依赖的效果无法发动或处理。
local OrigRegister = Card.RegisterEffect
CUNGUI = {}
CUNGUI.Registered={}
Card.RegisterEffect = function(c,e,b)
local typ = e:GetType()
if not CUNGUI.Registered[e] and (typ & (EFFECT_TYPE_TRIGGER_O + EFFECT_TYPE_TRIGGER_F))>0 and e:GetOperation()~=nil then
local code = e:GetCode()
if code and code~=EVENT_SUMMON_SUCCESS and code~=EVENT_SPSUMMON_SUCCESS and code~=EVENT_FLIP_SUMMON_SUCCESS then
CUNGUI.Registered[e]=true
e:SetCondition(aux.TRUE)
e:SetCode(EVENT_SUMMON_SUCCESS)
e:SetRange(LOCATION_ONFIELD)
local prop = e:GetProperty() or 0
prop = prop | EFFECT_FLAG_DELAY
e:SetProperty(prop)
if (typ | EFFECT_TYPE_SINGLE) > 0 then
typ = typ - EFFECT_TYPE_SINGLE
typ = typ | EFFECT_TYPE_FIELD
end
if (typ | EFFECT_TYPE_ACTIONS)>0 then
typ = typ - EFFECT_TYPE_ACTIONS
end
e:SetType(typ)
local xe=e:Clone()
xe:SetCode(EVENT_SPSUMMON_SUCCESS)
OrigRegister(c,xe)
local xe2=e:Clone()
xe2:SetCode(EVENT_FLIP_SUMMON_SUCCESS)
OrigRegister(c,xe2)
local xe3=e:Clone()
typ=xe3:GetType()
if (typ & EFFECT_TYPE_FIELD)>0 then
if (typ | EFFECT_TYPE_ACTIONS)>0 then
typ = typ - EFFECT_TYPE_ACTIONS
end
typ = typ - EFFECT_TYPE_FIELD
typ = typ | EFFECT_TYPE_SINGLE
end
xe3:SetType(typ)
OrigRegister(c,xe3)
local xe4=xe2:Clone()
typ=xe4:GetType()
if (typ & EFFECT_TYPE_FIELD)>0 then
if (typ | EFFECT_TYPE_ACTIONS)>0 then
typ = typ - EFFECT_TYPE_ACTIONS
end
typ = typ - EFFECT_TYPE_FIELD
typ = typ | EFFECT_TYPE_SINGLE
end
xe4:SetType(typ)
OrigRegister(c,xe4)
local xe5=xe:Clone()
typ=xe5:GetType()
if (typ & EFFECT_TYPE_FIELD)>0 then
if (typ | EFFECT_TYPE_ACTIONS)>0 then
typ = typ - EFFECT_TYPE_ACTIONS
end
typ = typ - EFFECT_TYPE_FIELD
typ = typ | EFFECT_TYPE_SINGLE
end
xe5:SetType(typ)
OrigRegister(c,xe5)
end
end
return OrigRegister(c,e,b)
end
function Auxiliary.PreloadUds()
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