Commit 819847e7 authored by mercury233's avatar mercury233 Committed by GitHub

update synchro (#936)

parent 44b257bb
--水晶機巧-グリオンガンド
function c13455674.initial_effect(c)
c:EnableReviveLimit()
--synchro summon
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetCode(EFFECT_SPSUMMON_PROC)
e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(c13455674.syncon)
e1:SetOperation(c13455674.synop)
e1:SetValue(SUMMON_TYPE_SYNCHRO)
c:RegisterEffect(e1)
aux.AddSynchroMixProcedure(c,aux.NonTuner(nil),nil,nil,aux.Tuner(nil),2,99)
c:EnableReviveLimit()
--remove
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(13455674,0))
......@@ -40,80 +32,6 @@ function c13455674.initial_effect(c)
e4:SetCode(21142671)
c:RegisterEffect(e4)
end
function c13455674.matfilter1(c,syncard)
return c:IsType(TYPE_TUNER) and c:IsFaceup() and c:IsCanBeSynchroMaterial(syncard)
end
function c13455674.matfilter2(c,syncard)
return c:IsNotTuner() and c:IsFaceup() and c:IsCanBeSynchroMaterial(syncard)
end
function c13455674.synfilter(c,syncard,lv,g1,pg,ct)
local g=Group.FromCards(c)
g:Merge(pg)
Duel.SetSelectedCard(g)
return g1:CheckWithSumEqual(Card.GetSynchroLevel,lv,ct,63,syncard)
end
function c13455674.syncon(e,c,tuner,mg)
if c==nil then return true end
local tp=c:GetControler()
if Duel.GetLocationCount(tp,LOCATION_MZONE)<-2 then return false end
local g1=nil
local g2=nil
if mg then
g1=mg:Filter(c13455674.matfilter1,nil,c)
g2=mg:Filter(c13455674.matfilter2,nil,c)
else
g1=Duel.GetMatchingGroup(c13455674.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c13455674.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
local pg=Group.CreateGroup()
local ct=2
if tuner then
pg:AddCard(tuner)
ct=ct-1
end
if pe then
pg:AddCard(pe:GetOwner())
ct=ct-1
end
return g2:IsExists(c13455674.synfilter,1,nil,c,lv,g1,pg,ct)
end
function c13455674.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
local g=Group.CreateGroup()
local g1=nil
local g2=nil
if mg then
g1=mg:Filter(c13455674.matfilter1,nil,c)
g2=mg:Filter(c13455674.matfilter2,nil,c)
else
g1=Duel.GetMatchingGroup(c13455674.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c13455674.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
local ct=2
if tuner then
g:AddCard(tuner)
ct=ct-1
end
if pe then
local pc=pe:GetOwner()
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
Group.FromCards(pc):Select(tp,1,1,nil)
g:AddCard(pc)
ct=ct-1
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m2=g2:FilterSelect(tp,c13455674.synfilter,1,1,nil,c,lv,g1,g,ct)
g:Merge(m2)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m1=g1:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,ct,63,c)
g:Merge(m1)
c:SetMaterial(g)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO)
end
function c13455674.rmcon(e,tp,eg,ep,ev,re,r,rp)
return e:GetHandler():IsSummonType(SUMMON_TYPE_SYNCHRO)
end
......
......@@ -28,9 +28,6 @@ function c14943837.synlimit(e,c)
if not c then return false end
return not c:IsRace(RACE_DRAGON)
end
function c14943837.tuner_filter(c)
return c:GetLevel()~=4
end
function c14943837.synlimit2(e,c)
return c:GetLevel()~=4
end
......
--レッド・デーモンズ・ドラゴン・タイラント
function c16172067.initial_effect(c)
--synchro summon
aux.AddSynchroMixProcedure(c,aux.Tuner(nil),aux.Tuner(nil),nil,aux.NonTuner(nil),1,99)
c:EnableReviveLimit()
--cannot special summon
local e0=Effect.CreateEffect(c)
......@@ -8,16 +10,6 @@ function c16172067.initial_effect(c)
e0:SetCode(EFFECT_SPSUMMON_CONDITION)
e0:SetValue(aux.synlimit)
c:RegisterEffect(e0)
--synchro summon
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_SPSUMMON_PROC)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(c16172067.syncon)
e1:SetOperation(c16172067.synop)
e1:SetValue(SUMMON_TYPE_SYNCHRO)
c:RegisterEffect(e1)
--destroy
local e2=Effect.CreateEffect(c)
e2:SetCategory(CATEGORY_DESTROY)
......@@ -47,189 +39,6 @@ function c16172067.initial_effect(c)
e4:SetCode(21142671)
c:RegisterEffect(e4)
end
function c16172067.matfilter1(c,syncard)
return c:IsType(TYPE_TUNER) and (c:IsLocation(LOCATION_HAND) or c:IsFaceup()) and c:IsCanBeSynchroMaterial(syncard)
end
function c16172067.matfilter2(c,syncard)
return c:IsNotTuner() and (c:IsLocation(LOCATION_HAND) or c:IsFaceup()) and c:IsCanBeSynchroMaterial(syncard)
end
function c16172067.synfilter1(c,syncard,lv,g1,g2,g3,g4,mc)
if c==mc then return false end
local f1=c.tuner_filter
if mc and f1 and not f1(mc) then return false end
if c:IsHasEffect(EFFECT_HAND_SYNCHRO) then
return g3:IsExists(c16172067.synfilter2,1,c,syncard,lv,g2,g4,f1,c,mc)
else
return g1:IsExists(c16172067.synfilter2,1,c,syncard,lv,g2,g4,f1,c,mc)
end
end
function c16172067.synfilter2(c,syncard,lv,g2,g4,f1,tuner1,mc)
if c==tuner1 or c==mc then return false end
local f2=c.tuner_filter
if f1 and not f1(c) then return false end
if f2 and not f2(tuner1) then return false end
if mc and f2 and not f2(mc) then return false end
if (tuner1:IsHasEffect(EFFECT_HAND_SYNCHRO) and not c:IsLocation(LOCATION_HAND)) or c:IsHasEffect(EFFECT_HAND_SYNCHRO) then
return g4:IsExists(c16172067.synfilter3,1,nil,syncard,lv,f1,f2,g2,tuner1,c,mc)
else
local mg=g2:Filter(c16172067.synfilter4,nil,f1,f2)
if not mc then
Duel.SetSelectedCard(Group.FromCards(c,tuner1))
return mg:CheckWithSumEqual(Card.GetSynchroLevel,lv,1,99,syncard)
else
Duel.SetSelectedCard(Group.FromCards(c,tuner1,mc))
return mg:CheckWithSumEqual(Card.GetSynchroLevel,lv,0,99,syncard)
end
end
end
function c16172067.synfilter3(c,syncard,lv,f1,f2,g2,tuner1,tuner2,mc)
if c==tuner1 or c==tuner2 or c==mc then return false end
if (f1 and not f1(c)) or (f2 and not f2(c)) then return false end
local mg=g2:Filter(c16172067.synfilter4,nil,f1,f2)
if not mc then
Duel.SetSelectedCard(Group.FromCards(c,tuner1,tuner2))
else
Duel.SetSelectedCard(Group.FromCards(c,tuner1,tuner2,mc))
end
return mg:CheckWithSumEqual(Card.GetSynchroLevel,lv,0,99,syncard)
end
function c16172067.synfilter4(c,f1,f2)
return (not f1 or f1(c)) and (not f2 or f2(c))
end
function c16172067.syncon(e,c,tuner,mg)
if c==nil then return true end
local tp=c:GetControler()
if Duel.GetLocationCount(tp,LOCATION_MZONE)<-2 then return false end
if tuner and not tuner:IsCanBeSynchroMaterial(c) then return false end
local g1=nil
local g2=nil
local g3=nil
local g4=nil
if mg then
g1=mg:Filter(c16172067.matfilter1,nil,c)
g2=mg:Filter(c16172067.matfilter2,nil,c)
g3=g1:Clone()
g4=g2:Clone()
else
g1=Duel.GetMatchingGroup(c16172067.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c16172067.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g3=Duel.GetMatchingGroup(c16172067.matfilter1,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
g4=Duel.GetMatchingGroup(c16172067.matfilter2,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner and tuner:IsType(TYPE_TUNER) then
local f1=tuner.tuner_filter
if not pe then
return g1:IsExists(c16172067.synfilter2,1,tuner,c,lv,g2,g4,f1,tuner)
else
return c16172067.synfilter2(pe:GetOwner(),c,lv,g2,nil,f1,tuner)
end
end
if not pe then
return g1:IsExists(c16172067.synfilter1,1,nil,c,lv,g1,g2,g3,g4,tuner)
else
return c16172067.synfilter1(pe:GetOwner(),c,lv,g1,g2,g3,g4,tuner)
end
end
function c16172067.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
local g=Group.CreateGroup()
local g1=nil
local g2=nil
local g3=nil
local g4=nil
if mg then
g1=mg:Filter(c16172067.matfilter1,nil,c)
g2=mg:Filter(c16172067.matfilter2,nil,c)
g3=g1:Clone()
g4=g2:Clone()
else
g1=Duel.GetMatchingGroup(c16172067.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c16172067.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g3=Duel.GetMatchingGroup(c16172067.matfilter1,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
g4=Duel.GetMatchingGroup(c16172067.matfilter2,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner and tuner:IsType(TYPE_TUNER) then
g:AddCard(tuner)
local f1=tuner.tuner_filter
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tuner2=nil
if not pe then
local t2=g1:FilterSelect(tp,c16172067.synfilter2,1,1,tuner,c,lv,g2,g4,f1,tuner)
tuner2=t2:GetFirst()
else
tuner2=pe:GetOwner()
Group.FromCards(tuner2):Select(tp,1,1,nil)
end
g:AddCard(tuner2)
local f2=tuner2.tuner_filter
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
if tuner2:IsHasEffect(EFFECT_HAND_SYNCHRO) then
local m3=g4:FilterSelect(tp,c16172067.synfilter3,1,1,nil,c,lv,f1,f2,g2,tuner,tuner2)
g:Merge(m3)
local mg2=g2:Filter(c16172067.synfilter4,nil,f1,f2)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m4=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,0,99,c)
g:Merge(m4)
else
local mg2=g2:Filter(c16172067.synfilter4,nil,f1,f2)
Duel.SetSelectedCard(g)
local m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,99,c)
g:Merge(m3)
end
else
if tuner then g:AddCard(tuner) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tuner1=nil
if not pe then
local t1=g1:FilterSelect(tp,c16172067.synfilter1,1,1,nil,c,lv,g1,g2,g3,g4,tuner)
tuner1=t1:GetFirst()
else
tuner1=pe:GetOwner()
Group.FromCards(tuner1):Select(tp,1,1,nil)
end
g:AddCard(tuner1)
local f1=tuner1.tuner_filter
local tuner2=nil
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
if tuner1:IsHasEffect(EFFECT_HAND_SYNCHRO) then
local t2=g3:FilterSelect(tp,c16172067.synfilter2,1,1,tuner1,c,lv,g2,g4,f1,tuner1,tuner)
tuner2=t2:GetFirst()
else
local t2=g1:FilterSelect(tp,c16172067.synfilter2,1,1,tuner1,c,lv,g2,g4,f1,tuner1,tuner)
tuner2=t2:GetFirst()
end
g:AddCard(tuner2)
local f2=tuner2.tuner_filter
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
if (tuner1:IsHasEffect(EFFECT_HAND_SYNCHRO) and not tuner2:IsLocation(LOCATION_HAND))
or tuner2:IsHasEffect(EFFECT_HAND_SYNCHRO) then
local m3=g4:FilterSelect(tp,c16172067.synfilter3,1,1,nil,c,lv,f1,f2,g2,tuner1,tuner2,tuner)
g:Merge(m3)
local mg2=g2:Filter(c16172067.synfilter4,nil,f1,f2)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m4=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,0,99,c)
g:Merge(m4)
else
local mg2=g2:Filter(c16172067.synfilter4,nil,f1,f2)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
if not tuner then
local m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,99,c)
g:Merge(m3)
else
local m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,0,99,c)
g:Merge(m3)
end
end
end
c:SetMaterial(g)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO)
end
function c16172067.descon(e,tp,eg,ep,ev,re,r,rp)
return Duel.GetCurrentPhase()==PHASE_MAIN1
end
......
......@@ -23,7 +23,6 @@ function c16825874.initial_effect(c)
e3:SetCode(EFFECT_HAND_SYNCHRO)
c:RegisterEffect(e3)
end
c16825874.tuner_filter=aux.FALSE
function c16825874.ccon(e,tp,eg,ep,ev,re,r,rp)
return r==REASON_SYNCHRO
end
......
......@@ -31,6 +31,12 @@ function c25165047.initial_effect(c)
e4:SetCode(EFFECT_DESTROY_REPLACE)
e4:SetTarget(c25165047.desreptg)
c:RegisterEffect(e4)
--double tuner check
local e5=Effect.CreateEffect(c)
e5:SetType(EFFECT_TYPE_SINGLE)
e5:SetCode(EFFECT_MATERIAL_CHECK)
e5:SetValue(c25165047.valcheck)
c:RegisterEffect(e5)
end
function c25165047.lpcon(e,tp,eg,ep,ev,re,r,rp)
return e:GetHandler():IsSummonType(SUMMON_TYPE_SYNCHRO)
......@@ -56,3 +62,14 @@ function c25165047.desreptg(e,tp,eg,ep,ev,re,r,rp,chk)
return true
else return false end
end
function c25165047.valcheck(e,c)
local g=c:GetMaterial()
if g:IsExists(Card.IsType,2,nil,TYPE_TUNER) then
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e1:SetCode(21142671)
e1:SetReset(RESET_EVENT+0xfe0000+RESET_PHASE+PHASE_END)
c:RegisterEffect(e1)
end
end
......@@ -23,6 +23,12 @@ function c33541430.initial_effect(c)
e3:SetValue(1)
e3:SetOperation(c33541430.synop)
c:RegisterEffect(e3)
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_SINGLE)
e4:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e4:SetCode(89818984)
e4:SetRange(LOCATION_MZONE)
c:RegisterEffect(e4)
end
function c33541430.drcost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end
......
......@@ -8,7 +8,6 @@ function c37953640.initial_effect(c)
e1:SetTarget(c37953640.synlimit)
c:RegisterEffect(e1)
end
c37953640.tuner_filter=aux.FilterBoolFunction(Card.IsRace,RACE_FISH)
function c37953640.synlimit(e,c)
return c:IsRace(RACE_FISH)
end
......@@ -21,12 +21,13 @@ function c55863245.initial_effect(c)
e2:SetCode(EFFECT_IMMUNE_EFFECT)
e2:SetValue(c55863245.efilter)
c:RegisterEffect(e2)
--hand synchro for double tuner
--hand synchro
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE)
e3:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e3:SetCondition(c55863245.syncon)
e3:SetCode(EFFECT_HAND_SYNCHRO)
e3:SetTargetRange(0,1)
c:RegisterEffect(e3)
end
function c55863245.synfilter(c,syncard,tuner,f)
......
......@@ -14,7 +14,6 @@ function c56897896.initial_effect(c)
e2:SetValue(c56897896.syncheck)
c:RegisterEffect(e2)
end
c56897896.tuner_filter=aux.FALSE
function c56897896.synlimit(e,c)
return c:IsLevelBelow(4) and c:IsRace(RACE_WARRIOR+RACE_MACHINE)
end
......
......@@ -27,6 +27,12 @@ function c57261568.initial_effect(c)
e3:SetValue(1)
e3:SetOperation(c57261568.synop)
c:RegisterEffect(e3)
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_SINGLE)
e4:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e4:SetCode(89818984)
e4:SetRange(LOCATION_MZONE)
c:RegisterEffect(e4)
end
function c57261568.hspfilter(c,ft,tp)
return c:IsSetCard(0xe6) and not c:IsCode(57261568)
......
......@@ -17,9 +17,6 @@ function c61777313.initial_effect(c)
e2:SetOperation(c61777313.operation)
c:RegisterEffect(e2)
end
function c61777313.tuner_filter(c)
return c:IsSetCard(0x42)
end
function c61777313.synlimit(e,c)
return c:IsSetCard(0x42)
end
......
--琰魔竜王 レッド・デーモン・カラミティ
function c62242678.initial_effect(c)
--synchro summon
aux.AddSynchroMixProcedure(c,aux.Tuner(nil),aux.Tuner(nil),nil,aux.NonTuner(c62242678.sfilter),1,1)
c:EnableReviveLimit()
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_SPSUMMON_PROC)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(c62242678.syncon)
e1:SetOperation(c62242678.synop)
e1:SetValue(SUMMON_TYPE_SYNCHRO)
c:RegisterEffect(e1)
--act limit
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(62242678,0))
......@@ -49,128 +41,8 @@ function c62242678.initial_effect(c)
e5:SetCode(21142671)
c:RegisterEffect(e5)
end
function c62242678.matfilter1(c,syncard)
return c:IsType(TYPE_TUNER) and (c:IsLocation(LOCATION_HAND) or c:IsFaceup()) and c:IsCanBeSynchroMaterial(syncard)
end
function c62242678.matfilter2(c,syncard)
return c:IsNotTuner() and c:IsFaceup() and c:IsRace(RACE_DRAGON) and c:IsAttribute(ATTRIBUTE_DARK) and c:IsType(TYPE_SYNCHRO) and c:IsCanBeSynchroMaterial(syncard)
end
function c62242678.synfilter1(c,syncard,lv,g1,g2,g3)
local f1=c.tuner_filter
if c:IsHasEffect(EFFECT_HAND_SYNCHRO) then
return g3:IsExists(c62242678.synfilter2,1,c,syncard,lv,g2,f1,c)
else
return g1:IsExists(c62242678.synfilter2,1,c,syncard,lv,g2,f1,c)
end
end
function c62242678.synfilter2(c,syncard,lv,g2,f1,tuner1)
local f2=c.tuner_filter
if f1 and not f1(c) then return false end
if f2 and not f2(tuner1) then return false end
local mg=g2:Filter(c62242678.synfilter3,nil,f1,f2)
Duel.SetSelectedCard(Group.FromCards(c,tuner1))
return mg:CheckWithSumEqual(Card.GetSynchroLevel,lv,1,1,syncard)
end
function c62242678.synfilter3(c,f1,f2)
return (not f1 or f1(c)) and (not f2 or f2(c))
end
function c62242678.syncon(e,c,tuner,mg)
if c==nil then return true end
local tp=c:GetControler()
if Duel.GetLocationCount(tp,LOCATION_MZONE)<-2 then return false end
local g1=nil
local g2=nil
local g3=nil
if mg then
g1=mg:Filter(c62242678.matfilter1,nil,c)
g2=mg:Filter(c62242678.matfilter2,nil,c)
g3=g1:Clone()
else
g1=Duel.GetMatchingGroup(c62242678.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c62242678.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g3=Duel.GetMatchingGroup(c62242678.matfilter1,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner then
local f1=tuner.tuner_filter
if not pe then
return g1:IsExists(c62242678.synfilter2,1,tuner,c,lv,g2,f1,tuner)
else
return c62242678.synfilter2(pe:GetOwner(),c,lv,g2,f1,tuner)
end
end
if not pe then
return g1:IsExists(c62242678.synfilter1,1,nil,c,lv,g1,g2,g3)
else
return c62242678.synfilter1(pe:GetOwner(),c,lv,g1,g2,g3)
end
end
function c62242678.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
local g=Group.CreateGroup()
local g1=nil
local g2=nil
local g3=nil
if mg then
g1=mg:Filter(c62242678.matfilter1,nil,c)
g2=mg:Filter(c62242678.matfilter2,nil,c)
g3=g1:Clone()
else
g1=Duel.GetMatchingGroup(c62242678.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c62242678.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g3=Duel.GetMatchingGroup(c62242678.matfilter1,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner then
g:AddCard(tuner)
local f1=tuner.tuner_filter
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tuner2=nil
if not pe then
local t2=g1:FilterSelect(tp,c62242678.synfilter2,1,1,tuner,c,lv,g2,f1,tuner)
tuner2=t2:GetFirst()
else
tuner2=pe:GetOwner()
Group.FromCards(tuner2):Select(tp,1,1,nil)
end
g:AddCard(tuner2)
local f2=tuner2.tuner_filter
local mg2=g2:Filter(c62242678.synfilter3,nil,f1,f2)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
g:Merge(m3)
else
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tuner1=nil
if not pe then
local t1=g1:FilterSelect(tp,c62242678.synfilter1,1,1,nil,c,lv,g1,g2,g3)
tuner1=t1:GetFirst()
else
tuner1=pe:GetOwner()
Group.FromCards(tuner1):Select(tp,1,1,nil)
end
g:AddCard(tuner1)
local f1=tuner1.tuner_filter
local t2=nil
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
if tuner1:IsHasEffect(EFFECT_HAND_SYNCHRO) then
t2=g3:FilterSelect(tp,c62242678.synfilter2,1,1,tuner1,c,lv,g2,f1,tuner1)
else
t2=g1:FilterSelect(tp,c62242678.synfilter2,1,1,tuner1,c,lv,g2,f1,tuner1)
end
local tuner2=t2:GetFirst()
g:AddCard(tuner2)
local f2=tuner2.tuner_filter
local mg2=g2:Filter(c62242678.synfilter3,nil,f1,f2)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
g:Merge(m3)
end
c:SetMaterial(g)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO)
function c62242678.sfilter(c)
return c:IsRace(RACE_DRAGON) and c:IsAttribute(ATTRIBUTE_DARK) and c:IsType(TYPE_SYNCHRO)
end
function c62242678.limcon(e,tp,eg,ep,ev,re,r,rp)
return e:GetHandler():IsSummonType(SUMMON_TYPE_SYNCHRO)
......
......@@ -16,6 +16,13 @@ function c64910482.initial_effect(c)
e2:SetCode(EVENT_TO_GRAVE)
e2:SetOperation(c64910482.regop)
c:RegisterEffect(e2)
--hand synchro
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE)
e3:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e3:SetCode(EFFECT_HAND_SYNCHRO)
e3:SetTarget(c64910482.hsyntg)
c:RegisterEffect(e3)
end
function c64910482.synfilter1(c,syncard,tuner,f)
return c:IsFaceup() and c:IsCanBeSynchroMaterial(syncard,tuner) and (f==nil or f(c))
......@@ -108,3 +115,6 @@ function c64910482.thop(e,tp,eg,ep,ev,re,r,rp)
Duel.ConfirmCards(1-tp,g)
end
end
function c64910482.hsyntg(e,c)
return c:IsSetCard(0x27) and c:IsNotTuner()
end
--セイヴァー・デモン・ドラゴン
function c67030233.initial_effect(c)
--synchro summon
aux.AddSynchroMixProcedure(c,c67030233.mfilter1,c67030233.mfilter2,nil,aux.NonTuner(nil),1,1)
c:EnableReviveLimit()
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_SPSUMMON_PROC)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(c67030233.syncon)
e1:SetOperation(c67030233.synop)
e1:SetValue(SUMMON_TYPE_SYNCHRO)
c:RegisterEffect(e1)
--destroy
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(67030233,0))
......@@ -53,48 +45,11 @@ function c67030233.initial_effect(c)
e5:SetValue(1)
c:RegisterEffect(e5)
end
function c67030233.matfilter(c,syncard)
return c:IsFaceup() and c:IsCanBeSynchroMaterial(syncard)
function c67030233.mfilter1(c)
return c:IsCode(21159309)
end
function c67030233.synfilter1(c,syncard,lv,g)
return c:IsCode(21159309) and g:IsExists(c67030233.synfilter2,1,c,syncard,lv,g,c)
end
function c67030233.synfilter2(c,syncard,lv,g,mc)
if not c:IsCode(70902743) then return false end
if c:IsType(TYPE_TUNER)==mc:IsType(TYPE_TUNER) then return false end
local mg=g:Filter(Card.IsNotTuner,nil)
Duel.SetSelectedCard(Group.FromCards(c,mc))
return mg:CheckWithSumEqual(Card.GetSynchroLevel,lv,1,1,syncard)
end
function c67030233.syncon(e,c,tuner)
if c==nil then return true end
local tp=c:GetControler()
local mg=Duel.GetMatchingGroup(c67030233.matfilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
local lv=c:GetLevel()
if tuner then return c67030233.synfilter1(tuner,c,lv,mg) end
return mg:IsExists(c67030233.synfilter1,1,nil,c,lv,mg)
end
function c67030233.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner)
local g=Group.CreateGroup()
local mg=Duel.GetMatchingGroup(c67030233.matfilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
local lv=c:GetLevel()
local m1=tuner
if not tuner then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local t1=mg:FilterSelect(tp,c67030233.synfilter1,1,1,nil,c,lv,mg)
m1=t1:GetFirst()
g:AddCard(m1)
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local t2=mg:FilterSelect(tp,c67030233.synfilter2,1,1,m1,c,lv,mg,m1)
g:Merge(t2)
local mg2=mg:Filter(Card.IsNotTuner,nil)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local t3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
g:Merge(t3)
c:SetMaterial(g)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO)
function c67030233.mfilter2(c)
return c:IsCode(70902743)
end
function c67030233.descon(e,tp,eg,ep,ev,re,r,rp)
return e:GetHandler()==Duel.GetAttacker()
......
......@@ -47,9 +47,6 @@ function c67038874.operation(e,tp,eg,ep,ev,re,r,rp)
c:RegisterEffect(e1,true)
end
end
function c67038874.tuner_filter(c)
return c:IsSetCard(0x24)
end
function c67038874.synlimit(e,c)
return c:IsSetCard(0x24)
end
......@@ -10,7 +10,6 @@ function c73417207.initial_effect(c)
e1:SetValue(LOCATION_HAND)
c:RegisterEffect(e1)
end
c73417207.tuner_filter=aux.FALSE
function c73417207.synlimit(e,c)
return c:IsSetCard(0x42)
end
......@@ -54,9 +54,6 @@ function c73941492.initial_effect(c)
e7:SetOperation(c73941492.spop)
c:RegisterEffect(e7)
end
function c73941492.tuner_filter(c)
return c:IsSetCard(0x98) and c:IsType(TYPE_PENDULUM)
end
function c73941492.synlimit(e,c)
return c:IsSetCard(0x98) and c:IsType(TYPE_PENDULUM)
end
......
......@@ -10,7 +10,6 @@ function c74509280.initial_effect(c)
e1:SetValue(LOCATION_HAND)
c:RegisterEffect(e1)
end
c74509280.tuner_filter=aux.FALSE
function c74509280.synlimit(e,c)
return c:IsSetCard(0x23)
end
--セイヴァー・スター・ドラゴン
function c7841112.initial_effect(c)
--synchro summon
aux.AddSynchroMixProcedure(c,c7841112.mfilter1,c7841112.mfilter2,nil,aux.NonTuner(nil),1,1)
c:EnableReviveLimit()
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_SPSUMMON_PROC)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(c7841112.syncon)
e1:SetOperation(c7841112.synop)
e1:SetValue(SUMMON_TYPE_SYNCHRO)
c:RegisterEffect(e1)
--Negate
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(7841112,0))
......@@ -55,48 +47,11 @@ function c7841112.initial_effect(c)
e5:SetOperation(c7841112.spop)
c:RegisterEffect(e5)
end
function c7841112.matfilter(c,syncard)
return c:IsFaceup() and c:IsCanBeSynchroMaterial(syncard)
function c7841112.mfilter1(c)
return c:IsCode(21159309)
end
function c7841112.synfilter1(c,syncard,lv,g)
return c:IsCode(21159309) and g:IsExists(c7841112.synfilter2,1,c,syncard,lv,g,c)
end
function c7841112.synfilter2(c,syncard,lv,g,mc)
if not c:IsCode(44508094) then return false end
if c:IsType(TYPE_TUNER)==mc:IsType(TYPE_TUNER) then return false end
local mg=g:Filter(Card.IsNotTuner,nil)
Duel.SetSelectedCard(Group.FromCards(c,mc))
return mg:CheckWithSumEqual(Card.GetSynchroLevel,lv,1,1,syncard)
end
function c7841112.syncon(e,c,tuner)
if c==nil then return true end
local tp=c:GetControler()
local mg=Duel.GetMatchingGroup(c7841112.matfilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
local lv=c:GetLevel()
if tuner then return c7841112.synfilter1(tuner,c,lv,mg) end
return mg:IsExists(c7841112.synfilter1,1,nil,c,lv,mg)
end
function c7841112.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner)
local g=Group.CreateGroup()
local mg=Duel.GetMatchingGroup(c7841112.matfilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
local lv=c:GetLevel()
local m1=tuner
if not tuner then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local t1=mg:FilterSelect(tp,c7841112.synfilter1,1,1,nil,c,lv,mg)
m1=t1:GetFirst()
g:AddCard(m1)
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local t2=mg:FilterSelect(tp,c7841112.synfilter2,1,1,m1,c,lv,mg,m1)
g:Merge(t2)
local mg2=mg:Filter(Card.IsNotTuner,nil)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local t3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
g:Merge(t3)
c:SetMaterial(g)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO)
function c7841112.mfilter2(c)
return c:IsCode(44508094)
end
function c7841112.negcon(e,tp,eg,ep,ev,re,r,rp)
return not e:GetHandler():IsStatus(STATUS_BATTLE_DESTROYED) and ep~=tp and Duel.IsChainNegatable(ev)
......
......@@ -4,24 +4,13 @@ function c80896940.initial_effect(c)
--pendulum summon
aux.EnablePendulumAttribute(c,false)
--synchro summon
aux.AddSynchroMixProcedure(c,c80896940.matfilter1,nil,nil,aux.NonTuner(Card.IsType,TYPE_SYNCHRO),1,99)
--no tuner check
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(80896940,0))
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_SPSUMMON_PROC)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(aux.SynCondition(nil,aux.NonTuner(Card.IsType,TYPE_SYNCHRO),1,99))
e1:SetTarget(aux.SynTarget(nil,aux.NonTuner(Card.IsType,TYPE_SYNCHRO),1,99))
e1:SetOperation(aux.SynOperation(nil,aux.NonTuner(Card.IsType,TYPE_SYNCHRO),1,99))
e1:SetValue(SUMMON_TYPE_SYNCHRO)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e1:SetCode(80896940)
c:RegisterEffect(e1)
local e2=e1:Clone()
e2:SetDescription(aux.Stringid(80896940,1))
e2:SetCondition(c80896940.syncon)
e2:SetTarget(c80896940.syntg)
e2:SetOperation(c80896940.synop)
e2:SetValue(SUMMON_TYPE_SYNCHRO)
c:RegisterEffect(e2)
--indes
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
......@@ -76,99 +65,9 @@ function c80896940.initial_effect(c)
e7:SetOperation(c80896940.penop)
c:RegisterEffect(e7)
end
function c80896940.matfilter1(c,syncard)
return c:IsType(TYPE_PENDULUM) and c:IsSummonType(SUMMON_TYPE_PENDULUM) and c:IsNotTuner() and c:IsFaceup() and c:IsCanBeSynchroMaterial(syncard)
and Duel.IsExistingMatchingCard(c80896940.matfilter2,0,LOCATION_MZONE,LOCATION_MZONE,1,c,syncard)
end
function c80896940.matfilter2(c,syncard)
return c:IsNotTuner() and c:IsFaceup() and c:IsType(TYPE_SYNCHRO) and c:IsCanBeSynchroMaterial(syncard)
end
function c80896940.synfilter(c,syncard,lv,g2,minc)
local tlv=c:GetSynchroLevel(syncard)
if lv-tlv<=0 then return false end
local g=g2:Clone()
g:RemoveCard(c)
return g:CheckWithSumEqual(Card.GetSynchroLevel,lv-tlv,minc-1,63,syncard)
end
function c80896940.syncon(e,c,tuner,mg)
if c==nil then return true end
if c:IsType(TYPE_PENDULUM) and c:IsFaceup() then return false end
local tp=c:GetControler()
local ct=-Duel.GetLocationCount(tp,LOCATION_MZONE)
local minc=2
if minc<ct then minc=ct end
local g1=nil
local g2=nil
if mg then
g1=mg:Filter(c80896940.matfilter1,nil,c)
g2=mg:Filter(c80896940.matfilter2,nil,c)
else
g1=Duel.GetMatchingGroup(c80896940.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c80896940.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner then
return c80896940.synfilter(tuner,c,lv,g2,minc)
end
if not pe then
return g1:IsExists(c80896940.synfilter,1,nil,c,lv,g2,minc)
else
return c80896940.synfilter(pe:GetOwner(),c,lv,g2,minc)
end
end
function c80896940.syntg(e,tp,eg,ep,ev,re,r,rp,chk,c,tuner,mg)
local g=Group.CreateGroup()
local g1=nil
local g2=nil
if mg then
g1=mg:Filter(c80896940.matfilter1,nil,c)
g2=mg:Filter(c80896940.matfilter2,nil,c)
else
g1=Duel.GetMatchingGroup(c80896940.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c80896940.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
end
local ct=-Duel.GetLocationCount(tp,LOCATION_MZONE)
local minc=2
if minc<ct then minc=ct end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner then
g:AddCard(tuner)
g2:RemoveCard(tuner)
local lv1=tuner:GetSynchroLevel(c)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m2=g2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv-lv1,minc-1,63,c)
g:Merge(m2)
else
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tuner=nil
if not pe then
local t1=g1:FilterSelect(tp,c80896940.synfilter,1,1,nil,c,lv,g2,minc)
tuner=t1:GetFirst()
else
tuner=pe:GetOwner()
Group.FromCards(tuner):Select(tp,1,1,nil)
end
tuner:RegisterFlagEffect(80896940,RESET_EVENT+0x1fe0000,0,1)
g:AddCard(tuner)
g2:RemoveCard(tuner)
local lv1=tuner:GetSynchroLevel(c)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m2=g2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv-lv1,minc-1,63,c)
g:Merge(m2)
end
if g then
g:KeepAlive()
e:SetLabelObject(g)
return true
else return false end
end
function c80896940.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
local g=e:GetLabelObject()
c:SetMaterial(g)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO)
g:DeleteGroup()
function c80896940.matfilter1(c)
return c:IsType(TYPE_TUNER)
or (c:IsType(TYPE_PENDULUM) and c:IsSummonType(SUMMON_TYPE_PENDULUM) and c:IsNotTuner())
end
function c80896940.indcon(e,tp,eg,ep,ev,re,r,rp)
local a=Duel.GetAttacker()
......@@ -225,12 +124,11 @@ function c80896940.thop(e,tp,eg,ep,ev,re,r,rp)
end
end
function c80896940.mfilter(c)
return c:IsType(TYPE_PENDULUM) and c:IsSummonType(SUMMON_TYPE_PENDULUM)
and (c:IsType(TYPE_TUNER) or c:GetFlagEffect(80896940)~=0)
return c:IsType(TYPE_PENDULUM) and c:IsSummonType(SUMMON_TYPE_PENDULUM) and c:IsType(TYPE_TUNER)
end
function c80896940.valcheck(e,c)
local g=c:GetMaterial()
if g:IsExists(c80896940.mfilter,1,nil) then
if c:GetFlagEffect(80896940)~=0 or g:IsExists(c80896940.mfilter,1,nil) then
e:GetLabelObject():SetLabel(1)
else
e:GetLabelObject():SetLabel(0)
......
......@@ -27,6 +27,12 @@ function c89818984.initial_effect(c)
e3:SetValue(1)
e3:SetOperation(c89818984.synop)
c:RegisterEffect(e3)
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_SINGLE)
e4:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
e4:SetCode(89818984)
e4:SetRange(LOCATION_MZONE)
c:RegisterEffect(e4)
end
function c89818984.hspfilter(c,ft,tp)
return c:IsSetCard(0xe6) and c:GetLevel()==11 and not c:IsCode(89818984)
......
......@@ -64,7 +64,6 @@ function c9047460.spop(e,tp,eg,ep,ev,re,r,rp)
c:RegisterEffect(e1)
end
end
c9047460.tuner_filter=aux.FilterBoolFunction(Card.IsSetCard,0x33)
function c9047460.synlimit(e,c)
return c:IsSetCard(0x33)
end
--ヴァイロン・オメガ
function c93157004.initial_effect(c)
--synchro summon
aux.AddSynchroMixProcedure(c,aux.Tuner(nil),aux.Tuner(nil),nil,aux.NonTuner(Card.IsSetCard,0x30),1,1)
c:EnableReviveLimit()
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_SPSUMMON_PROC)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(c93157004.syncon)
e1:SetOperation(c93157004.synop)
e1:SetValue(SUMMON_TYPE_SYNCHRO)
c:RegisterEffect(e1)
--destroy
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(93157004,0))
......@@ -51,155 +43,6 @@ function c93157004.initial_effect(c)
e5:SetCode(21142671)
c:RegisterEffect(e5)
end
function c93157004.matfilter1(c,syncard)
return c:IsType(TYPE_TUNER) and (c:IsLocation(LOCATION_HAND) or c:IsFaceup()) and c:IsCanBeSynchroMaterial(syncard)
end
function c93157004.matfilter2(c,syncard)
return c:IsNotTuner() and (c:IsLocation(LOCATION_HAND) or c:IsFaceup()) and c:IsSetCard(0x30) and c:IsCanBeSynchroMaterial(syncard)
end
function c93157004.synfilter1(c,syncard,lv,g1,g2,g3,g4)
local f1=c.tuner_filter
if c:IsHasEffect(EFFECT_HAND_SYNCHRO) then
return g3:IsExists(c93157004.synfilter2,1,c,syncard,lv,g2,g4,f1,c)
else
return g1:IsExists(c93157004.synfilter2,1,c,syncard,lv,g2,g4,f1,c)
end
end
function c93157004.synfilter2(c,syncard,lv,g2,g4,f1,tuner1)
if c==tuner1 then return false end
local f2=c.tuner_filter
if f1 and not f1(c) then return false end
if f2 and not f2(tuner1) then return false end
Duel.SetSelectedCard(Group.FromCards(c,tuner1))
if (tuner1:IsHasEffect(EFFECT_HAND_SYNCHRO) and not c:IsLocation(LOCATION_HAND)) or c:IsHasEffect(EFFECT_HAND_SYNCHRO) then
local mg=g4:Filter(c93157004.synfilter3,nil,f1,f2)
return mg:CheckWithSumEqual(Card.GetSynchroLevel,lv,1,1,syncard)
else
local mg=g2:Filter(c93157004.synfilter3,nil,f1,f2)
return mg:CheckWithSumEqual(Card.GetSynchroLevel,lv,1,1,syncard)
end
end
function c93157004.synfilter3(c,f1,f2)
return (not f1 or f1(c)) and (not f2 or f2(c))
end
function c93157004.syncon(e,c,tuner,mg)
if c==nil then return true end
local tp=c:GetControler()
if Duel.GetLocationCount(tp,LOCATION_MZONE)<-2 then return false end
local g1=nil
local g2=nil
local g3=nil
local g4=nil
if mg then
g1=mg:Filter(c93157004.matfilter1,nil,c)
g2=mg:Filter(c93157004.matfilter2,nil,c)
g3=g1:Clone()
g4=g2:Clone()
else
g1=Duel.GetMatchingGroup(c93157004.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c93157004.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g3=Duel.GetMatchingGroup(c93157004.matfilter1,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
g4=Duel.GetMatchingGroup(c93157004.matfilter2,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner then
local f1=tuner.tuner_filter
if not pe then
return g1:IsExists(c93157004.synfilter2,1,tuner,c,lv,g2,g4,f1,tuner)
else
return c93157004.synfilter2(pe:GetOwner(),c,lv,g2,nil,f1,tuner)
end
end
if not pe then
return g1:IsExists(c93157004.synfilter1,1,nil,c,lv,g1,g2,g3,g4)
else
return c93157004.synfilter1(pe:GetOwner(),c,lv,g1,g2,g3,g4)
end
end
function c93157004.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
local g=Group.CreateGroup()
local g1=nil
local g2=nil
local g3=nil
local g4=nil
if mg then
g1=mg:Filter(c93157004.matfilter1,nil,c)
g2=mg:Filter(c93157004.matfilter2,nil,c)
g3=g1:Clone()
g4=g2:Clone()
else
g1=Duel.GetMatchingGroup(c93157004.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c93157004.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g3=Duel.GetMatchingGroup(c93157004.matfilter1,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
g4=Duel.GetMatchingGroup(c93157004.matfilter2,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner then
g:AddCard(tuner)
local f1=tuner.tuner_filter
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tuner2=nil
if not pe then
local t2=g1:FilterSelect(tp,c93157004.synfilter2,1,1,tuner,c,lv,g2,g4,f1,tuner)
tuner2=t2:GetFirst()
else
tuner2=pe:GetOwner()
Group.FromCards(tuner2):Select(tp,1,1,nil)
end
g:AddCard(tuner2)
local f2=tuner2.tuner_filter
local m3=nil
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
if tuner2:IsHasEffect(EFFECT_HAND_SYNCHRO) then
local mg4=g4:Filter(c93157004.synfilter3,nil,f1,f2)
m3=mg4:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
else
local mg2=g2:Filter(c93157004.synfilter3,nil,f1,f2)
m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
end
g:Merge(m3)
else
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tuner1=nil
if not pe then
local t1=g1:FilterSelect(tp,c93157004.synfilter1,1,1,nil,c,lv,g1,g2,g3,g4)
tuner1=t1:GetFirst()
else
tuner1=pe:GetOwner()
Group.FromCards(tuner1):Select(tp,1,1,nil)
end
g:AddCard(tuner1)
local f1=tuner1.tuner_filter
local tuner2=nil
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
if tuner1:IsHasEffect(EFFECT_HAND_SYNCHRO) then
local t2=g3:FilterSelect(tp,c93157004.synfilter2,1,1,tuner1,c,lv,g2,g4,f1,tuner1)
tuner2=t2:GetFirst()
else
local t2=g1:FilterSelect(tp,c93157004.synfilter2,1,1,tuner1,c,lv,g2,g4,f1,tuner1)
tuner2=t2:GetFirst()
end
g:AddCard(tuner2)
local f2=tuner2.tuner_filter
local m3=nil
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
if (tuner1:IsHasEffect(EFFECT_HAND_SYNCHRO) and not tuner2:IsLocation(LOCATION_HAND))
or tuner2:IsHasEffect(EFFECT_HAND_SYNCHRO) then
local mg4=g4:Filter(c93157004.synfilter3,nil,f1,f2)
m3=mg4:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
else
local mg2=g2:Filter(c93157004.synfilter3,nil,f1,f2)
m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
end
g:Merge(m3)
end
c:SetMaterial(g)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO)
end
function c93157004.descon(e,tp,eg,ep,ev,re,r,rp)
return e:GetHandler():IsSummonType(SUMMON_TYPE_SYNCHRO)
end
......
......@@ -40,7 +40,6 @@ function c93369354.spop(e,tp,eg,ep,ev,re,r,rp)
if not c:IsRelateToEffect(e) then return end
Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP)
end
c93369354.tuner_filter=aux.FilterBoolFunction(Card.IsAttribute,ATTRIBUTE_WATER)
function c93369354.synlimit(e,c)
return c:IsAttribute(ATTRIBUTE_WATER)
end
--スカーレッド・ノヴァ・ドラゴン
function c97489701.initial_effect(c)
--synchro summon
aux.AddSynchroMixProcedure(c,aux.Tuner(nil),aux.Tuner(nil),nil,aux.NonTuner(Card.IsCode,70902743),1,1)
c:EnableReviveLimit()
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_SPSUMMON_PROC)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(c97489701.syncon)
e1:SetOperation(c97489701.synop)
e1:SetValue(SUMMON_TYPE_SYNCHRO)
c:RegisterEffect(e1)
--atk
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_SINGLE)
......@@ -58,152 +50,6 @@ function c97489701.initial_effect(c)
e6:SetCode(21142671)
c:RegisterEffect(e6)
end
function c97489701.matfilter1(c,syncard)
return c:IsType(TYPE_TUNER) and (c:IsLocation(LOCATION_HAND) or c:IsFaceup()) and c:IsCanBeSynchroMaterial(syncard)
end
function c97489701.matfilter2(c,syncard)
return c:IsFaceup() and c:IsCode(70902743) and c:IsCanBeSynchroMaterial(syncard)
end
function c97489701.synfilter1(c,syncard,lv,g1,g2,g3,mc)
local f1=c.tuner_filter
if mc then
if f1 and not f1(mc) then return false end
local mg=g1:Filter(c97489701.synfilter4,nil,f1,mc)
Duel.SetSelectedCard(Group.FromCards(c,mc))
return mg:CheckWithSumEqual(Card.GetSynchroLevel,lv,1,1,syncard)
end
if c:IsHasEffect(EFFECT_HAND_SYNCHRO) then
return g3:IsExists(c97489701.synfilter2,1,c,syncard,lv,g2,f1,c)
else
return g1:IsExists(c97489701.synfilter2,1,c,syncard,lv,g2,f1,c)
end
end
function c97489701.synfilter2(c,syncard,lv,g2,f1,tuner1)
local f2=c.tuner_filter
if f1 and not f1(c) then return false end
if f2 and not f2(tuner1) then return false end
local mg=g2:Filter(c97489701.synfilter3,nil,f1,f2)
Duel.SetSelectedCard(Group.FromCards(c,tuner1))
return mg:CheckWithSumEqual(Card.GetSynchroLevel,lv,1,1,syncard)
end
function c97489701.synfilter3(c,f1,f2)
return (not f1 or f1(c)) and (not f2 or f2(c))
end
function c97489701.synfilter4(c,f1,mc)
local f2=c.tuner_filter
return (not f1 or f1(c)) and (not f2 or f2(mc))
end
function c97489701.syncon(e,c,tuner,mg)
if c==nil then return true end
local tp=c:GetControler()
if Duel.GetLocationCount(tp,LOCATION_MZONE)<-2 then return false end
if tuner then
if not tuner:IsCanBeSynchroMaterial(c) then return false end
if not (tuner:IsType(TYPE_TUNER) or tuner:IsCode(70902743)) then return false end
end
local g1=nil
local g2=nil
local g3=nil
if mg then
g1=mg:Filter(c97489701.matfilter1,nil,c)
g2=mg:Filter(c97489701.matfilter2,nil,c)
g3=g1:Clone()
else
g1=Duel.GetMatchingGroup(c97489701.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c97489701.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g3=Duel.GetMatchingGroup(c97489701.matfilter1,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner and tuner:IsType(TYPE_TUNER) then
local f1=tuner.tuner_filter
if not pe then
return g1:IsExists(c97489701.synfilter2,1,tuner,c,lv,g2,f1,tuner)
else
return c97489701.synfilter2(pe:GetOwner(),c,lv,g2,f1,tuner)
end
end
if not pe then
return g1:IsExists(c97489701.synfilter1,1,nil,c,lv,g1,g2,g3,tuner)
else
return c97489701.synfilter1(pe:GetOwner(),c,lv,g1,g2,g3,tuner)
end
end
function c97489701.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
local g=Group.CreateGroup()
local g1=nil
local g2=nil
local g3=nil
if mg then
g1=mg:Filter(c97489701.matfilter1,nil,c)
g2=mg:Filter(c97489701.matfilter2,nil,c)
g3=g1:Clone()
else
g1=Duel.GetMatchingGroup(c97489701.matfilter1,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g2=Duel.GetMatchingGroup(c97489701.matfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,nil,c)
g3=Duel.GetMatchingGroup(c97489701.matfilter1,tp,LOCATION_MZONE+LOCATION_HAND,LOCATION_MZONE,nil,c)
end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner and tuner:IsType(TYPE_TUNER) then
g:AddCard(tuner)
local f1=tuner.tuner_filter
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tuner2=nil
if not pe then
local t2=g1:FilterSelect(tp,c97489701.synfilter2,1,1,tuner,c,lv,g2,f1,tuner)
tuner2=t2:GetFirst()
else
tuner2=pe:GetOwner()
Group.FromCards(tuner2):Select(tp,1,1,nil)
end
g:AddCard(tuner2)
local f2=tuner2.tuner_filter
local mg2=g2:Filter(c97489701.synfilter3,nil,f1,f2)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
g:Merge(m3)
else
if tuner then g:AddCard(tuner) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tuner1=nil
if not pe then
local t1=g1:FilterSelect(tp,c97489701.synfilter1,1,1,nil,c,lv,g1,g2,g3,tuner)
tuner1=t1:GetFirst()
else
tuner1=pe:GetOwner()
Group.FromCards(tuner1):Select(tp,1,1,nil)
end
g:AddCard(tuner1)
local f1=tuner1.tuner_filter
if tuner then
local mg2=g1:Filter(c97489701.synfilter4,nil,f1,tuner)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
g:Merge(m3)
else
local t2=nil
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
if tuner1:IsHasEffect(EFFECT_HAND_SYNCHRO) then
t2=g3:FilterSelect(tp,c97489701.synfilter2,1,1,tuner1,c,lv,g2,f1,tuner1)
else
t2=g1:FilterSelect(tp,c97489701.synfilter2,1,1,tuner1,c,lv,g2,f1,tuner1)
end
local tuner2=t2:GetFirst()
g:AddCard(tuner2)
local f2=tuner2.tuner_filter
local mg2=g2:Filter(c97489701.synfilter3,nil,f1,f2)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
g:Merge(m3)
end
end
c:SetMaterial(g)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO)
end
function c97489701.atkval(e,c)
return Duel.GetMatchingGroupCount(Card.IsType,c:GetControler(),LOCATION_GRAVE,0,nil,TYPE_TUNER)*500
end
......
......@@ -63,7 +63,7 @@ ATTRIBUTE_LIGHT =0x10 --光
ATTRIBUTE_DARK =0x20 --暗
ATTRIBUTE_DEVINE =0x40 --神
--Races 种族
RACE_ALL =0x1ffffff --全种族
RACE_ALL =0x1ffffff --全种族
RACE_WARRIOR =0x1 --战士
RACE_SPELLCASTER =0x2 --魔法师
RACE_FAIRY =0x4 --天使
......@@ -88,7 +88,7 @@ RACE_PSYCHO =0x100000 --念动力
RACE_DEVINE =0x200000 --幻神兽
RACE_CREATORGOD =0x400000 --创造神
RACE_WYRM =0x800000 --幻龙
RACE_CYBERSE =0x1000000 --电子界
RACE_CYBERSE =0x1000000 --电子界
--Reason 卡片到当前位置的原因
REASON_DESTROY =0x1 --破坏
REASON_RELEASE =0x2 --解放
......@@ -116,7 +116,7 @@ REASON_REPLACE =0x1000000 --代替
REASON_DRAW =0x2000000 --抽卡
REASON_REDIRECT =0x4000000 --改变去向(大宇宙,带菌等)
REASON_REVEAL =0x8000000 --翻开卡组(森罗)
REASON_LINK =0x10000000 --用于连接召唤
REASON_LINK =0x10000000 --用于连接召唤
--Location Reason
LOCATION_REASON_TOFIELD =0x1 --Duel.GetLocationCount()預設值,凱薩競技場
LOCATION_REASON_CONTROL =0x2 --Card.IsControlerCanBeChanged()使用
......@@ -131,7 +131,7 @@ SUMMON_TYPE_RITUAL =0x45000000 --仪式召唤
SUMMON_TYPE_SYNCHRO =0x46000000 --同调召唤
SUMMON_TYPE_XYZ =0x49000000 --超量召唤
SUMMON_TYPE_PENDULUM =0x4a000000 --灵摆召唤
SUMMON_TYPE_LINK =0x4c000000 --连接召唤
SUMMON_TYPE_LINK =0x4c000000 --连接召唤
--Status --卡片当前状态
STATUS_DISABLED =0x0001 --效果被无效
STATUS_TO_ENABLE =0x0002 --将变成有效
......@@ -214,7 +214,7 @@ CHAININFO_DISABLE_PLAYER =0x400 --无效的玩家
CHAININFO_CHAIN_ID =0x800 --连锁ID
CHAININFO_TYPE =0x1000 --连锁类型
CHAININFO_EXTTYPE =0x2000 --连锁额外类型
CHAININFO_TRIGGERING_POSITION =0x4000 --连锁的表示形式
CHAININFO_TRIGGERING_POSITION =0x4000 --连锁发生时的表示形式
--========== Reset ========== --重置条件(注意:重置条件可以多个相加)
RESET_SELF_TURN =0x10000000 --自己回合的階段重置
RESET_OPPO_TURN =0x20000000 --对方回合的階段重置
......@@ -418,7 +418,7 @@ EFFECT_DECREASE_TRIBUTE_SET =152 --减少放置怪兽的祭品
EFFECT_EXTRA_RELEASE =153 --必須使用的代替解放(灵魂交错)
EFFECT_TRIBUTE_LIMIT =154 --祭品限制
EFFECT_EXTRA_RELEASE_SUM =155 --代替召唤解放(帝王的烈旋)
EFFECT_TRIPLE_TRIBUTE =156
EFFECT_TRIPLE_TRIBUTE =156 --N/A
EFFECT_PUBLIC =160 --公开手牌
EFFECT_COUNTER_PERMIT =0x10000--允许放置指示物类型
EFFECT_COUNTER_LIMIT =0x20000--允许放置指示物数量
......@@ -457,7 +457,7 @@ EFFECT_XYZ_MATERIAL =233 --可以当作超量素材
EFFECT_FUSION_SUBSTITUTE =234 --代替融合素材
EFFECT_CANNOT_BE_FUSION_MATERIAL =235--不能做融合素材
EFFECT_CANNOT_BE_SYNCHRO_MATERIAL =236--不能做同调素材
EFFECT_SYNCHRO_MATERIAL_CUSTOM =237--同调素材限制
EFFECT_SYNCHRO_MATERIAL_CUSTOM =237--自定义Tuner的同调过程
EFFECT_CANNOT_BE_XYZ_MATERIAL =238--不能做超量素材
EFFECT_CANNOT_BE_LINK_MATERIAL =239--不能做连接素材
EFFECT_SYNCHRO_LEVEL =240--做同调素材时的等级
......@@ -518,8 +518,8 @@ EFFECT_OLDUNION_STATUS =348 --旧同盟状态
EFFECT_ADD_FUSION_ATTRIBUTE =349 --reserve
EFFECT_REMOVE_FUSION_ATTRIBUTE =350 --reserve
EFFECT_CHANGE_FUSION_ATTRIBUTE =351 --用作融合素材时的属性
EFFECT_EXTRA_FUSION_MATERIAL =352 --
EFFECT_TUNER_MATERIAL_LIMIT =353 --
EFFECT_EXTRA_FUSION_MATERIAL =352 --增加融合素材(万溶炼金师)
EFFECT_TUNER_MATERIAL_LIMIT =353 --同调素材限制
--下面是诱发效果的诱发事件、时点 (如果是TYPE_SINGLE则自己发生以下事件后触发,如果TYPE_FIELD则场上任何卡发生以下事件都触发)
EVENT_STARTUP =1000 --游戏开始时
......@@ -621,7 +621,7 @@ CATEGORY_LEAVE_GRAVE =0x4000000 --离开墓地效果
CATEGORY_LVCHANGE =0x8000000 --改变等级效果
CATEGORY_NEGATE =0x10000000 --使发动无效效果
CATEGORY_ANNOUNCE =0x20000000 --發動時宣言卡名的效果
CATEGORY_FUSION_SUMMON =0x40000000 --融合召唤效果(暴走魔法阵)
CATEGORY_FUSION_SUMMON =0x40000000 --融合召唤效果(暴走魔法阵)
--Hint
HINT_EVENT =1
HINT_MESSAGE =2
......@@ -745,7 +745,7 @@ GLOBALFLAG_SPSUMMON_COUNT =0x40 --玩家的特殊召唤次数限制
GLOBALFLAG_XMAT_COUNT_LIMIT =0x80 --超量素材数量限制标记(光天使 天座)
GLOBALFLAG_SELF_TOGRAVE =0x100 --不入連鎖的送墓檢查(EFFECT_SELF_TOGRAVE)
GLOBALFLAG_SPSUMMON_ONCE =0x200 --1回合只能特殊召喚1次(Card.SetSPSummonOnce())
GLOBALFLAG_TUNE_MAGICIAN =0x400 --
GLOBALFLAG_TUNE_MAGICIAN =0x400 --超量素材检查标记(调弦之魔术师)
--count_code
EFFECT_COUNT_CODE_OATH =0x10000000 --发动次数限制(誓约次数, 发动被无效不计数)
EFFECT_COUNT_CODE_DUEL =0x20000000 --决斗中使用次数
......@@ -770,7 +770,7 @@ ACTIVITY_BATTLE_PHASE =6 -- not available in custom counter
ACTIVITY_CHAIN =7 -- only available in custom counter
--announce type(宣言类型,CATEGORY_ANNOUNCE的OperationInfo的target_param)
ANNOUNCE_CARD =0x7 --宣言卡片
ANNOUNCE_CARD_FILTER =0x8 --
ANNOUNCE_CARD_FILTER =0x8 --宣言符合条件的卡片
--cards with double names
CARD_MARINE_DOLPHIN =78734254 --海洋海豚
CARD_TWINKLE_MOSS =13857930 --光輝苔蘚
......@@ -181,6 +181,11 @@ function Auxiliary.FilterBoolFunction(f,a,b,c)
return f(target,a,b,c)
end
end
function Auxiliary.Tuner(f,a,b,c)
return function(target)
return target:IsType(TYPE_TUNER) and (not f or f(target,a,b,c))
end
end
function Auxiliary.NonTuner(f,a,b,c)
return function(target)
return target:IsNotTuner() and (not f or f(target,a,b,c))
......@@ -237,6 +242,198 @@ end
function Auxiliary.AddSynchroProcedure2(c,f1,f2)
Auxiliary.AddSynchroProcedure(c,f1,f2,1,1)
end
--Synchro monster, f1~f3 each 1 MONSTER + f4 min to max monsters
function Auxiliary.AddSynchroMixProcedure(c,f1,f2,f3,f4,minc,maxc)
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_SPSUMMON_PROC)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_IGNORE_IMMUNE)
e1:SetRange(LOCATION_EXTRA)
e1:SetCondition(Auxiliary.SynMixCondition(f1,f2,f3,f4,minc,maxc))
e1:SetTarget(Auxiliary.SynMixTarget(f1,f2,f3,f4,minc,maxc))
e1:SetOperation(Auxiliary.SynMixOperation(f1,f2,f3,f4,minc,maxc))
e1:SetValue(SUMMON_TYPE_SYNCHRO)
c:RegisterEffect(e1)
end
function Auxiliary.SynMaterialFilter(c,syncard)
return c:IsFaceup() and c:IsCanBeSynchroMaterial(syncard)
end
function Auxiliary.SynLimitFilter(c,f,e)
return f and not f(e,c)
end
function Auxiliary.GetSynchroLevelFlowerCardian(c)
return 2
end
function Auxiliary.GetSynMaterials(tp,syncard)
local mg=Duel.GetMatchingGroup(Auxiliary.SynMaterialFilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,syncard)
if mg:IsExists(Card.GetHandSynchro,1,nil) then
local mg2=Duel.GetMatchingGroup(Card.IsCanBeSynchroMaterial,tp,LOCATION_HAND,0,nil,syncard)
if mg2:GetCount()>0 then mg:Merge(mg2) end
end
return mg
end
function Auxiliary.SynMixCondition(f1,f2,f3,f4,minc,maxc)
return function(e,c,smat,mg1)
if c==nil then return true end
if c:IsType(TYPE_PENDULUM) and c:IsFaceup() then return false end
local tp=c:GetControler()
local mg
if mg1 then
mg=mg1
else
mg=Auxiliary.GetSynMaterials(tp,c)
end
return mg:IsExists(Auxiliary.SynMixFilter1,1,nil,f1,f2,f3,f4,minc,maxc,c,mg,smat)
end
end
function Auxiliary.SynMixTarget(f1,f2,f3,f4,minc,maxc)
return function(e,tp,eg,ep,ev,re,r,rp,chk,c,smat,mg1)
local g=Group.CreateGroup()
local mg
if mg1 then
mg=mg1
else
mg=Auxiliary.GetSynMaterials(tp,c)
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local c1=mg:FilterSelect(tp,Auxiliary.SynMixFilter1,1,1,nil,f1,f2,f3,f4,minc,maxc,c,mg,smat):GetFirst()
g:AddCard(c1)
if f2 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local c2=mg:FilterSelect(tp,Auxiliary.SynMixFilter2,1,1,c1,f2,f3,f4,minc,maxc,c,mg,smat,c1):GetFirst()
g:AddCard(c2)
if f3 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local c3=mg:FilterSelect(tp,Auxiliary.SynMixFilter3,1,1,Group.FromCards(c1,c2),f3,f4,minc,maxc,c,mg,smat,c1,c2):GetFirst()
g:AddCard(c3)
end
end
local g4=Group.CreateGroup()
for i=0,maxc-1 do
local mg2=mg:Clone()
if f4 then
mg2=mg2:Filter(f4,nil)
end
local cg=mg2:Filter(Auxiliary.SynMixCheckRecursive,g4,tp,g4,mg2,i,minc,maxc,c,g,smat)
if cg:GetCount()==0 then break end
local minct=1
if Auxiliary.SynMixCheckGoal(tp,g4,minc,i,c,g,smat) then
if not Duel.SelectYesNo(tp,210) then break end
minct=0
end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tg=cg:Select(tp,minct,1,nil)
if tg:GetCount()==0 then break end
g4:Merge(tg)
end
g:Merge(g4)
if g:GetCount()>0 then
g:KeepAlive()
e:SetLabelObject(g)
return true
else return false end
end
end
function Auxiliary.SynMixOperation(f1,f2,f3,f4,minct,maxc)
return function(e,tp,eg,ep,ev,re,r,rp,c,smat,mg)
local g=e:GetLabelObject()
if not g:IsExists(Card.IsType,1,nil,TYPE_TUNER) and c:IsHasEffect(80896940) then
c:RegisterFlagEffect(80896940,RESET_EVENT+0x1fe0000,0,1)
end
c:SetMaterial(g)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO)
g:DeleteGroup()
end
end
function Auxiliary.SynMixFilter1(c,f1,f2,f3,f4,minc,maxc,syncard,mg,smat)
return (not f1 or f1(c)) and mg:IsExists(Auxiliary.SynMixFilter2,1,c,f2,f3,f4,minc,maxc,syncard,mg,smat,c)
end
function Auxiliary.SynMixFilter2(c,f2,f3,f4,minc,maxc,syncard,mg,smat,c1)
if f2 then
return f2(c) and mg:IsExists(Auxiliary.SynMixFilter3,1,Group.FromCards(c1,c),f3,f4,minc,maxc,syncard,mg,smat,c1,c)
else
return mg:IsExists(Auxiliary.SynMixFilter4,1,c1,f4,minc,maxc,syncard,mg,smat,c1,nil,nil)
end
end
function Auxiliary.SynMixFilter3(c,f3,f4,minc,maxc,syncard,mg,smat,c1,c2)
if f3 then
return f3(c) and mg:IsExists(Auxiliary.SynMixFilter4,1,Group.FromCards(c1,c2,c),f3,f4,minc,maxc,syncard,mg,smat,c1,c2)
else
return mg:IsExists(Auxiliary.SynMixFilter4,1,Group.FromCards(c1,c2),f4,minc,maxc,syncard,mg,smat,c1,c2,nil)
end
end
function Auxiliary.SynMixFilter4(c,f4,minc,maxc,syncard,mg1,smat,c1,c2,c3)
if f4 and not f4(c) then return false end
local sg=Group.FromCards(c1,c)
sg:AddCard(c1)
if c2 then sg:AddCard(c2) end
if c3 then sg:AddCard(c3) end
local mg=mg1:Clone()
if f4 then
mg=mg:Filter(f4,nil)
end
return aux.SynMixCheck(mg,sg,minc-1,maxc-1,syncard,smat)
end
function Auxiliary.SynMixCheck(mg,sg1,minc,maxc,syncard,smat)
local tp=syncard:GetControler()
for c in aux.Next(sg1) do
mg:RemoveCard(c)
end
local sg=Group.CreateGroup()
if minc==0 and Auxiliary.SynMixCheckGoal(tp,sg1,0,0,syncard,sg,smat) then return true end
if maxc==0 then return false end
return mg:IsExists(Auxiliary.SynMixCheckRecursive,1,nil,tp,sg,mg,0,minc,maxc,syncard,sg1,smat)
end
function Auxiliary.SynMixCheckRecursive(c,tp,sg,mg,ct,minc,maxc,syncard,sg1,smat)
sg:AddCard(c)
ct=ct+1
local res=Auxiliary.SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat)
or (ct<maxc and mg:IsExists(Auxiliary.SynMixCheckRecursive,1,sg,tp,sg,mg,ct,minc,maxc,syncard,sg1,smat))
sg:RemoveCard(c)
ct=ct-1
return res
end
function Auxiliary.SynMixCheckGoal(tp,sg,minc,ct,syncard,sg1,smat)
if ct<minc then return false end
local g=sg:Clone()
g:Merge(sg1)
if Duel.GetLocationCountFromEx(tp,tp,g,syncard)<=0 then return false end
if smat and not g:IsContains(smat) then return false end
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
if pe and not g:IsContains(pe:GetOwner()) then return false end
if not g:IsExists(Card.IsType,1,nil,TYPE_TUNER) and not syncard:IsHasEffect(80896940) then return false end
if not g:CheckWithSumEqual(Card.GetSynchroLevel,syncard:GetLevel(),g:GetCount(),g:GetCount(),syncard)
and (not g:IsExists(Card.IsHasEffect,1,nil,89818984)
or not g:CheckWithSumEqual(Auxiliary.GetSynchroLevelFlowerCardian,syncard:GetLevel(),g:GetCount(),g:GetCount(),syncard))
then return false end
local hg=g:Filter(Card.IsLocation,nil,LOCATION_HAND)
local hct=hg:GetCount()
if hct>0 then
local found=false
for c in aux.Next(g) do
local he,hf,min,max=c:GetHandSynchro()
if he then
found=true
if hf and hg:IsExists(Auxiliary.SynLimitFilter,1,c,hf,he) then return false end
if (hmin and ct<hmin) or (hmax and ct>hmax) then return false end
end
end
if not found then return false end
end
for c in aux.Next(g) do
local le,lf,lloc,lmin,lmax=c:GetTunerLimit()
if le then
local ct=g:GetCount()-1
if lloc then
local lg=g:Filter(Card.IsLocation,c,lloc)
if lg:GetCount()~=ct then return false end
end
if lf and g:IsExists(Auxiliary.SynLimitFilter,1,c,lf,lf) then return false end
if (lmin and ct<lmin) or (lmax and ct>lmax) then return false end
end
end
return true
end
function Auxiliary.XyzAlterFilter(c,alterf,xyzc,e,tp,op)
return alterf(c) and c:IsCanBeXyzMaterial(xyzc) and Duel.GetLocationCountFromEx(tp,tp,Group.FromCards(c),xyzc)>0 and (not op or op(e,tp,0,c))
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