Commit 2ff261e2 authored by Tachibana's avatar Tachibana

ndyd

parent 06b566d9
......@@ -60,7 +60,7 @@ function cm.spop(e,tp,eg,ep,ev,re,r,rp)
end
end
function cm.cfilter(c,tp)
return c:IsSetCard(0x351) and c:IsAbleToDeckAsCost() and c:IsType(TYPE_MONSTER)
return c:IsSetCard(0x351) and c:IsAbleToDeckAsCost() and c:IsType(TYPE_MONSTER)and ( Duel.GetLocationCount(tp,LOCATION_MZONE)>0 or c:GetSequence()<5 )
end
function cm.spcost1(e,tp,eg,ep,ev,re,r,rp,chk)
local c=e:GetHandler()
......@@ -71,7 +71,7 @@ function cm.spcost1(e,tp,eg,ep,ev,re,r,rp,chk)
end
function cm.sptg1(e,tp,eg,ep,ev,re,r,rp,chk)
local c=e:GetHandler()
if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 and c:IsCanBeSpecialSummoned(e,0,tp,false,false) end
if chk==0 then return c:IsCanBeSpecialSummoned(e,0,tp,false,false) end
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,c,1,0,0)
end
function cm.spop1(e,tp,eg,ep,ev,re,r,rp)
......
......@@ -43,6 +43,7 @@ function cm.vfilter(c)
return c:IsType(TYPE_MONSTER) and c:IsSetCard(0x351) and c:IsFaceup() and not c:IsCode(m)
end
function cm.adval(e,c)
local tp=c:GetControler()
local vg=Duel.GetMatchingGroup(cm.vfilter,tp,LOCATION_MZONE,0,nil)
local sum=vg:GetSum(Card.GetAttack)+vg:GetSum(Card.GetDefense)
return sum
......@@ -51,21 +52,21 @@ function cm.hspfilter1(c,g,ft)
local rg=Group.FromCards(c)
local ct=ft
if c:IsLocation(LOCATION_MZONE) and c:GetSequence()<5 then ct=ct+1 end
return c:IsSetCard(0x351) and c:IsType(TYPE_FUSION) and g:IsExists(cm.hspfilter2,1,rg,g,rg,ft)
return c:IsSetCard(0x351) and c:IsType(TYPE_FUSION) and g:IsExists(cm.hspfilter2,1,rg,g,rg,ct)
end
function cm.hspfilter2(c,g,rg,ft)
local rg2=rg:Clone()
rg2:AddCard(c)
local ct=ft
if c:IsLocation(LOCATION_MZONE) and c:GetSequence()<5 then ct=ct+1 end
return c:IsSetCard(0x351) and c:IsType(TYPE_SYNCHRO) and g:IsExists(cm.hspfilter3,1,rg2,g,rg2,ft)
return c:IsSetCard(0x351) and c:IsType(TYPE_SYNCHRO) and g:IsExists(cm.hspfilter3,1,rg2,g,rg2,ct)
end
function cm.hspfilter3(c,g,rg,ft)
local rg2=rg:Clone()
rg2:AddCard(c)
local rg3=rg:Clone()
rg3:AddCard(c)
local ct=ft
if c:IsLocation(LOCATION_MZONE) and c:GetSequence()<5 then ct=ct+1 end
return c:IsSetCard(0x351) and c:IsType(TYPE_XYZ) and ct>0 and g:IsExists(cm.hspfilter4,1,rg2,ft)
return c:IsSetCard(0x351) and c:IsType(TYPE_XYZ) and ct>0 and g:IsExists(cm.hspfilter4,1,rg3,ct)
end
function cm.hspfilter4(c,ft)
local ct=ft
......@@ -75,14 +76,15 @@ end
function cm.hspcon(e,c)
if c==nil then return true end
local tp=c:GetControler()
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE+LOCATION_GRAVE)
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE)
if ft<-2 then return false end
local g=Duel.GetReleaseGroup(tp):Filter(Card.IsAbleToDeckAsCost,nil)
local g=Duel.GetMatchingGroup(Card.IsAbleToExtraAsCost,tp,LOCATION_MZONE+LOCATION_GRAVE,0,c)
return g:IsExists(cm.hspfilter1,1,nil,g,ft)
end
function cm.hspop(e,tp,eg,ep,ev,re,r,rp,c)
local tp=e:GetHandlerPlayer()
local ft=Duel.GetLocationCount(tp,LOCATION_MZONE)
local g=Duel.GetReleaseGroup(tp):Filter(Card.IsRace,nil,RACE_SEASERPENT)
local g=Duel.GetMatchingGroup(Card.IsAbleToExtraAsCost,tp,LOCATION_MZONE+LOCATION_GRAVE,0,c)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE)
local g1=g:FilterSelect(tp,cm.hspfilter1,1,1,nil,g,ft)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE)
......@@ -92,7 +94,7 @@ function cm.hspop(e,tp,eg,ep,ev,re,r,rp,c)
local g3=g:FilterSelect(tp,cm.hspfilter3,1,1,g1,g,g1,ft)
g1:Merge(g3)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE)
local g3=g:FilterSelect(tp,cm.hspfilter3,1,1,g1,ft)
local g3=g:FilterSelect(tp,cm.hspfilter4,1,1,g1,ft)
g1:Merge(g4)
Duel.SendtoDeck(g1,nil,2,REASON_EFFECT)
end
......
......@@ -38,7 +38,7 @@ function cm.cost(e,tp,eg,ep,ev,re,r,rp,chk)
end
end
function cm.mfilter(c,e)
return c:IsFaceup() and c:GetLevel()>0 and not c:IsImmuneToEffect(e) and c:IsReleasable() and c:GetCounter(0x1015)~=0
return c:IsFaceup() and c:GetLevel()>0 and not c:IsImmuneToEffect(e) and c:IsReleasable() and c:GetCounter(0x1015)~=0 and c:IsCanBeRitualMaterial(nil)
end
function cm.refilter(c)
return c:GetCounter(0x1015)==0
......@@ -46,53 +46,96 @@ end
function cm.exfilter(c,e)
return c:IsFaceup() and c:IsAttribute(ATTRIBUTE_WATER) and c:IsType(TYPE_PENDULUM) and c:GetLevel()>0 and not c:IsImmuneToEffect(e) and c:IsDestructable()
end
function cm.filter(c,e,tp,m)
local mg=m:Filter(Card.IsCanBeRitualMaterial,c,c)
if bit.band(c:GetType(),0x81)~=0x81 or not (c:IsCode(33400519) or c:IsCode(33400520))
or not c:IsCanBeSpecialSummoned(e,SUMMON_TYPE_RITUAL,tp,false,true) then return false end
return mg:CheckWithSumGreater(Card.GetRitualLevel,c:GetLevel(),c) and (not c:IsLocation(LOCATION_EXTRA) or Duel.GetLocationCountFromEx(tp,tp,mg,c)>0)
end
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then
local mg1=Duel.GetRitualMaterial(tp)
mg1:Remove(Card.IsLocation,nil,LOCATION_HAND)
mg1:Remove(cm.refilter,nil)
function cm.filter(c,e,tp)
return c:IsCode(33400519) or c:IsCode(33400520)
end
function cm.rcheck(tp,g,c)
return g:FilterCount(Card.IsLocation,nil,LOCATION_EXTRA)<=99
end
function cm.rgcheck(g)
return g:FilterCount(Card.IsLocation,nil,LOCATION_EXTRA)<=99
end
function cm.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:Merge(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(cm.RitualCheck,1,lv,tp,c,lv,greater_or_equal)
Auxiliary.GCheckAdditional=nil
return res
end
function cm.RitualCheck(g,tp,c,lv,greater_or_equal)
return Duel.GetLocationCountFromEx(tp,tp,g,c)>0 and 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))
end
function cm.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then
local mg=Duel.GetMatchingGroup(cm.mfilter,tp,LOCATION_MZONE,0,nil,e)
local mg2=Duel.GetMatchingGroup(cm.mfilter,tp,0,LOCATION_MZONE,nil,e)
local mg3=Duel.GetMatchingGroup(cm.exfilter,tp,LOCATION_EXTRA,0,nil,e)
mg1:Merge(mg2)
mg1:Merge(mg3)
return Duel.IsExistingMatchingCard(cm.filter,tp,LOCATION_HAND+LOCATION_EXTRA,0,1,nil,e,tp,mg1)
local dg=Duel.GetMatchingGroup(cm.exfilter,tp,LOCATION_EXTRA,0,nil,e)
mg:Merge(mg2)
aux.RCheckAdditional=cm.rcheck
aux.RGCheckAdditional=cm.rgcheck
local res=Duel.IsExistingMatchingCard(cm.RitualUltimateFilter,tp,LOCATION_HAND+LOCATION_EXTRA,0,1,nil,cm.filter,e,tp,mg,dg,Card.GetLevel,"Greater")
aux.RCheckAdditional=nil
aux.RGCheckAdditional=nil
return res
end
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_HAND+LOCATION_EXTRA)
end
function cm.activate(e,tp,eg,ep,ev,re,r,rp)
local mg1=Duel.GetRitualMaterial(tp)
mg1:Remove(Card.IsLocation,nil,LOCATION_HAND)
mg1:Remove(cm.refilter,nil)
local mg=Duel.GetMatchingGroup(cm.mfilter,tp,LOCATION_MZONE,0,nil,e)
local mg2=Duel.GetMatchingGroup(cm.mfilter,tp,0,LOCATION_MZONE,nil,e)
local mg3=Duel.GetMatchingGroup(cm.exfilter,tp,LOCATION_EXTRA,0,nil,e)
mg1:Merge(mg2)
mg1:Merge(mg3)
local dg=Duel.GetMatchingGroup(cm.exfilter,tp,LOCATION_EXTRA,0,nil,e)
mg:Merge(mg2)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON)
local tg=Duel.SelectMatchingCard(tp,cm.filter,tp,LOCATION_HAND+LOCATION_EXTRA,0,1,1,nil,e,tp,mg1)
aux.RCheckAdditional=cm.rcheck
aux.RGCheckAdditional=cm.rgcheck
local tg=Duel.SelectMatchingCard(tp,aux.NecroValleyFilter(cm.RitualUltimateFilter),tp,LOCATION_HAND+LOCATION_EXTRA,0,1,1,nil,cm.filter,e,tp,mg,dg,Card.GetLevel,"Greater")
local tc=tg:GetFirst()
if tc then
local mg=mg1:Filter(Card.IsCanBeRitualMaterial,tc,tc)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE)
local mat=mg:SelectWithSumEqual(tp,Card.GetRitualLevel,tc:GetLevel(),1,99,tc)
local mg1=mg:Filter(Card.IsCanBeRitualMaterial,tc,tc)
mg1:Merge(dg)
if tc.mat_filter then
mg1=mg1:Filter(tc.mat_filter,tc,tp)
else
mg1:RemoveCard(tc)
end
Duel.Hint(HINT_SELECTMSG,tp,aux.Stringid(m,1))
aux.GCheckAdditional=aux.RitualCheckAdditional(tc,tc:GetLevel(),"Greater")
local mat=mg1:SelectSubGroup(tp,cm.RitualCheck,false,1,tc:GetLevel(),tp,tc,tc:GetLevel(),"Greater")
aux.GCheckAdditional=nil
if not mat or mat:GetCount()==0 then
aux.RCheckAdditional=nil
aux.RGCheckAdditional=nil
return
end
tc:SetMaterial(mat)
local dmat=mat:Filter(Card.IsLocation,nil,LOCATION_EXTRA)
if dmat:GetCount()>0 then
mat:Sub(dmat)
Duel.Destroy(dmat,REASON_EFFECT+REASON_MATERIAL+REASON_RITUAL)
end
Duel.ReleaseRitualMaterial(mat)
Duel.BreakEffect()
if mat:GetCount()>0 then
Duel.ReleaseRitualMaterial(mat)
end
Duel.BreakEffect()
Duel.SpecialSummon(tc,SUMMON_TYPE_RITUAL,tp,tp,false,true,POS_FACEUP)
tc:CompleteProcedure()
end
aux.RCheckAdditional=nil
aux.RGCheckAdditional=nil
end
function cm.cost2(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return e:GetHandler():IsReleasable() and (Duel.CheckLPCost(tp,1000) or Duel.IsExistingMatchingCard(cm.ckfilter,tp,LOCATION_ONFIELD,0,1,nil)) end
if not Duel.IsExistingMatchingCard(cm.ckfilter,tp,LOCATION_ONFIELD,0,1,nil)then Duel.PayLPCost(tp,1000)
......
......@@ -95,7 +95,7 @@ function c71400023.sumlimit(e,c,sump,sumtype,sumpos,targetp)
return bit.band(sumpos,POS_FACEDOWN)>0
end
--]]
function c71400023.indtg(e,c)
function c71400023.indtg(e,tc)
return tc:IsSetCard(0x3714) and tc:IsType(TYPE_FIELD)
end
function c71400023.efilter(e,ct)
......
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