¡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 3396 miembros registrados.
El último usuario registrado es Discorded.

Nuestros miembros han publicado un total de 79808 mensajes en 11257 argumentos.
Navega con Google Chrome
[DESCARGA]

[RMXP] PAIN!!! AKA: habilidades que consumen HPs para recuperar SPs.

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP] PAIN!!! AKA: habilidades que consumen HPs para recuperar SPs.

Mensaje por silvanash el 2014-09-19, 11:04

Código:
#===
#Unnamed weird script 1
#AKA PAIN
#===

module SLV_Skills

  #Skills que recuperan SP con HP
  PAIN = [1, 2]
 
end

class Game_Battler
 
  #===
  #Skill can use?
  #===
  def skill_can_use?(skill_id)
    # If HP cost is greater than current HP
    if SLV_Skills::PAIN.include?(skill_id)
      if $data_skills[skill_id].sp_cost >= self.hp
        return false
      end
    elsif $data_skills[skill_id].sp_cost > self.sp
      return false
    end
    if dead?
      return false
    end
    if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
      return false
    end
    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
 
  #===
  #Skill effect
  #===
  def skill_effect(user, skill)
    self.critical = false
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
      ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      return false
    end
    if SLV_Skills::PAIN.include?(skill.id)
      self.damage = skill.sp_cost
      self.sp += skill.power
      return true
    end
    effective = false
    effective |= skill.common_event_id > 0
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    effective |= hit < 100
    if hit_result == true
      power = skill.power + user.atk * skill.atk_f / 100
      if power > 0
        power -= self.pdef * skill.pdef_f / 200
        power -= self.mdef * skill.mdef_f / 200
        power = [power, 0].max
      end
      rate = 20
      rate += (user.str * skill.str_f / 100)
      rate += (user.dex * skill.dex_f / 100)
      rate += (user.agi * skill.agi_f / 100)
      rate += (user.int * skill.int_f / 100)
      self.damage = power * rate / 20
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      if self.damage > 0
        if self.guarding?
          self.damage /= 2
        end
      end
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      effective |= hit < 100
    end
    if hit_result == true
      if skill.power != 0 and skill.atk_f > 0
        remove_states_shock
        effective = true
      end
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      if skill.power == 0
        self.damage = ""
        unless @state_changed
          self.damage = "Miss"
        end
      end
    else
      self.damage = "Miss"
    end
    unless $game_temp.in_battle
      self.damage = nil
    end
    return effective
  end
 
end

class Window_Skill < Window_Selectable
   
  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)
    if SLV_Skills::PAIN.include?(skill.id)
      self.contents.draw_text(x + 232, y, 48, 32, "(" + $data_system.words.hp + ") " + skill.sp_cost.to_s, 2)
    else
      self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
    end
  end

end

#===
#Scene_Battle
#===
class Scene_Battle
   
  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
    if SLV_Skills::PAIN.include?(@skill.id)
      @active_battler.hp -= @skill.sp_cost
    else
      @active_battler.sp -= @skill.sp_cost
    end
    @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

#===
#Scene_Skill
#===
class Scene_Skill
 
  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)
        if SLV_Skills::PAIN.include?(@skill.id)
          @actor.hp -= @skill.sp_cost
        else
          @actor.sp -= @skill.sp_cost
        end
        @status_window.refresh
        @skill_window.refresh
        @target_window.refresh
        # If entire party is dead
        if $game_party.all_dead?
          # Switch to game over screen
          $scene = Scene_Gameover.new
          return
        end
        # If command event ID is valid
        if @skill.common_event_id > 0
          # Command event call reservation
          $game_temp.common_event_id = @skill.common_event_id
          # Switch to map screen
          $scene = Scene_Map.new
          return
        end
      end
      # If skill wasn't used
      unless used
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
 
end





Instrucciones:
Pegar encima de Main.
Ir a la parte de module SLV_Skills y meter las IDs de las skills dentro de los corchetes. Las skills usan el coste en SPs como si fuesen HPs, y el poder efectivo es la cantidad de SPs que recuperan. De momento, sólo he probado a usar skills que tuviesen como objetivo al propio usuario. El texto con el daño es el coste en HPs, no la cantidad de SPs recuperados.

Skill de prueba:
ID 1
Coste en SPs 50
Poder efectivo 100

Al usarla, Alexis pierde 50 HPs (sale en blanco como daño encima de él) y recupera 100 SPs (no sale ningún número). Las animaciones de batalla y los sonidos se ejecutan correctamente. Las skills que estén dentro del PAIN no ejecutarán ningún evento común, en caso de que tuviesen asignado alguno en la base de datos. Las skills que estén en el PAIN ignoran todos los parámetros de las skills (ataque, fuerza, defensa, etc), exceptuando el coste y el poder efectivo. Tampoco tienen varianza, lo que significa que siempre darán los mismos números. Tampoco añaden ni quitan estados, y no sirven para retirar estados al ser golpeados.

Incompatibilidades:
Cualquier script que edite el funcionamiento de las skills. Aunque sería razonablemente fácil editar los demás scripts para que funcionasen con éste, porque lo único que he hecho ha sido añadir tres líneas en las clases que he editado.

No pido créditos.


Última edición por silvanash el 2014-09-19, 20:08, editado 3 veces

silvanash
Aventurero
Aventurero

0/3

Créditos 1417

Gracias : 176

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] PAIN!!! AKA: habilidades que consumen HPs para recuperar SPs.

Mensaje por Lance Amano el 2014-09-19, 19:31

Lo probé y noté que el juego aún calcula la cantidad de sp para ejecutar la abilidad.

Es decir, si el costo de la abilidad es de 300 y el personaje tiene 600 HP y 260 SP, no podrá ser ulilizada ya que no hay SP suficiente, aunque si haya HP suficiente.

Lance Amano
Soñador
Soñador

0/3

Créditos 163

Gracias : 13

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] PAIN!!! AKA: habilidades que consumen HPs para recuperar SPs.

Mensaje por silvanash el 2014-09-19, 19:37

Vale, error mío. El viejo script comprobaba si habían HPs suficientes para castear (cuando la skill estaba dentro de PAIN), pero luego comprobaba si habían SPs para castear, estuviese o no dentro de PAIN. He reordenado las condiciones para que no compruebe el coste de SPs si la skill estaba dentro de PAIN. Ya no debería dar problemas.

silvanash
Aventurero
Aventurero

0/3

Créditos 1417

Gracias : 176

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] PAIN!!! AKA: habilidades que consumen HPs para recuperar SPs.

Mensaje por Lance Amano el 2014-09-19, 19:55

Lo probé otra vez y ahora funciona como es debido.

Otra cosa que noté es que puedes matar al personaje si el costo de la abilidad es el mismo que el de su HP total.

Es decir, si la abilidad cuesta 200 y el personaje tiene 200 Hp, éste morira sí se la usa.

Lance Amano
Soñador
Soñador

0/3

Créditos 163

Gracias : 13

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] PAIN!!! AKA: habilidades que consumen HPs para recuperar SPs.

Mensaje por silvanash el 2014-09-19, 20:06

Eso se corrige rápido. En la parte de def skill_can_use? hay una línea que pone

Código:
      if $data_skills[skill_id].sp_cost > self.hp



Sería cambiarla por

Código:
      if $data_skills[skill_id].sp_cost >= self.hp



Con eso, el personaje no podrá usar esa skill cuando el coste sea mayor o igual a sus HPs.

Edito: por si acaso, he corregido también el script que sale en el primer post.

silvanash
Aventurero
Aventurero

0/3

Créditos 1417

Gracias : 176

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] PAIN!!! AKA: habilidades que consumen HPs para recuperar SPs.

Mensaje por Contenido patrocinado Hoy a las 06:56


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

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