Commit 4f52e1df authored by VanillaSalt's avatar VanillaSalt

fix

parent 02bce31e
......@@ -54,37 +54,30 @@ 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)
local tlv=c:GetSynchroLevel(syncard)
if lv-tlv<=0 then return false end
local f1=c.tuner_filter
if c:IsHasEffect(EFFECT_HAND_SYNCHRO) then
return g3:IsExists(c16172067.synfilter2,1,c,syncard,lv-tlv,g2,g4,f1,c)
return g3:IsExists(c16172067.synfilter2,1,c,syncard,lv,g2,g4,f1,c)
else
return g1:IsExists(c16172067.synfilter2,1,c,syncard,lv-tlv,g2,g4,f1,c)
return g1:IsExists(c16172067.synfilter2,1,c,syncard,lv,g2,g4,f1,c)
end
end
function c16172067.synfilter2(c,syncard,lv,g2,g4,f1,tuner1)
local tlv=c:GetSynchroLevel(syncard)
if lv-tlv<=0 then return false end
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
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-tlv,f1,f2,g2)
return g4:IsExists(c16172067.synfilter3,1,nil,syncard,lv,f1,f2,g2,tuner1,c)
else
return g2:CheckWithSumEqual(Card.GetSynchroLevel,lv-tlv,1,62,syncard)
Duel.SetSelectedCard(Group.FromCards(c,tuner1))
return g2:CheckWithSumEqual(Card.GetSynchroLevel,lv,1,62,syncard)
end
end
function c16172067.synfilter3(c,syncard,lv,f1,f2,g2)
function c16172067.synfilter3(c,syncard,lv,f1,f2,g2,tuner1,tuner2)
if c==tuner1 or c==tuner2 then return false end
if not (not f1 or f1(c)) and not (not f2 or f2(c)) then return false end
local mlv=c:GetSynchroLevel(syncard)
local slv=lv-mlv
if slv<0 then return false end
if slv==0 then
return true
else
return g2:CheckWithSumEqual(Card.GetSynchroLevel,slv,1,61,syncard)
end
Duel.SetSelectedCard(Group.FromCards(c,tuner1,tuner2))
return g2:CheckWithSumEqual(Card.GetSynchroLevel,lv,0,61,syncard)
end
function c16172067.syncon(e,c,tuner,mg)
if c==nil then return true end
......@@ -97,8 +90,8 @@ function c16172067.syncon(e,c,tuner,mg)
if mg then
g1=mg:Filter(c16172067.matfilter1,nil,c)
g2=mg:Filter(c16172067.matfilter2,nil,c)
g3=mg:Filter(c16172067.matfilter1,nil,c)
g4=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)
......@@ -108,13 +101,11 @@ function c16172067.syncon(e,c,tuner,mg)
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner then
local tlv=tuner:GetSynchroLevel(c)
if lv-tlv<=0 then return false end
local f1=tuner.tuner_filter
if not pe then
return g1:IsExists(c16172067.synfilter2,1,tuner,c,lv-tlv,g2,g4,f1,tuner)
return g1:IsExists(c16172067.synfilter2,1,tuner,c,lv,g2,g4,f1,tuner)
else
return c16172067.synfilter2(pe:GetOwner(),c,lv-tlv,g2,nil,f1,tuner)
return c16172067.synfilter2(pe:GetOwner(),c,lv,g2,nil,f1,tuner)
end
end
if not pe then
......@@ -132,8 +123,8 @@ function c16172067.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
if mg then
g1=mg:Filter(c16172067.matfilter1,nil,c)
g2=mg:Filter(c16172067.matfilter2,nil,c)
g3=mg:Filter(c16172067.matfilter1,nil,c)
g4=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)
......@@ -144,38 +135,36 @@ function c16172067.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
local lv=c:GetLevel()
if tuner then
g:AddCard(tuner)
local lv1=tuner:GetSynchroLevel(c)
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-lv1,g2,g4,f1,tuner)
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 lv2=tuner2:GetSynchroLevel(c)
local f2=tuner2.tuner_filter
local m3=nil
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
if tuner2:IsHasEffect(EFFECT_HAND_SYNCHRO) then
m3=g4:FilterSelect(tp,c16172067.synfilter3,1,1,nil,c,lv-lv1-lv2,f1,f2,g2)
local lv3=m3:GetFirst():GetSynchroLevel(c)
if lv-lv1-lv2-lv3>0 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m4=g2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv-lv1-lv2-lv3,1,61,c)
local m3=g4:FilterSelect(tp,c16172067.synfilter3,1,1,nil,c,lv,f1,f2,g2,tuner,tuner2)
g:Merge(m3)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m4=g2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,0,61,c)
if m4 and m4:GetCount()>0 then
g:Merge(m4)
end
else
m3=g2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv-lv1-lv2,1,62,c)
Duel.SetSelectedCard(g)
local m3=g2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,62,c)
g:Merge(m3)
end
g:Merge(m3)
else
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local tuner1=nil
local hand=nil
if not pe then
local t1=g1:FilterSelect(tp,c16172067.synfilter1,1,1,nil,c,lv,g1,g2,g3,g4)
tuner1=t1:GetFirst()
......@@ -184,35 +173,34 @@ function c16172067.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
Group.FromCards(tuner1):Select(tp,1,1,nil)
end
g:AddCard(tuner1)
local lv1=tuner1:GetSynchroLevel(c)
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-lv1,g2,g4,f1,tuner1)
local t2=g3:FilterSelect(tp,c16172067.synfilter2,1,1,tuner1,c,lv,g2,g4,f1,tuner1)
tuner2=t2:GetFirst()
else
local t2=g1:FilterSelect(tp,c16172067.synfilter2,1,1,tuner1,c,lv-lv1,g2,g4,f1,tuner1)
local t2=g1:FilterSelect(tp,c16172067.synfilter2,1,1,tuner1,c,lv,g2,g4,f1,tuner1)
tuner2=t2:GetFirst()
end
g:AddCard(tuner2)
local lv2=tuner2:GetSynchroLevel(c)
local f2=tuner2.tuner_filter
local m3=nil
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
m3=g4:FilterSelect(tp,c16172067.synfilter3,1,1,nil,c,lv-lv1-lv2,f1,f2,g2)
local lv3=m3:GetFirst():GetSynchroLevel(c)
if lv-lv1-lv2-lv3>0 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m4=g2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv-lv1-lv2-lv3,1,61,c)
local m3=g4:FilterSelect(tp,c16172067.synfilter3,1,1,nil,c,lv,f1,f2,g2,tuner1,tuner2)
g:Merge(m3)
Duel.SetSelectedCard(g)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
local m4=g2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,0,61,c)
if m4 and m4:GetCount()>0 then
g:Merge(m4)
end
else
m3=g2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv-lv1-lv2,1,63,c)
Duel.SetSelectedCard(g)
local m3=g2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,63,c)
g:Merge(m3)
end
g:Merge(m3)
end
c:SetMaterial(g)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_SYNCHRO)
......
......@@ -56,28 +56,23 @@ 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 tlv=c:GetSynchroLevel(syncard)
if lv-tlv<=0 then return false end
local f1=c.tuner_filter
if c:IsHasEffect(EFFECT_HAND_SYNCHRO) then
return g3:IsExists(c62242678.synfilter2,1,c,syncard,lv-tlv,g2,f1,c)
return g3:IsExists(c62242678.synfilter2,1,c,syncard,lv,g2,f1,c)
else
return g1:IsExists(c62242678.synfilter2,1,c,syncard,lv-tlv,g2,f1,c)
return g1:IsExists(c62242678.synfilter2,1,c,syncard,lv,g2,f1,c)
end
end
function c62242678.synfilter2(c,syncard,lv,g2,f1,tuner1)
local tlv=c:GetSynchroLevel(syncard)
if lv-tlv<=0 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
return g2:IsExists(c62242678.synfilter3,1,nil,syncard,lv-tlv,f1,f2)
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,syncard,lv,f1,f2)
local mlv=c:GetSynchroLevel(syncard)
local lv1=bit.band(mlv,0xffff)
local lv2=bit.rshift(mlv,16)
return (lv1==lv or lv2==lv) and (not f1 or f1(c)) and (not f2 or f2(c))
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
......@@ -89,7 +84,7 @@ function c62242678.syncon(e,c,tuner,mg)
if mg then
g1=mg:Filter(c62242678.matfilter1,nil,c)
g2=mg:Filter(c62242678.matfilter2,nil,c)
g3=mg:Filter(c62242678.matfilter1,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)
......@@ -98,19 +93,17 @@ function c62242678.syncon(e,c,tuner,mg)
local pe=Duel.IsPlayerAffectedByEffect(tp,EFFECT_MUST_BE_SMATERIAL)
local lv=c:GetLevel()
if tuner then
local tlv=tuner:GetSynchroLevel(c)
if lv-tlv<=0 then return false end
local f1=tuner.tuner_filter
if not pe then
return g1:IsExists(c62242678.synfilter2,1,tuner,c,lv-tlv,g2,f1,tuner)
return g1:IsExists(c62242678.synfilter2,1,tuner,c,lv,g2,f1,tuner)
else
return c62242678.synfilter2(pe:GetOwner(),c,lv-tlv,g2,f1,tuner)
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)
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)
......@@ -121,7 +114,7 @@ function c62242678.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
if mg then
g1=mg:Filter(c62242678.matfilter1,nil,c)
g2=mg:Filter(c62242678.matfilter2,nil,c)
g3=mg:Filter(c62242678.matfilter1,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)
......@@ -131,22 +124,22 @@ function c62242678.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
local lv=c:GetLevel()
if tuner then
g:AddCard(tuner)
local lv1=tuner:GetSynchroLevel(c)
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-lv1,g2,f1,tuner)
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 lv2=tuner2:GetSynchroLevel(c)
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=g2:FilterSelect(tp,c62242678.synfilter3,1,1,nil,c,lv-lv1-lv2,f1,f2)
local m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
g:Merge(m3)
else
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SMATERIAL)
......@@ -159,21 +152,21 @@ function c62242678.synop(e,tp,eg,ep,ev,re,r,rp,c,tuner,mg)
Group.FromCards(tuner1):Select(tp,1,1,nil)
end
g:AddCard(tuner1)
local lv1=tuner1:GetSynchroLevel(c)
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-lv1,g2,f1,tuner1)
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-lv1,g2,f1,tuner1)
t2=g1:FilterSelect(tp,c62242678.synfilter2,1,1,tuner1,c,lv,g2,f1,tuner1)
end
local tuner2=t2:GetFirst()
g:AddCard(tuner2)
local lv2=tuner2:GetSynchroLevel(c)
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=g2:FilterSelect(tp,c62242678.synfilter3,1,1,nil,c,lv-lv1-lv2,f1,f2)
local m3=mg2:SelectWithSumEqual(tp,Card.GetSynchroLevel,lv,1,1,c)
g:Merge(m3)
end
c:SetMaterial(g)
......
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