name: Dark
card_text: You can activate this card the turn it was Set by revealing 1 Spellcaster monster in your hand. When a monster effect is activated in response to the activation of a card that mentions "Dark Magician" or its effect: You can negate that effect, and if you do, for the rest of this turn, the activated effects of monsters with the same original name are negated. If you Special Summon "Dark Magician" while this card is in your GY: You can pay 2500 LP; Set this card.
external_ids: local CARD_ID_0 = 46986414 --Dark Magician
  
lua: local CARD_ID_0 = 46986414 --Dark Magician
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	--act in set turn
  	local e0 = Effect.CreateEffect(c)
  	e0:SetDescription(aux.Stringid(id, 0))
  	e0:SetType(EFFECT_TYPE_SINGLE)
  	e0:SetValue(id)
  	e0:SetCode(EFFECT_TRAP_ACT_IN_SET_TURN)
  	e0:SetProperty(EFFECT_FLAG_SET_AVAILABLE + EFFECT_FLAG_CANNOT_DISABLE + EFFECT_FLAG_UNCOPYABLE)
  	e0:SetCondition(s.condition)
  	e0:SetCost(s.cost)
  	c:RegisterEffect(e0)
  	--disable
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 1))
  	e1:SetCategory(CATEGORY_DISABLE)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_CHAINING)
  	e1:SetCondition(s.discon)
  	e1:SetTarget(s.distg)
  	e1:SetOperation(s.disop)
  	c:RegisterEffect(e1)
  	--set
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 2))
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e2:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCondition(s.setcon)
  	e2:SetCost(s.setcost)
  	e2:SetTarget(s.settg)
  	e2:SetOperation(s.setop)
  	c:RegisterEffect(e2)
  end
  function s.condition(e)
  	return e:GetHandler():IsStatus(STATUS_SET_TURN) and e:GetHandler():IsLocation(LOCATION_ONFIELD)
  end
  function s.costfilter(c)
  	return c:IsRace(RACE_SPELLCASTER) and not c:IsPublic()
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.costfilter, tp, LOCATION_HAND, 0, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CONFIRM)
  	local g = Duel.SelectMatchingCard(tp, s.costfilter, tp, LOCATION_HAND, 0, 1, 1, nil)
  	Duel.ConfirmCards(1 - tp, g)
  	Duel.ShuffleHand(tp)
  end
  function s.discon(e, tp, eg, ep, ev, re, r, rp)
  	if not Duel.IsChainDisablable(ev) then
  		return false
  	end
  	local te = Duel.GetChainInfo(ev - 1, CHAININFO_TRIGGERING_EFFECT)
  	return Duel.GetCurrentChain() >= 2 and te and aux.IsCodeListed(te:GetHandler(), CARD_ID_0) and re:IsActiveType(TYPE_MONSTER)
  end
  function s.distg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	Duel.SetOperationInfo(0, CATEGORY_DISABLE, eg, 1, 0, 0)
  end
  function s.disop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local rc = re:GetHandler()
  	if Duel.NegateEffect(ev) and rc then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		e1:SetCode(EVENT_CHAIN_SOLVING)
  		e1:SetCondition(s.discon1)
  		e1:SetOperation(s.disop1)
  		e1:SetLabel(rc:GetOriginalCodeRule())
  		e1:SetReset(RESET_PHASE + PHASE_END)
  		Duel.RegisterEffect(e1, tp)
  	end
  end
  function s.discon1(e, tp, eg, ep, ev, re, r, rp)
  	local code = e:GetLabel()
  	return re:GetHandler():IsOriginalCodeRule(code) and re:IsActiveType(TYPE_MONSTER)
  end
  function s.disop1(e, tp, eg, ep, ev, re, r, rp)
  	Duel.NegateEffect(ev)
  end
  function s.setfilter(c, tp)
  	return c:IsFaceup() and c:IsCode(CARD_ID_0) and c:IsSummonPlayer(tp)
  end
  function s.setcon(e, tp, eg, ep, ev, re, r, rp)
  	return eg:IsExists(s.setfilter, 1, nil, tp)
  end
  function s.setcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.CheckLPCost(tp, 2500)
  	end
  	Duel.PayLPCost(tp, 2500)
  end
  function s.settg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return e:GetHandler():IsSSetable()
  	end
  	Duel.SetOperationInfo(0, CATEGORY_LEAVE_GRAVE, e:GetHandler(), 1, 0, 0)
  end
  function s.setop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToChain() and aux.NecroValleyFilter()(c) then
  		Duel.SSet(tp, c)
  	end
  end
  
  
source_text: Dark
  You can activate this card the turn it was Set by revealing 1 Spellcaster monster in your hand. When a monster effect is activated in response to the activation of a card that mentions "Dark Magician" or its effect: You can negate that effect, and if you do, for the rest of this turn, the activated effects of monsters with the same original name are negated. If you Special Summon "Dark Magician" while this card is in your GY: You can pay 2500 LP; Set this card.
target_text: -- Dark
  local CARD_ID_0 = 46986414 --Dark Magician
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	--act in set turn
  	local e0 = Effect.CreateEffect(c)
  	e0:SetDescription(aux.Stringid(id, 0))
  	e0:SetType(EFFECT_TYPE_SINGLE)
  	e0:SetValue(id)
  	e0:SetCode(EFFECT_TRAP_ACT_IN_SET_TURN)
  	e0:SetProperty(EFFECT_FLAG_SET_AVAILABLE + EFFECT_FLAG_CANNOT_DISABLE + EFFECT_FLAG_UNCOPYABLE)
  	e0:SetCondition(s.condition)
  	e0:SetCost(s.cost)
  	c:RegisterEffect(e0)
  	--disable
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 1))
  	e1:SetCategory(CATEGORY_DISABLE)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_CHAINING)
  	e1:SetCondition(s.discon)
  	e1:SetTarget(s.distg)
  	e1:SetOperation(s.disop)
  	c:RegisterEffect(e1)
  	--set
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 2))
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e2:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCondition(s.setcon)
  	e2:SetCost(s.setcost)
  	e2:SetTarget(s.settg)
  	e2:SetOperation(s.setop)
  	c:RegisterEffect(e2)
  end
  function s.condition(e)
  	return e:GetHandler():IsStatus(STATUS_SET_TURN) and e:GetHandler():IsLocation(LOCATION_ONFIELD)
  end
  function s.costfilter(c)
  	return c:IsRace(RACE_SPELLCASTER) and not c:IsPublic()
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.costfilter, tp, LOCATION_HAND, 0, 1, nil)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CONFIRM)
  	local g = Duel.SelectMatchingCard(tp, s.costfilter, tp, LOCATION_HAND, 0, 1, 1, nil)
  	Duel.ConfirmCards(1 - tp, g)
  	Duel.ShuffleHand(tp)
  end
  function s.discon(e, tp, eg, ep, ev, re, r, rp)
  	if not Duel.IsChainDisablable(ev) then
  		return false
  	end
  	local te = Duel.GetChainInfo(ev - 1, CHAININFO_TRIGGERING_EFFECT)
  	return Duel.GetCurrentChain() >= 2 and te and aux.IsCodeListed(te:GetHandler(), CARD_ID_0) and re:IsActiveType(TYPE_MONSTER)
  end
  function s.distg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	Duel.SetOperationInfo(0, CATEGORY_DISABLE, eg, 1, 0, 0)
  end
  function s.disop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local rc = re:GetHandler()
  	if Duel.NegateEffect(ev) and rc then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		e1:SetCode(EVENT_CHAIN_SOLVING)
  		e1:SetCondition(s.discon1)
  		e1:SetOperation(s.disop1)
  		e1:SetLabel(rc:GetOriginalCodeRule())
  		e1:SetReset(RESET_PHASE + PHASE_END)
  		Duel.RegisterEffect(e1, tp)
  	end
  end
  function s.discon1(e, tp, eg, ep, ev, re, r, rp)
  	local code = e:GetLabel()
  	return re:GetHandler():IsOriginalCodeRule(code) and re:IsActiveType(TYPE_MONSTER)
  end
  function s.disop1(e, tp, eg, ep, ev, re, r, rp)
  	Duel.NegateEffect(ev)
  end
  function s.setfilter(c, tp)
  	return c:IsFaceup() and c:IsCode(CARD_ID_0) and c:IsSummonPlayer(tp)
  end
  function s.setcon(e, tp, eg, ep, ev, re, r, rp)
  	return eg:IsExists(s.setfilter, 1, nil, tp)
  end
  function s.setcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.CheckLPCost(tp, 2500)
  	end
  	Duel.PayLPCost(tp, 2500)
  end
  function s.settg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return e:GetHandler():IsSSetable()
  	end
  	Duel.SetOperationInfo(0, CATEGORY_LEAVE_GRAVE, e:GetHandler(), 1, 0, 0)
  end
  function s.setop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToChain() and aux.NecroValleyFilter()(c) then
  		Duel.SSet(tp, c)
  	end
  end
  
  