命王の螺旋
このカード名のカードは1ターンに1枚しか発動できない。
相手が手札・墓地のモンスターの効果を発動したターン、このカードの発動は手札からもできる。
1:相手フィールドのモンスター1体を対象として発動できる。
そのモンスターを手札・EXデッキに戻す。
自分の墓地に罠カードが存在しない場合、さらに相手は自身の墓地からモンスター1体を特殊召喚できる。
このカードを手札から発動した場合、発動後、このデュエル中に自分は光・闇属性モンスターの効果を発動できない。
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


命王の螺旋
このカード名のカードは1ターンに1枚しか発動できない。
相手が手札・墓地のモンスターの効果を発動したターン、このカードの発動は手札からもできる。
1:相手フィールドのモンスター1体を対象として発動できる。
そのモンスターを手札・EXデッキに戻す。
自分の墓地に罠カードが存在しない場合、さらに相手は自身の墓地からモンスター1体を特殊召喚できる。
このカードを手札から発動した場合、発動後、このデュエル中に自分は光・闇属性モンスターの効果を発動できない。
-- 命王の螺旋
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

