设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1223|回复: 6
打印 上一主题 下一主题

[已经解决] 关于图鉴脚本

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1422
在线时间
245 小时
注册时间
2019-1-18
帖子
190
跳转到指定楼层
1
发表于 2019-8-30 21:17:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
40星屑
如题,我现在有一个用于制作怪物简介的脚本,在玩家击败怪物后可以查看该怪物的简介,但我想把它改成打过一次怪物就显示其简介,这该怎么改?求大佬指点
脚本如下:
RUBY 代码复制
  1. $data_states ||= load_data("Data/States.rvdata2")
  2. $data_system ||= load_data("Data/System.rvdata2")
  3.  
  4. #==============================================================================
  5. # ★ カスタマイズ項目 - Customize ★
  6. #==============================================================================
  7.  
  8. module KMS
  9. module EnemyGuide
  10.   # ◆ 図鑑に背景画像を使用する
  11.   #   true  : 背景画像をウィンドウ代わりに使用。
  12.   #   false : 通常のウィンドウを使用。
  13.   USE_BACKGROUND_IMAGE = false
  14.  
  15.   # ◆ 背景画像ファイル名
  16.   #  "Graphics/System/" から読み込む。
  17.   BACKGROUND_FILENAME  = "EnemyGuideBack"
  18.  
  19.   # ◆ 完成度表示のインターバル [フレーム]
  20.   INFO_INTERVAL = 180
  21.  
  22.   # ◆ 名前の前に通し番号を表示
  23.   #   true  : 001: スライム
  24.   #   false : スライム
  25.   SHOW_SERIAL_NUMBER = false
  26.  
  27.   # ◆ 通し番号をリストの並び順にする
  28.   #  true  : ID を無視して表示順の番号を付ける。
  29.   #  false : 通し番号として ID を使用。
  30.   SERIAL_NUM_FOLLOW  = true
  31.  
  32.   # ◆ 通し番号の書式
  33.   #  ヘルプの sprintf フォーマットを参照。
  34.   SERIAL_NUM_FORMAT  = "%03d: "
  35.  
  36.   # ◆ 未遭遇の敵の名前
  37.   #  1文字だけ指定すると、敵の名前と同じ文字数に拡張されます。
  38.   UNKNOWN_ENEMY_NAME = "?"
  39.  
  40.   # ◆ 未遭遇の敵のデータ表示
  41.   UNENCOUNTERED_DATA = "- 无数据 -"
  42.  
  43.   # ◆ 図鑑のパラメータ名
  44.   PARAMETER_NAME = {
  45.     :defeat_count   => "击败数",
  46.     :weak_element   => "弱点属性",
  47.     :resist_element => "耐性属性",
  48.     :weak_state     => "弱点异常",
  49.     :resist_state   => "无效异常",
  50.     :exp            => "经验值",
  51.     :treasure       => "道具",
  52.     :drop_prob      => "掉落率",
  53.   }  # ← これは消さないこと!
  54.  
  55.   # ◆ 未撃破の敵のパラメータ表示
  56.   UNDEFEATED_PARAMETER = "???"
  57.  
  58.   # ◆ 未ドロップのアイテム名
  59.   #  1文字だけ指定すると、アイテム名と同じ文字数に拡張されます。
  60.   UNDROPPED_ITEM_NAME  = "?"
  61.  
  62.   # ◆ 属性耐性を調べる範囲
  63.   #  耐性を調べる属性の ID を配列に格納。
  64.   #  .. や ... を使用した範囲指定も可能。
  65.   ELEMENT_RANGE = [3, 4, 5, 6, 7, 8, 9,10,11]#$data_system.elements.size]
  66.  
  67.   # ◆ 属性のアイコン
  68.   #  各属性に対応するアイコンの番号を指定。
  69.   #  配列の添字が属性 ID に対応。
  70.   ELEMENT_ICON = [nil,                       # ID:0 はダミー
  71.     nil, nil, 96, 97, 98, 99, 100, 101, 102, 103, 104, # ID: 3 ~ 11
  72.     nil, nil, nil, 105, 129, # ID: 12 ~ 16
  73.   ]  # ← これは消さないこと!
  74.  
  75.   # ◆ ステート耐性を調べる範囲
  76.   #  耐性を調べるステートの ID を配列に格納。
  77.   #  記述方法は ELEMENT_RANGE と同様。
  78.   STATE_RANGE = [32,34,37,42,114...129]
  79.  
  80.   # ◆ 弱点属性の行数
  81.   ELEMENT_ROWS_WEAK = 2
  82.  
  83.   # ◆ 耐性属性の行数
  84.   ELEMENT_ROWS_RESIST = 2
  85.  
  86.   # ◆ 弱点ステートの行数
  87.   STATE_ROWS_WEAK = 1
  88.  
  89.   # ◆ 無効ステートの行数
  90.   STATE_ROWS_RESIST = 2
  91.  
  92.   # ◆ ドロップアイテムを表示
  93.   #   true  : 表示する
  94.   #   false : 表示しない
  95.   SHOW_DROP_ITEM = true
  96.  
  97.   # ◆ 図鑑から隠す敵
  98.   #  図鑑から隠したい敵の ID を配列に格納。
  99.   #  ID と範囲 (1..10 など) のどちらでも可。
  100.   # <例> HIDDEN_ENEMIES = [2, 4, 8, 16..32]
  101.   HIDDEN_ENEMIES = [1,81,84,97,121,66,67,41,17,75,131,132,109..111]
  102.  
  103.   # ◆ 敵の並び順
  104.   #  表示する敵の ID を、表示したい順に配列に格納。
  105.   #  .. や ... を使用した範囲指定も可能。
  106.   #  指定しなかった敵、または HIDDEN_ENEMIES に指定した敵は表示しない。
  107.   #  (この機能を使用しない場合は nil)
  108.   ENEMY_ORDER = nil
  109.   # ENEMY_ORDER = [1..5, 8..13, 6, 7, 14, 15]
  110.   #  ↑使用例
  111.  
  112.   # ◆ 変身前の敵も撃破
  113.   #   true  : 変身前の敵も撃破したと見なす。
  114.   #   false : 変身前の敵は未撃破 (遭遇のみ) と見なす。
  115.   ORIGINAL_DEFEAT = true
  116.  
  117.   # ◆ メニュー画面に「モンスター図鑑」コマンドを追加する
  118.   #  追加する場所は「セーブ」の上 (独自コマンド部分) です。
  119.   USE_MENU_ENEMY_GUIDE_COMMAND = false
  120.  
  121.   # ◆ メニュー画面の「モンスター図鑑」コマンドの名称
  122.   VOCAB_MENU_ENEMY_GUIDE       = "怪物图鉴"
  123.  
  124.   # ◆ VX 互換モード
  125.   #   true  : ウィンドウの配置が VX 互換になる。背景画像を流用できる
  126.   #   false : VXAce 仕様のレイアウトになる。VX の背景画像を使用するとズレる
  127.   VX_COMPATIBLE = false
  128. end
  129. end
  130.  
  131. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  132.  
  133. $kms_imported ||= {}
  134. $kms_imported["EnemyGuide"] = true
  135.  
  136. module KMS
  137.   module_function
  138.   #--------------------------------------------------------------------------
  139.   # ○ 文字列をマスク
  140.   #     str  : マスク対象の文字列
  141.   #     mask : マスク文字列
  142.   #--------------------------------------------------------------------------
  143.   def mask_string(str, mask)
  144.     text = mask
  145.     if mask.scan(/./).size == 1
  146.       text = mask * str.scan(/./).size
  147.     end
  148.     return text
  149.   end
  150. end
  151.  
  152. module KMS::EnemyGuide
  153.   # ◆ 盗めるものを表示 (一時退避)
  154.   #  ≪盗む≫ 導入時のみ。
  155.   SHOW_STEAL_OBJ = false
  156.  
  157.   # ◆ 図鑑のパラメータ名 (一時退避)
  158.   PARAMETER_NAME[:steal_obj]  = "盗めるもの"
  159.   PARAMETER_NAME[:steal_prob] = "成功率"
  160.  
  161.   module Regexp
  162.     module Enemy
  163.       # 図鑑説明開始
  164.       BEGIN_GUIDE_DESCRIPTION = /<(?:GUIDE_DESCRIPTION|図鑑説明)>/i
  165.       # 図鑑説明終了
  166.       END_GUIDE_DESCRIPTION = /<\/(?:GUIDE_DESCRIPTION|図鑑説明)>/i
  167.     end
  168.   end
  169.  
  170.   #--------------------------------------------------------------------------
  171.   # ○ Range と Integer の配列を Integer の配列に変換 (重複要素は排除)
  172.   #--------------------------------------------------------------------------
  173.   def self.convert_integer_array(array, type = nil)
  174.     result = array.inject([]) do |ret, i|
  175.       case i
  176.       when Range;   ret | i.to_a
  177.       when Integer; ret | [i]
  178.       else;         ret
  179.       end
  180.     end
  181.  
  182.     case type
  183.     when :element
  184.       result.delete_if { |x| x >= $data_system.elements.size }
  185.     when :state
  186.       result.delete_if do |x|
  187.         x >= $data_states.size ||
  188.         $data_states[x].priority == 0
  189.       end
  190.     end
  191.  
  192.     result
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ○ 敵を表示するか
  196.   #--------------------------------------------------------------------------
  197.   def self.enemy_show?(enemy_id)
  198.     if HIDDEN_ENEMY_LIST.include?(enemy_id)
  199.       false
  200.     elsif ENEMY_ORDER_ID != nil
  201.       false unless ENEMY_ORDER_ID.include?(enemy_id)
  202.     else
  203.       true
  204.     end
  205.   end
  206.  
  207.   # 非表示モンスターリスト
  208.   HIDDEN_ENEMY_LIST = convert_integer_array(HIDDEN_ENEMIES)
  209.   # 表示順の敵 ID
  210.   ENEMY_ORDER_ID = (ENEMY_ORDER == nil ? nil :
  211.     convert_integer_array(ENEMY_ORDER))
  212.   # チェックする属性リスト
  213.   CHECK_ELEMENT_LIST = convert_integer_array(ELEMENT_RANGE, :element)
  214.   # チェックするステートリスト
  215.   CHECK_STATE_LIST   = convert_integer_array(STATE_RANGE, :state)
  216.  
  217.   # VX 互換ウィンドウのパディング
  218.   VX_WINDOW_PADDING = 16
  219. end
  220.  
  221. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  222.  
  223. #==============================================================================
  224. # □ KMS::Commands
  225. #==============================================================================
  226.  
  227. module KMS
  228. module Commands
  229.   module_function
  230.   #--------------------------------------------------------------------------
  231.   # ○ 遭遇状態取得
  232.   #     enemy_id : 敵 ID
  233.   #--------------------------------------------------------------------------
  234.   def enemy_encountered?(enemy_id)
  235.     $game_system.enemy_encountered[enemy_id]
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ○ 撃破状態取得
  239.   #     enemy_id : 敵 ID
  240.   #--------------------------------------------------------------------------
  241.   def enemy_defeated?(enemy_id)
  242.     $game_system.enemy_defeated[enemy_id]
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ○ アイテムドロップ状態取得
  246.   #     enemy_id   : 敵 ID
  247.   #     item_index : ドロップアイテム番号
  248.   #--------------------------------------------------------------------------
  249.   def enemy_item_dropped?(enemy_id, item_index)
  250.     return false if $game_system.enemy_item_dropped[enemy_id] == nil
  251.  
  252.     result = $game_system.enemy_item_dropped[enemy_id] & (1 << item_index)
  253.     result != 0
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ○ 盗み成功済み状態取得
  257.   #     enemy_id  : 敵 ID
  258.   #     obj_index : オブジェクト番号
  259.   #--------------------------------------------------------------------------
  260.   def enemy_object_stolen?(enemy_id, obj_index)
  261.     return false if $game_system.enemy_object_stolen[enemy_id] == nil
  262.  
  263.     result = $game_system.enemy_object_stolen[enemy_id] & (1 << obj_index)
  264.     result != 0
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ○ 遭遇状態設定
  268.   #     enemy_id : 敵 ID
  269.   #     enabled  : true..遭遇済み  false..未遭遇
  270.   #--------------------------------------------------------------------------
  271.   def set_enemy_encountered(enemy_id, enabled = true)
  272.     $game_system.enemy_encountered[enemy_id] = enabled
  273.     unless enabled
  274.       # 未遭遇なら撃破済みフラグも解除
  275.       set_enemy_defeated(enemy_id, false)
  276.     end
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ○ 撃破状態設定
  280.   #     enemy_id : 敵 ID
  281.   #     enabled  : true..撃破済み  false..未撃破
  282.   #--------------------------------------------------------------------------
  283.   def set_enemy_defeated(enemy_id, enabled = true)
  284.     $game_system.enemy_defeated[enemy_id] = enabled
  285.     if enabled
  286.       # 撃破済みなら遭遇フラグもセット
  287.       set_enemy_encountered(enemy_id)
  288.     end
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ○ アイテムドロップ状態設定
  292.   #     enemy_id   : 敵 ID
  293.   #     item_index : ドロップアイテム番号
  294.   #     enabled    : true..ドロップ済み  false..未ドロップ
  295.   #--------------------------------------------------------------------------
  296.   def set_enemy_item_dropped(enemy_id, item_index, enabled = true)
  297.     $game_system.enemy_item_dropped[enemy_id] ||= 0
  298.     if enabled
  299.       $game_system.enemy_item_dropped[enemy_id] |= (1 << item_index)
  300.     else
  301.       $game_system.enemy_item_dropped[enemy_id] &= ~(1 << item_index)
  302.     end
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ○ 盗み成功状態設定
  306.   #     enemy_id  : 敵 ID
  307.   #     obj_index : オブジェクト番号
  308.   #     enabled   : true..成功済み  false..未成功
  309.   #--------------------------------------------------------------------------
  310.   def set_enemy_object_stolen(enemy_id, obj_index, enabled = true)
  311.     $game_system.enemy_object_stolen[enemy_id] ||= 0
  312.     if enabled
  313.       $game_system.enemy_object_stolen[enemy_id] |= (1 << obj_index)
  314.     else
  315.       $game_system.enemy_object_stolen[enemy_id] &= ~(1 << obj_index)
  316.     end
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ○ 図鑑リセット
  320.   #--------------------------------------------------------------------------
  321.   def reset_enemy_guide
  322.     $game_system.enemy_encountered   = []
  323.     $game_system.enemy_defeated      = []
  324.     $game_system.enemy_item_dropped  = []
  325.     $game_system.enemy_object_stolen = []
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ○ 図鑑完成
  329.   #--------------------------------------------------------------------------
  330.   def complete_enemy_guide
  331.     (1...$data_enemies.size).each do |i|
  332.       set_enemy_encountered(i)
  333.       set_enemy_defeated(i)
  334.  
  335.       enemy = $data_enemies[i]
  336.  
  337.       items = enemy.drop_items.dup
  338.       if $kms_imported["ExtraDropItem"]
  339.         items += enemy.extra_drop_items
  340.       end
  341.       items.each_index { |j| set_enemy_item_dropped(i, j) }
  342.  
  343.       if $kms_imported["Steal"]
  344.         objs = enemy.steal_objects
  345.         objs.each_index { |j| set_enemy_object_stolen(i, j) }
  346.       end
  347.     end
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ○ 図鑑に含めるか
  351.   #     enemy_id : 敵 ID
  352.   #--------------------------------------------------------------------------
  353.   def enemy_guide_include?(enemy_id)
  354.     return false unless KMS::EnemyGuide.enemy_show?(enemy_id)
  355.  
  356.     enemy = $data_enemies[enemy_id]
  357.     enemy != nil && enemy.name != ""
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ○ 存在する敵の種類数取得
  361.   #     variable_id : 取得した値を代入する変数の ID
  362.   #--------------------------------------------------------------------------
  363.   def get_all_enemies_number(variable_id = 0)
  364.     total = (1...$data_enemies.size).inject(0) do |n, i|
  365.       enemy_guide_include?(i) ? n + 1 : n
  366.     end
  367.  
  368.     if variable_id > 0
  369.       $game_variables[variable_id] = total
  370.       $game_map.need_refresh       = true
  371.     end
  372.  
  373.     total
  374.   end
  375.   #--------------------------------------------------------------------------
  376.   # ○ 遭遇した敵の種類数取得
  377.   #     variable_id : 取得した値を代入する変数の ID
  378.   #--------------------------------------------------------------------------
  379.   def get_encountered_enemies_number(variable_id = 0)
  380.     total = (1...$data_enemies.size).inject(0) do |n, i|
  381.       enemy_guide_include?(i) && $game_system.enemy_encountered[i] ? n + 1 : n
  382.     end
  383.  
  384.     if variable_id > 0
  385.       $game_variables[variable_id] = total
  386.       $game_map.need_refresh       = true
  387.     end
  388.  
  389.     total
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ○ 撃破した敵の種類数取得
  393.   #     variable_id : 取得した値を代入する変数の ID
  394.   #--------------------------------------------------------------------------
  395.   def get_defeated_enemies_number(variable_id = 0)
  396.     total = (1...$data_enemies.size).inject(0) do |n, i|
  397.       if enemy_guide_include?(i) &&
  398.           $game_system.enemy_encountered[i] &&
  399.           $game_system.enemy_defeated[i]
  400.         n + 1
  401.       else
  402.         n
  403.       end
  404.     end
  405.  
  406.     if variable_id > 0
  407.       $game_variables[variable_id] = total
  408.       $game_map.need_refresh       = true
  409.     end
  410.  
  411.     total
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ○ モンスター図鑑完成度の取得
  415.   #     variable_id : 取得した値を代入する変数の ID
  416.   #--------------------------------------------------------------------------
  417.   def get_enemy_guide_completion(variable_id = 0)
  418.     num   = get_all_enemies_number
  419.     value = (num > 0 ? (get_defeated_enemies_number * 100 / num) : 0)
  420.     if variable_id > 0
  421.       $game_variables[variable_id] = value
  422.       $game_map.need_refresh       = true
  423.     end
  424.     value
  425.   end
  426. end  # module Commands
  427. end  # module KMS
  428.  
  429. class Game_Interpreter
  430.   include KMS::Commands
  431.  
  432.   #--------------------------------------------------------------------------
  433.   # ○ モンスター図鑑呼び出し
  434.   #--------------------------------------------------------------------------
  435.   def call_enemy_guide
  436.     command_call_enemy_guide
  437.   end
  438. end
  439.  
  440. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  441.  
  442. #==============================================================================
  443. # ■ Vocab
  444. #==============================================================================
  445.  
  446. module Vocab
  447.   # モンスター図鑑
  448.   def self.enemy_guide
  449.     KMS::EnemyGuide::VOCAB_MENU_ENEMY_GUIDE
  450.   end
  451. end
  452.  
  453. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  454.  
  455. #==============================================================================
  456. # ■ RPG::Enemy
  457. #==============================================================================
  458.  
  459. class RPG::Enemy
  460.   #--------------------------------------------------------------------------
  461.   # ○ モンスター図鑑のキャッシュ生成
  462.   #--------------------------------------------------------------------------
  463.   def create_enemy_guide_cache
  464.     @__enemy_guide_description = ""
  465.  
  466.     description_flag = false
  467.     self.note.each_line do |line|
  468.       case line
  469.       when KMS::EnemyGuide::Regexp::Enemy::BEGIN_GUIDE_DESCRIPTION
  470.         # 説明文開始
  471.         description_flag = true
  472.       when KMS::EnemyGuide::Regexp::Enemy::END_GUIDE_DESCRIPTION
  473.         # 説明文終了
  474.         description_flag = false
  475.       else
  476.         if description_flag
  477.           @__enemy_guide_description += line
  478.         end
  479.       end
  480.     end
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ○ 図鑑説明文
  484.   #--------------------------------------------------------------------------
  485.   def enemy_guide_description
  486.     create_enemy_guide_cache if @__enemy_guide_description == nil
  487.     @__enemy_guide_description
  488.   end
  489. end
  490.  
  491. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  492.  
  493. #==============================================================================
  494. # ■ Game_System
  495. #==============================================================================
  496.  
  497. class Game_System
  498.   #--------------------------------------------------------------------------
  499.   # ● 公開インスタンス変数
  500.   #--------------------------------------------------------------------------
  501.   attr_writer   :enemy_encountered        # 遭遇済みフラグ
  502.   attr_writer   :enemy_defeated           # 撃破済みフラグ
  503.   attr_writer   :enemy_item_dropped       # アイテムドロップ済みフラグ
  504.   attr_writer   :enemy_object_stolen      # 盗み成功済みフラグ
  505.   #--------------------------------------------------------------------------
  506.   # ○ 遭遇済みフラグ取得
  507.   #--------------------------------------------------------------------------
  508.   def enemy_encountered
  509.     @enemy_encountered ||= []
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # ○ 撃破済みフラグ取得
  513.   #--------------------------------------------------------------------------
  514.   def enemy_defeated
  515.     @enemy_defeated ||= []
  516.   end
  517.   #--------------------------------------------------------------------------
  518.   # ○ アイテムドロップ済みフラグ取得
  519.   #--------------------------------------------------------------------------
  520.   def enemy_item_dropped
  521.     @enemy_item_dropped ||= []
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ○ 盗み成功済みフラグ取得
  525.   #--------------------------------------------------------------------------
  526.   def enemy_object_stolen
  527.     @enemy_object_stolen ||= []
  528.   end
  529. end
  530.  
  531. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  532.  
  533. #==============================================================================
  534. # ■ Game_Enemy
  535. #==============================================================================
  536.  
  537. class Game_Enemy < Game_Battler
  538.   #--------------------------------------------------------------------------
  539.   # ● オブジェクト初期化
  540.   #     index    : 敵グループ内インデックス
  541.   #     enemy_id : 敵キャラ ID
  542.   #--------------------------------------------------------------------------
  543.   alias initialize_KMS_EnemyGuide initialize
  544.   def initialize(index, enemy_id)
  545.     initialize_KMS_EnemyGuide(index, enemy_id)
  546.  
  547.     @original_ids = []  # 変身前の ID
  548.   end
  549.   #--------------------------------------------------------------------------
  550.   # ● コラプスの実行
  551.   #--------------------------------------------------------------------------
  552.   alias perform_collapse_effect_KMS_EnemyGuide perform_collapse_effect
  553.   def perform_collapse_effect
  554.     perform_collapse_effect_KMS_EnemyGuide
  555.  
  556.     # 撃破済みフラグをオン
  557.     KMS::Commands.set_enemy_defeated(enemy_id)
  558.  
  559.     # 変身前の敵も撃破済みにする
  560.     if KMS::EnemyGuide::ORIGINAL_DEFEAT
  561.       @original_ids.compact.each do |i|
  562.         KMS::Commands.set_enemy_defeated(i)
  563.       end
  564.     end
  565.   end
  566.   #--------------------------------------------------------------------------
  567.   # ● 変身
  568.   #     enemy_id : 変身先の敵キャラ ID
  569.   #--------------------------------------------------------------------------
  570.   alias transform_KMS_EnemyGuide transform
  571.   def transform(enemy_id)
  572.     # 変身前のIDを保存
  573.     @original_ids << @enemy_id
  574.  
  575.     transform_KMS_EnemyGuide(enemy_id)
  576.  
  577.     # 変身後の敵も遭遇済みにする
  578.     KMS::Commands.set_enemy_encountered(enemy_id)
  579.   end
  580.   #--------------------------------------------------------------------------
  581.   # ● 現れる
  582.   #--------------------------------------------------------------------------
  583.   def appear
  584.     # 遭遇済みフラグをオン
  585.     KMS::Commands.set_enemy_encountered(enemy_id)
  586.     super
  587.   end
  588.   #--------------------------------------------------------------------------
  589.   # ● ドロップアイテムの配列作成  ※ 上書き
  590.   #--------------------------------------------------------------------------
  591.   def make_drop_items
  592.     enemy.drop_items.inject([]) do |r, di|
  593.       if di.kind > 0 && rand * di.denominator < drop_item_rate
  594.         # ドロップ済みフラグをセット
  595.         KMS::Commands.set_enemy_item_dropped(enemy_id, enemy.drop_items.index(di))
  596.         r.push(item_object(di.kind, di.data_id))
  597.       else
  598.         r
  599.       end
  600.     end
  601.   end
  602. end
  603.  
  604. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  605.  
  606. #==============================================================================
  607. # ■ Game_Troop
  608. #==============================================================================
  609.  
  610. class Game_Troop < Game_Unit
  611.   #--------------------------------------------------------------------------
  612.   # ● セットアップ
  613.   #--------------------------------------------------------------------------
  614.   alias setup_KMS_EnemyGuide setup
  615.   def setup(troop_id)
  616.     setup_KMS_EnemyGuide(troop_id)
  617.  
  618.     # メンバーのうち、出現済みなら遭遇フラグを立てる
  619.     members.each do |enemy|
  620.       KMS::Commands.set_enemy_encountered(enemy.enemy_id) unless enemy.hidden?
  621.     end
  622.   end
  623. end
  624.  
  625. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  626.  
  627. #==============================================================================
  628. # ■ Game_Interpreter
  629. #==============================================================================
  630.  
  631. class Game_Interpreter
  632.   #--------------------------------------------------------------------------
  633.   # ○ モンスター図鑑を開く
  634.   #--------------------------------------------------------------------------
  635.   def command_call_enemy_guide
  636.     return if $game_party.in_battle
  637.     SceneManager.call(Scene_EnemyGuide)
  638.     Fiber.yield
  639.   end
  640. end
  641.  
  642. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  643.  
  644. #==============================================================================
  645. # ■ Window_MenuCommand
  646. #==============================================================================
  647.  
  648. if KMS::EnemyGuide::USE_MENU_ENEMY_GUIDE_COMMAND
  649. class Window_MenuCommand < Window_Command
  650.   #--------------------------------------------------------------------------
  651.   # ● 独自コマンドの追加用
  652.   #--------------------------------------------------------------------------
  653.   alias add_original_commands_KMS_EnemyGuide add_original_commands
  654.   def add_original_commands
  655.     add_original_commands_KMS_EnemyGuide
  656.  
  657.     add_command(Vocab::enemy_guide, :enemy_guide)
  658.   end
  659. end
  660. end  # if KMS::EnemyGuide::USE_MENU_ENEMY_GUIDE_COMMAND
  661.  
  662. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  663.  
  664. #==============================================================================
  665. # □ Window_EnemyGuideTop
  666. #------------------------------------------------------------------------------
  667. #   モンスター図鑑画面で、完成度を表示するウィンドウです。
  668. #==============================================================================
  669.  
  670. class Window_EnemyGuideTop < Window_Base
  671.   #--------------------------------------------------------------------------
  672.   # ● オブジェクト初期化
  673.   #--------------------------------------------------------------------------
  674.   def initialize
  675.     super(0, 0, window_width, window_height)
  676.     @duration = 0
  677.     @interval = KMS::EnemyGuide::INFO_INTERVAL
  678.     refresh
  679.  
  680.     if KMS::EnemyGuide::USE_BACKGROUND_IMAGE
  681.       self.opacity = 0
  682.     end
  683.  
  684.     # ウィンドウスキンのスクロールマーカーを削除
  685.     if windowskin != nil
  686.       bitmap = Bitmap.new(windowskin.width, windowskin.height)
  687.       bitmap.blt(0, 0, windowskin, windowskin.rect)
  688.       bitmap.clear_rect(80, 16, 32, 32)
  689.       self.windowskin = bitmap
  690.     end
  691.   end
  692.   #--------------------------------------------------------------------------
  693.   # ● 破棄
  694.   #--------------------------------------------------------------------------
  695.   def dispose
  696.     self.windowskin.dispose if windowskin
  697.     super
  698.   end
  699.   #--------------------------------------------------------------------------
  700.   # ● ウィンドウ幅の取得
  701.   #--------------------------------------------------------------------------
  702.   def window_width
  703.     240
  704.   end
  705.   #--------------------------------------------------------------------------
  706.   # ● ウィンドウ高さの取得
  707.   #--------------------------------------------------------------------------
  708.   def window_height
  709.     fitting_height(1)
  710.   end
  711.   #--------------------------------------------------------------------------
  712.   # ● 標準パディングサイズの取得
  713.   #--------------------------------------------------------------------------
  714.   def standard_padding
  715.     KMS::EnemyGuide::VX_WINDOW_PADDING
  716.   end if KMS::EnemyGuide::VX_COMPATIBLE
  717.   #--------------------------------------------------------------------------
  718.   # ● ウィンドウ内容の高さを計算
  719.   #--------------------------------------------------------------------------
  720.   def contents_height
  721.     line_height * 4
  722.   end
  723.   #--------------------------------------------------------------------------
  724.   # ● リフレッシュ
  725.   #--------------------------------------------------------------------------
  726.   def refresh
  727.     contents.clear
  728.     total       = KMS::Commands.get_all_enemies_number
  729.     encountered = KMS::Commands.get_encountered_enemies_number
  730.     defeated    = KMS::Commands.get_defeated_enemies_number
  731.  
  732.     text = sprintf("已遭遇: %3d/%3d ",encountered, total)
  733.     draw_text(0, line_height * 0, contents_width, line_height, text, 1)
  734.     draw_text(0, line_height * 3, contents_width, line_height, text, 1)
  735.     text = sprintf("已击破: %3d/%3d", defeated, total)
  736.     draw_text(0, line_height * 1, contents_width, line_height, text, 1)
  737.     text = sprintf("完成度: %3d%%", defeated * 100 / total)
  738.     draw_text(0, line_height * 2, contents_width, line_height, text, 1)
  739.   end
  740.   #--------------------------------------------------------------------------
  741.   # ● フレーム更新
  742.   #--------------------------------------------------------------------------
  743.   def update
  744.     super
  745.     update_animation
  746.   end
  747.   #--------------------------------------------------------------------------
  748.   # ○ アニメーション更新
  749.   #--------------------------------------------------------------------------
  750.   def update_animation
  751.     @duration += 1
  752.     case @duration
  753.     when @interval...(@interval + line_height)
  754.       self.oy += 1
  755.     when (@interval + line_height)
  756.       @duration = 0
  757.       if self.oy >= line_height * 3
  758.         self.oy = 0
  759.       end
  760.     end
  761.   end
  762. end
  763.  
  764. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  765.  
  766. #==============================================================================
  767. # □ Window_EnemyGuideList
  768. #------------------------------------------------------------------------------
  769. #   モンスター図鑑画面で、モンスター一覧を表示するウィンドウです。
  770. #==============================================================================
  771.  
  772. class Window_EnemyGuideList < Window_Selectable
  773.   #--------------------------------------------------------------------------
  774.   # ● オブジェクト初期化
  775.   #--------------------------------------------------------------------------
  776.   def initialize
  777.     @data = []
  778.     super(0, line_height + standard_padding * 2, window_width, window_height)
  779.     self.index = 0
  780.     refresh
  781.  
  782.     if KMS::EnemyGuide::USE_BACKGROUND_IMAGE
  783.       self.opacity = 0
  784.       self.height -= (self.height - 32) % line_height
  785.     end
  786.   end
  787.   #--------------------------------------------------------------------------
  788.   # ● ウィンドウ幅の取得
  789.   #--------------------------------------------------------------------------
  790.   def window_width
  791.     240
  792.   end
  793.   #--------------------------------------------------------------------------
  794.   # ● ウィンドウ高さの取得
  795.   #--------------------------------------------------------------------------
  796.   def window_height
  797.     Graphics.height - (line_height + standard_padding * 2)
  798.   end
  799.   #--------------------------------------------------------------------------
  800.   # ● 標準パディングサイズの取得
  801.   #--------------------------------------------------------------------------
  802.   def standard_padding
  803.     KMS::EnemyGuide::VX_WINDOW_PADDING
  804.   end if KMS::EnemyGuide::VX_COMPATIBLE
  805.   #--------------------------------------------------------------------------
  806.   # ● 項目数の取得
  807.   #--------------------------------------------------------------------------
  808.   def item_max
  809.     @data.size
  810.   end
  811.   #--------------------------------------------------------------------------
  812.   # ○ 選択モンスターの取得
  813.   #--------------------------------------------------------------------------
  814.   def item
  815.     @data[self.index]
  816.   end
  817.   #--------------------------------------------------------------------------
  818.   # ○ エネミーをリストに含めるか
  819.   #     enemy_id : 敵 ID
  820.   #--------------------------------------------------------------------------
  821.   def include?(enemy_id)
  822.     KMS::Commands.enemy_guide_include?(enemy_id)
  823.   end
  824.   #--------------------------------------------------------------------------
  825.   # ○ エネミーリストの作成
  826.   #--------------------------------------------------------------------------
  827.   def make_enemy_list
  828.     @data.clear
  829.     if KMS::EnemyGuide::ENEMY_ORDER_ID == nil
  830.       # ID順
  831.       enemy_list = 1...$data_enemies.size
  832.     else
  833.       # 指定順
  834.       enemy_list = KMS::EnemyGuide::ENEMY_ORDER_ID
  835.     end
  836.  
  837.     enemy_list.each do |i|
  838.       @data << $data_enemies[i] if include?(i)
  839.     end
  840.   end
  841.   #--------------------------------------------------------------------------
  842.   # ● リフレッシュ
  843.   #--------------------------------------------------------------------------
  844.   def refresh
  845.     make_enemy_list
  846.     create_contents
  847.     draw_all_items
  848.   end
  849.   #--------------------------------------------------------------------------
  850.   # ● 項目の描画
  851.   #     index : 項目番号
  852.   #--------------------------------------------------------------------------
  853.   def draw_item(index)
  854.     enemy = @data[index]
  855.     return if enemy == nil
  856.  
  857.     change_color(normal_color, KMS::Commands.enemy_defeated?(enemy.id))
  858.     rect = item_rect_for_text(index)
  859.     contents.clear_rect(rect)
  860.  
  861.     if KMS::EnemyGuide::SHOW_SERIAL_NUMBER
  862.       text = sprintf(KMS::EnemyGuide::SERIAL_NUM_FORMAT,
  863.         KMS::EnemyGuide::SERIAL_NUM_FOLLOW ? (index + 1) : enemy.id)
  864.     else
  865.       text = ""
  866.     end
  867.  
  868.     if KMS::Commands.enemy_encountered?(enemy.id)
  869.       # 遭遇済み
  870.       text += enemy.name
  871.     else
  872.       # 未遭遇
  873.       mask = KMS::EnemyGuide::UNKNOWN_ENEMY_NAME
  874.       if mask.scan(/./).size == 1
  875.         mask = mask * enemy.name.scan(/./).size
  876.       end
  877.       text += mask
  878.     end
  879.     draw_text(rect, text)
  880.   end
  881. end
  882.  
  883. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  884.  
  885. #==============================================================================
  886. # □ Window_EnemyGuideStatus
  887. #------------------------------------------------------------------------------
  888. #   モンスター図鑑画面で、ステータスを表示するウィンドウです。
  889. #==============================================================================
  890.  
  891. class Window_EnemyGuideStatus < Window_Base
  892.   #--------------------------------------------------------------------------
  893.   # ○ 定数
  894.   #--------------------------------------------------------------------------
  895.   PARAM2_COUNT = 6                        # 第2パラメータの数
  896.   #--------------------------------------------------------------------------
  897.   # ● 公開インスタンス変数
  898.   #--------------------------------------------------------------------------
  899.   attr_reader   :enemy                    # 表示エネミー
  900.   #--------------------------------------------------------------------------
  901.   # ● オブジェクト初期化
  902.   #--------------------------------------------------------------------------
  903.   def initialize
  904.     super(240, 0, window_width, window_height)
  905.     self.enemy = nil
  906.     self.z = 100
  907.     if KMS::EnemyGuide::USE_BACKGROUND_IMAGE
  908.       self.opacity = 0
  909.     end
  910.     @show_sprite  = false
  911.     @enemy_sprite = Sprite.new
  912.     @enemy_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
  913.     @enemy_sprite.x = 0
  914.     @enemy_sprite.y = 0
  915.     @enemy_sprite.z = self.z + 100
  916.     @enemy_sprite.visible = false
  917.  
  918.     @enemy_object = nil
  919.   end
  920.   #--------------------------------------------------------------------------
  921.   # ● 破棄
  922.   #--------------------------------------------------------------------------
  923.   def dispose
  924.     @enemy_sprite.bitmap.dispose
  925.     @enemy_sprite.dispose
  926.     super
  927.   end
  928.   #--------------------------------------------------------------------------
  929.   # ● ウィンドウ幅の取得
  930.   #--------------------------------------------------------------------------
  931.   def window_width
  932.     Graphics.width - 240
  933.   end
  934.   #--------------------------------------------------------------------------
  935.   # ● ウィンドウ高さの取得
  936.   #--------------------------------------------------------------------------
  937.   def window_height
  938.     Graphics.height
  939.   end
  940.   #--------------------------------------------------------------------------
  941.   # ● 標準パディングサイズの取得
  942.   #--------------------------------------------------------------------------
  943.   def standard_padding
  944.     KMS::EnemyGuide::VX_WINDOW_PADDING
  945.   end if KMS::EnemyGuide::VX_COMPATIBLE
  946.   #--------------------------------------------------------------------------
  947.   # ● ウィンドウ内容の幅を計算
  948.   #--------------------------------------------------------------------------
  949.   def contents_width
  950.     page_width * pages
  951.   end
  952.   #--------------------------------------------------------------------------
  953.   # ○ ページ幅
  954.   #--------------------------------------------------------------------------
  955.   def page_width
  956.     return window_width - standard_padding * 2
  957.   end
  958.   #--------------------------------------------------------------------------
  959.   # ○ アイテム用ページを表示するか
  960.   #--------------------------------------------------------------------------
  961.   def item_page_show?
  962.     return true if KMS::EnemyGuide::SHOW_DROP_ITEM
  963.     return true if $kms_imported["Steal"] && KMS::EnemyGuide::SHOW_STEAL_OBJ
  964.  
  965.     false
  966.   end
  967.   #--------------------------------------------------------------------------
  968.   # ○ ページ数取得
  969.   #--------------------------------------------------------------------------
  970.   def pages
  971.     item_page_show? ? 3 : 2
  972.   end
  973.   #--------------------------------------------------------------------------
  974.   # ○ 表示エネミー設定
  975.   #--------------------------------------------------------------------------
  976.   def enemy=(enemy)
  977.     @enemy = enemy
  978.     if enemy
  979.       @enemy_object = Game_Enemy.new(0, enemy.id)
  980.     else
  981.       @enemy_object = nil
  982.     end
  983.     refresh
  984.   end
  985.   #--------------------------------------------------------------------------
  986.   # ○ 表示情報切り替え
  987.   #     amount : 移動ページ数
  988.   #--------------------------------------------------------------------------
  989.   def shift_info_type(amount)
  990.     n = self.ox + page_width * amount
  991.     self.ox = [[n, 0].max, page_width * (pages - 1)].min
  992.   end
  993.   #--------------------------------------------------------------------------
  994.   # ○ スプライト表示切替
  995.   #--------------------------------------------------------------------------
  996.   def switch_sprite
  997.     @show_sprite          = !@show_sprite
  998.     @enemy_sprite.visible = @show_sprite
  999.   end
  1000.   #--------------------------------------------------------------------------
  1001.   # ● リフレッシュ
  1002.   #--------------------------------------------------------------------------
  1003.   def refresh
  1004.     contents.clear
  1005.  
  1006.     draw_enemy_sprite
  1007.  
  1008.     return if enemy == nil
  1009.  
  1010.     # 遭遇していない
  1011.     unless KMS::Commands.enemy_encountered?(enemy.id)
  1012.       change_color(normal_color, false)
  1013.       dy  = contents_height / 2
  1014.       dy -= dy % line_height
  1015.       pages.times do |i|
  1016.         dx = i * page_width
  1017.         draw_text(dx, dy, page_width, line_height,
  1018.           KMS::EnemyGuide::UNENCOUNTERED_DATA, 1)
  1019.       end
  1020.       return
  1021.     end
  1022.  
  1023.     change_color(normal_color)
  1024.     draw_status
  1025.   end
  1026.   #--------------------------------------------------------------------------
  1027.   # ○ ステータス描画
  1028.   #--------------------------------------------------------------------------
  1029.   def draw_status
  1030.     # Page 1
  1031.     dy = draw_basic_info(    4, 0)
  1032.     dy = draw_parameter2(    4, dy)
  1033.     dy = draw_weak_element(  4, dy, KMS::EnemyGuide::ELEMENT_ROWS_WEAK)
  1034.     dy = draw_resist_element(4, dy, KMS::EnemyGuide::ELEMENT_ROWS_RESIST)
  1035.     dy = draw_weak_state(    4, dy, KMS::EnemyGuide::STATE_ROWS_WEAK)
  1036.     dy = draw_resist_state(  4, dy, KMS::EnemyGuide::STATE_ROWS_RESIST)
  1037.     draw_prize(4, dy)
  1038.  
  1039.     # Page 2 (アイテム関連を表示する場合のみ)
  1040.     if item_page_show?
  1041.       dx       = page_width + 4
  1042.       dy       = draw_basic_info(dx, 0)
  1043.       max_rows = (contents_height - dy) / line_height
  1044.       rows     = (max_rows + 1) / (pages - 1)
  1045.       dy       = draw_drop_item(dx, dy, rows)
  1046.       draw_steal_object(dx, dy, max_rows - rows)
  1047.     end
  1048.  
  1049.     # Page 3
  1050.     dx = page_width * (pages - 1) + 4
  1051.     dy = draw_basic_info(dx, 0)
  1052.     draw_description(dx, dy)
  1053.   end
  1054.   #--------------------------------------------------------------------------
  1055.   # ○ 基本情報画
  1056.   #     dx, dy : 描画先 X, Y
  1057.   #--------------------------------------------------------------------------
  1058.   def draw_basic_info(dx, dy)
  1059.     draw_graphic(dx, dy)
  1060.     draw_parameter1(dx + 112, dy)
  1061.     return dy + 96
  1062.   end
  1063.   #--------------------------------------------------------------------------
  1064.   # ○ グラフィック描画
  1065.   #     dx, dy : 描画先 X, Y
  1066.   #--------------------------------------------------------------------------
  1067.   def draw_graphic(dx, dy)
  1068.     return if enemy == nil || !KMS::Commands.enemy_encountered?(enemy.id)
  1069.  
  1070.     buf    = Bitmap.new(108, 96)
  1071.     bitmap = Cache.battler(enemy.battler_name, enemy.battler_hue)
  1072.     rect   = Rect.new(0, 0, bitmap.width / 3, bitmap.height / 3)
  1073.     rect.x = (108 - rect.width) / 2
  1074.     rect.y = ( 96 - rect.height) / 2
  1075.     buf.stretch_blt(rect, bitmap, bitmap.rect)
  1076.     contents.blt(dx, dy, buf, buf.rect)
  1077.     buf.dispose
  1078.   end
  1079.   #--------------------------------------------------------------------------
  1080.   # ○ エネミースプライト描画
  1081.   #--------------------------------------------------------------------------
  1082.   def draw_enemy_sprite
  1083.     return if @enemy_sprite == nil
  1084.  
  1085.     @enemy_sprite.bitmap.fill_rect(@enemy_sprite.bitmap.rect,
  1086.       Color.new(255, 255, 255, 150))
  1087.  
  1088.     return if enemy == nil || !KMS::Commands.enemy_encountered?(enemy.id)
  1089.  
  1090.     bitmap = Cache.battler(enemy.battler_name, enemy.battler_hue)
  1091.     dx = (Graphics.width  - bitmap.width)  / 2
  1092.     dy = (Graphics.height - bitmap.height) / 2
  1093.     @enemy_sprite.bitmap.blt(dx, dy, bitmap, bitmap.rect)
  1094.   end
  1095.   #--------------------------------------------------------------------------
  1096.   # ○ パラメータ描画 - 1
  1097.   #     dx, dy : 描画先 X, Y
  1098.   #--------------------------------------------------------------------------
  1099.   def draw_parameter1(dx, dy)
  1100.     # 名前, HP, MP
  1101.     param = {}
  1102.     if KMS::Commands.enemy_defeated?(enemy.id)
  1103.       param[:maxhp] = enemy.params[0]
  1104.       param[:maxmp] = enemy.params[1]
  1105.       if $kms_imported["BattleCount"]
  1106.         param[:defeat_count] = KMS::Commands.get_defeat_count(enemy.id)
  1107.       end
  1108.     else
  1109.       param[:maxhp] = param[:maxmp] = KMS::EnemyGuide::UNDEFEATED_PARAMETER
  1110.       param[:defeat_count] = 0
  1111.     end
  1112.  
  1113.     change_color(normal_color)
  1114.     draw_text(dx, dy, width - 144, line_height, enemy.name)
  1115.     change_color(system_color)
  1116.     draw_text(dx, dy + line_height,     80, line_height, Vocab.hp)
  1117.     draw_text(dx, dy + line_height * 2, 80, line_height, Vocab.mp)
  1118.     if $kms_imported["BattleCount"]
  1119.       draw_text(dx, dy + line_height * 3, 80, line_height,
  1120.         KMS::EnemyGuide::PARAMETER_NAME[:defeat_count])
  1121.     end
  1122.     change_color(normal_color)
  1123.     draw_text(dx + 88, dy + line_height,     64, line_height, param[:maxhp], 2)
  1124.     draw_text(dx + 88, dy + line_height * 2, 64, line_height, param[:maxmp], 2)
  1125.     if $kms_imported["BattleCount"]
  1126.       draw_text(dx + 88, dy + line_height * 3, 64, line_height,
  1127.         param[:defeat_count], 2)
  1128.     end
  1129.   end
  1130.   #--------------------------------------------------------------------------
  1131.   # ○ パラメータ描画 - 2
  1132.   #     dx, dy : 描画先 X, Y
  1133.   #--------------------------------------------------------------------------
  1134.   def draw_parameter2(dx, dy)
  1135.     # ATK ~ LUK
  1136.     param = {}
  1137.     if KMS::Commands.enemy_defeated?(enemy.id)
  1138.       param = enemy.params
  1139.     else
  1140.       param = Array.new(PARAM2_COUNT) { KMS::EnemyGuide::UNDEFEATED_PARAMETER }
  1141.     end
  1142.  
  1143.     dw = page_width / 2
  1144.     PARAM2_COUNT.times do |i|
  1145.       dx2 = dx + (i % 2) * dw
  1146.       dy2 = dy + (i / 2) * line_height
  1147.       change_color(system_color)
  1148.       draw_text(dx2,      dy2, 80, line_height, Vocab.param(i + 2))
  1149.       change_color(normal_color)
  1150.       draw_text(dx2 + 80, dy2, 48, line_height, param[i + 2], 2)
  1151.     end
  1152.  
  1153.     dy + (PARAM2_COUNT + 1) / 2 * line_height
  1154.   end
  1155.   #--------------------------------------------------------------------------
  1156.   # ○ アイコンリスト描画
  1157.   #     dx, dy      : 描画先 X, Y
  1158.   #     rows, cols  : アイコン行/列数
  1159.   #     item_list   : 描画対象のリスト
  1160.   #     cond_proc   : 描画条件 Proc
  1161.   #     index_proc  : アイコン index 取得用 Proc
  1162.   #     enable_proc : 有効判定用 Proc
  1163.   #--------------------------------------------------------------------------
  1164.   def draw_icon_list(dx, dy, rows, cols, item_list,
  1165.       cond_proc, index_proc, enable_proc = nil)
  1166.     nc = 0  # 現在の列数
  1167.     nr = 0  # 現在の行数
  1168.     item_list.each do |item|
  1169.       next if item == nil
  1170.       next if enable_proc != nil && !enable_proc.call(item)
  1171.       next unless cond_proc.call(item)
  1172.       icon_index = index_proc.call(item)
  1173.       next if icon_index == nil || icon_index == 0
  1174.  
  1175.       draw_icon(icon_index, dx + nc * 24, dy + nr * 24)
  1176.       nc += 1
  1177.       if nc == cols
  1178.         # 次の行へ
  1179.         nc = 0
  1180.         nr += 1
  1181.         break if nr == rows  # 行制限オーバー
  1182.       end
  1183.     end  # each
  1184.   end
  1185.   #--------------------------------------------------------------------------
  1186.   # ○ 弱点属性描画
  1187.   #     dx, dy : 描画先 X, Y
  1188.   #     rows   : 行数
  1189.   #--------------------------------------------------------------------------
  1190.   def draw_weak_element(dx, dy, rows = 1)
  1191.     change_color(system_color)
  1192.     draw_text(dx, dy, 80, line_height,
  1193.       KMS::EnemyGuide::PARAMETER_NAME[:weak_element])
  1194.  
  1195.     new_dy = dy + line_height * rows
  1196.     return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1197.  
  1198.     cols = (page_width - 88) / 24
  1199.  
  1200.     draw_icon_list(dx + 80, dy, rows, cols,
  1201.       KMS::EnemyGuide::CHECK_ELEMENT_LIST,
  1202.       Proc.new { |i| @enemy_object.element_rate(i) > 1.0 },
  1203.       Proc.new { |i| KMS::EnemyGuide::ELEMENT_ICON[i] },
  1204.       Proc.new { |i| i < $data_system.elements.size })
  1205.  
  1206.     new_dy
  1207.   end
  1208.   #--------------------------------------------------------------------------
  1209.   # ○ 耐性属性描画
  1210.   #     dx, dy : 描画先 X, Y
  1211.   #     rows   : 行数
  1212.   #--------------------------------------------------------------------------
  1213.   def draw_resist_element(dx, dy, rows = 1)
  1214.     change_color(system_color)
  1215.     draw_text(dx, dy, 80, line_height,
  1216.       KMS::EnemyGuide::PARAMETER_NAME[:resist_element])
  1217.  
  1218.     new_dy = dy + line_height * rows
  1219.     return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1220.  
  1221.     cols = (page_width - 88) / 24
  1222.  
  1223.     # 耐性属性
  1224.     draw_icon_list(dx + 80, dy, rows, cols,
  1225.       KMS::EnemyGuide::CHECK_ELEMENT_LIST,
  1226.       Proc.new { |i| @enemy_object.element_rate(i) < 1.0 },
  1227.       Proc.new { |i| KMS::EnemyGuide::ELEMENT_ICON[i] },
  1228.       Proc.new { |i| i < $data_system.elements.size })
  1229.  
  1230.     new_dy
  1231.   end
  1232.   #--------------------------------------------------------------------------
  1233.   # ○ 弱点ステート描画
  1234.   #     dx, dy : 描画先 X, Y
  1235.   #     rows   : 行数
  1236.   #--------------------------------------------------------------------------
  1237.   def draw_weak_state(dx, dy, rows = 1)
  1238.     change_color(system_color)
  1239.     draw_text(dx, dy, 80, line_height,
  1240.       KMS::EnemyGuide::PARAMETER_NAME[:weak_state])
  1241.  
  1242.     new_dy = dy + line_height * rows
  1243.     return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1244.  
  1245.     cols = (page_width - 88) / 24
  1246.  
  1247.     draw_icon_list(dx + 80, dy, rows, cols,
  1248.       KMS::EnemyGuide::CHECK_STATE_LIST,
  1249.       Proc.new { |i| @enemy_object.state_rate(i) > 1.0 },
  1250.       Proc.new { |i| $data_states[i].icon_index },
  1251.       Proc.new { |i| i < $data_states.size })
  1252.  
  1253.     new_dy
  1254.   end
  1255.   #--------------------------------------------------------------------------
  1256.   # ○ 耐性ステート描画
  1257.   #     dx, dy : 描画先 X, Y
  1258.   #     rows   : 行数
  1259.   #--------------------------------------------------------------------------
  1260.   def draw_resist_state(dx, dy, rows = 1)
  1261.     change_color(system_color)
  1262.     draw_text(dx, dy, 80, line_height,
  1263.       KMS::EnemyGuide::PARAMETER_NAME[:resist_state])
  1264.  
  1265.     new_dy = dy + line_height * rows
  1266.     return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1267.  
  1268.     cols = (page_width - 88) / 24
  1269.  
  1270.     draw_icon_list(dx + 80, dy, rows, cols,
  1271.       KMS::EnemyGuide::CHECK_STATE_LIST,
  1272. #~       Proc.new { |i| @enemy_object.state_resist?(i) ||
  1273. #~                      @enemy_object.state_rate(i) == 0.0 },
  1274.       Proc.new { |i| @enemy_object.state_resist?(i) },
  1275.       Proc.new { |i| $data_states[i].icon_index },
  1276.       Proc.new { |i| i < $data_states.size })
  1277.  
  1278.     new_dy
  1279.   end
  1280.   #--------------------------------------------------------------------------
  1281.   # ○ EXP, Gold 描画
  1282.   #     dx, dy : 描画先 X, Y
  1283.   #--------------------------------------------------------------------------
  1284.   def draw_prize(dx, dy)
  1285.     param = {}
  1286.     if KMS::Commands.enemy_defeated?(enemy.id)
  1287.       param[:exp]  = enemy.exp
  1288.       param[:gold] = enemy.gold
  1289.       param[:ap]   = enemy.ap if $kms_imported["EquipLearnSkill"]
  1290.     else
  1291.       param[:exp] = param[:gold] = param[:ap] =
  1292.         KMS::EnemyGuide::UNDEFEATED_PARAMETER
  1293.     end
  1294.  
  1295.     dw = page_width / 2
  1296.     change_color(system_color)
  1297.     draw_text(dx,      dy, 80, line_height,
  1298.       KMS::EnemyGuide::PARAMETER_NAME[:exp])
  1299.     draw_text(dx + dw, dy, 80, line_height, Vocab.currency_unit)
  1300.     if $kms_imported["EquipLearnSkill"]
  1301.       draw_text(dx, dy + line_height, 80, line_height, Vocab.ap)
  1302.     end
  1303.  
  1304.     # EXP, Gold
  1305.     dx += 76
  1306.     change_color(normal_color)
  1307.     draw_text(dx,      dy, 52, line_height, param[:exp], 2)
  1308.     draw_text(dx + dw, dy, 52, line_height, param[:gold], 2)
  1309.     if $kms_imported["EquipLearnSkill"]
  1310.       draw_text(dx, dy + line_height, 52, line_height, param[:ap], 2)
  1311.     end
  1312.  
  1313.     return dy + line_height * 2
  1314.   end
  1315.   #--------------------------------------------------------------------------
  1316.   # ○ ドロップアイテム描画
  1317.   #     dx, dy : 描画先 X, Y
  1318.   #     rows   : 行数
  1319.   #--------------------------------------------------------------------------
  1320.   def draw_drop_item(dx, dy, rows)
  1321.     return dy unless KMS::EnemyGuide::SHOW_DROP_ITEM
  1322.  
  1323.     dw = page_width / 2
  1324.     change_color(system_color)
  1325.     draw_text(dx, dy, 128, line_height,
  1326.       KMS::EnemyGuide::PARAMETER_NAME[:treasure], 1)
  1327.     draw_text(dx + dw, dy, 128, line_height,
  1328.       KMS::EnemyGuide::PARAMETER_NAME[:drop_prob], 2)
  1329.  
  1330.     new_dy = dy + line_height * rows
  1331.     return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1332.  
  1333.     # リスト作成
  1334.     drop_items = enemy.drop_items.dup
  1335.     if $kms_imported["ExtraDropItem"]
  1336.       drop_items += enemy.extra_drop_items
  1337.     end
  1338.  
  1339.     dy += line_height
  1340.     count = 0
  1341.     drop_items.each_with_index do |item, i|
  1342.       # アイテム名描画
  1343.       case item.kind
  1344.       when 1; list = $data_items
  1345.       when 2; list = $data_weapons
  1346.       when 3; list = $data_armors
  1347.       else;   next
  1348.       end
  1349.       drop_item = list[item.data_id]
  1350.  
  1351.       if KMS::Commands.enemy_item_dropped?(enemy.id, i)
  1352.         draw_item_name(drop_item, dx, dy)
  1353.       else
  1354.         draw_masked_item_name(drop_item, dx, dy)
  1355.       end
  1356.  
  1357.       # ドロップ率描画
  1358.       if $kms_imported["ExtraDropItem"] && item.drop_prob > 0
  1359.         text = sprintf("%d%%", item.drop_prob)
  1360.       else
  1361.         text = "1/#{item.denominator}"
  1362.       end
  1363.       draw_text(dx + dw, dy, 128, line_height, text, 2)
  1364.       dy += line_height
  1365.       count += 1
  1366.       break if count == rows
  1367.     end
  1368.  
  1369.     return new_dy
  1370.   end
  1371.   #--------------------------------------------------------------------------
  1372.   # ○ アイテム名をマスクして描画
  1373.   #     item    : アイテム (スキル、武器、防具でも可)
  1374.   #     x       : 描画先 X 座標
  1375.   #     y       : 描画先 Y 座標
  1376.   #     enabled : 有効フラグ。false のとき半透明で描画
  1377.   #--------------------------------------------------------------------------
  1378.   def draw_masked_item_name(item, x, y, enabled = true)
  1379.     return if item == nil
  1380.  
  1381.     draw_icon(item.icon_index, x, y, enabled)
  1382.     change_color(normal_color, enabled)
  1383.     mask = KMS::EnemyGuide::UNDROPPED_ITEM_NAME
  1384.     text = KMS.mask_string(item.name, mask)
  1385.     draw_text(x + 24, y, 172, line_height, text)
  1386.   end
  1387.   #--------------------------------------------------------------------------
  1388.   # ○ 盗めるオブジェクト描画
  1389.   #     dx, dy : 描画先 X, Y
  1390.   #     rows   : 行数
  1391.   #--------------------------------------------------------------------------
  1392.   def draw_steal_object(dx, dy, rows)
  1393.     return dy unless $kms_imported["Steal"] && KMS::EnemyGuide::SHOW_STEAL_OBJ
  1394.  
  1395.     new_dy = dy + line_height * rows
  1396.     dw = page_width / 2
  1397.     change_color(system_color)
  1398.     draw_text(dx,      dy, 128, line_height,
  1399.       KMS::EnemyGuide::PARAMETER_NAME[:steal_obj], 1)
  1400.     draw_text(dx + dw, dy, 128, line_height,
  1401.       KMS::EnemyGuide::PARAMETER_NAME[:steal_prob], 2)
  1402.  
  1403.     return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1404.  
  1405.     # リスト作成
  1406.     steal_objects = enemy.steal_objects.clone
  1407.     if steal_objects.size >= rows
  1408.       steal_objects = steal_objects[0...(rows - 1)]
  1409.     end
  1410.  
  1411.     dy += line_height
  1412.     steal_objects.each_with_index do |obj, i|
  1413.       if obj.kind == 4
  1414.         # Gold
  1415.         if KMS::Commands.enemy_object_stolen?(enemy.id, i)
  1416.           text = sprintf("%d%s", obj.gold, Vocab.gold)
  1417.         else
  1418.           mask = KMS::EnemyGuide::UNDROPPED_ITEM_NAME
  1419.           text = KMS.mask_string("aaa", mask)
  1420.         end
  1421.         draw_text(dx + 24, dy, dw, line_height, text)
  1422.       else
  1423.         # Item
  1424.         case obj.kind
  1425.         when 1
  1426.           item = $data_items[obj.item_id]
  1427.         when 2
  1428.           item = $data_weapons[obj.weapon_id]
  1429.         when 3
  1430.           item = $data_armors[obj.armor_id]
  1431.         end
  1432.         if KMS::Commands.enemy_object_stolen?(enemy.id, i)
  1433.           draw_item_name(item, dx, dy)
  1434.         else
  1435.           draw_masked_item_name(item, dx, dy)
  1436.         end
  1437.       end
  1438.       # 成功率描画
  1439.       if obj.success_prob > 0
  1440.         text = sprintf("%d%%", obj.success_prob)
  1441.       else
  1442.         text = "1/#{obj.denominator}"
  1443.       end
  1444.       draw_text(dx + dw, dy, 128, line_height, text, 2)
  1445.       dy += line_height
  1446.     end
  1447.  
  1448.     return new_dy
  1449.   end
  1450.   #--------------------------------------------------------------------------
  1451.   # ○ 説明文描画
  1452.   #     dx, dy : 描画先 X, Y
  1453.   #--------------------------------------------------------------------------
  1454.   def draw_description(dx, dy)
  1455.     return unless KMS::Commands.enemy_defeated?(enemy.id)
  1456.  
  1457.     dx += 4
  1458.     enemy.enemy_guide_description.each_line do |line|
  1459.       draw_text(dx, dy, page_width, line_height, line.chomp)
  1460.       dy += line_height
  1461.     end
  1462.   end
  1463. end
  1464.  
  1465. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1466.  
  1467. #==============================================================================
  1468. # ■ Scene_Menu
  1469. #==============================================================================
  1470.  
  1471. if KMS::EnemyGuide::USE_MENU_ENEMY_GUIDE_COMMAND
  1472. class Scene_Menu < Scene_MenuBase
  1473.   #--------------------------------------------------------------------------
  1474.   # ● コマンドウィンドウの作成
  1475.   #--------------------------------------------------------------------------
  1476.   alias create_command_window_KMS_EnemyGuide create_command_window
  1477.   def create_command_window
  1478.     create_command_window_KMS_EnemyGuide
  1479.  
  1480.     @command_window.set_handler(:enemy_guide, method(:command_enemy_guide))
  1481.   end
  1482.   #--------------------------------------------------------------------------
  1483.   # ○ コマンド[モンスター図鑑]
  1484.   #--------------------------------------------------------------------------
  1485.   def command_enemy_guide
  1486.     SceneManager.call(Scene_EnemyGuide)
  1487.   end
  1488. end
  1489. end  # if KMS::EnemyGuide::USE_MENU_ENEMY_GUIDE_COMMAND
  1490.  
  1491. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1492.  
  1493. #==============================================================================
  1494. # □ Scene_EnemyGuide
  1495. #------------------------------------------------------------------------------
  1496. #   モンスター図鑑画面の処理を行うクラスです。
  1497. #==============================================================================
  1498.  
  1499. class Scene_EnemyGuide < Scene_MenuBase
  1500.   #--------------------------------------------------------------------------
  1501.   # ● オブジェクト初期化
  1502.   #     menu_index  : コマンドのカーソル初期位置
  1503.   #     host_scene  : 呼び出し元 (0..メニュー  1..マップ)
  1504.   #--------------------------------------------------------------------------
  1505.   def initialize(menu_index = 0)
  1506.     @menu_index = menu_index
  1507.   end
  1508.   #--------------------------------------------------------------------------
  1509.   # ● 開始処理
  1510.   #--------------------------------------------------------------------------
  1511.   def start
  1512.     super
  1513.     create_background_sprite
  1514.     create_windows
  1515.   end
  1516.   #--------------------------------------------------------------------------
  1517.   # ○ 背景スプライトの作成
  1518.   #--------------------------------------------------------------------------
  1519.   def create_background_sprite
  1520.     return unless KMS::EnemyGuide::USE_BACKGROUND_IMAGE
  1521.  
  1522.     @back_sprite = Sprite.new(@viewport)
  1523.     begin
  1524.       @back_sprite.bitmap = Cache.system(KMS::EnemyGuide::BACKGROUND_FILENAME)
  1525.     rescue
  1526.       @back_sprite.bitmap = Bitmap.new(32, 32)
  1527.     end
  1528.   end
  1529.   #--------------------------------------------------------------------------
  1530.   # ○ ウィンドウの作成
  1531.   #--------------------------------------------------------------------------
  1532.   def create_windows
  1533.     @top_window    = Window_EnemyGuideTop.new
  1534.     @enemy_window  = Window_EnemyGuideList.new
  1535.     @status_window = Window_EnemyGuideStatus.new
  1536.     @top_window.viewport    = @viewport
  1537.     @enemy_window.viewport  = @viewport
  1538.     @status_window.viewport = @viewport
  1539.     @status_window.enemy    = @enemy_window.item
  1540.  
  1541.     @enemy_window.set_handler(:cancel, method(:return_scene))
  1542.     @enemy_window.activate
  1543.   end
  1544.   #--------------------------------------------------------------------------
  1545.   # ● 終了処理
  1546.   #--------------------------------------------------------------------------
  1547.   def terminate
  1548.     Graphics.freeze
  1549.     dispose_background_sprite
  1550.     super
  1551.   end
  1552.   #--------------------------------------------------------------------------
  1553.   # ○ 背景スプライトの解放
  1554.   #--------------------------------------------------------------------------
  1555.   def dispose_background_sprite
  1556.     if @back_sprite != nil
  1557.       @back_sprite.bitmap.dispose
  1558.       @back_sprite.dispose
  1559.     end
  1560.   end
  1561.   #--------------------------------------------------------------------------
  1562.   # ● フレーム更新
  1563.   #--------------------------------------------------------------------------
  1564.   def update
  1565.     super
  1566.     update_background_sprite
  1567.     update_enemy_selection
  1568.   end
  1569.   #--------------------------------------------------------------------------
  1570.   # ○ 背景スプライトの更新
  1571.   #--------------------------------------------------------------------------
  1572.   def update_background_sprite
  1573.     return if @back_sprite == nil
  1574.  
  1575.     @back_sprite.update
  1576.   end
  1577.   #--------------------------------------------------------------------------
  1578.   # ○ エネミー選択の更新
  1579.   #--------------------------------------------------------------------------
  1580.   def update_enemy_selection
  1581.     if @last_index != @enemy_window.index
  1582.       @status_window.enemy = @enemy_window.item
  1583.       @last_index = @enemy_window.index
  1584.     end
  1585.  
  1586.     if Input.trigger?(Input::A) || Input.trigger?(Input::C)
  1587.       # スプライト表示切替
  1588.       Sound.play_ok
  1589.       @status_window.switch_sprite
  1590.     elsif Input.trigger?(Input::LEFT)
  1591.       # 左ページ
  1592.       Sound.play_cursor
  1593.       @status_window.shift_info_type(-1)
  1594.     elsif Input.trigger?(Input::RIGHT)
  1595.       # 右ページ
  1596.       Sound.play_cursor
  1597.       @status_window.shift_info_type(1)
  1598.     end
  1599.   end
  1600. end

最佳答案

查看完整内容

$data_states ||= load_data("Data/States.rvdata2") $data_system ||= load_data("Data/System.rvdata2") #============================================================================== # ★ カスタマイズ項目 - Customize ★ #============================================================================== module KMS module EnemyGuide # ◆ 図鑑に背景画像を使用する # true : 背景画像をウィンドウ代 ...

Lv5.捕梦者

梦石
0
星屑
33168
在线时间
10488 小时
注册时间
2009-3-15
帖子
4756
2
发表于 2019-8-30 21:17:38 | 只看该作者
造小梦 发表于 2019-8-31 14:21
就是遭遇过一次,无论打没打过


RUBY 代码复制
  1. $data_states ||= load_data("Data/States.rvdata2")
  2. $data_system ||= load_data("Data/System.rvdata2")
  3.  
  4. #==============================================================================
  5. # ★ カスタマイズ項目 - Customize ★
  6. #==============================================================================
  7.  
  8. module KMS
  9. module EnemyGuide
  10.   # ◆ 図鑑に背景画像を使用する
  11.   #   true  : 背景画像をウィンドウ代わりに使用。
  12.   #   false : 通常のウィンドウを使用。
  13.   USE_BACKGROUND_IMAGE = false
  14.  
  15.   # ◆ 背景画像ファイル名
  16.   #  "Graphics/System/" から読み込む。
  17.   BACKGROUND_FILENAME  = "EnemyGuideBack"
  18.  
  19.   # ◆ 完成度表示のインターバル [フレーム]
  20.   INFO_INTERVAL = 180
  21.  
  22.   # ◆ 名前の前に通し番号を表示
  23.   #   true  : 001: スライム
  24.   #   false : スライム
  25.   SHOW_SERIAL_NUMBER = false
  26.  
  27.   # ◆ 通し番号をリストの並び順にする
  28.   #  true  : ID を無視して表示順の番号を付ける。
  29.   #  false : 通し番号として ID を使用。
  30.   SERIAL_NUM_FOLLOW  = true
  31.  
  32.   # ◆ 通し番号の書式
  33.   #  ヘルプの sprintf フォーマットを参照。
  34.   SERIAL_NUM_FORMAT  = "%03d: "
  35.  
  36.   # ◆ 未遭遇の敵の名前
  37.   #  1文字だけ指定すると、敵の名前と同じ文字数に拡張されます。
  38.   UNKNOWN_ENEMY_NAME = "?"
  39.  
  40.   # ◆ 未遭遇の敵のデータ表示
  41.   UNENCOUNTERED_DATA = "- 无数据 -"
  42.  
  43.   # ◆ 図鑑のパラメータ名
  44.   PARAMETER_NAME = {
  45.     :defeat_count   => "击败数",
  46.     :weak_element   => "弱点属性",
  47.     :resist_element => "耐性属性",
  48.     :weak_state     => "弱点异常",
  49.     :resist_state   => "无效异常",
  50.     :exp            => "经验值",
  51.     :treasure       => "道具",
  52.     :drop_prob      => "掉落率",
  53.   }  # ← これは消さないこと!
  54.  
  55.   # ◆ 未撃破の敵のパラメータ表示
  56.   UNDEFEATED_PARAMETER = "???"
  57.  
  58.   # ◆ 未ドロップのアイテム名
  59.   #  1文字だけ指定すると、アイテム名と同じ文字数に拡張されます。
  60.   UNDROPPED_ITEM_NAME  = "?"
  61.  
  62.   # ◆ 属性耐性を調べる範囲
  63.   #  耐性を調べる属性の ID を配列に格納。
  64.   #  .. や ... を使用した範囲指定も可能。
  65.   ELEMENT_RANGE = [3, 4, 5, 6, 7, 8, 9,10,11]#$data_system.elements.size]
  66.  
  67.   # ◆ 属性のアイコン
  68.   #  各属性に対応するアイコンの番号を指定。
  69.   #  配列の添字が属性 ID に対応。
  70.   ELEMENT_ICON = [nil,                       # ID:0 はダミー
  71.     nil, nil, 96, 97, 98, 99, 100, 101, 102, 103, 104, # ID: 3 ~ 11
  72.     nil, nil, nil, 105, 129, # ID: 12 ~ 16
  73.   ]  # ← これは消さないこと!
  74.  
  75.   # ◆ ステート耐性を調べる範囲
  76.   #  耐性を調べるステートの ID を配列に格納。
  77.   #  記述方法は ELEMENT_RANGE と同様。
  78.   STATE_RANGE = [32,34,37,42,114...129]
  79.  
  80.   # ◆ 弱点属性の行数
  81.   ELEMENT_ROWS_WEAK = 2
  82.  
  83.   # ◆ 耐性属性の行数
  84.   ELEMENT_ROWS_RESIST = 2
  85.  
  86.   # ◆ 弱点ステートの行数
  87.   STATE_ROWS_WEAK = 1
  88.  
  89.   # ◆ 無効ステートの行数
  90.   STATE_ROWS_RESIST = 2
  91.  
  92.   # ◆ ドロップアイテムを表示
  93.   #   true  : 表示する
  94.   #   false : 表示しない
  95.   SHOW_DROP_ITEM = true
  96.  
  97.   # ◆ 図鑑から隠す敵
  98.   #  図鑑から隠したい敵の ID を配列に格納。
  99.   #  ID と範囲 (1..10 など) のどちらでも可。
  100.   # <例> HIDDEN_ENEMIES = [2, 4, 8, 16..32]
  101.   HIDDEN_ENEMIES = [1,81,84,97,121,66,67,41,17,75,131,132,109..111]
  102.  
  103.   # ◆ 敵の並び順
  104.   #  表示する敵の ID を、表示したい順に配列に格納。
  105.   #  .. や ... を使用した範囲指定も可能。
  106.   #  指定しなかった敵、または HIDDEN_ENEMIES に指定した敵は表示しない。
  107.   #  (この機能を使用しない場合は nil)
  108.   ENEMY_ORDER = nil
  109.   # ENEMY_ORDER = [1..5, 8..13, 6, 7, 14, 15]
  110.   #  ↑使用例
  111.  
  112.   # ◆ 変身前の敵も撃破
  113.   #   true  : 変身前の敵も撃破したと見なす。
  114.   #   false : 変身前の敵は未撃破 (遭遇のみ) と見なす。
  115.   ORIGINAL_DEFEAT = true
  116.  
  117.   # ◆ メニュー画面に「モンスター図鑑」コマンドを追加する
  118.   #  追加する場所は「セーブ」の上 (独自コマンド部分) です。
  119.   USE_MENU_ENEMY_GUIDE_COMMAND = false
  120.  
  121.   # ◆ メニュー画面の「モンスター図鑑」コマンドの名称
  122.   VOCAB_MENU_ENEMY_GUIDE       = "怪物图鉴"
  123.  
  124.   # ◆ VX 互換モード
  125.   #   true  : ウィンドウの配置が VX 互換になる。背景画像を流用できる
  126.   #   false : VXAce 仕様のレイアウトになる。VX の背景画像を使用するとズレる
  127.   VX_COMPATIBLE = false
  128. end
  129. end
  130.  
  131. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  132.  
  133. $kms_imported ||= {}
  134. $kms_imported["EnemyGuide"] = true
  135.  
  136. module KMS
  137.   module_function
  138.   #--------------------------------------------------------------------------
  139.   # ○ 文字列をマスク
  140.   #     str  : マスク対象の文字列
  141.   #     mask : マスク文字列
  142.   #--------------------------------------------------------------------------
  143.   def mask_string(str, mask)
  144.     text = mask
  145.     if mask.scan(/./).size == 1
  146.       text = mask * str.scan(/./).size
  147.     end
  148.     return text
  149.   end
  150. end
  151.  
  152. module KMS::EnemyGuide
  153.   # ◆ 盗めるものを表示 (一時退避)
  154.   #  ≪盗む≫ 導入時のみ。
  155.   SHOW_STEAL_OBJ = false
  156.  
  157.   # ◆ 図鑑のパラメータ名 (一時退避)
  158.   PARAMETER_NAME[:steal_obj]  = "盗めるもの"
  159.   PARAMETER_NAME[:steal_prob] = "成功率"
  160.  
  161.   module Regexp
  162.     module Enemy
  163.       # 図鑑説明開始
  164.       BEGIN_GUIDE_DESCRIPTION = /<(?:GUIDE_DESCRIPTION|図鑑説明)>/i
  165.       # 図鑑説明終了
  166.       END_GUIDE_DESCRIPTION = /<\/(?:GUIDE_DESCRIPTION|図鑑説明)>/i
  167.     end
  168.   end
  169.  
  170.   #--------------------------------------------------------------------------
  171.   # ○ Range と Integer の配列を Integer の配列に変換 (重複要素は排除)
  172.   #--------------------------------------------------------------------------
  173.   def self.convert_integer_array(array, type = nil)
  174.     result = array.inject([]) do |ret, i|
  175.       case i
  176.       when Range;   ret | i.to_a
  177.       when Integer; ret | [i]
  178.       else;         ret
  179.       end
  180.     end
  181.  
  182.     case type
  183.     when :element
  184.       result.delete_if { |x| x >= $data_system.elements.size }
  185.     when :state
  186.       result.delete_if do |x|
  187.         x >= $data_states.size ||
  188.         $data_states[x].priority == 0
  189.       end
  190.     end
  191.  
  192.     result
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ○ 敵を表示するか
  196.   #--------------------------------------------------------------------------
  197.   def self.enemy_show?(enemy_id)
  198.     if HIDDEN_ENEMY_LIST.include?(enemy_id)
  199.       false
  200.     elsif ENEMY_ORDER_ID != nil
  201.       false unless ENEMY_ORDER_ID.include?(enemy_id)
  202.     else
  203.       true
  204.     end
  205.   end
  206.  
  207.   # 非表示モンスターリスト
  208.   HIDDEN_ENEMY_LIST = convert_integer_array(HIDDEN_ENEMIES)
  209.   # 表示順の敵 ID
  210.   ENEMY_ORDER_ID = (ENEMY_ORDER == nil ? nil :
  211.     convert_integer_array(ENEMY_ORDER))
  212.   # チェックする属性リスト
  213.   CHECK_ELEMENT_LIST = convert_integer_array(ELEMENT_RANGE, :element)
  214.   # チェックするステートリスト
  215.   CHECK_STATE_LIST   = convert_integer_array(STATE_RANGE, :state)
  216.  
  217.   # VX 互換ウィンドウのパディング
  218.   VX_WINDOW_PADDING = 16
  219. end
  220.  
  221. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  222.  
  223. #==============================================================================
  224. # □ KMS::Commands
  225. #==============================================================================
  226.  
  227. module KMS
  228. module Commands
  229.   module_function
  230.   #--------------------------------------------------------------------------
  231.   # ○ 遭遇状態取得
  232.   #     enemy_id : 敵 ID
  233.   #--------------------------------------------------------------------------
  234.   def enemy_encountered?(enemy_id)
  235.     $game_system.enemy_encountered[enemy_id]
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ○ 撃破状態取得
  239.   #     enemy_id : 敵 ID
  240.   #--------------------------------------------------------------------------
  241.   def enemy_defeated?(enemy_id)
  242.     $game_system.enemy_defeated[enemy_id]
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ○ アイテムドロップ状態取得
  246.   #     enemy_id   : 敵 ID
  247.   #     item_index : ドロップアイテム番号
  248.   #--------------------------------------------------------------------------
  249.   def enemy_item_dropped?(enemy_id, item_index)
  250.     return false if $game_system.enemy_item_dropped[enemy_id] == nil
  251.  
  252.     result = $game_system.enemy_item_dropped[enemy_id] & (1 << item_index)
  253.     result != 0
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ○ 盗み成功済み状態取得
  257.   #     enemy_id  : 敵 ID
  258.   #     obj_index : オブジェクト番号
  259.   #--------------------------------------------------------------------------
  260.   def enemy_object_stolen?(enemy_id, obj_index)
  261.     return false if $game_system.enemy_object_stolen[enemy_id] == nil
  262.  
  263.     result = $game_system.enemy_object_stolen[enemy_id] & (1 << obj_index)
  264.     result != 0
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ○ 遭遇状態設定
  268.   #     enemy_id : 敵 ID
  269.   #     enabled  : true..遭遇済み  false..未遭遇
  270.   #--------------------------------------------------------------------------
  271.   def set_enemy_encountered(enemy_id, enabled = true)
  272.     $game_system.enemy_encountered[enemy_id] = enabled
  273.     p enabled
  274.     unless enabled
  275.       # 未遭遇なら撃破済みフラグも解除
  276.       set_enemy_defeated(enemy_id)
  277.       #set_enemy_defeated(enemy_id, false)
  278.     end
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ○ 撃破状態設定
  282.   #     enemy_id : 敵 ID
  283.   #     enabled  : true..撃破済み  false..未撃破
  284.   #--------------------------------------------------------------------------
  285.   def set_enemy_defeated(enemy_id, enabled = true)
  286.     $game_system.enemy_defeated[enemy_id] = enabled
  287.     if enabled
  288.       # 撃破済みなら遭遇フラグもセット
  289.       set_enemy_encountered(enemy_id)
  290.     end
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ○ アイテムドロップ状態設定
  294.   #     enemy_id   : 敵 ID
  295.   #     item_index : ドロップアイテム番号
  296.   #     enabled    : true..ドロップ済み  false..未ドロップ
  297.   #--------------------------------------------------------------------------
  298.   def set_enemy_item_dropped(enemy_id, item_index, enabled = true)
  299.     $game_system.enemy_item_dropped[enemy_id] ||= 0
  300.     if enabled
  301.       $game_system.enemy_item_dropped[enemy_id] |= (1 << item_index)
  302.     else
  303.       $game_system.enemy_item_dropped[enemy_id] &= ~(1 << item_index)
  304.     end
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ○ 盗み成功状態設定
  308.   #     enemy_id  : 敵 ID
  309.   #     obj_index : オブジェクト番号
  310.   #     enabled   : true..成功済み  false..未成功
  311.   #--------------------------------------------------------------------------
  312.   def set_enemy_object_stolen(enemy_id, obj_index, enabled = true)
  313.     $game_system.enemy_object_stolen[enemy_id] ||= 0
  314.     if enabled
  315.       $game_system.enemy_object_stolen[enemy_id] |= (1 << obj_index)
  316.     else
  317.       $game_system.enemy_object_stolen[enemy_id] &= ~(1 << obj_index)
  318.     end
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ○ 図鑑リセット
  322.   #--------------------------------------------------------------------------
  323.   def reset_enemy_guide
  324.     $game_system.enemy_encountered   = []
  325.     $game_system.enemy_defeated      = []
  326.     $game_system.enemy_item_dropped  = []
  327.     $game_system.enemy_object_stolen = []
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # ○ 図鑑完成
  331.   #--------------------------------------------------------------------------
  332.   def complete_enemy_guide
  333.     (1...$data_enemies.size).each do |i|
  334.       set_enemy_encountered(i)
  335.       set_enemy_defeated(i)
  336.  
  337.       enemy = $data_enemies[i]
  338.  
  339.       items = enemy.drop_items.dup
  340.       if $kms_imported["ExtraDropItem"]
  341.         items += enemy.extra_drop_items
  342.       end
  343.       items.each_index { |j| set_enemy_item_dropped(i, j) }
  344.  
  345.       if $kms_imported["Steal"]
  346.         objs = enemy.steal_objects
  347.         objs.each_index { |j| set_enemy_object_stolen(i, j) }
  348.       end
  349.     end
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ○ 図鑑に含めるか
  353.   #     enemy_id : 敵 ID
  354.   #--------------------------------------------------------------------------
  355.   def enemy_guide_include?(enemy_id)
  356.     return false unless KMS::EnemyGuide.enemy_show?(enemy_id)
  357.  
  358.     enemy = $data_enemies[enemy_id]
  359.     enemy != nil && enemy.name != ""
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ○ 存在する敵の種類数取得
  363.   #     variable_id : 取得した値を代入する変数の ID
  364.   #--------------------------------------------------------------------------
  365.   def get_all_enemies_number(variable_id = 0)
  366.     total = (1...$data_enemies.size).inject(0) do |n, i|
  367.       enemy_guide_include?(i) ? n + 1 : n
  368.     end
  369.  
  370.     if variable_id > 0
  371.       $game_variables[variable_id] = total
  372.       $game_map.need_refresh       = true
  373.     end
  374.  
  375.     total
  376.   end
  377.   #--------------------------------------------------------------------------
  378.   # ○ 遭遇した敵の種類数取得
  379.   #     variable_id : 取得した値を代入する変数の ID
  380.   #--------------------------------------------------------------------------
  381.   def get_encountered_enemies_number(variable_id = 0)
  382.     total = (1...$data_enemies.size).inject(0) do |n, i|
  383.       enemy_guide_include?(i) && $game_system.enemy_encountered[i] ? n + 1 : n
  384.     end
  385.  
  386.     if variable_id > 0
  387.       $game_variables[variable_id] = total
  388.       $game_map.need_refresh       = true
  389.     end
  390.  
  391.     total
  392.   end
  393.   #--------------------------------------------------------------------------
  394.   # ○ 撃破した敵の種類数取得
  395.   #     variable_id : 取得した値を代入する変数の ID
  396.   #--------------------------------------------------------------------------
  397.   def get_defeated_enemies_number(variable_id = 0)
  398.     total = (1...$data_enemies.size).inject(0) do |n, i|
  399.       if enemy_guide_include?(i) &&
  400.           $game_system.enemy_encountered[i] &&
  401.           $game_system.enemy_defeated[i]
  402.         n + 1
  403.       else
  404.         n
  405.       end
  406.     end
  407.  
  408.     if variable_id > 0
  409.       $game_variables[variable_id] = total
  410.       $game_map.need_refresh       = true
  411.     end
  412.  
  413.     total
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ○ モンスター図鑑完成度の取得
  417.   #     variable_id : 取得した値を代入する変数の ID
  418.   #--------------------------------------------------------------------------
  419.   def get_enemy_guide_completion(variable_id = 0)
  420.     num   = get_all_enemies_number
  421.     value = (num > 0 ? (get_defeated_enemies_number * 100 / num) : 0)
  422.     #value = (num > 0 ? (get_encountered_enemies_number * 100 / num) : 0)
  423.     if variable_id > 0
  424.       $game_variables[variable_id] = value
  425.       $game_map.need_refresh       = true
  426.     end
  427.     value
  428.   end
  429. end  # module Commands
  430. end  # module KMS
  431.  
  432. class Game_Interpreter
  433.   include KMS::Commands
  434.  
  435.   #--------------------------------------------------------------------------
  436.   # ○ モンスター図鑑呼び出し
  437.   #--------------------------------------------------------------------------
  438.   def call_enemy_guide
  439.     command_call_enemy_guide
  440.   end
  441. end
  442.  
  443. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  444.  
  445. #==============================================================================
  446. # ■ Vocab
  447. #==============================================================================
  448.  
  449. module Vocab
  450.   # モンスター図鑑
  451.   def self.enemy_guide
  452.     KMS::EnemyGuide::VOCAB_MENU_ENEMY_GUIDE
  453.   end
  454. end
  455.  
  456. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  457.  
  458. #==============================================================================
  459. # ■ RPG::Enemy
  460. #==============================================================================
  461.  
  462. class RPG::Enemy
  463.   #--------------------------------------------------------------------------
  464.   # ○ モンスター図鑑のキャッシュ生成
  465.   #--------------------------------------------------------------------------
  466.   def create_enemy_guide_cache
  467.     @__enemy_guide_description = ""
  468.  
  469.     description_flag = false
  470.     self.note.each_line do |line|
  471.       case line
  472.       when KMS::EnemyGuide::Regexp::Enemy::BEGIN_GUIDE_DESCRIPTION
  473.         # 説明文開始
  474.         description_flag = true
  475.       when KMS::EnemyGuide::Regexp::Enemy::END_GUIDE_DESCRIPTION
  476.         # 説明文終了
  477.         description_flag = false
  478.       else
  479.         if description_flag
  480.           @__enemy_guide_description += line
  481.         end
  482.       end
  483.     end
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # ○ 図鑑説明文
  487.   #--------------------------------------------------------------------------
  488.   def enemy_guide_description
  489.     create_enemy_guide_cache if @__enemy_guide_description == nil
  490.     @__enemy_guide_description
  491.   end
  492. end
  493.  
  494. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  495.  
  496. #==============================================================================
  497. # ■ Game_System
  498. #==============================================================================
  499.  
  500. class Game_System
  501.   #--------------------------------------------------------------------------
  502.   # ● 公開インスタンス変数
  503.   #--------------------------------------------------------------------------
  504.   attr_writer   :enemy_encountered        # 遭遇済みフラグ
  505.   attr_writer   :enemy_defeated           # 撃破済みフラグ
  506.   attr_writer   :enemy_item_dropped       # アイテムドロップ済みフラグ
  507.   attr_writer   :enemy_object_stolen      # 盗み成功済みフラグ
  508.   #--------------------------------------------------------------------------
  509.   # ○ 遭遇済みフラグ取得
  510.   #--------------------------------------------------------------------------
  511.   def enemy_encountered
  512.     @enemy_encountered ||= []
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ○ 撃破済みフラグ取得
  516.   #--------------------------------------------------------------------------
  517.   def enemy_defeated
  518.     @enemy_defeated ||= []
  519.   end
  520.   #--------------------------------------------------------------------------
  521.   # ○ アイテムドロップ済みフラグ取得
  522.   #--------------------------------------------------------------------------
  523.   def enemy_item_dropped
  524.     @enemy_item_dropped ||= []
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ○ 盗み成功済みフラグ取得
  528.   #--------------------------------------------------------------------------
  529.   def enemy_object_stolen
  530.     @enemy_object_stolen ||= []
  531.   end
  532. end
  533.  
  534. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  535.  
  536. #==============================================================================
  537. # ■ Game_Enemy
  538. #==============================================================================
  539.  
  540. class Game_Enemy < Game_Battler
  541.   #--------------------------------------------------------------------------
  542.   # ● オブジェクト初期化
  543.   #     index    : 敵グループ内インデックス
  544.   #     enemy_id : 敵キャラ ID
  545.   #--------------------------------------------------------------------------
  546.   alias initialize_KMS_EnemyGuide initialize
  547.   def initialize(index, enemy_id)
  548.     initialize_KMS_EnemyGuide(index, enemy_id)
  549.  
  550.     @original_ids = []  # 変身前の ID
  551.   end
  552.   #--------------------------------------------------------------------------
  553.   # ● コラプスの実行
  554.   #--------------------------------------------------------------------------
  555.   alias perform_collapse_effect_KMS_EnemyGuide perform_collapse_effect
  556.   def perform_collapse_effect
  557.     perform_collapse_effect_KMS_EnemyGuide
  558.  
  559.     # 撃破済みフラグをオン
  560.     KMS::Commands.set_enemy_defeated(enemy_id)
  561.  
  562.     # 変身前の敵も撃破済みにする
  563.     if KMS::EnemyGuide::ORIGINAL_DEFEAT
  564.       @original_ids.compact.each do |i|
  565.         KMS::Commands.set_enemy_defeated(i)
  566.       end
  567.     end
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● 変身
  571.   #     enemy_id : 変身先の敵キャラ ID
  572.   #--------------------------------------------------------------------------
  573.   alias transform_KMS_EnemyGuide transform
  574.   def transform(enemy_id)
  575.     # 変身前のIDを保存
  576.     @original_ids << @enemy_id
  577.  
  578.     transform_KMS_EnemyGuide(enemy_id)
  579.  
  580.     # 変身後の敵も遭遇済みにする
  581.     KMS::Commands.set_enemy_encountered(enemy_id)
  582.   end
  583.   #--------------------------------------------------------------------------
  584.   # ● 現れる
  585.   #--------------------------------------------------------------------------
  586.   def appear
  587.     # 遭遇済みフラグをオン
  588.     KMS::Commands.set_enemy_encountered(enemy_id)
  589.     super
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # ● ドロップアイテムの配列作成  ※ 上書き
  593.   #--------------------------------------------------------------------------
  594.   def make_drop_items
  595.     enemy.drop_items.inject([]) do |r, di|
  596.       if di.kind > 0 && rand * di.denominator < drop_item_rate
  597.         # ドロップ済みフラグをセット
  598.         KMS::Commands.set_enemy_item_dropped(enemy_id, enemy.drop_items.index(di))
  599.         r.push(item_object(di.kind, di.data_id))
  600.       else
  601.         r
  602.       end
  603.     end
  604.   end
  605. end
  606.  
  607. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  608.  
  609. #==============================================================================
  610. # ■ Game_Troop
  611. #==============================================================================
  612.  
  613. class Game_Troop < Game_Unit
  614.   #--------------------------------------------------------------------------
  615.   # ● セットアップ
  616.   #--------------------------------------------------------------------------
  617.   alias setup_KMS_EnemyGuide setup
  618.   def setup(troop_id)
  619.     setup_KMS_EnemyGuide(troop_id)
  620.  
  621.     # メンバーのうち、出現済みなら遭遇フラグを立てる
  622.     members.each do |enemy|
  623.       KMS::Commands.set_enemy_encountered(enemy.enemy_id) unless enemy.hidden?
  624.     end
  625.   end
  626. end
  627.  
  628. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  629.  
  630. #==============================================================================
  631. # ■ Game_Interpreter
  632. #==============================================================================
  633.  
  634. class Game_Interpreter
  635.   #--------------------------------------------------------------------------
  636.   # ○ モンスター図鑑を開く
  637.   #--------------------------------------------------------------------------
  638.   def command_call_enemy_guide
  639.     return if $game_party.in_battle
  640.     SceneManager.call(Scene_EnemyGuide)
  641.     Fiber.yield
  642.   end
  643. end
  644.  
  645. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  646.  
  647. #==============================================================================
  648. # ■ Window_MenuCommand
  649. #==============================================================================
  650.  
  651. if KMS::EnemyGuide::USE_MENU_ENEMY_GUIDE_COMMAND
  652. class Window_MenuCommand < Window_Command
  653.   #--------------------------------------------------------------------------
  654.   # ● 独自コマンドの追加用
  655.   #--------------------------------------------------------------------------
  656.   alias add_original_commands_KMS_EnemyGuide add_original_commands
  657.   def add_original_commands
  658.     add_original_commands_KMS_EnemyGuide
  659.  
  660.     add_command(Vocab::enemy_guide, :enemy_guide)
  661.   end
  662. end
  663. end  # if KMS::EnemyGuide::USE_MENU_ENEMY_GUIDE_COMMAND
  664.  
  665. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  666.  
  667. #==============================================================================
  668. # □ Window_EnemyGuideTop
  669. #------------------------------------------------------------------------------
  670. #   モンスター図鑑画面で、完成度を表示するウィンドウです。
  671. #==============================================================================
  672.  
  673. class Window_EnemyGuideTop < Window_Base
  674.   #--------------------------------------------------------------------------
  675.   # ● オブジェクト初期化
  676.   #--------------------------------------------------------------------------
  677.   def initialize
  678.     super(0, 0, window_width, window_height)
  679.     @duration = 0
  680.     @interval = KMS::EnemyGuide::INFO_INTERVAL
  681.     refresh
  682.  
  683.     if KMS::EnemyGuide::USE_BACKGROUND_IMAGE
  684.       self.opacity = 0
  685.     end
  686.  
  687.     # ウィンドウスキンのスクロールマーカーを削除
  688.     if windowskin != nil
  689.       bitmap = Bitmap.new(windowskin.width, windowskin.height)
  690.       bitmap.blt(0, 0, windowskin, windowskin.rect)
  691.       bitmap.clear_rect(80, 16, 32, 32)
  692.       self.windowskin = bitmap
  693.     end
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ● 破棄
  697.   #--------------------------------------------------------------------------
  698.   def dispose
  699.     self.windowskin.dispose if windowskin
  700.     super
  701.   end
  702.   #--------------------------------------------------------------------------
  703.   # ● ウィンドウ幅の取得
  704.   #--------------------------------------------------------------------------
  705.   def window_width
  706.     240
  707.   end
  708.   #--------------------------------------------------------------------------
  709.   # ● ウィンドウ高さの取得
  710.   #--------------------------------------------------------------------------
  711.   def window_height
  712.     fitting_height(1)
  713.   end
  714.   #--------------------------------------------------------------------------
  715.   # ● 標準パディングサイズの取得
  716.   #--------------------------------------------------------------------------
  717.   def standard_padding
  718.     KMS::EnemyGuide::VX_WINDOW_PADDING
  719.   end if KMS::EnemyGuide::VX_COMPATIBLE
  720.   #--------------------------------------------------------------------------
  721.   # ● ウィンドウ内容の高さを計算
  722.   #--------------------------------------------------------------------------
  723.   def contents_height
  724.     line_height * 4
  725.   end
  726.   #--------------------------------------------------------------------------
  727.   # ● リフレッシュ
  728.   #--------------------------------------------------------------------------
  729.   def refresh
  730.     contents.clear
  731.     total       = KMS::Commands.get_all_enemies_number
  732.     encountered = KMS::Commands.get_encountered_enemies_number
  733.     defeated    = KMS::Commands.get_defeated_enemies_number
  734.  
  735.     text = sprintf("已遭遇: %3d/%3d ",encountered, total)
  736.     draw_text(0, line_height * 0, contents_width, line_height, text, 1)
  737.     draw_text(0, line_height * 3, contents_width, line_height, text, 1)
  738.     text = sprintf("已击破: %3d/%3d", defeated, total)
  739.     draw_text(0, line_height * 1, contents_width, line_height, text, 1)
  740.     text = sprintf("完成度: %3d%%", defeated * 100 / total)
  741.     draw_text(0, line_height * 2, contents_width, line_height, text, 1)
  742.   end
  743.   #--------------------------------------------------------------------------
  744.   # ● フレーム更新
  745.   #--------------------------------------------------------------------------
  746.   def update
  747.     super
  748.     update_animation
  749.   end
  750.   #--------------------------------------------------------------------------
  751.   # ○ アニメーション更新
  752.   #--------------------------------------------------------------------------
  753.   def update_animation
  754.     @duration += 1
  755.     case @duration
  756.     when @interval...(@interval + line_height)
  757.       self.oy += 1
  758.     when (@interval + line_height)
  759.       @duration = 0
  760.       if self.oy >= line_height * 3
  761.         self.oy = 0
  762.       end
  763.     end
  764.   end
  765. end
  766.  
  767. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  768.  
  769. #==============================================================================
  770. # □ Window_EnemyGuideList
  771. #------------------------------------------------------------------------------
  772. #   モンスター図鑑画面で、モンスター一覧を表示するウィンドウです。
  773. #==============================================================================
  774.  
  775. class Window_EnemyGuideList < Window_Selectable
  776.   #--------------------------------------------------------------------------
  777.   # ● オブジェクト初期化
  778.   #--------------------------------------------------------------------------
  779.   def initialize
  780.     @data = []
  781.     super(0, line_height + standard_padding * 2, window_width, window_height)
  782.     self.index = 0
  783.     refresh
  784.  
  785.     if KMS::EnemyGuide::USE_BACKGROUND_IMAGE
  786.       self.opacity = 0
  787.       self.height -= (self.height - 32) % line_height
  788.     end
  789.   end
  790.   #--------------------------------------------------------------------------
  791.   # ● ウィンドウ幅の取得
  792.   #--------------------------------------------------------------------------
  793.   def window_width
  794.     240
  795.   end
  796.   #--------------------------------------------------------------------------
  797.   # ● ウィンドウ高さの取得
  798.   #--------------------------------------------------------------------------
  799.   def window_height
  800.     Graphics.height - (line_height + standard_padding * 2)
  801.   end
  802.   #--------------------------------------------------------------------------
  803.   # ● 標準パディングサイズの取得
  804.   #--------------------------------------------------------------------------
  805.   def standard_padding
  806.     KMS::EnemyGuide::VX_WINDOW_PADDING
  807.   end if KMS::EnemyGuide::VX_COMPATIBLE
  808.   #--------------------------------------------------------------------------
  809.   # ● 項目数の取得
  810.   #--------------------------------------------------------------------------
  811.   def item_max
  812.     @data.size
  813.   end
  814.   #--------------------------------------------------------------------------
  815.   # ○ 選択モンスターの取得
  816.   #--------------------------------------------------------------------------
  817.   def item
  818.     @data[self.index]
  819.   end
  820.   #--------------------------------------------------------------------------
  821.   # ○ エネミーをリストに含めるか
  822.   #     enemy_id : 敵 ID
  823.   #--------------------------------------------------------------------------
  824.   def include?(enemy_id)
  825.     KMS::Commands.enemy_guide_include?(enemy_id)
  826.   end
  827.   #--------------------------------------------------------------------------
  828.   # ○ エネミーリストの作成
  829.   #--------------------------------------------------------------------------
  830.   def make_enemy_list
  831.     @data.clear
  832.     if KMS::EnemyGuide::ENEMY_ORDER_ID == nil
  833.       # ID順
  834.       enemy_list = 1...$data_enemies.size
  835.     else
  836.       # 指定順
  837.       enemy_list = KMS::EnemyGuide::ENEMY_ORDER_ID
  838.     end
  839.  
  840.     enemy_list.each do |i|
  841.       @data << $data_enemies[i] if include?(i)
  842.     end
  843.   end
  844.   #--------------------------------------------------------------------------
  845.   # ● リフレッシュ
  846.   #--------------------------------------------------------------------------
  847.   def refresh
  848.     make_enemy_list
  849.     create_contents
  850.     draw_all_items
  851.   end
  852.   #--------------------------------------------------------------------------
  853.   # ● 項目の描画
  854.   #     index : 項目番号
  855.   #--------------------------------------------------------------------------
  856.   def draw_item(index)
  857.     enemy = @data[index]
  858.     return if enemy == nil
  859.  
  860.     #change_color(normal_color, KMS::Commands.enemy_defeated?(enemy.id))
  861.     change_color(normal_color, KMS::Commands.enemy_encountered?(enemy.id))
  862.     rect = item_rect_for_text(index)
  863.     contents.clear_rect(rect)
  864.  
  865.     if KMS::EnemyGuide::SHOW_SERIAL_NUMBER
  866.       text = sprintf(KMS::EnemyGuide::SERIAL_NUM_FORMAT,
  867.         KMS::EnemyGuide::SERIAL_NUM_FOLLOW ? (index + 1) : enemy.id)
  868.     else
  869.       text = ""
  870.     end
  871.  
  872.     if KMS::Commands.enemy_encountered?(enemy.id)
  873.       # 遭遇済み
  874.       text += enemy.name
  875.     else
  876.       # 未遭遇
  877.       mask = KMS::EnemyGuide::UNKNOWN_ENEMY_NAME
  878.       if mask.scan(/./).size == 1
  879.         mask = mask * enemy.name.scan(/./).size
  880.       end
  881.       text += mask
  882.     end
  883.     draw_text(rect, text)
  884.   end
  885. end
  886.  
  887. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  888.  
  889. #==============================================================================
  890. # □ Window_EnemyGuideStatus
  891. #------------------------------------------------------------------------------
  892. #   モンスター図鑑画面で、ステータスを表示するウィンドウです。
  893. #==============================================================================
  894.  
  895. class Window_EnemyGuideStatus < Window_Base
  896.   #--------------------------------------------------------------------------
  897.   # ○ 定数
  898.   #--------------------------------------------------------------------------
  899.   PARAM2_COUNT = 6                        # 第2パラメータの数
  900.   #--------------------------------------------------------------------------
  901.   # ● 公開インスタンス変数
  902.   #--------------------------------------------------------------------------
  903.   attr_reader   :enemy                    # 表示エネミー
  904.   #--------------------------------------------------------------------------
  905.   # ● オブジェクト初期化
  906.   #--------------------------------------------------------------------------
  907.   def initialize
  908.     super(240, 0, window_width, window_height)
  909.     self.enemy = nil
  910.     self.z = 100
  911.     if KMS::EnemyGuide::USE_BACKGROUND_IMAGE
  912.       self.opacity = 0
  913.     end
  914.     @show_sprite  = false
  915.     @enemy_sprite = Sprite.new
  916.     @enemy_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
  917.     @enemy_sprite.x = 0
  918.     @enemy_sprite.y = 0
  919.     @enemy_sprite.z = self.z + 100
  920.     @enemy_sprite.visible = false
  921.  
  922.     @enemy_object = nil
  923.   end
  924.   #--------------------------------------------------------------------------
  925.   # ● 破棄
  926.   #--------------------------------------------------------------------------
  927.   def dispose
  928.     @enemy_sprite.bitmap.dispose
  929.     @enemy_sprite.dispose
  930.     super
  931.   end
  932.   #--------------------------------------------------------------------------
  933.   # ● ウィンドウ幅の取得
  934.   #--------------------------------------------------------------------------
  935.   def window_width
  936.     Graphics.width - 240
  937.   end
  938.   #--------------------------------------------------------------------------
  939.   # ● ウィンドウ高さの取得
  940.   #--------------------------------------------------------------------------
  941.   def window_height
  942.     Graphics.height
  943.   end
  944.   #--------------------------------------------------------------------------
  945.   # ● 標準パディングサイズの取得
  946.   #--------------------------------------------------------------------------
  947.   def standard_padding
  948.     KMS::EnemyGuide::VX_WINDOW_PADDING
  949.   end if KMS::EnemyGuide::VX_COMPATIBLE
  950.   #--------------------------------------------------------------------------
  951.   # ● ウィンドウ内容の幅を計算
  952.   #--------------------------------------------------------------------------
  953.   def contents_width
  954.     page_width * pages
  955.   end
  956.   #--------------------------------------------------------------------------
  957.   # ○ ページ幅
  958.   #--------------------------------------------------------------------------
  959.   def page_width
  960.     return window_width - standard_padding * 2
  961.   end
  962.   #--------------------------------------------------------------------------
  963.   # ○ アイテム用ページを表示するか
  964.   #--------------------------------------------------------------------------
  965.   def item_page_show?
  966.     return true if KMS::EnemyGuide::SHOW_DROP_ITEM
  967.     return true if $kms_imported["Steal"] && KMS::EnemyGuide::SHOW_STEAL_OBJ
  968.  
  969.     false
  970.   end
  971.   #--------------------------------------------------------------------------
  972.   # ○ ページ数取得
  973.   #--------------------------------------------------------------------------
  974.   def pages
  975.     item_page_show? ? 3 : 2
  976.   end
  977.   #--------------------------------------------------------------------------
  978.   # ○ 表示エネミー設定
  979.   #--------------------------------------------------------------------------
  980.   def enemy=(enemy)
  981.     @enemy = enemy
  982.     if enemy
  983.       @enemy_object = Game_Enemy.new(0, enemy.id)
  984.     else
  985.       @enemy_object = nil
  986.     end
  987.     refresh
  988.   end
  989.   #--------------------------------------------------------------------------
  990.   # ○ 表示情報切り替え
  991.   #     amount : 移動ページ数
  992.   #--------------------------------------------------------------------------
  993.   def shift_info_type(amount)
  994.     n = self.ox + page_width * amount
  995.     self.ox = [[n, 0].max, page_width * (pages - 1)].min
  996.   end
  997.   #--------------------------------------------------------------------------
  998.   # ○ スプライト表示切替
  999.   #--------------------------------------------------------------------------
  1000.   def switch_sprite
  1001.     @show_sprite          = !@show_sprite
  1002.     @enemy_sprite.visible = @show_sprite
  1003.   end
  1004.   #--------------------------------------------------------------------------
  1005.   # ● リフレッシュ
  1006.   #--------------------------------------------------------------------------
  1007.   def refresh
  1008.     contents.clear
  1009.  
  1010.     draw_enemy_sprite
  1011.  
  1012.     return if enemy == nil
  1013.  
  1014.     # 遭遇していない
  1015.     unless KMS::Commands.enemy_encountered?(enemy.id)
  1016.       change_color(normal_color, false)
  1017.       dy  = contents_height / 2
  1018.       dy -= dy % line_height
  1019.       pages.times do |i|
  1020.         dx = i * page_width
  1021.         draw_text(dx, dy, page_width, line_height,
  1022.           KMS::EnemyGuide::UNENCOUNTERED_DATA, 1)
  1023.       end
  1024.       return
  1025.     end
  1026.  
  1027.     change_color(normal_color)
  1028.     draw_status
  1029.   end
  1030.   #--------------------------------------------------------------------------
  1031.   # ○ ステータス描画
  1032.   #--------------------------------------------------------------------------
  1033.   def draw_status
  1034.     # Page 1
  1035.     dy = draw_basic_info(    4, 0)
  1036.     dy = draw_parameter2(    4, dy)
  1037.     dy = draw_weak_element(  4, dy, KMS::EnemyGuide::ELEMENT_ROWS_WEAK)
  1038.     dy = draw_resist_element(4, dy, KMS::EnemyGuide::ELEMENT_ROWS_RESIST)
  1039.     dy = draw_weak_state(    4, dy, KMS::EnemyGuide::STATE_ROWS_WEAK)
  1040.     dy = draw_resist_state(  4, dy, KMS::EnemyGuide::STATE_ROWS_RESIST)
  1041.     draw_prize(4, dy)
  1042.  
  1043.     # Page 2 (アイテム関連を表示する場合のみ)
  1044.     if item_page_show?
  1045.       dx       = page_width + 4
  1046.       dy       = draw_basic_info(dx, 0)
  1047.       max_rows = (contents_height - dy) / line_height
  1048.       rows     = (max_rows + 1) / (pages - 1)
  1049.       dy       = draw_drop_item(dx, dy, rows)
  1050.       draw_steal_object(dx, dy, max_rows - rows)
  1051.     end
  1052.  
  1053.     # Page 3
  1054.     dx = page_width * (pages - 1) + 4
  1055.     dy = draw_basic_info(dx, 0)
  1056.     draw_description(dx, dy)
  1057.   end
  1058.   #--------------------------------------------------------------------------
  1059.   # ○ 基本情報画
  1060.   #     dx, dy : 描画先 X, Y
  1061.   #--------------------------------------------------------------------------
  1062.   def draw_basic_info(dx, dy)
  1063.     draw_graphic(dx, dy)
  1064.     draw_parameter1(dx + 112, dy)
  1065.     return dy + 96
  1066.   end
  1067.   #--------------------------------------------------------------------------
  1068.   # ○ グラフィック描画
  1069.   #     dx, dy : 描画先 X, Y
  1070.   #--------------------------------------------------------------------------
  1071.   def draw_graphic(dx, dy)
  1072.     return if enemy == nil || !KMS::Commands.enemy_encountered?(enemy.id)
  1073.  
  1074.     buf    = Bitmap.new(108, 96)
  1075.     bitmap = Cache.battler(enemy.battler_name, enemy.battler_hue)
  1076.     rect   = Rect.new(0, 0, bitmap.width / 3, bitmap.height / 3)
  1077.     rect.x = (108 - rect.width) / 2
  1078.     rect.y = ( 96 - rect.height) / 2
  1079.     buf.stretch_blt(rect, bitmap, bitmap.rect)
  1080.     contents.blt(dx, dy, buf, buf.rect)
  1081.     buf.dispose
  1082.   end
  1083.   #--------------------------------------------------------------------------
  1084.   # ○ エネミースプライト描画
  1085.   #--------------------------------------------------------------------------
  1086.   def draw_enemy_sprite
  1087.     return if @enemy_sprite == nil
  1088.  
  1089.     @enemy_sprite.bitmap.fill_rect(@enemy_sprite.bitmap.rect,
  1090.       Color.new(255, 255, 255, 150))
  1091.  
  1092.     return if enemy == nil || !KMS::Commands.enemy_encountered?(enemy.id)
  1093.  
  1094.     bitmap = Cache.battler(enemy.battler_name, enemy.battler_hue)
  1095.     dx = (Graphics.width  - bitmap.width)  / 2
  1096.     dy = (Graphics.height - bitmap.height) / 2
  1097.     @enemy_sprite.bitmap.blt(dx, dy, bitmap, bitmap.rect)
  1098.   end
  1099.   #--------------------------------------------------------------------------
  1100.   # ○ パラメータ描画 - 1
  1101.   #     dx, dy : 描画先 X, Y
  1102.   #--------------------------------------------------------------------------
  1103.   def draw_parameter1(dx, dy)
  1104.     # 名前, HP, MP
  1105.     param = {}
  1106.     #if KMS::Commands.enemy_defeated?(enemy.id)
  1107.     if KMS::Commands.enemy_encountered?(enemy.id)
  1108.       param[:maxhp] = enemy.params[0]
  1109.       param[:maxmp] = enemy.params[1]
  1110.       if $kms_imported["BattleCount"]
  1111.         param[:defeat_count] = KMS::Commands.get_defeat_count(enemy.id)
  1112.       end
  1113.     else
  1114.       param[:maxhp] = param[:maxmp] = KMS::EnemyGuide::UNDEFEATED_PARAMETER
  1115.       param[:defeat_count] = 0
  1116.     end
  1117.  
  1118.     change_color(normal_color)
  1119.     draw_text(dx, dy, width - 144, line_height, enemy.name)
  1120.     change_color(system_color)
  1121.     draw_text(dx, dy + line_height,     80, line_height, Vocab.hp)
  1122.     draw_text(dx, dy + line_height * 2, 80, line_height, Vocab.mp)
  1123.     if $kms_imported["BattleCount"]
  1124.       draw_text(dx, dy + line_height * 3, 80, line_height,
  1125.         KMS::EnemyGuide::PARAMETER_NAME[:defeat_count])
  1126.     end
  1127.     change_color(normal_color)
  1128.     draw_text(dx + 88, dy + line_height,     64, line_height, param[:maxhp], 2)
  1129.     draw_text(dx + 88, dy + line_height * 2, 64, line_height, param[:maxmp], 2)
  1130.     if $kms_imported["BattleCount"]
  1131.       draw_text(dx + 88, dy + line_height * 3, 64, line_height,
  1132.         param[:defeat_count], 2)
  1133.     end
  1134.   end
  1135.   #--------------------------------------------------------------------------
  1136.   # ○ パラメータ描画 - 2
  1137.   #     dx, dy : 描画先 X, Y
  1138.   #--------------------------------------------------------------------------
  1139.   def draw_parameter2(dx, dy)
  1140.     # ATK ~ LUK
  1141.     param = {}
  1142.     #if KMS::Commands.enemy_defeated?(enemy.id)
  1143.       if KMS::Commands.enemy_encountered?(enemy.id)
  1144.  
  1145.       param = enemy.params
  1146.     else
  1147.       param = Array.new(PARAM2_COUNT) { KMS::EnemyGuide::UNDEFEATED_PARAMETER }
  1148.     end
  1149.  
  1150.     dw = page_width / 2
  1151.     PARAM2_COUNT.times do |i|
  1152.       dx2 = dx + (i % 2) * dw
  1153.       dy2 = dy + (i / 2) * line_height
  1154.       change_color(system_color)
  1155.       draw_text(dx2,      dy2, 80, line_height, Vocab.param(i + 2))
  1156.       change_color(normal_color)
  1157.       draw_text(dx2 + 80, dy2, 48, line_height, param[i + 2], 2)
  1158.     end
  1159.  
  1160.     dy + (PARAM2_COUNT + 1) / 2 * line_height
  1161.   end
  1162.   #--------------------------------------------------------------------------
  1163.   # ○ アイコンリスト描画
  1164.   #     dx, dy      : 描画先 X, Y
  1165.   #     rows, cols  : アイコン行/列数
  1166.   #     item_list   : 描画対象のリスト
  1167.   #     cond_proc   : 描画条件 Proc
  1168.   #     index_proc  : アイコン index 取得用 Proc
  1169.   #     enable_proc : 有効判定用 Proc
  1170.   #--------------------------------------------------------------------------
  1171.   def draw_icon_list(dx, dy, rows, cols, item_list,
  1172.       cond_proc, index_proc, enable_proc = nil)
  1173.     nc = 0  # 現在の列数
  1174.     nr = 0  # 現在の行数
  1175.     item_list.each do |item|
  1176.       next if item == nil
  1177.       next if enable_proc != nil && !enable_proc.call(item)
  1178.       next unless cond_proc.call(item)
  1179.       icon_index = index_proc.call(item)
  1180.       next if icon_index == nil || icon_index == 0
  1181.  
  1182.       draw_icon(icon_index, dx + nc * 24, dy + nr * 24)
  1183.       nc += 1
  1184.       if nc == cols
  1185.         # 次の行へ
  1186.         nc = 0
  1187.         nr += 1
  1188.         break if nr == rows  # 行制限オーバー
  1189.       end
  1190.     end  # each
  1191.   end
  1192.   #--------------------------------------------------------------------------
  1193.   # ○ 弱点属性描画
  1194.   #     dx, dy : 描画先 X, Y
  1195.   #     rows   : 行数
  1196.   #--------------------------------------------------------------------------
  1197.   def draw_weak_element(dx, dy, rows = 1)
  1198.     change_color(system_color)
  1199.     draw_text(dx, dy, 80, line_height,
  1200.       KMS::EnemyGuide::PARAMETER_NAME[:weak_element])
  1201.  
  1202.     new_dy = dy + line_height * rows
  1203.     #return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1204.     return new_dy unless KMS::Commands.enemy_encountered?(enemy.id)
  1205.  
  1206.     cols = (page_width - 88) / 24
  1207.  
  1208.     draw_icon_list(dx + 80, dy, rows, cols,
  1209.       KMS::EnemyGuide::CHECK_ELEMENT_LIST,
  1210.       Proc.new { |i| @enemy_object.element_rate(i) > 1.0 },
  1211.       Proc.new { |i| KMS::EnemyGuide::ELEMENT_ICON[i] },
  1212.       Proc.new { |i| i < $data_system.elements.size })
  1213.  
  1214.     new_dy
  1215.   end
  1216.   #--------------------------------------------------------------------------
  1217.   # ○ 耐性属性描画
  1218.   #     dx, dy : 描画先 X, Y
  1219.   #     rows   : 行数
  1220.   #--------------------------------------------------------------------------
  1221.   def draw_resist_element(dx, dy, rows = 1)
  1222.     change_color(system_color)
  1223.     draw_text(dx, dy, 80, line_height,
  1224.       KMS::EnemyGuide::PARAMETER_NAME[:resist_element])
  1225.  
  1226.     new_dy = dy + line_height * rows
  1227.     #return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1228.     return new_dy unless KMS::Commands.enemy_encountered?(enemy.id)
  1229.  
  1230.     cols = (page_width - 88) / 24
  1231.  
  1232.     # 耐性属性
  1233.     draw_icon_list(dx + 80, dy, rows, cols,
  1234.       KMS::EnemyGuide::CHECK_ELEMENT_LIST,
  1235.       Proc.new { |i| @enemy_object.element_rate(i) < 1.0 },
  1236.       Proc.new { |i| KMS::EnemyGuide::ELEMENT_ICON[i] },
  1237.       Proc.new { |i| i < $data_system.elements.size })
  1238.  
  1239.     new_dy
  1240.   end
  1241.   #--------------------------------------------------------------------------
  1242.   # ○ 弱点ステート描画
  1243.   #     dx, dy : 描画先 X, Y
  1244.   #     rows   : 行数
  1245.   #--------------------------------------------------------------------------
  1246.   def draw_weak_state(dx, dy, rows = 1)
  1247.     change_color(system_color)
  1248.     draw_text(dx, dy, 80, line_height,
  1249.       KMS::EnemyGuide::PARAMETER_NAME[:weak_state])
  1250.  
  1251.     new_dy = dy + line_height * rows
  1252.     #return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1253.     return new_dy unless KMS::Commands.enemy_encountered?(enemy.id)
  1254.  
  1255.     cols = (page_width - 88) / 24
  1256.  
  1257.     draw_icon_list(dx + 80, dy, rows, cols,
  1258.       KMS::EnemyGuide::CHECK_STATE_LIST,
  1259.       Proc.new { |i| @enemy_object.state_rate(i) > 1.0 },
  1260.       Proc.new { |i| $data_states[i].icon_index },
  1261.       Proc.new { |i| i < $data_states.size })
  1262.  
  1263.     new_dy
  1264.   end
  1265.   #--------------------------------------------------------------------------
  1266.   # ○ 耐性ステート描画
  1267.   #     dx, dy : 描画先 X, Y
  1268.   #     rows   : 行数
  1269.   #--------------------------------------------------------------------------
  1270.   def draw_resist_state(dx, dy, rows = 1)
  1271.     change_color(system_color)
  1272.     draw_text(dx, dy, 80, line_height,
  1273.       KMS::EnemyGuide::PARAMETER_NAME[:resist_state])
  1274.  
  1275.     new_dy = dy + line_height * rows
  1276.     #return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1277.     return new_dy unless KMS::Commands.enemy_encountered?(enemy.id)
  1278.  
  1279.     cols = (page_width - 88) / 24
  1280.  
  1281.     draw_icon_list(dx + 80, dy, rows, cols,
  1282.       KMS::EnemyGuide::CHECK_STATE_LIST,
  1283. #~       Proc.new { |i| @enemy_object.state_resist?(i) ||
  1284. #~                      @enemy_object.state_rate(i) == 0.0 },
  1285.       Proc.new { |i| @enemy_object.state_resist?(i) },
  1286.       Proc.new { |i| $data_states[i].icon_index },
  1287.       Proc.new { |i| i < $data_states.size })
  1288.  
  1289.     new_dy
  1290.   end
  1291.   #--------------------------------------------------------------------------
  1292.   # ○ EXP, Gold 描画
  1293.   #     dx, dy : 描画先 X, Y
  1294.   #--------------------------------------------------------------------------
  1295.   def draw_prize(dx, dy)
  1296.     param = {}
  1297.     #if KMS::Commands.enemy_defeated?(enemy.id)
  1298.     if KMS::Commands.enemy_encountered?(enemy.id)
  1299.       param[:exp]  = enemy.exp
  1300.       param[:gold] = enemy.gold
  1301.       param[:ap]   = enemy.ap if $kms_imported["EquipLearnSkill"]
  1302.     else
  1303.       param[:exp] = param[:gold] = param[:ap] =
  1304.         KMS::EnemyGuide::UNDEFEATED_PARAMETER
  1305.     end
  1306.  
  1307.     dw = page_width / 2
  1308.     change_color(system_color)
  1309.     draw_text(dx,      dy, 80, line_height,
  1310.       KMS::EnemyGuide::PARAMETER_NAME[:exp])
  1311.     draw_text(dx + dw, dy, 80, line_height, Vocab.currency_unit)
  1312.     if $kms_imported["EquipLearnSkill"]
  1313.       draw_text(dx, dy + line_height, 80, line_height, Vocab.ap)
  1314.     end
  1315.  
  1316.     # EXP, Gold
  1317.     dx += 76
  1318.     change_color(normal_color)
  1319.     draw_text(dx,      dy, 52, line_height, param[:exp], 2)
  1320.     draw_text(dx + dw, dy, 52, line_height, param[:gold], 2)
  1321.     if $kms_imported["EquipLearnSkill"]
  1322.       draw_text(dx, dy + line_height, 52, line_height, param[:ap], 2)
  1323.     end
  1324.  
  1325.     return dy + line_height * 2
  1326.   end
  1327.   #--------------------------------------------------------------------------
  1328.   # ○ ドロップアイテム描画
  1329.   #     dx, dy : 描画先 X, Y
  1330.   #     rows   : 行数
  1331.   #--------------------------------------------------------------------------
  1332.   def draw_drop_item(dx, dy, rows)
  1333.     return dy unless KMS::EnemyGuide::SHOW_DROP_ITEM
  1334.  
  1335.     dw = page_width / 2
  1336.     change_color(system_color)
  1337.     draw_text(dx, dy, 128, line_height,
  1338.       KMS::EnemyGuide::PARAMETER_NAME[:treasure], 1)
  1339.     draw_text(dx + dw, dy, 128, line_height,
  1340.       KMS::EnemyGuide::PARAMETER_NAME[:drop_prob], 2)
  1341.  
  1342.     new_dy = dy + line_height * rows
  1343.     return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1344.  
  1345.     # リスト作成
  1346.     drop_items = enemy.drop_items.dup
  1347.     if $kms_imported["ExtraDropItem"]
  1348.       drop_items += enemy.extra_drop_items
  1349.     end
  1350.  
  1351.     dy += line_height
  1352.     count = 0
  1353.     drop_items.each_with_index do |item, i|
  1354.       # アイテム名描画
  1355.       case item.kind
  1356.       when 1; list = $data_items
  1357.       when 2; list = $data_weapons
  1358.       when 3; list = $data_armors
  1359.       else;   next
  1360.       end
  1361.       drop_item = list[item.data_id]
  1362.  
  1363.       if KMS::Commands.enemy_item_dropped?(enemy.id, i)
  1364.         draw_item_name(drop_item, dx, dy)
  1365.       else
  1366.         draw_masked_item_name(drop_item, dx, dy)
  1367.       end
  1368.  
  1369.       # ドロップ率描画
  1370.       if $kms_imported["ExtraDropItem"] && item.drop_prob > 0
  1371.         text = sprintf("%d%%", item.drop_prob)
  1372.       else
  1373.         text = "1/#{item.denominator}"
  1374.       end
  1375.       draw_text(dx + dw, dy, 128, line_height, text, 2)
  1376.       dy += line_height
  1377.       count += 1
  1378.       break if count == rows
  1379.     end
  1380.  
  1381.     return new_dy
  1382.   end
  1383.   #--------------------------------------------------------------------------
  1384.   # ○ アイテム名をマスクして描画
  1385.   #     item    : アイテム (スキル、武器、防具でも可)
  1386.   #     x       : 描画先 X 座標
  1387.   #     y       : 描画先 Y 座標
  1388.   #     enabled : 有効フラグ。false のとき半透明で描画
  1389.   #--------------------------------------------------------------------------
  1390.   def draw_masked_item_name(item, x, y, enabled = true)
  1391.     return if item == nil
  1392.  
  1393.     draw_icon(item.icon_index, x, y, enabled)
  1394.     change_color(normal_color, enabled)
  1395.     mask = KMS::EnemyGuide::UNDROPPED_ITEM_NAME
  1396.     text = KMS.mask_string(item.name, mask)
  1397.     draw_text(x + 24, y, 172, line_height, text)
  1398.   end
  1399.   #--------------------------------------------------------------------------
  1400.   # ○ 盗めるオブジェクト描画
  1401.   #     dx, dy : 描画先 X, Y
  1402.   #     rows   : 行数
  1403.   #--------------------------------------------------------------------------
  1404.   def draw_steal_object(dx, dy, rows)
  1405.     return dy unless $kms_imported["Steal"] && KMS::EnemyGuide::SHOW_STEAL_OBJ
  1406.  
  1407.     new_dy = dy + line_height * rows
  1408.     dw = page_width / 2
  1409.     change_color(system_color)
  1410.     draw_text(dx,      dy, 128, line_height,
  1411.       KMS::EnemyGuide::PARAMETER_NAME[:steal_obj], 1)
  1412.     draw_text(dx + dw, dy, 128, line_height,
  1413.       KMS::EnemyGuide::PARAMETER_NAME[:steal_prob], 2)
  1414.  
  1415.     return new_dy unless KMS::Commands.enemy_defeated?(enemy.id)
  1416.  
  1417.     # リスト作成
  1418.     steal_objects = enemy.steal_objects.clone
  1419.     if steal_objects.size >= rows
  1420.       steal_objects = steal_objects[0...(rows - 1)]
  1421.     end
  1422.  
  1423.     dy += line_height
  1424.     steal_objects.each_with_index do |obj, i|
  1425.       if obj.kind == 4
  1426.         # Gold
  1427.         if KMS::Commands.enemy_object_stolen?(enemy.id, i)
  1428.           text = sprintf("%d%s", obj.gold, Vocab.gold)
  1429.         else
  1430.           mask = KMS::EnemyGuide::UNDROPPED_ITEM_NAME
  1431.           text = KMS.mask_string("aaa", mask)
  1432.         end
  1433.         draw_text(dx + 24, dy, dw, line_height, text)
  1434.       else
  1435.         # Item
  1436.         case obj.kind
  1437.         when 1
  1438.           item = $data_items[obj.item_id]
  1439.         when 2
  1440.           item = $data_weapons[obj.weapon_id]
  1441.         when 3
  1442.           item = $data_armors[obj.armor_id]
  1443.         end
  1444.         if KMS::Commands.enemy_object_stolen?(enemy.id, i)
  1445.           draw_item_name(item, dx, dy)
  1446.         else
  1447.           draw_masked_item_name(item, dx, dy)
  1448.         end
  1449.       end
  1450.       # 成功率描画
  1451.       if obj.success_prob > 0
  1452.         text = sprintf("%d%%", obj.success_prob)
  1453.       else
  1454.         text = "1/#{obj.denominator}"
  1455.       end
  1456.       draw_text(dx + dw, dy, 128, line_height, text, 2)
  1457.       dy += line_height
  1458.     end
  1459.  
  1460.     return new_dy
  1461.   end
  1462.   #--------------------------------------------------------------------------
  1463.   # ○ 説明文描画
  1464.   #     dx, dy : 描画先 X, Y
  1465.   #--------------------------------------------------------------------------
  1466.   def draw_description(dx, dy)
  1467.     #return unless KMS::Commands.enemy_defeated?(enemy.id)
  1468.     return unless KMS::Commands.enemy_encountered?(enemy.id)
  1469.  
  1470.     dx += 4
  1471.     enemy.enemy_guide_description.each_line do |line|
  1472.       draw_text(dx, dy, page_width, line_height, line.chomp)
  1473.       dy += line_height
  1474.     end
  1475.   end
  1476. end
  1477.  
  1478. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1479.  
  1480. #==============================================================================
  1481. # ■ Scene_Menu
  1482. #==============================================================================
  1483.  
  1484. if KMS::EnemyGuide::USE_MENU_ENEMY_GUIDE_COMMAND
  1485. class Scene_Menu < Scene_MenuBase
  1486.   #--------------------------------------------------------------------------
  1487.   # ● コマンドウィンドウの作成
  1488.   #--------------------------------------------------------------------------
  1489.   alias create_command_window_KMS_EnemyGuide create_command_window
  1490.   def create_command_window
  1491.     create_command_window_KMS_EnemyGuide
  1492.  
  1493.     @command_window.set_handler(:enemy_guide, method(:command_enemy_guide))
  1494.   end
  1495.   #--------------------------------------------------------------------------
  1496.   # ○ コマンド[モンスター図鑑]
  1497.   #--------------------------------------------------------------------------
  1498.   def command_enemy_guide
  1499.     SceneManager.call(Scene_EnemyGuide)
  1500.   end
  1501. end
  1502. end  # if KMS::EnemyGuide::USE_MENU_ENEMY_GUIDE_COMMAND
  1503.  
  1504. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1505.  
  1506. #==============================================================================
  1507. # □ Scene_EnemyGuide
  1508. #------------------------------------------------------------------------------
  1509. #   モンスター図鑑画面の処理を行うクラスです。
  1510. #==============================================================================
  1511.  
  1512. class Scene_EnemyGuide < Scene_MenuBase
  1513.   #--------------------------------------------------------------------------
  1514.   # ● オブジェクト初期化
  1515.   #     menu_index  : コマンドのカーソル初期位置
  1516.   #     host_scene  : 呼び出し元 (0..メニュー  1..マップ)
  1517.   #--------------------------------------------------------------------------
  1518.   def initialize(menu_index = 0)
  1519.     @menu_index = menu_index
  1520.   end
  1521.   #--------------------------------------------------------------------------
  1522.   # ● 開始処理
  1523.   #--------------------------------------------------------------------------
  1524.   def start
  1525.     super
  1526.     create_background_sprite
  1527.     create_windows
  1528.   end
  1529.   #--------------------------------------------------------------------------
  1530.   # ○ 背景スプライトの作成
  1531.   #--------------------------------------------------------------------------
  1532.   def create_background_sprite
  1533.     return unless KMS::EnemyGuide::USE_BACKGROUND_IMAGE
  1534.  
  1535.     @back_sprite = Sprite.new(@viewport)
  1536.     begin
  1537.       @back_sprite.bitmap = Cache.system(KMS::EnemyGuide::BACKGROUND_FILENAME)
  1538.     rescue
  1539.       @back_sprite.bitmap = Bitmap.new(32, 32)
  1540.     end
  1541.   end
  1542.   #--------------------------------------------------------------------------
  1543.   # ○ ウィンドウの作成
  1544.   #--------------------------------------------------------------------------
  1545.   def create_windows
  1546.     @top_window    = Window_EnemyGuideTop.new
  1547.     @enemy_window  = Window_EnemyGuideList.new
  1548.     @status_window = Window_EnemyGuideStatus.new
  1549.     @top_window.viewport    = @viewport
  1550.     @enemy_window.viewport  = @viewport
  1551.     @status_window.viewport = @viewport
  1552.     @status_window.enemy    = @enemy_window.item
  1553.  
  1554.     @enemy_window.set_handler(:cancel, method(:return_scene))
  1555.     @enemy_window.activate
  1556.   end
  1557.   #--------------------------------------------------------------------------
  1558.   # ● 終了処理
  1559.   #--------------------------------------------------------------------------
  1560.   def terminate
  1561.     Graphics.freeze
  1562.     dispose_background_sprite
  1563.     super
  1564.   end
  1565.   #--------------------------------------------------------------------------
  1566.   # ○ 背景スプライトの解放
  1567.   #--------------------------------------------------------------------------
  1568.   def dispose_background_sprite
  1569.     if @back_sprite != nil
  1570.       @back_sprite.bitmap.dispose
  1571.       @back_sprite.dispose
  1572.     end
  1573.   end
  1574.   #--------------------------------------------------------------------------
  1575.   # ● フレーム更新
  1576.   #--------------------------------------------------------------------------
  1577.   def update
  1578.     super
  1579.     update_background_sprite
  1580.     update_enemy_selection
  1581.   end
  1582.   #--------------------------------------------------------------------------
  1583.   # ○ 背景スプライトの更新
  1584.   #--------------------------------------------------------------------------
  1585.   def update_background_sprite
  1586.     return if @back_sprite == nil
  1587.  
  1588.     @back_sprite.update
  1589.   end
  1590.   #--------------------------------------------------------------------------
  1591.   # ○ エネミー選択の更新
  1592.   #--------------------------------------------------------------------------
  1593.   def update_enemy_selection
  1594.     if @last_index != @enemy_window.index
  1595.       @status_window.enemy = @enemy_window.item
  1596.       @last_index = @enemy_window.index
  1597.     end
  1598.  
  1599.     if Input.trigger?(Input::A) || Input.trigger?(Input::C)
  1600.       # スプライト表示切替
  1601.       Sound.play_ok
  1602.       @status_window.switch_sprite
  1603.     elsif Input.trigger?(Input::LEFT)
  1604.       # 左ページ
  1605.       Sound.play_cursor
  1606.       @status_window.shift_info_type(-1)
  1607.     elsif Input.trigger?(Input::RIGHT)
  1608.       # 右ページ
  1609.       Sound.play_cursor
  1610.       @status_window.shift_info_type(1)
  1611.     end
  1612.   end
  1613. end


已改..亲测有效
回复

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33168
在线时间
10488 小时
注册时间
2009-3-15
帖子
4756
3
发表于 2019-8-30 23:58:22 | 只看该作者
打过一次怪物?什么意思..和击败有什么不同..

点评

发生过战斗但不一定要击败敌人的意思吧?我猜的  发表于 2019-8-31 12:28
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1422
在线时间
245 小时
注册时间
2019-1-18
帖子
190
4
 楼主| 发表于 2019-8-31 14:21:53 | 只看该作者
soulsaga 发表于 2019-8-30 23:58
打过一次怪物?什么意思..和击败有什么不同..

就是遭遇过一次,无论打没打过
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1422
在线时间
245 小时
注册时间
2019-1-18
帖子
190
5
 楼主| 发表于 2019-9-7 08:30:50 | 只看该作者
soulsaga 发表于 2019-8-30 21:17
$data_states ||= load_data("Data/States.rvdata2")
$data_system ||= load_data("Data/System.rvdata2" ...

感谢大佬~

点评

求教这个脚本怎么用?我击败了怪物,但是图鉴里面还是无数据啊  发表于 2019-12-25 16:30
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-25 07:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表