name: ヘヴィ・トリガー
card_text: 「ヴァレルロード・R・ドラゴン」の降臨に必要。
  1:レベルの合計が8以上になるように、自分の手札・フィールドのモンスターをリリース、またはリリースの代わりに自分の手札・フィールドの「ヴァレット」モンスターを破壊し、手札から「ヴァレルロード・R・ドラゴン」を儀式召喚する。
  この効果で特殊召喚したモンスターはEXデッキから特殊召喚されたモンスターとの戦闘では破壊されず、EXデッキから特殊召喚されたモンスターが発動した効果を受けない。
external_ids: local CARD_ID_0 = 7987191 --ヴァレルロード・R・ドラゴン
  local SETCARD_ID_0 = 0x102 --ヴァレット
  
lua: local CARD_ID_0 = 7987191 --ヴァレルロード・R・ドラゴン
  local SETCARD_ID_0 = 0x102 --ヴァレット
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.lv(c)
  	return 8
  end
  function s.filter(c, e, tp)
  	return c:IsCode(CARD_ID_0)
  end
  function s.mfilter(c, e)
  	return c:IsLevelAbove(0) and c:IsSetCard(SETCARD_ID_0) and c:IsDestructable(e)
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		local mg1 = Duel.GetRitualMaterial(tp)
  		local mg2 = Duel.GetMatchingGroup(s.mfilter, tp, LOCATION_HAND + LOCATION_MZONE, 0, nil, e)
  		return Duel.IsExistingMatchingCard(aux.RitualUltimateFilter, tp, LOCATION_HAND, 0, 1, nil, s.filter, e, tp, mg1, mg2, s.lv, "Greater")
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_HAND)
  	Duel.SetOperationInfo(0, CATEGORY_DESTROY, nil, 0, tp, LOCATION_HAND + LOCATION_MZONE)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	::cancel::
  	local mg1 = Duel.GetRitualMaterial(tp)
  	local mg2 = Duel.GetMatchingGroup(s.mfilter, tp, LOCATION_HAND + LOCATION_MZONE, 0, nil, e)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  	local g = Duel.SelectMatchingCard(tp, aux.RitualUltimateFilter, tp, LOCATION_HAND, 0, 1, 1, nil, s.filter, e, tp, mg1, mg2, s.lv, "Greater")
  	local tc = g:GetFirst()
  	if tc then
  		local mg = mg1:Filter(Card.IsCanBeRitualMaterial, tc, tc)
  		mg:Merge(mg2)
  		if tc.mat_filter then
  			mg = mg:Filter(tc.mat_filter, tc, tp)
  		else
  			mg:RemoveCard(tc)
  		end
  		Duel.Hint(HINT_SELECTMSG, tp, aux.Stringid(id, 1))
  		aux.GCheckAdditional = aux.RitualCheckAdditional(tc, 8, "Greater")
  		local mat = mg:SelectSubGroup(tp, aux.RitualCheck, true, 1, 8, tp, tc, 8, "Greater")
  		aux.GCheckAdditional = nil
  		if not mat then
  			goto cancel
  		end
  		tc:SetMaterial(mat)
  		local ct1 = mat:FilterCount(aux.IsInGroup, nil, mg1)
  		local ct2 = mat:FilterCount(aux.IsInGroup, nil, mg2)
  		local dg = mat - mg1
  		local mat1 = mat:Clone()
  		local mat2
  		if ct1 == 0 then
  			mat2 = mat
  			mat1:Clear()
  		elseif ct2 > 0 and (#dg > 0 or Duel.SelectYesNo(tp, aux.Stringid(id, 2))) then
  			local min = math.max(#dg, 1)
  			Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DESTROY)
  			mat2 = mat:SelectSubGroup(tp, s.descheck, false, min, #mat, mg2, dg)
  			mat1:Sub(mat2)
  		end
  		if #mat1 > 0 then
  			Duel.ReleaseRitualMaterial(mat1)
  		end
  		if mat2 then
  			Duel.ConfirmCards(1 - tp, mat2)
  			Duel.Destroy(mat2, REASON_EFFECT + REASON_MATERIAL + REASON_RITUAL)
  		end
  		Duel.BreakEffect()
  		Duel.SpecialSummon(tc, SUMMON_TYPE_RITUAL, tp, tp, false, true, POS_FACEUP)
  		tc:CompleteProcedure()
  		--indes
  		local e1 = Effect.CreateEffect(e:GetHandler())
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_INDESTRUCTABLE_BATTLE)
  		e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
  		e1:SetRange(LOCATION_MZONE)
  		e1:SetValue(s.indval)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  		tc:RegisterEffect(e1, true)
  		--immune
  		local e2 = e1:Clone()
  		e2:SetCode(EFFECT_IMMUNE_EFFECT)
  		e2:SetValue(s.immval)
  		tc:RegisterEffect(e2, true)
  		tc:RegisterFlagEffect(0, RESET_EVENT + RESETS_STANDARD, EFFECT_FLAG_CLIENT_HINT, 1, 0, aux.Stringid(id, 3))
  	end
  end
  function s.descheck(g, mg2, dg)
  	return g:FilterCount(aux.IsInGroup, nil, dg) == #dg and mg2:FilterCount(aux.IsInGroup, nil, g) == #g
  end
  function s.indval(e, c)
  	return c:IsSummonLocation(LOCATION_EXTRA)
  end
  function s.immval(e, te)
  	local tc = te:GetOwner()
  	return tc ~= e:GetHandler() and te:IsActiveType(TYPE_MONSTER) and te:IsActivated() and te:GetActivateLocation() == LOCATION_MZONE and tc:IsSummonLocation(LOCATION_EXTRA)
  end
  
  
source_text: ヘヴィ・トリガー
  「ヴァレルロード・R・ドラゴン」の降臨に必要。
  1:レベルの合計が8以上になるように、自分の手札・フィールドのモンスターをリリース、またはリリースの代わりに自分の手札・フィールドの「ヴァレット」モンスターを破壊し、手札から「ヴァレルロード・R・ドラゴン」を儀式召喚する。
  この効果で特殊召喚したモンスターはEXデッキから特殊召喚されたモンスターとの戦闘では破壊されず、EXデッキから特殊召喚されたモンスターが発動した効果を受けない。
target_text: -- ヘヴィ・トリガー
  local CARD_ID_0 = 7987191 --ヴァレルロード・R・ドラゴン
  local SETCARD_ID_0 = 0x102 --ヴァレット
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.lv(c)
  	return 8
  end
  function s.filter(c, e, tp)
  	return c:IsCode(CARD_ID_0)
  end
  function s.mfilter(c, e)
  	return c:IsLevelAbove(0) and c:IsSetCard(SETCARD_ID_0) and c:IsDestructable(e)
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		local mg1 = Duel.GetRitualMaterial(tp)
  		local mg2 = Duel.GetMatchingGroup(s.mfilter, tp, LOCATION_HAND + LOCATION_MZONE, 0, nil, e)
  		return Duel.IsExistingMatchingCard(aux.RitualUltimateFilter, tp, LOCATION_HAND, 0, 1, nil, s.filter, e, tp, mg1, mg2, s.lv, "Greater")
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_HAND)
  	Duel.SetOperationInfo(0, CATEGORY_DESTROY, nil, 0, tp, LOCATION_HAND + LOCATION_MZONE)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	::cancel::
  	local mg1 = Duel.GetRitualMaterial(tp)
  	local mg2 = Duel.GetMatchingGroup(s.mfilter, tp, LOCATION_HAND + LOCATION_MZONE, 0, nil, e)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  	local g = Duel.SelectMatchingCard(tp, aux.RitualUltimateFilter, tp, LOCATION_HAND, 0, 1, 1, nil, s.filter, e, tp, mg1, mg2, s.lv, "Greater")
  	local tc = g:GetFirst()
  	if tc then
  		local mg = mg1:Filter(Card.IsCanBeRitualMaterial, tc, tc)
  		mg:Merge(mg2)
  		if tc.mat_filter then
  			mg = mg:Filter(tc.mat_filter, tc, tp)
  		else
  			mg:RemoveCard(tc)
  		end
  		Duel.Hint(HINT_SELECTMSG, tp, aux.Stringid(id, 1))
  		aux.GCheckAdditional = aux.RitualCheckAdditional(tc, 8, "Greater")
  		local mat = mg:SelectSubGroup(tp, aux.RitualCheck, true, 1, 8, tp, tc, 8, "Greater")
  		aux.GCheckAdditional = nil
  		if not mat then
  			goto cancel
  		end
  		tc:SetMaterial(mat)
  		local ct1 = mat:FilterCount(aux.IsInGroup, nil, mg1)
  		local ct2 = mat:FilterCount(aux.IsInGroup, nil, mg2)
  		local dg = mat - mg1
  		local mat1 = mat:Clone()
  		local mat2
  		if ct1 == 0 then
  			mat2 = mat
  			mat1:Clear()
  		elseif ct2 > 0 and (#dg > 0 or Duel.SelectYesNo(tp, aux.Stringid(id, 2))) then
  			local min = math.max(#dg, 1)
  			Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DESTROY)
  			mat2 = mat:SelectSubGroup(tp, s.descheck, false, min, #mat, mg2, dg)
  			mat1:Sub(mat2)
  		end
  		if #mat1 > 0 then
  			Duel.ReleaseRitualMaterial(mat1)
  		end
  		if mat2 then
  			Duel.ConfirmCards(1 - tp, mat2)
  			Duel.Destroy(mat2, REASON_EFFECT + REASON_MATERIAL + REASON_RITUAL)
  		end
  		Duel.BreakEffect()
  		Duel.SpecialSummon(tc, SUMMON_TYPE_RITUAL, tp, tp, false, true, POS_FACEUP)
  		tc:CompleteProcedure()
  		--indes
  		local e1 = Effect.CreateEffect(e:GetHandler())
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_INDESTRUCTABLE_BATTLE)
  		e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
  		e1:SetRange(LOCATION_MZONE)
  		e1:SetValue(s.indval)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  		tc:RegisterEffect(e1, true)
  		--immune
  		local e2 = e1:Clone()
  		e2:SetCode(EFFECT_IMMUNE_EFFECT)
  		e2:SetValue(s.immval)
  		tc:RegisterEffect(e2, true)
  		tc:RegisterFlagEffect(0, RESET_EVENT + RESETS_STANDARD, EFFECT_FLAG_CLIENT_HINT, 1, 0, aux.Stringid(id, 3))
  	end
  end
  function s.descheck(g, mg2, dg)
  	return g:FilterCount(aux.IsInGroup, nil, dg) == #dg and mg2:FilterCount(aux.IsInGroup, nil, g) == #g
  end
  function s.indval(e, c)
  	return c:IsSummonLocation(LOCATION_EXTRA)
  end
  function s.immval(e, te)
  	local tc = te:GetOwner()
  	return tc ~= e:GetHandler() and te:IsActiveType(TYPE_MONSTER) and te:IsActivated() and te:GetActivateLocation() == LOCATION_MZONE and tc:IsSummonLocation(LOCATION_EXTRA)
  end
  
  