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
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Últimos temas
» analisen mis charas (personages)
por Gacoro Hoy a las 05:20

» Zona 14 Beta Released
por Aeon_Fox Hoy a las 05:19

» Sword Heros Art´s Work
por Gacoro Hoy a las 05:09

» [XP] RM2k Screen Tone
por Wecoc Hoy a las 04:43

» Algún dibujante dispuesto a ayudarme?
por BruMaster7Maker Hoy a las 03:38

» Ayuda rpg maker MV
por zeik9 Hoy a las 00:35

» [XP] Bitmap Stat/Outline Effects
por xXIsrael0499Xx Ayer a las 23:24

» Ayuda para desactivar un HUD y activarlo
por Wecoc Ayer a las 22:51

» Pinturas, proyectos e inspiraciones de Cutexiora
por RenatoMakerxp Ayer a las 19:03

» [XP] Elnard Radar
por orochii Ayer a las 15:55

Afiliados
Estadísticas
Tenemos 3763 miembros registrados.
El último usuario registrado es Carlos Rodriguez.

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

[XP] State Icons

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] State Icons

Mensaje por Wecoc el 2017-05-17, 18:15

Éste script está pensado para personalizarlo para tu proyecto. Permite de forma muy sencilla mostrar los estados actuales como iconos.
Además he puesto más comentarios de lo habitual, para que no os liéis en el código a la hora de personalizarlo si os hace falta.



Script:

Código:
#==============================================================================
# ** [XP] State Icons
# Éste script está pensado para personalizarlo para tu proyecto
# Autor: Wecoc (no requiere créditos)
#==============================================================================

class Game_System
  attr_reader :state_icons, :state_counter
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  alias state_icon_ini initialize unless $@
  def initialize
    state_icon_ini
    set_state_icons
    set_state_counter
  end
  #--------------------------------------------------------------------------
  # * Definir icono para cada estado
  #--------------------------------------------------------------------------
  def set_state_icons
    @state_icons = {}
    @state_icons.default = ""
    # Define aquí el icono de cada estado (deja vacío si no tiene icono)
    @state_icons[1] = "046-Skill03"
    @state_icons[2] = "045-Skill02"
    @state_icons[3] = "044-Skill01"
    @state_icons[5] = "044-Skill01"
    @state_icons[6] = "044-Skill01"
    @state_icons[7] = "044-Skill01"
    @state_icons[8] = "044-Skill01"
  end
  #--------------------------------------------------------------------------
  # * Definir contador para cada estado
  #--------------------------------------------------------------------------
  def set_state_counter
    @state_counter = {}
    @state_counter.default = ""
    for i in 1...$data_states.size
      if $data_states[i].hold_turn > 0
        @state_counter[i] = "(@states_turn[id] > 0) ? @states_turn[id] : \"\""
      end
    end
  end
end

class Window_Base < Window
  #--------------------------------------------------------------------------
  # * Dibujar estado
  #--------------------------------------------------------------------------
  def draw_state(battler, state_id, x, y)
    # Volver si no hay icono
    return if $game_system.state_icons[state_id] == ""
    # Guardar fuente normal y cambiarla para el contador
    font_bold = self.contents.font.bold
    font_size = self.contents.font.size
    self.contents.font.bold = false
    self.contents.font.size = 14
    # Dibujar icono
    bitmap = RPG::Cache.icon($game_system.state_icons[state_id])
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
    # Si el contador está disponible
    if $game_system.state_counter[state_id] != ""
      # Obtener texto del contador
      text = $game_system.state_counter[state_id]
      counter = battler.instance_eval("id = #{state_id};" + text) rescue nil
      # Si el texto del contador es válido
      if counter != nil
        # Dibujar el texto del contador
        cx = x + 8 ; cy = y + 12 # Coordenadas del texto
        self.contents.font.color = Color.new(0, 0, 0, 64) # Color de sombra
        self.contents.draw_text(cx - 1, cy + 1, 24, 24, counter.to_s, 1)
        self.contents.draw_text(cx + 1, cy + 1, 24, 24, counter.to_s, 1)
        self.contents.draw_text(cx - 1, cy - 1, 24, 24, counter.to_s, 1)
        self.contents.draw_text(cx + 1, cy - 1, 24, 24, counter.to_s, 1)
        self.contents.font.color = Color.new(255, 255, 128) # Color del texto
        self.contents.draw_text(cx, cy, 24, 24, counter.to_s, 1)
      end
    end
    # Recuperar formato de texto normal
    self.contents.font.size = font_size
    self.contents.font.bold = font_bold
  end
  #--------------------------------------------------------------------------
  # * Dibujar todos los estados
  #--------------------------------------------------------------------------
  def draw_states(battler, x, y)
    dx = x ; dy = y
    states = battler.states.clone
    states.sort!{|b,a| $data_states[a].rating - $data_states[b].rating}
    # Quedarse con solo los 5 con más ratio
    states = states[0..5]
    # Dibujar uno a uno los estados de la lista
    for state_id in states
      next if $game_system.state_icons[state_id] == ""
      draw_state(battler, state_id, dx, dy)
      dx += 24
    end
  end
end

Ejemplo de uso en ventana de menú:

Código:
class Window_MenuStatus < Window_Selectable
  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      x = 64
      y = i * 116
      actor = $game_party.actors[i]
      draw_actor_graphic(actor, x - 40, y + 80)
      draw_actor_name(actor, x, y)
      draw_actor_class(actor, x + 144, y)
      draw_actor_level(actor, x, y + 32)
      draw_states(actor, x + 90, y + 32) ## New
      draw_actor_exp(actor, x, y + 64)
      draw_actor_hp(actor, x + 236, y + 32)
      draw_actor_sp(actor, x + 236, y + 64)
    end
  end
end

Si alguien quiere usarlo en su proyecto y tiene dificultades para hacerlo puedo echarle una mano. Veréis que es un código bastante fácil.
Os animo a proponer cambios y mejoras al script.
avatar
Wecoc
Administrador
Administrador



Créditos 9370

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] State Icons

Mensaje por AsFzKakarotto el 2017-06-04, 03:16

He hecho uno para el menú de batalla default del maker...



de hecho el script se puede pegar justo debajo de el tuyo.

Código:
#==============================================================================
# Ventana de Estado / Menú de Batalla
#==============================================================================
class Window_BattleStatus < Window_Base
  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      actor_x = i * 160 + 4
      draw_actor_name(actor, actor_x, 0)
      draw_actor_hp(actor, actor_x, 32, 120)
      draw_actor_sp(actor, actor_x, 64, 120)
      if @level_up_flags[i]
        self.contents.font.color = normal_color
        self.contents.draw_text(actor_x, 96, 120, 32, "¡SUBE NIVEL!")
      else
        draw_states(actor, actor_x, 96) ## New
      end
    end
  end
end

Lo malo es que no logre crear uno para los enemigos de batalla como lo tenia previsto junto a
uno de tus script de tips & tricks:



e intente para enemigos usar draw_states(actor, actor_x, 96) en el script de Sprite_Battler pero desconozco el llamado para enemigos e intente enemy, troop y me aparecen errores.
Ayudas? de antemano agradecido.
avatar
AsFzKakarotto
Novato
Novato

0/3

Créditos 98

Gracias : 19

Volver arriba Ir abajo

RPG Maker XP Re: [XP] State Icons

Mensaje por Wecoc el 2017-06-04, 13:12

No tengo tiempo para hacer nada de scripts, pero para hacer lo que dices en enemigos lo que tienes que hacer es crear una ventana invisible encima de ellos (su x/y dependeran de screen_x/screen_y del enemigo) y luego allí aplicar el draw_states del mismo modo que has hecho para los actores. Si quieres alguna referencia busca scripts de barras de vida para enemigos, se hacen igual.
avatar
Wecoc
Administrador
Administrador



Créditos 9370

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] State Icons

Mensaje por AsFzKakarotto el 2017-06-04, 17:03

jajaja lo mismo puedo decir... no tengo tiempo para hacer scripts, pero cuando lo tenga lo antes posible haré lo que me has dicho y creo ya tener un sistema de barra enemiga, cuando lo cree lo compartiré en este post lo antes que pueda, vale wecoc por tus sabios consejos jejejeee... aunque me extraña que para los enemigos también tenga que ser "draw_states" con actor.
avatar
AsFzKakarotto
Novato
Novato

0/3

Créditos 98

Gracias : 19

Volver arriba Ir abajo

RPG Maker XP Re: [XP] State Icons

Mensaje por AsFzKakarotto el 2017-06-21, 02:17

Intente e intente de añadir el código en múltiples formas,
tal y como me aconsejaste, junto a los comandos de este
script (Barra de HP y SP enemiga)

Código:
#==============================================================================#
# ** Enemy HP and SP bars Addon v1.0 **                                             #
#==============================================================================#
# Author: Diagostimo                                                           #
#------------------------------------------------------------------------------#
# Description:                                                                 #
#                                                                              #
#   this script adds HP and SP bars below enemies while in battle, this        #
#   enables you to see the current state of the enemy.                         #
#   this script will most likely be compatible with most custom battle         #
#   systems that use Sprite_battler to display the battler, note that the      #
#   size of the bars have been designed with the default system in mind.       #
#                                                                              #
#==============================================================================#
#==============================================================================
# ** Sprite_Battler
#==============================================================================
class Sprite_Battler < RPG::Sprite
  #----------------------------------------------------------------------------
  # * Object Initialization
  #----------------------------------------------------------------------------
  alias init_battle_bars initialize
  def initialize(viewport, battler = nil)
    init_battle_bars(viewport, battler)
    if @battler.is_a?(Game_Enemy)
      @bars_sprite = RPG::Sprite.new
      @bars_sprite.x = @battler.screen_x - 26
      @bars_sprite.y = @battler.screen_y + 7
      @bars_sprite.z = 50
      @bars_sprite.bitmap = Bitmap.new(54, 15)
      @bars_sprite.opacity = 0
    end
  end
  #----------------------------------------------------------------------------
  # Frame Update
  #----------------------------------------------------------------------------
  alias update_battle_bars update
  def update
    update_battle_bars
    if @battler.is_a?(Game_Enemy)
      update_bars
    end
  end
  #----------------------------------------------------------------------------
  # * Frame update of bars
  #----------------------------------------------------------------------------
  def update_bars
    @bars_sprite.opacity = self.opacity
    if @bars_sprite.opacity > 0
      @bars_sprite.bitmap.clear
      #shell
      rect = Rect.new(0, 0, 54, 15)
      @bars_sprite.bitmap.fill_rect(rect, Color.new(0, 0, 0))
      rect = Rect.new(1, 1, 52, 6)
      @bars_sprite.bitmap.fill_rect(rect, Color.new(255, 255, 255))
      rect = Rect.new(1, 8, 52, 6)
      @bars_sprite.bitmap.fill_rect(rect, Color.new(255, 255, 255))
      #draw hp
      width = 50 * @battler.hp / @battler.maxhp
      rect = Rect.new(2, 2, width, 4)
      @bars_sprite.bitmap.fill_rect(rect, Color.new(255, 0, 0))
      #draw sp
      width = 50 * @battler.sp / @battler.maxsp
      rect = Rect.new(2, 9, width, 4)
      @bars_sprite.bitmap.fill_rect(rect, Color.new(0, 0, 255))
    end
  end
  #----------------------------------------------------------------------------
  # * Collapse
  #----------------------------------------------------------------------------
  def collapse
    super
    if @battler.is_a?(Game_Enemy)
      @bars_sprite.collapse
    end
  end
  #----------------------------------------------------------------------------
  # * Dispose
  #----------------------------------------------------------------------------
  def dispose
    super
    if @battler.is_a?(Game_Enemy)
      @bars_sprite.dispose
    end
  end
end

y no pude crear el
sistema para el estado enemigo.



Párese ser que esta configuración es muy tediosa para mi. jajaja lo siento
avatar
AsFzKakarotto
Novato
Novato

0/3

Créditos 98

Gracias : 19

Volver arriba Ir abajo

RPG Maker XP Re: [XP] State Icons

Mensaje por Wecoc el 2017-07-01, 02:15

Pues sí, draw_states va igual con actor que con enemigo, porque el parámetro si te fijas es draw_states(battler, x, y).

Te pongo un ejemplo de ventana de estado similar al que puse, pero en éste caso para enemigos. El problema es que cuando añades una ventana nueva a la escena de batalla hay que editar main y update, y no estan pensados para usarlos con alias así que el script queda más largo y más incompatible en general que el otro; es por como funciona la batalla por defecto en XP así que no hay remedio.

Código:
#==============================================================================
# Ventana de Estado / Menú de Batalla para enemigos
#==============================================================================

#==============================================================================
# Window_BattleEnemyStatus
#==============================================================================

class Window_BattleEnemyStatus < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(enemy_id)
    super(0, 0, 160, 64)
    enemy = $game_troop.enemies[enemy_id]
    self.x = enemy.screen_x - self.width / 2
    self.y = enemy.screen_y - 16
    self.opacity = 0
    self.contents = Bitmap.new(width - 32, height - 32)
    @enemy_id = enemy_id
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    enemy = $game_troop.enemies[@enemy_id]
    return if !enemy.exist?
    draw_states(enemy, 0, 0)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
  end
end

#==============================================================================
# Scene_Battle
#==============================================================================

class Scene_Battle
  def main
    $game_temp.in_battle = true
    $game_temp.battle_turn = 0
    $game_temp.battle_event_flags.clear
    $game_temp.battle_abort = false
    $game_temp.battle_main_phase = false
    $game_temp.battleback_name = $game_map.battleback_name
    $game_temp.forcing_battler = nil
    $game_system.battle_interpreter.setup(nil, 0)
    @troop_id = $game_temp.battle_troop_id
    $game_troop.setup(@troop_id)
    s1 = $data_system.words.attack
    s2 = $data_system.words.skill
    s3 = $data_system.words.guard
    s4 = $data_system.words.item
    @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
    @actor_command_window.y = 160
    @actor_command_window.back_opacity = 160
    @actor_command_window.active = false
    @actor_command_window.visible = false
    @party_command_window = Window_PartyCommand.new
    @help_window = Window_Help.new
    @help_window.back_opacity = 160
    @help_window.visible = false
    @status_window = Window_BattleStatus.new
    @message_window = Window_Message.new
    @spriteset = Spriteset_Battle.new
    # ------ New --------
    @enemy_state_windows = []
    for i in 0...$game_troop.enemies.size
      @enemy_state_windows.push Window_BattleEnemyStatus.new(i)
    end
    # -------------------
    @wait_count = 0
    if $data_system.battle_transition == ""
      Graphics.transition(20)
    else
      Graphics.transition(40, "Graphics/Transitions/" +
        $data_system.battle_transition)
    end
    start_phase1
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    $game_map.refresh
    Graphics.freeze
    @actor_command_window.dispose
    @party_command_window.dispose
    @help_window.dispose
    @status_window.dispose
    @enemy_state_windows.each {|w| w.dispose} # New
    @message_window.dispose
    if @skill_window != nil
      @skill_window.dispose
    end
    if @item_window != nil
      @item_window.dispose
    end
    if @result_window != nil
      @result_window.dispose
    end
    @spriteset.dispose
    if $scene.is_a?(Scene_Title)
      Graphics.transition
      Graphics.freeze
    end
    if $BTEST and not $scene.is_a?(Scene_Gameover)
      $scene = nil
    end
  end
  
  def update
    if $game_system.battle_interpreter.running?
      $game_system.battle_interpreter.update
      if $game_temp.forcing_battler == nil
        unless $game_system.battle_interpreter.running?
          unless judge
            setup_battle_event
          end
        end
        if @phase != 5
          @status_window.refresh
        end
      end
    end
    $game_system.update
    $game_screen.update
    if $game_system.timer_working and $game_system.timer == 0
      $game_temp.battle_abort = true
    end
    @help_window.update
    @party_command_window.update
    @actor_command_window.update
    @status_window.update
    @enemy_state_windows.each {|w| w.update} # New
    @message_window.update
    @spriteset.update
    if $game_temp.transition_processing
      $game_temp.transition_processing = false
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
      end
    end
    if $game_temp.message_window_showing
      return
    end
    if @spriteset.effect?
      return
    end
    if $game_temp.gameover
      $scene = Scene_Gameover.new
      return
    end
    if $game_temp.to_title
      $scene = Scene_Title.new
      return
    end
    if $game_temp.battle_abort
      $game_system.bgm_play($game_temp.map_bgm)
      battle_end(1)
      return
    end
    if @wait_count > 0
      @wait_count -= 1
      return
    end
    if $game_temp.forcing_battler == nil and
       $game_system.battle_interpreter.running?
      return
    end
    case @phase
    when 1  # pre-battle phase
      update_phase1
    when 2  # party command phase
      update_phase2
    when 3  # actor command phase
      update_phase3
    when 4  # main phase
      update_phase4
    when 5  # after battle phase
      update_phase5
    end
  end
  
  unless $@
    alias esw_start_phase1 start_phase1
    alias esw_start_phase2 start_phase2
    alias esw_start_phase3 start_phase3
    alias esw_start_phase4 start_phase4
    alias esw_start_phase5 start_phase5
    alias esw_make_basic_action_result make_basic_action_result
    alias esw_make_skill_action_result make_skill_action_result
    alias esw_make_item_action_result make_item_action_result
  end
  
  def start_phase1
    esw_start_phase1
    @enemy_state_windows.each {|w| w.refresh}
  end
  
  def start_phase2
    esw_start_phase2
    @enemy_state_windows.each {|w| w.refresh}
  end
  
  def start_phase3
    esw_start_phase3
    @enemy_state_windows.each {|w| w.refresh}
  end
  
  def start_phase4
    esw_start_phase4
    @enemy_state_windows.each {|w| w.refresh}
  end
  
  def start_phase5
    esw_start_phase5
    @enemy_state_windows.each {|w| w.refresh}
  end
  
  def make_basic_action_result
    esw_make_basic_action_result
    @enemy_state_windows.each {|w| w.refresh}
  end
  
  def make_skill_action_result
    esw_make_skill_action_result
    @enemy_state_windows.each {|w| w.refresh}
  end
  
  def make_item_action_result
    esw_make_item_action_result
    @enemy_state_windows.each {|w| w.refresh}
  end
end

Quizá es algo chapuza, pero la base ya la tienes xD
La ventana en sí es solo la pequeña primera parte. En esa se dibujan los estados, y se podría ampliar para mostrar otras cosas entre ellas las barras de vida y magia, pero luego posiblemente habría que editar la parte de abajo de éste script para que el refresh de esas ventanas ocurra en bucle y no solo a los inicios de fase (que tampoco es muy elegante pero es lo que se suele hacer en ese caso, si no me equivoco). Ese tipo de scripts nunca me gustaron mucho, precisamente por lo que dije antes de compatibilidades y por éstas cuestiones de lag. Quizá alguien quiera hacer un script similar pero más completo; yo por mi parte lo siento pero no tengo intención de hacerlo.

Por cierto en el ejemplo de barra que pusiste no se crea ninguna ventana, solo un sprite en el que se dibuja la barra. Hice los métodos de dibujado de estados para ventanas y no para sprites, si se cambiara para que funcionaran con un sprite también sería una opción viable, aunque en ese caso la cosa quedaría casi igual. Lo que sí podría ser mejor para el juego es hacer un sprite para cada icono, e incluso un sprite para nada valor numérico, separadamente. Eso daría muchas más opciones de efectos para cada uno de esos iconos de estado, pero a cambio el script sería más engorroso. Como ves hay varias formas de hacerlo.

En fin el script interesante de aquí es el State Icons, lo demás son solo ejemplos de adaptación.
avatar
Wecoc
Administrador
Administrador



Créditos 9370

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] State Icons

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.