name: Dominus
card_text: If your opponent activated a monster effect in the hand or GY this turn, you can activate this card from your hand. Target 1 monster your opponent controls; return it to the hand/Extra Deck, then if you have no Traps in your GY, your opponent can Special Summon 1 monster from their GY. If you activated this card from your hand, you cannot activate the effects of LIGHT and DARK monsters for the rest of this Duel. You can only activate 1 "Dominus Spiral" per turn.
lua: 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_TOHAND + CATEGORY_TOEXTRA + CATEGORY_SPECIAL_SUMMON + CATEGORY_GRAVE_SPSUMMON)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetHintTiming(0, TIMINGS_CHECK_MONSTER + TIMING_END_PHASE)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetTarget(s.thtg)
  	e1:SetOperation(s.thop)
  	c:RegisterEffect(e1)
  	--act in hand
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetType(EFFECT_TYPE_SINGLE)
  	e2:SetCode(EFFECT_TRAP_ACT_IN_HAND)
  	e2:SetCondition(s.handcon)
  	c:RegisterEffect(e2)
  	Duel.AddCustomActivityCounter(id, ACTIVITY_CHAIN, s.chainfilter)
  end
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	e:SetLabel(0)
  	if chkc then
  		return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(1 - tp) and (chkc:IsAbleToHand() or chkc:IsAbleToExtra())
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(aux.OR(Card.IsAbleToHand, Card.IsAbleToExtra), tp, 0, LOCATION_MZONE, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_RTOHAND)
  	local g = Duel.SelectTarget(tp, aux.OR(Card.IsAbleToHand, Card.IsAbleToExtra), tp, 0, LOCATION_MZONE, 1, 1, nil)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, g, 1, 0, 0)
  	if e:GetHandler():IsStatus(STATUS_ACT_FROM_HAND) then
  		e:SetLabel(100)
  	end
  end
  function s.spfilter(c, e, tp)
  	return c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  end
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	local tc = Duel.GetFirstTarget()
  	if
  		tc
  		and tc:IsRelateToChain()
  		and tc:IsType(TYPE_MONSTER)
  		and Duel.SendtoHand(tc, nil, REASON_EFFECT)
  		and tc:IsLocation(LOCATION_HAND + LOCATION_EXTRA)
  		and not Duel.IsExistingMatchingCard(Card.IsType, tp, LOCATION_GRAVE, 0, 1, nil, TYPE_TRAP)
  	then
  		local g = Duel.GetMatchingGroup(aux.NecroValleyFilter(s.spfilter), 1 - tp, LOCATION_GRAVE, 0, nil, e, 1 - tp)
  		if g:GetCount() > 0 and Duel.GetLocationCount(1 - tp, LOCATION_MZONE) > 0 and Duel.SelectYesNo(1 - tp, aux.Stringid(id, 2)) then
  			Duel.Hint(HINT_SELECTMSG, 1 - tp, HINTMSG_SPSUMMON)
  			local sg = g:Select(1 - tp, 1, 1, nil)
  			Duel.SpecialSummon(sg, 0, 1 - tp, 1 - tp, false, false, POS_FACEUP)
  		end
  	end
  	if e:GetLabel() == 100 then
  		local e1 = Effect.CreateEffect(e:GetHandler())
  		e1:SetDescription(aux.Stringid(id, 3))
  		e1:SetType(EFFECT_TYPE_FIELD)
  		e1:SetProperty(EFFECT_FLAG_CLIENT_HINT + EFFECT_FLAG_PLAYER_TARGET)
  		e1:SetCode(EFFECT_CANNOT_ACTIVATE)
  		e1:SetTargetRange(1, 0)
  		e1:SetValue(s.aclimit)
  		Duel.RegisterEffect(e1, tp)
  	end
  end
  function s.aclimit(e, re, tp)
  	return re:IsActiveType(TYPE_MONSTER) and re:GetHandler():IsAttribute(ATTRIBUTE_LIGHT + ATTRIBUTE_DARK)
  end
  function s.chainfilter(re, tp, cid)
  	local loc = Duel.GetChainInfo(cid, CHAININFO_TRIGGERING_LOCATION)
  	return not (re:IsActiveType(TYPE_MONSTER) and loc & (LOCATION_HAND | LOCATION_GRAVE) > 0)
  end
  function s.handcon(e)
  	local tp = e:GetHandlerPlayer()
  	return Duel.GetCustomActivityCount(id, 1 - tp, ACTIVITY_CHAIN) > 0
  end
  
  
source_text: Dominus
  If your opponent activated a monster effect in the hand or GY this turn, you can activate this card from your hand. Target 1 monster your opponent controls; return it to the hand/Extra Deck, then if you have no Traps in your GY, your opponent can Special Summon 1 monster from their GY. If you activated this card from your hand, you cannot activate the effects of LIGHT and DARK monsters for the rest of this Duel. You can only activate 1 "Dominus Spiral" per turn.
target_text: -- Dominus
  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_TOHAND + CATEGORY_TOEXTRA + CATEGORY_SPECIAL_SUMMON + CATEGORY_GRAVE_SPSUMMON)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetHintTiming(0, TIMINGS_CHECK_MONSTER + TIMING_END_PHASE)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetTarget(s.thtg)
  	e1:SetOperation(s.thop)
  	c:RegisterEffect(e1)
  	--act in hand
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetType(EFFECT_TYPE_SINGLE)
  	e2:SetCode(EFFECT_TRAP_ACT_IN_HAND)
  	e2:SetCondition(s.handcon)
  	c:RegisterEffect(e2)
  	Duel.AddCustomActivityCounter(id, ACTIVITY_CHAIN, s.chainfilter)
  end
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	e:SetLabel(0)
  	if chkc then
  		return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(1 - tp) and (chkc:IsAbleToHand() or chkc:IsAbleToExtra())
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(aux.OR(Card.IsAbleToHand, Card.IsAbleToExtra), tp, 0, LOCATION_MZONE, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_RTOHAND)
  	local g = Duel.SelectTarget(tp, aux.OR(Card.IsAbleToHand, Card.IsAbleToExtra), tp, 0, LOCATION_MZONE, 1, 1, nil)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, g, 1, 0, 0)
  	if e:GetHandler():IsStatus(STATUS_ACT_FROM_HAND) then
  		e:SetLabel(100)
  	end
  end
  function s.spfilter(c, e, tp)
  	return c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  end
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	local tc = Duel.GetFirstTarget()
  	if
  		tc
  		and tc:IsRelateToChain()
  		and tc:IsType(TYPE_MONSTER)
  		and Duel.SendtoHand(tc, nil, REASON_EFFECT)
  		and tc:IsLocation(LOCATION_HAND + LOCATION_EXTRA)
  		and not Duel.IsExistingMatchingCard(Card.IsType, tp, LOCATION_GRAVE, 0, 1, nil, TYPE_TRAP)
  	then
  		local g = Duel.GetMatchingGroup(aux.NecroValleyFilter(s.spfilter), 1 - tp, LOCATION_GRAVE, 0, nil, e, 1 - tp)
  		if g:GetCount() > 0 and Duel.GetLocationCount(1 - tp, LOCATION_MZONE) > 0 and Duel.SelectYesNo(1 - tp, aux.Stringid(id, 2)) then
  			Duel.Hint(HINT_SELECTMSG, 1 - tp, HINTMSG_SPSUMMON)
  			local sg = g:Select(1 - tp, 1, 1, nil)
  			Duel.SpecialSummon(sg, 0, 1 - tp, 1 - tp, false, false, POS_FACEUP)
  		end
  	end
  	if e:GetLabel() == 100 then
  		local e1 = Effect.CreateEffect(e:GetHandler())
  		e1:SetDescription(aux.Stringid(id, 3))
  		e1:SetType(EFFECT_TYPE_FIELD)
  		e1:SetProperty(EFFECT_FLAG_CLIENT_HINT + EFFECT_FLAG_PLAYER_TARGET)
  		e1:SetCode(EFFECT_CANNOT_ACTIVATE)
  		e1:SetTargetRange(1, 0)
  		e1:SetValue(s.aclimit)
  		Duel.RegisterEffect(e1, tp)
  	end
  end
  function s.aclimit(e, re, tp)
  	return re:IsActiveType(TYPE_MONSTER) and re:GetHandler():IsAttribute(ATTRIBUTE_LIGHT + ATTRIBUTE_DARK)
  end
  function s.chainfilter(re, tp, cid)
  	local loc = Duel.GetChainInfo(cid, CHAININFO_TRIGGERING_LOCATION)
  	return not (re:IsActiveType(TYPE_MONSTER) and loc & (LOCATION_HAND | LOCATION_GRAVE) > 0)
  end
  function s.handcon(e)
  	local tp = e:GetHandlerPlayer()
  	return Duel.GetCustomActivityCount(id, 1 - tp, ACTIVITY_CHAIN) > 0
  end
  
  