Commit b85c8a99 authored by TanakaKotoha's avatar TanakaKotoha

pp

parent c4953800
This diff is collapsed.
--Real Scl Version - Variable --Real Scl Version - Variable
local Version_Number=200119 local Version_Number=200218
local m=10199990 local m=10199990
local vm=10199991 local vm=10199991
rsv={} --"Base Function" rsv={} --"Base Function"
...@@ -108,17 +108,19 @@ rscf.extype_np = rscf.extype - TYPE_PENDULUM ...@@ -108,17 +108,19 @@ rscf.extype_np = rscf.extype - TYPE_PENDULUM
rscf.exlist = { TYPE_FUSION,TYPE_SYNCHRO,TYPE_XYZ,TYPE_LINK } rscf.exlist = { TYPE_FUSION,TYPE_SYNCHRO,TYPE_XYZ,TYPE_LINK }
--Escape Old Functions --Escape Old Functions
rsof.DefineCard = rscf.DefineCard function rsof.Escape_Old_Functions()
rsof.SendtoHand = rsop.SendtoHand rsof.DefineCard = rscf.DefineCard
rsof.SendtoDeck = rsop.SendtoDeck rsof.SendtoHand = rsop.SendtoHand
rsof.SendtoGrave = rsop.SendtoGrave rsof.SendtoDeck = rsop.SendtoDeck
rsof.Destroy = rsop.Destroy rsof.SendtoGrave = rsop.SendtoGrave
rsof.Remove = rsop.Remove rsof.Destroy = rsop.Destroy
rsof.SelectHint = rshint.Select rsof.Remove = rsop.Remove
rsof.SelectOption= rsop.SelectOption rsof.SelectHint = rshint.Select
rsof.SelectOption_Page= rsop.SelectOption_Page rsof.SelectOption= rsop.SelectOption
rsof.SelectNumber= rsop.AnnounceNumber rsof.SelectOption_Page= rsop.SelectOption_Page
rsof.SelectNumber_List= rsop.AnnounceNumber_List rsof.SelectNumber= rsop.AnnounceNumber
rsof.IsSet = rscf.DefineSet rsof.SelectNumber_List= rsop.AnnounceNumber_List
rsof.IsSet = rscf.DefineSet
end
...@@ -2,16 +2,23 @@ ...@@ -2,16 +2,23 @@
local m=60159906 local m=60159906
local cm=_G["c"..m] local cm=_G["c"..m]
function cm.initial_effect(c) function cm.initial_effect(c)
cm.AddLinkProcedure(c,function(c)
return c:GetSummonLocation()&(LOCATION_DECK+LOCATION_EXTRA)~=0 and c:IsAttribute(ATTRIBUTE_EARTH+ATTRIBUTE_FIRE+ATTRIBUTE_WATER+ATTRIBUTE_WIND)
end,4,4,function(g)
local att=0
for tc in aux.Next(g) do
att=att|tc:GetAttribute()
end
return att&(ATTRIBUTE_EARTH+ATTRIBUTE_FIRE+ATTRIBUTE_WATER+ATTRIBUTE_WIND)==(ATTRIBUTE_EARTH+ATTRIBUTE_FIRE+ATTRIBUTE_WATER+ATTRIBUTE_WIND)
end)
c:EnableReviveLimit() c:EnableReviveLimit()
--splimit
--local e00=Effect.CreateEffect(c)
--e00:SetType(EFFECT_TYPE_SINGLE)
--e00:SetCode(EFFECT_SPSUMMON_COST)
--e00:SetCost(c60159906.e00cost)
--c:RegisterEffect(e00)
--special summon rule
local e0=Effect.CreateEffect(c)
e0:SetType(EFFECT_TYPE_FIELD)
e0:SetCode(EFFECT_SPSUMMON_PROC)
e0:SetProperty(EFFECT_FLAG_UNCOPYABLE)
e0:SetRange(LOCATION_EXTRA)
e0:SetValue(SUMMON_TYPE_LINK)
e0:SetCondition(c60159906.sprcon)
e0:SetOperation(c60159906.sprop)
c:RegisterEffect(e0)
--spsummon condition --spsummon condition
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE) e1:SetType(EFFECT_TYPE_SINGLE)
...@@ -34,6 +41,43 @@ function cm.initial_effect(c) ...@@ -34,6 +41,43 @@ function cm.initial_effect(c)
e3:SetOperation(cm.op) e3:SetOperation(cm.op)
c:RegisterEffect(e3) c:RegisterEffect(e3)
end end
function c60159906.e00cost(e,c,tp,st)
if bit.band(st,SUMMON_TYPE_LINK)~=SUMMON_TYPE_LINK then return true end
return Duel.GetCurrentPhase()==PHASE_MAIN2
end
function c60159906.cfilter(c,tp,lc)
return c:IsCanBeLinkMaterial(lc) and c:IsFaceup() and c:GetSummonLocation()&(LOCATION_DECK+LOCATION_EXTRA)~=0
and not (c:IsAttribute(ATTRIBUTE_LIGHT) or c:IsAttribute(ATTRIBUTE_DARK) or c:IsAttribute(ATTRIBUTE_DEVINE))
end
function c60159906.fselect(c,tp,mg,sg)
sg:AddCard(c)
local res=false
if sg:GetCount()<4 then
res=mg:IsExists(c60159906.fselect,1,sg,tp,mg,sg)
elseif Duel.GetLocationCountFromEx(tp,tp,sg)>0 then
res=sg:GetClassCount(Card.GetLinkAttribute)==4
end
sg:RemoveCard(c)
return res
end
function c60159906.sprcon(e,c)
if c==nil then return true end
local tp=c:GetControler()
local mg=Duel.GetMatchingGroup(c60159906.cfilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,tp,c)
local sg=Group.CreateGroup()
return mg:IsExists(c60159906.fselect,1,nil,tp,mg,sg)
end
function c60159906.sprop(e,tp,eg,ep,ev,re,r,rp,c)
local mg=Duel.GetMatchingGroup(c60159906.cfilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,tp)
local sg=Group.CreateGroup()
while sg:GetCount()<4 do
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_LMATERIAL)
local g=mg:FilterSelect(tp,c60159906.fselect,1,1,sg,tp,mg,sg)
sg:Merge(g)
end
c:SetMaterial(sg)
Duel.SendtoGrave(sg,REASON_COST+REASON_LINK+REASON_MATERIAL)
end
function cm.linklimit(e,se,sp,st) function cm.linklimit(e,se,sp,st)
return bit.band(st,SUMMON_TYPE_LINK)==SUMMON_TYPE_LINK return bit.band(st,SUMMON_TYPE_LINK)==SUMMON_TYPE_LINK
end end
...@@ -51,9 +95,9 @@ end ...@@ -51,9 +95,9 @@ end
function cm.tg(e,tp,eg,ep,ev,re,r,rp,chk) function cm.tg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return true end if chk==0 then return true end
local g=Duel.GetMatchingGroup(cm.filter,tp,LOCATION_ONFIELD+LOCATION_GRAVE+LOCATION_HAND,LOCATION_ONFIELD+LOCATION_GRAVE+LOCATION_HAND,e:GetHandler()) local g=Duel.GetMatchingGroup(cm.filter,tp,LOCATION_ONFIELD+LOCATION_GRAVE+LOCATION_HAND,LOCATION_ONFIELD+LOCATION_GRAVE+LOCATION_HAND,e:GetHandler())
local g2=Duel.GetMatchingGroup(cm.filter2,tp,LOCATION_GRAVE+LOCATION_DECK+LOCATION_EXTRA,LOCATION_GRAVE+LOCATION_DECK+LOCATION_EXTRA,nil)
Duel.SetOperationInfo(0,CATEGORY_TODECK,g,g:GetCount(),0,0) Duel.SetOperationInfo(0,CATEGORY_TODECK,g,g:GetCount(),0,0)
Duel.SetOperationInfo(0,CATEGORY_REMOVE,g,g:GetCount(),0,0) Duel.SetOperationInfo(0,CATEGORY_REMOVE,nil,99,tp,LOCATION_GRAVE+LOCATION_DECK+LOCATION_EXTRA)
Duel.SetOperationInfo(0,CATEGORY_REMOVE,nil,99,1-tp,LOCATION_GRAVE+LOCATION_DECK+LOCATION_EXTRA)
Duel.SetChainLimit(aux.FALSE) Duel.SetChainLimit(aux.FALSE)
end end
function cm.op(e,tp,eg,ep,ev,re,r,rp) function cm.op(e,tp,eg,ep,ev,re,r,rp)
...@@ -71,65 +115,3 @@ function cm.op(e,tp,eg,ep,ev,re,r,rp) ...@@ -71,65 +115,3 @@ function cm.op(e,tp,eg,ep,ev,re,r,rp)
Duel.ShuffleHand(1-tp) Duel.ShuffleHand(1-tp)
end end
end end
\ No newline at end of file
function cm.AddLinkProcedure(c,f,min,max,gf)
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)
if max==nil then max=c:GetLink() end
e1:SetCondition(cm.LinkCondition(f,min,max,gf))
e1:SetTarget(cm.LinkTarget(f,min,max,gf))
e1:SetOperation(Auxiliary.LinkOperation(f,min,max,gf))
e1:SetValue(SUMMON_TYPE_LINK)
c:RegisterEffect(e1)
end
function cm.LinkCondition(f,minc,maxc,gf)
return function(e,c)
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=Duel.GetMatchingGroup(Auxiliary.LConditionFilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,f,c)
local sg=Auxiliary.GetMustMaterialGroup(tp,EFFECT_MUST_BE_LMATERIAL)
if sg:IsExists(Auxiliary.MustMaterialCounterFilter,1,nil,mg) then return false end
local ct=sg:GetCount()
if ct>maxc then return false end
return Auxiliary.LCheckGoal(tp,sg,c,minc,ct,gf)
or mg:IsExists(Auxiliary.LCheckRecursive,1,sg,tp,sg,mg,c,ct,minc,maxc,gf)
end
end
function cm.LinkTarget(f,minc,maxc,gf)
return function(e,tp,eg,ep,ev,re,r,rp,chk,c)
local mg=Duel.GetMatchingGroup(Auxiliary.LConditionFilter,tp,LOCATION_MZONE,LOCATION_MZONE,nil,f,c)
local bg=Auxiliary.GetMustMaterialGroup(tp,EFFECT_MUST_BE_LMATERIAL)
if #bg>0 then
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_LMATERIAL)
bg:Select(tp,#bg,#bg,nil)
end
local sg=Group.CreateGroup()
sg:Merge(bg)
while #sg<maxc do
local cg=mg:Filter(Auxiliary.LCheckRecursive,sg,tp,sg,mg,c,#sg,minc,maxc,gf)
if #cg==0 then break end
local finish=Auxiliary.LCheckGoal(tp,sg,c,minc,#sg,gf)
local cancel=(#sg==0 or finish)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_LMATERIAL)
local tc=cg:SelectUnselect(sg,tp,finish,cancel,minc,maxc)
if not tc then break end
if not bg:IsContains(tc) then
if not sg:IsContains(tc) then
sg:AddCard(tc)
else
sg:RemoveCard(tc)
end
elseif #bg>0 and #sg<=#bg then
return false
end
end
if #sg>0 then
sg:KeepAlive()
e:SetLabelObject(sg)
return true
else return false end
end
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