Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] Cast All

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Cast All

Mensaje por Wecoc el 2017-11-01, 19:31

Estado que hace que algunas habilidades o items afecten a todo el grupo en vez de a solo un miembro.

Se configura al inicio del script, en las globales CAST_ALL de Skill_Effects e Item_Effects, donde para cada estado puedes asignar una array con las ID de las habilidades que pasan a afectar a todo el grupo.

Notas:
- Si os preguntáis por qué no lo puse en mi lista de Tips & Tricks de batalla, es porque este es bastante más largo y ya puede considerarse un script entero, pese a que sea del mismo estilo.

- Cuidado con las incompatibilidades, porque sobreescribe algunos métodos por defecto:
Game_BattleAction :for_one_friend?, :for_one_friend_hp0?
Scene_Skill :update_skill ( Sección Input.trigger?(Input::C) )
Scene_Battle (3) :update_phase3_skill_select, :update_phase3_item_select
Scene_Battle (4) :make_skill_action_result, :make_item_action_result

- No es compatible con el Advanced Scope. Quizá en un futuro haga una versión para usar con ese script.

No requiere créditos.

Código:
#==============================================================================
# ** [XP] Cast All
#------------------------------------------------------------------------------
# Autor: Wecoc (no requiere créditos)
# Versión: 1.0
#
# Estado que hace que algunas habilidades o items afecten a todo el grupo en vez
# de a solo un miembro. Aliado -> Grupo aliado / Enemigo -> Grupo enemigo
# Nota: Las que tienen efecto Usuario seguirán afectado solo al usuario
#------------------------------------------------------------------------------
# Scope - 0: nada, 1: enemigo, 2: enemigos, 3: aliado, 4: aliados,
# 5: aliado HP 0, 6: aliados HP 0, 7: usuario
#------------------------------------------------------------------------------


module Skill_Effects
 
  # {ID Estado => [IDs Skills con Cast All]}
 
  CAST_ALL = {4 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]}
 
end


module Item_Effects
 
  # {ID Estado => [IDs Items con Cast All]}
 
  CAST_ALL = {}
 
end


#==============================================================================
# ** Game_BattleAction
#==============================================================================

class Game_BattleAction
  attr_accessor :battler

  def initialize(battler=nil)
    @battler = battler
    clear
  end

  def for_one_friend?
    scope = 0
    return false if @battler.nil?
    case @kind
    when 1 # Skill
      scope = @battler.get_skill_scope($data_skills[@skill_id])
    when 2 # Item
      scope = @battler.get_item_scope($data_items[@item_id])
    end
    return [3, 5].include?(scope)
  end

  def for_one_friend_hp0?
    scope = 0
    return false if @battler.nil?
    case @kind
    when 1 # Skill
      scope = @battler.get_skill_scope($data_skills[@skill_id])
    when 2 # Item
      scope = @battler.get_item_scope($data_items[@item_id])
    end
    return [5].include?(scope)
  end
end

#==============================================================================
# ** Game_Battler
#==============================================================================

class Game_Battler
  alias current_action_self_ini initialize unless $@
  def initialize
    current_action_self_ini
    @current_action = Game_BattleAction.new(self)
  end 
 
  def get_item_scope(item)
    result = item.scope
    for state in @states
      if Item_Effects::CAST_ALL.keys.include?(state)
        if Item_Effects::CAST_ALL[state].include?(item.id)
          result = case item.scope
            when 1 then 2 ; when 3 then 4 ; when 5 then 6
            #when 7 then (self.is_a?(Game_Actor) ? 4 : 2)
            else ; result
          end
          break
        end
      end
    end
    return result
  end
 
  def get_skill_scope(skill)
    result = skill.scope
    for state in @states
      if Skill_Effects::CAST_ALL.keys.include?(state)
        if Skill_Effects::CAST_ALL[state].include?(skill.id)
          result = case skill.scope
            when 1 then 2 ; when 3 then 4 ; when 5 then 6
            #when 7 then (self.is_a?(Game_Actor) ? 4 : 2)
            else ; result
          end
          break
        end
      end
    end
    return result
  end
end

#==============================================================================
# ** Scene_Skill
#==============================================================================

class Scene_Skill
  alias update_skill_cast_all update_skill unless $@
  def update_skill
    if Input.trigger?(Input::C)
      @skill = @skill_window.skill
      if @skill == nil or not @actor.skill_can_use?(@skill.id)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      scope = @actor.get_skill_scope(@skill)
      if scope >= 3
        @skill_window.active = false
        @target_window.x = (@skill_window.index + 1) % 2 * 304
        @target_window.visible = true
        @target_window.active = true
        if scope == 4 || scope == 6
          @target_window.index = -1
        elsif scope == 7
          @target_window.index = @actor_index - 10
        else
          @target_window.index = 0
        end
      else
        if @skill.common_event_id > 0
          $game_temp.common_event_id = @skill.common_event_id
          $game_system.se_play(@skill.menu_se)
          @actor.sp -= @skill.sp_cost
          @status_window.refresh
          @skill_window.refresh
          @target_window.refresh
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
    update_skill_cast_all
  end
end

#==============================================================================
# ** Scene_Battle
#==============================================================================

class Scene_Battle
  def update_phase3_skill_select
    @skill_window.visible = true
    @skill_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      end_skill_select
      return
    end
    if Input.trigger?(Input::C)
      @skill = @skill_window.skill
      if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      @active_battler.current_action.skill_id = @skill.id
      @skill_window.visible = false
      scope = @active_battler.get_skill_scope(@skill)
      if scope == 1
        start_enemy_select
      elsif scope == 3 or scope == 5
        start_actor_select
      else
        end_skill_select
        phase3_next_actor
      end
      return
    end
  end

  def update_phase3_item_select
    @item_window.visible = true
    @item_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      end_item_select
      return
    end
    if Input.trigger?(Input::C)
      @item = @item_window.item
      unless $game_party.item_can_use?(@item.id)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      @active_battler.current_action.item_id = @item.id
      @item_window.visible = false
      scope = @active_battler.get_item_scope(@item)
      if scope == 1
        start_enemy_select
      elsif scope == 3 or scope == 5
        start_actor_select
      else
        end_item_select
        phase3_next_actor
      end
      return
    end
  end
 
  def make_skill_action_result
    @skill = $data_skills[@active_battler.current_action.skill_id]
    unless @active_battler.current_action.forcing
      unless @active_battler.skill_can_use?(@skill.id)
        $game_temp.forcing_battler = nil
        @phase4_step = 1
        return
      end
    end
    @active_battler.sp -= @skill.sp_cost
    @status_window.refresh
    @help_window.set_text(@skill.name, 1)
    @animation1_id = @skill.animation1_id
    @animation2_id = @skill.animation2_id
    @common_event_id = @skill.common_event_id
    scope = @active_battler.get_skill_scope(@skill)
    set_target_battlers(scope)
    for target in @target_battlers
      target.skill_effect(@active_battler, @skill)
    end
  end

  def make_item_action_result
    @item = $data_items[@active_battler.current_action.item_id]
    unless $game_party.item_can_use?(@item.id)
      @phase4_step = 1
      return
    end
    if @item.consumable
      $game_party.lose_item(@item.id, 1)
    end
    @help_window.set_text(@item.name, 1)
    @animation1_id = @item.animation1_id
    @animation2_id = @item.animation2_id
    @common_event_id = @item.common_event_id
    index = @active_battler.current_action.target_index
    target = $game_party.smooth_target_actor(index)
    scope = @active_battler.get_item_scope(@item)
    set_target_battlers(scope)
    for target in @target_battlers
      target.item_effect(@item)
    end
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 12388

Gracias : 595

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.