name: Vampire
card_text: If this card inflicts battle damage to your opponent: Declare 1 card type (Monster, Spell, or Trap); your opponent sends 1 card of that type from their Deck to the GY. Once per turn, during your next Standby Phase after this card in your possession was destroyed and sent to your GY by an opponent's card effect: Special Summon this card from the GY.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--spsummon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_CONTINUOUS)
  	e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
  	e1:SetCode(EVENT_TO_GRAVE)
  	e1:SetOperation(s.spr)
  	c:RegisterEffect(e1)
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 4))
  	e2:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_F)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCode(EVENT_PHASE + PHASE_STANDBY)
  	e2:SetCondition(s.spcon)
  	e2:SetTarget(s.sptg)
  	e2:SetOperation(s.spop)
  	e2:SetLabelObject(e1)
  	c:RegisterEffect(e2)
  	--to grave
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 0))
  	e3:SetCategory(CATEGORY_TOGRAVE)
  	e3:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_F)
  	e3:SetCode(EVENT_BATTLE_DAMAGE)
  	e3:SetCondition(s.tgcon)
  	e3:SetTarget(s.tgtg)
  	e3:SetOperation(s.tgop)
  	c:RegisterEffect(e3)
  end
  function s.spr(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if bit.band(r, 0x41) ~= 0x41 or rp == tp or c:IsPreviousControler(1 - tp) then
  		return
  	end
  	if Duel.GetTurnPlayer() == tp and Duel.GetCurrentPhase() == PHASE_STANDBY then
  		e:SetLabel(Duel.GetTurnCount())
  		c:RegisterFlagEffect(id, RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_STANDBY + RESET_SELF_TURN, 0, 2)
  	else
  		e:SetLabel(0)
  		c:RegisterFlagEffect(id, RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_STANDBY + RESET_SELF_TURN, 0, 1)
  	end
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	return e:GetLabelObject():GetLabel() ~= Duel.GetTurnCount() and tp == Duel.GetTurnPlayer() and c:GetFlagEffect(id) > 0
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local c = e:GetHandler()
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  	c:ResetFlagEffect(id)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) then
  		Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  function s.tgcon(e, tp, eg, ep, ev, re, r, rp)
  	return ep ~= tp
  end
  function s.tgtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CARDTYPE)
  	local op = Duel.AnnounceType(tp)
  	e:SetLabel(op)
  	Duel.SetOperationInfo(0, CATEGORY_TOGRAVE, nil, 1, 1 - tp, LOCATION_DECK)
  end
  function s.tgfilter(c, ty)
  	return c:IsType(ty) and c:IsAbleToGrave()
  end
  function s.tgop(e, tp, eg, ep, ev, re, r, rp)
  	local g = nil
  	Duel.Hint(HINT_SELECTMSG, 1 - tp, HINTMSG_TOGRAVE)
  	if e:GetLabel() == 0 then
  		g = Duel.SelectMatchingCard(1 - tp, s.tgfilter, 1 - tp, LOCATION_DECK, 0, 1, 1, nil, TYPE_MONSTER)
  	elseif e:GetLabel() == 1 then
  		g = Duel.SelectMatchingCard(1 - tp, s.tgfilter, 1 - tp, LOCATION_DECK, 0, 1, 1, nil, TYPE_SPELL)
  	else
  		g = Duel.SelectMatchingCard(1 - tp, s.tgfilter, 1 - tp, LOCATION_DECK, 0, 1, 1, nil, TYPE_TRAP)
  	end
  	Duel.SendtoGrave(g, REASON_EFFECT)
  end
  
  
source_text: Vampire
  If this card inflicts battle damage to your opponent: Declare 1 card type (Monster, Spell, or Trap); your opponent sends 1 card of that type from their Deck to the GY. Once per turn, during your next Standby Phase after this card in your possession was destroyed and sent to your GY by an opponent's card effect: Special Summon this card from the GY.
target_text: -- Vampire
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--spsummon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_CONTINUOUS)
  	e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
  	e1:SetCode(EVENT_TO_GRAVE)
  	e1:SetOperation(s.spr)
  	c:RegisterEffect(e1)
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 4))
  	e2:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_F)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCode(EVENT_PHASE + PHASE_STANDBY)
  	e2:SetCondition(s.spcon)
  	e2:SetTarget(s.sptg)
  	e2:SetOperation(s.spop)
  	e2:SetLabelObject(e1)
  	c:RegisterEffect(e2)
  	--to grave
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 0))
  	e3:SetCategory(CATEGORY_TOGRAVE)
  	e3:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_F)
  	e3:SetCode(EVENT_BATTLE_DAMAGE)
  	e3:SetCondition(s.tgcon)
  	e3:SetTarget(s.tgtg)
  	e3:SetOperation(s.tgop)
  	c:RegisterEffect(e3)
  end
  function s.spr(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if bit.band(r, 0x41) ~= 0x41 or rp == tp or c:IsPreviousControler(1 - tp) then
  		return
  	end
  	if Duel.GetTurnPlayer() == tp and Duel.GetCurrentPhase() == PHASE_STANDBY then
  		e:SetLabel(Duel.GetTurnCount())
  		c:RegisterFlagEffect(id, RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_STANDBY + RESET_SELF_TURN, 0, 2)
  	else
  		e:SetLabel(0)
  		c:RegisterFlagEffect(id, RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_STANDBY + RESET_SELF_TURN, 0, 1)
  	end
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	return e:GetLabelObject():GetLabel() ~= Duel.GetTurnCount() and tp == Duel.GetTurnPlayer() and c:GetFlagEffect(id) > 0
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local c = e:GetHandler()
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  	c:ResetFlagEffect(id)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) then
  		Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  function s.tgcon(e, tp, eg, ep, ev, re, r, rp)
  	return ep ~= tp
  end
  function s.tgtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CARDTYPE)
  	local op = Duel.AnnounceType(tp)
  	e:SetLabel(op)
  	Duel.SetOperationInfo(0, CATEGORY_TOGRAVE, nil, 1, 1 - tp, LOCATION_DECK)
  end
  function s.tgfilter(c, ty)
  	return c:IsType(ty) and c:IsAbleToGrave()
  end
  function s.tgop(e, tp, eg, ep, ev, re, r, rp)
  	local g = nil
  	Duel.Hint(HINT_SELECTMSG, 1 - tp, HINTMSG_TOGRAVE)
  	if e:GetLabel() == 0 then
  		g = Duel.SelectMatchingCard(1 - tp, s.tgfilter, 1 - tp, LOCATION_DECK, 0, 1, 1, nil, TYPE_MONSTER)
  	elseif e:GetLabel() == 1 then
  		g = Duel.SelectMatchingCard(1 - tp, s.tgfilter, 1 - tp, LOCATION_DECK, 0, 1, 1, nil, TYPE_SPELL)
  	else
  		g = Duel.SelectMatchingCard(1 - tp, s.tgfilter, 1 - tp, LOCATION_DECK, 0, 1, 1, nil, TYPE_TRAP)
  	end
  	Duel.SendtoGrave(g, REASON_EFFECT)
  end
  
  