59c6f5280b 2024-07-01 顽雨沉风: Auxiliary={}
59c6f5280b 2024-07-01 顽雨沉风: aux=Auxiliary
59c6f5280b 2024-07-01 顽雨沉风: POS_FACEUP_DEFENCE=POS_FACEUP_DEFENSE
59c6f5280b 2024-07-01 顽雨沉风: POS_FACEDOWN_DEFENCE=POS_FACEDOWN_DEFENSE
59c6f5280b 2024-07-01 顽雨沉风: RACE_CYBERS=RACE_CYBERSE
59c6f5280b 2024-07-01 顽雨沉风:
59c6f5280b 2024-07-01 顽雨沉风: function GetID()
59c6f5280b 2024-07-01 顽雨沉风: local offset=self_code<100000000 and 1 or 100
59c6f5280b 2024-07-01 顽雨沉风: return self_table,self_code,offset
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风:
59c6f5280b 2024-07-01 顽雨沉风: --the lua version of the bit32 lib, which is deprecated in lua 5.3
59c6f5280b 2024-07-01 顽雨沉风: bit={}
59c6f5280b 2024-07-01 顽雨沉风: function bit.band(a,b)
59c6f5280b 2024-07-01 顽雨沉风: return a&b
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function bit.bor(a,b)
59c6f5280b 2024-07-01 顽雨沉风: return a|b
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function bit.bxor(a,b)
59c6f5280b 2024-07-01 顽雨沉风: return a~b
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function bit.lshift(a,b)
59c6f5280b 2024-07-01 顽雨沉风: return a<<b
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function bit.rshift(a,b)
59c6f5280b 2024-07-01 顽雨沉风: return a>>b
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function bit.bnot(a)
59c6f5280b 2024-07-01 顽雨沉风: return ~a
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: local function fieldargs(f,width)
59c6f5280b 2024-07-01 顽雨沉风: local w=width or 1
59c6f5280b 2024-07-01 顽雨沉风: assert(f>=0,"field cannot be negative")
59c6f5280b 2024-07-01 顽雨沉风: assert(w>0,"width must be positive")
59c6f5280b 2024-07-01 顽雨沉风: assert(f+w<=32,"trying to access non-existent bits")
59c6f5280b 2024-07-01 顽雨沉风: return f,~(-1<<w)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function bit.extract(r,field,width)
59c6f5280b 2024-07-01 顽雨沉风: width=width or 1
59c6f5280b 2024-07-01 顽雨沉风: local f,m=fieldargs(field,width)
59c6f5280b 2024-07-01 顽雨沉风: return (r>>f)&m
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function bit.replace(r,v,field,width)
59c6f5280b 2024-07-01 顽雨沉风: width=width or 1
59c6f5280b 2024-07-01 顽雨沉风: local f,m=fieldargs(field,width)
59c6f5280b 2024-07-01 顽雨沉风: return (r&~(m<<f))|((v&m)<< f)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风:
59c6f5280b 2024-07-01 顽雨沉风: ---Subgroup check function
59c6f5280b 2024-07-01 顽雨沉风: ---@param sg Group
59c6f5280b 2024-07-01 顽雨沉风: ---@param c Card|nil
59c6f5280b 2024-07-01 顽雨沉风: ---@param g Group
59c6f5280b 2024-07-01 顽雨沉风: ---@return boolean
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.GCheckAdditional=function(sg,c,g) return true end
59c6f5280b 2024-07-01 顽雨沉风:
59c6f5280b 2024-07-01 顽雨沉风: --the table of xyz number
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.xyz_number={}
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.GetXyzNumber(v)
59c6f5280b 2024-07-01 顽雨沉风: local id
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.GetValueType(v)=="Card" then id=v:GetCode() end
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.GetValueType(v)=="number" then id=v end
59c6f5280b 2024-07-01 顽雨沉风: return Auxiliary.xyz_number[id]
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风:
59c6f5280b 2024-07-01 顽雨沉风: --iterator for getting playerid of current turn player and the other player
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.TurnPlayers()
59c6f5280b 2024-07-01 顽雨沉风: local i=0
59c6f5280b 2024-07-01 顽雨沉风: return function()
59c6f5280b 2024-07-01 顽雨沉风: i=i+1
59c6f5280b 2024-07-01 顽雨沉风: if i==1 then return Duel.GetTurnPlayer() end
59c6f5280b 2024-07-01 顽雨沉风: if i==2 then return 1-Duel.GetTurnPlayer() end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风:
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.idx_table=table.pack(1,2,3,4,5,6,7,8)
59c6f5280b 2024-07-01 顽雨沉风:
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.Stringid(code,id)
59c6f5280b 2024-07-01 顽雨沉风: return code*16+id
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.Next(g)
59c6f5280b 2024-07-01 顽雨沉风: local first=true
59c6f5280b 2024-07-01 顽雨沉风: return function()
59c6f5280b 2024-07-01 顽雨沉风: if first then first=false return g:GetFirst()
59c6f5280b 2024-07-01 顽雨沉风: else return g:GetNext() end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NULL()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.TRUE()
59c6f5280b 2024-07-01 顽雨沉风: return true
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.FALSE()
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.AND(...)
59c6f5280b 2024-07-01 顽雨沉风: local function_list={...}
59c6f5280b 2024-07-01 顽雨沉风: return function(...)
59c6f5280b 2024-07-01 顽雨沉风: local res=false
59c6f5280b 2024-07-01 顽雨沉风: for i,f in ipairs(function_list) do
59c6f5280b 2024-07-01 顽雨沉风: res=f(...)
59c6f5280b 2024-07-01 顽雨沉风: if not res then return res end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return res
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.OR(...)
59c6f5280b 2024-07-01 顽雨沉风: local function_list={...}
59c6f5280b 2024-07-01 顽雨沉风: return function(...)
59c6f5280b 2024-07-01 顽雨沉风: local res=false
59c6f5280b 2024-07-01 顽雨沉风: for i,f in ipairs(function_list) do
59c6f5280b 2024-07-01 顽雨沉风: res=f(...)
59c6f5280b 2024-07-01 顽雨沉风: if res then return res end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return res
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NOT(f)
59c6f5280b 2024-07-01 顽雨沉风: return function(...)
59c6f5280b 2024-07-01 顽雨沉风: return not f(...)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.BeginPuzzle(effect)
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.GlobalEffect()
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EVENT_TURN_END)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCountLimit(1)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(Auxiliary.PuzzleOp)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(e1,0)
59c6f5280b 2024-07-01 顽雨沉风: local e2=Effect.GlobalEffect()
59c6f5280b 2024-07-01 顽雨沉风: e2:SetType(EFFECT_TYPE_FIELD)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetCode(EFFECT_SKIP_DP)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetTargetRange(1,0)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(e2,0)
59c6f5280b 2024-07-01 顽雨沉风: local e3=Effect.GlobalEffect()
59c6f5280b 2024-07-01 顽雨沉风: e3:SetType(EFFECT_TYPE_FIELD)
59c6f5280b 2024-07-01 顽雨沉风: e3:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
59c6f5280b 2024-07-01 顽雨沉风: e3:SetCode(EFFECT_SKIP_SP)
59c6f5280b 2024-07-01 顽雨沉风: e3:SetTargetRange(1,0)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(e3,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.PuzzleOp(e,tp)
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetLP(0,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---Duel.SelectOption with option condition
59c6f5280b 2024-07-01 顽雨沉风: ---Return value starts from 1, different from Duel.SelectOption
59c6f5280b 2024-07-01 顽雨沉风: ---@param tp integer
59c6f5280b 2024-07-01 顽雨沉风: ---@param ... table {condition, option[, value]}
59c6f5280b 2024-07-01 顽雨沉风: ---@return integer
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SelectFromOptions(tp,...)
59c6f5280b 2024-07-01 顽雨沉风: local options={...}
59c6f5280b 2024-07-01 顽雨沉风: local ops={}
59c6f5280b 2024-07-01 顽雨沉风: local opvals={}
59c6f5280b 2024-07-01 顽雨沉风: for i=1,#options do
59c6f5280b 2024-07-01 顽雨沉风: if options[i][1] then
59c6f5280b 2024-07-01 顽雨沉风: table.insert(ops,options[i][2])
59c6f5280b 2024-07-01 顽雨沉风: table.insert(opvals,options[i][3] or i)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: if #ops==0 then return nil end
59c6f5280b 2024-07-01 顽雨沉风: local select=Duel.SelectOption(tp,table.unpack(ops))
59c6f5280b 2024-07-01 顽雨沉风: return opvals[select+1]
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --register effect of return to hand for Spirit monsters
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.EnableSpiritReturn(c,event1,...)
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(event1)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(Auxiliary.SpiritReturnReg)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: for i,event in ipairs{...} do
59c6f5280b 2024-07-01 顽雨沉风: local e2=e1:Clone()
59c6f5280b 2024-07-01 顽雨沉风: e2:SetCode(event)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e2)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SpiritReturnReg(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_F)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetDescription(1104)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCategory(CATEGORY_TOHAND)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EVENT_PHASE+PHASE_END)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetRange(LOCATION_MZONE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCountLimit(1)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetReset(RESET_EVENT+0xd7e0000+RESET_PHASE+PHASE_END)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCondition(Auxiliary.SpiritReturnConditionForced)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTarget(Auxiliary.SpiritReturnTargetForced)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(Auxiliary.SpiritReturnOperation)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: local e2=e1:Clone()
59c6f5280b 2024-07-01 顽雨沉风: e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetCondition(Auxiliary.SpiritReturnConditionOptional)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetTarget(Auxiliary.SpiritReturnTargetOptional)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e2)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SpiritReturnConditionForced(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return not c:IsHasEffect(EFFECT_SPIRIT_DONOT_RETURN) and not c:IsHasEffect(EFFECT_SPIRIT_MAYNOT_RETURN)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SpiritReturnTargetForced(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return true end
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_TOHAND,e:GetHandler(),1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SpiritReturnConditionOptional(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return not c:IsHasEffect(EFFECT_SPIRIT_DONOT_RETURN) and c:IsHasEffect(EFFECT_SPIRIT_MAYNOT_RETURN)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SpiritReturnTargetOptional(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return e:GetHandler():IsAbleToHand() end
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_TOHAND,e:GetHandler(),1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SpiritReturnOperation(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: if c:IsRelateToEffect(e) then
59c6f5280b 2024-07-01 顽雨沉风: Duel.SendtoHand(c,nil,REASON_EFFECT)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.EnableNeosReturn(c,operation,set_category)
59c6f5280b 2024-07-01 顽雨沉风: --return
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetDescription(1193)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCategory(CATEGORY_TODECK)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_F)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EVENT_PHASE+PHASE_END)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetRange(LOCATION_MZONE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCountLimit(1)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCondition(Auxiliary.NeosReturnConditionForced)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTarget(Auxiliary.NeosReturnTargetForced(set_category))
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(operation)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: local e2=e1:Clone()
59c6f5280b 2024-07-01 顽雨沉风: e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetCondition(Auxiliary.NeosReturnConditionOptional)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetTarget(Auxiliary.NeosReturnTargetOptional(set_category))
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e2)
59c6f5280b 2024-07-01 顽雨沉风: return e1,e2
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NeosReturnConditionForced(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: return not e:GetHandler():IsHasEffect(42015635)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NeosReturnTargetForced(set_category)
59c6f5280b 2024-07-01 顽雨沉风: return function(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return true end
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_TODECK,e:GetHandler(),1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: if set_category then set_category(e,tp,eg,ep,ev,re,r,rp) end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NeosReturnConditionOptional(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: return e:GetHandler():IsHasEffect(42015635)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NeosReturnTargetOptional(set_category)
59c6f5280b 2024-07-01 顽雨沉风: return function(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return e:GetHandler():IsAbleToExtra() end
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_TODECK,e:GetHandler(),1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: if set_category then set_category(e,tp,eg,ep,ev,re,r,rp) end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.IsUnionState(effect)
59c6f5280b 2024-07-01 顽雨沉风: local c=effect:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return c:IsHasEffect(EFFECT_UNION_STATUS) and c:GetEquipTarget()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --set EFFECT_EQUIP_LIMIT after equipping
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SetUnionState(c)
59c6f5280b 2024-07-01 顽雨沉风: local eset={c:IsHasEffect(EFFECT_UNION_LIMIT)}
59c6f5280b 2024-07-01 顽雨沉风: if #eset==0 then return end
59c6f5280b 2024-07-01 顽雨沉风: local e0=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e0:SetType(EFFECT_TYPE_SINGLE)
59c6f5280b 2024-07-01 顽雨沉风: e0:SetCode(EFFECT_EQUIP_LIMIT)
59c6f5280b 2024-07-01 顽雨沉风: e0:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
59c6f5280b 2024-07-01 顽雨沉风: e0:SetValue(eset[1]:GetValue())
59c6f5280b 2024-07-01 顽雨沉风: e0:SetReset(RESET_EVENT+RESETS_STANDARD)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e0)
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_SINGLE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EFFECT_UNION_STATUS)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetReset(RESET_EVENT+RESETS_STANDARD)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: if c.old_union then
59c6f5280b 2024-07-01 顽雨沉风: local e2=e1:Clone()
59c6f5280b 2024-07-01 顽雨沉风: e2:SetCode(EFFECT_OLDUNION_STATUS)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e2)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --uc: the union monster to be equipped, tc: the target monster
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.CheckUnionEquip(uc,tc,exclude_modern_count)
59c6f5280b 2024-07-01 顽雨沉风: local modern_count,old_count=tc:GetUnionCount()
59c6f5280b 2024-07-01 顽雨沉风: if exclude_modern_count then modern_count=modern_count-exclude_modern_count end
59c6f5280b 2024-07-01 顽雨沉风: if uc.old_union then return modern_count==0
59c6f5280b 2024-07-01 顽雨沉风: else return old_count==0 end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --EFFECT_DESTROY_SUBSTITUTE filter for modern union monsters
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UnionReplaceFilter(e,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: return r&(REASON_BATTLE+REASON_EFFECT)~=0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---add effect to modern union monsters
59c6f5280b 2024-07-01 顽雨沉风: ---@param c Card
59c6f5280b 2024-07-01 顽雨沉风: ---@param filter function
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.EnableUnionAttribute(c,filter)
59c6f5280b 2024-07-01 顽雨沉风: local equip_limit=Auxiliary.UnionEquipLimit(filter)
59c6f5280b 2024-07-01 顽雨沉风: --destroy sub
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_EQUIP)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EFFECT_DESTROY_SUBSTITUTE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetValue(Auxiliary.UnionReplaceFilter)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: --limit
59c6f5280b 2024-07-01 顽雨沉风: local e2=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetType(EFFECT_TYPE_SINGLE)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetCode(EFFECT_UNION_LIMIT)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetValue(equip_limit)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e2)
59c6f5280b 2024-07-01 顽雨沉风: --equip
59c6f5280b 2024-07-01 顽雨沉风: local equip_filter=Auxiliary.UnionEquipFilter(filter)
59c6f5280b 2024-07-01 顽雨沉风: local e3=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e3:SetDescription(1068)
59c6f5280b 2024-07-01 顽雨沉风: e3:SetProperty(EFFECT_FLAG_CARD_TARGET)
59c6f5280b 2024-07-01 顽雨沉风: e3:SetCategory(CATEGORY_EQUIP)
59c6f5280b 2024-07-01 顽雨沉风: e3:SetType(EFFECT_TYPE_IGNITION)
59c6f5280b 2024-07-01 顽雨沉风: e3:SetRange(LOCATION_MZONE)
59c6f5280b 2024-07-01 顽雨沉风: e3:SetTarget(Auxiliary.UnionEquipTarget(equip_filter))
59c6f5280b 2024-07-01 顽雨沉风: e3:SetOperation(Auxiliary.UnionEquipOperation(equip_filter))
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e3)
59c6f5280b 2024-07-01 顽雨沉风: --unequip
59c6f5280b 2024-07-01 顽雨沉风: local e4=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e4:SetDescription(1152)
59c6f5280b 2024-07-01 顽雨沉风: e4:SetCategory(CATEGORY_SPECIAL_SUMMON)
59c6f5280b 2024-07-01 顽雨沉风: e4:SetType(EFFECT_TYPE_IGNITION)
59c6f5280b 2024-07-01 顽雨沉风: e4:SetRange(LOCATION_SZONE)
59c6f5280b 2024-07-01 顽雨沉风: e4:SetTarget(Auxiliary.UnionUnequipTarget)
59c6f5280b 2024-07-01 顽雨沉风: e4:SetOperation(Auxiliary.UnionUnequipOperation)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e4)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UnionEquipFilter(filter)
59c6f5280b 2024-07-01 顽雨沉风: return function(c,tp)
59c6f5280b 2024-07-01 顽雨沉风: local ct1,ct2=c:GetUnionCount()
59c6f5280b 2024-07-01 顽雨沉风: return c:IsFaceup() and ct2==0 and c:IsControler(tp) and filter(c)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UnionEquipLimit(filter)
59c6f5280b 2024-07-01 顽雨沉风: return function(e,c)
59c6f5280b 2024-07-01 顽雨沉风: return (c:IsControler(e:GetHandlerPlayer()) and filter(c)) or e:GetHandler():GetEquipTarget()==c
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UnionEquipTarget(equip_filter)
59c6f5280b 2024-07-01 顽雨沉风: return function(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: if chkc then return chkc:IsLocation(LOCATION_MZONE) and equip_filter(chkc,tp) end
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return c:GetFlagEffect(FLAG_ID_UNION)==0 and Duel.GetLocationCount(tp,LOCATION_SZONE)>0
59c6f5280b 2024-07-01 顽雨沉风: and Duel.IsExistingTarget(equip_filter,tp,LOCATION_MZONE,0,1,c,tp) end
59c6f5280b 2024-07-01 顽雨沉风: Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_EQUIP)
59c6f5280b 2024-07-01 顽雨沉风: local g=Duel.SelectTarget(tp,equip_filter,tp,LOCATION_MZONE,0,1,1,c,tp)
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_EQUIP,g,1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterFlagEffect(FLAG_ID_UNION,RESET_EVENT+0x7e0000+RESET_PHASE+PHASE_END,0,1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UnionEquipOperation(equip_filter)
59c6f5280b 2024-07-01 顽雨沉风: return function(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: local tc=Duel.GetFirstTarget()
59c6f5280b 2024-07-01 顽雨沉风: if not c:IsRelateToEffect(e) or c:IsFacedown() then return end
59c6f5280b 2024-07-01 顽雨沉风: if not tc:IsRelateToEffect(e) or not equip_filter(tc,tp) then
59c6f5280b 2024-07-01 顽雨沉风: Duel.SendtoGrave(c,REASON_RULE)
59c6f5280b 2024-07-01 顽雨沉风: return
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: if not Duel.Equip(tp,c,tc,false) then return end
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.SetUnionState(c)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UnionUnequipTarget(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return c:GetFlagEffect(FLAG_ID_UNION)==0 and Duel.GetLocationCount(tp,LOCATION_MZONE)>0
59c6f5280b 2024-07-01 顽雨沉风: and c:GetEquipTarget() and c:IsCanBeSpecialSummoned(e,0,tp,true,false) end
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,c,1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterFlagEffect(FLAG_ID_UNION,RESET_EVENT+0x7e0000+RESET_PHASE+PHASE_END,0,1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UnionUnequipOperation(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: if not c:IsRelateToEffect(e) then return end
59c6f5280b 2024-07-01 顽雨沉风: Duel.SpecialSummon(c,0,tp,tp,true,false,POS_FACEUP)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.EnableChangeCode(c,code,location,condition)
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.AddCodeList(c,code)
59c6f5280b 2024-07-01 顽雨沉风: local loc=c:GetOriginalType()&TYPE_MONSTER~=0 and LOCATION_MZONE or LOCATION_SZONE
59c6f5280b 2024-07-01 顽雨沉风: loc=location or loc
59c6f5280b 2024-07-01 顽雨沉风: if condition==nil then condition=Auxiliary.TRUE end
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_SINGLE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EFFECT_CHANGE_CODE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetRange(loc)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCondition(condition)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetValue(code)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: return e1
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.TargetEqualFunction(f,value,...)
59c6f5280b 2024-07-01 顽雨沉风: local ext_params={...}
59c6f5280b 2024-07-01 顽雨沉风: return function(effect,target)
59c6f5280b 2024-07-01 顽雨沉风: return f(target,table.unpack(ext_params))==value
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.TargetBoolFunction(f,...)
59c6f5280b 2024-07-01 顽雨沉风: local ext_params={...}
59c6f5280b 2024-07-01 顽雨沉风: return function(effect,target)
59c6f5280b 2024-07-01 顽雨沉风: return f(target,table.unpack(ext_params))
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.FilterEqualFunction(f,value,...)
59c6f5280b 2024-07-01 顽雨沉风: local ext_params={...}
59c6f5280b 2024-07-01 顽雨沉风: return function(target)
59c6f5280b 2024-07-01 顽雨沉风: return f(target,table.unpack(ext_params))==value
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.FilterBoolFunction(f,...)
59c6f5280b 2024-07-01 顽雨沉风: local ext_params={...}
59c6f5280b 2024-07-01 顽雨沉风: return function(target)
59c6f5280b 2024-07-01 顽雨沉风: return f(target,table.unpack(ext_params))
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.GetValueType(v)
59c6f5280b 2024-07-01 顽雨沉风: local t=type(v)
59c6f5280b 2024-07-01 顽雨沉风: if t=="userdata" then
59c6f5280b 2024-07-01 顽雨沉风: local mt=getmetatable(v)
59c6f5280b 2024-07-01 顽雨沉风: if mt==Group then return "Group"
59c6f5280b 2024-07-01 顽雨沉风: elseif mt==Effect then return "Effect"
59c6f5280b 2024-07-01 顽雨沉风: else return "Card" end
59c6f5280b 2024-07-01 顽雨沉风: else return t end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --Extra Deck summon count
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.EnableExtraDeckSummonCountLimit()
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.ExtraDeckSummonCountLimit~=nil then return end
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.ExtraDeckSummonCountLimit={}
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.ExtraDeckSummonCountLimit[0]=1
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.ExtraDeckSummonCountLimit[1]=1
59c6f5280b 2024-07-01 顽雨沉风: local ge1=Effect.GlobalEffect()
59c6f5280b 2024-07-01 顽雨沉风: ge1:SetType(EFFECT_TYPE_CONTINUOUS+EFFECT_TYPE_FIELD)
59c6f5280b 2024-07-01 顽雨沉风: ge1:SetCode(EVENT_PHASE_START+PHASE_DRAW)
59c6f5280b 2024-07-01 顽雨沉风: ge1:SetOperation(Auxiliary.ExtraDeckSummonCountLimitReset)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(ge1,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.ExtraDeckSummonCountLimitReset()
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.ExtraDeckSummonCountLimit[0]=1
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.ExtraDeckSummonCountLimit[1]=1
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --Fusion Monster is unnecessary to use this
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.AddMaterialCodeList(c,...)
59c6f5280b 2024-07-01 顽雨沉风: if c:IsStatus(STATUS_COPYING_EFFECT) then return end
59c6f5280b 2024-07-01 顽雨沉风: local mat={}
59c6f5280b 2024-07-01 顽雨沉风: for _,code in ipairs{...} do
59c6f5280b 2024-07-01 顽雨沉风: mat[code]=true
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: if c.material==nil then
59c6f5280b 2024-07-01 顽雨沉风: local mt=getmetatable(c)
59c6f5280b 2024-07-01 顽雨沉风: mt.material=mat
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: for index,_ in pairs(mat) do
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.AddCodeList(c,index)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.IsMaterialListCode(c,code)
59c6f5280b 2024-07-01 顽雨沉风: return c.material and c.material[code]
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.IsMaterialListSetCard(c,setcode)
59c6f5280b 2024-07-01 顽雨沉风: if not c.material_setcode then return false end
59c6f5280b 2024-07-01 顽雨沉风: if type(c.material_setcode)=="table" then
59c6f5280b 2024-07-01 顽雨沉风: for i,scode in ipairs(c.material_setcode) do
59c6f5280b 2024-07-01 顽雨沉风: if setcode&0xfff==scode&0xfff and setcode&scode==setcode then return true end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return setcode&0xfff==c.material_setcode&0xfff and setcode&c.material_setcode==setcode
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.IsMaterialListType(c,type)
59c6f5280b 2024-07-01 顽雨沉风: return c.material_type and type&c.material_type==type
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.GetMaterialListCount(c)
59c6f5280b 2024-07-01 顽雨沉风: if not c.material_count then return 0,0 end
59c6f5280b 2024-07-01 顽雨沉风: return c.material_count[1],c.material_count[2]
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.AddCodeList(c,...)
59c6f5280b 2024-07-01 顽雨沉风: if c:IsStatus(STATUS_COPYING_EFFECT) then return end
59c6f5280b 2024-07-01 顽雨沉风: if c.card_code_list==nil then
59c6f5280b 2024-07-01 顽雨沉风: local mt=getmetatable(c)
59c6f5280b 2024-07-01 顽雨沉风: mt.card_code_list={}
59c6f5280b 2024-07-01 顽雨沉风: for _,code in ipairs{...} do
59c6f5280b 2024-07-01 顽雨沉风: mt.card_code_list[code]=true
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: for _,code in ipairs{...} do
59c6f5280b 2024-07-01 顽雨沉风: c.card_code_list[code]=true
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.IsCodeListed(c,code)
59c6f5280b 2024-07-01 顽雨沉风: return c.card_code_list and c.card_code_list[code]
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.AddSetNameMonsterList(c,...)
59c6f5280b 2024-07-01 顽雨沉风: if c:IsStatus(STATUS_COPYING_EFFECT) then return end
59c6f5280b 2024-07-01 顽雨沉风: if c.setcode_monster_list==nil then
59c6f5280b 2024-07-01 顽雨沉风: local mt=getmetatable(c)
59c6f5280b 2024-07-01 顽雨沉风: mt.setcode_monster_list={}
59c6f5280b 2024-07-01 顽雨沉风: for i,scode in ipairs{...} do
59c6f5280b 2024-07-01 顽雨沉风: mt.setcode_monster_list[i]=scode
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: for i,scode in ipairs{...} do
59c6f5280b 2024-07-01 顽雨沉风: c.setcode_monster_list[i]=scode
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.IsSetNameMonsterListed(c,setcode)
59c6f5280b 2024-07-01 顽雨沉风: if not c.setcode_monster_list then return false end
59c6f5280b 2024-07-01 顽雨沉风: for i,scode in ipairs(c.setcode_monster_list) do
59c6f5280b 2024-07-01 顽雨沉风: if setcode&0xfff==scode&0xfff and setcode&scode==setcode then return true end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.IsCounterAdded(c,counter)
59c6f5280b 2024-07-01 顽雨沉风: if not c.counter_add_list then return false end
59c6f5280b 2024-07-01 顽雨沉风: for i,ccounter in ipairs(c.counter_add_list) do
59c6f5280b 2024-07-01 顽雨沉风: if counter==ccounter then return true end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.IsTypeInText(c,type)
59c6f5280b 2024-07-01 顽雨沉风: return c.has_text_type and type&c.has_text_type==type
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.GetAttributeCount(g)
59c6f5280b 2024-07-01 顽雨沉风: if #g==0 then return 0 end
59c6f5280b 2024-07-01 顽雨沉风: local att=0
59c6f5280b 2024-07-01 顽雨沉风: for tc in Auxiliary.Next(g) do
59c6f5280b 2024-07-01 顽雨沉风: att=att|tc:GetAttribute()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: local ct=0
59c6f5280b 2024-07-01 顽雨沉风: while att~=0 do
59c6f5280b 2024-07-01 顽雨沉风: if att&0x1~=0 then ct=ct+1 end
59c6f5280b 2024-07-01 顽雨沉风: att=att>>1
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return ct
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.IsInGroup(c,g)
59c6f5280b 2024-07-01 顽雨沉风: return g:IsContains(c)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --return the column of card c (from the viewpoint of p)
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.GetColumn(c,p)
59c6f5280b 2024-07-01 顽雨沉风: local seq=c:GetSequence()
59c6f5280b 2024-07-01 顽雨沉风: if c:IsLocation(LOCATION_MZONE) then
59c6f5280b 2024-07-01 顽雨沉风: if seq==5 then
59c6f5280b 2024-07-01 顽雨沉风: seq=1
59c6f5280b 2024-07-01 顽雨沉风: elseif seq==6 then
59c6f5280b 2024-07-01 顽雨沉风: seq=3
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: elseif c:IsLocation(LOCATION_SZONE) then
59c6f5280b 2024-07-01 顽雨沉风: if seq>4 then
59c6f5280b 2024-07-01 顽雨沉风: return nil
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return nil
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: if c:IsControler(p or 0) then
59c6f5280b 2024-07-01 顽雨沉风: return seq
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return 4-seq
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --return the column of monster zone seq (from the viewpoint of controller)
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.MZoneSequence(seq)
59c6f5280b 2024-07-01 顽雨沉风: if seq==5 then return 1 end
59c6f5280b 2024-07-01 顽雨沉风: if seq==6 then return 3 end
59c6f5280b 2024-07-01 顽雨沉风: return seq
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --return the column of spell/trap zone seq (from the viewpoint of controller)
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SZoneSequence(seq)
59c6f5280b 2024-07-01 顽雨沉风: if seq>4 then return nil end
59c6f5280b 2024-07-01 顽雨沉风: return seq
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --generate the value function of EFFECT_CHANGE_BATTLE_DAMAGE on monsters
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.ChangeBattleDamage(player,value)
59c6f5280b 2024-07-01 顽雨沉风: return function(e,damp)
59c6f5280b 2024-07-01 顽雨沉风: if player==0 then
59c6f5280b 2024-07-01 顽雨沉风: if e:GetOwnerPlayer()==damp then
59c6f5280b 2024-07-01 顽雨沉风: return value
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return -1
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: elseif player==1 then
59c6f5280b 2024-07-01 顽雨沉风: if e:GetOwnerPlayer()==1-damp then
59c6f5280b 2024-07-01 顽雨沉风: return value
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return -1
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for "negate the effects of a face-up monster" (無限泡影/Infinite Impermanence)
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NegateMonsterFilter(c)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsFaceup() and not c:IsDisabled() and (c:IsType(TYPE_EFFECT) or c:GetOriginalType()&TYPE_EFFECT~=0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for "negate the effects of an Effect Monster" (エフェクト・ヴェーラー/Effect Veiler)
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NegateEffectMonsterFilter(c)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsFaceup() and not c:IsDisabled() and c:IsType(TYPE_EFFECT)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for "negate the effects of a face-up card"
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NegateAnyFilter(c)
59c6f5280b 2024-07-01 顽雨沉风: if c:IsType(TYPE_TRAPMONSTER) then
59c6f5280b 2024-07-01 顽雨沉风: return c:IsFaceup()
59c6f5280b 2024-07-01 顽雨沉风: elseif c:IsType(TYPE_SPELL+TYPE_TRAP) then
59c6f5280b 2024-07-01 顽雨沉风: return c:IsFaceup() and not c:IsDisabled()
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return Auxiliary.NegateMonsterFilter(c)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --alias for compatibility
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.disfilter1=Auxiliary.NegateAnyFilter
59c6f5280b 2024-07-01 顽雨沉风: --condition of EVENT_BATTLE_DESTROYING
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.bdcon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return c:IsRelateToBattle()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of EVENT_BATTLE_DESTROYING + opponent monster
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.bdocon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return c:IsRelateToBattle() and c:IsStatus(STATUS_OPPO_BATTLE)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of EVENT_BATTLE_DESTROYING + to_grave
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.bdgcon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: local bc=c:GetBattleTarget()
59c6f5280b 2024-07-01 顽雨沉风: return c:IsRelateToBattle() and bc:IsLocation(LOCATION_GRAVE) and bc:IsType(TYPE_MONSTER)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of EVENT_BATTLE_DESTROYING + opponent monster + to_grave
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.bdogcon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: local bc=c:GetBattleTarget()
59c6f5280b 2024-07-01 顽雨沉风: return c:IsRelateToBattle() and c:IsStatus(STATUS_OPPO_BATTLE) and bc:IsLocation(LOCATION_GRAVE) and bc:IsType(TYPE_MONSTER)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of EVENT_DAMAGE_STEP_END + this monster is releate to battle
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.dsercon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return c:IsRelateToBattle() or c:IsStatus(STATUS_BATTLE_DESTROYED)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of EVENT_TO_GRAVE + destroyed by opponent
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.dogcon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return c:IsPreviousControler(tp) and c:IsReason(REASON_DESTROY) and rp==1-tp
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of EVENT_TO_GRAVE + destroyed by opponent + from field
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.dogfcon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return c:IsPreviousLocation(LOCATION_ONFIELD) and c:IsPreviousControler(tp)
59c6f5280b 2024-07-01 顽雨沉风: and c:IsReason(REASON_DESTROY) and rp==1-tp
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of "except the turn this card was sent to the Graveyard"
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.exccon(e)
59c6f5280b 2024-07-01 顽雨沉风: return Duel.GetTurnCount()~=e:GetHandler():GetTurnID() or e:GetHandler():IsReason(REASON_RETURN)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of checking battle phase availability
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.bpcon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: return Duel.IsAbleToEnterBP() or (Duel.GetCurrentPhase()>=PHASE_BATTLE_START and Duel.GetCurrentPhase()<=PHASE_BATTLE)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of free chain effects changing ATK/DEF
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.dscon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: return Duel.GetCurrentPhase()~=PHASE_DAMAGE or not Duel.IsDamageCalculated()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --flag effect for spell counter
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.chainreg(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: if e:GetHandler():GetFlagEffect(FLAG_ID_CHAINING)==0 then
59c6f5280b 2024-07-01 顽雨沉风: e:GetHandler():RegisterFlagEffect(FLAG_ID_CHAINING,RESET_EVENT+RESETS_STANDARD-RESET_TURN_SET+RESET_CHAIN,0,1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --default filter for EFFECT_CANNOT_BE_BATTLE_TARGET
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.imval1(e,c)
59c6f5280b 2024-07-01 顽雨沉风: return not c:IsImmuneToEffect(e)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for EFFECT_INDESTRUCTABLE_EFFECT + self
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.indsval(e,re,rp)
59c6f5280b 2024-07-01 顽雨沉风: return rp==e:GetHandlerPlayer()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for EFFECT_INDESTRUCTABLE_EFFECT + opponent
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.indoval(e,re,rp)
59c6f5280b 2024-07-01 顽雨沉风: return rp==1-e:GetHandlerPlayer()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for EFFECT_CANNOT_BE_EFFECT_TARGET + self
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.tgsval(e,re,rp)
59c6f5280b 2024-07-01 顽雨沉风: return rp==e:GetHandlerPlayer()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for EFFECT_CANNOT_BE_EFFECT_TARGET + opponent
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.tgoval(e,re,rp)
59c6f5280b 2024-07-01 顽雨沉风: return rp==1-e:GetHandlerPlayer()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for non-zero ATK
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.nzatk(c)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsFaceup() and c:GetAttack()>0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for non-zero DEF
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.nzdef(c)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsFaceup() and c:GetDefense()>0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --flag effect for summon/sp_summon turn
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.sumreg(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local tc=eg:GetFirst()
59c6f5280b 2024-07-01 顽雨沉风: local code=e:GetLabel()
59c6f5280b 2024-07-01 顽雨沉风: while tc do
59c6f5280b 2024-07-01 顽雨沉风: if tc:GetOriginalCode()==code then
59c6f5280b 2024-07-01 顽雨沉风: tc:RegisterFlagEffect(code,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END,0,1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: tc=eg:GetNext()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --for EVENT_BE_MATERIAL effect releated to the summoned monster
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.CreateMaterialReasonCardRelation(c,te)
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EVENT_BE_MATERIAL)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(Auxiliary.MaterialReasonCardReg)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetLabelObject(te)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.MaterialReasonCardReg(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: local te=e:GetLabelObject()
59c6f5280b 2024-07-01 顽雨沉风: c:GetReasonCard():CreateEffectRelation(te)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --the player tp has token on the field
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.tkfcon(e,tp)
59c6f5280b 2024-07-01 顽雨沉风: if tp==nil and e~=nil then tp=e:GetHandlerPlayer() end
59c6f5280b 2024-07-01 顽雨沉风: return Duel.IsExistingMatchingCard(Card.IsType,tp,LOCATION_ONFIELD,0,1,nil,TYPE_TOKEN)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --effects inflicting damage to tp
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.damcon1(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local e1=Duel.IsPlayerAffectedByEffect(tp,EFFECT_REVERSE_DAMAGE)
59c6f5280b 2024-07-01 顽雨沉风: local e2=Duel.IsPlayerAffectedByEffect(tp,EFFECT_REVERSE_RECOVER)
59c6f5280b 2024-07-01 顽雨沉风: local rd=e1 and not e2
59c6f5280b 2024-07-01 顽雨沉风: local rr=not e1 and e2
59c6f5280b 2024-07-01 顽雨沉风: local ex,cg,ct,cp,cv=Duel.GetOperationInfo(ev,CATEGORY_DAMAGE)
59c6f5280b 2024-07-01 顽雨沉风: if ex and (cp==tp or cp==PLAYER_ALL) and not rd and not Duel.IsPlayerAffectedByEffect(tp,EFFECT_NO_EFFECT_DAMAGE) then
59c6f5280b 2024-07-01 顽雨沉风: return true
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ex,cg,ct,cp,cv=Duel.GetOperationInfo(ev,CATEGORY_RECOVER)
59c6f5280b 2024-07-01 顽雨沉风: return ex and (cp==tp or cp==PLAYER_ALL) and rr and not Duel.IsPlayerAffectedByEffect(tp,EFFECT_NO_EFFECT_DAMAGE)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for the immune effect of qli monsters
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.qlifilter(e,te)
59c6f5280b 2024-07-01 顽雨沉风: if te:IsActiveType(TYPE_MONSTER) and te:IsActivated() then
59c6f5280b 2024-07-01 顽雨沉风: local lv=e:GetHandler():GetLevel()
59c6f5280b 2024-07-01 顽雨沉风: local ec=te:GetOwner()
59c6f5280b 2024-07-01 顽雨沉风: if ec:IsType(TYPE_LINK) then
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: elseif ec:IsType(TYPE_XYZ) then
59c6f5280b 2024-07-01 顽雨沉风: return ec:GetOriginalRank()<lv
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return ec:GetOriginalLevel()<lv
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --sp_summon condition for gladiator beast monsters
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.gbspcon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: local typ=c:GetSpecialSummonInfo(SUMMON_INFO_TYPE)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsSummonType(SUMMON_VALUE_GLADIATOR) or (typ&TYPE_MONSTER~=0 and c:IsSpecialSummonSetCard(0x19))
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --sp_summon condition for evolsaur monsters
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.evospcon(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: local typ=c:GetSpecialSummonInfo(SUMMON_INFO_TYPE)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsSummonType(SUMMON_VALUE_EVOLTILE) or (typ&TYPE_MONSTER~=0 and c:IsSpecialSummonSetCard(0x304e))
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --filter for necro_valley test
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NecroValleyFilter(f)
59c6f5280b 2024-07-01 顽雨沉风: return function(target,...)
59c6f5280b 2024-07-01 顽雨沉风: return (not f or f(target,...)) and not target:IsHasEffect(EFFECT_NECRO_VALLEY)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --Necrovalley test for effect with not certain target or not certain action
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NecroValleyNegateCheck(v)
59c6f5280b 2024-07-01 顽雨沉风: if not Duel.IsChainDisablable(0) then return false end
59c6f5280b 2024-07-01 顽雨沉风: local g=Group.CreateGroup()
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.GetValueType(v)=="Card" then g:AddCard(v) end
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.GetValueType(v)=="Group" then g:Merge(v) end
59c6f5280b 2024-07-01 顽雨沉风: if g:IsExists(Card.IsHasEffect,1,nil,EFFECT_NECRO_VALLEY) then
59c6f5280b 2024-07-01 顽雨沉风: Duel.NegateEffect(0)
59c6f5280b 2024-07-01 顽雨沉风: return true
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --Ursarctic common summon from hand effect
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.AddUrsarcticSpSummonEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_QUICK_O)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EVENT_FREE_CHAIN)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetRange(LOCATION_HAND)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetHintTiming(0,TIMINGS_CHECK_MONSTER+TIMING_MAIN_END)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCondition(Auxiliary.UrsarcticSpSummonCondition)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCost(Auxiliary.UrsarcticSpSummonCost)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTarget(Auxiliary.UrsarcticSpSummonTarget)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(Auxiliary.UrsarcticSpSummonOperation)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: return e1
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UrsarcticSpSummonCondition(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: return Duel.GetCurrentPhase()==PHASE_MAIN1 or Duel.GetCurrentPhase()==PHASE_MAIN2
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UrsarcticReleaseFilter(c)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsLevelAbove(7) and c:IsLocation(LOCATION_HAND)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UrsarcticExCostFilter(c,tp)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsAbleToRemoveAsCost() and (c:IsHasEffect(16471775,tp) or c:IsHasEffect(89264428,tp))
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UrsarcticSpSummonCost(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: local g1=Duel.GetReleaseGroup(tp,true):Filter(Auxiliary.UrsarcticReleaseFilter,e:GetHandler())
59c6f5280b 2024-07-01 顽雨沉风: local g2=Duel.GetMatchingGroup(Auxiliary.UrsarcticExCostFilter,tp,LOCATION_GRAVE,0,nil,tp)
59c6f5280b 2024-07-01 顽雨沉风: g1:Merge(g2)
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return g1:GetCount()>0 end
59c6f5280b 2024-07-01 顽雨沉风: Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE)
59c6f5280b 2024-07-01 顽雨沉风: local tc=g1:Select(tp,1,1,nil):GetFirst()
59c6f5280b 2024-07-01 顽雨沉风: local te=tc:IsHasEffect(16471775,tp) or tc:IsHasEffect(89264428,tp)
59c6f5280b 2024-07-01 顽雨沉风: if te then
59c6f5280b 2024-07-01 顽雨沉风: te:UseCountLimit(tp)
59c6f5280b 2024-07-01 顽雨沉风: Duel.Remove(tc,POS_FACEUP,REASON_EFFECT+REASON_REPLACE)
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: Duel.Release(tc,REASON_COST)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UrsarcticSpSummonTarget(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0
59c6f5280b 2024-07-01 顽雨沉风: and e:GetHandler():IsCanBeSpecialSummoned(e,0,tp,false,false) end
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,e:GetHandler(),1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UrsarcticSpSummonOperation(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: if c:IsRelateToEffect(e) then
59c6f5280b 2024-07-01 顽雨沉风: Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_FIELD)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTargetRange(1,0)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTarget(Auxiliary.UrsarcticSpSummonLimit)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetReset(RESET_PHASE+PHASE_END)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(e1,tp)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UrsarcticSpSummonLimit(e,c)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsLevel(0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --Drytron common summon effect
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.AddDrytronSpSummonEffect(c,func)
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_IGNITION)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetRange(LOCATION_HAND+LOCATION_GRAVE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCost(Auxiliary.DrytronSpSummonCost)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTarget(Auxiliary.DrytronSpSummonTarget)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(Auxiliary.DrytronSpSummonOperation(func))
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: Duel.AddCustomActivityCounter(97148796,ACTIVITY_SPSUMMON,Auxiliary.DrytronCounterFilter)
59c6f5280b 2024-07-01 顽雨沉风: return e1
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.DrytronCounterFilter(c)
59c6f5280b 2024-07-01 顽雨沉风: return not c:IsSummonableCard()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.DrytronCostFilter(c,tp)
59c6f5280b 2024-07-01 顽雨沉风: return (c:IsSetCard(0x154) or c:IsType(TYPE_RITUAL)) and c:IsType(TYPE_MONSTER) and Duel.GetMZoneCount(tp,c)>0
59c6f5280b 2024-07-01 顽雨沉风: and (c:IsControler(tp) or c:IsFaceup())
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.DrytronExtraCostFilter(c,tp)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsAbleToRemove() and c:IsHasEffect(89771220,tp)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.DrytronSpSummonCost(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: e:SetLabel(100)
59c6f5280b 2024-07-01 顽雨沉风: local g1=Duel.GetReleaseGroup(tp,true):Filter(Auxiliary.DrytronCostFilter,e:GetHandler(),tp)
59c6f5280b 2024-07-01 顽雨沉风: local g2=Duel.GetMatchingGroup(Auxiliary.DrytronExtraCostFilter,tp,LOCATION_GRAVE,0,nil,tp)
59c6f5280b 2024-07-01 顽雨沉风: g1:Merge(g2)
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return #g1>0 and Duel.GetCustomActivityCount(97148796,tp,ACTIVITY_SPSUMMON)==0 end
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(e:GetHandler())
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_FIELD)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_OATH)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTargetRange(1,0)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTarget(Auxiliary.DrytronSpSummonLimit)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetReset(RESET_PHASE+PHASE_END)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(e1,tp)
59c6f5280b 2024-07-01 顽雨沉风: --cant special summon summonable card check
59c6f5280b 2024-07-01 顽雨沉风: local e2=Effect.CreateEffect(e:GetHandler())
59c6f5280b 2024-07-01 顽雨沉风: e2:SetType(EFFECT_TYPE_FIELD)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetCode(97148796)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET+EFFECT_FLAG_OATH)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetTargetRange(1,0)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetReset(RESET_PHASE+PHASE_END)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(e2,tp)
59c6f5280b 2024-07-01 顽雨沉风: Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE)
59c6f5280b 2024-07-01 顽雨沉风: local rg=g1:Select(tp,1,1,nil)
59c6f5280b 2024-07-01 顽雨沉风: local tc=rg:GetFirst()
59c6f5280b 2024-07-01 顽雨沉风: local te=tc:IsHasEffect(89771220,tp)
59c6f5280b 2024-07-01 顽雨沉风: if te then
59c6f5280b 2024-07-01 顽雨沉风: te:UseCountLimit(tp)
59c6f5280b 2024-07-01 顽雨沉风: Duel.Remove(tc,POS_FACEUP,REASON_EFFECT+REASON_REPLACE)
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.UseExtraReleaseCount(rg,tp)
59c6f5280b 2024-07-01 顽雨沉风: Duel.Release(tc,REASON_COST)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.DrytronSpSummonLimit(e,c,sump,sumtype,sumpos,targetp,se)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsSummonableCard()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.DrytronSpSummonTarget(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: local res=e:GetLabel()==100 or Duel.GetLocationCount(tp,LOCATION_MZONE)>0
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then
59c6f5280b 2024-07-01 顽雨沉风: e:SetLabel(0)
59c6f5280b 2024-07-01 顽雨沉风: return res and e:GetHandler():IsCanBeSpecialSummoned(e,0,tp,false,true,POS_FACEUP_DEFENSE)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: e:SetLabel(0)
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,e:GetHandler(),1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.DrytronSpSummonOperation(func)
59c6f5280b 2024-07-01 顽雨沉风: return function(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: if not c:IsRelateToEffect(e) then return end
59c6f5280b 2024-07-01 顽雨沉风: if Duel.SpecialSummon(c,0,tp,tp,false,true,POS_FACEUP_DEFENSE)~=0 then
59c6f5280b 2024-07-01 顽雨沉风: c:CompleteProcedure()
59c6f5280b 2024-07-01 顽雨沉风: func(e,tp)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---The `nolimit` parameter for Special Summon effects of Drytron cards
59c6f5280b 2024-07-01 顽雨沉风: ---@param c Card
59c6f5280b 2024-07-01 顽雨沉风: ---@return boolean
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.DrytronSpSummonType(c)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsType(TYPE_SPSUMMON)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---The `nolimit` parameter for Special Summon effects of Dragon, Xyz monsters where Soul Drain Dragon is available
59c6f5280b 2024-07-01 顽雨沉风: ---(Soul Drain Dragon, Level 8/LIGHT/Dragon/4000/0)
59c6f5280b 2024-07-01 顽雨沉风: ---@param c Card
59c6f5280b 2024-07-01 顽雨沉风: ---@return boolean
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.DragonXyzSpSummonType(c)
59c6f5280b 2024-07-01 顽雨沉风: return c:GetOriginalCode()==55735315
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---The `nolimit` parameter for Special Summon effects of Triamid cards
59c6f5280b 2024-07-01 顽雨沉风: ---@param c Card
59c6f5280b 2024-07-01 顽雨沉风: ---@return boolean
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.TriamidSpSummonType(c)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsType(TYPE_SPSUMMON)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --additional destroy effect for the Labrynth field
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.LabrynthDestroyOp(e,tp,res)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: local chk=not c:IsStatus(STATUS_ACT_FROM_HAND) and c:IsSetCard(0x117e) and c:GetType()==TYPE_TRAP and e:IsHasType(EFFECT_TYPE_ACTIVATE)
59c6f5280b 2024-07-01 顽雨沉风: local exc=nil
59c6f5280b 2024-07-01 顽雨沉风: if c:IsStatus(STATUS_LEAVE_CONFIRMED) then exc=c end
59c6f5280b 2024-07-01 顽雨沉风: local te=Duel.IsPlayerAffectedByEffect(tp,33407125)
59c6f5280b 2024-07-01 顽雨沉风: if chk and te
59c6f5280b 2024-07-01 顽雨沉风: and Duel.IsExistingMatchingCard(nil,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,1,exc)
59c6f5280b 2024-07-01 顽雨沉风: and Duel.SelectYesNo(tp,Auxiliary.Stringid(33407125,0)) then
59c6f5280b 2024-07-01 顽雨沉风: if res>0 then Duel.BreakEffect() end
59c6f5280b 2024-07-01 顽雨沉风: Duel.Hint(HINT_CARD,0,33407125)
59c6f5280b 2024-07-01 顽雨沉风: Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_DESTROY)
59c6f5280b 2024-07-01 顽雨沉风: local dg=Duel.SelectMatchingCard(tp,nil,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,1,1,exc)
59c6f5280b 2024-07-01 顽雨沉风: Duel.HintSelection(dg)
59c6f5280b 2024-07-01 顽雨沉风: Duel.Destroy(dg,REASON_EFFECT)
59c6f5280b 2024-07-01 顽雨沉风: te:UseCountLimit(tp)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --shortcut for Gizmek cards
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.AtkEqualsDef(c)
59c6f5280b 2024-07-01 顽雨沉风: if not c:IsType(TYPE_MONSTER) or c:IsType(TYPE_LINK) then return false end
59c6f5280b 2024-07-01 顽雨沉风: if c:GetAttack()~=c:GetDefense() then return false end
59c6f5280b 2024-07-01 顽雨沉风: return c:IsLocation(LOCATION_MZONE) or c:GetTextAttack()>=0 and c:GetTextDefense()>=0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --shortcut for self-banish costs
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.bfgcost(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return e:GetHandler():IsAbleToRemoveAsCost() end
59c6f5280b 2024-07-01 顽雨沉风: Duel.Remove(e:GetHandler(),POS_FACEUP,REASON_COST)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --check for cards with different names
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.dncheck(g)
59c6f5280b 2024-07-01 顽雨沉风: return g:GetClassCount(Card.GetCode)==#g
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --check for cards with different levels
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.dlvcheck(g)
59c6f5280b 2024-07-01 顽雨沉风: return g:GetClassCount(Card.GetLevel)==#g
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --check for cards with different ranks
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.drkcheck(g)
59c6f5280b 2024-07-01 顽雨沉风: return g:GetClassCount(Card.GetRank)==#g
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --check for cards with different links
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.dlkcheck(g)
59c6f5280b 2024-07-01 顽雨沉风: return g:GetClassCount(Card.GetLink)==#g
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --check for cards with different attributes
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.dabcheck(g)
59c6f5280b 2024-07-01 顽雨沉风: return g:GetClassCount(Card.GetAttribute)==#g
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --check for cards with different races
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.drccheck(g)
59c6f5280b 2024-07-01 顽雨沉风: return g:GetClassCount(Card.GetRace)==#g
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --check for group with 2 cards, each card match f with a1/a2 as argument
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.gfcheck(g,f,a1,a2)
59c6f5280b 2024-07-01 顽雨沉风: if #g~=2 then return false end
59c6f5280b 2024-07-01 顽雨沉风: local c1=g:GetFirst()
59c6f5280b 2024-07-01 顽雨沉风: local c2=g:GetNext()
59c6f5280b 2024-07-01 顽雨沉风: return f(c1,a1) and f(c2,a2) or f(c2,a1) and f(c1,a2)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --check for group with 2 cards, each card match f1 with a1, f2 with a2 as argument
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.gffcheck(g,f1,a1,f2,a2)
59c6f5280b 2024-07-01 顽雨沉风: if #g~=2 then return false end
59c6f5280b 2024-07-01 顽雨沉风: local c1=g:GetFirst()
59c6f5280b 2024-07-01 顽雨沉风: local c2=g:GetNext()
59c6f5280b 2024-07-01 顽雨沉风: return f1(c1,a1) and f2(c2,a2) or f1(c2,a1) and f2(c1,a2)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.mzctcheck(g,tp)
59c6f5280b 2024-07-01 顽雨沉风: return Duel.GetMZoneCount(tp,g)>0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---Check if there is space in mzone after tp releases g by reason
59c6f5280b 2024-07-01 顽雨沉风: ---@param g Group
59c6f5280b 2024-07-01 顽雨沉风: ---@param tp integer
59c6f5280b 2024-07-01 顽雨沉风: ---@param reason? integer
59c6f5280b 2024-07-01 顽雨沉风: ---@return boolean
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.mzctcheckrel(g,tp,reason)
59c6f5280b 2024-07-01 顽雨沉风: reason=reason or REASON_COST
59c6f5280b 2024-07-01 顽雨沉风: return Duel.GetMZoneCount(tp,g)>0 and Duel.CheckReleaseGroupEx(tp,Auxiliary.IsInGroup,#g,reason,false,nil,g)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --used for "except this card"
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.ExceptThisCard(e)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: if c:IsRelateToChain() then return c else return nil end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --used for multi-linked zone(zone linked by two or more link monsters)
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.GetMultiLinkedZone(tp)
59c6f5280b 2024-07-01 顽雨沉风: local f=function(c)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsFaceup() and c:IsType(TYPE_LINK)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: local lg=Duel.GetMatchingGroup(f,tp,LOCATION_MZONE,LOCATION_MZONE,nil)
59c6f5280b 2024-07-01 顽雨沉风: local multi_linked_zone=0
59c6f5280b 2024-07-01 顽雨沉风: local single_linked_zone=0
59c6f5280b 2024-07-01 顽雨沉风: for tc in Auxiliary.Next(lg) do
59c6f5280b 2024-07-01 顽雨沉风: local zone=tc:GetLinkedZone(tp)&0x7f
59c6f5280b 2024-07-01 顽雨沉风: multi_linked_zone=single_linked_zone&zone|multi_linked_zone
59c6f5280b 2024-07-01 顽雨沉风: single_linked_zone=single_linked_zone~zone
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return multi_linked_zone
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.SubGroupCaptured=nil
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.CheckGroupRecursive(c,sg,g,f,min,max,ext_params)
59c6f5280b 2024-07-01 顽雨沉风: sg:AddCard(c)
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.GCheckAdditional and not Auxiliary.GCheckAdditional(sg,c,g) then
59c6f5280b 2024-07-01 顽雨沉风: sg:RemoveCard(c)
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: local res=(#sg>=min and #sg<=max and f(sg,table.unpack(ext_params)))
59c6f5280b 2024-07-01 顽雨沉风: or (#sg<max and g:IsExists(Auxiliary.CheckGroupRecursive,1,sg,sg,g,f,min,max,ext_params))
59c6f5280b 2024-07-01 顽雨沉风: sg:RemoveCard(c)
59c6f5280b 2024-07-01 顽雨沉风: return res
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.CheckGroupRecursiveCapture(c,sg,g,f,min,max,ext_params)
59c6f5280b 2024-07-01 顽雨沉风: sg:AddCard(c)
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.GCheckAdditional and not Auxiliary.GCheckAdditional(sg,c,g) then
59c6f5280b 2024-07-01 顽雨沉风: sg:RemoveCard(c)
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: local res=#sg>=min and #sg<=max and f(sg,table.unpack(ext_params))
59c6f5280b 2024-07-01 顽雨沉风: if res then
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.SubGroupCaptured:Clear()
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.SubGroupCaptured:Merge(sg)
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: res=#sg<max and g:IsExists(Auxiliary.CheckGroupRecursiveCapture,1,sg,sg,g,f,min,max,ext_params)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: sg:RemoveCard(c)
59c6f5280b 2024-07-01 顽雨沉风: return res
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---
59c6f5280b 2024-07-01 顽雨沉风: ---@param g Group
59c6f5280b 2024-07-01 顽雨沉风: ---@param f function
59c6f5280b 2024-07-01 顽雨沉风: ---@param min? integer
59c6f5280b 2024-07-01 顽雨沉风: ---@param max? integer
59c6f5280b 2024-07-01 顽雨沉风: ---@param ... any
59c6f5280b 2024-07-01 顽雨沉风: ---@return boolean
59c6f5280b 2024-07-01 顽雨沉风: function Group.CheckSubGroup(g,f,min,max,...)
59c6f5280b 2024-07-01 顽雨沉风: min=min or 1
59c6f5280b 2024-07-01 顽雨沉风: max=max or #g
59c6f5280b 2024-07-01 顽雨沉风: if min>max then return false end
59c6f5280b 2024-07-01 顽雨沉风: local ext_params={...}
59c6f5280b 2024-07-01 顽雨沉风: local sg=Duel.GrabSelectedCard()
59c6f5280b 2024-07-01 顽雨沉风: if #sg>max or #(g+sg)<min then return false end
59c6f5280b 2024-07-01 顽雨沉风: if #sg==max and (not f(sg,...) or Auxiliary.GCheckAdditional and not Auxiliary.GCheckAdditional(sg,nil,g)) then return false end
59c6f5280b 2024-07-01 顽雨沉风: if #sg>=min and #sg<=max and f(sg,...) and (not Auxiliary.GCheckAdditional or Auxiliary.GCheckAdditional(sg,nil,g)) then return true end
59c6f5280b 2024-07-01 顽雨沉风: local eg=g:Clone()
59c6f5280b 2024-07-01 顽雨沉风: for c in Auxiliary.Next(g-sg) do
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.CheckGroupRecursive(c,sg,eg,f,min,max,ext_params) then return true end
59c6f5280b 2024-07-01 顽雨沉风: eg:RemoveCard(c)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---
59c6f5280b 2024-07-01 顽雨沉风: ---@param g Group
59c6f5280b 2024-07-01 顽雨沉风: ---@param tp integer
59c6f5280b 2024-07-01 顽雨沉风: ---@param f function
59c6f5280b 2024-07-01 顽雨沉风: ---@param cancelable boolean
59c6f5280b 2024-07-01 顽雨沉风: ---@param min? integer
59c6f5280b 2024-07-01 顽雨沉风: ---@param max? integer
59c6f5280b 2024-07-01 顽雨沉风: ---@param ... any
59c6f5280b 2024-07-01 顽雨沉风: ---@return Group
59c6f5280b 2024-07-01 顽雨沉风: function Group.SelectSubGroup(g,tp,f,cancelable,min,max,...)
59c6f5280b 2024-07-01 顽雨沉风: Auxiliary.SubGroupCaptured=Group.CreateGroup()
59c6f5280b 2024-07-01 顽雨沉风: min=min or 1
59c6f5280b 2024-07-01 顽雨沉风: max=max or #g
59c6f5280b 2024-07-01 顽雨沉风: local ext_params={...}
59c6f5280b 2024-07-01 顽雨沉风: local sg=Group.CreateGroup()
59c6f5280b 2024-07-01 顽雨沉风: local fg=Duel.GrabSelectedCard()
59c6f5280b 2024-07-01 顽雨沉风: if #fg>max or min>max or #(g+fg)<min then return nil end
59c6f5280b 2024-07-01 顽雨沉风: for tc in Auxiliary.Next(fg) do
59c6f5280b 2024-07-01 顽雨沉风: fg:SelectUnselect(sg,tp,false,false,min,max)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: sg:Merge(fg)
59c6f5280b 2024-07-01 顽雨沉风: local finish=(#sg>=min and #sg<=max and f(sg,...))
59c6f5280b 2024-07-01 顽雨沉风: while #sg<max do
59c6f5280b 2024-07-01 顽雨沉风: local cg=Group.CreateGroup()
59c6f5280b 2024-07-01 顽雨沉风: local eg=g:Clone()
59c6f5280b 2024-07-01 顽雨沉风: for c in Auxiliary.Next(g-sg) do
59c6f5280b 2024-07-01 顽雨沉风: if not cg:IsContains(c) then
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.CheckGroupRecursiveCapture(c,sg,eg,f,min,max,ext_params) then
59c6f5280b 2024-07-01 顽雨沉风: cg:Merge(Auxiliary.SubGroupCaptured)
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: eg:RemoveCard(c)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: cg:Sub(sg)
59c6f5280b 2024-07-01 顽雨沉风: finish=(#sg>=min and #sg<=max and f(sg,...))
59c6f5280b 2024-07-01 顽雨沉风: if #cg==0 then break end
59c6f5280b 2024-07-01 顽雨沉风: local cancel=not finish and cancelable
59c6f5280b 2024-07-01 顽雨沉风: local tc=cg:SelectUnselect(sg,tp,finish,cancel,min,max)
59c6f5280b 2024-07-01 顽雨沉风: if not tc then break end
59c6f5280b 2024-07-01 顽雨沉风: if not fg:IsContains(tc) then
59c6f5280b 2024-07-01 顽雨沉风: if not sg:IsContains(tc) then
59c6f5280b 2024-07-01 顽雨沉风: sg:AddCard(tc)
59c6f5280b 2024-07-01 顽雨沉风: if #sg==max then finish=true end
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: sg:RemoveCard(tc)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: elseif cancelable then
59c6f5280b 2024-07-01 顽雨沉风: return nil
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: if finish then
59c6f5280b 2024-07-01 顽雨沉风: return sg
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return nil
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---Create a table of filter functions
59c6f5280b 2024-07-01 顽雨沉风: ---@param f function
59c6f5280b 2024-07-01 顽雨沉风: ---@param list table
59c6f5280b 2024-07-01 顽雨沉风: ---@return table
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.CreateChecks(f,list)
59c6f5280b 2024-07-01 顽雨沉风: local checks={}
59c6f5280b 2024-07-01 顽雨沉风: for i=1,#list do
59c6f5280b 2024-07-01 顽雨沉风: checks[i]=function(c) return f(c,list[i]) end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return checks
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.CheckGroupRecursiveEach(c,sg,g,f,checks,ext_params)
59c6f5280b 2024-07-01 顽雨沉风: if not checks[1+#sg](c) then
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: sg:AddCard(c)
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.GCheckAdditional and not Auxiliary.GCheckAdditional(sg,c,g) then
59c6f5280b 2024-07-01 顽雨沉风: sg:RemoveCard(c)
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: local res
59c6f5280b 2024-07-01 顽雨沉风: if #sg==#checks then
59c6f5280b 2024-07-01 顽雨沉风: res=f(sg,table.unpack(ext_params))
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: res=g:IsExists(Auxiliary.CheckGroupRecursiveEach,1,sg,sg,g,f,checks,ext_params)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: sg:RemoveCard(c)
59c6f5280b 2024-07-01 顽雨沉风: return res
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---
59c6f5280b 2024-07-01 顽雨沉风: ---@param g Group
59c6f5280b 2024-07-01 顽雨沉风: ---@param checks table
59c6f5280b 2024-07-01 顽雨沉风: ---@param f? function
59c6f5280b 2024-07-01 顽雨沉风: ---@param ... any
59c6f5280b 2024-07-01 顽雨沉风: ---@return boolean
59c6f5280b 2024-07-01 顽雨沉风: function Group.CheckSubGroupEach(g,checks,f,...)
59c6f5280b 2024-07-01 顽雨沉风: if f==nil then f=Auxiliary.TRUE end
59c6f5280b 2024-07-01 顽雨沉风: if #g<#checks then return false end
59c6f5280b 2024-07-01 顽雨沉风: local ext_params={...}
59c6f5280b 2024-07-01 顽雨沉风: local sg=Group.CreateGroup()
59c6f5280b 2024-07-01 顽雨沉风: return g:IsExists(Auxiliary.CheckGroupRecursiveEach,1,sg,sg,g,f,checks,ext_params)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---
59c6f5280b 2024-07-01 顽雨沉风: ---@param g Group
59c6f5280b 2024-07-01 顽雨沉风: ---@param tp integer
59c6f5280b 2024-07-01 顽雨沉风: ---@param checks table
59c6f5280b 2024-07-01 顽雨沉风: ---@param cancelable? boolean
59c6f5280b 2024-07-01 顽雨沉风: ---@param f? function
59c6f5280b 2024-07-01 顽雨沉风: ---@param ... any
59c6f5280b 2024-07-01 顽雨沉风: ---@return Group
59c6f5280b 2024-07-01 顽雨沉风: function Group.SelectSubGroupEach(g,tp,checks,cancelable,f,...)
59c6f5280b 2024-07-01 顽雨沉风: if cancelable==nil then cancelable=false end
59c6f5280b 2024-07-01 顽雨沉风: if f==nil then f=Auxiliary.TRUE end
59c6f5280b 2024-07-01 顽雨沉风: local ct=#checks
59c6f5280b 2024-07-01 顽雨沉风: local ext_params={...}
59c6f5280b 2024-07-01 顽雨沉风: local sg=Group.CreateGroup()
59c6f5280b 2024-07-01 顽雨沉风: local finish=false
59c6f5280b 2024-07-01 顽雨沉风: while #sg<ct do
59c6f5280b 2024-07-01 顽雨沉风: local cg=g:Filter(Auxiliary.CheckGroupRecursiveEach,sg,sg,g,f,checks,ext_params)
59c6f5280b 2024-07-01 顽雨沉风: if #cg==0 then break end
59c6f5280b 2024-07-01 顽雨沉风: local tc=cg:SelectUnselect(sg,tp,false,cancelable,ct,ct)
59c6f5280b 2024-07-01 顽雨沉风: if not tc then break end
59c6f5280b 2024-07-01 顽雨沉风: if not sg:IsContains(tc) then
59c6f5280b 2024-07-01 顽雨沉风: sg:AddCard(tc)
59c6f5280b 2024-07-01 顽雨沉风: if #sg==ct then finish=true end
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: sg:Clear()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: if finish then
59c6f5280b 2024-07-01 顽雨沉风: return sg
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return nil
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --for effects that player usually select card from field, avoid showing panel
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SelectCardFromFieldFirst(tp,f,player,s,o,min,max,ex,...)
59c6f5280b 2024-07-01 顽雨沉风: local ext_params={...}
59c6f5280b 2024-07-01 顽雨沉风: local g=Duel.GetMatchingGroup(f,player,s,o,ex,table.unpack(ext_params))
59c6f5280b 2024-07-01 顽雨沉风: local fg=g:Filter(Card.IsOnField,nil)
59c6f5280b 2024-07-01 顽雨沉风: g:Sub(fg)
59c6f5280b 2024-07-01 顽雨沉风: if #fg>=min and #g>0 then
59c6f5280b 2024-07-01 顽雨沉风: local last_hint=Duel.GetLastSelectHint(tp)
59c6f5280b 2024-07-01 顽雨沉风: Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FIELD_FIRST)
59c6f5280b 2024-07-01 顽雨沉风: local sg=fg:CancelableSelect(tp,min,max,nil)
59c6f5280b 2024-07-01 顽雨沉风: if sg then
59c6f5280b 2024-07-01 顽雨沉风: return sg
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: Duel.Hint(HINT_SELECTMSG,tp,last_hint)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return Duel.SelectMatchingCard(tp,f,player,s,o,min,max,ex,table.unpack(ext_params))
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SelectTargetFromFieldFirst(tp,f,player,s,o,min,max,ex,...)
59c6f5280b 2024-07-01 顽雨沉风: local ext_params={...}
59c6f5280b 2024-07-01 顽雨沉风: local g=Duel.GetMatchingGroup(f,player,s,o,ex,table.unpack(ext_params)):Filter(Card.IsCanBeEffectTarget,nil)
59c6f5280b 2024-07-01 顽雨沉风: local fg=g:Filter(Card.IsOnField,nil)
59c6f5280b 2024-07-01 顽雨沉风: g:Sub(fg)
59c6f5280b 2024-07-01 顽雨沉风: if #fg>=min and #g>0 then
59c6f5280b 2024-07-01 顽雨沉风: local last_hint=Duel.GetLastSelectHint(tp)
59c6f5280b 2024-07-01 顽雨沉风: Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FIELD_FIRST)
59c6f5280b 2024-07-01 顽雨沉风: local sg=fg:CancelableSelect(tp,min,max,nil)
59c6f5280b 2024-07-01 顽雨沉风: if sg then
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetTargetCard(sg)
59c6f5280b 2024-07-01 顽雨沉风: return sg
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: Duel.Hint(HINT_SELECTMSG,tp,last_hint)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return Duel.SelectTarget(tp,f,player,s,o,min,max,ex,table.unpack(ext_params))
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of "negate activation and banish"
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.nbcon(tp,re)
59c6f5280b 2024-07-01 顽雨沉风: local rc=re:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return Duel.IsPlayerCanRemove(tp)
59c6f5280b 2024-07-01 顽雨沉风: and (not rc:IsRelateToEffect(re) or rc:IsAbleToRemove())
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.nbtg(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return Auxiliary.nbcon(tp,re) end
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_NEGATE,eg,1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: if re:GetHandler():IsRelateToEffect(re) then
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_REMOVE,eg,1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: if re:GetActivateLocation()==LOCATION_GRAVE then
59c6f5280b 2024-07-01 顽雨沉风: e:SetCategory(e:GetCategory()|CATEGORY_GRAVE_ACTION)
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: e:SetCategory(e:GetCategory()&~CATEGORY_GRAVE_ACTION)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --condition of "negate activation and return to deck"
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.ndcon(tp,re)
59c6f5280b 2024-07-01 顽雨沉风: local rc=re:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return re:IsHasType(EFFECT_TYPE_ACTIVATE) or not rc:IsRelateToEffect(re) or rc:IsAbleToDeck()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --return the global index of the zone in (p,loc,seq)
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SequenceToGlobal(p,loc,seq)
59c6f5280b 2024-07-01 顽雨沉风: if p~=0 and p~=1 then
59c6f5280b 2024-07-01 顽雨沉风: return 0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: if loc==LOCATION_MZONE then
59c6f5280b 2024-07-01 顽雨沉风: if seq<=6 then
59c6f5280b 2024-07-01 顽雨沉风: return 0x0001<<(16*p+seq)
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return 0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: elseif loc == LOCATION_SZONE then
59c6f5280b 2024-07-01 顽雨沉风: if seq<=4 then
59c6f5280b 2024-07-01 顽雨沉风: return 0x0100<<(16*p+seq)
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return 0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return 0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --use the count limit of Lair of Darkness if the tributes are not selected by Duel.SelectReleaseGroup
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.UseExtraReleaseCount(g,tp)
59c6f5280b 2024-07-01 顽雨沉风: local eg=g:Filter(Auxiliary.ExtraReleaseFilter,nil,tp)
59c6f5280b 2024-07-01 顽雨沉风: for ec in Auxiliary.Next(eg) do
59c6f5280b 2024-07-01 顽雨沉风: local te=ec:IsHasEffect(EFFECT_EXTRA_RELEASE_NONSUM,tp)
59c6f5280b 2024-07-01 顽雨沉风: if te then te:UseCountLimit(tp) end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.ExtraReleaseFilter(c,tp)
59c6f5280b 2024-07-01 顽雨沉风: return c:IsControler(1-tp) and c:IsHasEffect(EFFECT_EXTRA_RELEASE_NONSUM,tp)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.GetCappedLevel(c)
59c6f5280b 2024-07-01 顽雨沉风: local lv=c:GetLevel()
59c6f5280b 2024-07-01 顽雨沉风: if lv>MAX_PARAMETER then
59c6f5280b 2024-07-01 顽雨沉风: return MAX_PARAMETER
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return lv
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.GetCappedAttack(c)
59c6f5280b 2024-07-01 顽雨沉风: local x=c:GetAttack()
59c6f5280b 2024-07-01 顽雨沉风: if x>MAX_PARAMETER then
59c6f5280b 2024-07-01 顽雨沉风: return MAX_PARAMETER
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: return x
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --when this card is sent to grave, record the reason effect
59c6f5280b 2024-07-01 顽雨沉风: --to check whether the reason effect do something simultaneously
59c6f5280b 2024-07-01 顽雨沉风: --so the "while this card is in your GY" condition isn't met
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.AddThisCardInGraveAlreadyCheck(c)
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EVENT_TO_GRAVE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCondition(Auxiliary.ThisCardInGraveAlreadyCheckReg)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: return e1
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.ThisCardInGraveAlreadyCheckReg(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: --condition of continous effect will be checked before other effects
59c6f5280b 2024-07-01 顽雨沉风: if re==nil then return false end
59c6f5280b 2024-07-01 顽雨沉风: if e:GetLabelObject()~=nil then return false end
59c6f5280b 2024-07-01 顽雨沉风: if (r&REASON_EFFECT)>0 then
59c6f5280b 2024-07-01 顽雨沉风: e:SetLabelObject(re)
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(e:GetHandler())
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EVENT_CHAIN_END)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(Auxiliary.ThisCardInGraveAlreadyReset1)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetLabelObject(e)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(e1,tp)
59c6f5280b 2024-07-01 顽雨沉风: local e2=e1:Clone()
59c6f5280b 2024-07-01 顽雨沉风: e2:SetCode(EVENT_BREAK_EFFECT)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetOperation(Auxiliary.ThisCardInGraveAlreadyReset2)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetReset(RESET_CHAIN)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetLabelObject(e1)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(e2,tp)
59c6f5280b 2024-07-01 顽雨沉风: elseif (r&REASON_MATERIAL)>0 or not re:IsActivated() and (r&REASON_COST)>0 then
59c6f5280b 2024-07-01 顽雨沉风: e:SetLabelObject(re)
59c6f5280b 2024-07-01 顽雨沉风: local reset_event=EVENT_SPSUMMON
59c6f5280b 2024-07-01 顽雨沉风: if re:GetCode()~=EFFECT_SPSUMMON_PROC then reset_event=EVENT_SUMMON end
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(e:GetHandler())
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(reset_event)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(Auxiliary.ThisCardInGraveAlreadyReset1)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetLabelObject(e)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(e1,tp)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return false
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.ThisCardInGraveAlreadyReset1(e)
59c6f5280b 2024-07-01 顽雨沉风: --this will run after EVENT_SPSUMMON_SUCCESS
59c6f5280b 2024-07-01 顽雨沉风: e:GetLabelObject():SetLabelObject(nil)
59c6f5280b 2024-07-01 顽雨沉风: e:Reset()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.ThisCardInGraveAlreadyReset2(e)
59c6f5280b 2024-07-01 顽雨沉风: local e1=e:GetLabelObject()
59c6f5280b 2024-07-01 顽雨沉风: e1:GetLabelObject():SetLabelObject(nil)
59c6f5280b 2024-07-01 顽雨沉风: e1:Reset()
59c6f5280b 2024-07-01 顽雨沉风: e:Reset()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --Player p place g on the top of Deck in any order
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.PlaceCardsOnDeckTop(p,g,reason)
59c6f5280b 2024-07-01 顽雨沉风: if reason==nil then reason=REASON_EFFECT end
59c6f5280b 2024-07-01 顽雨沉风: Duel.SendtoDeck(g,nil,SEQ_DECKTOP,reason)
59c6f5280b 2024-07-01 顽雨沉风: local rg=Duel.GetOperatedGroup()
59c6f5280b 2024-07-01 顽雨沉风: local og=rg:Filter(Card.IsLocation,nil,LOCATION_DECK)
59c6f5280b 2024-07-01 顽雨沉风: local ct1=og:FilterCount(Card.IsControler,nil,p)
59c6f5280b 2024-07-01 顽雨沉风: local ct2=og:FilterCount(Card.IsControler,nil,1-p)
59c6f5280b 2024-07-01 顽雨沉风: if ct1>1 then
59c6f5280b 2024-07-01 顽雨沉风: Duel.SortDecktop(p,p,ct1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: if ct2>1 then
59c6f5280b 2024-07-01 顽雨沉风: Duel.SortDecktop(p,1-p,ct2)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return #rg
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --Player p place g on the bottom of Deck in any order
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.PlaceCardsOnDeckBottom(p,g,reason)
59c6f5280b 2024-07-01 顽雨沉风: if reason==nil then reason=REASON_EFFECT end
59c6f5280b 2024-07-01 顽雨沉风: Duel.SendtoDeck(g,nil,SEQ_DECKTOP,reason)
59c6f5280b 2024-07-01 顽雨沉风: local rg=Duel.GetOperatedGroup()
59c6f5280b 2024-07-01 顽雨沉风: local og=rg:Filter(Card.IsLocation,nil,LOCATION_DECK)
59c6f5280b 2024-07-01 顽雨沉风: local ct1=og:FilterCount(Card.IsControler,nil,p)
59c6f5280b 2024-07-01 顽雨沉风: local ct2=og:FilterCount(Card.IsControler,nil,1-p)
59c6f5280b 2024-07-01 顽雨沉风: if ct1>0 then
59c6f5280b 2024-07-01 顽雨沉风: if ct1>1 then
59c6f5280b 2024-07-01 顽雨沉风: Duel.SortDecktop(p,p,ct1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: for i=1,ct1 do
59c6f5280b 2024-07-01 顽雨沉风: local tc=Duel.GetDecktopGroup(p,1):GetFirst()
59c6f5280b 2024-07-01 顽雨沉风: Duel.MoveSequence(tc,SEQ_DECKBOTTOM)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: if ct2>0 then
59c6f5280b 2024-07-01 顽雨沉风: if ct2>1 then
59c6f5280b 2024-07-01 顽雨沉风: Duel.SortDecktop(p,1-p,ct2)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: for i=1,ct2 do
59c6f5280b 2024-07-01 顽雨沉风: local tc=Duel.GetDecktopGroup(1-p,1):GetFirst()
59c6f5280b 2024-07-01 顽雨沉风: Duel.MoveSequence(tc,SEQ_DECKBOTTOM)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return #rg
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --The event is triggered multiple times in a chain
59c6f5280b 2024-07-01 顽雨沉风: --but only 1 event with EVENT_CUSTOM+code will be triggered at EVENT_CHAIN_END, or immediately if not in chain
59c6f5280b 2024-07-01 顽雨沉风: --NOTE: re,r,rp,ep,ev of that custom event ARE NOT releated to the real event that trigger this custom event
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.RegisterMergedDelayedEvent(c,code,event,g)
59c6f5280b 2024-07-01 顽雨沉风: local mt=getmetatable(c)
59c6f5280b 2024-07-01 顽雨沉风: if mt[event]==true then return end
59c6f5280b 2024-07-01 顽雨沉风: mt[event]=true
59c6f5280b 2024-07-01 顽雨沉风: if not g then g=Group.CreateGroup() end
59c6f5280b 2024-07-01 顽雨沉风: g:KeepAlive()
59c6f5280b 2024-07-01 顽雨沉风: local ge1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: ge1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
59c6f5280b 2024-07-01 顽雨沉风: ge1:SetCode(event)
59c6f5280b 2024-07-01 顽雨沉风: ge1:SetLabel(code)
59c6f5280b 2024-07-01 顽雨沉风: ge1:SetLabelObject(g)
59c6f5280b 2024-07-01 顽雨沉风: ge1:SetOperation(Auxiliary.MergedDelayEventCheck1)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(ge1,0)
59c6f5280b 2024-07-01 顽雨沉风: local ge2=ge1:Clone()
59c6f5280b 2024-07-01 顽雨沉风: ge2:SetCode(EVENT_CHAIN_END)
59c6f5280b 2024-07-01 顽雨沉风: ge2:SetOperation(Auxiliary.MergedDelayEventCheck2)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(ge2,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.MergedDelayEventCheck1(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local g=e:GetLabelObject()
59c6f5280b 2024-07-01 顽雨沉风: g:Merge(eg)
59c6f5280b 2024-07-01 顽雨沉风: if Duel.GetCurrentChain()==0 and not Duel.CheckEvent(EVENT_CHAIN_END) then
59c6f5280b 2024-07-01 顽雨沉风: local _eg=g:Clone()
59c6f5280b 2024-07-01 顽雨沉风: Duel.RaiseEvent(_eg,EVENT_CUSTOM+e:GetLabel(),re,r,rp,ep,ev)
59c6f5280b 2024-07-01 顽雨沉风: g:Clear()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.MergedDelayEventCheck2(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local g=e:GetLabelObject()
59c6f5280b 2024-07-01 顽雨沉风: if #g>0 then
59c6f5280b 2024-07-01 顽雨沉风: local _eg=g:Clone()
59c6f5280b 2024-07-01 顽雨沉风: Duel.RaiseEvent(_eg,EVENT_CUSTOM+e:GetLabel(),re,r,rp,ep,ev)
59c6f5280b 2024-07-01 顽雨沉风: g:Clear()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --B.E.S. remove counter
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.EnableBESRemove(c)
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetDescription(10)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCategory(CATEGORY_DESTROY)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_F)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EVENT_DAMAGE_STEP_END)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetRange(LOCATION_MZONE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCondition(Auxiliary.RemoveCondtion)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTarget(Auxiliary.RemoveTarget)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(Auxiliary.RemoveOperation)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.RemoveCondtion(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: return c:IsRelateToBattle()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.RemoveTarget(e,tp,eg,ep,ev,re,r,rp,chk)
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return true end
59c6f5280b 2024-07-01 顽雨沉风: if not e:GetHandler():IsCanRemoveCounter(tp,0x1f,1,REASON_EFFECT) then
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_DESTROY,e:GetHandler(),1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.RemoveOperation(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: if c:IsRelateToEffect(e) then
59c6f5280b 2024-07-01 顽雨沉风: if c:IsCanRemoveCounter(tp,0x1f,1,REASON_EFFECT) then
59c6f5280b 2024-07-01 顽雨沉风: c:RemoveCounter(tp,0x1f,1,REASON_EFFECT)
59c6f5280b 2024-07-01 顽雨沉风: else
59c6f5280b 2024-07-01 顽雨沉风: Duel.Destroy(c,REASON_EFFECT)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --The operation function of "destroy during End Phase"
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.EPDestroyOperation(e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local tc=e:GetLabelObject()
59c6f5280b 2024-07-01 顽雨沉风: if Auxiliary.GetValueType(tc)=="Card" or Auxiliary.GetValueType(tc)=="Group" then
59c6f5280b 2024-07-01 顽雨沉风: Duel.Destroy(tc,REASON_EFFECT,LOCATION_GRAVE)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.NegateSummonCondition()
59c6f5280b 2024-07-01 顽雨沉风: return Duel.GetReadyChain()==0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---Check if all cards in g have the same Attribute/Race
59c6f5280b 2024-07-01 顽雨沉风: ---@param g Group
59c6f5280b 2024-07-01 顽雨沉风: ---@param f function Like Card.GetAttribute, must return binary value
59c6f5280b 2024-07-01 顽雨沉风: ---@return boolean
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.SameValueCheck(g,f)
59c6f5280b 2024-07-01 顽雨沉风: if #g<=1 then return true end
59c6f5280b 2024-07-01 顽雨沉风: if #g==2 then return f(g:GetFirst())&f(g:GetNext())~=0 end
59c6f5280b 2024-07-01 顽雨沉风: local tc=g:GetFirst()
59c6f5280b 2024-07-01 顽雨沉风: local v=f(tc)
59c6f5280b 2024-07-01 顽雨沉风: tc=g:GetNext()
59c6f5280b 2024-07-01 顽雨沉风: while tc do
59c6f5280b 2024-07-01 顽雨沉风: v=v&f(tc)
59c6f5280b 2024-07-01 顽雨沉风: if v==0 then return false end
59c6f5280b 2024-07-01 顽雨沉风: tc=g:GetNext()
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: return v~=0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---
59c6f5280b 2024-07-01 顽雨沉风: ---@param tp integer
59c6f5280b 2024-07-01 顽雨沉风: ---@return boolean
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.IsPlayerCanNormalDraw(tp)
59c6f5280b 2024-07-01 顽雨沉风: return Duel.GetDrawCount(tp)>0 and Duel.GetFieldGroupCount(tp,LOCATION_DECK,0)>0
59c6f5280b 2024-07-01 顽雨沉风: and Duel.GetFlagEffect(tp,FLAG_ID_NO_NORMAL_DRAW)==0
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---
59c6f5280b 2024-07-01 顽雨沉风: ---@param e Effect
59c6f5280b 2024-07-01 顽雨沉风: ---@param tp integer
59c6f5280b 2024-07-01 顽雨沉风: ---@param property? integer
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.GiveUpNormalDraw(e,tp,property)
59c6f5280b 2024-07-01 顽雨沉风: property=property or 0
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_FIELD)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET|property)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EFFECT_DRAW_COUNT)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTargetRange(1,0)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetReset(RESET_PHASE+PHASE_DRAW)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetValue(0)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterEffect(e1,tp)
59c6f5280b 2024-07-01 顽雨沉风: Duel.RegisterFlagEffect(tp,FLAG_ID_NO_NORMAL_DRAW,RESET_PHASE+PHASE_DRAW,property,1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---Add EFFECT_TYPE_ACTIVATE effect to Equip Spell Cards
59c6f5280b 2024-07-01 顽雨沉风: ---@param c Card
59c6f5280b 2024-07-01 顽雨沉风: ---@param is_self boolean
59c6f5280b 2024-07-01 顽雨沉风: ---@param is_opponent boolean
59c6f5280b 2024-07-01 顽雨沉风: ---@param filter function
59c6f5280b 2024-07-01 顽雨沉风: ---@param eqlimit function|nil
59c6f5280b 2024-07-01 顽雨沉风: ---@param pause? boolean
59c6f5280b 2024-07-01 顽雨沉风: ---@param skip_target? boolean
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.AddEquipSpellEffect(c,is_self,is_opponent,filter,eqlimit,pause,skip_target)
59c6f5280b 2024-07-01 顽雨沉风: local value=(type(eqlimit)=="function") and eqlimit or 1
59c6f5280b 2024-07-01 顽雨沉风: if pause==nil then pause=false end
59c6f5280b 2024-07-01 顽雨沉风: if skip_target==nil then skip_target=false end
59c6f5280b 2024-07-01 顽雨沉风: --Activate
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCategory(CATEGORY_EQUIP)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_ACTIVATE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EVENT_FREE_CHAIN)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_CARD_TARGET+EFFECT_FLAG_CONTINUOUS_TARGET)
59c6f5280b 2024-07-01 顽雨沉风: if not skip_target then
59c6f5280b 2024-07-01 顽雨沉风: e1:SetTarget(Auxiliary.EquipSpellTarget(is_self,is_opponent,filter,eqlimit))
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: e1:SetOperation(Auxiliary.EquipSpellOperation(eqlimit))
59c6f5280b 2024-07-01 顽雨沉风: if not pause then
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: --Equip limit
59c6f5280b 2024-07-01 顽雨沉风: local e2=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetType(EFFECT_TYPE_SINGLE)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetCode(EFFECT_EQUIP_LIMIT)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
59c6f5280b 2024-07-01 顽雨沉风: e2:SetValue(value)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e2)
59c6f5280b 2024-07-01 顽雨沉风: return e1
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.EquipSpellTarget(is_self,is_opponent,filter,eqlimit)
59c6f5280b 2024-07-01 顽雨沉风: local loc1=is_self and LOCATION_MZONE or 0
59c6f5280b 2024-07-01 顽雨沉风: local loc2=is_opponent and LOCATION_MZONE or 0
59c6f5280b 2024-07-01 顽雨沉风: return function(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
59c6f5280b 2024-07-01 顽雨沉风: if chkc then return chkc:IsLocation(LOCATION_MZONE) and chkc:IsFaceup() and (not eqlimit or eqlimit(e,chkc)) end
59c6f5280b 2024-07-01 顽雨沉风: if chk==0 then return Duel.IsExistingTarget(filter,tp,loc1,loc2,1,nil) end
59c6f5280b 2024-07-01 顽雨沉风: Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_EQUIP)
59c6f5280b 2024-07-01 顽雨沉风: Duel.SelectTarget(tp,filter,tp,loc1,loc2,1,1,nil)
59c6f5280b 2024-07-01 顽雨沉风: Duel.SetOperationInfo(0,CATEGORY_EQUIP,e:GetHandler(),1,0,0)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.EquipSpellOperation(eqlimit)
59c6f5280b 2024-07-01 顽雨沉风: return function (e,tp,eg,ep,ev,re,r,rp)
59c6f5280b 2024-07-01 顽雨沉风: local c=e:GetHandler()
59c6f5280b 2024-07-01 顽雨沉风: local tc=Duel.GetFirstTarget()
59c6f5280b 2024-07-01 顽雨沉风: if c:IsRelateToEffect(e) and tc:IsRelateToEffect(e) and tc:IsFaceup() and (not eqlimit or eqlimit(e,tc)) then
59c6f5280b 2024-07-01 顽雨沉风: Duel.Equip(tp,c,tc)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---If this face-up card would leave the field, banish it instead.
59c6f5280b 2024-07-01 顽雨沉风: ---@param c Card
59c6f5280b 2024-07-01 顽雨沉风: ---@param condition? function
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.AddBanishRedirect(c,condition)
59c6f5280b 2024-07-01 顽雨沉风: if type(condition)~="function" then
59c6f5280b 2024-07-01 顽雨沉风: condition=Auxiliary.BanishRedirectCondition
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: local e1=Effect.CreateEffect(c)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetType(EFFECT_TYPE_SINGLE)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCode(EFFECT_LEAVE_FIELD_REDIRECT)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_CAN_FORBIDDEN)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetCondition(condition)
59c6f5280b 2024-07-01 顽雨沉风: e1:SetValue(LOCATION_REMOVED)
59c6f5280b 2024-07-01 顽雨沉风: c:RegisterEffect(e1)
59c6f5280b 2024-07-01 顽雨沉风: end
59c6f5280b 2024-07-01 顽雨沉风: ---
59c6f5280b 2024-07-01 顽雨沉风: ---@param e Effect
59c6f5280b 2024-07-01 顽雨沉风: function Auxiliary.BanishRedirectCondition(e)
59c6f5280b 2024-07-01 顽雨沉风: return e:GetHandler():IsFaceup()
59c6f5280b 2024-07-01 顽雨沉风: end