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 85779 mensajes en 12216 argumentos.

[RMXP] Stagger; recibir la mitad del daño dos turnos después para curarse en medio

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP] Stagger; recibir la mitad del daño dos turnos después para curarse en medio

Mensaje por silvanash el 2017-04-07, 11:51

Basado en la idea de Wecocio y eso. Reduce el daño recibido por las skills a la mitad, y luego hace todo el daño acumulado dos turnos después, para que el jugador intente curarse en medio.

Nota 1: stagger afecta a todas las skills, tanto si hacen daño físico como mágico.

Nota 2: el daño acumulado puede matar incluso si curas al personaje. Si un personaje acumula 900 puntos de daño y tiene 800 de MAX_HP, morirá sin importar cuánto le curas.

Código:
# Stagger v0.1
# silvanash

# Allows a certain status to halve magic damage taken during a turn
# The actor takes the stored damage 2 turns later

module SLV_Config
 
  # FUCK THIS
  # RMXP refuses to read this value
  STAGGER_ID = [18]
 
end

class Game_Battler
 
  attr_accessor :slv_stagger_damage
 
  alias slv_stagger_init initialize unless $@
 
  def initialize
    slv_stagger_init
    @slv_stagger_damage = []
  end
   
end

class Scene_Battle
 
  alias slv_stagger_ph4_st1 update_phase4_step1 unless $@
 
  def update_phase4_step1
    slv_stagger_ph4_st1
    # Actor is alive and stagger damage array holds values?
    if !@active_battler.nil? and @active_battler.hp > 0 and
      @active_battler.slv_stagger_damage.size > 0
      # Decreases the stagger count of each stagger damage instance
      pop = false
      for damage in @active_battler.slv_stagger_damage
        damage[1] -= 1
        # Stagger count reached 0
        if damage[1] <= 0
          @active_battler.hp -= damage[0]
          @active_battler.damage = 0 if !@active_battler.damage.is_a?(Integer)
          @active_battler.damage += damage[0]
          pop = true
          # Deletes the damage instance from the array
          damage = nil
        end
      end
      if pop == true
        # Displays damage animation and clears the array
        @active_battler.damage_pop = true
        @active_battler.slv_stagger_damage.compact!
      end
    end
    @status_window.refresh
    @phase4_step = 2
  end
 
  alias slv_stagger_effect make_skill_action_result unless $@
 
  def make_skill_action_result
    slv_stagger_effect
    # Applies the stagger effect
    for target in @target_battlers
      # Skips targets without stagger state/didn't take damage
      if target.state?(18) and target.damage.to_i > 0
        # Heals the actor for 1/2 of the damage taken
        d = target.damage / 2
        target.damage -= d
        target.hp += d
        # Creates a stagger damage instance
        target.slv_stagger_damage.push([d, 2])
      end
    end
  end
 
  alias slv_stagger_battle_end battle_end unless $@
 
  def battle_end(result)
    # Clears the stagger values of all the actors
    for actor in $game_party.actors
      actor.slv_stagger_damage.clear
    end
    slv_stagger_battle_end(result)
  end
 
end

Pegar encima de Main y listos. Si vas a usar Stormblade y las demás tonterías que hice, pon Stagger debajo de Stormblade.

A diferencia de mis otros apaños, éste no se configura por module porque el jodido Maker se niega a aceptar que el valor está definido en el module, así que hay que escribirlo a mano. En la línea 68 del script está la parte de "target.state?(18)"; ese 18 es la ID del estado de stagger.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Stagger; recibir la mitad del daño dos turnos después para curarse en medio

Mensaje por orochii el 2017-04-08, 17:57

¿Porqué el 18 en STAGGER_ID está dentro de [ ]? ¿Para qué lo metiste en un array? xD

Si le quitas los paréntesis cuadrados, puedes poner
Código:
target.state?(SLV_Config::STAGGER_ID)

Si lo que quieres es que soporte varios estados "stagger", entonces sería...
Código:
staggered = false
SLV_Config::STAGGER_ID.each { | id |
  staggered = true if target.state?(id)
}
if staggered and target.damage.to_i > 0
(...)

Por lo demás me gusta la idea :D. Lo tendré en cuenta para algún boss, que aplique él stagger a los personajes y a él mismo xD. Necesito pensar quiza en una explicación/concepto para que sea transparente, ya que decir "stagger" no creo que le dé a entender al jugador de buenas a primeras que se refiere a retrasar el daño. ¿Quiza algo de manejo de tiempo?

Salut! :3
avatar
orochii
Reportero

0/3

Créditos 6798

Gracias : 356

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Stagger; recibir la mitad del daño dos turnos después para curarse en medio

Mensaje por silvanash el 2017-04-17, 10:57

Argh, maldición, no puedo creer que cometiera un error de sintaxis tan estúpido. Maldita sea mi costumbre de usar arrays para todo.

Bueno, tampoco importa demasiado. Con las instrucciones que dejé en el post debería de bastar para configurar el script, incluso con mi error de sintaxis.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Stagger; recibir la mitad del daño dos turnos después para curarse en medio

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.