기타
2007.02.01 03:21

몬스터 도감

조회 수 2871 추천 수 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
    한글로 바꿔도 오류뜸

  1. 일본어 스크립트를 번역하기 좋은 번역사이트 두곳입니다

    Date2010.01.09 Category공지사항 Byruby Views22086 Votes0
    read more
  2. 스크립트 게시판 관리자' ruby ' 입니다

    Date2010.01.09 Category공지사항 Byruby Views20726 Votes0
    read more
  3. 일본 스크립트/소스 공유 포럼

    Date2010.01.05 Category공지사항 By니오티 Views22257 Votes0
    read more
  4. 게이지바 스크립트!! 최고!!

    Date2011.08.08 Category기타 By코아 코스튬 Views4253 Votes0
    Read More
  5. 이름입력 스크립트

    Date2011.07.16 Category기타 By닉네임이없습니다 Views2211 Votes0
    Read More
  6. 중복일것 같은데;; [한글 이름 입력]

    Date2011.01.05 Category기타 By꼬마쟁이 Views4644 Votes0
    Read More
  7. 상태창표시 스크립투 Ver 6.0

    Date2010.09.21 Category기타 By코아 코스튬 Views2412 Votes2
    Read More
  8. 3d 스크립트 (적용시 바로 실행가능&암호걸림)

    Date2010.06.04 Category기타 Bykjs Views4077 Votes0
    Read More
  9. Staff Roll

    Date2010.03.04 Category기타 By허걱 Views7511 Votes0
    Read More
  10. 게임 화면에 좌표 띄우기

    Date2010.01.25 Category기타 Bywindshy Views1769 Votes1
    Read More
  11. 디버깅 화면 재 구성

    Date2010.01.05 Category기타 By루시아스 Views1834 Votes0
    Read More
  12. 일어 스크립트 한글화 방법 안내

    Date2007.02.01 Category기타 By니오티 Views2572 Votes4
    Read More
  13. 어떤님이 부탁하신 온라인 같은 hud입니다

    Date2007.10.19 Category기타 By루비 Views2594 Votes2
    Read More
  14. 더욱더 간편하게! 에메스엔의 귀차니즘 탈출!

    Date2007.02.20 Category기타 By샤이닉 Views2357 Votes2
    Read More
  15. 몬스터 도감

    Date2007.02.01 Category기타 By니오티 Views2871 Votes3
    Read More
  16. 돈맡기기 시스템

    Date2007.01.31 Category기타 By히카루 Views3340 Votes2
    Read More
  17. 한글입력기

    Date2007.01.31 Category기타 By히카루 Views14281 Votes1
    Read More
  18. 레벨과 능력치 9999까지 만들기

    Date2007.01.31 Category기타 Bywindshy Views2184 Votes0
    Read More
  19. 아이템 보관소 스크립트 (KGC펌)

    Date2005.12.11 Category기타 Byケロロ 님의 ツク-ル Views2673 Votes5
    Read More
Board Pagination Prev 1 Next
/ 1

Copyright ⓒ Nioting All Rights Reserved. (since 1999)    개인정보
        

Fatal error: Cannot access property sessionController::$lifetime in /web/old/xe/modules/session/session.controller.php on line 45