기타
2007.02.01 03:21

몬스터 도감

조회 수 2821 추천 수 3 댓글 6
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
# 몬스터 도감 : 현재 데이터베이스에 저장되어있는 몬스터를 일람하는 것 같네요.

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆モンスター図鑑 - KGC_MonsterGuide◆
#_/----------------------------------------------------------------------------
#_/ モンスター図鑑を作成します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

# 導入済みフラグをオン
$imported["MonsterGuide"] = true
#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================

# ◆図鑑から隠すモンスター
#  非表示にしたい敵のIDを配列に格納
$hide_enemies = [16]

class Window_MonsterGuideRight < Window_Base
  # ◆属性耐性を調べる範囲(属性ID)
  ELEMENT_RANGE = 1..8

  # ◆弱点属性文字色
  WEEK_COLOR = Color.new(255, 128, 128)
  # ◆耐性属性文字色
  RESIST_COLOR = Color.new(128, 128, 255)
end

class Scene_MonsterGuide
  # ◆カーソル移動で表示内容更新
  #  false にすると、C ボタンを押すまで再描画しない
  #  (重く感じない場合は true のままでOK)
  MOVE_REFRESH = true
end

class Scene_Battle
  # ◆変身前の敵も撃破
  #  false にすると、変身前の敵は撃破したと見なされない
  MG_ORIGINAL_DEFEAT = true
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#--------------------------------------------------------------------------
# ● モンスター図鑑呼び出し
#--------------------------------------------------------------------------
def call_monster_guide
  # プレイヤーの姿勢を矯正
  $game_player.straighten
  # モンスター図鑑画面に切り替え
  $scene = Scene_MonsterGuide.new
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
#  システム周りのデータを扱うクラスです。BGM などの管理も行います。このクラス
# のインスタンスは $game_system で参照されます。
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :enemy_encountered        # 遭遇済みフラグ
  attr_accessor :enemy_defeated           # 撃破済みフラグ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_MonsterGuide initialize
  def initialize
    # 元の処理を実行
    initialize_KGC_MonsterGuide

    @enemy_encountered = []
    @enemy_defeated = []
  end
  #--------------------------------------------------------------------------
  # ● エネミー存在チェック
  #--------------------------------------------------------------------------
  def enemy_exist?(enemy_id)
    return $data_enemies[enemy_id] != nil && $data_enemies[enemy_id].name != ""
  end
  #--------------------------------------------------------------------------
  # ● 存在する敵の種類数取得
  #--------------------------------------------------------------------------
  def all_enemies_count
    n = 0
    # 存在する敵の種類数を取得
    for i in 1...$data_enemies.size
      next if !enemy_exist?(i) || $hide_enemies.include?(i)
      n += 1
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 撃破した敵の種類数取得
  #--------------------------------------------------------------------------
  def defeated_enemies_count
    n = 0
    # 撃破した敵の種類数を取得
    for i in 1...$data_enemies.size
      next if !enemy_exist?(i) || !@enemy_encountered[i] ||
        !@enemy_defeated[i] || $hide_enemies.include?(i)
      n += 1
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ● モンスター図鑑完成度の取得
  #--------------------------------------------------------------------------
  def monster_guide_completion
    return defeated_enemies_count * 100 / all_enemies_count
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  エネミーを扱うクラスです。このクラスは Game_Troop クラス ($game_troop) の
# 内部で使用されます。
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :original_id              # 変身前のID
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     troop_id     : トループ ID
  #     member_index : トループメンバーのインデックス
  #--------------------------------------------------------------------------
  alias initialize_KGC_MonsterGuide initialize
  def initialize(troop_id, member_index)
    # 元の処理を実行
    initialize_KGC_MonsterGuide(troop_id, member_index)

    @original_id = []
    # 遭遇済みフラグをオン
    unless @hidden
      $game_system.enemy_encountered[@enemy_id] = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 変身
  #     enemy_id : 変身先のエネミー ID
  #--------------------------------------------------------------------------
  alias transform_KGC_MonsterGuide transform
  def transform(enemy_id)
    # 変身前のIDを保存
    @original_id.push(@enemy_id)

    # 元の処理を実行
    transform_KGC_MonsterGuide(enemy_id)

    # 変身後の敵も遭遇済みにする
    $game_system.enemy_encountered[@enemy_id] = true
  end
  #--------------------------------------------------------------------------
  # ● 隠れ状態設定
  #--------------------------------------------------------------------------
  def hidden=(value)
    @hidden = value
    # 出現した場合は遭遇済みフラグをオン
    unless @hidden
      $game_system.enemy_encountered[@enemy_id] = true
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_MonsterGuideTop
#------------------------------------------------------------------------------
#  モンスター図鑑画面で、完成度を表示するウィンドウです。
#==============================================================================

class Window_MonsterGuideTop < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 240, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160
    refresh
  end
#--------------------------------------------------------------------------
  # ● 회복(refresh)
   #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    text = "퇴치 값:#{$game_system.defeated_enemies_count}/#{$game_system.all_enemies_count}"
    self.contents.draw_shadow_text(0, 0, width - 32, 32, text)
    text = "완성도:#{$game_system.monster_guide_completion}%"
    self.contents.draw_shadow_text(0, 32, width - 32, 32, text)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_MonsterGuideLeft
#------------------------------------------------------------------------------
#  モンスター図鑑画面で、モンスター一覧を表示するウィンドウです。
#==============================================================================

class Window_MonsterGuideLeft < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 96, 240, 384)
    self.index = 0
    self.back_opacity = 160
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 選択モンスターの取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # 存在するエネミーを取得
    for i in 1...$data_enemies.size
      next if !$game_system.enemy_exist?(i) || $hide_enemies.include?(i)
      @data.push($data_enemies[i])
    end
    # 項目数が 0 でなければビットマップを作成し、全項目を描画
    @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
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    enemy = @data[index]
    # 撃破していれば通常文字色に、そうでなければ無効文字色に設定
    if $game_system.enemy_defeated[enemy.id]
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 40, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    # 遭遇していれば名前、遭遇していなければ?を描画
    if $game_system.enemy_encountered[enemy.id]
      self.contents.draw_text(x, y, self.width - 40, 32, enemy.name)
    else
      self.contents.draw_text(x, y, self.width - 40, 32, "? ? ? ? ? ? ? ?", 1)
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_MonsterGuideRight
#------------------------------------------------------------------------------
#  モンスター図鑑画面で、ステータスを表示するウィンドウです。
#==============================================================================

class Window_MonsterGuideRight < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(240, 0, 400, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #     enemy       : エネミー
  #     show_status : ステータス表示
  #--------------------------------------------------------------------------
  def refresh(enemy, show_status = true)
    self.contents.clear
    # 遭遇していない場合はNo data
    unless $game_system.enemy_encountered[enemy.id]
      self.contents.font.color = disabled_color
      self.contents.draw_text(0, 208, 368, 32, "- No Data -", 1)
      return
    end
    # バトラー画像を描画
    bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
    cw = bitmap.width; ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(184 - cw / 2, 0, bitmap, src_rect)
    # ステータス非表示の場合は戻る
    return unless show_status
    # 撃破済みの場合、詳細情報も描画
    if $game_system.enemy_defeated[enemy.id]
      # ステータスを描画
    self.contents.font.color = system_color
      self.contents.draw_shadow_text(0, 224, 64, 32, $data_system.words.hp)
      self.contents.draw_shadow_text(122, 224, 64, 32, $data_system.words.sp)
      self.contents.draw_shadow_text(244, 224, 64, 32, $data_system.words.str)
      self.contents.draw_shadow_text(0, 256, 64, 32, $data_system.words.dex)
      self.contents.draw_shadow_text(122, 256, 64, 32, $data_system.words.agi)
      self.contents.draw_shadow_text(244, 256, 64, 32, $data_system.words.int)
      self.contents.draw_shadow_text(0, 288, 64, 32, $data_system.words.atk)
      self.contents.draw_shadow_text(122, 288, 64, 32, $data_system.words.pdef)
      self.contents.draw_shadow_text(244, 288, 64, 32, $data_system.words.mdef)
      self.contents.draw_shadow_text(0, 320, 96, 32, "弱点属性")
      self.contents.draw_shadow_text(0, 352, 96, 32, "耐性属性")
      self.contents.draw_shadow_text(0, 384, 96, 32, "経験値")
      self.contents.draw_shadow_text(184, 384, 384, 32, $data_system.words.gold)
      self.contents.draw_shadow_text(0, 416, 64, 32, $data_system.words.item)
      # 値を描画
      self.contents.font.color = normal_color
      hp = enemy.maxhp; sp = enemy.maxsp
      str = enemy.str; dex = enemy.dex; agi = enemy.agi; int = enemy.int
      atk = enemy.atk; pdef = enemy.pdef; mdef = enemy.mdef
      exp = enemy.exp; gold = enemy.gold
      if $imported["LimitBreak"]
        hp *= $maxhp_correct
        sp *= $maxsp_correct
      end
      if $imported["BattleDifficulty"]
        hp *= get_difficulty[1]
        sp *= get_difficulty[2]
        correct = get_difficulty[3]
        str *= correct; dex *= correct; agi *= correct; int *= correct
        atk *= correct; pdef *= correct; mdef *= correct
        exp *= get_difficulty[4]; gold *= get_difficulty[5]
      end
      self.contents.draw_shadow_text(48, 224, 64, 32, Integer(hp).to_s, 2)
      self.contents.draw_shadow_text(170, 224, 64, 32, Integer(sp).to_s, 2)
      self.contents.draw_shadow_text(292, 224, 64, 32, Integer(str).to_s, 2)
      self.contents.draw_shadow_text(48, 256, 64, 32, Integer(dex).to_s, 2)
      self.contents.draw_shadow_text(170, 256, 64, 32, Integer(agi).to_s, 2)
      self.contents.draw_shadow_text(292, 256, 64, 32, Integer(int).to_s, 2)
      self.contents.draw_shadow_text(48, 288, 64, 32, Integer(atk).to_s, 2)
      self.contents.draw_shadow_text(170, 288, 64, 32, Integer(pdef).to_s, 2)
      self.contents.draw_shadow_text(292, 288, 64, 32, Integer(mdef).to_s, 2)
      self.contents.draw_shadow_text(0, 384, 144, 32, Integer(exp).to_s, 2)
      self.contents.draw_shadow_text(184, 384, 144, 32, Integer(gold).to_s, 2)
      # 弱点属性描画
      text = ""
      for i in ELEMENT_RANGE
        # 有効度が3未満(A,B)ならば弱点
        if enemy.element_ranks[i] < 3
          # 属性名を追加
          text += "/" if text != ""
          text += $data_system.elements[i]
        end
      end
      self.contents.font.color = WEEK_COLOR.dup
      self.contents.draw_text(104, 320, 264, 32, text)
      # 耐性属性描画
      text = ""
      for i in ELEMENT_RANGE
        # 有効度が3より大きい(D,E,F)ならば耐性
        if enemy.element_ranks[i] > 3
          # 属性名を追加
          text += "/" if text != ""
          text += $data_system.elements[i]
        end
      end
      self.contents.font.color = RESIST_COLOR.dup
      self.contents.draw_text(104, 352, 264, 32, text)
      self.contents.font.color = normal_color
      # アイテム描画
      n = enemy.treasure_prob
      n *= get_difficulty[6] if $imported["BattleDifficulty"]
      prob = "#{Integer(n)}%"
      if enemy.item_id > 0
        icon = RPG::Cache.icon($data_items[enemy.item_id].icon_name)
        text = $data_items[enemy.item_id].name
      elsif enemy.weapon_id > 0
        icon = RPG::Cache.icon($data_weapons[enemy.weapon_id].icon_name)
        text = $data_weapons[enemy.weapon_id].name
      elsif enemy.armor_id > 0
        icon = RPG::Cache.icon($data_armors[enemy.armor_id].icon_name)
        text = $data_armors[enemy.armor_id].name
      else
        icon = Bitmap.new(24, 24)
        text = "No Item."
        prob = ""
      end
      self.contents.blt(70, 420, icon, Rect.new(0, 0, 24, 24))
      self.contents.draw_shadow_text(92 , 416, 204, 32, text)
      self.contents.draw_shadow_text(300, 416, 64, 32, prob)
    # 撃破していない場合
    else
      self.contents.font.color = disabled_color
      self.contents.draw_shadow_text(0, 280, 368, 32, "- Not Defeated -", 1)
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_MonsterGuide
#------------------------------------------------------------------------------
#  モンスター図鑑画面の処理を行うクラスです。
#==============================================================================

class Scene_MonsterGuide
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  def main
    # スプライトセット作成
    @spriteset = Spriteset_Map.new
    # 図鑑ウィンドウを作成
    @guide_top_window = Window_MonsterGuideTop.new
    @guide_left_window = Window_MonsterGuideLeft.new
    @guide_right_window = Window_MonsterGuideRight.new
    # ステータス表示
    @show_status = true
    # エネミーオブジェクトを指定
    enemy = @guide_left_window.item
    # 情報描画
    @guide_right_window.refresh(enemy, @show_status)
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @spriteset.dispose
    @guide_top_window.dispose
    @guide_left_window.dispose
    @guide_right_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @guide_top_window.update
    @guide_left_window.update
    @guide_right_window.update
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
    # A ボタンが押された場合
    if Input.trigger?(Input::A)
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # ステータス表示を切り替え
      @show_status = !@show_status
      # エネミーオブジェクトを指定
      enemy = @guide_left_window.item
      # 情報描画
      @guide_right_window.refresh(enemy, @show_status)
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # エネミーオブジェクトを指定
      enemy = @guide_left_window.item
      # 情報描画
      @guide_right_window.refresh(enemy, @show_status)
      return
    end
    if MOVE_REFRESH
      # カーソルが移動した場合
      if @last_index != @guide_left_window.index
        # インデックス保存
        @last_index = @guide_left_window.index
        # エネミーオブジェクトを指定
        enemy = @guide_left_window.item
        # 情報描画
        @guide_right_window.refresh(enemy, @show_status)
        return
      end
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 2)
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● アフターバトルフェーズ開始
  #--------------------------------------------------------------------------
  alias start_phase5_KGC_MonsterGuide start_phase5
  def start_phase5
    # トループ全体をループ
    for enemy in $game_troop.enemies
      # エネミーが隠れ状態の場合は次へ
      next if enemy.hidden
      # 撃破済みフラグをオン
      $game_system.enemy_defeated[enemy.id] = true
      # 変身前の敵も撃破済みにする
      if MG_ORIGINAL_DEFEAT
        enemy.original_id.each do |id|
          next if id == nil
          $game_system.enemy_defeated[id] = true
        end
      end
    end

    # 元の処理を実行
    start_phase5_KGC_MonsterGuide
  end
end

  • ?
    따방 2007.05.19 12:05
    포켓몬에 나오는 몬스터도감 비슷한 형식인가요??
  • ?
    Luna 2007.08.24 11:16
    오류 완죤 안습 ㄱ-
  • ?
    류재석 2008.01.01 14:46
    한글로 안되나요;;;
  • ?
    겜이 2008.08.20 11:16
    저 이거 프레임쉐도우 텍스트하고 디버그 스크립트도 같이 넣어야 하지 않나요?
  • ?
    RPG군 2011.01.28 18:39

    감솨 어캐하는지는 모르겠지만 ㅠㅋㅋㅋㅋ

  • ?
    레시라무 2011.05.25 20:42
    한글로 바꿔도 오류뜸

List of Articles
분류 제목 글쓴이 날짜 조회 수 추천 수
긴급상황 발생시 연락처 안내 독도2005 2012.11.28 2811 0
니오팅 이용 규칙 (2013.01.05 3차 개정) 7 file 소녀쿤 2012.01.15 16562 0
여러분의 의견을 받습니다. 20 file 니오팅 2010.01.29 4830 2
공지사항 일본어 스크립트를 번역하기 좋은 번역사이트 두곳입니다 ruby 2010.01.09 21568 0
공지사항 스크립트 게시판 관리자' ruby ' 입니다 ruby 2010.01.09 20536 0
공지사항 일본 스크립트/소스 공유 포럼 4 니오티 2010.01.05 21985 0
기타 게이지바 스크립트!! 최고!! 12 file 코아 코스튬 2011.08.08 3851 0
기타 이름입력 스크립트 2 닉네임이없습니다 2011.07.16 2126 0
기타 중복일것 같은데;; [한글 이름 입력] 1 꼬마쟁이 2011.01.05 4433 0
기타 상태창표시 스크립투 Ver 6.0 4 file 코아 코스튬 2010.09.21 2341 2
기타 3d 스크립트 (적용시 바로 실행가능&암호걸림) 15 file kjs 2010.06.04 3712 0
기타 Staff Roll 4 file 허걱 2010.03.04 2137 0
기타 게임 화면에 좌표 띄우기 5 file windshy 2010.01.25 1703 1
기타 디버깅 화면 재 구성 1 루시아스 2010.01.05 1738 0
기타 일어 스크립트 한글화 방법 안내 3 니오티 2007.02.01 2501 4
기타 어떤님이 부탁하신 온라인 같은 hud입니다 16 file 루비 2007.10.19 2554 2
기타 더욱더 간편하게! 에메스엔의 귀차니즘 탈출! 4 샤이닉 2007.02.20 2325 2
기타 몬스터 도감 6 니오티 2007.02.01 2821 3
기타 돈맡기기 시스템 8 히카루 2007.01.31 2918 2
기타 한글입력기 16 file 히카루 2007.01.31 3417 1
기타 레벨과 능력치 9999까지 만들기 5 windshy 2007.01.31 2118 0
기타 아이템 보관소 스크립트 (KGC펌) 10 file ケロロ 님의 ツク-ル 2005.12.11 2641 5
Board Pagination Prev 1 Next
/ 1

Copyright ⓒ Nioting All Rights Reserved. (since 1999)   개인정보취급방침