Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Momomo's Beastiary Nomethod error?!

I have momomo's beastiary script in my new game linked to the menu. It loads the name of the monster but when i try to select the enemy in order to view it's stats and what not. I get an error saying "Script 'Game_enemy' line 19: NoMethodError occured. Undefined method 'enemy_id' for nil:NilClass".

This confuses me because the game reads the enemy id constantly... heres momomo's script if you can help me find the problem if any in it or if there is a way around it.

#==============================================================================
# â–  Bestiary
#------------------------------------------------------------------------------
# Created by Momomo
# Modified by Thousand Dragoon Link
#==============================================================================

module Enemy_Book_Config
DROP_ITEM_NEED_ANALYZE = false
EVA_NAME = "Evasion"           
SHOW_COMPLETE_TYPE = 2       
                       
end

class Game_Temp
attr_accessor :enemy_book_data
alias temp_enemy_book_data_initialize initialize
def initialize
  temp_enemy_book_data_initialize
  @enemy_book_data = Data_MonsterBook.new
end
end

class Game_Party
attr_accessor :enemy_info         
#--------------------------------------------------------------------------
alias book_info_initialize initialize
def initialize
  book_info_initialize
  @enemy_info = {}
end
#--------------------------------------------------------------------------
def add_enemy_info(enemy_id, type = 0)
  case type
  when 0
    if @enemy_info[enemy_id] == 2
      return false
    end
    @enemy_info[enemy_id] = 1
  when 1
    @enemy_info[enemy_id] = 2
  when -1
    @enemy_info[enemy_id] = 0
  end
end
#--------------------------------------------------------------------------
def enemy_book_max
  return $game_temp.enemy_book_data.id_data.size - 1
end
#--------------------------------------------------------------------------
def enemy_book_now
  now_enemy_info = @enemy_info.keys
  no_add = $game_temp.enemy_book_data.no_add_element
  new_enemy_info = []
  for i in now_enemy_info
    enemy = $data_enemies
    next if enemy.name == ""
    if enemy.element_ranks[no_add] == 1
      next
    end
    new_enemy_info.push(enemy.id)
  end
  return new_enemy_info.size
end
#--------------------------------------------------------------------------
def enemy_book_complete_percentage
  e_max = enemy_book_max.to_f
  e_now = enemy_book_now.to_f
  comp = e_now / e_max * 100
  return comp.truncate
end
end

class Interpreter
def enemy_book_max
  return $game_party.enemy_book_max
end
def enemy_book_now
  return $game_party.enemy_book_now
end
def enemy_book_comp
  return $game_party.enemy_book_complete_percentage
end
end

class Scene_Battle
alias add_enemy_info_start_phase5 start_phase5
def start_phase5
  for enemy in $game_troop.enemies
    unless enemy.hidden
      $game_party.add_enemy_info(enemy.id, 0)
    end
  end
  add_enemy_info_start_phase5
end
end

class Window_Base < Window
#--------------------------------------------------------------------------
def draw_enemy_drop_item(enemy, x, y)
  self.contents.font.color = normal_color
  treasures = []
  if enemy.item_id > 0
    treasures.push($data_items[enemy.item_id])
  end
  if enemy.weapon_id > 0
    treasures.push($data_weapons[enemy.weapon_id])
  end
  if enemy.armor_id > 0
    treasures.push($data_armors[enemy.armor_id])
  end
  if treasures.size > 0
    item = treasures[0]
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = 255
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    name = treasures[0].name
  else
    self.contents.font.color = disabled_color
    name = "No Item"
  end
  self.contents.draw_text(x+28, y, 212, 32, name)
end
#--------------------------------------------------------------------------
def draw_enemy_book_id(enemy, x, y)
  self.contents.font.color = normal_color
  id = $game_temp.enemy_book_data.id_data.index(enemy.id)
  self.contents.draw_text(x, y, 32, 32, id.to_s)
end
#--------------------------------------------------------------------------
def draw_enemy_name(enemy, x, y)
  self.contents.font.color = normal_color
  self.contents.draw_text(x, y, 152, 32, enemy.name)
end
#--------------------------------------------------------------------------
def draw_enemy_graphic(enemy, x, y, opacity = 255)
  bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
  cw = bitmap.width
  ch = bitmap.height
  src_rect = Rect.new(0, 0, cw, ch)
  x = x + (cw / 2 - x) if cw / 2 > x
  self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, opacity)
end
#--------------------------------------------------------------------------
def draw_enemy_exp(enemy, x, y)
  self.contents.font.color = system_color
  self.contents.draw_text(x, y, 120, 32, "EXP")
  self.contents.font.color = normal_color
  self.contents.draw_text(x + 120, y, 36, 32, enemy.exp.to_s, 2)
end
#--------------------------------------------------------------------------
def draw_enemy_gold(enemy, x, y)
  self.contents.font.color = system_color
  self.contents.draw_text(x, y, 120, 32, $data_system.words.gold)
  self.contents.font.color = normal_color
  self.contents.draw_text(x + 120, y, 36, 32, enemy.gold.to_s, 2)
end
end

class Game_Enemy_Book < Game_Enemy
#--------------------------------------------------------------------------
def initialize(enemy_id)
  super(2, 1)
  @enemy_id = enemy_id
  enemy = $data_enemies[@enemy_id]
  @battler_name = enemy.battler_name
  @battler_hue = enemy.battler_hue
  @hp = maxhp
  @sp = maxsp
end
end

class Data_MonsterBook
attr_reader :id_data
#--------------------------------------------------------------------------
def initialize
  @id_data = enemy_book_id_set
end
#--------------------------------------------------------------------------
def no_add_element
  no_add = 0
  for i in 1...$data_system.elements.size
    if $data_system.elements =~ /図鑑登録無効/
      no_add = i
      break
    end
  end
  return no_add
end
#--------------------------------------------------------------------------
def enemy_book_id_set
  data = [0]
  no_add = no_add_element
  for i in 1...$data_enemies.size
    enemy = $data_enemies
    next if enemy.name == ""
    if enemy.element_ranks[no_add] == 1
      next
    end
    data.push(enemy.id)
  end
  return data
end
end


class Window_MonsterBook < Window_Selectable
attr_reader  :data
#--------------------------------------------------------------------------
def initialize(index=0)
  super(0, 64, 640, 416)
  @column_max = 2
  @book_data = $game_temp.enemy_book_data
  @data = @book_data.id_data.dup
  @data.shift
  #@data.sort!
  @item_max = @data.size
  self.index = 0
  refresh if @item_max > 0
end
#--------------------------------------------------------------------------
def data_set
  data = $game_party.enemy_info.keys
  data.sort!
  newdata = []
  for i in data
    next if $game_party.enemy_info == 0
    if book_id(i) != nil
      newdata.push(i)
    end
  end
  return newdata
end
#--------------------------------------------------------------------------
def show?(id)
  if $game_party.enemy_info[id] == 0 or $game_party.enemy_info[id] == nil
    return false
  else
    return true
  end
end
#--------------------------------------------------------------------------
def book_id(id)
  return @book_data.index(id)
end
#--------------------------------------------------------------------------
def item
  return @data[self.index]
end
#--------------------------------------------------------------------------
def refresh
  if self.contents != nil
    self.contents.dispose
    self.contents = nil
  end
  self.contents = Bitmap.new(width - 32, row_max * 32)
  if @item_max > 0
    for i in 0...@item_max
      draw_item(i)
    end
  end
end
#--------------------------------------------------------------------------
def draw_item(index)
  enemy = $data_enemies[@data[index]]
  return if enemy == nil
  x = 4 + index % 2 * (288 + 32)
  y = index / 2 * 32
  rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  self.contents.font.color = normal_color
  draw_enemy_book_id(enemy, x, y)
  if show?(enemy.id)
    self.contents.draw_text(x + 28+16, y, 212, 32, enemy.name, 0)
  else
    self.contents.draw_text(x + 28+16, y, 212, 32, "ï¼
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top