name: 炎王の聖域
card_text: このカード名のカードは1ターンに1枚しか発動できない。
  1:このカードの発動時の効果処理として、デッキから「炎王の孤島」1枚を自分のフィールドゾーンに表側表示で置く事ができる。
  2:1ターンに1度、自分のフィールドゾーンのカードが効果で破壊される場合、代わりに自分の手札・フィールド(表側表示)の炎属性モンスター1体を破壊できる。
  3:1ターンに1度、相手がモンスターを特殊召喚した場合に発動できる。
  自分フィールドの「炎王」モンスターのみを素材として炎属性Xモンスター1体のX召喚を行う。
external_ids: local CARD_ID_0 = 57554544 --炎王の孤島
  local SETCARD_ID_0 = 0x81 --炎王
  
lua: local CARD_ID_0 = 57554544 --炎王の孤島
  local SETCARD_ID_0 = 0x81 --炎王
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_CONTINUOUS + EFFECT_TYPE_FIELD)
  	e2:SetCode(EFFECT_DESTROY_REPLACE)
  	e2:SetRange(LOCATION_SZONE)
  	e2:SetCountLimit(1)
  	e2:SetTarget(s.desreptg)
  	e2:SetValue(s.desrepval)
  	e2:SetOperation(s.desrepop)
  	c:RegisterEffect(e2)
  	local e3 = Effect.CreateEffect(c)
  	e3:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e3:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e3:SetRange(LOCATION_SZONE)
  	e3:SetProperty(EFFECT_FLAG_DELAY)
  	e3:SetCountLimit(1)
  	e3:SetCondition(s.spcon)
  	e3:SetTarget(s.sptg)
  	e3:SetOperation(s.spop)
  	c:RegisterEffect(e3)
  end
  function s.stfilter(c, tp)
  	return c:IsCode(CARD_ID_0) and not c:IsForbidden() and c:CheckUniqueOnField(tp)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.GetMatchingGroup(s.stfilter, tp, LOCATION_DECK, 0, nil)
  	if g:GetCount() > 0 and Duel.SelectYesNo(tp, aux.Stringid(id, 0)) then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TOFIELD)
  		local tc = Duel.SelectMatchingCard(tp, s.stfilter, tp, LOCATION_DECK, 0, 1, 1, nil, tp):GetFirst()
  		if tc then
  			local fc = Duel.GetFieldCard(tp, LOCATION_SZONE, 5)
  			if fc then
  				Duel.SendtoGrave(fc, REASON_RULE)
  				Duel.BreakEffect()
  			end
  			Duel.MoveToField(tc, tp, tp, LOCATION_FZONE, POS_FACEUP, true)
  		end
  	end
  end
  function s.repfilter(c, tp)
  	return c:IsControler(tp) and c:IsLocation(LOCATION_FZONE) and c:IsReason(REASON_EFFECT) and not c:IsReason(REASON_REPLACE)
  end
  function s.desfilter(c, e, tp)
  	return c:IsControler(tp) and c:IsFaceupEx() and c:IsAttribute(ATTRIBUTE_FIRE) and c:IsDestructable(e) and not c:IsStatus(STATUS_DESTROY_CONFIRMED + STATUS_BATTLE_DESTROYED)
  end
  function s.desreptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return eg:IsExists(s.repfilter, 1, nil, tp) and Duel.IsExistingMatchingCard(s.desfilter, tp, LOCATION_MZONE + LOCATION_HAND, 0, 1, nil, e, tp)
  	end
  	if Duel.SelectEffectYesNo(tp, e:GetHandler(), 96) then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DESREPLACE)
  		local g = Duel.SelectMatchingCard(tp, s.desfilter, tp, LOCATION_MZONE + LOCATION_HAND, 0, 1, 1, nil, e, tp)
  		e:SetLabelObject(g:GetFirst())
  		g:GetFirst():SetStatus(STATUS_DESTROY_CONFIRMED, true)
  		return true
  	end
  	return false
  end
  function s.desrepval(e, c)
  	return s.repfilter(c, e:GetHandlerPlayer())
  end
  function s.desrepop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.Hint(HINT_CARD, 0, id)
  	local tc = e:GetLabelObject()
  	tc:SetStatus(STATUS_DESTROY_CONFIRMED, false)
  	Duel.Destroy(tc, REASON_EFFECT + REASON_REPLACE)
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return eg:IsExists(Card.IsSummonPlayer, 1, nil, 1 - tp)
  end
  function s.mfilter(c)
  	return c:IsFaceup() and c:IsSetCard(SETCARD_ID_0) and not c:IsType(TYPE_TOKEN)
  end
  function s.xyzfilter(c, mg)
  	return c:IsAttribute(ATTRIBUTE_FIRE) and c:IsXyzSummonable(mg)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		local g = Duel.GetMatchingGroup(s.mfilter, tp, LOCATION_MZONE, 0, nil)
  		return Duel.IsExistingMatchingCard(s.xyzfilter, tp, LOCATION_EXTRA, 0, 1, nil, g)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_EXTRA)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.GetMatchingGroup(s.mfilter, tp, LOCATION_MZONE, 0, nil)
  	local xyzg = Duel.GetMatchingGroup(s.xyzfilter, tp, LOCATION_EXTRA, 0, nil, g)
  	if xyzg:GetCount() > 0 then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  		local xyz = xyzg:Select(tp, 1, 1, nil):GetFirst()
  		Duel.XyzSummon(tp, xyz, g, 1, 6)
  	end
  end
  
  
source_text: 炎王の聖域
  このカード名のカードは1ターンに1枚しか発動できない。
  1:このカードの発動時の効果処理として、デッキから「炎王の孤島」1枚を自分のフィールドゾーンに表側表示で置く事ができる。
  2:1ターンに1度、自分のフィールドゾーンのカードが効果で破壊される場合、代わりに自分の手札・フィールド(表側表示)の炎属性モンスター1体を破壊できる。
  3:1ターンに1度、相手がモンスターを特殊召喚した場合に発動できる。
  自分フィールドの「炎王」モンスターのみを素材として炎属性Xモンスター1体のX召喚を行う。
target_text: -- 炎王の聖域
  local CARD_ID_0 = 57554544 --炎王の孤島
  local SETCARD_ID_0 = 0x81 --炎王
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_CONTINUOUS + EFFECT_TYPE_FIELD)
  	e2:SetCode(EFFECT_DESTROY_REPLACE)
  	e2:SetRange(LOCATION_SZONE)
  	e2:SetCountLimit(1)
  	e2:SetTarget(s.desreptg)
  	e2:SetValue(s.desrepval)
  	e2:SetOperation(s.desrepop)
  	c:RegisterEffect(e2)
  	local e3 = Effect.CreateEffect(c)
  	e3:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e3:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e3:SetRange(LOCATION_SZONE)
  	e3:SetProperty(EFFECT_FLAG_DELAY)
  	e3:SetCountLimit(1)
  	e3:SetCondition(s.spcon)
  	e3:SetTarget(s.sptg)
  	e3:SetOperation(s.spop)
  	c:RegisterEffect(e3)
  end
  function s.stfilter(c, tp)
  	return c:IsCode(CARD_ID_0) and not c:IsForbidden() and c:CheckUniqueOnField(tp)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.GetMatchingGroup(s.stfilter, tp, LOCATION_DECK, 0, nil)
  	if g:GetCount() > 0 and Duel.SelectYesNo(tp, aux.Stringid(id, 0)) then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TOFIELD)
  		local tc = Duel.SelectMatchingCard(tp, s.stfilter, tp, LOCATION_DECK, 0, 1, 1, nil, tp):GetFirst()
  		if tc then
  			local fc = Duel.GetFieldCard(tp, LOCATION_SZONE, 5)
  			if fc then
  				Duel.SendtoGrave(fc, REASON_RULE)
  				Duel.BreakEffect()
  			end
  			Duel.MoveToField(tc, tp, tp, LOCATION_FZONE, POS_FACEUP, true)
  		end
  	end
  end
  function s.repfilter(c, tp)
  	return c:IsControler(tp) and c:IsLocation(LOCATION_FZONE) and c:IsReason(REASON_EFFECT) and not c:IsReason(REASON_REPLACE)
  end
  function s.desfilter(c, e, tp)
  	return c:IsControler(tp) and c:IsFaceupEx() and c:IsAttribute(ATTRIBUTE_FIRE) and c:IsDestructable(e) and not c:IsStatus(STATUS_DESTROY_CONFIRMED + STATUS_BATTLE_DESTROYED)
  end
  function s.desreptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return eg:IsExists(s.repfilter, 1, nil, tp) and Duel.IsExistingMatchingCard(s.desfilter, tp, LOCATION_MZONE + LOCATION_HAND, 0, 1, nil, e, tp)
  	end
  	if Duel.SelectEffectYesNo(tp, e:GetHandler(), 96) then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DESREPLACE)
  		local g = Duel.SelectMatchingCard(tp, s.desfilter, tp, LOCATION_MZONE + LOCATION_HAND, 0, 1, 1, nil, e, tp)
  		e:SetLabelObject(g:GetFirst())
  		g:GetFirst():SetStatus(STATUS_DESTROY_CONFIRMED, true)
  		return true
  	end
  	return false
  end
  function s.desrepval(e, c)
  	return s.repfilter(c, e:GetHandlerPlayer())
  end
  function s.desrepop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.Hint(HINT_CARD, 0, id)
  	local tc = e:GetLabelObject()
  	tc:SetStatus(STATUS_DESTROY_CONFIRMED, false)
  	Duel.Destroy(tc, REASON_EFFECT + REASON_REPLACE)
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return eg:IsExists(Card.IsSummonPlayer, 1, nil, 1 - tp)
  end
  function s.mfilter(c)
  	return c:IsFaceup() and c:IsSetCard(SETCARD_ID_0) and not c:IsType(TYPE_TOKEN)
  end
  function s.xyzfilter(c, mg)
  	return c:IsAttribute(ATTRIBUTE_FIRE) and c:IsXyzSummonable(mg)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		local g = Duel.GetMatchingGroup(s.mfilter, tp, LOCATION_MZONE, 0, nil)
  		return Duel.IsExistingMatchingCard(s.xyzfilter, tp, LOCATION_EXTRA, 0, 1, nil, g)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_EXTRA)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.GetMatchingGroup(s.mfilter, tp, LOCATION_MZONE, 0, nil)
  	local xyzg = Duel.GetMatchingGroup(s.xyzfilter, tp, LOCATION_EXTRA, 0, nil, g)
  	if xyzg:GetCount() > 0 then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  		local xyz = xyzg:Select(tp, 1, 1, nil):GetFirst()
  		Duel.XyzSummon(tp, xyz, g, 1, 6)
  	end
  end
  
  