RPG Maker Forums

I'm using Moghunter's script to allow enemies to drop treasures on the map, but for some reason out of all the enemies and bosses that drop an item, there's this particular boss that sometimes throws the disposed bitmap error whenever it dies (which is then suppose to drop something). Like I said, it doesn't happen a lot. I would get the error like once every 10 times I defeat the boss, and all trials are always in different spots of the map. It's completely random and it's really annoying.


Here's where the error points to:


#--------------------------------------------------------------------------
# ● update Treasure Icon Frame
#--------------------------------------------------------------------------
def update_treasure_icon_frame
self.sprite_frames_refresh += 1
if self.sprite_frames_refresh > MOG::XAS_ICON_REF
self.sprite_frames += 1
self.sprite_frames_refresh = 0
end
icon_react_x = self.bitmap.height * self.sprite_frames # ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if icon_react_x < self.bitmap.width
self.src_rect.set(icon_react_x, 0, self.bitmap.height, self.bitmap.height)
else
self.src_rect.set(0, 0, self.bitmap.height, self.bitmap.height)
self.sprite_frames = 0
end
self.ox = self.bitmap.height / 2
end




And this is the rest of the script involved with item drop:


# ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
#===============================================================================
# TREASURE
#===============================================================================
# ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■


#===============================================================================
# ■ Game_Party
#===============================================================================
class Game_Party

#--------------------------------------------------------------------------
# ● Gain Exp
#--------------------------------------------------------------------------
def gain_exp(exp)
for i in 0...$game_party.actors.size
actor = $game_party.actors
if actor.cant_get_exp? == false
actor.exp += exp
end
end
end
end

#===============================================================================
# ■ XAS_BA_ItemDrop
#===============================================================================
module XAS_BA_ItemDrop

#--------------------------------------------------------------------------
# ● Defeat Process
#--------------------------------------------------------------------------
def defeat_process
super
if self.battler.is_a?(Game_Enemy) and self.battler.dead? and
$game_map.passable?(self.x, self.y,0) and terrain_tag != XAS::FALL_TERRAIN
treasure = nil
enemy = self.battler
if rand(100) < enemy.treasure_prob and self.battler.steal == false
treasure = $data_items[enemy.item_id] if enemy.item_id > 0
treasure = $data_weapons[enemy.weapon_id] if enemy.weapon_id > 0
treasure = $data_armors[enemy.armor_id] if enemy.armor_id > 0
else
# Multi Drop
tesouro = XAS_BA_ENEMY::ENEMY_MULTI_TREASURE[enemy.id]
item_2treasure = tesouro[rand(tesouro.size)] if tesouro != nil
if item_2treasure != nil
treasure_type = item_2treasure[0]
treasure_id = item_2treasure[1]
treasure_prob = item_2treasure[2]
if rand(100) < treasure_prob
treasure = $data_items[treasure_id] if treasure_type == 0
treasure = $data_weapons[treasure_id] if treasure_type == 1
treasure = $data_armors[treasure_id] if treasure_type == 2
end
end
end
make_treasure(treasure) if treasure != nil
end
end

Code:
#--------------------------------------------------------------------------
 # ● Make Treasure
 #--------------------------------------------------------------------------  
 def make_treasure(treasure) 
     item_se = XAS::ITEMDROP_SE
     opecode = treasure.is_a?(RPG::Item) ? 126 :
               treasure.is_a?(RPG::Weapon) ? 127 :
               treasure.is_a?(RPG::Armor) ? 128 :
               nil
     list = []
     if opecode != nil
        item_number = XAS::ITEM_NUMBER[treasure.id]   
        if item_number != nil and treasure.is_a?(RPG::Item)
          list[0] = RPG::EventCommand.new(opecode, 0, [treasure.id,0,0,item_number])
        else
          list[0] = RPG::EventCommand.new(opecode, 0, [treasure.id,0,0,1])
        end
          list[1] = RPG::EventCommand.new(250, 0, [item_se])
          list[2] = RPG::EventCommand.new(116, 0, [])          
      end
      list.push(RPG::EventCommand.new)
      command = RPG::MoveCommand.new
      command.code = 14
      command.parameters = [0,0]
      route = RPG::MoveRoute.new
      route.repeat = false
      route.list = [command, RPG::MoveCommand.new]
      page = RPG::Event::Page.new
      page.move_type = 3
      page.move_route = route
      page.move_frequency = 6
      page.always_on_top = true
      page.trigger = 1
      page.list = list
      page.through = true
      event = RPG::Event.new(self.x, self.y)
      event.pages =
Code:
#===============================================================================
# ■ Game_Event
#===============================================================================
class Game_Event < Game_Character
  include XAS_BA_ItemDrop
end

#===============================================================================
# ■ Game_Character
#===============================================================================
class Game_Character
  attr_accessor :icon_name
end



#===============================================================================
# ■ Interpreter 
#===============================================================================
 
class Interpreter
  
 #--------------------------------------------------------------------------
 # ● Command_126 (ITEM)
 #--------------------------------------------------------------------------
 alias xas_command_126 command_126 
 def command_126
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
    $game_party.gain_item(@parameters[0], value) 
    item = $data_items[@parameters[0]]
    if $data_items[item.id].element_set.include?($data_system.elements.index(XAS_ELEMENT::I_GOLD))  
       gold_effect = item.price
    elsif $data_items[item.id].element_set.include?($data_system.elements.index(XAS_ELEMENT::I_EXP))    
       exp_effect = item.price
    elsif $data_items[item.id].element_set.include?($data_system.elements.index(XAS_ELEMENT::I_AP))    
       ap_effect = item.price
    elsif $data_items[item.id].element_set.include?($data_system.elements.index(XAS_ELEMENT::I_STATUS))     
       condition_effect = item.price
    elsif $data_items[item.id].element_set.include?($data_system.elements.index(XAS_ELEMENT::I_HP_DAMAGE)) 
       recover_hp_perc_effect = item.recover_hp_rate 
    elsif $data_items[item.id].element_set.include?($data_system.elements.index(XAS_ELEMENT::I_SP_DAMAGE)) 
       recover_sp_perc_effect = item.recover_sp_rate
    end  
    actor = $game_party.actors[0]  
    if gold_effect != nil
       damage_item = gold_effect.to_s + " " + $data_system.words.gold  
       $game_party.gain_gold(gold_effect)
       $game_party.lose_item(@parameters[0], value)
    elsif exp_effect != nil
       damage_item = "EXP" + " " + exp_effect.to_s
       last_level = actor.level       
       actor.exp += exp_effect
       $game_party.lose_item(@parameters[0], value)    
    elsif ap_effect != nil and $mog_rgss_ap_parameter != nil
       damage_item = ap_effect.to_s + " " + MOG::AP_NAME
       $game_party.gain_ap(ap_effect) 
       $game_party.lose_item(@parameters[0], value)
    elsif condition_effect != nil
       damage_item = ""
       actor.add_state(condition_effect)
       $game_party.lose_item(@parameters[0], value)
    elsif recover_hp_perc_effect != nil
       damage = actor.maxhp * recover_hp_perc_effect / 100
       damage_item = damage
       actor.hp -= damage         
       $game_party.lose_item(@parameters[0], value)
    elsif recover_sp_perc_effect != nil
       damage = actor.maxsp * recover_sp_perc_effect / 100
       damage_item = $data_system.words.sp + " " + damage.to_s
       actor.sp -= damage
       $game_party.lose_item(@parameters[0], value)
    end    
    item_name = $data_items[@parameters[0]].name 
    display_item_animaton(damage_item,gold_effect,value,item_name)  
    return true
    xas_command_126
  end
Code:
#--------------------------------------------------------------------------
 # ● Display Item Animaton
 #--------------------------------------------------------------------------
 def display_item_animaton(damage_item,gold_effect,value,item_name) 
     animation_item = XAS::ITEM_ANIMATION_ID[@parameters[0]]
     if damage_item != nil         
        $game_player.battler.damage = damage_item
        $game_player.battler.damage_pop = true  
     elsif MOG::XAS_ITEM_NAME_POP == true         
        $game_player.battler.damage = value.to_s + "   x   "+ item_name
        $game_player.battler.damage_pop = true rescue nil
        $game_player.battler.item = true
     end             
     if animation_item != nil
        $game_player.animation_id = animation_item
     end

 end  
    
 #--------------------------------------------------------------------------
 # ● Command_127 (WEAPON)
 #--------------------------------------------------------------------------
 alias mog_xas_ani_command_127 command_127
 def command_127
     mog_xas_ani_command_127
     if MOG::XAS_ITEM_NAME_POP == true
        value = operate_value(@parameters[1], @parameters[2], @parameters[3])  
        item_name = $data_weapons[@parameters[0]].name 
        $game_player.battler.damage = value.to_s + " x "+ item_name
        $game_player.battler.damage_pop = true rescue nil
        $game_player.battler.item = true rescue nil
     end  
 end

  
 #--------------------------------------------------------------------------
 # ● Command_128 (ARMOR)
 #--------------------------------------------------------------------------
 alias mog_xas_ani_command_128 command_128
 def command_128
     mog_xas_ani_command_128
     if MOG::XAS_ITEM_NAME_POP == true      
        value = operate_value(@parameters[1], @parameters[2], @parameters[3])      
        item_name = $data_armors[@parameters[0]].name 
        $game_player.battler.damage = value.to_s + " x "+ item_name
        $game_player.battler.damage_pop = true rescue nil
        $game_player.battler.item = true rescue nil
     end  
  end  
end
Code:
#===============================================================================
# ■ Sprite_Character
#===============================================================================
class Sprite_Character < RPG::Sprite
    attr_accessor :sprite_frames
    attr_accessor :sprite_frames_refresh 
    attr_accessor :sprite_frames_blink  
    attr_accessor :sprite_y
    
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def initialize(viewport, character = nil)
    super(viewport)
    @character = character
    @sprite_frames = 0
    @sprite_frames_refresh = 0
    @sprite_frames_blink = 0
    @sprite_y = 0
    update
end
  
#--------------------------------------------------------------------------
# ● Icon Float Update
#--------------------------------------------------------------------------
def update_treasure_icon_float(icon_ch)
  if MOG::XAS_ICON_FLOAT == true
     self.sprite_y += 1
     if self.sprite_y < 3
          self.oy = icon_ch + 1
        elsif self.sprite_y < 6
          self.oy = icon_ch + 2
        elsif self.sprite_y < 9
          self.oy = icon_ch + 3
        elsif self.sprite_y < 12
          self.oy = icon_ch + 4
        elsif self.sprite_y < 15
          self.oy = icon_ch + 3
        elsif self.sprite_y < 18
          self.oy = icon_ch + 2
        elsif self.sprite_y < 21
          self.oy = icon_ch + 1
        else
          self.oy = icon_ch
          self.sprite_y = 0
        end
    else
      self.oy = icon_ch
    end
end
  
#--------------------------------------------------------------------------
# ● Icon Blink Update
#--------------------------------------------------------------------------
def update_treasure_icon_blink
    if MOG::XAS_ITEM_BLINK == true
       self.sprite_frames_blink += 1
       if self.sprite_frames_blink > 30
          self.sprite_frames_blink = 0  
       end
       if self.sprite_frames_blink > 15
          self.opacity = 255
       else
          self.opacity = 125  
     end      
  end  
end
Code:
#--------------------------------------------------------------------------
# ● Create Treasure Icon
#--------------------------------------------------------------------------
def create_treasure_icon
    return if self.ox == 12
    @icon_name = @character.icon_name
    self.bitmap = RPG::Cache.icon(@icon_name)
    self.src_rect.set(0, 0, 24, 24)
    self.ox = 12
    self.oy = 24
    self.z = 1
end


I can't recreate the error cause like I said, it barely happens and now it's not triggering, but it just pointed to that line and said "disposed bitmap". Please help.

Latest Threads

Latest Profile Posts

Don't forget, aspiring writers: Personality isn't what your characters do, it is WHY they do it.
Hello! I would like to know if there are any pluggings or any way to customize how battles look?
I was thinking that when you start the battle for it to appear the eyes of your characters and opponents sorta like Ace Attorney.
Sadly I don't know how that would be possible so I would be needing help! If you can help me in any way I would really apreciate it!
The biggest debate we need to complete on which is better, Waffles or Pancakes?
rux
How is it going? :D
Day 9 of giveaways! 8 prizes today :D

Forum statistics

Threads
106,050
Messages
1,018,548
Members
137,835
Latest member
yetisteven
Top