O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Como fazer a Barra de HP diminuir para o outro lado ?

Iniciado por Red, 25/05/2017 às 12:18

25/05/2017 às 12:18 Última edição: 25/05/2017 às 17:20 por King Ragnar
Para entenderem melhor, fiquem com uma print :
Spoiler
[close]

Eu quero que a barra diminua na outra direção. Uso o Imperial Action System II.
Vou deixar o Script do HUD aqui :
#==============================================================================
# ** Imperial Action System I -- Heads-Up Display
#==============================================================================
# Autor: AndreMaker ou Maker-Leon ou Leon-S.K
#==============================================================================
#  Este é o script da HUD utilizada pelo Sistema, abaixo seguem as configurações
# da mesma.
#==============================================================================

module HUD_Config
  
  #--------------------------------------------------------------------------
  # * Configurações Gerais
  #--------------------------------------------------------------------------

  Switch = 2              # Switch que ativa/desativa a HUD
  
  Activate_Key = Key::F   # Tecla que controla a switch
  
  Base_Bar = 'bars-base'  # Grafico da base da HUD
  HP_Bar  = 'hp_bar'      # Grafico da barra de HP
  MP_Bar  = 'mp_bar'      # Grafico da barra de MP

  # Coordenadas X e Y da barra de HP
  HP_X = 181  
  HP_Y = 24
  
  # Coordenadas X e Y da barra de MP
  MP_X = 292
  MP_Y = 24
  
  # TEXTO
  Text_Size = 14        # Tamanho  
  Text_Color = Color.new(255,216,0)   # Cor => Color.new(red, green, blue)
  Text_Bold = true      # Negrito? (true/false)
  Alingment = 1         # Alinhamento: Esquerda 0, Centrado 1 e Direita 2
  
  # Coordenadas X e Y do Nome
  Name_X = 67
  Name_Y = 13
  # Largura e Altura do nome (respectivamente)
  Name_Width = 104
  Name_Height = 14
  
  # Coordenadas X e Y do LVL
  LV_X = 11
  LV_Y = 46
  # Largura e Altura do LVL (respectivamente)
  LV_Width = 17
  LV_Height = 14
  
  # Coordenadas X e Y das FACES
  DF_X = 99999
  DF_Y = 39999
  
  # Grafico padrão de Faces
  D_Face = "default_face"
  
  #--------------------------------------------------------------------------
  # * Faces próprias para o player
  #--------------------------------------------------------------------------
                          Custom_Faces = {}
  
  # Custom_Faces[ID] = [nome do grafico, x, y]
  Custom_Faces[18] = ["rasante_face", 9, 3]
  Custom_Faces[19] = ["tk_face", 9, 3]
  Custom_Faces[20] = ["liza_face", 9, 3]
  Custom_Faces[21] = ["willie_face", 9, 3]
  

#==============================================================================

  module Action_Bars
    
    #--------------------------------------------------------------------------
    # * Configurações de Skills, Items e Buffs
    #--------------------------------------------------------------------------
    
    Visible = true          # Visiveis? (true/false)
    
    Base = "action_bars"    # Grafico Base
    Base_X = 425            # Coord X
    Base_Y = 0              # Coord Y
    
    Skill_X = 435           # Coord X do icone da skill selecionada
    Skill_Y = 23            # Coord Y do icone da skill selecionada
    
    Buff_X = 473            # Coord X do icone do buff selecionada
    Buff_Y = 23             # Coord Y do icone do buff selecionada
    
    Item_X = 510            # Coord X do icone do item selecionada
    Item_Y = 23             # Coord Y do icone do item selecionada
    
  end
  
#==============================================================================
end

#===============================================================================
#  FIM DAS CONFIGURAÇÕES
#===============================================================================

#==============================================================================
class Hud < Sprite
  
  include HUD_Config
  
  attr_accessor :hp
  attr_accessor :mp
  attr_accessor :slc_item
  attr_accessor :slc_skill
  attr_accessor :slc_buff
  
  def initialize
    super()
    self.bitmap = Bitmap.new(544, 416)
    @base = Cache.system(Base_Bar)
    @hp_bit = Cache.system(HP_Bar)
    @mp_bit = Cache.system(MP_Bar)
    @level = $game_party.members[0].level 
    @name = $game_party.members[0].name
    self.bitmap.blt(0,0, @base, Rect.new(0,0,@base.width, @base.height))
    self.bitmap.blt(HP_X,HP_Y, @hp_bit, Rect.new(0,0,@hp_bit.width, @hp_bit.width))
    self.bitmap.blt(MP_X,MP_Y, @mp_bit, Rect.new(0,0,@mp_bit.width, @mp_bit.height))
    self.bitmap.font.color = Text_Color; self.bitmap.font.size = Text_Size; self.bitmap.font.bold = Text_Bold
    self.bitmap.draw_text(Name_X,Name_Y,Name_Width,Name_Height,@name, Alingment)
    self.bitmap.draw_text(LV_X,LV_Y,LV_Width,LV_Height,@level, Alingment)
    refresh
  end
  
  def refresh
    actor = $game_party.members[0]
    self.bitmap.clear
    @name, @level = actor.name, actor.level
    @wd = @hp_bit.width * actor.hp / actor.mhp
    @md = @mp_bit.width * actor.mp / actor.mmp
    @slc_item = $game_player.selected_item
    @slc_skill = $game_player.selected_skill
    @slc_buff = $game_player.selected_buff
    draw_face
    draw_bars
    draw_action_bars if Action_Bars::Visible
    $game_system.hud_need_refresh = false
  end
  
  def draw_bars
    actor = $game_party.members[0]
    self.bitmap.blt(0,0, @base, Rect.new(0,0,@base.width, @base.height))
    self.bitmap.blt(HP_X,HP_Y, @hp_bit, Rect.new(0,0,@wd, @hp_bit.width))
    self.bitmap.blt(MP_X,MP_Y, @mp_bit, Rect.new(0,0,@md, @mp_bit.height))
    self.bitmap.font.color = Text_Color; self.bitmap.font.size = Text_Size; self.bitmap.font.bold = Text_Bold
    self.bitmap.draw_text(Name_X,Name_Y,Name_Width,Name_Height,@name, Alingment)
    self.bitmap.draw_text(LV_X,LV_Y,LV_Width,LV_Height,@level, Alingment)
  end
  
  def draw_face
    actor = $game_party.members[0]
    if Custom_Faces.keys.include?(actor.id)
      array = Custom_Faces[actor.id]
      bitmap = Cache.face(array[0])
      self.bitmap.blt(array[1], array[2], bitmap, Rect.new(0,0,bitmap.width, bitmap.height))
    else
      bitmap = Cache.face(D_Face)
      self.bitmap.blt(DF_X, DF_Y, bitmap, Rect.new(0,0,bitmap.width, bitmap.height))
    end
  end
  
  def draw_action_bars
    bitmap = Cache.system(Action_Bars::Base)
    self.bitmap.blt(Action_Bars::Base_X, Action_Bars::Base_Y, bitmap, Rect.new(0,0,bitmap.width, bitmap.height))
    if not @slc_skill.nil?
      index = @slc_skill.icon_index
      self.bitmap.blt(Action_Bars::Skill_X, Action_Bars::Skill_Y, Cache.system('Iconset'), Rect.new(index%16*24,index/16*24,24,24))
    end
    if not @slc_buff.nil?
      index = @slc_buff.icon_index
      self.bitmap.blt(Action_Bars::Buff_X, Action_Bars::Buff_Y, Cache.system('Iconset'), Rect.new(index%16*24,index/16*24,24,24))
    end
    if not @slc_item.nil?
      index = @slc_item.icon_index
      self.bitmap.blt(Action_Bars::Item_X, Action_Bars::Item_Y, Cache.system('Iconset'), Rect.new(index%16*24,index/16*24,24,24))
      x, y, number = Action_Bars::Item_X, Action_Bars::Item_Y, $game_party.item_number(@slc_item)
      self.bitmap.draw_text(x + 5,y + 9,70,35, "x#{number.to_s}")
    end
  end
  
  def p_width
    @base.width
  end
  
  def p_height
    @base.height
  end
  
  def ww
    bitmap = Cache.system(Action_Bars::Base)
    return Action_Bars::Base_X, Action_Bars::Base_X + bitmap.width
  end
  
  def hh
    bitmap = Cache.system(Action_Bars::Base)
    return Action_Bars::Base_Y, Action_Bars::Base_Y + bitmap.height
  end
  
  def dispose
    super
  end
end

class Scene_Map < Scene_Base
  
  include HUD_Config
      
  alias hud_start start
  alias hud_terminate terminate
  alias hud_update update
  
  def start
    hud_start
    if $game_switches[Switch] == true
      @hud = Hud.new
    end
  end
  
  def update
    hud_update
    if Input.trigger?(Activate_Key)
      $game_switches[Switch] = ($game_switches[Switch] ? false : true)
    end
    if $game_switches[Switch] == true
      @hud.nil? ? @hud = Hud.new : refresh_hud
    else
      if not @hud.nil?; @hud.dispose; @hud = nil; end
    end
  end
  
  def refresh_hud
    @hud.refresh if $game_party.members[0].hp != @hud.hp or $game_party.members[0].mp != @hud.mp
    @hud.refresh if $game_player.selected_skill != @hud.slc_skill or $game_player.selected_buff != @hud.slc_buff
    @hud.refresh if $game_system.hud_need_refresh
    @hud.z = 500 if !$game_map.windows.empty?
    down = false
    if $game_player.screen_x <= @hud.p_width and $game_player.screen_y <= @hud.p_height
      @hud.opacity = 100 if @hud.opacity != 100
    else
      if Action_Bars::Visible
        x1, y1 = @hud.ww
        x2, y2 = @hud.hh
        if $game_player.screen_x.between?(x1,y1) and $game_player.screen_y.between?(x2 + 10,y2 + 10)
          @hud.opacity = 100 if @hud.opacity != 100
        else
          @hud.opacity = 255 if @hud.opacity != 255
        end
      else
        @hud.opacity = 255 if @hud.opacity != 255
      end
    end
  end
  
  def terminate
    if @hud != nil; @hud.dispose if not @hud.disposed?; end
    hud_terminate
  end
  
  def hide_hud
    return if @hud.nil?
    return if @hud.disposed?
    @hud.visible ? @hud.visible = false : @hud.visible = true
  end
end

class Game_System; attr_accessor :hud_need_refresh; end
  
class Scene_Map; attr_reader :spriteset; end

class Spriteset_Map
  
  include Imperial
  include Imperial_Config
  
  attr_reader :viewport1
  
  alias mp_initialize initialize
  alias mp_update update
  alias mp_dispose dispose
  
  def update_minibars_disposing
    all_actors.each {|actor|
      next if actor.minibar.nil?
      if actor.killed
        actor.minibar.dispose if not actor.minibar.disposed?
        actor.minibar = nil
      end
    }
    $game_map.enemies.each {|enemy|
      next if enemy.minibar.nil?
      if enemy.enemy.nil?
        enemy.minibar.dispose if not enemy.minibar.disposed?
        enemy.minibar = nil
      else
        if enemy.enemy.hp <= 0 or enemy.killed
          enemy.minibar.dispose if not enemy.minibar.disposed?
          enemy.minibar = nil
        end
      end
    }
  end
  
  def initialize
    @hero_weapons = {}
    @enemy_weapons = {}
    @secondary_weapons = {}
    mp_initialize
    @shield_sprite = Sprite.new(@viewport1)
    @shield_sprite.ox, @shield_sprite.oy = 22, 22
    refresh_shield
  end
  
  def refresh_shield
    return if $game_party.members[0].equips[1].nil?
    @bitmap = Bitmap.new(24,24)
    icon = $game_party.members[0].equips[1].icon_index
    return if icon.nil?
    @bitmap.blt(0,0,Cache.system("Iconset"),Rect.new(icon%16*24,icon/16*24,24,24))
  end
  
  def update
    mp_update
    map = $game_map
    update_minibars_disposing
    trash = []
    map.damage_sprites.each {|sprite|
      sprite.update
      trash.push(sprite) if sprite.disposed?
    }
    trash.each {|item| map.damage_sprites.delete(item) }
    map.damage_sprites.compact!
    @enemy_weapons = {} if @enemy_weapons.nil?
    map.drops.each { |drop|
      drop.update
      trash.push(drop) if drop.disposed?
    }
    trash.each {|item| map.drops.delete(item)}; trash.clear
    if !$game_map.windows.empty?
      if $game_map.windows[0].is_a?(Pop)
        $game_map.windows[0].update
        trash.push($game_map.windows[0]) if $game_map.windows[0].disposed?
      end
    end
    trash.each { |item| $game_map.windows.delete(item) }; trash.clear
    $game_map.windows.compact!
    otherss = []; no_need = []
    map.characters.each { |char| otherss.push(char) if char.is_a?(Ranged::Enemy_Skill) }
    otherss.each {|char| no_need.push(char) if !map.enemies.include?(char.enemy)}
    otherss.clear; no_need.each {|char| map.characters.delete(char)}; no_need.clear
    map.characters.each { |char|
      char.sprite = Sprite_Character.new(@viewport1, char) if char.sprite.nil? 
      char.update; trash.push(char) if char.disposed? }
    trash.each { |item| $game_map.characters.delete(item) }; trash.clear
    # Weapon Sprites
    update_hero_weapons if !@hero_weapons.empty?
    update_enemy_weapons if !@enemy_weapons.empty?
    update_secondary_weapons if !@secondary_weapons.empty?
    if $game_player.shielding
      update_shielding
    else
      if @shield_sprite
        @shield_sprite.bitmap = nil if @shield_sprite.bitmap != nil
      end
    end
  end
  
  def update_shielding
    refresh_shield if @bitmap.nil?
    return if @bitmap.nil?
    @shield_sprite.bitmap = @bitmap if @shield_sprite.bitmap.nil?
    @shield_sprite.x = $game_player.screen_x + Shield_correction[$game_player.direction][0]
    @shield_sprite.y = $game_player.screen_y + Shield_correction[$game_player.direction][1]
    @shield_sprite.angle = Shield_angles[$game_player.direction]
    @shield_sprite.z = Shield_z[$game_player.direction]
  end
  
  def dispose
    $game_map.last_drops = $game_map.drops
    $game_map.characters.each {|char| char.sprite.dispose if not char.sprite.disposed?; char.sprite = nil}
    $game_map.damage_sprites.each { |sprite| sprite.dispose if not sprite.disposed?}
    $game_map.windows.each { |sprite| sprite.dispose if not sprite.disposed? }
    $game_map.damage_sprites.clear; $game_map.windows.clear
    @hero_weapons.each {|array|
      next if array[1][0].nil?
      array[1][0].dispose if not array[1][0].disposed?
    }
    @hero_weapons = nil
    @enemy_weapons.each {|array|
      next if array[1][0].nil?
      array[1][0].dispose if not array[1][0].disposed?
    }
    @enemy_weapons = nil
    @shield_sprite.dispose if not @shield_sprite.disposed?
    if $game_player.minibar != nil
      $game_player.minibar.dispose if not $game_player.minibar.disposed?
      $game_player.minibar = nil
    end
    $game_map.enemies.each {|enemy|
      next if enemy.minibar.nil?
      enemy.minibar.dispose if not enemy.minibar.disposed?
      enemy.minibar = nil
    }
    $game_player.followers.each {|f|
      next if f.minibar.nil?
      f.minibar.dispose if not f.minibar.disposed?
      f.minibar = nil
    }
    mp_dispose
  end
  
  def hero_attack(hero, weapon, ranged = false)
    return if hero.nil?
    return if !weapon.is_a?(RPG::Weapon)
    icon = (weapon.icon_index rescue nil)
    if !icon.nil?
      bitmap = Bitmap.new(24,24)
      bitmap.blt(0,0,Cache.system("Iconset"),Rect.new(icon%16*24,icon/16*24,24,24))
      sprite = Sprite.new(@viewport1)
      sprite.ox, sprite.oy = 22,22
      sprite.bitmap = bitmap
      @hero_weapons[hero] = [sprite,true,12,ranged]
    end
  end
  
  def enemy_attack(event, weapon, ranged = false)
    return if event.nil?
    return if event.enemy.nil?
    return if !weapon.is_a?(RPG::Weapon)
    icon = (weapon.icon_index rescue nil)
    if !icon.nil?
      bitmap = Bitmap.new(24,24)
      bitmap.blt(0,0,Cache.system("Iconset"),Rect.new(icon%16*24,icon/16*24,24,24))
      sprite = Sprite.new(@viewport1)
      sprite.ox, sprite.oy = 22,22
      sprite.bitmap = bitmap
      @enemy_weapons[event] = [sprite,true,12,ranged]
    end
  end
  
  def update_hero_weapons
    trash = []
    @hero_weapons.each_with_index {|array, i|
      update_array_weapon(array)
      trash.push(@hero_weapons[i]) if array[1][1] == false
    }
    trash.each {|item| @hero_weapons.delete(item) }; trash.clear
  end
  
  def update_enemy_weapons
    trash = []
    @enemy_weapons.each_with_index {|array, i|
      update_array_weapon(array)
      trash.push(@enemy_weapons[i]) if array[1][1] == false
    }
    trash.each {|item| @enemy_weapons.delete(item) }; trash.clear
  end
  
  def update_secondary_weapons
    
  end
  
  def update_array_weapon(array)
    array[1][0].x = array[0].screen_x + Move_correction[array[0].direction][0]
    array[1][0].y = array[0].screen_y + Move_correction[array[0].direction][1]
    if !array[1][3]
      case array[1][2]
      when 12
        array[1][0].angle = Sprite_angles[array[0].direction][0]
        array[1][0].z = Sprite_z_values[array[0].direction] - 15
      when 9
        array[1][0].angle = Sprite_angles[array[0].direction][1]
        array[1][0].z = Sprite_z_values[array[0].direction] - 15
      when 6
        array[1][0].angle = Sprite_angles[array[0].direction][2]
        array[1][0].z = Sprite_z_values[array[0].direction] - 15
      when 3
        array[1][0].angle = Sprite_angles[array[0].direction][3]
        array[1][0].z = Sprite_z_values[array[0].direction] - 15
      when 0
        array[1][1] = false
        array[1][0].bitmap = nil
      end
    else
      if array[1][2] > 0
        array[1][0].angle = Sprite_angles[array[0].direction][2]
        array[1][0].z = Sprite_z_values[array[0].direction] - 15
      else
        array[1][1] = false
        array[1][0].bitmap = nil
      end
    end
    array[1][0].update
    array[1][2] -= 1
  end
end

class Game_Map
  
  attr_accessor :enemies
  attr_accessor :damage_sprites
  attr_accessor :characters
  attr_accessor :drops
  attr_accessor :windows
  attr_accessor :last_drops
  
  alias mp_setup setup
  
  def setup(map_id)
    @enemies.nil? ? @enemies = [] : @enemies.clear
    @damage_sprites.nil? ? @damage_sprites = [] : @damage_sprites.clear
    @windows.nil? ? @windows = [] : @windows.clear
    @characters.nil? ? @characters = [] : @characters.clear
    @drops.nil? ? @drops = [] : @drops.clear
    @last_drops.nil? ? @last_drops = [] : @last_drops.clear
    mp_setup(map_id)
  end
end

Consegui meu equilíbrio cortejando a insanidade.

Se eu entendi o que você quer...você irá ter que fazer assim:
Na parte que vai representar gráficamente, ao invés de você "tirar o valor", você incrementa, entendeu? faça o oposto.
engenheiro de software e designer aposentado

Procura por essa linha no método draw_bars:

self.bitmap.blt(MP_X,MP_Y, @mp_bit, Rect.new(0,0,@md, @mp_bit.height))


E substitui por essa:

self.bitmap.blt(MP_X + @mp_bit.width - @md,MP_Y, @mp_bit, Rect.new(0,0,@md, @mp_bit.height))


Acho que resolve.

Citação de: GabrielMoon online 25/05/2017 às 12:28
Se eu entendi o que você quer...você irá ter que fazer assim:
Na parte que vai representar gráficamente, ao invés de você "tirar o valor", você incrementa, entendeu? faça o oposto.

Entendi, mas não sei como fazer...  :hein:
Consegui meu equilíbrio cortejando a insanidade.

Citação de: King Gerar online 25/05/2017 às 12:28
Procura por essa linha no método draw_bars:

self.bitmap.blt(MP_X,MP_Y, @mp_bit, Rect.new(0,0,@md, @mp_bit.height))


E substitui por essa:

self.bitmap.blt(MP_X + @mp_bit.width - @md,MP_Y, @mp_bit, Rect.new(0,0,@md, @mp_bit.height))


Acho que resolve.

A barra que diminui pra lá ----> é a de HP
A de MP ta do jeito que quero
Consegui meu equilíbrio cortejando a insanidade.

Citação de: King Ragnar online 25/05/2017 às 13:36
[...]
A barra que diminui pra lá ----> é a de HP
A de MP ta do jeito que quero

Ah sim, my fault. Substitui então a linha anterior por essa aqui:

self.bitmap.blt(HP_X + @hp_bit.width - @wd,HP_Y, @hp_bit, Rect.new(0,0,@wd, @hp_bit.width))

Deu o seguinte erro :
Spoiler
[close]
Consegui meu equilíbrio cortejando a insanidade.

25/05/2017 às 16:28 #7 Última edição: 25/05/2017 às 16:34 por M3T
Substitua a linha mencionada por:
self.bitmap.blt(HP_X+@hp_bit.width-@wd,HP_Y, @hp_bit, Rect.new(@hp_bit.width-@wd,0,@wd, @hp_bit.width))


EDIT: esqueci de mencionar que essa linha é a do método draw_bars, pra mim é a 149. Tem outra igual no initialize, mas não é ela. Colocar no lugar errado causa o erro que você falou.

Citação de: M3T online 25/05/2017 às 16:28
Substitua a linha mencionada por:
self.bitmap.blt(HP_X+@hp_bit.width-@wd,HP_Y, @hp_bit, Rect.new(@hp_bit.width-@wd,0,@wd, @hp_bit.width))

Mesmo erro ainda  :._.:
Consegui meu equilíbrio cortejando a insanidade.

Citação de: King Ragnar online 25/05/2017 às 16:33
Citação de: M3T online 25/05/2017 às 16:28
Substitua a linha mencionada por:
self.bitmap.blt(HP_X+@hp_bit.width-@wd,HP_Y, @hp_bit, Rect.new(@hp_bit.width-@wd,0,@wd, @hp_bit.width))

Mesmo erro ainda  :._.:

Veja o edit no meu post.

Spoiler
Citação de: M3T online 25/05/2017 às 16:43
Citação de: King Ragnar online 25/05/2017 às 16:33
Citação de: M3T online 25/05/2017 às 16:28
Substitua a linha mencionada por:
self.bitmap.blt(HP_X+@hp_bit.width-@wd,HP_Y, @hp_bit, Rect.new(@hp_bit.width-@wd,0,@wd, @hp_bit.width))

Mesmo erro ainda  :._.:

Veja o edit no meu post.
[close]

Deu certo, obrigado [user]King Gerar[/user](Gê), [user]Alisson[/user] e principalmente ao [user]M3T[/user]  :<3: :ok:
Consegui meu equilíbrio cortejando a insanidade.