Commit dd7e0afd authored by POLYMER's avatar POLYMER

update 250303 wd

parent d2aec25d
......@@ -6298,6 +6298,17 @@
16348099 0
16349061 0
53797091 0
20000450 0
20000451 0
20000452 0
20000453 0
20000454 0
20000455 0
20000456 0
20000457 0
20000458 0
20000459 0
20000460 0
#limit
33403513 1
82204250 0
......
No preview for this file type
No preview for this file type
expansions/pics/20000450.jpg

63.5 KB | W: | H:

expansions/pics/20000450.jpg

63.5 KB | W: | H:

expansions/pics/20000450.jpg
expansions/pics/20000450.jpg
expansions/pics/20000450.jpg
expansions/pics/20000450.jpg
  • 2-up
  • Swipe
  • Onion skin
expansions/pics/20000451.jpg

59.3 KB | W: | H:

expansions/pics/20000451.jpg

59.3 KB | W: | H:

expansions/pics/20000451.jpg
expansions/pics/20000451.jpg
expansions/pics/20000451.jpg
expansions/pics/20000451.jpg
  • 2-up
  • Swipe
  • Onion skin
expansions/pics/20000452.jpg

60.7 KB | W: | H:

expansions/pics/20000452.jpg

60.7 KB | W: | H:

expansions/pics/20000452.jpg
expansions/pics/20000452.jpg
expansions/pics/20000452.jpg
expansions/pics/20000452.jpg
  • 2-up
  • Swipe
  • Onion skin
expansions/pics/20000453.jpg

64 KB | W: | H:

expansions/pics/20000453.jpg

64 KB | W: | H:

expansions/pics/20000453.jpg
expansions/pics/20000453.jpg
expansions/pics/20000453.jpg
expansions/pics/20000453.jpg
  • 2-up
  • Swipe
  • Onion skin
expansions/pics/20000454.jpg

56.8 KB | W: | H:

expansions/pics/20000454.jpg

56.8 KB | W: | H:

expansions/pics/20000454.jpg
expansions/pics/20000454.jpg
expansions/pics/20000454.jpg
expansions/pics/20000454.jpg
  • 2-up
  • Swipe
  • Onion skin
expansions/pics/20000455.jpg

61.7 KB | W: | H:

expansions/pics/20000455.jpg

61.7 KB | W: | H:

expansions/pics/20000455.jpg
expansions/pics/20000455.jpg
expansions/pics/20000455.jpg
expansions/pics/20000455.jpg
  • 2-up
  • Swipe
  • Onion skin
expansions/pics/20000456.jpg

56.9 KB | W: | H:

expansions/pics/20000456.jpg

56.9 KB | W: | H:

expansions/pics/20000456.jpg
expansions/pics/20000456.jpg
expansions/pics/20000456.jpg
expansions/pics/20000456.jpg
  • 2-up
  • Swipe
  • Onion skin
expansions/pics/20000457.jpg

65.2 KB | W: | H:

expansions/pics/20000457.jpg

65.2 KB | W: | H:

expansions/pics/20000457.jpg
expansions/pics/20000457.jpg
expansions/pics/20000457.jpg
expansions/pics/20000457.jpg
  • 2-up
  • Swipe
  • Onion skin
expansions/pics/20000458.jpg

67 KB | W: | H:

expansions/pics/20000458.jpg

67 KB | W: | H:

expansions/pics/20000458.jpg
expansions/pics/20000458.jpg
expansions/pics/20000458.jpg
expansions/pics/20000458.jpg
  • 2-up
  • Swipe
  • Onion skin
expansions/pics/20000459.jpg

63 KB | W: | H:

expansions/pics/20000459.jpg

63.1 KB | W: | H:

expansions/pics/20000459.jpg
expansions/pics/20000459.jpg
expansions/pics/20000459.jpg
expansions/pics/20000459.jpg
  • 2-up
  • Swipe
  • Onion skin
......@@ -67,7 +67,7 @@ function c118426889.cost2(e,tp,eg,ep,ev,re,r,rp,chk)
Duel.ConfirmCards(1-tp,e:GetHandler())
end
function c118426889.filter2(c,tp,sc)
return c:IsSetCard(0x97) and (c:IsControler(tp) or c:IsFaceup()) and Duel.IsExistingMatchingCard(c118426889.filter4,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,1,nil,tp,c,sc)
return c:IsSetCard(0x97) and (c:IsControler(tp) or c:IsFaceup()) and Duel.IsExistingMatchingCard(c118426889.filter4,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,1,c,tp,c,sc)
end
function c118426889.filter4(c,tp,mc,sc)
return Duel.GetLocationCountFromEx(tp,tp,Group.FromCards(c,mc),sc)>0
......
--禁征龙-缄龙
local s,id,o=GetID()
function s.initial_effect(c)
local e0=Effect.CreateEffect(c)
e0:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e0:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
e0:SetCode(EVENT_ADJUST)
e0:SetRange(0xff)
e0:SetOperation(s.adjustop)
c:RegisterEffect(e0)
local e4=Effect.CreateEffect(c)
e4:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e4:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
e4:SetCode(EVENT_ADJUST)
e4:SetRange(0xff)
e4:SetOperation(s.adjustop)
c:RegisterEffect(e4)
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(id,0))
e1:SetType(EFFECT_TYPE_IGNITION)
......
dofile("expansions/script/c20099997.lua")
if fuef then return end
fuef = { DebugMode = false } --2024/10/14
fuef.__index = fuef
fuef = { DebugMode = false } --2024/2/27
fuef.__index = fuef
---------------------------------------------------------------- Standard Register
-- no cod
fuef.I = function(_owner, _handler, _ignore) return fuef:Creat("I", nil, _owner, _handler, _ignore) end
......@@ -17,6 +17,48 @@ for i,str in ipairs({"S,F,E,S+C,F+C,E+C,F+TO,F+TF,S+TO,S+TF,X", "A,QO,QF"}) do
end
end
end
---------------------------------------------------------------- procedure Register (just Noc
function fuef.Proc_XYZ(cf, gf, min, max, ex_loc)
min, max = min or 1, max or 99
return fuef.F(EFFECT_SPSUMMON_PROC):DES("XYZ"):PRO("OE"):RAN("E"):Func("XYZ,PX_con(%1,%2,%3,%4,%5),PX_tg(%1,%2,%3,%4,%5),XyzLevelFreeOperation()",cf,gf,min,max,ex_loc)
end
function fuef.PX_g_goal(g, tp, xyzc, gf)
return (not gf or gf(g, tp, xyzc)) and Duel.GetLocationCountFromEx(tp, tp, g, xyzc) > 0
end
function fuef.PX_con(cf, gf, minc, maxc, ex_loc)
return function(e, c, og, min, max)
if c == nil then return true end
if c:IsType(TYPE_PENDULUM) and c:IsFaceup() then return false end
local tp, minc, maxc = c:GetControler(), math.max(minc, min or minc), math.min(maxc, max or maxc)
if maxc < minc then return false end
local mg = fugf.Filter(og or fugf.Get(tp, "M"), "XyzLevelFreeFilter", {c, cf})
if ex_loc then mg = mg + fugf.GetFilter(tp, ex_loc, "XyzLevelFreeFilter", {c, cf}) end
local sg = Duel.GetMustMaterial(tp,EFFECT_MUST_BE_XMATERIAL)
if #mg > #(mg + sg) then return false end
Duel.SetSelectedCard(sg)
Auxiliary.GCheckAdditional = Auxiliary.TuneMagicianCheckAdditionalX(EFFECT_TUNE_MAGICIAN_X)
local res = mg:CheckSubGroup(fuef.PX_g_goal, minc, maxc, tp, c, gf)
Auxiliary.GCheckAdditional = nil
return res
end
end
function fuef.PX_tg(cf, gf, minc, maxc, ex_loc)
return function(e, tp, eg, ep, ev, re, r, rp, chk, c, og, min, max)
if og and not min then return true end
minc, maxc = math.max(minc, min or minc), math.min(maxc, max or maxc)
local mg = fugf.Filter(og or fugf.Get(tp,"M"), "XyzLevelFreeFilter", {c, cf})
if ex_loc then mg = mg + fugf.GetFilter(tp, ex_loc, "XyzLevelFreeFilter", {c, cf}) end
Duel.SetSelectedCard(Duel.GetMustMaterial(tp,EFFECT_MUST_BE_XMATERIAL))
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_XMATERIAL)
Auxiliary.GCheckAdditional = Auxiliary.TuneMagicianCheckAdditionalX(EFFECT_TUNE_MAGICIAN_X)
mg = mg:SelectSubGroup(tp, fuef.PX_g_goal, Duel.IsSummonCancelable(), minc, maxc, tp, c, gf)
Auxiliary.GCheckAdditional = nil
if not mg or #mg == 0 then return false end
mg:KeepAlive()
e:SetLabelObject(mg)
return true
end
end
---------------------------------------------------------------- fuef()
function fuef:__call(_cod, _handler, _ignore)
-- _cod is owner (Creat and Register Noc
......@@ -60,7 +102,8 @@ function fuef:CreatNoc(_owner, _handler, _ignore)
while ori.pre do
ori = ori.pre
end
repeat
repeat
if type(ori.typ) == "table" then ori.typ = ori.typ[1] end
self = fuef:Creat(ori.typ, ori.cod, _owner, _handler, _ignore)
for _,_key in ipairs(fusf.CutString("des,cat,pro,ran,tran,ctl,val,con,cos,tg,op,res,lab,obj", ",", "CreatNoc")) do
if ori[_key] then fuef[_key:upper()](self, table.unpack(ori[_key])) end
......@@ -75,7 +118,7 @@ function fuef:Reg(_handler, _ignore)
local handler = self.handler or self.e:GetOwner()
-- is force Register (use in Card.RegisterEffect
local ignore = _ignore
if _handler then
if _handler then
if _handler == true then -- handler equal owner and ignore == true
ignore = true
elseif _handler == false then -- not Reg (use in FG
......@@ -144,7 +187,7 @@ function fuef:Reload(_from)
self.e:Reset()
self.e = Effect.CreateEffect(_owner)
-- Reset if handler is group
if self.gclo then
if self.gclo then
for _, gcloe in ipairs(self.gclo) do
gcloe:Reset()
end
......@@ -154,13 +197,13 @@ function fuef:Reload(_from)
end
function fuef:IsNil(from, ...)
local res = fusf.IsNil(...)
if res then self:Debug("... IsNil <- ".._from) end
if res then self:Debug("... IsNil <- "..from) end
return res
end
function fuef:PreChk(from, ...)
if not self.e then --is Noc
self[from:lower()] = {...}
return false
return false
end
return not self:IsNil("PreChk <- "..from, ...)
end
......@@ -180,7 +223,7 @@ function fuef:Cons_Model(_key, _val)
local _keytype = _key == "typ" and "etyp" or _key
local val, des = fusf.Get_Constant(_keytype, _val)
self[_key] = val
if _key == "cod" and not self.des and fucs.des[des] then self.des = fucs.des[des] end
if _key == "cat" and des then self.des = self.des or des end
return self:Reload("Cons_Model <- ".._key:upper())
end
function fuef:TYP(_val)
......@@ -210,8 +253,9 @@ end
function fuef:CTL(_count, _code, _pro) --count, code, pro
if not self:PreChk("CTL", _count, _code, _pro) then return self end
if type(_count) == "string" or _count > 99 then -- ("n+D") or (m) -> (1, "n+D") or (1, m)
_count, _code, _pro = 1, _count, _code
_count, _code, _pro = 1, _count, _code
end
if _code == "m" then _code = self.e:GetOwner():GetOriginalCode() end
local res, ctl_val = {_code or 0, _pro or 0}, {
O = EFFECT_COUNT_CODE_OATH,
D = EFFECT_COUNT_CODE_DUEL,
......@@ -245,7 +289,7 @@ function fuef:Func(_val, _func, ...)
if not (type(_val) == "string" and _val:match("%,")) then -- check _val is val
local val = { _val }
if type(_val) == "string" and _val:match("%%") then val = { _val , ... } end
self.val = val
self.val = val
else -- _val is _func
vals, _func = {_func, ...}, _val
end
......@@ -256,7 +300,7 @@ function fuef:Func(_val, _func, ...)
local fname, fval = func, func
if type(fname) == "table" then
fname = table.remove(fval,1)
else
else
fval = nil
end
-- find fname can match seqs
......@@ -296,12 +340,12 @@ function fuef:Func_Model(_key, _func, ...)
if not self:PreChk(_key:upper(), _func, ...) then return self end
local val_chk = _key == "val" and (tonumber(_func) or fucs.val[_func]) or nil
local vals = select("#", ...) > 0 and { ... } or nil
if type(_func) == "string" and _func:match("%(") then
if type(_func) == "string" and _func:match("%(") then
_func = fusf.Val_Cuts(_func, ...)[1]
vals = _func
if type(_func) == "table" then
_func = table.remove(vals,1)
else
else
vals = nil
end
elseif vals and #vals == 1 and type(vals[1]) == "table" then
......@@ -338,7 +382,7 @@ function fuef:LAB(...)
local _labs = {...}
local labs = { }
for _,_lab in ipairs(_labs) do
if type(_lab) == "string" then
if type(_lab) == "string" then
for _,lab in ipairs(fusf.CutString(_lab, "+", "LAB")) do
labs[#labs + 1] = (lab == "m") and self.e:GetOwner():GetOriginalCode() or tonumber(lab)
end
......@@ -362,13 +406,18 @@ function fuef.initial(_lib, _glo, _exop_func, ...)
cm.es, cm.lib = {}, _lib
cm.initial_effect = cm.initial_effect or function(c)
-- do ex_op
if _exop_func then
if _exop_func then
local place = 1
if type(_exop_func) ~= "table" then _exop_func = { _exop_func } end
for _, exop_func in ipairs(_exop_func) do
if type(exop_func) == "string" then
if type(exop_func) == "string" then
for _, func in ipairs(fusf.CutString(exop_func, ",", "fuef.initial")) do
(fucf[func] or Card[func])(c, exop_val[place])
local f = fucf[func] or Card[func]
if f then
f(c, exop_val[place])
else
cm[func] = exop_val[place](c)
end
place = place + 1
end
else
......
......@@ -7,10 +7,10 @@ function fu_GD.sd_con(e,tp,eg,ep,ev,re,r,rp)
end
--Normal initial
function fu_GD.N_initial(add_cat, f1_loc, f1_func, f1_val)
local cm, m = fuef.initial(fu_GD, _glo)
local func = function(e,tp) return fugf.GetFilter(tp, f1_loc, f1_func, f1_val) end
cm.pe1 = fuef.I():CAT("TD+DR"..(add_cat and "+"..add_cat or "")):RAN("H"):CTL(m):Func("N_cos1,N_tg1(%1),N_op1(%1)", func)
cm.pe2 = fuef.FC("DR"):RAN("H"):Func("sd_con,N_op2")
local pe = fuef.I():CAT("TD+DR"..(add_cat and "+"..add_cat or "")):RAN("H"):CTL("m"):Func("N_cos1,N_tg1(%1),N_op1(%1)", func)
local cm, m = fuef.initial(fu_GD, _glo, "public_effect", pe)
cm.pe1 = fuef.FC("DR"):RAN("H"):Func("sd_con,N_op2")
return cm, m
end
function fu_GD.N_cos1(e,tp,eg,ep,ev,re,r,rp,chk)
......
--创导龙裔·探求者
dofile("expansions/script/c20000450.lua")
fu_GD.N_initial(nil, "D", "IsTyp+IsSet", "S,bfd4")
\ No newline at end of file
fu_GD.N_initial(nil, "D", "IsTyp+IsSet", "S/T,bfd4")
\ No newline at end of file
......@@ -30,6 +30,6 @@ function cm.op1(e,tp,eg,ep,ev,re,r,rp)
Duel.BreakEffect()
Duel.SpecialSummon(tc,SUMMON_TYPE_RITUAL,tp,tp,false,true,POS_FACEUP)
tc:CompleteProcedure()
if #mg == 1 then fuef.S(e,EFFECT_INDESTRUCTABLE_EFFECT,tc):DES(0):PRO("SR+CD+HINT"):RAN("M"):VAL(1):RES("STD") end
if mg:IsExists(Card.IsSetCard,nil,1,0xbfd4) then fuef.S(e,EFFECT_CANNOT_BE_EFFECT_TARGET,tc):DES(1):PRO("HINT"):VAL("tgoval"):RES("STD") end
if #mg == 1 then fuef.S(e,EFFECT_INDESTRUCTABLE_EFFECT,tc):DES(m,0):PRO("SR+CD+HINT"):RAN("M"):VAL(1):RES("STD") end
if mg:IsExists(Card.IsSetCard,nil,1,0xbfd4) then fuef.S(e,EFFECT_CANNOT_BE_EFFECT_TARGET,tc):DES(m,1):PRO("HINT"):VAL("tgoval"):RES("STD") end
end
\ No newline at end of file
......@@ -9,7 +9,7 @@ function cm.tg1(e,tp,eg,ep,ev,re,r,rp,chk)
end
function cm.op1(e,tp,eg,ep,ev,re,r,rp)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_REMOVE)
local g = fugf.SelectFilter(tp,"+MSG",nil,nil,1,ev)
local g = fugf.Select(tp,"+MSG",nil,nil,1,ev)
if #g<=0 then return end
Duel.Remove(g,POS_FACEUP,REASON_EFFECT)
end
\ No newline at end of file
......@@ -16,11 +16,21 @@ function cm.tg1(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
Duel.SetChainLimit(cm.tg1f(g))
end
function cm.op1con1(e)
local tp = e:GetOwnerPlayer()
return e:GetHandler():IsStatus(STATUS_EFFECT_ENABLED) and fugf.GetFilter(tp,"M","IsTyp+IsRac+IsPos","RI+M,DR,FU",1)
if not fugf.GetFilter(e:GetOwnerPlayer(),"M","IsTyp+IsRac+IsPos","RI+M,DR,FU",1) then return false end
local c = e:GetHandler()
if c:IsType(TYPE_TRAPMONSTER) then
return c:IsFaceup()
elseif c:IsType(TYPE_SPELL+TYPE_TRAP) then
return c:IsFaceup() and not c:IsDisabled()
else
return Auxiliary.NegateMonsterFilter(c)
end
end
function cm.op1con2(e)
return fugf.GetFilter(e:GetOwnerPlayer(),"M","IsTyp+IsRac+IsPos","RI+M,DR,FU",1)
end
function cm.op1(e,tp,eg,ep,ev,re,r,rp)
local g = Duel.GetChainInfo(0,CHAININFO_TARGET_CARDS):Filter(Card.IsRelateToEffect,nil,e)
if #g==0 then return end
fuef.S(e,EFFECT_CANNOT_TRIGGER,g):DES(1):PRO("HINT"):CON("op1con1"):RES("STD")(EFFECT_DISABLE)
fuef.S(e,EFFECT_DISABLE,g):DES(1):PRO("HINT"):CON("op1con1"):RES("STD")(EFFECT_CANNOT_TRIGGER):CON("op1con2")
end
\ No newline at end of file
--创导龙裔·研究者
dofile("expansions/script/c20000450.lua")
local cm, m = fuef.initial(fu_GD, _glo)
cm.e1 = fuef.STO("DR"):RAN("H"):PRO("DAM"):CTL(m):Func("con1,N_cos1,tg1,op1")
cm.e2 = fuef.QO():RAN("H"):PRO("TG"):CTL(m):Func("con2,tg2,op2")
--e1
function cm.con1(e,tp,eg,ep,ev,re,r,rp)
return (r & REASON_EFFECT == REASON_EFFECT) and fucf.Filter(re:GetHandler(), "IsSet+IsTyp", "bfd4,M")
end
function cm.tg1(e,tp,eg,ep,ev,re,r,rp,chk)
local te = re:GetHandler().public_effect
if not te then return false end
te = te.e
local tg = te:GetTarget()
if chk==0 then return not tg or tg(e,tp,eg,ep,ev,re,r,rp,0) end
e:SetLabelObject(te)
if tg then tg(e,tp,eg,ep,ev,re,r,rp,1) end
end
function cm.op1(e,tp,eg,ep,ev,re,r,rp)
local op = e:GetLabelObject():GetOperation()
if op then op(e,tp,eg,ep,ev,re,r,rp) end
end
--e2
function cm.con2(e,tp,eg,ep,ev,re,r,rp)
return e:GetHandler():IsPublic() and Duel.GetTurnPlayer() ~= tp
end
function cm.tg2tg1(e,c)
return not fusf.Creat_CF("IsSet+IsTyp","3fd4,RI+M")(c)
end
function cm.tg2(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
local e1 = fuef.F(e,EFFECT_CANNOT_SPECIAL_SUMMON,tp):PRO("PTG"):TRAN(1,0):TG("tg2tg1")
local g = fugf.GetFilter(tp,"G","IsTyp+CheckActivateEffect+TgChk",{"RI+S",{true,true,false},e})
e1.e:Reset()
if chkc then return chkc:IsLocation(LOCATION_MZONE) and g:IsContains(chkc) end
if chk==0 then return #g > 0 end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TARGET)
g = fugf.SelectTg(tp, g)
local te, ceg, cep, cev, cre, cr, crp = g:GetFirst():CheckActivateEffect(true,true,true)
e:SetProperty(te:GetProperty())
local tg = te:GetTarget()
if tg then tg(e, tp, ceg, cep, cev, cre, cr, crp, 1) end
te:SetLabelObject(e:GetLabelObject())
e:SetLabelObject(te)
Duel.ClearOperationInfo(0)
end
function cm.op2(e,tp,eg,ep,ev,re,r,rp)
local e1 = fuef.F(e,EFFECT_CANNOT_SPECIAL_SUMMON,tp):PRO("PTG"):TRAN(1,0):TG("tg2tg1")
local te=e:GetLabelObject()
if te then
e:SetLabelObject(te:GetLabelObject())
local op=te:GetOperation()
if op then op(e,tp,eg,ep,ev,re,r,rp) end
end
e1.e:Reset()
end
\ No newline at end of file
......@@ -6,59 +6,7 @@ function fugf.Get(_tp, _loc)
return Duel.GetFieldGroup(_tp, fusf.Get_Loc(_loc))
end
function fugf.Filter(_g, _func, _val, _n, ...)
if not _func then return not _n and _g or #_g >= _n end -- nil chk
-- trans _val
if type(_val) ~= "table" then _val = { _val } end
local temp_val, v_ind = { }, 0
for _, f_val in ipairs(_val) do
if type(f_val) == "string" then
for _, val in fusf.ForTable(fusf.Val_Cuts(f_val, ...)) do
v_ind = v_ind + 1
temp_val[v_ind] = val
end
else
v_ind = v_ind + 1
temp_val[v_ind] = f_val
end
end
_val, temp_val = temp_val
-- _func is function
if type(_func) == "function" then
_g = _g:Filter(_func, nil, table.unpack(_val, 1, v_ind))
return not _n and _g or #_g >= _n
end
-- _func is string
_func = fusf.PostFix_Trans(_func, ...)
if #_func == 1 then
_func = fucf[_func[1] ] or Card[_func[1] ] or aux[_func[1] ]
_g = _g:Filter(_func, nil, table.unpack(_val, 1, v_ind))
return not _n and _g or #_g >= _n
end
-- multi _func
local v_ind, temp_g = 1, { }
for _, func in ipairs(_func) do
if func == "~" then
temp_g[#temp_g] = _g - temp_g[#temp_g]
elseif type(func) == "string" and #func == 1 then
local valR = table.remove(temp_g)
local valL = table.remove(temp_g)
local Cal = {
["+"] = valL & valR,
["-"] = valL - valR,
["/"] = valL + valR
}
table.insert(temp_g, Cal[func])
else
if type(func) == "string" then
func = fucf[func] or Card[func] or aux[func]
end
temp_val, v_ind = _val[v_ind], v_ind + 1
if type(temp_val) ~= "table" then temp_val = {temp_val, len = 1} end
table.insert(temp_g, _g:Filter(func, nil, table.unpack(temp_val, 1, temp_val.len)))
end
end
_g = table.remove(temp_g)
return not _n and _g or #_g >= _n
return fusf.Creat_GF(_func, _val, ...)(_g, _n)
end
function fugf.GetFilter(_tp, _loc, _func, _val, _n, ...)
return fugf.Filter(fugf.Get(_tp, _loc), _func, _val, _n, ...)
......@@ -96,8 +44,9 @@ function fucf.AddCode(c, ...)
end
fucf.ReviveLimit = Card.EnableReviveLimit
--------------------------------------"Card function" (use in Filter
function fucf.Filter(c, func, ...)
return fugf.Filter(Group.FromCards(c), func, {...},1)
function fucf.Filter(c, _func, ...)
return fusf.Creat_CF(_func, {...})(c)
--return fugf.Filter(Group.FromCards(c), func, {...}, 1)
end
fucf.IsRk = fusf.IsN("GetRank")
fucf.IsLv = fusf.IsN("GetLevel")
......@@ -184,4 +133,17 @@ fucf.IsOTyp = fusf.Is_Cons("GetOriginalType", "typ")
fucf.IsAtt = fusf.Is_Cons("GetAttribute", "att")
fucf.IsRac = fusf.Is_Cons("GetRace", "rac")
fucf.IsPos = fusf.Is_Cons("GetPosition", "pos", function(card_val, val) return card_val | val == val end)
fucf.IsPPos = fusf.Is_Cons("GetPreviousPosition", "pos", function(card_val, val) return card_val | val == val end)
\ No newline at end of file
fucf.IsPPos = fusf.Is_Cons("GetPreviousPosition", "pos", function(card_val, val) return card_val | val == val end)
---------------------------------------------------------------- procedure
function fucf.RMFilter(c, rf, e, tp, g1, g2, level_function, greater_or_equal, chk)
if rf and not rf(c, e, tp, chk) then return false end
if not fucf.Filter(rc, "IsTyp+CanSp", "RI+M", {e, SUMMON_TYPE_RITUAL, tp, false, true}) then return false end
local g = g1:Filter(Card.IsCanBeRitualMaterial, c, c) + (g2 or Group.CreateGroup())
g = g:Filter(c.mat_filter or aux.TRUE, c, tp)
local lv = level_function(c)
Auxiliary.GCheckAdditional = Auxiliary.RitualCheckAdditional(c, lv, greater_or_equal)
local res = g:CheckSubGroup(Auxiliary.RitualCheck, 1, lv, tp, c, lv, greater_or_equal)
Auxiliary.GCheckAdditional = nil
return res
end
\ No newline at end of file
......@@ -46,7 +46,7 @@ end
function fusf.Get_Constant(_constable, _vals)
-- string chk
if type(_vals) ~= "string" then return _vals end
local _res, _first = 0
local _res = 0
-- cod chk
if _constable == "cod" then
-- EVENT_CUSTOM
......@@ -56,7 +56,7 @@ function fusf.Get_Constant(_constable, _vals)
_res = EVENT_CUSTOM + fusf.M_chk(_vals)
-- EVENT_PHASE or EVENT_PHASE_START
elseif _vals:match("PH") then
for _,_var in ipairs(fusf.CutString(_vals, "+", "Get_Constant_1")) do
for _, _var in ipairs(fusf.CutString(_vals, "+", "Get_Constant_1")) do
local _constable = _var:match("PH") and "cod" or "pha"
_res = _res + fucs[_constable][_var]
end
......@@ -64,11 +64,13 @@ function fusf.Get_Constant(_constable, _vals)
if _res ~= 0 then return _res end
end
-- find _constable
for i,_val in ipairs(fusf.CutString(_vals, "+", "Get_Constant_2")) do
if i == 1 then _first = _val end
_res = _res + (fusf.NotNil(_val) and fucs[_constable][_val:upper()] or 0)
local vals, cons, _des = fusf.CutString(_vals, "+", "Get_Constant_2"), fucs[_constable]
for i = #vals, 1, -1 do
local _val = vals[i]
_des = fucs.des[_val] or _des
_res = _res + cons[_val]
end
return _res, _first
return _res, _des
end
function fusf.Get_Loc(_loc1, _loc2, _from)
-- nil chk
......@@ -93,9 +95,10 @@ function fusf.Get_Loc(_loc1, _loc2, _from)
end
return table.unpack(_locs)
end
function fusf.M_chk(_val)
if _val < 19999999 then return _val + 20000000 end
return _val
function fusf.M_chk(val) -- val : number|string
val = tonumber(val)
if val < 19999999 then return val + 20000000 end
return val
end
function fusf.PostFix_Trans(_str, ...)
local vals, res, temp, i = {...}, { }, { }, 1
......@@ -144,13 +147,14 @@ function fusf.IsN(_func)
return function(_c, _val, _exval)
local c_val = Card[_func](_c, _exval)
if type(_val) == "string" then
local oper, _val = _val:match("([%+%-])(%d+)")
local oper, _val = _val:match("%+%-"), _val:match("%d+")
_val = tonumber(_val)
if oper == "+" then
return c_val >= _val
elseif oper == "-" then
return c_val <= _val
return c_val <= _val
end
return c_val == _val
end
if _val > 0 then return c_val == _val end
return c_val <= -_val -- _val = -n
......@@ -182,19 +186,22 @@ end
function fusf.Get_Func(_c, _func, _val)
if type(_func) ~= "string" then return _func end
local lib = _c.lib or {}
local res = function(_func) return _func end
if _func:match("~") then
_func = _func:sub(2)
res = function(_func) return function(...) return not _func(...) end end
end
-- find cm, lib, fuef, aux
if not _val then
return _c[_func] or lib[_func] or fuef[_func] or aux[_func]
return res(_c[_func] or lib[_func] or fuef[_func] or aux[_func])
end
-- translate vals
for i, val in ipairs(_val) do
if tonumber(val) then
_val[i] = tonumber(val)
end
_val[i] = tonumber(val) or val
end
-- find cm, lib, fuef, aux
for _, Lib in ipairs({_c, lib, fuef, aux}) do
if Lib[_func] then return Lib[_func](table.unpack(_val)) end
if Lib[_func] then return res(Lib[_func](table.unpack(_val))) end
end
Debug.Message("Get_Func not found : ".._func)
return nil
......@@ -242,6 +249,72 @@ function fusf.Val_Cuts_Table_Process(_str, ...) -- "f(%1,,3)" -> {"f", vals[1],
res.len = res_ind
return res
end
function fusf.Creat_CF(_func, _val, ...)
if not _func then return function(c) return true end end
-- trans _val
if type(_val) ~= "table" then _val = { _val } end
local temp_val, v_ind = { }, 0
for _, f_val in ipairs(_val) do
if type(f_val) == "string" then
for _, val in fusf.ForTable(fusf.Val_Cuts(f_val, ...)) do
v_ind = v_ind + 1
temp_val[v_ind] = val
end
else
v_ind = v_ind + 1
temp_val[v_ind] = f_val
end
end
_val, temp_val = temp_val
-- _func is function
if type(_func) == "function" then
return function(c)
return _func(c, table.unpack(_val, 1, v_ind))
end
end
-- _func is string
_func = fusf.PostFix_Trans(_func, ...)
local fucf, Card, aux = fucf, Card, aux
if #_func == 1 then -- _func just one
_func = fucf[_func[1] ] or Card[_func[1] ] or aux[_func[1] ]
return function(c)
return _func(c, table.unpack(_val, 1, v_ind))
end
end
-- _func is multi
return function(c)
local stack, v_ind, temp_val = { }, 1
for _, func in ipairs(_func) do
if func == "~" then
stack[#stack] = not stack[#stack]
elseif type(func) == "string" and #func == 1 then
local valR, valL = table.remove(stack), table.remove(stack)
local Cal = {
["+"] = valL and valR,
["-"] = valL and not valR,
["/"] = valL or valR
}
stack[#stack + 1] = Cal[func]
else
if type(func) == "string" then
func = fucf[func] or Card[func] or aux[func]
end
temp_val, v_ind = _val[v_ind], v_ind + 1
if type(temp_val) ~= "table" then temp_val = {temp_val, len = 1} end
stack[#stack + 1] = func(c, table.unpack(temp_val, 1, temp_val.len))
end
end
return table.remove(stack)
end
end
function fusf.Creat_GF(_func, _val, ...)
local ex_val = {...}
return function(g, n)
g = g:Filter(fusf.Creat_CF(_func, _val, table.unpack(ex_val)), nil)
if not n then return g end
return n > 0 and #g >= n or #g <= -n
end
end
function fusf.ForTable(t, n)
local i, max = 0, t.len or n
return function()
......@@ -272,55 +345,46 @@ function fusf.GetDES(_code, _id, m) -- (0), ("n"), (m), ("+1")
end
return aux.Stringid(_code, _id) -- _code*16 + _id
end
function fusf.GetRES(_flag, _count) -- _flag = a + b/b1/b2 + c | 1
if type(_flag) == "string" then
local temp = 0
if not _count then
_flag = fusf.CutString(_flag, "|", "RES_1")
_flag, _count = _flag[1], tonumber(_flag[2])
end
for _,val in ipairs(fusf.CutString(_flag, "+", "RES_2")) do
if val:match("PH") then
temp = temp + RESET_PHASE
val = fusf.CutString(val, "/", "RES_2")
for i = 2, #val do
temp = temp + fucs.pha[val[i] ]
end
elseif val == "SELF" or val == "OPPO" or val == "CH" or val == "EV" then
temp = temp + fucs.res[val]
else -- add RESET_EVENT
temp = (temp | RESET_EVENT) + fucs.res[val]
end
function fusf.GetRES(_flag, _count) -- _flag = a + b/b1/b2 + c | 1
if type(_flag) ~= "string" then return {_flag or 0, _count} end
if not _count then -- cut count
_flag = fusf.CutString(_flag, "|", "RES")
_flag, _count = _flag[1], tonumber(_flag[2] or 1)
end
local stack = { }
for _, unit in ipairs(fusf.PostFix_Trans(_flag)) do
if unit:match("[+-/]") then
local valR, valL = table.remove(stack), table.remove(stack)
table.insert(stack, unit == "-" and valL - valR or valL | valR)
else
table.insert(stack, fucs.res[unit] or fucs.pha[unit])
end
_flag = temp
end
_flag = table.remove(stack)
if _flag & 0xfff0000 > 0 then _flag = _flag | RESET_EVENT end
if _flag & 0x00003ff > 0 then _flag = _flag | RESET_PHASE end
return {_flag, _count}
end
--------------------------------------"Other Support function"
function fusf.RegFlag(tp_or_c, cod, res, pro, lab, des)
cod = fusf.M_chk(cod)
res = fusf.GetRES(res)
pro = fusf.Get_Constant("pro", pro)
if des then des = fusf.GetDES(des, nil, cod) end
if tonumber(tp_or_c) then
Duel.RegisterFlagEffect(tp_or_c, cod, res[1], pro, res[2] or 1, lab or 0)
function fusf.RegFlag(val, cod, res, pro, lab, des) -- val : Card|Effect|player(number)
cod, res, pro = fusf.M_chk(cod), fusf.GetRES(res), fusf.Get_Constant("pro", pro) or 0
if des then des, pro = fusf.GetDES(des, nil, cod), (pro or 0)|EFFECT_FLAG_CLIENT_HINT end
local typ = aux.GetValueType(val)
if typ == "Card" then
val:RegisterFlagEffect(cod, res[1], pro, res[2] or 1, lab or 0, des)
elseif typ == "Effect" then
val:GetHandler():RegisterFlagEffect(cod, res[1], pro, res[2] or 1, lab or 0, des)
else
tp_or_c:RegisterFlagEffect(cod, res[1], pro, res[2] or 1, lab or 0, des)
Duel.RegisterFlagEffect(val, cod, res[1], pro, res[2] or 1, lab or 0)
end
end
function fusf.GetFlag(val, cod, n1, n2)
local typ, count = aux.GetValueType(val)
if type(cod) == "string" then cod = tonumber(cod) end
if cod < 19999999 then cod = cod + 20000000 end
if typ == "Card" then count = val:GetFlagEffect(cod) end
if typ == "Effect" then count = val:GetHandler():GetFlagEffect(cod) end
if typ == "int" then count = Duel.GetFlagEffect(val, cod) end
if not n1 then return n2 and (count == n2) or count end
if type(n1) == "string" and n1:match("[%+%-]") then
local Cal = {
["+"] = count >= (n2 or math.abs(tonumber(n1))),
["-"] = count <= (n2 or math.abs(tonumber(n1)))
}
return Cal[n1:match("[%+%-]")]
function fusf.GetFlag(val, cod) -- val : Card|Effect|player(number)
cod = fusf.M_chk(cod)
local typ = aux.GetValueType(val)
if typ == "Card" then
return val:GetFlagEffect(cod)
elseif typ == "Effect" then
return val:GetHandler():GetFlagEffect(cod)
end
return Duel.GetFlagEffect(val, cod)
end
\ No newline at end of file
......@@ -219,7 +219,7 @@ fucs.pro = {
CAL = EFFECT_FLAG_DAMAGE_CAL , --可以在伤害计算时发动
OP = EFFECT_FLAG_EVENT_PLAYER , --发动/处理效果的玩家为触发事件的玩家而不是卡片的持有者,如仪式魔人,万魔殿
NR = EFFECT_FLAG_NO_TURN_RESET , --发条等“这张卡在场上只能发动一次”的效果
OE = 0x40400 , --EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE(out effect)
OE = 0x40400 , --EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE(out effect)
}
--Location Variable
fucs.ran = {
......@@ -255,8 +255,6 @@ fucs.res = {
SELF = RESET_SELF_TURN ,
OPPO = RESET_OPPO_TURN ,
CH = RESET_CHAIN ,
PH = RESET_PHASE ,
EV = RESET_EVENT ,
-- 以下自动添加 RESET_EVENT
DIS = RESET_DISABLE ,
SET = RESET_TURN_SET ,
......@@ -273,6 +271,9 @@ fucs.res = {
----组合时点
STD = RESETS_STANDARD ,
RED = RESETS_REDIRECT ,
-- 自动添加
PH = RESET_PHASE ,
EV = RESET_EVENT ,
}
--reason Variable
fucs.rea = {
......
......@@ -10,7 +10,7 @@ function c98941056.initial_effect(c)
e1:SetTarget(s.tg1)
c:RegisterEffect(e1)
local e0=e1:Clone()
e0:SetDescription(aux.Stringid(id,0))
e0:SetDescription(aux.Stringid(id,6))
e0:SetRange(LOCATION_DECK)
e0:SetCondition(s.descon)
e0:SetCost(s.cost2)
......@@ -26,16 +26,28 @@ function c98941056.initial_effect(c)
e2:SetTarget(s.target)
e2:SetOperation(s.activate)
c:RegisterEffect(e2)
local e10=e2:Clone()
e10:SetDescription(aux.Stringid(id,7))
e10:SetRange(LOCATION_DECK)
e10:SetCondition(s.descon)
e10:SetCost(s.cost2)
c:RegisterEffect(e10)
--change effect
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(98941056,2))
e2:SetType(EFFECT_TYPE_QUICK_O)
e2:SetCode(EVENT_CHAINING)
e2:SetRange(LOCATION_SZONE)
e2:SetCountLimit(1,id+o)
e2:SetTarget(c98941056.chtg)
e2:SetOperation(c98941056.chop)
c:RegisterEffect(e2)
local e3=Effect.CreateEffect(c)
e3:SetDescription(aux.Stringid(98941056,2))
e3:SetType(EFFECT_TYPE_QUICK_O)
e3:SetCode(EVENT_CHAINING)
e3:SetRange(LOCATION_SZONE)
e3:SetCountLimit(1,id+o)
e3:SetTarget(c98941056.chtg)
e3:SetOperation(c98941056.chop)
c:RegisterEffect(e3)
local e11=e3:Clone()
e11:SetDescription(aux.Stringid(id,8))
e11:SetRange(LOCATION_DECK)
e11:SetCondition(s.descon)
e11:SetCost(s.cost2)
c:RegisterEffect(e11)
end
function s.checkop(e,tp,eg,ep,ev,re,r,rp)
local rc=re:GetHandler()
......@@ -192,7 +204,7 @@ function c98941056.chop(e,tp,eg,ep,ev,re,r,rp)
end
end
function c98941056.repop(e,tp,eg,ep,ev,re,r,rp)
local oog=Duel.GetMatchingGroup(s.filterx,tp,LOCATION_GRAVE,0,nil)
local oog=Duel.GetMatchingGroup(c98941056.disfilter,tp,LOCATION_SZONE,0,nil)
if oog:GetCount()==0 then
local g=Duel.GetMatchingGroup(s.filterx,1-tp,LOCATION_GRAVE,0,nil)
if not Duel.IsPlayerAffectedByEffect(1-tp,59822133) and g:IsExists(s.sfilter1,1,nil,e,1-tp,g) then
......
......@@ -113,6 +113,7 @@
!setname 0x6410 星光歌剧
!setname 0x5411 源祀
!setname 0x412 圣地友爱团
!setname 0x1419 摩斯迪露姆
!setname 0x341a 深层幻夜
!setname 0x541a 燃煤
!setname 0x641a 神代丰
......@@ -583,6 +584,7 @@
!setname 0x3f43 反诘
!setname 0x5f43 天翎渊
!setname 0x6f43 狂音主
!setname 0x9f43 龙芯残机
#地狱犬 SEINE 314&907
!victory 0x60 「时计塔」效果胜利
......@@ -1125,10 +1127,11 @@
!setname 0x3213 渊海异兽
#依然 223 0x700-0x70f
!setname 0x613 金属
!setname 0x613 金属
!counter 0x1613 金属化指示物
!setname 0x700 机神
!setname 0x702 红之印象
!setname 0x3702 惧质
!setname 0x970b 拉特金
!setname 0x703 墓园
!setname 0x3703 墓园死者
!setname 0x5703 墓园守护者
......
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