name: ダークアイ・ナイトメア
card_text: このカード名の1の効果は1ターンに1度しか使用できない。
  1:自分の墓地の罠カードを3枚まで除外して発動できる。
  除外した数によって以下の効果を適用する。
  ●1枚:自分はデッキから1枚ドローし、その後手札を1枚選んでデッキの一番上に戻す。
  ●2枚:自分はデッキから1枚ドローする。
  ●3枚:自分はデッキから2枚ドローし、その後手札を1枚選んで捨てる。
  2:1ターンに1度、このカードが戦闘で破壊される場合、代わりに自分の墓地の罠カード1枚を除外できる。
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--draw
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCountLimit(1, id)
  	e1:SetCost(s.drcost)
  	e1:SetTarget(s.drtg)
  	e1:SetOperation(s.drop)
  	c:RegisterEffect(e1)
  	--destroy replace
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_CONTINUOUS)
  	e2:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
  	e2:SetCode(EFFECT_DESTROY_REPLACE)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetCountLimit(1)
  	e2:SetTarget(s.reptg)
  	c:RegisterEffect(e2)
  end
  function s.drfilter(c)
  	return c:IsType(TYPE_TRAP) and c:IsAbleToRemoveAsCost()
  end
  function s.drcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.drfilter, tp, LOCATION_GRAVE, 0, 1, nil)
  	end
  	local ct = 2
  	if Duel.IsPlayerCanDraw(tp, 2) then
  		ct = 3
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVE)
  	local g = Duel.SelectMatchingCard(tp, s.drfilter, tp, LOCATION_GRAVE, 0, 1, ct, nil)
  	e:SetLabel(Duel.Remove(g, POS_FACEUP, REASON_COST))
  end
  function s.drtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsPlayerCanDraw(tp, 1)
  	end
  	local label = e:GetLabel()
  	if label == 1 then
  		e:SetCategory(CATEGORY_DRAW + CATEGORY_TODECK)
  		Duel.SetOperationInfo(0, CATEGORY_DRAW, nil, 0, tp, 1)
  		Duel.SetOperationInfo(0, CATEGORY_TODECK, nil, 1, tp, LOCATION_HAND)
  	elseif label == 2 then
  		e:SetCategory(CATEGORY_DRAW)
  		Duel.SetOperationInfo(0, CATEGORY_DRAW, nil, 0, tp, 1)
  	elseif label == 3 then
  		e:SetCategory(CATEGORY_DRAW + CATEGORY_HANDES)
  		Duel.SetOperationInfo(0, CATEGORY_DRAW, nil, 0, tp, 2)
  		Duel.SetOperationInfo(0, CATEGORY_HANDES, nil, 0, tp, 1)
  	end
  end
  function s.drop(e, tp, eg, ep, ev, re, r, rp)
  	local label = e:GetLabel()
  	if label == 1 then
  		if Duel.Draw(tp, 1, REASON_EFFECT) ~= 0 then
  			Duel.BreakEffect()
  			Duel.ShuffleHand(tp)
  			Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TODECK)
  			local g = Duel.SelectMatchingCard(tp, Card.IsAbleToDeck, tp, LOCATION_HAND, 0, 1, 1, nil)
  			Duel.SendtoDeck(g, nil, SEQ_DECKTOP, REASON_EFFECT)
  		end
  	elseif label == 2 then
  		Duel.Draw(tp, 1, REASON_EFFECT)
  	elseif label == 3 then
  		if Duel.Draw(tp, 2, REASON_EFFECT) ~= 0 then
  			Duel.BreakEffect()
  			Duel.ShuffleHand(tp)
  			Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DISCARD)
  			local g = Duel.SelectMatchingCard(tp, nil, tp, LOCATION_HAND, 0, 1, 1, nil)
  			Duel.SendtoGrave(g, REASON_EFFECT + REASON_DISCARD)
  		end
  	end
  end
  function s.repfilter(c)
  	return c:IsType(TYPE_TRAP) and c:IsAbleToRemove()
  end
  function s.reptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return e:GetHandler():IsReason(REASON_BATTLE) and Duel.IsExistingMatchingCard(s.repfilter, tp, LOCATION_GRAVE, 0, 1, nil)
  	end
  	if Duel.SelectEffectYesNo(tp, e:GetHandler(), 96) then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVE)
  		local g = Duel.SelectMatchingCard(tp, s.repfilter, tp, LOCATION_GRAVE, 0, 1, 1, nil)
  		Duel.Remove(g, POS_FACEUP, REASON_EFFECT + REASON_REPLACE)
  		return true
  	else
  		return false
  	end
  end
  
  
source_text: ダークアイ・ナイトメア
  このカード名の1の効果は1ターンに1度しか使用できない。
  1:自分の墓地の罠カードを3枚まで除外して発動できる。
  除外した数によって以下の効果を適用する。
  ●1枚:自分はデッキから1枚ドローし、その後手札を1枚選んでデッキの一番上に戻す。
  ●2枚:自分はデッキから1枚ドローする。
  ●3枚:自分はデッキから2枚ドローし、その後手札を1枚選んで捨てる。
  2:1ターンに1度、このカードが戦闘で破壊される場合、代わりに自分の墓地の罠カード1枚を除外できる。
target_text: -- ダークアイ・ナイトメア
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--draw
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCountLimit(1, id)
  	e1:SetCost(s.drcost)
  	e1:SetTarget(s.drtg)
  	e1:SetOperation(s.drop)
  	c:RegisterEffect(e1)
  	--destroy replace
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_CONTINUOUS)
  	e2:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
  	e2:SetCode(EFFECT_DESTROY_REPLACE)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetCountLimit(1)
  	e2:SetTarget(s.reptg)
  	c:RegisterEffect(e2)
  end
  function s.drfilter(c)
  	return c:IsType(TYPE_TRAP) and c:IsAbleToRemoveAsCost()
  end
  function s.drcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.drfilter, tp, LOCATION_GRAVE, 0, 1, nil)
  	end
  	local ct = 2
  	if Duel.IsPlayerCanDraw(tp, 2) then
  		ct = 3
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVE)
  	local g = Duel.SelectMatchingCard(tp, s.drfilter, tp, LOCATION_GRAVE, 0, 1, ct, nil)
  	e:SetLabel(Duel.Remove(g, POS_FACEUP, REASON_COST))
  end
  function s.drtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsPlayerCanDraw(tp, 1)
  	end
  	local label = e:GetLabel()
  	if label == 1 then
  		e:SetCategory(CATEGORY_DRAW + CATEGORY_TODECK)
  		Duel.SetOperationInfo(0, CATEGORY_DRAW, nil, 0, tp, 1)
  		Duel.SetOperationInfo(0, CATEGORY_TODECK, nil, 1, tp, LOCATION_HAND)
  	elseif label == 2 then
  		e:SetCategory(CATEGORY_DRAW)
  		Duel.SetOperationInfo(0, CATEGORY_DRAW, nil, 0, tp, 1)
  	elseif label == 3 then
  		e:SetCategory(CATEGORY_DRAW + CATEGORY_HANDES)
  		Duel.SetOperationInfo(0, CATEGORY_DRAW, nil, 0, tp, 2)
  		Duel.SetOperationInfo(0, CATEGORY_HANDES, nil, 0, tp, 1)
  	end
  end
  function s.drop(e, tp, eg, ep, ev, re, r, rp)
  	local label = e:GetLabel()
  	if label == 1 then
  		if Duel.Draw(tp, 1, REASON_EFFECT) ~= 0 then
  			Duel.BreakEffect()
  			Duel.ShuffleHand(tp)
  			Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TODECK)
  			local g = Duel.SelectMatchingCard(tp, Card.IsAbleToDeck, tp, LOCATION_HAND, 0, 1, 1, nil)
  			Duel.SendtoDeck(g, nil, SEQ_DECKTOP, REASON_EFFECT)
  		end
  	elseif label == 2 then
  		Duel.Draw(tp, 1, REASON_EFFECT)
  	elseif label == 3 then
  		if Duel.Draw(tp, 2, REASON_EFFECT) ~= 0 then
  			Duel.BreakEffect()
  			Duel.ShuffleHand(tp)
  			Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DISCARD)
  			local g = Duel.SelectMatchingCard(tp, nil, tp, LOCATION_HAND, 0, 1, 1, nil)
  			Duel.SendtoGrave(g, REASON_EFFECT + REASON_DISCARD)
  		end
  	end
  end
  function s.repfilter(c)
  	return c:IsType(TYPE_TRAP) and c:IsAbleToRemove()
  end
  function s.reptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return e:GetHandler():IsReason(REASON_BATTLE) and Duel.IsExistingMatchingCard(s.repfilter, tp, LOCATION_GRAVE, 0, 1, nil)
  	end
  	if Duel.SelectEffectYesNo(tp, e:GetHandler(), 96) then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVE)
  		local g = Duel.SelectMatchingCard(tp, s.repfilter, tp, LOCATION_GRAVE, 0, 1, 1, nil)
  		Duel.Remove(g, POS_FACEUP, REASON_EFFECT + REASON_REPLACE)
  		return true
  	else
  		return false
  	end
  end
  
  