Tri-Brigade
Activate 1 of these effects (but you can only use each effect of "Tri-Brigade Hammer" once per turn);
● Add 1 "Tri-Brigade" Spell/Trap from your Deck to your hand, except "Tri-Brigade Hammer".
● Banish any number of "Tri-Brigade" cards from your GY; Special Summon 1 "Tri-Brigade" Link Monster from your Extra Deck, with Link Rating equal to the number banished, ignoring its Summoning conditions, also you cannot Special Summon from the Extra Deck for the rest of this turn, except Beast, Beast-Warrior, or Winged Beast monsters.
local SETCARD_ID_0 = 0x14d --Tri-Brigade

local SETCARD_ID_0 = 0x14d --Tri-Brigade
local s, id, o = GetID()
function s.initial_effect(c)
	--activate
	local e1 = Effect.CreateEffect(c)
	e1:SetDescription(aux.Stringid(id, 0))
	e1:SetCategory(CATEGORY_SEARCH + CATEGORY_TOHAND + CATEGORY_SPECIAL_SUMMON)
	e1:SetType(EFFECT_TYPE_ACTIVATE)
	e1:SetCode(EVENT_FREE_CHAIN)
	e1:SetHintTiming(TIMING_DRAW_PHASE, TIMINGS_CHECK_MONSTER + TIMING_END_PHASE)
	e1:SetTarget(s.target)
	e1:SetOperation(s.activate)
	c:RegisterEffect(e1)
end
function s.thfilter(c)
	return not c:IsCode(id) and c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_SPELL + TYPE_TRAP) and c:IsAbleToHand()
end
function s.cfilter(c)
	return c:IsSetCard(SETCARD_ID_0) and c:IsAbleToRemoveAsCost()
end
function s.fselect(g, tg)
	return tg:IsExists(Card.IsLink, 1, nil, #g)
end
function s.spfilter(c, e, tp)
	return c:IsType(TYPE_LINK) and c:IsSetCard(SETCARD_ID_0) and c:IsCanBeSpecialSummoned(e, 0, tp, true, false) and Duel.GetLocationCountFromEx(tp, tp, nil, c) > 0
end
function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
	local b1 = Duel.IsExistingMatchingCard(s.thfilter, tp, LOCATION_DECK, 0, 1, nil) and (not e:IsCostChecked() or Duel.GetFlagEffect(tp, id) == 0)
	local cg = Duel.GetMatchingGroup(s.cfilter, tp, LOCATION_GRAVE, 0, nil)
	local tg = Duel.GetMatchingGroup(s.spfilter, tp, LOCATION_EXTRA, 0, nil, e, tp)
	local _, maxlink = tg:GetMaxGroup(Card.GetLink)
	local b2 = #tg > 0 and cg:CheckSubGroup(s.fselect, 1, maxlink, tg) and Duel.GetFlagEffect(tp, id + o) == 0 and e:IsCostChecked()
	if chk == 0 then
		return b1 or b2
	end
	local op = 0
	if b1 or b2 then
		op = aux.SelectFromOptions(tp, { b1, aux.Stringid(id, 1), 1 }, { b2, aux.Stringid(id, 2), 2 })
	end
	if op == 1 then
		if e:IsCostChecked() then
			e:SetCategory(CATEGORY_SEARCH + CATEGORY_TOHAND)
			Duel.RegisterFlagEffect(tp, id, RESET_PHASE + PHASE_END, 0, 1)
		end
		e:SetLabel(op, 0)
		Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK)
	elseif op == 2 then
		Duel.RegisterFlagEffect(tp, id + o, RESET_PHASE + PHASE_END, 0, 1)
		e:SetCategory(CATEGORY_SPECIAL_SUMMON)
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVE)
		local rg = cg:SelectSubGroup(tp, s.fselect, false, 1, maxlink, tg)
		Duel.Remove(rg, POS_FACEUP, REASON_COST)
		e:SetLabel(op, rg:GetCount())
		Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_EXTRA)
	end
end
function s.spfilter1(c, e, tp, lk)
	return s.spfilter(c, e, tp) and c:IsLink(lk)
end
function s.activate(e, tp, eg, ep, ev, re, r, rp)
	local op, lk = e:GetLabel()
	if op == 1 then
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
		local g = Duel.SelectMatchingCard(tp, s.thfilter, tp, LOCATION_DECK, 0, 1, 1, nil)
		if g:GetCount() > 0 then
			Duel.SendtoHand(g, nil, REASON_EFFECT)
			Duel.ConfirmCards(1 - tp, g)
		end
	elseif op == 2 then
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
		local g = Duel.SelectMatchingCard(tp, s.spfilter1, tp, LOCATION_EXTRA, 0, 1, 1, nil, e, tp, lk)
		local tc = g:GetFirst()
		if tc then
			Duel.SpecialSummon(tc, 0, tp, tp, true, false, POS_FACEUP)
		end
		local e1 = Effect.CreateEffect(e:GetHandler())
		e1:SetType(EFFECT_TYPE_FIELD)
		e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
		e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
		e1:SetTargetRange(1, 0)
		e1:SetTarget(s.splimit)
		e1:SetReset(RESET_PHASE + PHASE_END)
		Duel.RegisterEffect(e1, tp)
	end
end
function s.splimit(e, c)
	return c:IsLocation(LOCATION_EXTRA) and not c:IsRace(RACE_BEAST + RACE_BEASTWARRIOR + RACE_WINDBEAST)
end


Tri-Brigade
Activate 1 of these effects (but you can only use each effect of "Tri-Brigade Hammer" once per turn);
● Add 1 "Tri-Brigade" Spell/Trap from your Deck to your hand, except "Tri-Brigade Hammer".
● Banish any number of "Tri-Brigade" cards from your GY; Special Summon 1 "Tri-Brigade" Link Monster from your Extra Deck, with Link Rating equal to the number banished, ignoring its Summoning conditions, also you cannot Special Summon from the Extra Deck for the rest of this turn, except Beast, Beast-Warrior, or Winged Beast monsters.
-- Tri-Brigade
local SETCARD_ID_0 = 0x14d --Tri-Brigade
local s, id, o = GetID()
function s.initial_effect(c)
	--activate
	local e1 = Effect.CreateEffect(c)
	e1:SetDescription(aux.Stringid(id, 0))
	e1:SetCategory(CATEGORY_SEARCH + CATEGORY_TOHAND + CATEGORY_SPECIAL_SUMMON)
	e1:SetType(EFFECT_TYPE_ACTIVATE)
	e1:SetCode(EVENT_FREE_CHAIN)
	e1:SetHintTiming(TIMING_DRAW_PHASE, TIMINGS_CHECK_MONSTER + TIMING_END_PHASE)
	e1:SetTarget(s.target)
	e1:SetOperation(s.activate)
	c:RegisterEffect(e1)
end
function s.thfilter(c)
	return not c:IsCode(id) and c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_SPELL + TYPE_TRAP) and c:IsAbleToHand()
end
function s.cfilter(c)
	return c:IsSetCard(SETCARD_ID_0) and c:IsAbleToRemoveAsCost()
end
function s.fselect(g, tg)
	return tg:IsExists(Card.IsLink, 1, nil, #g)
end
function s.spfilter(c, e, tp)
	return c:IsType(TYPE_LINK) and c:IsSetCard(SETCARD_ID_0) and c:IsCanBeSpecialSummoned(e, 0, tp, true, false) and Duel.GetLocationCountFromEx(tp, tp, nil, c) > 0
end
function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
	local b1 = Duel.IsExistingMatchingCard(s.thfilter, tp, LOCATION_DECK, 0, 1, nil) and (not e:IsCostChecked() or Duel.GetFlagEffect(tp, id) == 0)
	local cg = Duel.GetMatchingGroup(s.cfilter, tp, LOCATION_GRAVE, 0, nil)
	local tg = Duel.GetMatchingGroup(s.spfilter, tp, LOCATION_EXTRA, 0, nil, e, tp)
	local _, maxlink = tg:GetMaxGroup(Card.GetLink)
	local b2 = #tg > 0 and cg:CheckSubGroup(s.fselect, 1, maxlink, tg) and Duel.GetFlagEffect(tp, id + o) == 0 and e:IsCostChecked()
	if chk == 0 then
		return b1 or b2
	end
	local op = 0
	if b1 or b2 then
		op = aux.SelectFromOptions(tp, { b1, aux.Stringid(id, 1), 1 }, { b2, aux.Stringid(id, 2), 2 })
	end
	if op == 1 then
		if e:IsCostChecked() then
			e:SetCategory(CATEGORY_SEARCH + CATEGORY_TOHAND)
			Duel.RegisterFlagEffect(tp, id, RESET_PHASE + PHASE_END, 0, 1)
		end
		e:SetLabel(op, 0)
		Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK)
	elseif op == 2 then
		Duel.RegisterFlagEffect(tp, id + o, RESET_PHASE + PHASE_END, 0, 1)
		e:SetCategory(CATEGORY_SPECIAL_SUMMON)
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVE)
		local rg = cg:SelectSubGroup(tp, s.fselect, false, 1, maxlink, tg)
		Duel.Remove(rg, POS_FACEUP, REASON_COST)
		e:SetLabel(op, rg:GetCount())
		Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_EXTRA)
	end
end
function s.spfilter1(c, e, tp, lk)
	return s.spfilter(c, e, tp) and c:IsLink(lk)
end
function s.activate(e, tp, eg, ep, ev, re, r, rp)
	local op, lk = e:GetLabel()
	if op == 1 then
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
		local g = Duel.SelectMatchingCard(tp, s.thfilter, tp, LOCATION_DECK, 0, 1, 1, nil)
		if g:GetCount() > 0 then
			Duel.SendtoHand(g, nil, REASON_EFFECT)
			Duel.ConfirmCards(1 - tp, g)
		end
	elseif op == 2 then
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
		local g = Duel.SelectMatchingCard(tp, s.spfilter1, tp, LOCATION_EXTRA, 0, 1, 1, nil, e, tp, lk)
		local tc = g:GetFirst()
		if tc then
			Duel.SpecialSummon(tc, 0, tp, tp, true, false, POS_FACEUP)
		end
		local e1 = Effect.CreateEffect(e:GetHandler())
		e1:SetType(EFFECT_TYPE_FIELD)
		e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
		e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
		e1:SetTargetRange(1, 0)
		e1:SetTarget(s.splimit)
		e1:SetReset(RESET_PHASE + PHASE_END)
		Duel.RegisterEffect(e1, tp)
	end
end
function s.splimit(e, c)
	return c:IsLocation(LOCATION_EXTRA) and not c:IsRace(RACE_BEAST + RACE_BEASTWARRIOR + RACE_WINDBEAST)
end

