Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3763 miembros registrados.
El último usuario registrado es Carlos Rodriguez.

Nuestros miembros han publicado un total de 85780 mensajes en 12216 argumentos.

[XP] Armas que ataquen a todos los enemigos

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Armas que ataquen a todos los enemigos

Mensaje por Lance Amano el 2017-07-05, 20:32

Esta es una opción que estaba disponible en el RM2K y que fue omitida en el RMXP por razones inexplicables. Permite crear armas que le den a todos los monstruos al mismo tiempo. Compatible con el SDK.

Creditos van a Kain Nobel de Save Point.

Código:
#===============================================================================
# ** Weapons : Target All
#===============================================================================

#-------------------------------------------------------------------------------
# * SDK Log
#-------------------------------------------------------------------------------
if Object.const_defined?(:SDK)
  SDK.log('Weapons.TargetAll', 'Kain Nobel ©', 4.0, '2012.10.28')
end

#===============================================================================
# ** RPG::Weapon
#===============================================================================

class RPG::Weapon
  #-----------------------------------------------------------------------------
  # * Target All
  #-----------------------------------------------------------------------------
  TargetAll = [1]
  #-----------------------------------------------------------------------------
  # * Target All?
  #-----------------------------------------------------------------------------
  def target_all?
    # Check for weapon ID designation
    TargetAll.include?(@id)
  end
end

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

class Scene_Battle
  #-----------------------------------------------------------------------------
  # * Alias Listings
  #-----------------------------------------------------------------------------
  alias_method :wpntrgtall_scnbattle_startenemyselect, :start_enemy_select
  alias_method :wpntrgtall_scnbattle_mkbasicactionres, :make_basic_action_result
  #-----------------------------------------------------------------------------
  # * Start Enemy Select
  #-----------------------------------------------------------------------------
  def start_enemy_select
    # The usual
    wpntrgtall_scnbattle_startenemyselect
    # End method if item window
    return if @item_window
    # End method if skill window
    return if @skill_window
    # Get weapon object
    weapon = $data_weapons[@active_battler.weapon_id]
    # End method unless weapon responsive to query
    return unless weapon.respond_to?(:target_all?) && weapon.target_all?
    # End enemy select phase
    end_enemy_select
    # Set basic action to attack all
    @active_battler.current_action.basic = :attack_all
    # Go to next actor
    phase3_next_actor
  end
  #-----------------------------------------------------------------------------
  # * Make Basic Action Result
  #-----------------------------------------------------------------------------
  def make_basic_action_result
    # If active battler attacking all
    if @active_battler.current_action.basic == :attack_all
      # Set animation IDs
      @animation1_id = @active_battler.animation1_id
      @animation2_id = @active_battler.animation2_id
      # Create empty array for target battlers
      @target_battlers = Array.new
      # Set target battlers
      set_target_battlers(@active_battler.restriction == 3 ? 4 : 2)
      # Apply attack effect
      @target_battlers.each {|target| target.attack_effect(@active_battler)}
      # End method
      return
    end
    # The usual
    wpntrgtall_scnbattle_mkbasicactionres
  end
end


Última edición por Lance Amano el 2017-07-05, 20:53, editado 1 vez
avatar
Lance Amano
Soñador
Soñador

0/3

Créditos 218

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Armas que ataquen a todos los enemigos

Mensaje por Producciones The Golden el 2017-07-05, 20:41

¿De quién se supone que es el script? si no es tuyo te recomiendo decir de quien es para que el usuario que lo use le de créditos.


Pensaba que se podía hacer eso en el RPG Maker XP pero no, solo con las habilidades... en verdad es algo muy interesante el script! tal y como el script de armas que atacan con habilidades y usan Magia, pueden dar mucha variedad a los juegos rpg.
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 637

Gracias : 60

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Armas que ataquen a todos los enemigos

Mensaje por Lance Amano el 2017-07-05, 21:00

Sabía que se olvidaba algo. Ya está arreglado.

Y si, esta es una de las muchas opciones del RM2K que me hubiese gustado que estuviesen en el RMXP por defecto, junto a la posibilidad de crear items que disminuyan el consumo de SP y dictar la probabilidad de que un ataque inflinja un estado alterado.
avatar
Lance Amano
Soñador
Soñador

0/3

Créditos 218

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Armas que ataquen a todos los enemigos

Mensaje por Wecoc el 2017-07-20, 14:13

@Lance Amano escribió:Crear items que disminuyan el consumo de SP

Que un item por sí solo haga eso es poco aplicable, pero en cambio que el item inflinja un estado alterado y que ese estado disminuya el consumo requerido general de SP es más factible.

Código:
#==============================================================================
# ** [XP] Modificar el SP cost de habilidades
#------------------------------------------------------------------------------
#  Autor: Wecoc (no requiere créditos)
#==============================================================================

module SPCost
 
  Actors  = {}
  Enemies = {}
  States  = {35 => 0.5}
 
end

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

class Game_Battler
  #--------------------------------------------------------------------------
  # * Determine Usable Skills
  #--------------------------------------------------------------------------
  def skill_can_use?(skill_id)
    sp_cost = $data_skills[skill_id].sp_cost
    if self.is_a?(Game_Actor)
      if SPCost::Actors.keys.include?(self.id)
        sp_cost *= SPCost::Actors[self.id]
      end
    end
    if self.is_a?(Game_Enemy)
      if SPCost::Enemies.keys.include?(self.id)
        sp_cost *= SPCost::Enemies[self.id]
      end
    end
    for state in @states
      if SPCost::States.keys.include?(state)
        sp_cost *= SPCost::States[state]
      end
    end
    sp_cost = sp_cost.to_i
    return false if sp_cost > self.sp
    return false if dead?
    return false if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
    occasion = $data_skills[skill_id].occasion
    if $game_temp.in_battle
      return (occasion == 0 or occasion == 1)
    else
      return (occasion == 0 or occasion == 2)
    end
  end
end

#==============================================================================
# ** Window_Skill
#==============================================================================

class Window_Skill < Window_Selectable
  #--------------------------------------------------------------------------
  # * Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
    skill = @data[index]
    if @actor.skill_can_use?(skill.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
    sp_cost = skill.sp_cost
    if SPCost::Actors.keys.include?(@actor.id)
      sp_cost *= SPCost::Actors[@actor.id]
    end
    for state in @actor.states
      if SPCost::States.keys.include?(state)
        sp_cost *= SPCost::States[state]
      end
    end
    sp_cost = sp_cost.to_i
    self.contents.draw_text(x + 232, y, 48, 32, sp_cost.to_s, 2)
  end
end

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

class Scene_Skill
  #--------------------------------------------------------------------------
  # * Frame Update (if skill window is active)
  #--------------------------------------------------------------------------
  def update_skill
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(1)
      return
    end
    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)
      if @skill.scope >= 3
        @skill_window.active = false
        @target_window.x = (@skill_window.index + 1) % 2 * 304
        @target_window.visible = true
        @target_window.active = true
        if @skill.scope == 4 || @skill.scope == 6
          @target_window.index = -1
        elsif @skill.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)
          sp_cost = @skill.sp_cost
          if SPCost::Actors.keys.include?(@actor.id)
            sp_cost *= SPCost::Actors[@actor.id]
          end
          for state in @actor.states
            if SPCost::States.keys.include?(state)
              sp_cost *= SPCost::States[state]
            end
          end
          sp_cost = sp_cost.to_i
          @actor.sp -= sp_cost
          @status_window.refresh
          @skill_window.refresh
          @target_window.refresh
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
    if Input.trigger?(Input::R)
      $game_system.se_play($data_system.cursor_se)
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      $scene = Scene_Skill.new(@actor_index)
      return
    end
    if Input.trigger?(Input::L)
      $game_system.se_play($data_system.cursor_se)
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      $scene = Scene_Skill.new(@actor_index)
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when target window is active)
  #--------------------------------------------------------------------------
  def update_target
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @skill_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    if Input.trigger?(Input::C)
      unless @actor.skill_can_use?(@skill.id)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if @target_window.index == -1
        used = false
        for i in $game_party.actors
          used |= i.skill_effect(@actor, @skill)
        end
      end
      if @target_window.index <= -2
        target = $game_party.actors[@target_window.index + 10]
        used = target.skill_effect(@actor, @skill)
      end
      if @target_window.index >= 0
        target = $game_party.actors[@target_window.index]
        used = target.skill_effect(@actor, @skill)
      end
      if used
        $game_system.se_play(@skill.menu_se)       
        sp_cost = @skill.sp_cost
        if SPCost::Actors.keys.include?(@actor.id)
          sp_cost *= SPCost::Actors[@actor.id]
        end
        for state in @actor.states
          if SPCost::States.keys.include?(state)
            sp_cost *= SPCost::States[state]
          end
        end
        sp_cost = sp_cost.to_i
        @actor.sp -= sp_cost
        @status_window.refresh
        @skill_window.refresh
        @target_window.refresh
        if $game_party.all_dead?
          $scene = Scene_Gameover.new
          return
        end
        if @skill.common_event_id > 0
          $game_temp.common_event_id = @skill.common_event_id
          $scene = Scene_Map.new
          return
        end
      end
      unless used
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end

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

class Scene_Battle
  #--------------------------------------------------------------------------
  # * Make Skill Action Results
  #--------------------------------------------------------------------------
  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
    sp_cost = @skill.sp_cost
    if @active_battler.is_a?(Game_Actor)
      if SPCost::Actors.keys.include?(@active_battler.id)
        sp_cost *= SPCost::Actors[@active_battler.id]
      end
    end
    if @active_battler.is_a?(Game_Enemy)
      if SPCost::Enemies.keys.include?(@active_battler.id)
        sp_cost *= SPCost::Enemies[@active_battler.id]
      end
    end
    for state in @active_battler.states
      if SPCost::States.keys.include?(state)
        sp_cost *= SPCost::States[state]
      end
    end
    sp_cost = sp_cost.to_i
    @active_battler.sp -= 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
    set_target_battlers(@skill.scope)
    for target in @target_battlers
      target.skill_effect(@active_battler, @skill)
    end
  end
end

@Lance Amano escribió:Dictar la probabilidad de que un ataque inflinja un estado alterado

Si te refieres a una habilidad es fácil, creo que solo hay que llamar a un evento común que lo añada con esa probabilidad.

Si te refieres a un ataque normal, en realidad en otras versiones de RPG maker como VX y Ace los ataques normales se definen también mediante una habilidad.
En XP eso es igualmente posible modificando un poco la acción básica de ataque en Scene_Battle. Si la habilidad de ataque tiene el parámetro Atk mayor que 0, el maker la considera una habilidad física, por lo que la restricción de estado "Deshabilitar magia" no se aplica en esa. En resumen, en XP sigue habiendo esa separación habilidad física/mágica, solo que está más oculta que en el caso de VX y Ace, y con eso en mente se puede hacer un ataque que inflinja estados y muchas cosas más.


Última edición por Wecoc el 2017-07-24, 01:14, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 9370

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Armas que ataquen a todos los enemigos

Mensaje por Lance Amano el 2017-07-23, 17:01

@Wecoc escribió:
@Lance Amano escribió:Crear items que disminuyan el consumo de SP

Que un item por sí solo haga eso es poco aplicable, pero en cambio que el item inflinja un estado alterado y que ese estado disminuya el consumo requerido general de SP es más factible.

Excelente aporte, Wecoc.

Yo también estoy utilizando status para modificar el uso de SP en mi projecto, aunque yo lo hice siguiendo un tutorial que edita el Window_Skill y todas las intancias de @active_battler.sp -= @skill.sp_cost para crear los status.  

CHANGING MP COST:
These are a lot easier. I'll teach you how to reduce the MP(SP) cost to Half and to 0.

a) Open the database, and in the Status Effects create two new status: 'Half MP Cost' and 'No MP Cost'
b) Check the 'unresistable' box, which is the first one, and put them to end after battle, for both!
c) Put a minus before 'Half MP Cost' IN THE 'No MP Cost'
c) Check the id of the status (no. before the name) and close the database.
d) Script editor!!! Go to Window_Skill and change the  

self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)

for
#----------------------------------
mp_cost = skill.sp_cost
  if @actor.states.include?(!!!!!)
     mp_cost /= 2
  end
  if @actor.states.include?(*****)
     mp_cost *= 0
  end
self.contents.draw_text(x + 226, y, 48, 32, mp_cost.to_s, 2)
#----------------------------------
where '!!!!!' is the 'Half MP Cost' ID and ***** the 'NO MP Cost' ID.
e) Search for '@active_battler.sp -= @skill.sp_cost'. If more than one appears, you'll have to do the following
to both.
f) Replace

@active_battler.sp -= @skill.sp_cost

for
#----------------------------------
if @active_battler.states.include?(*****)
 @active_battler.sp -= 0
elsif @active_battler.states.include?(!!!!!)
 @active_battler.sp -= (@skill.sp_cost / 2)
else
 @active_battler.sp -= @skill.sp_cost
end
#----------------------------------
where '!!!!!' is the 'Half MP Cost' ID and ***** the 'NO MP Cost' ID.
That's all. Create a skill that adds one of them, or even an accessory that auto-inflict one of these.

Funciona como es debido. Lo malo es que los cambios no se reflejan en el menu de abilidad tanto en batalla como fuera de esta.

Me explico: si equipo un excesorio que otorga SP Cost = 0, en el menu de abilidades el costo no cambia aunque los SPs no son consumidos cuando se usa la abilidad.  

Supongo es porque estoy usando un script de menu principal (el Stormtronic CMS de Blizzard) como también otro script que modifica el Window Skill del sistema de batalla por defecto (Windows_Skill for HP Sacrifice).
avatar
Lance Amano
Soñador
Soñador

0/3

Créditos 218

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Armas que ataquen a todos los enemigos

Mensaje por Wecoc el 2017-07-23, 18:35

Supongo es porque estoy usando un script de menu principal (el Stormtronic CMS de Blizzard) como también otro script que modifica el Window Skill del sistema de batalla por defecto (Windows_Skill for HP Sacrifice).

No, es porque el método que has puesto no contempla cambiar las ventanas, solo cambia la resta de SP en sí. También hacerlo como has puesto tiene el problema que si el coste de SP de la habilidad es 100 y tienes lo de dividir por la mitad, y ahora el personaje tiene 80 SP, debería poder usarla pero no puede. Todo sigue funcionando con el valor inicial excepto la resta.

Por eso el script que puse es más largo, porque lo contempla todo... pero claro también es mucho menos compatible.
avatar
Wecoc
Administrador
Administrador



Créditos 9370

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Armas que ataquen a todos los enemigos

Mensaje por Lance Amano el 2017-07-23, 21:19

@Wecoc escribió:
Supongo es porque estoy usando un script de menu principal (el Stormtronic CMS de Blizzard) como también otro script que modifica el Window Skill del sistema de batalla por defecto (Windows_Skill for HP Sacrifice).

No, es porque el método que has puesto no contempla cambiar las ventanas, solo cambia la resta de SP en sí. También hacerlo como has puesto tiene el problema que si el coste de SP de la habilidad es 100 y tienes lo de dividir por la mitad, y ahora el personaje tiene 80 SP, debería poder usarla pero no puede. Todo sigue funcionando con el valor inicial excepto la resta.

Por eso el script que puse es más largo, porque lo contempla todo... pero claro también es mucho menos compatible.
Entiendo. No tenía idea del error que mencionaste.

Probé el script en mi proyecto después de haber revertido las cambios hechos por mi primer intento. Ahora el costo si cambia en la ventana de batalla pero al usar esa habilidad me sale esto:



El mismo error sale en un proyecto nuevo, por lo tanto no es a consecuencia de una incompatibilidad con cualquiera de los los otros scripts que uso.

Esta es mi configuración:

Código:
Actors  = {}
Enemies = {}
States  = {35 => 0.5}
avatar
Lance Amano
Soñador
Soñador

0/3

Créditos 218

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Armas que ataquen a todos los enemigos

Mensaje por Wecoc el 2017-07-24, 01:18

Tienes razón, faltaba una línea en esa parte. Ya cambié el script, vuelve a probarlo.
Aún así es muy posible que haya incompatibilidades con esos dos scripts que mencionaste.
avatar
Wecoc
Administrador
Administrador



Créditos 9370

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Armas que ataquen a todos los enemigos

Mensaje por Lance Amano el 2017-07-24, 02:31

Lo probé ahora y funciona como es debido.

Claro que es incompatible con los dos scripts que mencioné antes. No es un gran problema (con lo de Stormtronic no hay arreglo ya que es el único CMS compatible con el Large Party de Dargor y pensaba deshacerme del HP Sacrifice de todos modos y hacer que los ataques físicos funcionen con SP).
avatar
Lance Amano
Soñador
Soñador

0/3

Créditos 218

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Armas que ataquen a todos los enemigos

Mensaje por Contenido patrocinado


Contenido patrocinado


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.