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

Project1

 找回密码
 注册会员
搜索
查看: 13913|回复: 16

[RMVX发布] 兼容横战(+CP)的KGC怪物图鉴

[复制链接]

TA还没有解放自身的潜力。

Lv2.观梦者

弓箭手?剑兰

梦石
0
星屑
364
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
发表于 2011-4-2 10:11:22 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 一箭烂YiJL 于 2011-4-25 11:09 编辑

0.序
由于我和其他之前的人因为横战和图鉴功能不兼容,导致图鉴无效。
我在翻译的过程中大概明白里面的原理了,
于是就提供一个办法解决。(也不知道有没有人已经解决了呢?)

1.解决原理
原理是由于横战把Game_Enemy的perform_collapse改为非常古怪的方法。
于是我的方法是把怪物图鉴里Game_Enemy的perform_collapse改为:
  1.   alias perform_collapse_KGC_EnemyGuide perform_collapse
  2.   def perform_collapse
  3.     last_collapsed = @collapse

  4.     perform_collapse_KGC_EnemyGuide

  5.     @collapse = true if $game_temp.in_battle and dead?

  6.     if !last_collapsed and @collapse
  7.       # 开启击败过标志
  8.       KGC::Commands.set_enemy_defeated(enemy_id)
  9.       # 变身前的敌人也按照击败过来处理
  10.       if KGC::EnemyGuide::ORIGINAL_DEFEAT
  11.         @original_ids.compact.each { |i|
  12.           KGC::Commands.set_enemy_defeated(i)
  13.         }
  14.       end
  15.     end
  16.   end
复制代码
这样就可以兼容了横战(+CP)。

2.效果图
tujian.png
必须把这幅图放在"Graphics\System\"下:
EnemyGuideBack.png


那么如果是不懂修改的话,我给这个最新的翻译版(约束的旧版+我其他的翻译)
3.脚本重发-Part1:
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 怪物图鉴 - KGC_EnemyGuide ◆ VX ◆
  3. #_/       翻译 约束的旧版 + 一箭烂
  4. #_/    ◇ Last update : 2008/11/16 ◇
  5. #_/----------------------------------------------------------------------------
  6. #_/  作成怪物图鉴。
  7. #_/============================================================================
  8. #_/ 【基本機能】请在≪物品掉落扩张≫ 之上添加。
  9. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  10. #==============================================================================
  11. # ★ 定制項目 - Customize ★
  12. #==============================================================================

  13. module KGC
  14. module EnemyGuide
  15.   # ◆ 图鉴用背景图片表示
  16.   #   true  : 用背景图片代替原本窗口。
  17.   #   false : 使用平常窗口。
  18.   USE_BACKGROUND_IMAGE = true
  19.   # ◆ 背景图片的文件夹名
  20.   #  "Graphics/System/" 内载入。
  21.   BACKGROUND_FILENAME  = "EnemyGuideBack"
  22.   # ◆ 完成度表示的间隔 [框架]
  23.   INFO_INTERVAL = 90

  24.   # ◆ 名字前面编号
  25.   #   true  : 001: 史莱姆
  26.   #   false : 史莱姆
  27.   SHOW_SERIAL_NUMBER = true
  28.   # ◆ 标号按照目录排序
  29.   #  true  : 无视ID的排列编号 。
  30.   #  false : 按照目录的排列顺序编号。
  31.   SERIAL_NUM_FOLLOW  = true
  32.   # ◆ 编号的格式化字符串
  33.   #  参照帮助的 sprintf 格式。
  34.   SERIAL_NUM_FORMAT  = "%03d: "
  35.   # ◆ 未遭遇的敌人名字
  36.   #  只写入一个文字的时候,会自动扩张成怪物名字的字数。
  37.   UNKNOWN_ENEMY_NAME = "?"
  38.   # ◆ 未遭遇敌人的资料表示
  39.   UNENCOUNTERED_DATA = "- No Data -"
  40.   # ◆ 图鉴的属性名
  41.   PARAMETER_NAME = {
  42.     :defeat_count   => "打败次数",
  43.     :weak_element   => "弱点属性",
  44.     :resist_element => "耐性属性",
  45.     :weak_state     => "弱点状态",
  46.     :resist_state   => "无效状态",
  47.     :exp            => "经验值",
  48.     :treasure       => "物品",
  49.     :drop_prob      => "掉落率",
  50.     :steal_obj      => "偷盗物品",
  51.     :steal_prob     => "成功率",
  52.   }  # ← 这里不能消除!
  53.   # ◆ 未击破敌人的变数表示
  54.   UNDEFEATED_PARAMETER = "???"
  55.   # ◆ 未掉落物品的名字表示
  56.   #  只写入一个文字的时候,会自动扩张成掉落物品名字的字数。
  57.   UNDROPPED_ITEM_NAME  = "?"

  58.   # ◆ 调查耐性属性的范围
  59.   #  容纳排列调查耐性属性的 ID 。
  60.   #  使用.. 或 ... 范围指定都是可以的。
  61.   ELEMENT_RANGE = [1..16]
  62.   # ◆ 属性的ICON
  63.   #  指定各属性的ICON编号。
  64.   #  对应排列的添加字的属性ID。
  65.   ELEMENT_ICON = [nil,                       # ID:0 是没有的
  66.      50,   1,   4,  14,  24,  12, 189, 136,  # 格斗 ~ 吸收
  67.     104, 105, 106, 107, 108, 109, 110, 111,  # 炎 ~ 黑暗
  68.   ]  # ← 这里不能消除!
  69.   # ◆ 物品掉落是否显示
  70.   #   true  : 显示
  71.   #   false : 不显示
  72.   SHOW_DROP_ITEM = true
  73.   # ◆ 是否显示偷盗
  74.   #  ≪偷盗≫ 有用的时候。
  75.   SHOW_STEAL_OBJ = true

  76.   # ◆ 从图鉴中隐藏敌人
  77.   #  排列想要从图鉴中隐藏的敌人ID。
  78.   #  ID 和范围 (1..10 等), 哪种都可以。
  79.   # <例> HIDDEN_ENEMIES = [2, 4, 8, 16..32]
  80.   HIDDEN_ENEMIES = []

  81.   # ◆ 敌人的排列顺序
  82.   #  表示的敌人ID、排列成想要的顺序。
  83.   #  使用.. 或 ... 范围指定都是可以的。
  84.   #  没有被指定的敌人、或者 HIDDEN_ENEMIES 中指定过的敌人不表示。
  85.   #  (不适用这个机能的时候是 nil)
  86.   ENEMY_ORDER = nil
  87.   # ENEMY_ORDER = [1..5, 8..13, 6, 7, 14, 15]
  88.   #  ↑使用例子

  89.   # ◆ 变身前的敌人也击破
  90.   #   true  : 变身前的敌人也被看作是击败过。
  91.   #   false : 变身前的敌人不被看作是击败过(只是遭遇过)。
  92.   ORIGINAL_DEFEAT = true

  93.   # ◆ 菜单画面中「怪物图鉴」指令的追加
  94.   #  追加的地点是、菜单画面指令列的最下方。
  95.   #  如果想要在其他地方放置指令时请使用≪特制菜单指令排列≫ 脚本。
  96.   USE_MENU_ENEMY_GUIDE_COMMAND = true
  97.   # ◆ 菜单画面的「怪物图鉴」指令名称
  98.   VOCAB_MENU_ENEMY_GUIDE       = "怪物图鉴"
  99. end
  100. end

  101. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  102. $imported = {} if $imported == nil
  103. $imported["EnemyGuide"] = true

  104. module KGC
  105.   module_function
  106.   #--------------------------------------------------------------------------
  107.   # ○ 字符串屏蔽
  108.   #     str  : 字符串被屏蔽
  109.   #     mask : 屏蔽字符串
  110.   #--------------------------------------------------------------------------
  111.   def mask_string(str, mask)
  112.     text = mask
  113.     if mask.scan(/./).size == 1
  114.       text = mask * str.scan(/./).size
  115.     end
  116.     return text
  117.   end
  118. end

  119. module KGC::EnemyGuide
  120.   # 正则表达式
  121.   module Regexp
  122.     # 敌人
  123.     module Enemy
  124.       # 图鉴说明开始
  125.       BEGIN_GUIDE_DESCRIPTION = /<(?:GUIDE_DESCRIPTION|图鉴说明)>/i
  126.       # 图鉴说明结束
  127.       END_GUIDE_DESCRIPTION = /<\/(?:GUIDE_DESCRIPTION|图鉴说明)>/i
  128.     end
  129.   end

  130.   module_function
  131.   #--------------------------------------------------------------------------
  132.   # ○ Range | Integer 的排列按照 Integer 的排列 (排除重复的情况)
  133.   #--------------------------------------------------------------------------
  134.   def convert_integer_array(array)
  135.     result = []
  136.     array.each { |i|
  137.       case i
  138.       when Range
  139.         result |= i.to_a
  140.       when Integer
  141.         result |= [i]
  142.       end
  143.     }
  144.     return result
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ○ 看见敌人?
  148.   #--------------------------------------------------------------------------
  149.   def enemy_show?(enemy_id)
  150.     return false if HIDDEN_ENEMY_LIST.include?(enemy_id)
  151.     if ENEMY_ORDER_ID != nil
  152.       return false unless ENEMY_ORDER_ID.include?(enemy_id)
  153.     end

  154.     return true
  155.   end

  156.   # 非表示的怪物资料
  157.   HIDDEN_ENEMY_LIST = convert_integer_array(HIDDEN_ENEMIES)
  158.   # 排序敌人 ID
  159.   ENEMY_ORDER_ID = (ENEMY_ORDER == nil ? nil :
  160.     convert_integer_array(ENEMY_ORDER))
  161.   # 确认属性资料
  162.   CHECK_ELEMENT_LIST = convert_integer_array(ELEMENT_RANGE)
  163. end

  164. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  165. #==============================================================================
  166. # □ KGC::Commands
  167. #==============================================================================

  168. module KGC
  169. module Commands
  170.   module_function
  171.   #--------------------------------------------------------------------------
  172.   # ○ 取得遭遇状态
  173.   #     enemy_id : 敌 ID
  174.   #--------------------------------------------------------------------------
  175.   def enemy_encountered?(enemy_id)
  176.     return $game_system.enemy_encountered[enemy_id]
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ○ 取得击破状态
  180.   #     enemy_id : 敵 ID
  181.   #--------------------------------------------------------------------------
  182.   def enemy_defeated?(enemy_id)
  183.     return $game_system.enemy_defeated[enemy_id]
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ○ 取得掉落物品状态
  187.   #     enemy_id   : 敌 ID
  188.   #     item_index : 掉落物品的号码
  189.   #--------------------------------------------------------------------------
  190.   def enemy_item_dropped?(enemy_id, item_index)
  191.     if $game_system.enemy_item_dropped[enemy_id] == nil
  192.       return false
  193.     end
  194.     result = $game_system.enemy_item_dropped[enemy_id] & (1 << item_index)
  195.     return (result != 0)
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ○ 取得偷盗成功率
  199.   #     enemy_id   : 敌 ID
  200.   #     item_index : 掉落物品的号码
  201.   #--------------------------------------------------------------------------
  202.   def enemy_object_stolen?(enemy_id, obj_index)
  203.     if $game_system.enemy_object_stolen[enemy_id] == nil
  204.       return false
  205.     end
  206.     result = $game_system.enemy_object_stolen[enemy_id] & (1 << obj_index)
  207.     return (result != 0)
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ○ 设定遭遇状态
  211.   #     enemy_id : 敌 ID
  212.   #     enabled  : true..遭遇过  false..未遭遇
  213.   #--------------------------------------------------------------------------
  214.   def set_enemy_encountered(enemy_id, enabled = true)
  215.     $game_system.enemy_encountered[enemy_id] = enabled
  216.     unless enabled
  217.       # 未遭遇等于未击破
  218.       set_enemy_defeated(enemy_id, false)
  219.     end
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ○ 设定击败状态
  223.   #     enemy_id : 敌 ID
  224.   #     enabled  : true..击败过  false..未击败
  225.   #--------------------------------------------------------------------------
  226.   def set_enemy_defeated(enemy_id, enabled = true)
  227.     $game_system.enemy_defeated[enemy_id] = enabled
  228.     if enabled
  229.       # 被击败等于被遭遇
  230.       set_enemy_encountered(enemy_id)
  231.     end
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ○ 设定掉落物品的状态
  235.   #     enemy_id   : 敌 ID
  236.   #     item_index : 掉落物品的编号
  237.   #     enabled    : true..掉落过  false..未掉落
  238.   #--------------------------------------------------------------------------
  239.   def set_enemy_item_dropped(enemy_id, item_index, enabled = true)
  240.     if $game_system.enemy_item_dropped[enemy_id] == nil
  241.       $game_system.enemy_item_dropped[enemy_id] = 0
  242.     end
  243.     if enabled
  244.       $game_system.enemy_item_dropped[enemy_id] |= (1 << item_index)
  245.     else
  246.       $game_system.enemy_item_dropped[enemy_id] &= ~(1 << item_index)
  247.     end
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # ○ 设定偷盗成功状态
  251.   #     enemy_id   : 敌 ID
  252.   #     ojb_index : 掉落物品的编号
  253.   #     enabled    : true..掉落过  false..未掉落
  254.   #--------------------------------------------------------------------------
  255.   def set_enemy_object_stolen(enemy_id, obj_index, enabled = true)
  256.     if $game_system.enemy_object_stolen[enemy_id] == nil
  257.       $game_system.enemy_object_stolen[enemy_id] = 0
  258.     end
  259.     if enabled
  260.       $game_system.enemy_object_stolen[enemy_id] |= (1 << obj_index)
  261.     else
  262.       $game_system.enemy_object_stolen[enemy_id] &= ~(1 << obj_index)
  263.     end
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # ○ 清空图鉴
  267.   #--------------------------------------------------------------------------
  268.   def reset_enemy_guide
  269.     $game_system.enemy_encountered = []
  270.     $game_system.enemy_defeated = []
  271.     $game_system.enemy_item_dropped = []
  272.     $game_system.enemy_object_stolen = []
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # ○ 图鉴完成
  276.   #--------------------------------------------------------------------------
  277.   def complete_enemy_guide
  278.     (1...$data_enemies.size).each { |i|
  279.       set_enemy_encountered(i)
  280.       set_enemy_defeated(i)

  281.       enemy = $data_enemies[i]

  282.       items = [enemy.drop_item1, enemy.drop_item2]
  283.       if $imported["ExtraDropItem"]
  284.         items += enemy.extra_drop_items
  285.       end
  286.       items.each_index { |j| set_enemy_item_dropped(i, j) }

  287.       if $imported["Steal"]
  288.         objs = enemy.steal_objects
  289.         objs.each_index { |j| set_enemy_object_stolen(i, j) }
  290.       end
  291.     }
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ○ 已经获得图鉴?
  295.   #     enemy_id : 敌 ID
  296.   #--------------------------------------------------------------------------
  297.   def enemy_guide_include?(enemy_id)
  298.     return false unless KGC::EnemyGuide.enemy_show?(enemy_id)
  299.     enemy = $data_enemies[enemy_id]
  300.     return (enemy != nil && enemy.name != "")
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ○ 取得存在敌人的种类数
  304.   #     variable_id : 代入取得后的值的变量ID
  305.   #--------------------------------------------------------------------------
  306.   def get_all_enemies_number(variable_id = 0)
  307.     n = 0
  308.     (1...$data_enemies.size).each { |i|
  309.       n += 1 if enemy_guide_include?(i)
  310.     }
  311.     $game_variables[variable_id] = n if variable_id > 0
  312.     return n
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ○ 取得遭遇过敌人的种类数
  316.   #     variable_id : 代入取得后的值的变量ID
  317.   #--------------------------------------------------------------------------
  318.   def get_encountered_enemies_number(variable_id = 0)
  319.     n = 0
  320.     (1...$data_enemies.size).each { |i|
  321.       if enemy_guide_include?(i) && $game_system.enemy_encountered[i]
  322.         n += 1
  323.       end
  324.     }
  325.     $game_variables[variable_id] = n if variable_id > 0
  326.     return n
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ○ 取得击败过的敌人的种类数
  330.   #     variable_id : 代入取得后的值的变量ID
  331.   #--------------------------------------------------------------------------
  332.   def get_defeated_enemies_number(variable_id = 0)
  333.     n = 0
  334.     (1...$data_enemies.size).each { |i|
  335.       if enemy_guide_include?(i) && $game_system.enemy_encountered[i] &&
  336.           $game_system.enemy_defeated[i]
  337.         n += 1
  338.       end
  339.     }
  340.     $game_variables[variable_id] = n if variable_id > 0
  341.     return n
  342.   end
  343.   #--------------------------------------------------------------------------
  344.   # ○ 怪物图鉴完成度的取得
  345.   #     variable_id : 代入取得后的值的变量ID
  346.   #--------------------------------------------------------------------------
  347.   def get_enemy_guide_completion(variable_id = 0)
  348.     num = get_all_enemies_number
  349.     value = (num > 0 ? (get_defeated_enemies_number * 100 / num) : 0)
  350.     $game_variables[variable_id] = value if variable_id > 0
  351.     return value
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ○ 呼出怪物图鉴
  355.   #--------------------------------------------------------------------------
  356.   def call_enemy_guide
  357.     return if $game_temp.in_battle
  358.     $game_temp.next_scene = :enemy_guide
  359.   end
  360. end
  361. end

  362. class Game_Interpreter
  363.   include KGC::Commands
  364. end

  365. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  366. #==============================================================================
  367. # ■ Vocab
  368. #==============================================================================

  369. module Vocab
  370.   # 怪物图鉴
  371.   def self.enemy_guide
  372.     return KGC::EnemyGuide::VOCAB_MENU_ENEMY_GUIDE
  373.   end
  374. end

  375. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  376. #==============================================================================
  377. # ■ RPG::Enemy
  378. #==============================================================================

  379. class RPG::Enemy
  380.   #--------------------------------------------------------------------------
  381.   # ○ 怪物图鉴的存放处生成
  382.   #--------------------------------------------------------------------------
  383.   def create_enemy_guide_cache
  384.     @__enemy_guide_description = ""

  385.     description_flag = false
  386.     self.note.each_line { |line|
  387.       case line
  388.       when KGC::EnemyGuide::Regexp::Enemy::BEGIN_GUIDE_DESCRIPTION
  389.         # 说明文开始
  390.         description_flag = true
  391.       when KGC::EnemyGuide::Regexp::Enemy::END_GUIDE_DESCRIPTION
  392.         # 说明文结束
  393.         description_flag = false
  394.       else
  395.         if description_flag
  396.           @__enemy_guide_description += line
  397.         end
  398.       end
  399.     }
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ○ 图鉴说明文字
  403.   #--------------------------------------------------------------------------
  404.   def enemy_guide_description
  405.     create_enemy_guide_cache if @__enemy_guide_description == nil
  406.     return @__enemy_guide_description
  407.   end
  408. end

  409. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  410. #==============================================================================
  411. # ■ Game_System
  412. #==============================================================================

  413. class Game_System
  414.   #--------------------------------------------------------------------------
  415.   # ● 公开实例变量
  416.   #--------------------------------------------------------------------------
  417.   attr_writer   :enemy_encountered        # 遭遇过的标注
  418.   attr_writer   :enemy_defeated           # 击败过的标志
  419.   attr_writer   :enemy_item_dropped       # 物品掉落过的标志
  420.   attr_writer   :enemy_object_stolen      # 偷盗成功的标志
  421.   #--------------------------------------------------------------------------
  422.   # ○ 取得遭遇过的标志
  423.   #--------------------------------------------------------------------------
  424.   def enemy_encountered
  425.     @enemy_encountered = [] if @enemy_encountered == nil
  426.     return @enemy_encountered
  427.   end
  428.   #--------------------------------------------------------------------------
  429.   # ○ 取得击败过的标志
  430.   #--------------------------------------------------------------------------
  431.   def enemy_defeated
  432.     @enemy_defeated = [] if @enemy_defeated == nil
  433.     return @enemy_defeated
  434.   end
  435.   #--------------------------------------------------------------------------
  436.   # ○ 物品掉落过的标志
  437.   #--------------------------------------------------------------------------
  438.   def enemy_item_dropped
  439.     @enemy_item_dropped = [] if @enemy_item_dropped == nil
  440.     return @enemy_item_dropped
  441.   end
  442.   #--------------------------------------------------------------------------
  443.   # ○ 偷盗成功的标志
  444.   #--------------------------------------------------------------------------
  445.   def enemy_object_stolen
  446.     @enemy_object_stolen = [] if @enemy_object_stolen == nil
  447.     return @enemy_object_stolen
  448.   end
  449. end

  450. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  451. #==============================================================================
  452. # ■ Game_Enemy
  453. #==============================================================================

  454. class Game_Enemy < Game_Battler
  455.   #--------------------------------------------------------------------------
  456.   # ● 对象初始化
  457.   #     index    : 敌人队伍中的目录
  458.   #     enemy_id : 敌人造型 ID
  459.   #--------------------------------------------------------------------------
  460.   alias initialize_KGC_EnemyGuide initialize
  461.   def initialize(index, enemy_id)
  462.     initialize_KGC_EnemyGuide(index, enemy_id)

  463.     @original_ids = []  # 变身前的 ID
  464.     # 开启遭遇过标志
  465.     KGC::Commands.set_enemy_encountered(enemy_id) unless hidden
  466.   end
  467.   #--------------------------------------------------------------------------
  468.   # ● 破坏
  469.   #--------------------------------------------------------------------------
  470.   alias perform_collapse_KGC_EnemyGuide perform_collapse
  471.   def perform_collapse
  472.     last_collapsed = @collapse

  473.     perform_collapse_KGC_EnemyGuide

  474.     @collapse = true if $game_temp.in_battle and dead?

  475.     if !last_collapsed and @collapse
  476.       # 开启击败过标志
  477.       KGC::Commands.set_enemy_defeated(enemy_id)
  478.       # 变身前的敌人也按照击败过来处理
  479.       if KGC::EnemyGuide::ORIGINAL_DEFEAT
  480.         @original_ids.compact.each { |i|
  481.           KGC::Commands.set_enemy_defeated(i)
  482.         }
  483.       end
  484.     end
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ● 变身
  488.   #     enemy_id : 变身前敌人造型 ID
  489.   #--------------------------------------------------------------------------
  490.   alias transform_KGC_EnemyGuide transform
  491.   def transform(enemy_id)
  492.     # 保存变身前的敌人ID
  493.     @original_ids << @enemy_id

  494.     transform_KGC_EnemyGuide(enemy_id)

  495.     # 变身后的敌人也按照遭遇过来处理
  496.     KGC::Commands.set_enemy_encountered(enemy_id)
  497.   end
  498.   #--------------------------------------------------------------------------
  499.   # ● 隐藏状态的设定
  500.   #--------------------------------------------------------------------------
  501.   alias hidden_equal_KGC_EnemyGuide hidden= unless $@
  502.   def hidden=(value)
  503.     hidden_equal_KGC_EnemyGuide(value)
  504.     # 出现过的场合为开启遭遇过的标志
  505.     KGC::Commands.set_enemy_encountered(enemy_id) unless value
  506.   end
  507. end

  508. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  509. #==============================================================================
  510. # ■ Game_Troop
  511. #==============================================================================

  512. class Game_Troop < Game_Unit
  513.   #--------------------------------------------------------------------------
  514.   # ● 作成排列掉落物品
  515.   #--------------------------------------------------------------------------
  516.   def make_drop_items
  517.     drop_items = []
  518.     dead_members.each { |enemy|
  519.       [enemy.drop_item1, enemy.drop_item2].each_with_index { |di, i|
  520.         next if di.kind == 0
  521.         next if rand(di.denominator) != 0
  522.         if di.kind == 1
  523.           drop_items.push($data_items[di.item_id])
  524.         elsif di.kind == 2
  525.           drop_items.push($data_weapons[di.weapon_id])
  526.         elsif di.kind == 3
  527.           drop_items.push($data_armors[di.armor_id])
  528.         end
  529.         # 调整掉落过标志
  530.         KGC::Commands.set_enemy_item_dropped(enemy.enemy.id, i)
  531.       }
  532.     }
  533.     return drop_items
  534.   end
  535. end

  536. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  537. #==============================================================================
  538. # ■ Window_Command
  539. #==============================================================================
  540. class Window_Command < Window_Selectable
  541.   unless method_defined?(:add_command)
  542.   #--------------------------------------------------------------------------
  543.   # ○ 添加指令
  544.   #    返回添加位置
  545.   #--------------------------------------------------------------------------
  546.   def add_command(command)
  547.     @commands << command
  548.     @item_max = @commands.size
  549.     item_index = @item_max - 1
  550.     refresh_command
  551.     draw_item(item_index)
  552.     return item_index
  553.   end
  554.   #--------------------------------------------------------------------------
  555.   # ○ 刷新指令
  556.   #--------------------------------------------------------------------------
  557.   def refresh_command
  558.     buf = self.contents.clone
  559.     self.height = [self.height, row_max * WLH + 32].max
  560.     create_contents
  561.     self.contents.blt(0, 0, buf, buf.rect)
  562.     buf.dispose
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # ○ 插入指令
  566.   #--------------------------------------------------------------------------
  567.   def insert_command(index, command)
  568.     @commands.insert(index, command)
  569.     @item_max = @commands.size
  570.     refresh_command
  571.     refresh
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ○ 删除指令
  575.   #--------------------------------------------------------------------------
  576.   def remove_command(command)
  577.     @commands.delete(command)
  578.     @item_max = @commands.size
  579.     refresh
  580.   end
  581.   end
  582. end

  583. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  584. #==============================================================================
  585. # □ Window_EnemyGuideTop
  586. #------------------------------------------------------------------------------
  587. #   在怪物图鉴上显示完成度。
  588. #==============================================================================

  589. class Window_EnemyGuideTop < Window_Base
  590.   #--------------------------------------------------------------------------
  591.   # ● 对象初始化
  592.   #--------------------------------------------------------------------------
  593.   def initialize
  594.     super(0, 0, 240, WLH * 4 + 32)
  595.     self.height = WLH + 32
  596.     @duration = 0
  597.     @interval = KGC::EnemyGuide::INFO_INTERVAL
  598.     refresh

  599.     if KGC::EnemyGuide::USE_BACKGROUND_IMAGE
  600.       self.opacity = 0
  601.     end
  602.     if self.windowskin != nil
  603.       bitmap = Bitmap.new(windowskin.width, windowskin.height)
  604.       bitmap.blt(0, 0, windowskin, windowskin.rect)
  605.       bitmap.clear_rect(80, 16, 32, 32)
  606.       self.windowskin = bitmap
  607.     end
  608.   end
  609.   #--------------------------------------------------------------------------
  610.   # ● 释放
  611.   #--------------------------------------------------------------------------
  612.   def dispose
  613.     self.windowskin.dispose
  614.     super
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ● 更新
  618.   #--------------------------------------------------------------------------
  619.   def refresh
  620.     self.contents.clear
  621.     total = KGC::Commands.get_all_enemies_number
  622.     encountered = KGC::Commands.get_encountered_enemies_number
  623.     defeated = KGC::Commands.get_defeated_enemies_number

  624.     text = sprintf("遭遇数: %3d/%3d ",encountered, total)
  625.     self.contents.draw_text(0,       0, width - 32, WLH, text, 1)
  626.     self.contents.draw_text(0, WLH * 3, width - 32, WLH, text, 1)
  627.     text = sprintf("击破数: %3d/%3d", defeated, total)
  628.     self.contents.draw_text(0, WLH, width - 32, WLH, text, 1)
  629.     text = sprintf("完成度: %3d%%", defeated * 100 / total)
  630.     self.contents.draw_text(0, WLH * 2, width - 32, WLH, text, 1)
  631.   end
  632.   #--------------------------------------------------------------------------
  633.   # ● 帧更新
  634.   #--------------------------------------------------------------------------
  635.   def update
  636.     @duration += 1
  637.     case @duration
  638.     when @interval...(@interval + WLH)
  639.       self.oy += 1
  640.     when (@interval + WLH)
  641.       @duration = 0
  642.       if self.oy >= WLH * 3
  643.         self.oy = 0
  644.       end
  645.     end
  646.   end
  647. end

  648. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  649. #==============================================================================
  650. # □ Window_EnemyGuideList
  651. #------------------------------------------------------------------------------
  652. #   怪物图件上表示怪物一栏的窗口。
  653. #==============================================================================

  654. class Window_EnemyGuideList < Window_Selectable
  655.   #--------------------------------------------------------------------------
  656.   # ● 对象初始化
  657.   #--------------------------------------------------------------------------
  658.   def initialize
  659.     super(0, WLH + 32, 240, Graphics.height - (WLH + 32))
  660.     self.index = 0
  661.     refresh
  662.     if KGC::EnemyGuide::USE_BACKGROUND_IMAGE
  663.       self.opacity = 0
  664.       self.height -= (self.height - 32) % WLH
  665.     end
  666.   end
  667.   #--------------------------------------------------------------------------
  668.   # ○ 取得选择的怪物
  669.   #--------------------------------------------------------------------------
  670.   def item
  671.     return @data[self.index]
  672.   end
  673.   #--------------------------------------------------------------------------
  674.   # ○ 敌人的目录是否已获得
  675.   #     enemy_id : 敌 ID
  676.   #--------------------------------------------------------------------------
  677.   def include?(enemy_id)
  678.     return KGC::Commands.enemy_guide_include?(enemy_id)
  679.   end
  680.   #--------------------------------------------------------------------------
  681.   # ● 更新
  682.   #--------------------------------------------------------------------------
  683.   def refresh
  684.     @data = []
  685.     if KGC::EnemyGuide::ENEMY_ORDER_ID == nil
  686.       # ID顺序
  687.       enemy_list = 1...$data_enemies.size
  688.     else
  689.       # 指定顺序
  690.       enemy_list = KGC::EnemyGuide::ENEMY_ORDER_ID
  691.     end
  692.     enemy_list.each { |i|
  693.       @data << $data_enemies[i] if include?(i)
  694.     }
  695.     @item_max = @data.size
  696.     create_contents
  697.     for i in 0...@item_max
  698.       draw_item(i)
  699.     end
  700.   end
  701.   #--------------------------------------------------------------------------
  702.   # ● 项目的描绘
  703.   #     index : 项目编号
  704.   #--------------------------------------------------------------------------
  705.   def draw_item(index)
  706.     enemy = @data[index]
  707.     self.contents.font.color = normal_color
  708.     unless KGC::Commands.enemy_defeated?(enemy.id)
  709.       self.contents.font.color.alpha = 128
  710.     end
  711.     rect = item_rect(index)
  712.     self.contents.clear_rect(rect)

  713.     if KGC::EnemyGuide::SHOW_SERIAL_NUMBER
  714.       s_num = sprintf(KGC::EnemyGuide::SERIAL_NUM_FORMAT,
  715.         KGC::EnemyGuide::SERIAL_NUM_FOLLOW ? (index + 1) : enemy.id)
  716.     end

  717.     text = (KGC::EnemyGuide::SHOW_SERIAL_NUMBER ? s_num : "")
  718.     if KGC::Commands.enemy_encountered?(enemy.id)
  719.       # 遭遇过
  720.       text += enemy.name
  721.     else
  722.       # 未遭遇
  723.       mask = KGC::EnemyGuide::UNKNOWN_ENEMY_NAME
  724.       if mask.scan(/./).size == 1
  725.         mask = mask * enemy.name.scan(/./).size
  726.       end
  727.       text += mask
  728.     end
  729.     self.contents.draw_text(rect, text)
  730.   end
  731. end

  732. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

复制代码
Part2:
  1. #==============================================================================
  2. # □ Window_EnemyGuideStatus
  3. #------------------------------------------------------------------------------
  4. #   在怪物图件上、表示简介的窗口。
  5. #==============================================================================

  6. class Window_EnemyGuideStatus < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 公开实例变量
  9.   #--------------------------------------------------------------------------
  10.   attr_reader   :enemy                    # 表示敌人
  11.   #--------------------------------------------------------------------------
  12.   # ● 对象初始化
  13.   #--------------------------------------------------------------------------
  14.   def initialize
  15.     super(240, 0, Graphics.width - 240, Graphics.height)
  16.     self.enemy = nil
  17.     self.z = 100
  18.     if KGC::EnemyGuide::USE_BACKGROUND_IMAGE
  19.       self.opacity = 0
  20.     end
  21.     @show_sprite = false
  22.     @enemy_sprite = Sprite.new
  23.     @enemy_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
  24.     @enemy_sprite.x = 0
  25.     @enemy_sprite.y = 0
  26.     @enemy_sprite.z = self.z + 100
  27.     @enemy_sprite.visible = false
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 释放
  31.   #--------------------------------------------------------------------------
  32.   def dispose
  33.     super
  34.     @enemy_sprite.bitmap.dispose
  35.     @enemy_sprite.dispose
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ○ 物件页是否显示
  39.   #--------------------------------------------------------------------------
  40.   def item_page_show?
  41.     return true if KGC::EnemyGuide::SHOW_DROP_ITEM
  42.     return true if $imported["Steal"] && KGC::EnemyGuide::SHOW_STEAL_OBJ

  43.     return false
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ○ 取得页数
  47.   #--------------------------------------------------------------------------
  48.   def pages
  49.     return (item_page_show? ? 3 : 2)
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ○ 表示敌人设定
  53.   #--------------------------------------------------------------------------
  54.   def enemy=(enemy)
  55.     @enemy = enemy
  56.     refresh
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ○ 更改显示的信息
  60.   #     shamt : 移动页
  61.   #--------------------------------------------------------------------------
  62.   def shift_info_type(shamt)
  63.     n = self.ox + (width - 32) * shamt
  64.     self.ox = [[n, 0].max, (width - 32) * (pages - 1)].min
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ○ sprite的表示切换
  68.   #--------------------------------------------------------------------------
  69.   def switch_sprite
  70.     @show_sprite = !@show_sprite
  71.     @enemy_sprite.visible = @show_sprite
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 更新
  75.   #--------------------------------------------------------------------------
  76.   def refresh
  77.     original_width = self.width
  78.     self.width = original_width * pages - (32 * (pages - 1))
  79.     create_contents
  80.     self.width = original_width

  81.     draw_enemy_sprite

  82.     return if enemy == nil

  83.     self.contents.font.color = normal_color
  84.     # 没有遭遇
  85.     unless KGC::Commands.enemy_encountered?(enemy.id)
  86.       self.contents.font.color.alpha = 128
  87.       dy = (height - 32) / 2
  88.       dy -= dy % WLH
  89.       self.contents.draw_text(0, dy, width - 32, WLH,
  90.         KGC::EnemyGuide::UNENCOUNTERED_DATA, 1)
  91.       self.contents.blt(width - 32, 0, self.contents, self.contents.rect)
  92.       return
  93.     end

  94.     draw_status
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ○ 简介的描绘
  98.   #--------------------------------------------------------------------------
  99.   def draw_status
  100.     # Page 1
  101.     dy = draw_basic_info(0, 0)
  102.     dy = draw_parameter2(0, dy)
  103.     dy = draw_element(0, dy, 2)
  104.     dy = draw_state(0, dy, 2)
  105.     draw_prize(0, dy)

  106.     # Page 2 (如果你只看到相关的项目)
  107.     if item_page_show?
  108.       dx = width - 32
  109.       dy = draw_basic_info(dx, 0)
  110.       max_rows = (self.height - dy - 32) / WLH
  111.       rows = (max_rows + 1) / (pages - 1)
  112.       dy = draw_drop_item(dx, dy, rows)
  113.       draw_steal_object(dx, dy, max_rows - rows)
  114.     end

  115.     # Page 3
  116.     dx = (width - 32) * (pages - 1)
  117.     dy = draw_basic_info(dx, 0)
  118.     draw_description(dx, dy)
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ○ 基本请报页
  122.   #     dx, dy : 描画先 X, Y
  123.   #--------------------------------------------------------------------------
  124.   def draw_basic_info(dx, dy)
  125.     draw_graphic(dx, dy)
  126.     draw_parameter1(dx + 112, dy)
  127.     return dy + 96
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ○ 图解的描绘
  131.   #     dx, dy : 描画先 X, Y
  132.   #--------------------------------------------------------------------------
  133.   def draw_graphic(dx, dy)
  134.     buf = Bitmap.new(108, 96)
  135.     bitmap = Cache.battler(enemy.battler_name, enemy.battler_hue)
  136.     rect = Rect.new(0, 0, bitmap.width / 3, bitmap.height / 3)
  137.     rect.x = (108 - rect.width) / 2
  138.     rect.y = (96 - rect.height) / 2
  139.     buf.stretch_blt(rect, bitmap, bitmap.rect)
  140.     self.contents.blt(dx, dy, buf, buf.rect)
  141.     buf.dispose
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ○ 敌人精灵的描画
  145.   #--------------------------------------------------------------------------
  146.   def draw_enemy_sprite
  147.     return if @enemy_sprite == nil

  148.     @enemy_sprite.bitmap.fill_rect(@enemy_sprite.bitmap.rect,
  149.       Color.new(0, 0, 0, 160))

  150.     return if enemy == nil || !KGC::Commands.enemy_encountered?(enemy.id)

  151.     bitmap = Cache.battler(enemy.battler_name, enemy.battler_hue)
  152.     dx = (Graphics.width - bitmap.width) / 2
  153.     dy = (Graphics.height - bitmap.height) / 2
  154.     @enemy_sprite.bitmap.blt(dx, dy, bitmap, bitmap.rect)
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ○ 参数的描画 - 1
  158.   #     dx, dy : 描画先 X, Y
  159.   #--------------------------------------------------------------------------
  160.   def draw_parameter1(dx, dy)
  161.     # 名前, HP, MP
  162.     param = {}
  163.     if KGC::Commands.enemy_defeated?(enemy.id)
  164.       param[:maxhp] = enemy.maxhp
  165.       param[:maxmp] = enemy.maxmp
  166.       if $imported["BattleCount"]
  167.         param[:defeat_count] = KGC::Commands.get_defeat_count(enemy.id)
  168.       end
  169.     else
  170.       param[:maxhp] = param[:maxmp] = KGC::EnemyGuide::UNDEFEATED_PARAMETER
  171.       param[:defeat_count] = 0
  172.     end

  173.     self.contents.font.color = normal_color
  174.     self.contents.draw_text(dx, dy, width - 144, WLH, enemy.name)
  175.     self.contents.font.color = system_color
  176.     self.contents.draw_text(dx, dy + WLH,     80, WLH, Vocab.hp)
  177.     self.contents.draw_text(dx, dy + WLH * 2, 80, WLH, Vocab.mp)
  178.     if $imported["BattleCount"]
  179.       self.contents.draw_text(dx, dy + WLH * 3, 80, WLH,
  180.         KGC::EnemyGuide::PARAMETER_NAME[:defeat_count])
  181.     end
  182.     self.contents.font.color = normal_color
  183.     self.contents.draw_text(dx + 88, dy + WLH,     64, WLH, param[:maxhp], 2)
  184.     self.contents.draw_text(dx + 88, dy + WLH * 2, 64, WLH, param[:maxmp], 2)
  185.     if $imported["BattleCount"]
  186.       self.contents.draw_text(dx + 88, dy + WLH * 3, 64, WLH,
  187.         param[:defeat_count], 2)
  188.     end
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ○ 参数的描画 - 2
  192.   #     dx, dy : 描画先 X, Y
  193.   #--------------------------------------------------------------------------
  194.   def draw_parameter2(dx, dy)
  195.     # ATK ~ AGI
  196.     param = {}
  197.     if KGC::Commands.enemy_defeated?(enemy.id)
  198.       param[:atk]   = enemy.atk
  199.       param[:def]   = enemy.def
  200.       param[:spi]   = enemy.spi
  201.       param[:agi]   = enemy.agi
  202.     else
  203.       param[:atk] = param[:def] = param[:spi] = param[:agi] =
  204.         KGC::EnemyGuide::UNDEFEATED_PARAMETER
  205.     end

  206.     dw = (width - 32) / 2
  207.     self.contents.font.color = system_color
  208.     self.contents.draw_text(dx,      dy,       80, WLH, Vocab.atk)
  209.     self.contents.draw_text(dx + dw, dy,       80, WLH, Vocab.def)
  210.     self.contents.draw_text(dx,      dy + WLH, 80, WLH, Vocab.spi)
  211.     self.contents.draw_text(dx + dw, dy + WLH, 80, WLH, Vocab.agi)
  212.     dx += 80
  213.     self.contents.font.color = normal_color
  214.     self.contents.draw_text(dx,      dy,       48, WLH, param[:atk], 2)
  215.     self.contents.draw_text(dx + dw, dy,       48, WLH, param[:def], 2)
  216.     self.contents.draw_text(dx     , dy + WLH, 48, WLH, param[:spi], 2)
  217.     self.contents.draw_text(dx + dw, dy + WLH, 48, WLH, param[:agi], 2)
  218.     return dy + WLH * 2
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ○ 属性的描画
  222.   #     dx, dy : 描画先 X, Y
  223.   #     rows   : 行数
  224.   #--------------------------------------------------------------------------
  225.   def draw_element(dx, dy, rows = 1)
  226.     new_dy = dy + WLH * (rows * 2)
  227.     self.contents.font.color = system_color
  228.     self.contents.draw_text(dx, dy,              80, WLH,
  229.       KGC::EnemyGuide::PARAMETER_NAME[:weak_element])
  230.     self.contents.draw_text(dx, dy + WLH * rows, 80, WLH,
  231.       KGC::EnemyGuide::PARAMETER_NAME[:resist_element])

  232.     return new_dy unless KGC::Commands.enemy_defeated?(enemy.id)

  233.     cols = (width - 112) / 24
  234.     # 弱点属性
  235.     draw_icon_list(dx + 80, dy, rows, cols,
  236.       KGC::EnemyGuide::CHECK_ELEMENT_LIST,
  237.       Proc.new { |i| enemy.element_ranks[i] < 3 },
  238.       Proc.new { |i| KGC::EnemyGuide::ELEMENT_ICON[i] })
  239.     # 耐性属性
  240.     draw_icon_list(dx + 80, dy + WLH * rows, rows, cols,
  241.       KGC::EnemyGuide::CHECK_ELEMENT_LIST,
  242.       Proc.new { |i| enemy.element_ranks[i] > 3 },
  243.       Proc.new { |i| KGC::EnemyGuide::ELEMENT_ICON[i] })
  244.     return new_dy
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ○ ICON目录的描画
  248.   #     dx, dy          : 描画处 X, Y
  249.   #     rows, cols      : 行列数
  250.   #     item_list       : 描画对象的目录
  251.   #     cond_proc       : 描画条件 Proc
  252.   #     index_proc      : ICON index 取得用 Proc
  253.   #--------------------------------------------------------------------------
  254.   def draw_icon_list(dx, dy, rows, cols, item_list, cond_proc, index_proc)
  255.     nc = 0  # 现在的列数
  256.     nr = 0  # 先在的行数
  257.     item_list.each { |item|
  258.       next if item == nil
  259.       next unless cond_proc.call(item)
  260.       icon_index = index_proc.call(item)
  261.       next if icon_index == nil || icon_index == 0

  262.       draw_icon(icon_index, dx + nc * 24, dy + nr * 24)
  263.       nc += 1
  264.       if nc == cols
  265.         # 次の行へ
  266.         nc = 0
  267.         nr += 1
  268.         break if nr == rows  # 行制限オーバー
  269.       end
  270.     }
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ○ 状态的描画
  274.   #     dx, dy : 描画先 X, Y
  275.   #     rows   : 行数
  276.   #--------------------------------------------------------------------------
  277.   def draw_state(dx, dy, rows = 1)
  278.     new_dy = dy + WLH * (rows * 2)
  279.     self.contents.font.color = system_color
  280.     self.contents.draw_text(dx, dy,              80, WLH,
  281.       KGC::EnemyGuide::PARAMETER_NAME[:weak_state])
  282.     self.contents.draw_text(dx, dy + WLH * rows, 80, WLH,
  283.       KGC::EnemyGuide::PARAMETER_NAME[:resist_state])

  284.     return new_dy unless KGC::Commands.enemy_defeated?(enemy.id)

  285.     cols = (width - 112) / 24
  286.     # 弱点状态
  287.     draw_icon_list(dx + 80, dy, rows, cols,
  288.       $data_states,
  289.       Proc.new { |i| enemy.state_ranks[i.id] < 3 },
  290.       Proc.new { |i| i.icon_index })
  291.     # 无效状态
  292.     draw_icon_list(dx + 80, dy + WLH * rows, rows, cols,
  293.       $data_states,
  294.       Proc.new { |i| enemy.state_ranks[i.id] == 6 },
  295.       Proc.new { |i| i.icon_index })
  296.     return new_dy
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ○ EXP, Gold 描画
  300.   #     dx, dy : 描画先 X, Y
  301.   #--------------------------------------------------------------------------
  302.   def draw_prize(dx, dy)
  303.     param = {}
  304.     if KGC::Commands.enemy_defeated?(enemy.id)
  305.       param[:exp]  = enemy.exp
  306.       param[:gold] = enemy.gold
  307.       param[:ap]   = enemy.ap if $imported["EquipLearnSkill"]
  308.     else
  309.       param[:exp] = param[:gold] = param[:ap] =
  310.         KGC::EnemyGuide::UNDEFEATED_PARAMETER
  311.     end

  312.     dw = (width - 32) / 2
  313.     self.contents.font.color = system_color
  314.     self.contents.draw_text(dx,      dy, 80, WLH,
  315.       KGC::EnemyGuide::PARAMETER_NAME[:exp])
  316.     self.contents.draw_text(dx + dw, dy, 80, WLH, Vocab.gold)
  317.     if $imported["EquipLearnSkill"]
  318.       self.contents.draw_text(dx, dy + WLH, 80, WLH, Vocab.ap)
  319.     end

  320.     # EXP, Gold
  321.     dx += 76
  322.     self.contents.font.color = normal_color
  323.     self.contents.draw_text(dx,      dy, 52, WLH, param[:exp], 2)
  324.     self.contents.draw_text(dx + dw, dy, 52, WLH, param[:gold], 2)
  325.     if $imported["EquipLearnSkill"]
  326.       self.contents.draw_text(dx, dy + WLH, 52, WLH, param[:ap], 2)
  327.     end

  328.     return dy + WLH * 2
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ○ 战利品的描画
  332.   #     dx, dy : 描画先 X, Y
  333.   #     rows   : 行数
  334.   #--------------------------------------------------------------------------
  335.   def draw_drop_item(dx, dy, rows)
  336.     return dy unless KGC::EnemyGuide::SHOW_DROP_ITEM

  337.     new_dy = dy + WLH * rows
  338.     dw = (width - 32) / 2
  339.     self.contents.font.color = system_color
  340.     self.contents.draw_text(dx,      dy, 128, WLH,
  341.       KGC::EnemyGuide::PARAMETER_NAME[:treasure], 1)
  342.     self.contents.draw_text(dx + dw, dy, 128, WLH,
  343.       KGC::EnemyGuide::PARAMETER_NAME[:drop_prob], 2)

  344.     return new_dy unless KGC::Commands.enemy_defeated?(enemy.id)

  345.     # 列表
  346.     drop_items = [enemy.drop_item1, enemy.drop_item2]
  347.     if $imported["ExtraDropItem"]
  348.       drop_items += enemy.extra_drop_items
  349.     end

  350.     dy += WLH
  351.     count = 0
  352.     drop_items.each_with_index { |item, i|
  353.       # 物品名
  354.       case item.kind
  355.       when 0
  356.         next
  357.       when 1
  358.         drop_item = $data_items[item.item_id]
  359.       when 2
  360.         drop_item = $data_weapons[item.weapon_id]
  361.       when 3
  362.         drop_item = $data_armors[item.armor_id]
  363.       end
  364.       if KGC::Commands.enemy_item_dropped?(enemy.id, i)
  365.         draw_item_name(drop_item, dx, dy)
  366.       else
  367.         draw_masked_item_name(drop_item, dx, dy)
  368.       end
  369.       # 掉落率
  370.       if $imported["ExtraDropItem"] && item.drop_prob > 0
  371.         text = sprintf("%d%%", item.drop_prob)
  372.       else
  373.         text = "1/#{item.denominator}"
  374.       end
  375.       self.contents.draw_text(dx + dw, dy, 128, WLH, text, 2)
  376.       dy += WLH
  377.       count += 1
  378.       break if count == rows
  379.     }

  380.     return new_dy
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ○ 物品名为遮挡的描画
  384.   #     item    : 物品 (机能、武器、防具都可以)
  385.   #     x       : 描画处 X 坐标
  386.   #     y       : 描画出 Y 坐标
  387.   #     enabled : 有効标志。false 的时候半透明的描画
  388.   #--------------------------------------------------------------------------
  389.   def draw_masked_item_name(item, x, y, enabled = true)
  390.     return if item == nil

  391.     draw_icon(item.icon_index, x, y, enabled)
  392.     self.contents.font.color = normal_color
  393.     self.contents.font.color.alpha = enabled ? 255 : 128
  394.     mask = KGC::EnemyGuide::UNDROPPED_ITEM_NAME
  395.     text = KGC.mask_string(item.name, mask)
  396.     self.contents.draw_text(x + 24, y, 172, WLH, text)
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ○ 偷盗名为遮挡的描画
  400.   #     dx, dy : 描画先 X, Y
  401.   #     rows   : 行数
  402.   #--------------------------------------------------------------------------
  403.   def draw_steal_object(dx, dy, rows)
  404.     return dy unless $imported["Steal"] && KGC::EnemyGuide::SHOW_STEAL_OBJ

  405.     new_dy = dy + WLH * rows
  406.     dw = (width - 32) / 2
  407.     self.contents.font.color = system_color
  408.     self.contents.draw_text(dx,      dy, 128, WLH,
  409.       KGC::EnemyGuide::PARAMETER_NAME[:steal_obj], 1)
  410.     self.contents.draw_text(dx + dw, dy, 128, WLH,
  411.       KGC::EnemyGuide::PARAMETER_NAME[:steal_prob], 2)

  412.     return new_dy unless KGC::Commands.enemy_defeated?(enemy.id)

  413.     # 列表
  414.     steal_objects = enemy.steal_objects.clone
  415.     if steal_objects.size >= rows
  416.       steal_objects = steal_objects[0...(rows - 1)]
  417.     end

  418.     dy += WLH
  419.     steal_objects.each_with_index { |obj, i|
  420.       if obj.kind == 4
  421.         # Gold
  422.         if KGC::Commands.enemy_object_stolen?(enemy.id, i)
  423.           text = sprintf("%d%s", obj.gold, Vocab.gold)
  424.         else
  425.           mask = KGC::EnemyGuide::UNDROPPED_ITEM_NAME
  426.           text = KGC.mask_string("aaa", mask)
  427.         end
  428.         self.contents.draw_text(dx + 24, dy, dw, WLH, text)
  429.       else
  430.         # Item
  431.         case obj.kind
  432.         when 1
  433.           item = $data_items[obj.item_id]
  434.         when 2
  435.           item = $data_weapons[obj.weapon_id]
  436.         when 3
  437.           item = $data_armors[obj.armor_id]
  438.         end
  439.         if KGC::Commands.enemy_object_stolen?(enemy.id, i)
  440.           draw_item_name(item, dx, dy)
  441.         else
  442.           draw_masked_item_name(item, dx, dy)
  443.         end
  444.       end
  445.       # 成功率
  446.       if obj.success_prob > 0
  447.         text = sprintf("%d%%", obj.success_prob)
  448.       else
  449.         text = "1/#{obj.denominator}"
  450.       end
  451.       self.contents.draw_text(dx + dw, dy, 128, WLH, text, 2)
  452.       dy += WLH
  453.     }

  454.     return new_dy
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # ○ 说明文字描画
  458.   #     dx, dy : 描画先 X, Y
  459.   #--------------------------------------------------------------------------
  460.   def draw_description(dx, dy)
  461.     return unless KGC::Commands.enemy_defeated?(enemy.id)

  462.     dx += 4
  463.     enemy.enemy_guide_description.each_line { |line|
  464.       self.contents.draw_text(dx, dy, width - 32, WLH, line.chomp)
  465.       dy += WLH
  466.     }
  467.   end
  468. end

  469. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  470. #==============================================================================
  471. # ■ Scene_Map
  472. #==============================================================================

  473. class Scene_Map < Scene_Base
  474.   #--------------------------------------------------------------------------
  475.   # ● 实行画面的切换
  476.   #--------------------------------------------------------------------------
  477.   alias update_scene_change_KGC_EnemyGuide update_scene_change
  478.   def update_scene_change
  479.     return if $game_player.moving?    # 玩家的移动中?

  480.     if $game_temp.next_scene == :enemy_guide
  481.       call_enemy_guide
  482.       return
  483.     end

  484.     update_scene_change_KGC_EnemyGuide
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ○ 切换到怪物图鉴
  488.   #--------------------------------------------------------------------------
  489.   def call_enemy_guide
  490.     $game_temp.next_scene = nil
  491.     $scene = Scene_EnemyGuide.new(0, Scene_EnemyGuide::HOST_MAP)
  492.   end
  493. end

  494. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  495. #==============================================================================
  496. # ■ Scene_Menu
  497. #==============================================================================

  498. class Scene_Menu < Scene_Base
  499.   if KGC::EnemyGuide::USE_MENU_ENEMY_GUIDE_COMMAND
  500.   #--------------------------------------------------------------------------
  501.   # ● 作成指令窗口
  502.   #--------------------------------------------------------------------------
  503.   alias create_command_window_KGC_EnemyGuide create_command_window
  504.   def create_command_window
  505.     create_command_window_KGC_EnemyGuide

  506.     return if $imported["CustomMenuCommand"]

  507.     @__command_enemy_guide_index =
  508.       @command_window.add_command(Vocab.enemy_guide)
  509.     if @command_window.oy > 0
  510.       @command_window.oy -= Window_Base::WLH
  511.     end
  512.     @command_window.index = @menu_index
  513.   end
  514.   end
  515.   #--------------------------------------------------------------------------
  516.   # ● 指令选择的更新
  517.   #--------------------------------------------------------------------------
  518.   alias update_command_selection_KGC_EnemyGuide update_command_selection
  519.   def update_command_selection
  520.     current_menu_index = @__command_enemy_guide_index
  521.     call_enemy_guide_flag = false

  522.     if Input.trigger?(Input::C)
  523.       case @command_window.index
  524.       when @__command_enemy_guide_index  # 怪物图鉴
  525.         call_enemy_guide_flag = true
  526.       end
  527.     end

  528.     # 移动到怪物图鉴
  529.     if call_enemy_guide_flag
  530.       Sound.play_decision
  531.       $scene = Scene_EnemyGuide.new(@__command_enemy_guide_index,
  532.         Scene_EnemyGuide::HOST_MENU)
  533.       return
  534.     end

  535.     update_command_selection_KGC_EnemyGuide
  536.   end
  537. end

  538. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  539. #==============================================================================
  540. # □ Scene_EnemyGuide
  541. #------------------------------------------------------------------------------
  542. #   进行怪物图鉴画面的处理的目录。
  543. #==============================================================================

  544. class Scene_EnemyGuide < Scene_Base
  545.   HOST_MENU   = 0
  546.   HOST_MAP    = 1
  547.   #--------------------------------------------------------------------------
  548.   # ● 对象初始化
  549.   #     menu_index  : 指令光标初期位置
  550.   #     host_scene  : 呼出原处 (0..菜单  1..地图)
  551.   #--------------------------------------------------------------------------
  552.   def initialize(menu_index = 0, host_scene = HOST_MENU)
  553.     @menu_index = menu_index
  554.     @host_scene = host_scene
  555.   end
  556.   #--------------------------------------------------------------------------
  557.   # ● 开始的处理
  558.   #--------------------------------------------------------------------------
  559.   def start
  560.     super
  561.     create_menu_background
  562.     if KGC::EnemyGuide::USE_BACKGROUND_IMAGE
  563.       @back_sprite = Sprite.new
  564.       begin
  565.         @back_sprite.bitmap = Cache.system(KGC::EnemyGuide::BACKGROUND_FILENAME)
  566.       rescue
  567.         @back_sprite.bitmap = Bitmap.new(32, 32)
  568.       end
  569.     end

  570.     @top_window = Window_EnemyGuideTop.new
  571.     @enemy_window = Window_EnemyGuideList.new
  572.     @status_window = Window_EnemyGuideStatus.new
  573.     @status_window.enemy = @enemy_window.item
  574.   end
  575.   #--------------------------------------------------------------------------
  576.   # ● 退出场景
  577.   #--------------------------------------------------------------------------
  578.   def terminate
  579.     super
  580.     dispose_menu_background
  581.     if @back_sprite != nil
  582.       @back_sprite.bitmap.dispose
  583.       @back_sprite.dispose
  584.     end
  585.     @top_window.dispose
  586.     @enemy_window.dispose
  587.     @status_window.dispose
  588.   end
  589.   #--------------------------------------------------------------------------
  590.   # ○ 返回原菜单画面
  591.   #--------------------------------------------------------------------------
  592.   def return_scene
  593.     case @host_scene
  594.     when HOST_MENU
  595.       $scene = Scene_Menu.new(@menu_index)
  596.     when HOST_MAP
  597.       $scene = Scene_Map.new
  598.     end
  599.   end
  600.   #--------------------------------------------------------------------------
  601.   # ● 帧更新
  602.   #--------------------------------------------------------------------------
  603.   def update
  604.     super
  605.     update_menu_background
  606.     @top_window.update
  607.     @enemy_window.update
  608.     @status_window.update
  609.     if @enemy_window.active
  610.       update_enemy_selection
  611.     end
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # ○ 敌人选择的更新
  615.   #--------------------------------------------------------------------------
  616.   def update_enemy_selection
  617.     if @last_index != @enemy_window.index
  618.       @status_window.enemy = @enemy_window.item
  619.       @last_index = @enemy_window.index
  620.     end

  621.     if Input.trigger?(Input::B)
  622.       Sound.play_cancel
  623.       return_scene
  624.     elsif Input.trigger?(Input::A) || Input.trigger?(Input::C)
  625.       # sprte的表示切换
  626.       Sound.play_decision
  627.       @status_window.switch_sprite
  628.     elsif Input.trigger?(Input::LEFT)
  629.       # 参数表示
  630.       Sound.play_cursor
  631.       @status_window.shift_info_type(-1)
  632.     elsif Input.trigger?(Input::RIGHT)
  633.       # 说明表示
  634.       Sound.play_cursor
  635.       @status_window.shift_info_type(1)
  636.     end
  637.   end
  638. end
复制代码

评分

参与人数 4星屑 +580 收起 理由
MSQ + 12 华丽凑整
Rion幻音 + 60 翻译整合什么的最棒了~剑兰万岁~~.
一瞬间的幻觉 + 132 虽然暂时还用不上。。。但还是支持下.
DeathKing + 376 D计划鼓励。

查看全部评分

TA还没有解放自身的潜力。

Lv2.观梦者

梦石
0
星屑
255
在线时间
664 小时
注册时间
2010-6-30
帖子
223
发表于 2011-4-3 10:38:45 | 显示全部楼层
终于出了,我等了太久了!好东西怎么都没人顶起来?我沙发了!
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
75
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

发表于 2011-4-3 10:41:12 | 显示全部楼层
那个是什么字体?

点评

方正华隶简体 # FZHuaLi-M14S  发表于 2011-4-3 20:21

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
51
在线时间
2399 小时
注册时间
2008-4-11
帖子
12341

贵宾第6届短篇游戏比赛季军

发表于 2011-4-5 19:16:26 | 显示全部楼层
横版的战斗系统,未来几年都不会接触
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
78 小时
注册时间
2011-2-17
帖子
27
发表于 2011-4-25 10:38:30 | 显示全部楼层
     END_GUIDE_DESCRIPTION = /</(?:GUIDE_DESCRIPTION|图鉴说明)>/i

这一行错误代表什么冲突?谁能帮忙解答一下


杰莫于2011-4-29 08:12补充以下内容:
mask = mask * enemy.name.scan(/./).size

这一行的是什么意思呢,真不好意思又来麻烦您

点评

第781行呢,这个 mask = mask * enemy.name.scan(/./).size  发表于 2011-4-25 16:44
不知道是copy问题还是什么,应该是: /<\/(?:GUIDE_DESCRIPTION|图鉴说明)>/i 才对,这是正则表达式,漏了"\"。哎~发现原来一直没有人用这脚本= =   发表于 2011-4-25 11:09
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
195 小时
注册时间
2011-3-20
帖子
49
发表于 2011-6-4 21:56:28 | 显示全部楼层
那个……怎么起动脚本?

点评

呼叫菜单  发表于 2011-6-4 21:59
HI!!!
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
195 小时
注册时间
2011-3-20
帖子
49
发表于 2011-6-4 22:34:11 | 显示全部楼层
Arrff112 发表于 2011-6-4 21:56
那个……怎么起动脚本?

不是那个……是其他地方放置指令的方法……
HI!!!
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
163
在线时间
337 小时
注册时间
2011-3-11
帖子
101
发表于 2011-6-13 10:41:33 | 显示全部楼层
痾....怎樣才能插入怪獸的解說呢?

那個圖覽說明好像怪怪的沒辦法加入解說...
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

风雪夜不归人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2006-3-7
帖子
6721

贵宾

发表于 2011-6-13 15:02:31 | 显示全部楼层
闲逛中发现了很不错的脚本支持一下!
有些人,到了七八月份就会诈尸。
宫斗,是女生永远的爱。
冷门,是本人不变的欲。
作弊,是玩家自由的痛。
练级,是橙光割舍的情。
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
375
在线时间
10 小时
注册时间
2011-6-26
帖子
3
发表于 2011-7-8 15:03:36 | 显示全部楼层
咋么启动脚本啊?

点评

呼叫菜单啦  发表于 2011-7-8 17:14
回复 支持 反对

使用道具 举报

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

本版积分规则

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

站长信箱:fux2@moe9th.com|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2019-3-20 19:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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