Graverobber
Select 1 Spell Card from your opponent's Graveyard. You can use it as your hand until the end of the turn. If you use it, you take 2000 points of damage.
local s, id, o = GetID()
function s.initial_effect(c)
	--Activate
	local e1 = Effect.CreateEffect(c)
	e1:SetCategory(CATEGORY_TOHAND)
	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
	e1:SetType(EFFECT_TYPE_ACTIVATE)
	e1:SetCode(EVENT_FREE_CHAIN)
	e1:SetTarget(s.target)
	e1:SetOperation(s.activate)
	c:RegisterEffect(e1)
end
function s.filter(c)
	return c:IsType(TYPE_SPELL) and c:IsAbleToHand()
end
function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
	if chkc then
		return chkc:IsControler(1 - tp) and chkc:IsLocation(LOCATION_GRAVE) and s.filter(chkc)
	end
	if chk == 0 then
		return Duel.IsExistingTarget(s.filter, tp, 0, LOCATION_GRAVE, 1, nil)
	end
	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
	local g = Duel.SelectTarget(tp, s.filter, tp, 0, LOCATION_GRAVE, 1, 1, nil)
	Duel.SetOperationInfo(0, CATEGORY_TOHAND, g, 1, 0, 0)
end
function s.activate(e, tp, eg, ep, ev, re, r, rp)
	local tc = Duel.GetFirstTarget()
	if tc:IsRelateToEffect(e) then
		Duel.SendtoHand(tc, tp, REASON_EFFECT)
		Duel.ConfirmCards(1 - tp, tc)
		tc:RegisterFlagEffect(id, RESET_EVENT + 0x5c0000 + RESET_PHASE + PHASE_END, 0, 1)
		local e1 = Effect.CreateEffect(e:GetHandler())
		e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
		e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
		e1:SetCode(EVENT_PHASE + PHASE_END)
		e1:SetCountLimit(1)
		e1:SetCondition(s.tgcon)
		e1:SetOperation(s.tgop)
		e1:SetLabelObject(tc)
		e1:SetReset(RESET_EVENT + 0x5c0000 + RESET_PHASE + PHASE_END)
		Duel.RegisterEffect(e1, tp)
		local e3 = Effect.CreateEffect(e:GetHandler())
		e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
		e3:SetCode(EVENT_CHAINING)
		e3:SetCondition(s.actcon)
		e3:SetOperation(s.actop)
		e3:SetLabelObject(tc)
		e3:SetReset(RESET_PHASE + PHASE_END)
		Duel.RegisterEffect(e3, tp)
		local e4 = Effect.CreateEffect(e:GetHandler())
		e4:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
		e4:SetCode(EVENT_CHAIN_SOLVED)
		e4:SetCondition(s.damcon)
		e4:SetOperation(s.damop)
		e4:SetLabelObject(tc)
		e4:SetReset(RESET_PHASE + PHASE_END)
		Duel.RegisterEffect(e4, tp)
	end
end
function s.tgcon(e, tp, eg, ep, ev, re, r, rp)
	local tc = e:GetLabelObject()
	return tc:GetControler() ~= tc:GetOwner() and tc:GetFlagEffect(id) ~= 0
end
function s.tgop(e, tp, eg, ep, ev, re, r, rp)
	local tc = e:GetLabelObject()
	Duel.SendtoGrave(tc, REASON_EFFECT)
end
function s.actcon(e, tp, eg, ep, ev, re, r, rp)
	return rp == tp and re:GetHandler() == e:GetLabelObject() and re:GetHandler():GetFlagEffect(id) ~= 0
end
function s.actop(e, tp, eg, ep, ev, re, r, rp)
	re:GetHandler():RegisterFlagEffect(id + 1, RESET_CHAIN, 0, 1)
	e:Reset()
end
function s.damcon(e, tp, eg, ep, ev, re, r, rp)
	return rp == tp and re:GetHandler() == e:GetLabelObject() and re:GetHandler():GetFlagEffect(61705418) ~= 0
end
function s.damop(e, tp, eg, ep, ev, re, r, rp)
	re:GetHandler():ResetFlagEffect(61705418)
	Duel.Damage(tp, 2000, REASON_EFFECT)
	e:Reset()
end


Graverobber
Select 1 Spell Card from your opponent's Graveyard. You can use it as your hand until the end of the turn. If you use it, you take 2000 points of damage.
-- Graverobber
local s, id, o = GetID()
function s.initial_effect(c)
	--Activate
	local e1 = Effect.CreateEffect(c)
	e1:SetCategory(CATEGORY_TOHAND)
	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
	e1:SetType(EFFECT_TYPE_ACTIVATE)
	e1:SetCode(EVENT_FREE_CHAIN)
	e1:SetTarget(s.target)
	e1:SetOperation(s.activate)
	c:RegisterEffect(e1)
end
function s.filter(c)
	return c:IsType(TYPE_SPELL) and c:IsAbleToHand()
end
function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
	if chkc then
		return chkc:IsControler(1 - tp) and chkc:IsLocation(LOCATION_GRAVE) and s.filter(chkc)
	end
	if chk == 0 then
		return Duel.IsExistingTarget(s.filter, tp, 0, LOCATION_GRAVE, 1, nil)
	end
	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
	local g = Duel.SelectTarget(tp, s.filter, tp, 0, LOCATION_GRAVE, 1, 1, nil)
	Duel.SetOperationInfo(0, CATEGORY_TOHAND, g, 1, 0, 0)
end
function s.activate(e, tp, eg, ep, ev, re, r, rp)
	local tc = Duel.GetFirstTarget()
	if tc:IsRelateToEffect(e) then
		Duel.SendtoHand(tc, tp, REASON_EFFECT)
		Duel.ConfirmCards(1 - tp, tc)
		tc:RegisterFlagEffect(id, RESET_EVENT + 0x5c0000 + RESET_PHASE + PHASE_END, 0, 1)
		local e1 = Effect.CreateEffect(e:GetHandler())
		e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
		e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
		e1:SetCode(EVENT_PHASE + PHASE_END)
		e1:SetCountLimit(1)
		e1:SetCondition(s.tgcon)
		e1:SetOperation(s.tgop)
		e1:SetLabelObject(tc)
		e1:SetReset(RESET_EVENT + 0x5c0000 + RESET_PHASE + PHASE_END)
		Duel.RegisterEffect(e1, tp)
		local e3 = Effect.CreateEffect(e:GetHandler())
		e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
		e3:SetCode(EVENT_CHAINING)
		e3:SetCondition(s.actcon)
		e3:SetOperation(s.actop)
		e3:SetLabelObject(tc)
		e3:SetReset(RESET_PHASE + PHASE_END)
		Duel.RegisterEffect(e3, tp)
		local e4 = Effect.CreateEffect(e:GetHandler())
		e4:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
		e4:SetCode(EVENT_CHAIN_SOLVED)
		e4:SetCondition(s.damcon)
		e4:SetOperation(s.damop)
		e4:SetLabelObject(tc)
		e4:SetReset(RESET_PHASE + PHASE_END)
		Duel.RegisterEffect(e4, tp)
	end
end
function s.tgcon(e, tp, eg, ep, ev, re, r, rp)
	local tc = e:GetLabelObject()
	return tc:GetControler() ~= tc:GetOwner() and tc:GetFlagEffect(id) ~= 0
end
function s.tgop(e, tp, eg, ep, ev, re, r, rp)
	local tc = e:GetLabelObject()
	Duel.SendtoGrave(tc, REASON_EFFECT)
end
function s.actcon(e, tp, eg, ep, ev, re, r, rp)
	return rp == tp and re:GetHandler() == e:GetLabelObject() and re:GetHandler():GetFlagEffect(id) ~= 0
end
function s.actop(e, tp, eg, ep, ev, re, r, rp)
	re:GetHandler():RegisterFlagEffect(id + 1, RESET_CHAIN, 0, 1)
	e:Reset()
end
function s.damcon(e, tp, eg, ep, ev, re, r, rp)
	return rp == tp and re:GetHandler() == e:GetLabelObject() and re:GetHandler():GetFlagEffect(61705418) ~= 0
end
function s.damop(e, tp, eg, ep, ev, re, r, rp)
	re:GetHandler():ResetFlagEffect(61705418)
	Duel.Damage(tp, 2000, REASON_EFFECT)
	e:Reset()
end

