name: ルーレット・スパイダー
card_text: 1:相手モンスターの攻撃宣言時に発動できる。
  サイコロを1回振り、出た目の効果を適用する。
  1・自分のLPを半分にする。
  2・その攻撃を自分への直接攻撃にする。
  3・自分フィールドのモンスター1体を選び、そのモンスターに攻撃対象を移し替えてダメージ計算を行う。
  4・攻撃モンスター以外の相手フィールドのモンスター1体を選び、そのモンスターに攻撃対象を移し替えてダメージ計算を行う。
  5・その攻撃を無効にし、そのモンスターの攻撃力分のダメージを相手に与える。
  6・その相手モンスターを破壊する。
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_DICE + CATEGORY_DAMAGE + CATEGORY_DESTROY)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_ATTACK_ANNOUNCE)
  	e1:SetCondition(s.condition)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return ep ~= tp
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local at = Duel.GetAttacker()
  	Duel.SetTargetCard(at)
  	Duel.SetOperationInfo(0, CATEGORY_DICE, nil, 0, tp, 1)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local dc = Duel.TossDice(tp, 1)
  	if dc == 1 then
  		local lp = Duel.GetLP(tp)
  		Duel.SetLP(tp, math.ceil(lp / 2))
  		return
  	elseif dc == 2 then
  		Duel.ChangeAttackTarget(nil)
  		return
  	elseif dc == 3 then
  		local bc = Duel.GetAttackTarget()
  		local g = Duel.GetMatchingGroup(nil, tp, LOCATION_MZONE, 0, bc)
  		if g:GetCount() > 0 then
  			Duel.Hint(HINT_SELECTMSG, tp, aux.Stringid(id, 0))
  			local tc = g:Select(tp, 1, 1, nil):GetFirst()
  			local at = Duel.GetAttacker()
  			if at:IsAttackable() and not at:IsImmuneToEffect(e) and not tc:IsImmuneToEffect(e) then
  				Duel.CalculateDamage(at, tc)
  			end
  		end
  		return
  	elseif dc == 4 then
  		local at = Duel.GetAttacker()
  		local g = Duel.GetMatchingGroup(nil, tp, 0, LOCATION_MZONE, at)
  		if g:GetCount() > 0 then
  			Duel.Hint(HINT_SELECTMSG, tp, aux.Stringid(id, 0))
  			local tc = g:Select(tp, 1, 1, nil):GetFirst()
  			local at = Duel.GetAttacker()
  			if at:IsAttackable() and not at:IsImmuneToEffect(e) and not tc:IsImmuneToEffect(e) then
  				Duel.CalculateDamage(at, tc)
  			end
  		end
  		return
  	elseif dc == 5 then
  		local at = Duel.GetFirstTarget()
  		if at:IsRelateToEffect(e) and Duel.NegateAttack() and at:GetAttack() > 0 then
  			Duel.Damage(1 - tp, at:GetAttack(), REASON_EFFECT)
  		end
  		return
  	elseif dc == 6 then
  		local at = Duel.GetFirstTarget()
  		if at:IsRelateToEffect(e) and at:IsControler(1 - tp) and at:IsType(TYPE_MONSTER) then
  			Duel.Destroy(at, REASON_EFFECT)
  		end
  	end
  end
  
  
source_text: ルーレット・スパイダー
  1:相手モンスターの攻撃宣言時に発動できる。
  サイコロを1回振り、出た目の効果を適用する。
  1・自分のLPを半分にする。
  2・その攻撃を自分への直接攻撃にする。
  3・自分フィールドのモンスター1体を選び、そのモンスターに攻撃対象を移し替えてダメージ計算を行う。
  4・攻撃モンスター以外の相手フィールドのモンスター1体を選び、そのモンスターに攻撃対象を移し替えてダメージ計算を行う。
  5・その攻撃を無効にし、そのモンスターの攻撃力分のダメージを相手に与える。
  6・その相手モンスターを破壊する。
target_text: -- ルーレット・スパイダー
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_DICE + CATEGORY_DAMAGE + CATEGORY_DESTROY)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_ATTACK_ANNOUNCE)
  	e1:SetCondition(s.condition)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return ep ~= tp
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local at = Duel.GetAttacker()
  	Duel.SetTargetCard(at)
  	Duel.SetOperationInfo(0, CATEGORY_DICE, nil, 0, tp, 1)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local dc = Duel.TossDice(tp, 1)
  	if dc == 1 then
  		local lp = Duel.GetLP(tp)
  		Duel.SetLP(tp, math.ceil(lp / 2))
  		return
  	elseif dc == 2 then
  		Duel.ChangeAttackTarget(nil)
  		return
  	elseif dc == 3 then
  		local bc = Duel.GetAttackTarget()
  		local g = Duel.GetMatchingGroup(nil, tp, LOCATION_MZONE, 0, bc)
  		if g:GetCount() > 0 then
  			Duel.Hint(HINT_SELECTMSG, tp, aux.Stringid(id, 0))
  			local tc = g:Select(tp, 1, 1, nil):GetFirst()
  			local at = Duel.GetAttacker()
  			if at:IsAttackable() and not at:IsImmuneToEffect(e) and not tc:IsImmuneToEffect(e) then
  				Duel.CalculateDamage(at, tc)
  			end
  		end
  		return
  	elseif dc == 4 then
  		local at = Duel.GetAttacker()
  		local g = Duel.GetMatchingGroup(nil, tp, 0, LOCATION_MZONE, at)
  		if g:GetCount() > 0 then
  			Duel.Hint(HINT_SELECTMSG, tp, aux.Stringid(id, 0))
  			local tc = g:Select(tp, 1, 1, nil):GetFirst()
  			local at = Duel.GetAttacker()
  			if at:IsAttackable() and not at:IsImmuneToEffect(e) and not tc:IsImmuneToEffect(e) then
  				Duel.CalculateDamage(at, tc)
  			end
  		end
  		return
  	elseif dc == 5 then
  		local at = Duel.GetFirstTarget()
  		if at:IsRelateToEffect(e) and Duel.NegateAttack() and at:GetAttack() > 0 then
  			Duel.Damage(1 - tp, at:GetAttack(), REASON_EFFECT)
  		end
  		return
  	elseif dc == 6 then
  		local at = Duel.GetFirstTarget()
  		if at:IsRelateToEffect(e) and at:IsControler(1 - tp) and at:IsType(TYPE_MONSTER) then
  			Duel.Destroy(at, REASON_EFFECT)
  		end
  	end
  end
  
  