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

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

[XP] Skill Bar

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP] Skill Bar

Mensaje por Eron el 2013-09-08, 16:05

Este script requiere el ERON module

Este script hace una modificación de la Window_Skill. En vez de mostrar las skills actuales del héroe, muestra todas las que puede aprender debido a su clase, pero obvio no deja usarlas si no tiene el nivel requerido x'DD. Además muestra una barra con lo que le falta al héroe para poder usar la skill.



Código:
#==============================================================================
# [XP][ERON] Skill bar
#------------------------------------------------------------------------------
# by Eron
#==============================================================================

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================

class Window_Base < Window
  def draw_bar(actual_value, max_value, x, y, w, h, color)
    border_color = Color.new(0,0,0,255)
    bar_color = color
    empty_color = Color.new(75,75,75,255)
    bar_width = ((actual_value * 1.0 / max_value) * (w - 2)).to_i
    border = Rect.new(x, y, w, h)
    bar = Rect.new(x + 1, y + 1, bar_width, h - 2)
    empty = Rect.new(x + 1, y + 1, w - 2, h - 2)
    self.contents.fill_rect(border, border_color)
    self.contents.fill_rect(empty, empty_color)
    self.contents.fill_rect(bar, bar_color)
  end
  
  def draw_empty_bar(x, y, w, h)
    border_color = Color.new(0,0,0,255)
    empty_color = Color.new(75,75,75,255)
    border = Rect.new(x, y, w, h)
    empty = Rect.new(x + 1, y + 1, w - 2, h - 2)
    self.contents.fill_rect(border, border_color)
    self.contents.fill_rect(empty, empty_color)
  end
  
  def draw_actor_hp_bar(actor, x, y, w = 134, h = 8)
    draw_bar(actor.hp, actor.maxhp, x, y, w, h, Color.new(200,0,0,255))
  end
  
  def draw_actor_sp_bar(actor, x, y, w = 134, h = 8)
    draw_bar(actor.sp, actor.maxsp, x, y, w, h, Color.new(0,100,200,255))
  end
  
  def draw_actor_exp_bar(actor, x, y, w = 200, h = 8)
    exp = actor.exp_s.to_i
    next_exp = actor.next_exp_s.to_i
    draw_bar(exp, next_exp, x, y, w, h, Color.new(220,180,0,255))
  end
  
  def draw_actor_skill_bar(val1, val2, x, y, w = 164, h = 8)
    if val1 == val2
      draw_bar(val1, val2, x, y, w, h, Color.new(220,180,0,255))
    else
      draw_bar(val1, val2, x, y, w, h, Color.new(160,80,60,255))
    end
  end
end

#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
#  This window displays party member status on the menu screen.
#==============================================================================

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 + 138, y)
      
      draw_actor_level(actor, x, y + 28)
      draw_actor_state(actor, x + 90, y + 28)
      draw_actor_exp(actor, x, y + 56)
      draw_actor_exp_bar(actor, x, y + 82)
      draw_actor_hp(actor, x + 236, y + 22)
      draw_actor_hp_bar(actor, x + 236, y + 50, 134)
      draw_actor_sp(actor, x + 236, y + 56)
      draw_actor_sp_bar(actor, x + 236, y + 82, 134)
    end
  end
end

#==============================================================================
# ** Window_Skill
#------------------------------------------------------------------------------
#  This window displays usable skills on the skill and battle screens.
#==============================================================================

class Window_Skill < Window_Selectable
  def initialize(actor)
    super(0, 128, 640, 352)
    @actor = actor
    @column_max = 1
    refresh
    self.index = 0
    if $game_temp.in_battle
      self.y = 64
      self.height = 256
      self.back_opacity = 160
    end
  end

  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    level_skills = @actor.ini_skills(@actor.rpg.final_level)
    for i in 0...@actor.skills.size
      skill = $data_skills[@actor.skills[i]]
      if skill != nil
        @data.push(skill)
      end
    end
    @data2 = []
    @data3 = []
    for i in 0...level_skills.size
      skill = $data_skills[level_skills[i]]
      if skill != nil
        @data2.push(skill)
      end
      for j in 0...@actor.rpg_class.learnings.size
        if @actor.rpg_class.learnings[j].skill_id == skill.id
          @data3.push @actor.rpg_class.learnings[j].level
        end
      end
    end
    @data2.sort_by_array!(@data3)
    for i in 0...@data2.size
      @data.push @data2[i]
    end
    @data.uniq!
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end

  def draw_item(index)
    skill = @data[index]
    learnings = @actor.rpg_class.learnings
    level = 0
    if learnings != nil
      for i in 0...learnings.size
        if learnings[i].skill_id == skill.id
          level = learnings[i].level
        end
      end
    end
    font_color = normal_color
    if not @actor.skill_can_use?(skill.id)
      font_color = disabled_color
    end
    if @actor.level < level
      font_color = disabled_color
    end
    self.contents.font.color = font_color
    x = 4
    y = index * 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)
    self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
    self.contents.font.color = system_color if font_color == normal_color
    self.contents.draw_text(x + 200, y, 32, 32, $data_system.words.sp)
    self.contents.font.color = system_color
    self.contents.draw_text(x + 312, y, 92, 32, "Progreso:")
    if level == 0
      draw_actor_skill_bar(1, 1, x + 412, y + 12)
    else
      if @actor.exp_list[level] == 0 or @actor.exp >= @actor.exp_list[level]
        draw_actor_skill_bar(1, 1, x + 412, y + 12)
      else
        draw_actor_skill_bar(@actor.exp, @actor.exp_list[level], x+412, y+12)
      end
    end
  end
end
Como usa mi módulo pido créditos si lo usáis.

Eron
Soñador
Soñador

0/3

Créditos 1235

Gracias : 40

Volver arriba Ir abajo

Re: [XP] Skill Bar

Mensaje por Zeke el 2014-01-03, 20:17

muy bueno el script thanks

Zeke
Iniciado
Iniciado

0/3

Créditos 2

Gracias : 2

Volver arriba Ir abajo

Re: [XP] Skill Bar

Mensaje por Wecoc el 2014-01-04, 07:54

Zeke, no hagas necropost, lee las normas porfavor.

ERON module tiene cosas que me gustan, y otras que no. Creo que puede dar problemas con ciertas batallas personalizadas, es demasiado específico en cuanto a batallas, de hecho prácticamente es un sistema de batalla personalizado. Éste script entiendo que lo utilice y realmente ahorra algunas líneas, pero no vale la pena.

Lo he independizado del ERON module, ahora funciona solo, y no dará problemas con batallas. Si usáis ERON module como sistema de batalla usad el de arriba, si no usad mi modificación.

Código:
#==============================================================================
# [XP] Skill bar
#------------------------------------------------------------------------------
# Autor: Eron
# Modificado (independizado del ERON module) por Wecoc
#==============================================================================

module ERON_IND
  MENU_BARS = false
end

class Game_Battler
  
  attr_reader  :exp_list
  
  def rpg
    return $data_actors[@actor_id]
  end
  def rpg_class
    return $data_classes[@class_id]
  end

  def learnings(lv=99)
    return rpg_class.learnings.select {|x| x.level <= lv }
  end
  
  def level_learnings(lv=1)
    return rpg_class.learnings.select {|x| x.level == lv }
  end
 
 def ini_skills(lv=1)
    return learnings(lv).collect {|x| x.skill_id}
  end
  
  def actual_skills
    return @skills
  end
end

class Array
  def sort_by_array(other)
    new_array = []
    self_array = []
    return self if self.size != other.size
    for i in 0...self.size
      self_array.push self[i]
    end
    while other.size > 0
      for i in 0...other.size
        if other[i] == other.min
          min = i
        end
      end
      new_array.push self_array[min]
      other.delete_at(min)
      self_array.delete_at(min)
    end
    return new_array
  end
 
 def sort_by_array!(other)
    self.replace(sort_by_array(other))
  end
end

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================

class Window_Base < Window
  def draw_bar(actual_value, max_value, x, y, w, h, color)
    border_color = Color.new(0,0,0,255)
    bar_color = color
    empty_color = Color.new(75,75,75,255)
    bar_width = ((actual_value * 1.0 / max_value) * (w - 2)).to_i
    border = Rect.new(x, y, w, h)
    bar = Rect.new(x + 1, y + 1, bar_width, h - 2)
    empty = Rect.new(x + 1, y + 1, w - 2, h - 2)
    self.contents.fill_rect(border, border_color)
    self.contents.fill_rect(empty, empty_color)
    self.contents.fill_rect(bar, bar_color)
  end
  
  def draw_empty_bar(x, y, w, h)
    border_color = Color.new(0,0,0,255)
    empty_color = Color.new(75,75,75,255)
    border = Rect.new(x, y, w, h)
    empty = Rect.new(x + 1, y + 1, w - 2, h - 2)
    self.contents.fill_rect(border, border_color)
    self.contents.fill_rect(empty, empty_color)
  end
  
  def draw_actor_hp_bar(actor, x, y, w = 134, h = 8)
    draw_bar(actor.hp, actor.maxhp, x, y, w, h, Color.new(200,0,0,255))
  end
  
  def draw_actor_sp_bar(actor, x, y, w = 134, h = 8)
    draw_bar(actor.sp, actor.maxsp, x, y, w, h, Color.new(0,100,200,255))
  end
  
  def draw_actor_exp_bar(actor, x, y, w = 200, h = 8)
    exp = actor.exp_s.to_i
    next_exp = actor.next_exp_s.to_i
    draw_bar(exp, next_exp, x, y, w, h, Color.new(220,180,0,255))
  end
  
  def draw_actor_skill_bar(val1, val2, x, y, w = 164, h = 8)
    if val1 == val2
      draw_bar(val1, val2, x, y, w, h, Color.new(220,180,0,255))
    else
      draw_bar(val1, val2, x, y, w, h, Color.new(160,80,60,255))
    end
  end
end

#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
#  This window displays party member status on the menu screen.
#==============================================================================

if ERON_IND::MENU_BARS
  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 + 138, y)
        
        draw_actor_level(actor, x, y + 28)
        draw_actor_state(actor, x + 90, y + 28)
        draw_actor_exp(actor, x, y + 56)
        draw_actor_exp_bar(actor, x, y + 82)
        draw_actor_hp(actor, x + 236, y + 22)
        draw_actor_hp_bar(actor, x + 236, y + 50, 134)
        draw_actor_sp(actor, x + 236, y + 56)
        draw_actor_sp_bar(actor, x + 236, y + 82, 134)
      end
    end
  end
end

#==============================================================================
# ** Window_Skill
#------------------------------------------------------------------------------
#  This window displays usable skills on the skill and battle screens.
#==============================================================================

class Window_Skill < Window_Selectable
  def initialize(actor)
    super(0, 128, 640, 352)
    @actor = actor
    @column_max = 1
    refresh
    self.index = 0
    if $game_temp.in_battle
      self.y = 64
      self.height = 256
      self.back_opacity = 160
    end
  end

  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    level_skills = @actor.ini_skills(@actor.rpg.final_level)
    for i in 0...@actor.skills.size
      skill = $data_skills[@actor.skills[i]]
      if skill != nil
        @data.push(skill)
      end
    end
    @data2 = []
    @data3 = []
    for i in 0...level_skills.size
      skill = $data_skills[level_skills[i]]
      if skill != nil
        @data2.push(skill)
      end
      for j in 0...@actor.rpg_class.learnings.size
        if @actor.rpg_class.learnings[j].skill_id == skill.id
          @data3.push @actor.rpg_class.learnings[j].level
        end
      end
    end
    @data2.sort_by_array!(@data3)
    for i in 0...@data2.size
      @data.push @data2[i]
    end
    @data.uniq!
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end

  def draw_item(index)
    skill = @data[index]
    learnings = @actor.rpg_class.learnings
    level = 0
    if learnings != nil
      for i in 0...learnings.size
        if learnings[i].skill_id == skill.id
          level = learnings[i].level
        end
      end
    end
    font_color = normal_color
    if not @actor.skill_can_use?(skill.id)
      font_color = disabled_color
    end
    if @actor.level < level
      font_color = disabled_color
    end
    self.contents.font.color = font_color
    x = 4
    y = index * 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)
    self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
    self.contents.font.color = system_color if font_color == normal_color
    self.contents.draw_text(x + 200, y, 32, 32, $data_system.words.sp)
    self.contents.font.color = system_color
    self.contents.draw_text(x + 312, y, 92, 32, "Progreso:")
    if level == 0
      draw_actor_skill_bar(1, 1, x + 412, y + 12)
    else
      if @actor.exp_list[level] == 0 or @actor.exp >= @actor.exp_list[level]
        draw_actor_skill_bar(1, 1, x + 412, y + 12)
      else
        draw_actor_skill_bar(@actor.exp, @actor.exp_list[level], x+412, y+12)
      end
    end
  end
end

Además, si veis la primera línea donde pone MENU_BARS = false, si lo cambiáis a true en la ventana del menú se veran las barras de vida, magia y experiencia.

Wecoc
Administrador
Administrador



Créditos 8566

Gracias : 387

Volver arriba Ir abajo

Re: [XP] Skill Bar

Mensaje por Contenido patrocinado Hoy a las 18:05


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.