name: メガリス・オフィエル
card_text: 「メガリス」カードにより降臨。
  このカード名の2の効果は1ターンに1度しか使用できない。
  1:このカードが儀式召喚に成功した場合に発動できる。
  デッキから「メガリス・オフィエル」以外の「メガリス」モンスター1体を手札に加える。
  2:自分メインフェイズに発動できる。
  レベルの合計が儀式召喚するモンスターのレベル以上になるように、フィールドのこのカードを含む自分の手札・フィールドのモンスターをリリースし、手札から儀式モンスター1体を儀式召喚する。
external_ids: local SETCARD_ID_0 = 0x138 --メガリス
  
lua: local SETCARD_ID_0 = 0x138 --メガリス
  local s, id, o = GetID()
  function s.initial_effect(c)
  	c:EnableReviveLimit()
  	--search
  	local e1=Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id,0))
  	e1:SetCategory(CATEGORY_SEARCH+CATEGORY_TOHAND)
  	e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O)
  	e1:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e1:SetProperty(EFFECT_FLAG_DELAY)
  	e1:SetCondition(s.srcon)
  	e1:SetTarget(s.srtg)
  	e1:SetOperation(s.srop)
  	c:RegisterEffect(e1)
  	--ritual summon
  	local e2=Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id,1))
  	e2:SetCategory(CATEGORY_RELEASE+CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetCountLimit(1,id)
  	e2:SetTarget(s.rstg)
  	e2:SetOperation(s.rsop)
  	c:RegisterEffect(e2)
  end
  function s.srcon(e,tp,eg,ep,ev,re,r,rp)
  	return e:GetHandler():IsSummonType(SUMMON_TYPE_RITUAL)
  end
  function s.srfilter(c)
  	return c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_MONSTER) and not c:IsCode(id) and c:IsAbleToHand()
  end
  function s.srtg(e,tp,eg,ep,ev,re,r,rp,chk)
  	if chk==0 then return Duel.IsExistingMatchingCard(s.srfilter,tp,LOCATION_DECK,0,1,nil) end
  	Duel.SetOperationInfo(0,CATEGORY_TOHAND,nil,1,tp,LOCATION_DECK)
  end
  function s.srop(e,tp,eg,ep,ev,re,r,rp)
  	Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATOHAND)
  	local g=Duel.SelectMatchingCard(tp,s.srfilter,tp,LOCATION_DECK,0,1,1,nil)
  	if g:GetCount()>0 then
  		Duel.SendtoHand(g,nil,REASON_EFFECT)
  		Duel.ConfirmCards(1-tp,g)
  	end
  end
  function s.rcheck(gc)
  	return	function(tp,g,c)
  				return g:IsContains(gc)
  			end
  end
  function s.rstg(e,tp,eg,ep,ev,re,r,rp,chk)
  	local c=e:GetHandler()
  	if chk==0 then
  		local mg=Duel.GetRitualMaterial(tp)
  		aux.RCheckAdditional=s.rcheck(c)
  		local res=mg:IsContains(c) and Duel.IsExistingMatchingCard(aux.RitualUltimateFilter,tp,LOCATION_HAND,0,1,nil,aux.TRUE,e,tp,mg,nil,Card.GetLevel,"Greater")
  		aux.RCheckAdditional=nil
  		return res
  	end
  	Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_HAND)
  end
  function s.rsop(e,tp,eg,ep,ev,re,r,rp)
  	local c=e:GetHandler()
  	::cancel::
  	local mg=Duel.GetRitualMaterial(tp)
  	if c:IsControler(1-tp) or not c:IsRelateToEffect(e) or not mg:IsContains(c) then return end
  	Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON)
  	aux.RCheckAdditional=s.rcheck(c)
  	local tg=Duel.SelectMatchingCard(tp,aux.RitualUltimateFilter,tp,LOCATION_HAND,0,1,1,nil,aux.TRUE,e,tp,mg,nil,Card.GetLevel,"Greater")
  	local tc=tg:GetFirst()
  	if tc then
  		mg=mg:Filter(Card.IsCanBeRitualMaterial,tc,tc)
  		if tc.mat_filter then
  			mg=mg:Filter(tc.mat_filter,tc,tp)
  		else
  		mg:RemoveCard(tc)
  		end
  		if not mg:IsContains(c) then return end
  		Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE)
  		Duel.SetSelectedCard(c)
  		aux.GCheckAdditional=aux.RitualCheckAdditional(tc,tc:GetLevel(),"Greater")
  		local mat=mg:SelectSubGroup(tp,aux.RitualCheck,true,1,tc:GetLevel(),tp,tc,tc:GetLevel(),"Greater")
  		aux.GCheckAdditional=nil
  		if not mat then
  			aux.RCheckAdditional=nil
  			goto cancel
  		end
  		tc:SetMaterial(mat)
  		Duel.ReleaseRitualMaterial(mat)
  		Duel.BreakEffect()
  		Duel.SpecialSummon(tc,SUMMON_TYPE_RITUAL,tp,tp,false,true,POS_FACEUP)
  		tc:CompleteProcedure()
  	end
  	aux.RCheckAdditional=nil
  end
  
  
source_text: メガリス・オフィエル
  「メガリス」カードにより降臨。
  このカード名の2の効果は1ターンに1度しか使用できない。
  1:このカードが儀式召喚に成功した場合に発動できる。
  デッキから「メガリス・オフィエル」以外の「メガリス」モンスター1体を手札に加える。
  2:自分メインフェイズに発動できる。
  レベルの合計が儀式召喚するモンスターのレベル以上になるように、フィールドのこのカードを含む自分の手札・フィールドのモンスターをリリースし、手札から儀式モンスター1体を儀式召喚する。
target_text: -- メガリス・オフィエル
  local SETCARD_ID_0 = 0x138 --メガリス
  local s, id, o = GetID()
  function s.initial_effect(c)
  	c:EnableReviveLimit()
  	--search
  	local e1=Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id,0))
  	e1:SetCategory(CATEGORY_SEARCH+CATEGORY_TOHAND)
  	e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O)
  	e1:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e1:SetProperty(EFFECT_FLAG_DELAY)
  	e1:SetCondition(s.srcon)
  	e1:SetTarget(s.srtg)
  	e1:SetOperation(s.srop)
  	c:RegisterEffect(e1)
  	--ritual summon
  	local e2=Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id,1))
  	e2:SetCategory(CATEGORY_RELEASE+CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetCountLimit(1,id)
  	e2:SetTarget(s.rstg)
  	e2:SetOperation(s.rsop)
  	c:RegisterEffect(e2)
  end
  function s.srcon(e,tp,eg,ep,ev,re,r,rp)
  	return e:GetHandler():IsSummonType(SUMMON_TYPE_RITUAL)
  end
  function s.srfilter(c)
  	return c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_MONSTER) and not c:IsCode(id) and c:IsAbleToHand()
  end
  function s.srtg(e,tp,eg,ep,ev,re,r,rp,chk)
  	if chk==0 then return Duel.IsExistingMatchingCard(s.srfilter,tp,LOCATION_DECK,0,1,nil) end
  	Duel.SetOperationInfo(0,CATEGORY_TOHAND,nil,1,tp,LOCATION_DECK)
  end
  function s.srop(e,tp,eg,ep,ev,re,r,rp)
  	Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATOHAND)
  	local g=Duel.SelectMatchingCard(tp,s.srfilter,tp,LOCATION_DECK,0,1,1,nil)
  	if g:GetCount()>0 then
  		Duel.SendtoHand(g,nil,REASON_EFFECT)
  		Duel.ConfirmCards(1-tp,g)
  	end
  end
  function s.rcheck(gc)
  	return	function(tp,g,c)
  				return g:IsContains(gc)
  			end
  end
  function s.rstg(e,tp,eg,ep,ev,re,r,rp,chk)
  	local c=e:GetHandler()
  	if chk==0 then
  		local mg=Duel.GetRitualMaterial(tp)
  		aux.RCheckAdditional=s.rcheck(c)
  		local res=mg:IsContains(c) and Duel.IsExistingMatchingCard(aux.RitualUltimateFilter,tp,LOCATION_HAND,0,1,nil,aux.TRUE,e,tp,mg,nil,Card.GetLevel,"Greater")
  		aux.RCheckAdditional=nil
  		return res
  	end
  	Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_HAND)
  end
  function s.rsop(e,tp,eg,ep,ev,re,r,rp)
  	local c=e:GetHandler()
  	::cancel::
  	local mg=Duel.GetRitualMaterial(tp)
  	if c:IsControler(1-tp) or not c:IsRelateToEffect(e) or not mg:IsContains(c) then return end
  	Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON)
  	aux.RCheckAdditional=s.rcheck(c)
  	local tg=Duel.SelectMatchingCard(tp,aux.RitualUltimateFilter,tp,LOCATION_HAND,0,1,1,nil,aux.TRUE,e,tp,mg,nil,Card.GetLevel,"Greater")
  	local tc=tg:GetFirst()
  	if tc then
  		mg=mg:Filter(Card.IsCanBeRitualMaterial,tc,tc)
  		if tc.mat_filter then
  			mg=mg:Filter(tc.mat_filter,tc,tp)
  		else
  		mg:RemoveCard(tc)
  		end
  		if not mg:IsContains(c) then return end
  		Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE)
  		Duel.SetSelectedCard(c)
  		aux.GCheckAdditional=aux.RitualCheckAdditional(tc,tc:GetLevel(),"Greater")
  		local mat=mg:SelectSubGroup(tp,aux.RitualCheck,true,1,tc:GetLevel(),tp,tc,tc:GetLevel(),"Greater")
  		aux.GCheckAdditional=nil
  		if not mat then
  			aux.RCheckAdditional=nil
  			goto cancel
  		end
  		tc:SetMaterial(mat)
  		Duel.ReleaseRitualMaterial(mat)
  		Duel.BreakEffect()
  		Duel.SpecialSummon(tc,SUMMON_TYPE_RITUAL,tp,tp,false,true,POS_FACEUP)
  		tc:CompleteProcedure()
  	end
  	aux.RCheckAdditional=nil
  end
  
  