name: Gravekeeper's
card_text: During your Main Phase, if "Necrovalley" is on the field: You can Fusion Summon 1 Spellcaster Fusion Monster from your Extra Deck, using this card you control and other monsters from your hand or field as Fusion Material. You can only use this effect of "Gravekeeper's Spiritualist" once per turn.
external_ids: local CARD_ID_0 = 47355498 --Necrovalley
  
lua: local CARD_ID_0 = 47355498 --Necrovalley
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	--fusion summon
  	local e1 = FusionSpell.CreateSummonEffect(c, {
  		fusfilter = s.fusfilter,
  		gc = s.gc,
  	})
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCountLimit(1, id)
  	e1:SetCondition(s.condition)
  	c:RegisterEffect(e1)
  end
  
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsEnvironment(CARD_ID_0) or Duel.IsExistingMatchingCard(function(c)
  		return c:IsCode(CARD_ID_0) and c:IsFaceup()
  	end, tp, LOCATION_ONFIELD, LOCATION_ONFIELD, 1, nil)
  end
  
  function s.fusfilter(c)
  	return c:IsRace(RACE_SPELLCASTER)
  end
  
  function s.gc(e)
  	return e:GetHandler()
  end
  
  
source_text: Gravekeeper's
  During your Main Phase, if "Necrovalley" is on the field: You can Fusion Summon 1 Spellcaster Fusion Monster from your Extra Deck, using this card you control and other monsters from your hand or field as Fusion Material. You can only use this effect of "Gravekeeper's Spiritualist" once per turn.
target_text: -- Gravekeeper's
  local CARD_ID_0 = 47355498 --Necrovalley
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	--fusion summon
  	local e1 = FusionSpell.CreateSummonEffect(c, {
  		fusfilter = s.fusfilter,
  		gc = s.gc,
  	})
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCountLimit(1, id)
  	e1:SetCondition(s.condition)
  	c:RegisterEffect(e1)
  end
  
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsEnvironment(CARD_ID_0) or Duel.IsExistingMatchingCard(function(c)
  		return c:IsCode(CARD_ID_0) and c:IsFaceup()
  	end, tp, LOCATION_ONFIELD, LOCATION_ONFIELD, 1, nil)
  end
  
  function s.fusfilter(c)
  	return c:IsRace(RACE_SPELLCASTER)
  end
  
  function s.gc(e)
  	return e:GetHandler()
  end
  
  