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

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

AYUDA: Stack overflow

 :: RPG Maker :: Ayuda RPG

Ver el tema anterior Ver el tema siguiente Ir abajo

AYUDA: Stack overflow

Mensaje por Seba el 2015-10-17, 20:47

Buenas a todos, he intentado solucionar este problema pero no he podido...

En la línea 791 del script que voy a compartir a continuación supuestamente es la causante de un fallo en las batallas que al atacar/evadir un golpe, salta el error de "stack overflow" y el juego se cierra por completo.

Les dejo el script:
Spoiler:

Código:
=begin
================================================================================
            F.A.S.T.E.B.S (Face Shifting Emotional Battle Status) v1.4
                            by wltr3565
================================================================================
This is mainly for my project. Yes, there's star's, but I don't want to use
his's. I just prefer Tales of styled. With those shifting characters emotions
and stuff. It makes more character personalization. And what did I get? This.
================================================================================
Features:
- "Rolling" numbers
- Adaptable gauge color depends on the hp/mp's percentage!
- "Easy" to adjust positions.
- Shiftable fighter faces!
- Animative gauge.
- Has it's own custom cursor.
- Real time changes of faces. depends on the battle situation!
- (hopefully) compatible for all battle systems!
- Easy change of the battle faces! Just change the character's sprite!
================================================================================
How it will work:
Just like star's, but it's in horizontal position like Ziifee's, and can make
the character faces change, adapting their actions!
================================================================================
How to Use:
You need these files in Graphics/System folder:
- Background image. It's optional.
- Cursor image. The file name is the one you assigned in CURSOR.
- HP gauge color image. The file name is the one you assigned in GAUGE_DEFAULT
- HP gauge skin image. The file name is the one you assigned in SKIN_DEFAULT
- Crisis HP gauge color image. The file name is the one you assigned in
  GAUGE_CRISIS_DEFAULT
- Damage skin image. The file name is the one you assigned in
  GAUGE_DAMAGE_DEFAULT
- MP gauge color image. The file name is the one you assigned in MP_GAUGE_DEFAULT
- MP gauge skin image. The file name is the one you assigned in MP_SKIN_DEFAULT
- Crisis MP gauge color image. The file name is the one you assigned in
  MP_GAUGE_CRISIS_DEFAULT
- MP damage skin image. The file name is the one you assigned in
  MP_GAUGE_DAMAGE_DEFAULT
- Numbers in Tankentai format. The file name is the one you assigned in
  NUMBER_NAME.
- Battle faces for each actors. The filename format must be like this:
   [corresponding actor's sprite filename]_[action]
  The [corresponding actor's sprite filename] is the actor's current sprite
  filename. And [action] is the action name. The actions available is these:
  - attack
  - guard
  - crisis
  - heal
  - KO
  - damage
  - normal
  Example:
    You want to make an actor's KOed face. And the sprite name is $Ralph. The
    filename should be like this:
    $Ralph_KO
- Statebox image. The size is free, but name it statebox. The size will
  determine the number of states available to show.

Please remember to put the files in Graphics/System folder!
Then you can adjust things in configuration below.
================================================================================
Install:
Insert this above main.
================================================================================
Terms of Use:
Credit me, wltr3565. For commercial uses, contact me so your game can be
included in my free-to-play lists :D. Don't forget to credit your resource
provider!
================================================================================
Thanks:
Enu: Numbers method.
Star: Inspiration.
Zifee: Inspiration.
Namco Tales Studio: Main Inspiration.
Project_Light: Hey, did he/she requested this as well?
================================================================================
=end
#===============================================================================
#   COMMENCING COMPATIBILITY FLAG
#===============================================================================
$imported = {} if $imported == nil
$imported["wltr3565's_Battle_Status"] = true
#===============================================================================
#   END COMPATIBILITY FLAG
#===============================================================================
module WLTR
  module BATTLE_STATUS_SETUP
#===============================================================================
# If you just feel weird with it and want to add a background or something, just
# write the file name of your desired background image. Write it nil without ""
# if you don't want to use it.
#===============================================================================
    BG = nil
#===============================================================================
# Below is to define the cursor image for you to use. Just write the cursor's
# filename.
#===============================================================================
    CURSOR = "Cursor"
    
#===============================================================================
# The cursor's horizontal derivation position from the default. The larger the
# number, the more it goes to the right.
#===============================================================================
    CURSOR_X = 0
    
#===============================================================================
# The cursor's vertical derivation position from the default. The larger the
# number, the more it goes to the bottom.
#===============================================================================
    CURSOR_Y = 0
    
#===============================================================================
# The "window"'s main vertical position. Your 0 value in this script's y value
# start from the position you assigned below. The larger the number, the more it
# it goes to bottom.
#===============================================================================
    MAIN_Y = 416 - 120
    
#===============================================================================
# The "window"'s main width. The larger the number, the wider the space for
# showing the window.
#===============================================================================
    MAIN_WIDTH = 100
    
#===============================================================================
# The main position for each character's HUD horizontally. The larger the
# number, the more it goes to the right.
#===============================================================================
    POSITION_X = 37
    
#===============================================================================
# The main position for each character's HUD vertically. The larger the
# number, the more it goes to the bottom.
#===============================================================================
    POSITION_Y = 0
    
#===============================================================================
# Space between character's HUD. The larger the number, the more the space
# horizontally.
#===============================================================================
    WIDTH = 125
    
#===============================================================================
# The HPnumber's horizontal derivation position from the default. The larger the
# number, the more it goes to the right.
#===============================================================================
    NUMBERS_X = 45
    
#===============================================================================
# The HPnumber's vertical derivation position from the default. The larger the
# number, the more it goes to the bottom.
#===============================================================================
    NUMBERS_Y = 66
    
#===============================================================================
# The MPnumber's horizontal derivation position from the default. The larger the
# number, the more it goes to the right.
#===============================================================================
    MNUMBERS_X = 45
    
#===============================================================================
# The MPnumber's vertical derivation position from the default. The larger the
# number, the more it goes to the bottom.
#===============================================================================
    MNUMBERS_Y = 82
    
#===============================================================================
# The battle face's horizontal derivation position from the default. The larger
# the number, the more it goes to the right.
#===============================================================================
    FACE_X = 0
    
#===============================================================================
# The battle face's vertical derivation position from the default. The larger
# the number, the more it goes to the bottom.
#===============================================================================
    FACE_Y = 0
    
#===============================================================================
# The name's horizontal derivation position from the default. The larger
# the number, the more it goes to the right.
#===============================================================================
    NAME_X = 5
    
#===============================================================================
# The name's vertical derivation position from the default. The larger
# the number, the more it goes to the bottom.
#===============================================================================
    NAME_Y = 4
    
#===============================================================================
# The 's horizontal derivation position from the skin. The larger the
# number, the more it goes to the right.
#===============================================================================
    HPGAUGE_X = 0
    
#===============================================================================
# The HPskin's horizontal derivation position from the default. The larger the
# number, the more it goes to the right.
#===============================================================================
    HPSKIN_X = 0
    
#===============================================================================
# The HPnumber's vertical derivation position from the skin. The larger the
# number, the more it goes to the bottom.
#===============================================================================
    HPGAUGE_Y = 13
    
#===============================================================================
# The HPskin's vertical derivation position from the default. The larger the
# number, the more it goes to the bottom.
#===============================================================================
    HPSKIN_Y = 96
    
#===============================================================================
# The MPgauge's horizontal derivation position from the skin. The larger the
# number, the more it goes to the right.
#===============================================================================
    MPGAUGE_X = 13
    
#===============================================================================
# The MPskin's horizontal derivation position from the default. The larger the
# number, the more it goes to the right.
#===============================================================================
    MPSKIN_X = 0
    
#===============================================================================
# The MPnumber's vertical derivation position from the skin. The larger the
# number, the more it goes to the bottom.
#===============================================================================
    MPGAUGE_Y = 0
    
#===============================================================================
# The MPskin's vertical derivation position from the default. The larger the
# number, the more it goes to the bottom.
#===============================================================================
    MPSKIN_Y = 96-12 + 36
    
#===============================================================================
# The statebox's horizontal derivation position from the default. The larger the
# number, the more it goes to the right.
#===============================================================================
    STATE_X = 40
    
#===============================================================================
# The statebox's vertical derivation position from the default. The larger the
# number, the more it goes to the bottom.
#===============================================================================
    STATE_Y = 0
  end
end

module WLTR
  module ANIMATED_HP
#===============================================================================
# The HP gauge color's filename. Write it here in a string.
#===============================================================================
  GAUGE_DEFAULT = ""
  
#===============================================================================
# The HP gauge skin's filename. Write it here in a string.
#===============================================================================
  SKIN_DEFAULT = ""
  
#===============================================================================
# The HP gauge crisis color's filename. Write it here in a string.
#===============================================================================
  GAUGE_CRISIS_DEFAULT = ""
  
#===============================================================================
# The HP gauge damage trace color's filename. Write it here in a string.
#===============================================================================
  GAUGE_DAMAGE_DEFAULT = ""
  
#===============================================================================
# The MP gauge color's filename. Write it here in a string.
#===============================================================================
  MP_GAUGE_DEFAULT = ""
  
#===============================================================================
# The MP gauge skin's filename. Write it here in a string.
#===============================================================================
  MP_SKIN_DEFAULT = ""
  
#===============================================================================
# The MP gauge crisis color's filename. Write it here in a string.
#===============================================================================
  MP_GAUGE_CRISIS_DEFAULT = ""
  
#===============================================================================
# The MP gauge damage trace color's filename. Write it here in a string.
#===============================================================================
  MP_GAUGE_DAMAGE_DEFAULT = ""
  
#===============================================================================
# The gauge's changing speed since the gauge is animated. The larger the
# number the faster it goes.
#===============================================================================
  GAUGE_SPEED = 300
  
#===============================================================================
# The damage trace's changing speed. The larger the number, the faster it adapts
# with the main gauge.
#===============================================================================
  DAMAGE_SPEED = 300
  end
end

module WLTR
#===============================================================================
# The number's filename. Write it here in a string.
#===============================================================================
  NUMBER_NAME = "number.png"

#===============================================================================
# The number's rolling delay. The larger the number, the slower it scrolls.
 "Don't make it under 0!"
#===============================================================================
  NUMBER_DELAY = 1
  
#===============================================================================
# The number's space between digits. Defaultly 20. The larger the number, the
# larger the space between digits. 0 Means no space and those numbers will
# overlap each other.
#===============================================================================
  NUMBER_SPACING = 10
end

#===============================================================================
" Ignore below if you're not installing KGC's Overdrive. "
#===============================================================================
module WLTR
  module OVERDRIVE_SETUP
#===============================================================================
# The overdrive skin's image name. Write it in string.
#===============================================================================
    GAUGE_SKIN = "HP_Skin.png"
#===============================================================================
# The overdrive's normal color image name. Write it in string.
#===============================================================================
    GAUGE_NORMAL = "HP_Gauge.png"
#===============================================================================
# The overdrive's full color image name. Write it in string.
#===============================================================================
    GAUGE_FULL = "HP_Gauge_Crisis.png"
#===============================================================================
# The overdrive's horizontal derivation position from the skin. The larger the
# number, the more it goes to the right.
#===============================================================================
    GAUGE_X = 50
#===============================================================================
# The overdrive's vertical derivation position from the skin. The larger the
# number, the more it goes to the bottom.
#===============================================================================
    GAUGE_Y = 0
#===============================================================================
# The overdrive's moving speed. The larger, the faster it fills and decrease.
#===============================================================================
    GAUGE_SPEED = 3
  end
end
"=============================================================================="
"   BELOW IS TOO DANGEROUS TO READ WITHOUT PROPER SCRIPTING SKILLS. THEREFOR,  "
"                            EDIT AT YOUR OWN RISK!                            "
"=============================================================================="

class Game_System
  attr_accessor :number_speed
  alias initialize_number_speed initialize
  def initialize
    initialize_number_speed
    
    @number_speed = WLTR::NUMBER_DELAY
  end
  
  def number_speed
    return @number_speed
  end
end

class Window_BattleStatus < Window_Selectable
  def initialize
    super(0, WLTR::BATTLE_STATUS_SETUP::MAIN_Y, 544, WLTR::BATTLE_STATUS_SETUP::MAIN_WIDTH)
    renew
  end
  
  def renew
    @member_contents = $game_party.members.clone
    @members = $game_party.members.size
    @item_max = @members
    @column_max = @members
    self.cursor_rect.empty
    self.opacity = 0
    self.back_opacity = 0
    @view_area = Viewport.new(0, WLTR::BATTLE_STATUS_SETUP::MAIN_Y, 544, WLTR::BATTLE_STATUS_SETUP::MAIN_WIDTH)
    @x = WLTR::BATTLE_STATUS_SETUP::POSITION_X
    @y = WLTR::BATTLE_STATUS_SETUP::POSITION_Y
    self.x = @x
    self.y = @y
    @bg = Sprite.new(@view_area)
    @bg.bitmap = Cache.system(WLTR::BATTLE_STATUS_SETUP::BG) unless WLTR::BATTLE_STATUS_SETUP::BG == nil
    @bg.x = @x
    @cursor = Sprite.new(@view_area)
    @cursor.bitmap = Cache.system(WLTR::BATTLE_STATUS_SETUP::CURSOR)
    @actor_name = []
    @hp_numbers = []
    @hp_gauge = []
    @mp_numbers = []
    @mp_gauge = []
    @face_shift = []
    @states_icon = []
    @overdrive = [] if $imported["OverDrive"]
    @width = WLTR::BATTLE_STATUS_SETUP::WIDTH
    for i in 0...@members
      draw_item(i)
    end
    self.active = false
    @cursor.x = @x + WLTR::BATTLE_STATUS_SETUP::CURSOR_X
    @cursor.y = @y + WLTR::BATTLE_STATUS_SETUP::CURSOR_Y
    @cursor.z = 400
  end
  
  def update_cursor
    if @index < 0
      @cursor.visible = false
    else
      @cursor.visible = true
      row = @index / @column_max
      if row < top_row              
        self.top_row = row          
      end
      if row > bottom_row          
        self.bottom_row = row      
      end
      @cursor.x = @x + (@width * @index) + WLTR::BATTLE_STATUS_SETUP::CURSOR_X
    end
  end

  def refresh
    i = 0
    for member_clone in @member_contents
      unless member_clone.id == $game_party.members[i].id
        erase_sprites
        renew
        return
      else
        i += 1
      end
    end
  end

  def draw_item(index)
    actor = $game_party.members[index]
    x = @x
    y = @y
    draw_actor_name(actor, x, y, index)
    @overdrive[index] = Sprite_Overdrive.new(x + (@width * index) + WLTR::OVERDRIVE_SETUP::GAUGE_X, y + WLTR::OVERDRIVE_SETUP::GAUGE_Y, actor, @view_area) if $imported["OverDrive"]
    @states_icon[index] = Sprite_States_Icon.new(actor, x + (@width * index) + WLTR::BATTLE_STATUS_SETUP::STATE_X, WLTR::BATTLE_STATUS_SETUP::STATE_Y, @view_area)
    @states_icon[index].z = 300
    @hp_numbers[index] = Sprite_Numbers_wltr.new(@view_area, actor.hp, x + (@width * index) + WLTR::BATTLE_STATUS_SETUP::NUMBERS_X, WLTR::BATTLE_STATUS_SETUP::NUMBERS_Y, 200)
    @hp_gauge[index] = Sprite_Param_HP.new(@view_area, actor, x + (@width * index)+ WLTR::BATTLE_STATUS_SETUP::HPSKIN_X, WLTR::BATTLE_STATUS_SETUP::HPSKIN_Y)
    @mp_numbers[index] = Sprite_Numbers_wltr.new(@view_area, actor.mp, x + (@width * index) + WLTR::BATTLE_STATUS_SETUP::MNUMBERS_X, WLTR::BATTLE_STATUS_SETUP::MNUMBERS_Y, 200)
    @mp_gauge[index] = Sprite_Param_MP.new(@view_area, actor, x + (@width * index)+ WLTR::BATTLE_STATUS_SETUP::MPSKIN_X, WLTR::BATTLE_STATUS_SETUP::MPSKIN_Y)
    @face_shift[index] = Sprite_Face.new(actor, x + (@width * index) + WLTR::BATTLE_STATUS_SETUP::FACE_X, WLTR::BATTLE_STATUS_SETUP::FACE_Y, @view_area)
  end
  
  def update
    super
    @bg.update
    for i in 0...@members
      @overdrive[i].update if @overdrive != nil
      @hp_numbers[i].new_number = $game_party.members[i].hp
      @mp_numbers[i].new_number = $game_party.members[i].mp
      @hp_numbers[i].update
      @mp_numbers[i].update
      @hp_gauge[i].update
      @mp_gauge[i].update
      @face_shift[i].update
      @states_icon[i].update
    end
  end
  
  def erase_sprites
    @cursor.dispose
    for i in 0...@members
      actor = $game_party.members[index]
      @overdrive[i].dispose if @overdrive != nil
      @states_icon[i].dispose
      @actor_name[i].dispose
      @hp_numbers[i].dispose
      @hp_gauge[i].dispose
      @mp_numbers[i].dispose
      @mp_gauge[i].dispose
      @face_shift[i].dispose
    end
  end
  
  def dispose
    super
    @bg.dispose unless WLTR::BATTLE_STATUS_SETUP::BG == nil
    erase_sprites
  end
  
  def draw_actor_name(actor, x, y, index = 0)
    @actor_name[index] = Sprite.new(@view_area)
    @actor_name[index].bitmap = Bitmap.new(48,24)
    @actor_name[index].bitmap.clear
    @actor_name[index].bitmap.draw_text(@actor_name[index].bitmap.rect, actor.name)
    @actor_name[index].x = x + (@width * index) + WLTR::BATTLE_STATUS_SETUP::NAME_X
    @actor_name[index].y = y + WLTR::BATTLE_STATUS_SETUP::NAME_Y
    @actor_name[index].z = 300
  end
end

class Sprite_Number_wltr < Sprite
  attr_accessor :instant
  def initialize(viewport, number, filename = WLTR::NUMBER_NAME)
    @oldnumber = @newnumber = number
    super(viewport)
    self.bitmap = Cache.system(filename)
    @filename = filename
    @width = self.bitmap.width / 10
    @height = self.bitmap.height
    self.src_rect = Rect.new(@oldnumber * @width, 0, @width, @height)
    self.z = 350
    @instant = false
  end
  
  def update(filename = @filename)
    @oldnumber.round
    if filename != @filename
      self.bitmap = Cache.system(filename)
      @filename = filename
      @width = self.bitmap.width / 10
      @height = self.bitmap.height
      self.src_rect.set(@oldnumber * @width, 0, @width, @height)
    end
    if @newnumber != @oldnumber
      if @newnumber > @oldnumber
        @oldnumber += 1
      elsif @newnumber < @oldnumber
        @oldnumber -= 1
      end
      if @instant
        @oldnumber = @newnumber
      end
      self.src_rect.x = @oldnumber * width
    end
  end
  
  def old_number
    return @oldnumber
  end
  
  def new_number
    return @newnumber
  end
  
  def new_number=(value)
    @newnumber = value
  end
end

class Sprite_Numbers_wltr
  attr_accessor  :x
  attr_accessor  :y
  attr_accessor  :z
  def initialize(viewport, number, x, y, z = 0, digits = 4)
    @oldnumber = number
    @newnumber = number
    @x = x
    @y = y
    @z = z
    @numbers = []
    # Took from Tankentai
    @numbers[1] = Sprite_Number_wltr.new(viewport, @oldnumber % 10) if @oldnumber >= 0
    @numbers[1].x = @x + (WLTR::NUMBER_SPACING * 4) if @oldnumber >= 0
    @numbers[2] = Sprite_Number_wltr.new(viewport, (@oldnumber % 100)/10) if @oldnumber >= 10
    @numbers[2].x = @x + (WLTR::NUMBER_SPACING * 3) if @oldnumber >= 10
    @numbers[3] = Sprite_Number_wltr.new(viewport, (@oldnumber % 1000)/100) if @oldnumber >= 100
    @numbers[3].x = @x + (WLTR::NUMBER_SPACING * 2) if @oldnumber >= 100
    @numbers[4] = Sprite_Number_wltr.new(viewport, (@oldnumber % 10000)/1000) if @oldnumber >= 1000
    @numbers[4].x = @x + (WLTR::NUMBER_SPACING * 1) if @oldnumber >= 1000
    @numbers[5] = Sprite_Number_wltr.new(viewport, (@oldnumber % 100000)/10000) if @oldnumber >= 10000
    # End
  for i in 1..5
    @numbers[i] = Sprite_Number_wltr.new(viewport, -1) if @numbers[i] == nil
    @numbers[i].x = @x + (WLTR::NUMBER_SPACING * (5 - i))
    @numbers[i].y = @y
    @numbers[i].z = @z
  end
  @delay = 0
  end
  
  def instant=(value)
    for i in @numbers
      @numbers.instant = value
    end
  end
  
  def old_number
    return @oldnumber
  end
  
  def new_number
    return @newnumber
  end
  
  def new_number=(value)
    @newnumber = value
  end
  
  def update
    if @oldnumber != @newnumber
      if @delay == $game_system.number_speed
        if @newnumber < @oldnumber
          if @numbers[1].old_number <= 0
            if (@numbers[2].old_number <= 0) and @numbers[2] != nil
              if (@numbers[3].old_number <= 0) and @numbers[3] != nil
                if (@numbers[4].old_number <= 0) and @numbers[4] != nil
                  if (@numbers[5].old_number == 0) and @numbers[5] != nil
                    instant = true
                    @numbers[5].new_number -= 1
                    @numbers[5].new_number -= 1 if @numbers[5].new_number == 0
                    @numbers[4].new_number = 9
                    @numbers[3].new_number = 9
                    @numbers[2].new_number = 9
                    @numbers[1].new_number = 9
                  end
                elsif (@numbers[4].old_number > 0) and @numbers[4] != nil
                  instant = true
                  @numbers[4].new_number -= 1
                  @numbers[4].new_number -= 1 if @numbers[4].new_number == 0 and @numbers[5].new_number == -1
                  @numbers[3].new_number = 9
                  @numbers[2].new_number = 9
                  @numbers[1].new_number = 9
                end
              elsif (@numbers[3].old_number > 0) and @numbers[3] != nil
                instant = true
                @numbers[3].new_number -= 1
                @numbers[3].new_number -= 1 if @numbers[3].new_number == 0 and @numbers[4].new_number == -1
                @numbers[2].new_number = 9
                @numbers[1].new_number = 9
              end
            elsif (@numbers[2].old_number > 0) and @numbers[2] != nil
              instant = true
              @numbers[2].new_number -= 1
              @numbers[2].new_number -= 1 if @numbers[2].new_number == 0 and @numbers[3].new_number == -1
              @numbers[1].new_number = 9
            end
          else
            instant = true
            @numbers[1].new_number -= 1 if @numbers[1] != nil
          end
          instant = false
          @oldnumber -= 1
        elsif @newnumber > @oldnumber
          if @numbers[1].old_number == 9
            if (@numbers[2].old_number >= 9) and @numbers[2] != nil
              if (@numbers[3].old_number >= 9) and @numbers[3] != nil
                if (@numbers[4].old_number >= 9) and @numbers[4] != nil
                  if (@numbers[5].old_number == 9) and @numbers[5] != nil
                    instant = true
                    @numbers[5].new_number += 1 if @numbers[5].old_number == -1
                    @numbers[5].new_number += 1
                    @numbers[4].new_number = 0
                    @numbers[3].new_number = 0
                    @numbers[2].new_number = 0
                    @numbers[1].new_number = 0
                  end
                elsif (@numbers[4].old_number < 9) and @numbers[4] != nil
                  instant = true
                  @numbers[4].new_number += 1 if @numbers[4].old_number == -1
                  @numbers[4].new_number += 1
                  @numbers[3].new_number = 0
                  @numbers[2].new_number = 0
                  @numbers[1].new_number = 0
                end
              elsif (@numbers[3].old_number < 9) and @numbers[3] != nil
                instant = true
                @numbers[3].new_number += 1 if @numbers[3].old_number == -1
                @numbers[3].new_number += 1
                @numbers[2].new_number = 0
                @numbers[1].new_number = 0
              end
            elsif (@numbers[2].old_number < 9) and @numbers[2] != nil
              instant = true
              @numbers[2].new_number += 1 if @numbers[2].old_number == -1
              @numbers[2].new_number += 1
              @numbers[1].new_number = 0
            end
          else
            instant = true
            @numbers[1].new_number += 1 if @numbers[1] != nil
          end
          instant = false
          @oldnumber += 1
        end
          @delay = 0
      else
        @delay += 1
      end
    end
    @numbers[1].update
    @numbers[2].update if @numbers[2] != nil
    @numbers[3].update if @numbers[3] != nil
    @numbers[4].update if @numbers[4] != nil
    @numbers[5].update if @numbers[5] != nil
  end
  
  def dispose
    for i in 1..5
      @numbers[i].dispose
    end
  end
end

module WLTR
  module FACE
    PERIOD = 120
  end
end


class Sprite_Face < Sprite
  def initialize(actor, x, y, viewport)
    super(viewport)
    @actor = actor
    self.bitmap = Cache.system(actor.current_face)
    self.x = x
    self.y = y
    @period = 0
    @old_action = actor.action_face_get
    self.z = 25
  end
  
  def update
    if @old_action != @actor.action_face_get
      self.bitmap = Cache.system(@actor.action_face_get)
      @old_action = @actor.action_face_get
      @period = 0
    end
    @period += 1
    if @period == WLTR::FACE::PERIOD
      self.bitmap = Cache.system(@actor.current_face) unless @actor.current_face == "guard"
      @period = 0
      @actor.action_face = @actor.hp_condition
    end
  end
end

class Game_Actor < Game_Battler
  attr_accessor :action_face
  alias initialize_face initialize
  def initialize(*args)
    initialize_face(*args)
    @action_face = "normal"
  end
  
  def normal?
    return "normal" if hp > (maxhp * 25 / 100)
  end
  
  def crisis?
    return "crisis" if hp <= (maxhp * 25 / 100)
  end
  
  def ko?
    return "KO" if hp <= 0
  end
  
  def current_face
    return actor.name + "_" + hp_condition #@character_name + "_" + hp_condition
  end
  
  def action_face_get
    return actor.name + "_" + @action_face #@character_name + "_" + @action_face
  end
  
  def hp_condition
    result = normal?
    result = ko? if result == nil
    result = crisis? if result == nil
    return result
  end
  
  alias damage_face execute_damage
  def execute_damage(user)
    damage_face(user)
    
    @action_face = "damage" if @hp_damage > 0
    @action_face = "damage" if @mp_damage > 0
    @action_face = "heal" if @hp_damage < 0
    #@action_face = "heal" if @mp_damage < 0
  end
end

class Sprite_Param_HP < Sprite
  def initialize(viewport, actor, x, y, filename_gauge = WLTR::ANIMATED_HP::GAUGE_DEFAULT, filename_skin = WLTR::ANIMATED_HP::SKIN_DEFAULT, filename_crisis = WLTR::ANIMATED_HP::GAUGE_CRISIS_DEFAULT, filename_damage = WLTR::ANIMATED_HP::GAUGE_DAMAGE_DEFAULT)
    super(viewport)
    @gauge_skin = Sprite.new
    @gauge_skin.bitmap = Cache.system(filename_skin)
    @gauge_skin.viewport = viewport
    
    @gauge_color = Sprite.new
    @gauge_color.bitmap = Cache.system(filename_gauge)
    @gauge_color.viewport = viewport
    
    @actor = actor
    @gauge_color.src_rect.width = @gauge_color.bitmap.width * @actor.hp / @actor.maxhp
    @gauge_color.z = 100
    @gauge_skin.z = 95
    
    @gauge_damage = Sprite.new
    @gauge_damage.bitmap = Cache.system(filename_damage)
    @gauge_damage.src_rect.width = @gauge_color.width
    @gauge_damage.viewport = viewport
    @gauge_damage.z = 99
    
    @gauge_color.bitmap = Cache.system(filename_crisis) if @actor.hp < (@actor.maxhp * 25 / 100)
    
    @gauge_damage.x = x + WLTR::BATTLE_STATUS_SETUP::HPGAUGE_X
    @gauge_damage.y = y + WLTR::BATTLE_STATUS_SETUP::HPGAUGE_Y
    @gauge_color.x = x + WLTR::BATTLE_STATUS_SETUP::HPGAUGE_X
    @gauge_color.y = y + WLTR::BATTLE_STATUS_SETUP::HPGAUGE_Y
    @gauge_skin.x = x
    @gauge_skin.y = y
    
    @filename_crisis = filename_crisis
    @filename_normal = filename_gauge
    @gauge_stop = true
  end
  
  def dispose
    @gauge_skin.dispose
    @gauge_color.dispose
    @gauge_damage.dispose
    super
  end
  
  def change_color
    @gauge_color.bitmap = Cache.system(@filename_crisis) if @actor.hp < (@actor.maxhp * 25 / 100)
    @gauge_color.bitmap = Cache.system(@filename_normal) if @actor.hp > (@actor.maxhp * 25 / 100)
    gauge_width = @gauge_color.bitmap.width * @actor.hp / @actor.maxhp
    @gauge_color.src_rect.width = gauge_width
  end
  
  def update
    change_color
    gauge_width = @gauge_color.bitmap.width * @actor.hp / @actor.maxhp
    gauge_width.round
    real_gauge_update(gauge_width)
    damage_color_update(gauge_width) if @gauge_stop == true
  end
  
  def real_gauge_update(gauge_width)
    @gauge_stop = false if @gauge_color.width != gauge_width
    if @gauge_color.width < gauge_width
      boost = WLTR::ANIMATED_HP::GAUGE_SPEED
      @gauge_color.src_rect.width += 3
      @gauge_color.src_rect.width == gauge_width.round if @gauge_color.src_rect.width > gauge_width
    elsif @gauge_color.width > gauge_width
      boost = WLTR::ANIMATED_HP::GAUGE_SPEED
      @gauge_color.src_rect.width -= 3
      @gauge_color.src_rect.width == gauge_width.round if @gauge_color.src_rect.width < gauge_width
    end
    @gauge_stop = true if @gauge_color.width == gauge_width
  end
  
  def damage_color_update(gauge_width)
    if @gauge_damage.width < gauge_width
      boost = WLTR::ANIMATED_HP::DAMAGE_SPEED
      @gauge_damage.src_rect.width = @gauge_color.width
      @gauge_damage.src_rect.width == gauge_width.round if @gauge_damage.src_rect.width < gauge_width
    elsif @gauge_damage.width > gauge_width
      boost = WLTR::ANIMATED_HP::DAMAGE_SPEED
      @gauge_damage.src_rect.width -= 1
      @gauge_damage.src_rect.width == gauge_width.round if @gauge_damage.src_rect.width < gauge_width
    end
  end
end

class Sprite_Param_MP < Sprite
  def initialize(viewport, actor, x, y, filename_gauge = WLTR::ANIMATED_HP::MP_GAUGE_DEFAULT, filename_skin = WLTR::ANIMATED_HP::MP_SKIN_DEFAULT, filename_crisis = WLTR::ANIMATED_HP::MP_GAUGE_CRISIS_DEFAULT, filename_damage = WLTR::ANIMATED_HP::MP_GAUGE_DAMAGE_DEFAULT)
    super(viewport)
    @gauge_skin = Sprite.new
    @gauge_skin.bitmap = Cache.system(filename_skin)
    @gauge_skin.viewport = viewport
    
    @gauge_color = Sprite.new
    @gauge_color.bitmap = Cache.system(filename_gauge)
    @gauge_color.viewport = viewport
    
    @actor = actor
    @gauge_color.src_rect.width = @gauge_color.bitmap.width * @actor.mp / @actor.maxmp
    @gauge_color.z = 100
    @gauge_skin.z = 95
    
    @gauge_damage = Sprite.new
    @gauge_damage.bitmap = Cache.system(filename_damage)
    @gauge_damage.src_rect.width = @gauge_color.width
    @gauge_damage.viewport = viewport
    @gauge_damage.z = 99
    
    @gauge_color.bitmap = Cache.system(filename_crisis) if @actor.mp < (@actor.maxmp * 25 / 100)
    
    @gauge_damage.x = x + WLTR::BATTLE_STATUS_SETUP::MPGAUGE_X
    @gauge_damage.y = y + WLTR::BATTLE_STATUS_SETUP::MPGAUGE_Y
    @gauge_color.x = x + WLTR::BATTLE_STATUS_SETUP::MPGAUGE_X
    @gauge_color.y = y + WLTR::BATTLE_STATUS_SETUP::MPGAUGE_Y
    @gauge_skin.x = x
    @gauge_skin.y = y
    
    @filename_crisis = filename_crisis
    @filename_normal = filename_gauge
    @gauge_stop = true
  end
  
  def dispose
    @gauge_skin.dispose
    @gauge_color.dispose
    @gauge_damage.dispose
    super
  end
  
  def change_color
    @gauge_color.bitmap = Cache.system(@filename_crisis) if @actor.mp < (@actor.maxmp * 25 / 100)
    @gauge_color.bitmap = Cache.system(@filename_normal) if @actor.mp > (@actor.maxmp * 25 / 100)
    gauge_width = @gauge_color.bitmap.width * @actor.mp / @actor.maxmp
    @gauge_color.src_rect.width = gauge_width
  end
  
  def update
    change_color
    gauge_width = @gauge_color.bitmap.width * @actor.mp / @actor.maxmp
    gauge_width.round
    real_gauge_update(gauge_width)
    damage_color_update(gauge_width) if @gauge_stop == true
  end
  
  def real_gauge_update(gauge_width)
    @gauge_stop = false if @gauge_color.width != gauge_width
    if @gauge_color.width < gauge_width
      boost = WLTR::ANIMATED_HP::GAUGE_SPEED
      @gauge_color.src_rect.width += 3
      @gauge_color.src_rect.width == gauge_width.round if @gauge_color.src_rect.width > gauge_width
    elsif @gauge_color.width > gauge_width
      boost = WLTR::ANIMATED_HP::GAUGE_SPEED
      @gauge_color.src_rect.width -= 3
      @gauge_color.src_rect.width == gauge_width.round if @gauge_color.src_rect.width < gauge_width
    end
    @gauge_stop = true if @gauge_color.width == gauge_width
  end
  
  def damage_color_update(gauge_width)
    if @gauge_damage.width < gauge_width
      boost = WLTR::ANIMATED_HP::DAMAGE_SPEED
      @gauge_damage.src_rect.width = @gauge_color.width
      @gauge_damage.src_rect.width == gauge_width.round if @gauge_damage.src_rect.width < gauge_width
    elsif @gauge_damage.width > gauge_width
      boost = WLTR::ANIMATED_HP::DAMAGE_SPEED
      @gauge_damage.src_rect.width -= 1
      @gauge_damage.src_rect.width == gauge_width.round if @gauge_damage.src_rect.width < gauge_width
    end
  end
end

class Sprite_States_Icon < Sprite
  def initialize(actor, x, y, view_area)
    super(view_area)
    @back = Sprite.new(view_area)
    @back.bitmap = Cache.system("")
    @actor = actor
    @states = []
    self.bitmap = Bitmap.new(24 * 4, 24)
    self.x = x
    self.y = y
    @back.x = x
    @back.y = y
    @back.z = 200
    update
  end

  def update
    return if @states == @actor.states
    self.bitmap.clear
    count = 0
    @states = @actor.states
    for state in @actor.states
      draw_icon(state.icon_index, 24 * count, y)
      count += 1
      break if (24 * count > width - 24)
    end
  end
  
  def draw_icon(icon_index, x, y, enabled = true)
    bitmap = Cache.system("Iconset")
    rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
    self.bitmap.blt(x, 0, bitmap, rect, enabled ? 255 : 128)
  end
  
  def dispose
    super
    @back.dispose
  end
end

class Scene_Battle < Scene_Base
  alias confirm_guard execute_action_guard
  def execute_action_guard
    @active_battler.action_face = "guard" if @active_battler.actor?
    confirm_guard
  end
  
  alias confirm_attack_and_hurt execute_action_attack
  def execute_action_attack
    @active_battler.action_face = "attack" if @active_battler.actor?
    confirm_attack_and_hurt
  end
  
  alias confirm_skill_action execute_action_skill
  def execute_action_skill
    @active_battler.action_face = "attack" if @active_battler.actor?
    confirm_skill_action
  end
  
  alias confirm_item_action execute_action_item
  def execute_action_item
    @active_battler.action_face = "attack" if @active_battler.actor?
    confirm_item_action
  end
  
  alias update_status update_basic
  def update_basic(main = false)
    update_status(main)
    @status_window.update
  end
end

class Sprite_Overdrive < Sprite
  def initialize(x, y, actor, viewport)
    super(viewport)
    @actor = actor
    @overdrive_skin = Sprite.new
    @overdrive_skin.bitmap = Cache.system(WLTR::OVERDRIVE_SETUP::GAUGE_SKIN)
    @overdrive_skin.viewport = viewport
    @overdrive_color = Sprite.new
    update_gauge
    @overdrive_color.viewport = viewport
    @overdrive_color.src_rect.width = @overdrive_color.bitmap.width * @actor.overdrive / @actor.max_overdrive
    @overdrive_skin.z = 300
    @overdrive_color.z = 301
    @overdrive_skin.x = x
    @overdrive_skin.y = y
    @overdrive_color.x = x
    @overdrive_color.y = y
  end
  
  def dispose
    @overdrive_skin.dispose
    @overdrive_color.dispose
    super
  end
  
  def update_gauge
    @overdrive_color.bitmap = Cache.system(WLTR::OVERDRIVE_SETUP::GAUGE_NORMAL) if @actor.overdrive < @actor.max_overdrive
    @overdrive_color.bitmap = Cache.system(WLTR::OVERDRIVE_SETUP::GAUGE_FULL)if @actor.overdrive >= @actor.max_overdrive
  end
  
  def update
    @overdrive_skin.visible = @actor.od_gauge_visible?
    @overdrive_color.visible = @actor.od_gauge_visible?
    gauge_width = @overdrive_color.bitmap.width * @actor.overdrive / @actor.max_overdrive
    gauge_width.round
    if @overdrive_color.width < gauge_width
      boost = WLTR::OVERDRIVE_SETUP::GAUGE_SPEED
      @overdrive_color.src_rect.width += boost
      @overdrive_color.src_rect.width = gauge_width.round if @overdrive_color.src_rect.width > gauge_width
    elsif @overdrive_color.width > gauge_width
      boost = WLTR::OVERDRIVE_SETUP::GAUGE_SPEED
      @overdrive_color.src_rect.width -= boost
      @overdrive_color.src_rect.width = gauge_width.round if @overdrive_color.src_rect.width < gauge_width
    end
  end
end
#===============================================================================
#
# END OF SCRIPT
#
#===============================================================================

¿Alguien puede darme una mano con esto? Quizás necesiten de algo más para poder ayudarme... cualquier cosa a las ordenes.,

Gracias y saludos.

Seba
Aventurero
Aventurero

0/3

Créditos 1295

Gracias : 80

http://http:://www.sebaix-xsebax,blogspot.com

Volver arriba Ir abajo

Re: AYUDA: Stack overflow

Mensaje por mrhawi el 2015-10-17, 21:07

Prueba comentando el damage_face(user), no sé mucho ruby, pero si le das alias damage_face a execute_damage, cuando usas damage_face(user) no se estaría llamando recursivamente al método execute_damage? Sería mi intento de aporte xd, pero ve qué pasa. Igual es raro, según la documentación, a los alias se les pasa el nombre del método como labels (anteponiendo :), pero no creo que sea ese el fallo


Última edición por mrhawi el 2015-10-17, 22:25, editado 2 veces

mrhawi
Aventurero
Aventurero

0/3

Créditos 2666

Gracias : 89

Volver arriba Ir abajo

Re: AYUDA: Stack overflow

Mensaje por Seba el 2015-10-17, 21:17

mrhawi escribió:Prueba comentando el damage_face(user), no sé mucho ruby, pero si le das alias damage_face a execute_damage, cuando usas damage_face(user) no se estaría llamando recursivamente al método execute_damage? Sería mi intento de aporte xd, pero ve qué pasa. Igual es raro, según la documentación, a los alias se les pasa el nombre del método como labels (anteponiendo :), pero no creo que sea ese el fallo

Hola, hawicito. Fue una de las cosas que probé primero y lo único que logré es que las batallas dejaran de funcionar. Al comentar esa línea ya el comando defender dejó de recuperar mi MP y también dejé de recibir daño, por lo visto, sin la línea 791 las acciones de abajo que son justo esas, atacar, curarse y recibir daño, no se efectúan.

Estoy muy verde, oxidado y sin conocimientos T_T me hace sentir muy mal no poder arreglar esto por cuenta propia, pero bueno, confío que la gente linda de este foro encontrará la forma :D!

Salutes

Seba
Aventurero
Aventurero

0/3

Créditos 1295

Gracias : 80

http://http:://www.sebaix-xsebax,blogspot.com

Volver arriba Ir abajo

Re: AYUDA: Stack overflow

Mensaje por orochii el 2015-10-18, 02:24

Cambia la línea que dice
Código:
alias damage_face execute_damage
por esto
Código:
alias damage_face execute_damage unless $@

Eso técnicamente debería funcionar xD. Es un check que verifica si la línea lanza una "excepción" o algo así (al fin sé qué es :'D). Osea si hay un error por decirlo de alguna manera.

Creo que eso debería funcionar...

orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6045

Gracias : 266

http://drekirokr.weebly.com/

Volver arriba Ir abajo

Re: AYUDA: Stack overflow

Mensaje por Seba el 2015-10-18, 03:03

El Gran Orochii-maru aparece :D!

Hice esa modificación y hasta ahora he jugado algo así de 10 peleas seguidas y no ha aparecido el error, así que tengo grandes esperanzas de que haya desaparecido :D

Gracias a todas estas peleas de prueba pude arreglar la habilidad "reanimar" también :D, así que estoy bastante contento con los logros.

Muchas gracias, Orochi, cualquier cosa si llegara a fallar de nuevo lo aviso aquí, pero gracias.

Saludos

Seba
Aventurero
Aventurero

0/3

Créditos 1295

Gracias : 80

http://http:://www.sebaix-xsebax,blogspot.com

Volver arriba Ir abajo

Re: AYUDA: Stack overflow

Mensaje por Contenido patrocinado Hoy a las 18:18


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Ayuda RPG

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