Generate a YGOPro Lua script for the following Yu-Gi-Oh card effect:
Cannot attack unless you control an "Adventurer Token". You can only use each of the following effects of "Magicore Warrior of the Relics" once per turn. If you control an "Adventurer Token": You can Special Summon this card from your hand. At the end of the Battle Phase, if your monster that mentions "Adventurer Token" battled: You can Set 1 Trap that mentions "Adventurer Token" directly from your Deck.
--遺跡の魔鉱戦士
--Magicore Warrior of the Relics
--Scripted by Hatter
local s,id=GetID()
function s.initial_effect(c)
	--Cannot attack unless you control an "Adventurer Token"
	local e1=Effect.CreateEffect(c)
	e1:SetType(EFFECT_TYPE_SINGLE)
	e1:SetCode(EFFECT_CANNOT_ATTACK)
	e1:SetCondition(aux.NOT(s.bravecon))
	c:RegisterEffect(e1)
	--Special Summon itself from the hand
	local e2=Effect.CreateEffect(c)
	e2:SetDescription(aux.Stringid(id,0))
	e2:SetCategory(CATEGORY_SPECIAL_SUMMON)
	e2:SetType(EFFECT_TYPE_IGNITION)
	e2:SetRange(LOCATION_HAND)
	e2:SetCountLimit(1,id)
	e2:SetCondition(s.bravecon)
	e2:SetTarget(s.sptg)
	e2:SetOperation(s.spop)
	c:RegisterEffect(e2)
	--Set Trap that lists "Adventurer Token" from the Deck
	local e3=Effect.CreateEffect(c)
	e3:SetDescription(aux.Stringid(id,1))
	e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
	e3:SetCode(EVENT_PHASE|PHASE_BATTLE)
	e3:SetCountLimit(1,{id,1})
	e3:SetRange(LOCATION_MZONE)
	e3:SetCondition(s.setcon)
	e3:SetTarget(s.settg)
	e3:SetOperation(s.setop)
	c:RegisterEffect(e3)
	aux.GlobalCheck(s,function()
		local ge1=Effect.CreateEffect(c)
		ge1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
		ge1:SetCode(EVENT_BATTLED)
		ge1:SetOperation(s.checkop)
		Duel.RegisterEffect(ge1,0)
	end)
end
s.listed_names={TOKEN_ADVENTURER}
function s.checkop(e,tp,eg,ep,ev,re,r,rp)
	local attacker,target=Duel.GetBattleMonster(tp)
	if attacker and attacker:ListsCode(TOKEN_ADVENTURER) then
		Duel.RegisterFlagEffect(attacker:GetControler(),id,RESET_PHASE|PHASE_BATTLE,0,1)
	end
	if target and target:ListsCode(TOKEN_ADVENTURER) then
		Duel.RegisterFlagEffect(target:GetControler(),id,RESET_PHASE|PHASE_BATTLE,0,1)
	end
end
function s.bravecon(e)
	return Duel.IsExistingMatchingCard(aux.FaceupFilter(Card.IsCode,TOKEN_ADVENTURER),e:GetHandlerPlayer(),LOCATION_ONFIELD,0,1,nil)
end
function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk)
	if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0
		and e:GetHandler():IsCanBeSpecialSummoned(e,0,tp,false,false) end
	Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,e:GetHandler(),1,0,0)
end
function s.spop(e,tp,eg,ep,ev,re,r,rp)
	local c=e:GetHandler()
	if c:IsRelateToEffect(e) then
		Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP)
	end
end
function s.setcon(e,tp,eg,ep,ev,re,r,rp)
	return Duel.GetFlagEffect(tp,id)>0
end
function s.setfilter(c)
	return c:IsTrap() and c:ListsCode(TOKEN_ADVENTURER) and c:IsSSetable() and not c:IsForbidden()
end
function s.settg(e,tp,eg,ep,ev,re,r,rp,chk)
	if chk==0 then return Duel.IsExistingMatchingCard(s.setfilter,tp,LOCATION_DECK,0,1,nil) end
end
function s.setop(e,tp,eg,ep,ev,re,r,rp)
	Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SET)
	local g=Duel.SelectMatchingCard(tp,s.setfilter,tp,LOCATION_DECK,0,1,1,nil)
	if #g==0 then return end
	Duel.SSet(tp,g)
end