Commit 91eddee8 authored by POLYMER's avatar POLYMER

fix

parent 57ecd457
No preview for this file type
......@@ -49,6 +49,9 @@ end
function s.activate(e,tp,eg,ep,ev,re,r,rp)
if Duel.NegateAttack() then
Duel.SkipPhase(1-tp,PHASE_BATTLE,RESET_PHASE+PHASE_BATTLE_STEP,1)
if e:GetHandler():IsLocation(LOCATION_HAND) then
Duel.SendtoGrave(e:GetHandler(),REASON_EFFECT)
end
if e:GetLabel()==1 and Duel.IsExistingMatchingCard(s.filter,tp,LOCATION_GRAVE,LOCATION_GRAVE,1,nil) and Duel.SelectYesNo(tp,aux.Stringid(id,2)) then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATOHAND)
local g=Duel.SelectMatchingCard(tp,s.filter,tp,LOCATION_GRAVE,LOCATION_GRAVE,1,2,nil)
......
......@@ -66,7 +66,7 @@ function s.activate(e,tp,eg,ep,ev,re,r,rp)
local e8=e5:Clone()
e8:SetCode(EFFECT_CANNOT_BE_LINK_MATERIAL)
tc:RegisterEffect(e8)
tc:RegisterFlagEffect(0,RESET_EVENT+RESETS_STANDARD,EFFECT_FLAG_CLIENT_HINT,1,0,aux.Stringid(id,1))
tc:RegisterFlagEffect(0,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END,EFFECT_FLAG_CLIENT_HINT,1,0,aux.Stringid(id,1))
end
end
end
......
--黑暗界里设菲
local s,id,o=GetID()
function s.initial_effect(c)
c:EnableReviveLimit()
--spsummon
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(id,0))
e1:SetCategory(CATEGORY_TOGRAVE+CATEGORY_CONTROL)
e1:SetType(EFFECT_TYPE_QUICK_O)
e1:SetCode(EVENT_FREE_CHAIN)
e1:SetRange(LOCATION_MZONE)
e1:SetCountLimit(1)
e1:SetTarget(s.tg)
e1:SetOperation(s.op)
c:RegisterEffect(e1)
end
function s.df1(c)
return c:IsType(TYPE_MONSTER) and c:IsDiscardable()
end
function s.df2(c)
return c:IsType(TYPE_SPELL+TYPE_TRAP) and c:IsDiscardable()
end
function s.df3(c,ck1,ck2)
return ((c:IsType(TYPE_MONSTER) and ck1) or (c:IsType(TYPE_SPELL+TYPE_TRAP) and ck2)) and c:IsDiscardable()
end
function s.mf(c)
return c:IsControlerCanBeChanged() and c:IsFaceup()
end
function s.tg(e,tp,eg,ep,ev,re,r,rp,chk)
local ck1=Duel.IsExistingMatchingCard(Card.IsAbleToGrave,tp,0,LOCATION_SZONE,1,nil)
local ck2=Duel.IsExistingMatchingCard(s.mf,tp,0,LOCATION_MZONE,1,nil)
if chk==0 then return (ck1 and Duel.IsExistingMatchingCard(s.df1,tp,LOCATION_HAND,0,1,e:GetHandler())) or (ck2 and Duel.IsExistingMatchingCard(s.df2,tp,LOCATION_HAND,0,1,e:GetHandler())) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_DISCARD)
local tc=Duel.SelectMatchingCard(tp,s.df3,tp,LOCATION_HAND,0,1,1,nil,ck1,ck2):GetFirst()
Duel.SendtoGrave(tc,REASON_DISCARD+REASON_COST)
if tc:IsType(TYPE_MONSTER) then
e:SetLabel(0)
Duel.SetOperationInfo(0,CATEGORY_TOGRAVE,nil,0,0,LOCATION_SZONE)
end
if tc:IsType(TYPE_SPELL+TYPE_TRAP) then
e:SetLabel(1)
Duel.SetOperationInfo(0,CATEGORY_CONTROL,nil,1,0,0)
end
end
function s.op(e,tp,eg,ep,ev,re,r,rp)
if e:GetLabel()==0 and Duel.IsExistingMatchingCard(Card.IsAbleToGrave,tp,0,LOCATION_SZONE,1,nil) then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOGRAVE)
local g=Duel.SelectMatchingCard(tp,Card.IsAbleToGrave,tp,0,LOCATION_SZONE,1,1,nil)
if g:GetCount()>0 then
local tgc=g:GetFirst()
Duel.HintSelection(g)
if Duel.SendtoGrave(tgc,REASON_EFFECT) and tgc:IsType(TYPE_CONTINUOUS) and Duel.GetLocationCount(1-tp,LOCATION_SZONE)>0 and not tgc:IsForbidden() and Duel.SelectYesNo(tp,aux.Stringid(id,2)) then
Duel.MoveToField(tgc,tp,tp,LOCATION_SZONE,POS_FACEUP,true)
end
end
end
if e:GetLabel()==1 and Duel.IsExistingMatchingCard(s.mf,tp,0,LOCATION_MZONE,1,nil) then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_CONTROL)
local tc=Duel.SelectMatchingCard(tp,s.mf,tp,0,LOCATION_MZONE,1,1,nil):GetFirst()
if Duel.GetControl(tc,tp) and Duel.SelectYesNo(tp,aux.Stringid(id,3)) then
Duel.NegateRelatedChain(tc,RESET_TURN_SET)
local e2=Effect.CreateEffect(e:GetHandler())
e2:SetType(EFFECT_TYPE_SINGLE)
e2:SetCode(EFFECT_DISABLE)
e2:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END)
tc:RegisterEffect(e2)
local e3=Effect.CreateEffect(e:GetHandler())
e3:SetType(EFFECT_TYPE_SINGLE)
e3:SetCode(EFFECT_DISABLE_EFFECT)
e3:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END)
tc:RegisterEffect(e3)
end
end
end
\ No newline at end of file
--祖先的最后仪式
local s,id,o=GetID()
function s.initial_effect(c)
aux.AddCodeList(c,64800172)
--Activate
local e0=Effect.CreateEffect(c)
e0:SetCategory(CATEGORY_SPECIAL_SUMMON+CATEGORY_DECKDES)
e0:SetType(EFFECT_TYPE_ACTIVATE)
e0:SetCode(EVENT_FREE_CHAIN)
e0:SetTarget(s.target)
e0:SetOperation(s.activate)
c:RegisterEffect(e0)
--token
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(id,0))
e1:SetCategory(CATEGORY_REMOVE+CATEGORY_TOHAND)
e1:SetType(EFFECT_TYPE_IGNITION)
e1:SetRange(LOCATION_GRAVE)
e1:SetCountLimit(1,id)
e1:SetLabel(0)
e1:SetCost(s.cost)
e1:SetTarget(s.mtg)
e1:SetOperation(s.mop)
c:RegisterEffect(e1)
--MJspsm
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(id,1))
e2:SetCategory(CATEGORY_REMOVE+CATEGORY_TOHAND)
e2:SetType(EFFECT_TYPE_IGNITION)
e2:SetRange(LOCATION_GRAVE)
e2:SetCountLimit(1,id)
e2:SetLabel(1)
e2:SetCost(s.cost)
e2:SetTarget(s.stg)
e2:SetOperation(s.sop)
c:RegisterEffect(e2)
end
--e1
function s.cfilter(c,e,tp)
return c:IsCode(64800172)
end
function s.mfilter(c)
return c:IsCode(64800172) and c:IsAbleToGrave()
end
function s.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then
local mg1=Duel.GetRitualMaterial(tp)
local mg2=Duel.GetMatchingGroup(s.mfilter,tp,LOCATION_DECK,0,nil):GetFirst()
local mg3=Duel.GetRitualMaterial(tp):Filter(Card.IsLevelBelow,nil,7)
return Duel.IsExistingMatchingCard(s.RitualUltimateFilter,tp,LOCATION_HAND,0,1,nil,nil,e,tp,mg1,mg2,Card.GetLevel,"Greater") or Duel.IsExistingMatchingCard(s.RitualUltimateFilter,tp,LOCATION_DECK+LOCATION_GRAVE,0,1,nil,s.cfilter,e,tp,mg3,nil,Card.GetLevel,"Greater")
end
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_HAND)
Duel.SetOperationInfo(0,CATEGORY_TOGRAVE,nil,0,tp,LOCATION_DECK)
end
function s.activate(e,tp,eg,ep,ev,re,r,rp)
local mg1=Duel.GetRitualMaterial(tp)
local mg2=Duel.GetMatchingGroup(s.mfilter,tp,LOCATION_DECK,0,nil)
local mg3=Duel.GetRitualMaterial(tp):Filter(Card.IsLevelBelow,nil,7)
local g=Duel.GetMatchingGroup(aux.RitualUltimateFilter,tp,LOCATION_HAND,0,nil,nil,e,tp,mg1,mg2,Card.GetLevel,"Greater")
local g1=Duel.GetMatchingGroup(s.RitualUltimateFilter,tp,LOCATION_DECK+LOCATION_GRAVE,0,nil,s.cfilter,e,tp,mg3,nil,Card.GetLevel,"Greater")
g:Merge(g1)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON)
local tc=g:Select(tp,1,1,nil):GetFirst()
if tc and tc:IsLocation(LOCATION_DECK) then
mg3=mg3:Filter(Card.IsCanBeRitualMaterial,tc,tc)
if tc.mat_filter then
mg3=mg3:Filter(tc.mat_filter,tc,tp)
else
mg3:RemoveCard(tc)
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE)
aux.GCheckAdditional=aux.RitualCheckAdditional(tc,tc:GetLevel(),"Greater")
local mat=mg3:SelectSubGroup(tp,s.RitualCheck,false,1,tc:GetLevel(),tp,tc,tc:GetLevel(),"Greater")
aux.GCheckAdditional=nil
if not mat or mat:GetCount()==0 then return end
tc:SetMaterial(mat)
Duel.ReleaseRitualMaterial(mat)
Duel.BreakEffect()
Duel.SpecialSummon(tc,SUMMON_TYPE_RITUAL,tp,tp,false,true,POS_FACEUP)
tc:CompleteProcedure()
else
local mg=mg1:Filter(Card.IsCanBeRitualMaterial,tc,tc)
mg:Merge(mg2)
if tc.mat_filter then
mg=mg:Filter(tc.mat_filter,tc,tp)
else
mg:RemoveCard(tc)
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE)
aux.GCheckAdditional=aux.RitualCheckAdditional(tc,tc:GetLevel(),"Greater")
local mat=mg:SelectSubGroup(tp,s.RitualCheck,false,1,tc:GetLevel(),tp,tc,tc:GetLevel(),"Greater")
aux.GCheckAdditional=nil
if not mat or mat:GetCount()==0 then return end
tc:SetMaterial(mat)
local mat2=mat:Filter(Card.IsLocation,nil,LOCATION_DECK+LOCATION_GRAVE):Filter(s.mfilter,nil)
mat:Sub(mat2)
Duel.ReleaseRitualMaterial(mat)
Duel.SendtoGrave(mat2,REASON_EFFECT+REASON_MATERIAL+REASON_RITUAL)
Duel.BreakEffect()
Duel.SpecialSummon(tc,SUMMON_TYPE_RITUAL,tp,tp,false,true,POS_FACEUP)
tc:CompleteProcedure()
end
end
--e2
function s.cost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
Duel.Hint(HINT_SELECTMSG,1-tp,aux.Stringid(id,e:GetLabel()))
end
function s.thfilter1(c,ec)
local ce=c:GetReasonEffect()
return c:IsAbleToHand() and ce and ce:GetHandler()==ec and c:IsType(TYPE_MONSTER)
end
function s.mtg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsExistingMatchingCard(s.thfilter1,tp,LOCATION_GRAVE,0,1,nil,e:GetHandler()) and e:GetHandler():IsAbleToRemove() end
local g=Duel.GetMatchingGroup(s.thfilter1,tp,LOCATION_GRAVE,0,nil,e:GetHandler())
Duel.SetOperationInfo(0,CATEGORY_TOHAND,g,1,0,0)
Duel.SetOperationInfo(0,CATEGORY_REMOVE,e:GetHandler(),1,0,0)
end
function s.mop(e,tp,eg,ep,ev,re,r,rp)
if Duel.IsExistingMatchingCard(s.thfilter1,tp,LOCATION_GRAVE,0,1,nil,e:GetHandler()) and Duel.Remove(e:GetHandler(),POS_FACEUP,REASON_EFFECT) then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATOHAND)
local g=Duel.SelectMatchingCard(tp,s.thfilter1,tp,LOCATION_GRAVE,0,1,1,nil,e:GetHandler())
if g:GetCount()>0 then
Duel.HintSelection(g)
Duel.SendtoHand(g,nil,REASON_EFFECT)
end
end
end
function s.thfilter2(c)
return c:IsAbleToRemove() and c:IsType(TYPE_MONSTER)
end
function s.stg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsExistingMatchingCard(s.thfilter2,tp,LOCATION_GRAVE,0,1,nil) and e:GetHandler():IsAbleToHand() end
local g=Duel.GetMatchingGroup(s.thfilter2,tp,LOCATION_GRAVE,0,nil)
Duel.SetOperationInfo(0,CATEGORY_TOHAND,e:GetHandler(),1,0,0)
Duel.SetOperationInfo(0,CATEGORY_REMOVE,g,1,0,0)
end
function s.sop(e,tp,eg,ep,ev,re,r,rp)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_REMOVE)
local g=Duel.SelectMatchingCard(tp,s.thfilter2,tp,LOCATION_GRAVE,0,1,1,nil)
Duel.HintSelection(g)
if Duel.Remove(g,POS_FACEUP,REASON_EFFECT) then
Duel.SendtoHand(e:GetHandler(),nil,REASON_EFFECT)
end
end
------------------------------------------------------------------------
function s.RitualUltimateFilter(c,filter,e,tp,m1,m2,level_function,greater_or_equal,chk)
if bit.band(c:GetType(),0x81)~=0x81 or (filter and not filter(c,e,tp,chk)) or not c:IsCanBeSpecialSummoned(e,SUMMON_TYPE_RITUAL,tp,false,true) then return false end
local mg=m1:Filter(Card.IsCanBeRitualMaterial,c,c)
if m2 then
mg:AddCard(m2)
end
if c.mat_filter then
mg=mg:Filter(c.mat_filter,c,tp)
else
mg:RemoveCard(c)
end
local lv=level_function(c)
Auxiliary.GCheckAdditional=Auxiliary.RitualCheckAdditional(c,lv,greater_or_equal)
local res=mg:CheckSubGroup(Auxiliary.RitualCheck,1,lv,tp,c,lv,greater_or_equal)
Auxiliary.GCheckAdditional=nil
return res
end
function s.dcfilter(c)
return c:IsCode(64800172) and c:IsLocation(LOCATION_DECK)
end
function s.RitualCheck(g,tp,c,lv,greater_or_equal)
return Auxiliary["RitualCheck"..greater_or_equal](g,c,lv) and Duel.GetMZoneCount(tp,g,tp)>0 and (not c.mat_group_check or c.mat_group_check(g,tp))
and (not Auxiliary.RCheckAdditional or Auxiliary.RCheckAdditional(tp,g,c))
and g:Filter(s.dcfilter,nil):GetCount()<=1
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