Commit 276c1f4a authored by Tachibana's avatar Tachibana

eme

parent b0db9ea5
Pipeline #6900 passed with stages
in 34 minutes and 16 seconds
...@@ -39,7 +39,8 @@ function cm.counterfilter1(c) ...@@ -39,7 +39,8 @@ function cm.counterfilter1(c)
return c:IsRace(RACE_INSECT) return c:IsRace(RACE_INSECT)
end end
function cm.cost(e,tp,eg,ep,ev,re,r,rp,chk) function cm.cost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.GetCustomActivityCount(m+100,tp,ACTIVITY_SPSUMMON)==0 end if chk==0 then return e:GetHandler():IsAbleToGrave() and Duel.GetCustomActivityCount(m+100,tp,ACTIVITY_SPSUMMON)==0 end
Duel.SendtoGrave(e:GetHandler(),REASON_COST)
local e1=Effect.CreateEffect(e:GetHandler()) local e1=Effect.CreateEffect(e:GetHandler())
e1:SetType(EFFECT_TYPE_FIELD) e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON) e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
......
...@@ -4,7 +4,7 @@ local m,cm=rk.set(16104202) ...@@ -4,7 +4,7 @@ local m,cm=rk.set(16104202)
function cm.initial_effect(c) function cm.initial_effect(c)
local e0,e0_1=rkch.PenTri(c,m,cm.cost) local e0,e0_1=rkch.PenTri(c,m,cm.cost)
local e1=rkch.GainEffect(c,m) local e1=rkch.GainEffect(c,m)
local e2=rsef.QO(c,EVENT_FREE_CHAIN,{m,2},{1},"eq",nil,LOCATION_MZONE,rkch.gaincon(m),cm.eqcost,rsop.target(cm.eqfilter,"eq",LOCATION_ONFIELD+LOCATION_GRAVE,LOCATION_ONFIELD+LOCATION_GRAVE),cm.eqop) local e2=rsef.QO(c,EVENT_FREE_CHAIN,{m,2},{1},"eq",nil,LOCATION_MZONE,rkch.gaincon(m),cm.eqcost,cm.eqtg,cm.eqop)
local e2_1=rsef.SV_INDESTRUCTABLE(c,"effect",1,cm.gaincon) local e2_1=rsef.SV_INDESTRUCTABLE(c,"effect",1,cm.gaincon)
local e3=rkch.MonzToPen(c,m,EVENT_RELEASE,nil) local e3=rkch.MonzToPen(c,m,EVENT_RELEASE,nil)
local e4=rkch.PenAdd(c,{m,1},{1},{},false) local e4=rkch.PenAdd(c,{m,1},{1},{},false)
...@@ -49,10 +49,12 @@ function cm.eqcost(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -49,10 +49,12 @@ function cm.eqcost(e,tp,eg,ep,ev,re,r,rp,chk)
Duel.Release(sg,REASON_COST) Duel.Release(sg,REASON_COST)
end end
function cm.eqfilter(c,ec) function cm.eqfilter(c,ec)
if aux.GetValueType(ec)=="effect" then return (c:IsLocation(LOCATION_ONFIELD) and c:GetEquipTarget()~=ec) or (c:IsLocation(LOCATION_GRAVE) and not c:IsForbidden())
ec=ec:GetHandler() end
end function cm.eqtg(e,tp,eg,ep,ev,re,r,rp,chk)
return (c:IsLocation(LOCATION_ONFIELD) and c:GetEquipTarget()~=ec) or (c:IsLocation(LOCATION_GRAVE) and not c:IsForbidden()) and c~=ec if chk==0 then return Duel.GetLocationCount(tp,LOCATION_SZONE)>0
and Duel.IsExistingMatchingCard(cm.eqfilter,tp,LOCATION_ONFIELD+LOCATION_GRAVE,LOCATION_ONFIELD+LOCATION_GRAVE,1,e:GetHandler(),e:GetHandler()) end
Duel.SetOperationInfo(0,CATEGORY_EQUIP,nil,1,tp,LOCATION_ONFIELD+LOCATION_GRAVE)
end end
function cm.eqop(e,tp) function cm.eqop(e,tp)
local c=aux.ExceptThisCard(e) local c=aux.ExceptThisCard(e)
...@@ -62,7 +64,21 @@ function cm.eqop(e,tp) ...@@ -62,7 +64,21 @@ function cm.eqop(e,tp)
if g:GetCount()>0 then if g:GetCount()>0 then
local tc=g:GetFirst() local tc=g:GetFirst()
Duel.HintSelection(g) Duel.HintSelection(g)
if not Duel.Equip(tp,tc,c,true) then return end if tc:IsLocation(LOCATION_SZONE) and tc:IsControler(1-tp) then
if tc:IsLocation(LOCATION_FZONE) then
local fc=Duel.GetFieldCard(tp,LOCATION_FZONE,0)
if fc then
Duel.SendtoGrave(fc,REASON_RULE)
Duel.BreakEffect()
end
local pos=tc:GetPosition()
Duel.MoveToField(tc,tp,tp,LOCATION_FZONE,pos,true)
else
local pos=tc:GetPosition()
Duel.MoveToField(tc,tp,tp,LOCATION_SZONE,pos,true)
end
end
if not Duel.Equip(tp,tc,c,false) then return end
--equip limit --equip limit
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE) e1:SetType(EFFECT_TYPE_SINGLE)
......
if not pcall(function() require("expansions/script/c16101100") end) then require("script/c16101100") end if not pcall(function() require("expansions/script/c16101100") end) then require("script/c16101100") end
rk=rk or {} rk=rk or {}
local loc_table_for_reikai={
['dk'] = LOCATION_DECK,
['gy'] = LOCATION_GRAVE,
['re'] = LOCATION_REMOVED,
['hd'] = LOCATION_HAND,
['ex'] = LOCATION_EXTRA,
['mz'] = LOCATION_MZONE,
['sz'] = LOCATION_SZONE,
['on'] = LOCATION_ONFIELD,
}
local cate_table_for_reikai={
['td'] = CATEGORY_TODECK,
['tg'] = CATEGORY_TOGRAVE,
['th'] = CATEGORY_TOHAND,
['re'] = CATEGORY_REMOVE,
['dr'] = CATEGORY_DRAW,
['rc'] = CATEGORY_RECOVER,
['se'] = CATEGORY_SEARCH,
['sp'] = CATEGORY_SPECIAL_SUMMON,
['sum'] = CATEGORY_SUMMON,
['ng'] = CATEGORY_NEGATE,
['eq'] = CATEGORY_EQUIP,
['rel'] = CATEGORY_RELEASE,
['dke'] = CATEGORY_DECKDES,
['dis'] = CATEGORY_DISABLE,
['dss'] = CATEGORY_DISABLE_SUMMON,
['pos'] = CATEGORY_POSITION,
['ctl'] = CATEGORY_CONTROL,
['hde'] = CATEGORY_HANDES,
['tk'] = CATEGORY_TOKEN,
['dam'] = CATEGORY_DAMAGE,
['atk'] = CATEGORY_ATKCHANGE,
['def'] = CATEGORY_DEFCHANGE,
['coin'] = CATEGORY_COIN,
['dice'] = CATEGORY_DICE,
['fus'] = CATEGORY_FUSION_SUMMON,
['tx'] = CATEGORY_TOEXTRA,
['gs'] = CATEGORY_GRAVE_SPSUMMON,
['ga'] = CATEGORY_GRAVE_ACTION,
['lg'] = CATEGORY_LEAVE_GRAVE,
['an'] = CATEGORY_ANNOUNCE,
['ct'] = CATEGORY_COUNTER,
['des'] = CATEGORY_DESTROY,
}
function rk.set(code,setcode) function rk.set(code,setcode)
if not _G["c"..code] then _G["c"..code]={} if not _G["c"..code] then _G["c"..code]={}
setmetatable(_G["c"..code],Card) setmetatable(_G["c"..code],Card)
...@@ -12,13 +56,93 @@ function rk.set(code,setcode) ...@@ -12,13 +56,93 @@ function rk.set(code,setcode)
return code,ccodem return code,ccodem
end end
function rk.check(c,str) function rk.check(c,str)
local substr=c.rksetcode local code1,code2=c:GetCode()
if substr==nil then return false end local subtr=nil
if string.match(substr,str)==str then return true end local subtr2=nil
if code1 then
if not _G["c"..code1] then _G["c"..code1]={}
setmetatable(_G["c"..code1],Card)
_G["c"..code1].__index=_G["c"..code1]
end
local ccodem=_G["c"..code1]
substr=ccodem.rksetcode
end
if code2 then
if not _G["c"..code2] then _G["c"..code2]={}
setmetatable(_G["c"..code2],Card)
_G["c"..code2].__index=_G["c"..code2]
end
local ccodem=_G["c"..code2]
substr2=ccodem.rksetcode
end
if substr==nil and substr2==nil then return false end
if (substr and string.match(substr,str)==str) or (substr2 and string.match(substr2,str)==str) then return true end
return false return false
end end
if not Card.check then
Card.check=rk.check
end
function rk.bin(str1,substr)
local result = 0
if str1 == 'loc' then
for str in pairs(substr) do
if not type(str) == "string" and not type(str) == "number" then
Debug.Message("Param of location table must be string/number value")
return
end
if type(str) == "string" then
if not loc_table_for_reikai[str] then
Debug.Message("an invalid key has been used (location table).")
return
end
result = result + loc_table_for_reikai[str]
else
result = result + str
end
end
end
if str1 == 'cate' then
for str in pairs(substr) do
if not type(str) == "string" and not type(str) == "number" then
Debug.Message("Param of category table must be string/number value")
return
end
if type(str) == "string" then
if not loc_table_for_reikai[str] then
Debug.Message("an invalid key has been used (category table).")
return
end
result = result + cate_table_for_reikai[str]
else
result = result + str
end
end
end
return result
end
function rk.Loc_Bin(loc)
return rk.bin('loc',loc)
end
function rk.Cate_Bin(cate)
return rk.bin('cate',cate)
end
function rk.Self_Select_Deck(player,f,min,max,exg,...)
return Duel.SelectMatchingCard(player,f,player,LOCATION_DECK,0,min,max,exg,...)
end
function rk.Self_Select_Grave(player,f,min,max,exg,...)
return Duel.SelectMatchingCard(player,f,player,LOCATION_GRAVE,0,min,max,exg,...)
end
function rk.Self_Select_Hand(player,f,min,max,exg,...)
return Duel.SelectMatchingCard(player,f,player,LOCATION_HAND,0,min,max,exg,...)
end
function rk.Self_Select_Banished(player,f,min,max,exg,...)
return Duel.SelectMatchingCard(player,f,player,LOCATION_REMOVED,0,min,max,exg,...)
end
function rk.Self_Select_ExtraDeck(player,f,min,max,exg,...)
return Duel.SelectMatchingCard(player,f,player,LOCATION_EXTRA,0,min,max,exg,...)
end
function rk.selectcard(sel_p,tar_p,f,loc,loc1,min,max,exg,...) function rk.selectcard(sel_p,tar_p,f,loc,loc1,min,max,exg,...)
if loc&LOCATION_GRAVE~=0 or loc1&LOCATION_GRAVE~=0 then if (loc&LOCATION_GRAVE~=0 and loc>LOCATION_GRAVE) or (loc1&LOCATION_GRAVE~=0 and loc1>LOCATION_GRAVE) then
f=aux.NecroValleyFilter(f) f=aux.NecroValleyFilter(f)
end end
return Duel.SelectMatchingCard(sel_p,f,tar_p,loc,loc1,min,max,exg,...) return Duel.SelectMatchingCard(sel_p,f,tar_p,loc,loc1,min,max,exg,...)
......
...@@ -136,7 +136,7 @@ function Tenka.Pendulum(c) ...@@ -136,7 +136,7 @@ function Tenka.Pendulum(c)
Duel.RegisterEffect(ge1,0) Duel.RegisterEffect(ge1,0)
end end
local e1=Effect.CreateEffect(c) local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(81099932,0)) e1:SetDescription(aux.Stringid(81000000,0))
e1:SetType(EFFECT_TYPE_FIELD) e1:SetType(EFFECT_TYPE_FIELD)
e1:SetCode(EFFECT_SPSUMMON_PROC_G) e1:SetCode(EFFECT_SPSUMMON_PROC_G)
e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_CANNOT_DISABLE) e1:SetProperty(EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_CANNOT_DISABLE)
......
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