Project1

标题: 怎么让怪物图鉴显示追加掉落物品 [打印本页]

作者: 44918131    时间: 2021-8-30 18:21
标题: 怎么让怪物图鉴显示追加掉落物品
本帖最后由 44918131 于 2021-8-30 18:24 编辑

我用了老鹰的追加掉落脚本,但是怪物图鉴不显示追加的掉落物,怎么能让他显示呢,求大佬告知,跪谢~~~[pre lang="ruby" file="追加掉落"]
  1. #==============================================================================
  2. # ■ 敌人追加物品掉落  by 老鹰
  3. #------------------------------------------------------------------------------
  4. #   - 新增敌人的额外物品掉落,可带触发条件
  5. #   - 在敌人栏备注内填入 (可用空格或逗号分隔内部各项)(可重复填入多行)
  6. #     <ex drop: 物品类型id 物品id 掉落概率分子 掉落概率分母 出现条件>
  7. #       物品类型id: 1 - 物品  2 - 武器  3 - 护甲 (此外的值均会导致无效)
  8. #       物品id: 对应类型的数据库中物品的id号
  9. #       掉落概率分子、掉落概率分母: 物品的掉落概率为 分子 / 分母
  10. #       出现条件(可选):当字符串被eval后返回的值为真时,允许这个物品掉落
  11. #         注: 可用 s 代表 $game_switches, v 代表 $game_variables
  12. #   - 举例:
  13. #      <ex drop: 1 1 1 2>
  14. #         - 以 1/2的概率 追加掉落 1号物品
  15. #      <ex drop: 2,10,2,5,$game_switches[1]>
  16. #         - 当1号开关开启时,以 2/5的概率 追加掉落 10号武器
  17. #      <ex drop: 3 1,1 1,$game_variables[1] > 5>
  18. #         - 当1号变量大于5时,一定 追加掉落 1号护甲
  19. #   - 实质:在战斗结束统计敌人掉落时,追加读取敌人数据库的note栏并追加掉落
  20. #==============================================================================

  21. class Game_Enemy < Game_Battler
  22.   #--------------------------------------------------------------------------
  23.   # ● 生成物品数组
  24.   #--------------------------------------------------------------------------
  25.   alias eagle_ex_drop_make_drop_items make_drop_items
  26.   def make_drop_items
  27.     array = eagle_ex_drop_make_drop_items
  28.     array += make_extra_drop_items
  29.     return array
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 生成额外物品数组
  33.   #--------------------------------------------------------------------------
  34.   def make_extra_drop_items
  35.     array = []
  36.     s = $game_switches
  37.     v = $game_variables
  38.     enemy.note.split(/[\r\n]+/).each do |line|
  39.       case line
  40.       when /<ex drop:[ ,]*(\d+)[ ,]*(\d+)[ ,]*(\d+)[ ,]*(\d+)[ ,]*(.*)>/
  41.         cond = $5.to_s
  42.         next if (cond != "" && eval(cond) == false)
  43.         item_kind = $1.to_i; item_id = $2.to_i
  44.         prob = $3.to_i * 1.0 / $4.to_i * drop_item_rate
  45.         array.push(item_object(item_kind, item_id)) if rand < prob
  46.       end
  47.     end
  48.     return array
  49.   end
  50. end
复制代码
[/pre]
作者: 44918131    时间: 2021-8-30 18:24
怪物图鉴脚本
  1. =begin
  2. 脚本里设定好敌人的类型
  3. 在敌人的备注里面填写 [ltype 类型代号]
  4. 没有填写时默认为 ENEMY_TYPE_DEFAULT 所设定的类型
  5. 其于相关设定请看脚本内注释的说明

  6. 在敌人的备注里面填写 [limage 文件名]
  7. 则可以指定显示敌人的图像
  8. 没有填写时则使用数据库里设定的战斗图
  9. 这项设定主要是针对想显示与战斗图不同或缩小版的图像所用
  10. 图片文件放在 游戏根目录/Graphics/EnemyImages 里面

  11. 在敌人的备注里面填写 [no_list],或是名称留空
  12. 则不会被列入图鉴当中

  13. 敌人的辨识度最高为 100 最低为 0
  14. 辨识度越高,则资讯窗口中显示越多
  15. 资讯显示辨识度百分比可以用脚本中 NAME_DISPLAY_PERC 等等这些常量去设定
  16. 具体说明请看注释

  17. 敌人的辨识度提升有三种方法
  18.   1. 战斗一开始,就会提升 1 点
  19.      数值可以修改 ENCOUNTER_PERCENT 来变更
  20.   2. 战斗中击败敌人,就会提升 5 点
  21.      数值可以修改 DEFEAT_PERCENT 来变更
  22.   3. 事件指令提升
  23.      事件调用 gain_enemy_percentage(敌人ID, 百分比)

  24. 调用敌人图鉴场景有两种方法
  25.   1. 事件指令调用
  26.      call_enemy_list 调用显示
  27.   2. 插入主菜单介面指令(默认)
  28.      可以在脚本里设定 ENEMY_LIST_SWITCH_ID 来设定开放的开关ID
  29.      设定为 0 则没有开关
  30.      也可以在脚本里设定 ENEMY_LIST_ENABLE_ID 来设定有效/无效的开关ID
  31.      当开关关闭时,主菜单中会显示,但是无法使用
  32.      设定为 0 则没有开关
  33.      或是设定成跟 ENEMY_LIST_SWITCH_ID 一样,则开启时则同时有效化
  34.      
  35. 在敌人图鉴中,进入敌人列表后,可以按左右键调整辨识度
  36. 此功能只有在游戏测试中有效。
  37. =end

  38. module Snstar
  39.   module EnemyList
  40.     # 敌人类型      0       1       2       3         4
  41.     ENEMY_TYPE = ["生物类","机械类","变种类","仿生类","赏金首"]
  42.     ENEMY_TYPE_DEFAULT = 0       # 敌人的默认类型
  43.     ENCOUNTER_PERCENT = 25        # 敌人现身所提升的辨识度
  44.     DEFEAT_PERCENT = 100           # 敌人战败所提升的辨识度
  45.     TEST_PERCENT = 5             # 测试用调整的辨识度
  46.     INCLUDE_ALL_CATEGORY = true  # 是否包含“全部”类型
  47.     ALL_CATEGORY_TEXT = "全部"   # “全部”类型的文字
  48.     ENEMY_MORE_INFO_BUTTON = :X  # 显示敌人更多资讯的按键
  49.     ENEMY_MORE_INFO = false      # 是否显示更多讯息(扩充用)
  50.    
  51.     DRAW_ENEMY_ICON = false # 需要使用绘制单张图标才能使用
  52.    
  53.     # 敌人图像大小限定
  54.     ENEMY_IMAGE_MAX_WIDTH = 260  # 敌人图像宽度限定170
  55.     ENEMY_IMAGE_MAX_HEIGHT = 192 # 敌人图像高度限定192
  56.     ENEMY_IMAGE_FOLDER = "Graphics/EnemyImages/" # 敌人指定图像资料夹
  57.     ENEMY_HUE_SYNC_DB = false # 敌人指定图像是否使用资料库设定的色相
  58.    
  59.     # 文字设定
  60.     ENEMY_LIST_COMMAND_TEXT = "异事录" # 主选单命令用字
  61.     ENEMY_LIST_SWITCH_ID    = 0        # 主选单命令显示的控制开关
  62.     ENEMY_LIST_ENABLE_ID    = 0        # 主选单命令有效的控制开关
  63.    
  64.     ENEMY_PERCENT_VOCAB = "辨识度"   # 辨识度用字
  65.     ENEMY_PERCENT_BASE_COLOR = Color.new(0, 255, 0)#Color.new(0, 0, 0)
  66.     ENEMY_PERCENT_FILL_COLOR = Color.new(255, 255, 0)
  67.     NO_DISPLAY_MASK = "??"         # 无法显示时的替代文字
  68.     EST_DISPLAY_MASK = "大约是%s"    # 显示估算数值时的文字
  69.     DROP_GOLD_VOCAB  = "金钱"
  70.     DROP_ITEM_VOCAB  = "掉落物"
  71.     FEA_WEAK_ELE_RATE = "弱点"    # 属性有效度 > 100% 的文字
  72.     FEA_RES_ELE_RATE  = "抵抗"    # 属性有效度 < 100% 的文字
  73.     FEA_DEBUFF_RATE   = "弱化属性"    # 弱化属性的文字
  74.     FEA_ATK_ELEMENT   = "属性"    # 攻击附带属性的文字
  75.    
  76.     # 辨识度提升数值
  77.     PERCENTAGE_ON_ENCOUNTER = 0 # 敌人现身时提升辨识度
  78.     PERCENTAGE_ON_DEFEAT    = 5 # 敌人落败时提升辨识度
  79.    
  80.     # 辨识度显示参数数值
  81.     NAME_DISPLAY_PERC   = 1   # 名称显示百分比
  82.     HP_EST_DISPLAY_PERC = 5   # HP估算显示百分比
  83.     HP_DISPLAY_PERC     = 10  # HP显示百分比
  84.     MP_EST_DISPLAY_PERC = 10  # MP估算显示百分比
  85.     MP_DISPLAY_PERC     = 15  # MP显示百分比
  86.     ATK_DISPLAY_PERC    = 50  # 攻击力显示百分比
  87.     DEF_DISPLAY_PERC    = 50  # 防御力显示百分比
  88.     MAT_DISPLAY_PERC    = 75  # 魔法攻击显示百分比
  89.     MDF_DISPLAY_PERC    = 75  # 魔法防御显示百分比
  90.     AGI_DISPLAY_PERC    = 75  # 敏捷显示百分比
  91.     LUK_DISPLAY_PERC    = 75  # 幸运显示百分比
  92.     GOLD_DISPLAY_PERC   = 100 # 掉落金钱显示百分比
  93.     ITEM_DISPLAY_PERC   = 10 # 掉落物显示百分比
  94.     #TYPE_BOSS
  95.   end
  96. end
  97. class RPG::Enemy < RPG::BaseItem
  98.   include Snstar::EnemyList
  99.   def list_type
  100.     self.note.split(/[\r\n]+/).each{ |line|
  101.       if line =~ /\[(?:ltype) (\d+)\]/
  102.         return $1 ? $1.to_i : ENEMY_TYPE_DEFAULT
  103.       end}
  104.     return ENEMY_TYPE_DEFAULT
  105.   end
  106.   def list_image
  107.     self.note.split(/[\r\n]+/).each{ |line|
  108.       if line =~ /\[(?:limage) (\S+)\]/
  109.         return $1
  110.       end}
  111.     return nil # battler_name
  112.   end
  113.   def no_list?
  114.     self.note.split(/[\r\n]+/).each{ |line|
  115.       return true if line =~ /\[no_list\]/
  116.       }
  117.     return false
  118.   end
  119. end
  120. class Game_Party < Game_Unit
  121.   include Snstar::EnemyList
  122.   #--------------------------------------------------------------------------
  123.   # ● 初始化
  124.   #--------------------------------------------------------------------------
  125.   alias enemy_list_initialize initialize
  126.   def initialize
  127.     enemy_list_initialize
  128.     @enemy_know_percentage=[]
  129.     $data_enemies.each{ |e|
  130.       next unless e
  131.       set_enemy_percentage(e.id, 0)
  132.     }
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 设置敌人百分比
  136.   #--------------------------------------------------------------------------
  137.   def set_enemy_percentage(e_id, percentage=100)
  138.     temp_p = [[0, percentage].max ,100].min
  139.     @enemy_know_percentage[e_id] = temp_p
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● 获取敌人百分比
  143.   #--------------------------------------------------------------------------
  144.   def enemy_percent(e_id)
  145.     return 0 unless seen_enemy?(e_id)
  146.     return @enemy_know_percentage[e_id]
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 提升敌人百分比
  150.   #--------------------------------------------------------------------------
  151.   def see_enemy(e_id, percentage = 1)
  152.     temp_p = @enemy_know_percentage[e_id] + percentage
  153.     set_enemy_percentage(e_id, temp_p)
  154.   end
  155.   def know_enemy(e_id)
  156.     set_enemy_percentage(e_id, 100)
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 判断是否见过敌人
  160.   #--------------------------------------------------------------------------
  161.   def seen_enemy?(e_id)
  162.     return @enemy_know_percentage[e_id] > 0
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● 判断是否熟知敌人
  166.   #--------------------------------------------------------------------------
  167.   def known_enemy?(e_id, percentage=100)
  168.     return false unless seen_enemy?(e_id)
  169.     return enemy_percent(e_id) == percentage
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 战斗开始提升辨识度
  173.   #--------------------------------------------------------------------------
  174.   alias enemy_list_on_battle_start on_battle_start
  175.   def on_battle_start
  176.     enemy_list_on_battle_start
  177.     $game_troop.members.each{ |m|
  178.       e_id = m.enemy.id
  179.       see_enemy(e_id, ENCOUNTER_PERCENT)
  180.     }
  181.   end
  182. end
  183. class Game_Enemy < Game_Battler
  184.   #--------------------------------------------------------------------------
  185.   # ● 敌人战败提升辨识度
  186.   #--------------------------------------------------------------------------
  187.   alias enemy_list_perform_collapse_effect perform_collapse_effect
  188.   def perform_collapse_effect
  189.     enemy_list_perform_collapse_effect
  190.     $game_party.see_enemy(@enemy_id, Snstar::EnemyList::DEFEAT_PERCENT)
  191.   end
  192. end
  193. class Game_Interpreter
  194.   #--------------------------------------------------------------------------
  195.   # ● 呼叫敌人图鉴场景
  196.   #--------------------------------------------------------------------------
  197.   def call_enemy_list
  198.     SceneManager.call(Scene_List)
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 提升敌人辨识度
  202.   #--------------------------------------------------------------------------
  203.   def gain_enemy_percentage(e_id, per)
  204.     $game_party.see_enemy(e_id, per)
  205.   end
  206. end




  207. class Window_EnemyType < Window_HorzCommand
  208.   include Snstar::EnemyList
  209.   #--------------------------------------------------------------------------
  210.   # ● 初始化
  211.   #--------------------------------------------------------------------------
  212.   def initialize(x, y, min_height=48)
  213.     super(x, y)
  214.     @min_height = min_height
  215.     @max_height = window_height
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 定义窗口宽度
  219.   #--------------------------------------------------------------------------
  220.   def window_width
  221.     Graphics.width
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ● 定义栏数
  225.   #--------------------------------------------------------------------------
  226.   def col_max
  227.     return 6
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 窗口更新
  231.   #--------------------------------------------------------------------------
  232.   def update
  233.     super
  234.     @item_window.category = current_symbol if @item_window
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ● 绘制敌人类型列表
  238.   #--------------------------------------------------------------------------
  239.   def make_command_list
  240.     add_command(ALL_CATEGORY_TEXT, :all) if INCLUDE_ALL_CATEGORY
  241.     ENEMY_TYPE.each{ |type|
  242.       add_command(type, type.to_sym)
  243.     }
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ● 设置敌人列表窗口
  247.   #--------------------------------------------------------------------------
  248.   def item_window=(item_window)
  249.     @item_window = item_window
  250.     update
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● 窗口有效化
  254.   #--------------------------------------------------------------------------
  255.   def activate
  256.     super
  257.     return unless @max_height
  258.     self.height = @max_height
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● 窗口失效
  262.   #--------------------------------------------------------------------------
  263.   def deactivate
  264.     super
  265.     return unless @min_height
  266.     self.height = @min_height
  267.     @item_window.select_last_index
  268.   end
  269. end
  270. class Window_EnemyList < Window_ItemList
  271.   include Snstar::EnemyList
  272.   #--------------------------------------------------------------------------
  273.   # ● 初始化
  274.   #--------------------------------------------------------------------------
  275.   def initialize(x, y, width, height)
  276.     super(x, y, width, height)
  277.     @last_index = {}
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● 选择上次索引
  281.   #--------------------------------------------------------------------------
  282.   def select_last_index
  283.     select(@last_index[@category])
  284.   end
  285.   def select(index)
  286.     super(index)
  287.     @info_window.enemy = @data[@index] if @info_window
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● 窗口失效
  291.   #--------------------------------------------------------------------------
  292.   def deactivate
  293.     super
  294.     return unless @last_index
  295.     @last_index[@category] = @index # 纪录当前敌人类型的索引
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 最大栏数
  299.   #--------------------------------------------------------------------------
  300.   def col_max
  301.     return 1
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● 生成敌人列表
  305.   #--------------------------------------------------------------------------
  306.   def make_item_list
  307.     @data = []
  308.     @last_index[@category] = 0 if @last_index[@category].nil?
  309.     selected_type = ENEMY_TYPE.index(@category.to_s)
  310.     $data_enemies.each{ |enemy|
  311.       next if enemy.nil?
  312.       next if enemy.name == "" # 名字为空的敌人跳过
  313.       next if enemy.no_list? # 指定不列入的敌人跳过
  314.       if @category == :all or (enemy.list_type == selected_type)
  315.         @data.push(enemy)
  316.       end
  317.     }
  318.   end
  319.   #--------------------------------------------------------------------------
  320.   # ● 绘制敌人项目
  321.   #--------------------------------------------------------------------------
  322.   def draw_item(index)
  323.     item = @data[index]
  324.     if item
  325.       rect = item_rect(index)
  326.       rect.width -= 4
  327.       draw_item_name(item, rect.x, rect.y)
  328.     end
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 绘制敌人名称
  332.   #--------------------------------------------------------------------------
  333.   def draw_item_name(item, x, y, enabled = true, width = 172)
  334.     return unless item
  335.     if DRAW_ENEMY_ICON
  336.       draw_icon(item.icon_index, x, y, enabled)
  337.       x += 24
  338.     end
  339.     change_color(normal_color, enabled)
  340.     per = $game_party.enemy_percent(item.id)
  341.     if  per >= NAME_DISPLAY_PERC
  342.       text = item.name
  343.     else
  344.       text = NO_DISPLAY_MASK
  345.     end
  346.     draw_text(x, y, width, line_height, text)
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ● 资讯窗口更新
  350.   #--------------------------------------------------------------------------
  351.   def update_info
  352.     @info_window.set_item(item)
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 设置资讯窗口
  356.   #--------------------------------------------------------------------------
  357.   def info_window=(info_window)
  358.     @info_window = info_window
  359.     #call_update_info
  360.   end
  361. end
  362. class Window_EnemyDetail < Window_Base
  363.   include Snstar::EnemyList
  364.   attr_reader :enemy
  365.   #--------------------------------------------------------------------------
  366.   # ● 初始化
  367.   #--------------------------------------------------------------------------
  368.   def initialize
  369.     super(160, 48, Graphics.width-160, Graphics.height-48)
  370.     @enemy = nil
  371.     @new_enemy = nil
  372.   end
  373.   #--------------------------------------------------------------------------
  374.   # ● 设置当前敌人
  375.   #--------------------------------------------------------------------------
  376.   def enemy=(e)
  377.     @enemy = e
  378.     if @enemy
  379.       @new_enemy = Game_Enemy.new(0,@enemy.id)
  380.     end
  381.     if enemy
  382.       @percentage = $game_party.enemy_percent(e.id) # 获取当前敌人辨识度
  383.     else
  384.       @percentage = 0
  385.     end
  386.     refresh
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● 检查当前辨识度百分比
  390.   #--------------------------------------------------------------------------
  391.   def checkPercent?(per)
  392.     return @percentage >= per
  393.   end
  394.   #--------------------------------------------------------------------------
  395.   # ● 窗口刷新
  396.   #--------------------------------------------------------------------------
  397.   def refresh
  398.     contents.clear
  399.     return unless @enemy # 无敌人时返回
  400.     return unless checkPercent?(NAME_DISPLAY_PERC) # 不显示名称时返回
  401.     @partial = false
  402.     draw_enemy_image(0, 0) # 绘制敌人图像
  403.     draw_enemy_name(0, ENEMY_IMAGE_MAX_HEIGHT) # 绘制敌人名称
  404.     draw_enemy_features(0, ENEMY_IMAGE_MAX_HEIGHT+line_height)
  405.     draw_enemy_percentage(0, ENEMY_IMAGE_MAX_HEIGHT+line_height*5) # 绘制敌人辨识度
  406.     partial_refresh
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ● 窗口半刷新
  410.   #--------------------------------------------------------------------------
  411.   def partial_refresh
  412.     return unless @enemy # 无敌人时返回
  413.     rect = Rect.new(ENEMY_IMAGE_MAX_WIDTH+8, 0,
  414.       contents.width-(ENEMY_IMAGE_MAX_WIDTH+8), contents.height-line_height)
  415.     contents.clear_rect(rect)
  416.     if ENEMY_MORE_INFO && @partial
  417.       Sound.play_cursor
  418.       draw_other_info
  419.       @partial = false
  420.     else
  421.       draw_enemy_hp(ENEMY_IMAGE_MAX_WIDTH+8, 0) # 绘制敌人体力
  422.       [2,3,6,7].each_with_index do |v,n|
  423.         draw_enemy_param(ENEMY_IMAGE_MAX_WIDTH+8, line_height*n+line_height,v) # 绘制敌人能力
  424.       end
  425.       draw_enemy_gold(ENEMY_IMAGE_MAX_WIDTH+8, line_height*5) # 绘制敌人掉落金
  426.       draw_enemy_item(ENEMY_IMAGE_MAX_WIDTH+8, line_height*6) # 绘制敌人掉落物
  427.       @partial = true
  428.     end
  429.   end
  430.   #--------------------------------------------------------------------------
  431.   # ● 绘制敌人特征
  432.   #--------------------------------------------------------------------------
  433.   def draw_enemy_features(x, y)
  434.     fy = y
  435.     value = RPGBOY.get_enemy_weak(@enemy.id)
  436.     change_color(system_color)
  437.     draw_text(x, fy, text_width(FEA_RES_ELE_RATE), line_height, FEA_RES_ELE_RATE)
  438.     change_color(normal_color)
  439.     draw_text(x+72, fy, text_width(value), line_height, value)
  440.     fy+=line_height
  441.     value = RPGBOY.get_enemy_res(@enemy.id)
  442.     change_color(system_color)
  443.     draw_text(x, fy, text_width(FEA_RES_ELE_RATE), line_height, FEA_WEAK_ELE_RATE)
  444.     change_color(normal_color)
  445.     draw_text(x+72, fy, text_width(value), line_height, value)
  446. =begin
  447.     for i in 0..4 do
  448.       feature = @enemy.features[i]
  449.       next unless feature
  450.       label, value = get_feature(feature)
  451.       next if label==""
  452.       change_color(system_color)
  453.       draw_text(x, fy, text_width(label), line_height, label)
  454.       change_color(normal_color)
  455.       draw_text(x+72, fy, text_width(value), line_height, value)
  456.       fy+=line_height
  457.     end
  458. =end
  459.   end
  460.   #--------------------------------------------------------------------------
  461.   # ● 获取敌人特征
  462.   #--------------------------------------------------------------------------
  463.   def get_feature(feature)
  464.     code = feature.code
  465.     id = feature.data_id
  466.     value = feature.value
  467.     return "", 0 unless [11, 31].include?(code)
  468.     if code == 11
  469.       if value < 1.0
  470.         label = FEA_RES_ELE_RATE
  471.       elsif value > 1.0
  472.         label = FEA_WEAK_ELE_RATE
  473.       else
  474.         return "", 0
  475.       end
  476.       element = $data_system.elements[id]
  477.       return_value = element + " #{value.truncate}倍"
  478.     elsif code == 31
  479.       label = FEA_ATK_ELEMENT
  480.       return_value = $data_system.elements[id]
  481.     end
  482.     return label, return_value
  483.   end
  484.   #--------------------------------------------------------------------------
  485.   # ● 绘制敌人图像
  486.   #--------------------------------------------------------------------------
  487.   def draw_enemy_image(x, y)
  488.     image_name = @enemy.list_image # 获取指定图像
  489.     if image_name.nil? # 指定图像为空时
  490.       image = Cache.battler(@enemy.battler_name, @enemy.battler_hue) # 获取战斗图
  491.     else
  492.       hue = ENEMY_HUE_SYNC_DB ? @enemy.battler_hue : 0
  493.       image = Cache.load_bitmap(ENEMY_IMAGE_FOLDER, image_name, hue) # 获取战斗图
  494.     end
  495.    
  496.     ix = (image.width/2-ENEMY_IMAGE_MAX_WIDTH/2).abs  # 获取中心点
  497.     # 敌人图像宽度在显示范围外
  498.     if image.width > ENEMY_IMAGE_MAX_WIDTH
  499.       # 居中对齐
  500.       rx = ix
  501.       cx = x
  502.     # 敌人图像宽度在显示范围外
  503.     else
  504.       # 居中对齐
  505.       rx = 0
  506.       cx = ix
  507.     end
  508.     # 敌人图像高度在显示范围外
  509.     if image.height > ENEMY_IMAGE_MAX_HEIGHT
  510.       cy = y
  511.     # 敌人图像高度在显示范围内
  512.     else
  513.       cy = ENEMY_IMAGE_MAX_HEIGHT - image.height - 8 # 向下对齐
  514.     end
  515.     rect = Rect.new(rx, 0, ENEMY_IMAGE_MAX_WIDTH, ENEMY_IMAGE_MAX_HEIGHT)
  516.     contents.blt(cx, cy, image, rect, 255)
  517.   end
  518.   #--------------------------------------------------------------------------
  519.   # ● 绘制敌人辨识度
  520.   #--------------------------------------------------------------------------
  521.   def draw_enemy_percentage(x, y)
  522.     width = contents.width
  523.     change_color(system_color)
  524.     text = ENEMY_PERCENT_VOCAB
  525.     draw_text(x, y, text_width(text), line_height, text)
  526.     # 绘制辨识度进度槽
  527.     draw_gauge(x+96, y, width - 96, @percentage.to_f/100,
  528.       ENEMY_PERCENT_BASE_COLOR, ENEMY_PERCENT_FILL_COLOR)
  529.     # 绘制百分比
  530.     change_color(normal_color)
  531.     text = "#{@percentage}%"
  532.     draw_text(x+96, y, text_width(text), line_height, text)
  533.   end
  534.   #--------------------------------------------------------------------------
  535.   # ● 绘制敌人名称
  536.   #--------------------------------------------------------------------------
  537.   def draw_enemy_name(x, y)
  538.     change_color(system_color)
  539.     text = "名称"
  540.     draw_text(x, y, text_width(text), line_height, text)
  541.     # 绘制名称
  542.     change_color(normal_color)
  543.     text = @enemy.name
  544.     draw_text(x+72, y, text_width(text), line_height, text)
  545.   end
  546.   #--------------------------------------------------------------------------
  547.   # ● 绘制敌人体力
  548.   #--------------------------------------------------------------------------
  549.   def draw_enemy_hp(x, y)
  550.     change_color(system_color)
  551.     text = Vocab::hp
  552.     draw_text(x, y, 108, line_height, text)
  553.     change_color(normal_color)
  554.     hp = @new_enemy.param_base(0,false)
  555.     # 判断显示百分比
  556.     if checkPercent?(HP_DISPLAY_PERC)
  557.       text = hp
  558.     elsif checkPercent?(HP_EST_DISPLAY_PERC)
  559.       # 计算体力约值
  560.       ahp = [(hp/10) * 10 - @enemy.params[3], 10].max
  561.       text = sprintf(EST_DISPLAY_MASK, ahp)
  562.     else
  563.       text = NO_DISPLAY_MASK
  564.     end
  565.     draw_text(x+72, y, text_width(text), line_height, text)
  566.   end
  567.   #--------------------------------------------------------------------------
  568.   # ● 绘制敌人魔力
  569.   #--------------------------------------------------------------------------
  570.   def draw_enemy_mp(x, y)
  571.     return
  572.     change_color(system_color)
  573.     text = Vocab::mp
  574.     draw_text(x, y, 108, line_height, text)
  575.     change_color(normal_color)
  576.     mp = @enemy.params[1]
  577.     # 判断显示百分比
  578.     if checkPercent?(MP_DISPLAY_PERC)
  579.       text = mp
  580.     elsif checkPercent?(MP_EST_DISPLAY_PERC)
  581.       # 计算魔力约值
  582.       amp = [(mp/10) * 10 - @new_enemy.param_base(5,false), @new_enemy.param_base(4,false), 5].max
  583.       text = sprintf(EST_DISPLAY_MASK, amp)
  584.     else
  585.       text = NO_DISPLAY_MASK
  586.     end
  587.     draw_text(x+72, y, text_width(text), line_height, text)
  588.   end
  589.   #--------------------------------------------------------------------------
  590.   # ● 绘制敌人能力值
  591.   #--------------------------------------------------------------------------
  592.   def draw_enemy_param(x, y, param_id)
  593.     # 能力值ID为1或2时,调用绘制体力/魔力方法
  594.     draw_enemy_hp(x, y) if param_id==0
  595.     return if param_id < 1
  596.     change_color(system_color)
  597.     # 绘制能力值名称
  598.     draw_text(x, y, 108, line_height, Vocab::param(param_id))
  599.     change_color(normal_color)
  600.     # 获取能力值百分比
  601.     param_percent = [0,0,ATK_DISPLAY_PERC,DEF_DISPLAY_PERC,
  602.                      0,0,AGI_DISPLAY_PERC,LUK_DISPLAY_PERC ]
  603.      #判断显示百分比
  604.     if checkPercent?(param_percent[param_id])
  605.       text = @new_enemy.param_base(param_id,false)
  606.     else
  607.       text = NO_DISPLAY_MASK
  608.     end
  609.     draw_text(x+72, y, text_width(text), line_height, text)
  610.   end
  611.   #--------------------------------------------------------------------------
  612.   # ● 绘制敌人掉落金钱
  613.   #--------------------------------------------------------------------------
  614.   def draw_enemy_gold(x, y)
  615.     change_color(system_color)
  616.     draw_text(x, y, 96, line_height, DROP_GOLD_VOCAB)
  617.     change_color(normal_color)
  618.     # 判断显示百分比
  619.     if checkPercent?(GOLD_DISPLAY_PERC)
  620.       draw_currency_value(@enemy.gold, Vocab.currency_unit, x+12, y, 108)
  621.     else
  622.       draw_text(x+72, y, 96, line_height, NO_DISPLAY_MASK)
  623.     end
  624.   end
  625.   #--------------------------------------------------------------------------
  626.   # ● 绘制敌人掉落物
  627.   #--------------------------------------------------------------------------
  628.   def draw_enemy_item(x, y)
  629.     change_color(system_color)
  630.     draw_text(x, y, 96, line_height, DROP_ITEM_VOCAB)
  631.     change_color(normal_color)
  632.     # 判断显示百分比
  633.     if checkPercent?(ITEM_DISPLAY_PERC)
  634.       nn_di = 0
  635.       for i in 0..2 do
  636.         di = item_object(@enemy.drop_items[i]) # 获取掉落物物件
  637.         if di
  638.           ly = y+line_height*(nn_di+1) # 计算绘制高度
  639.           draw_item_name(di, x+0, ly)
  640.           nn_di += 1 # 计数器+1
  641.         end
  642.       end
  643.       return if nn_di > 0 # 计数器大于0时返回
  644.       draw_text(x+80, y, 96, line_height, "无")
  645.     else
  646.       draw_text(x+24, y+line_height, 96, line_height, NO_DISPLAY_MASK)
  647.     end
  648.   end
  649.   #--------------------------------------------------------------------------
  650.   # ● 计算敌人掉落物
  651.   #--------------------------------------------------------------------------
  652.   def item_object(drop_item)
  653.     kind = drop_item.kind
  654.     data_id = drop_item.data_id
  655.     return $data_items  [data_id] if kind == 1
  656.     return $data_weapons[data_id] if kind == 2
  657.     return $data_armors [data_id] if kind == 3
  658.     return nil
  659.   end
  660.   #--------------------------------------------------------------------------
  661.   # ● 绘制其他资讯
  662.   #--------------------------------------------------------------------------
  663.   def draw_other_info
  664.    
  665.   end
  666.   #--------------------------------------------------------------------------
  667.   # ● 获得文字宽度
  668.   #--------------------------------------------------------------------------
  669.   def text_width(text)
  670.     return text_size(text).width + 5
  671.   end
  672. end


  673. class Scene_List < Scene_Base
  674.   include Snstar::EnemyList
  675.   #--------------------------------------------------------------------------
  676.   # ● 场景开始
  677.   #--------------------------------------------------------------------------
  678.   def start
  679.     super
  680.     create_category_window
  681.     create_list_window
  682.     create_detail_window
  683.     create_background
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # ● 结束处理
  687.   #--------------------------------------------------------------------------
  688.   def terminate
  689.     super
  690.     dispose_background
  691.   end
  692.   #--------------------------------------------------------------------------
  693.   # ● 生成背景
  694.   #--------------------------------------------------------------------------
  695.   def create_background
  696.     @background_sprite = Sprite.new
  697.     @background_sprite.bitmap = SceneManager.background_bitmap
  698.   end
  699.   #--------------------------------------------------------------------------
  700.   # ● 释放背景
  701.   #--------------------------------------------------------------------------
  702.   def dispose_background
  703.     @background_sprite.dispose
  704.   end
  705.   #--------------------------------------------------------------------------
  706.   # ● 创建敌人类型窗口
  707.   #--------------------------------------------------------------------------
  708.   def create_category_window
  709.     @category_window = Window_EnemyType.new(0, 0)
  710.     @category_window.set_handler(:ok,     method(:on_category_ok))
  711.     @category_window.set_handler(:cancel, method(:return_scene))
  712.     @category_window.viewport = @viewport
  713.   end
  714.   #--------------------------------------------------------------------------
  715.   # ● 创建敌人列表窗口
  716.   #--------------------------------------------------------------------------
  717.   def create_list_window
  718.     @list_window = Window_EnemyList.new(0, 48, 160, Graphics.height-48)
  719.     @list_window.set_handler(:cancel, method(:on_list_cancel))
  720.     @list_window.viewport = @viewport
  721.     @category_window.item_window = @list_window
  722.   end
  723.   #--------------------------------------------------------------------------
  724.   # ● 创建敌人讯息窗口
  725.   #--------------------------------------------------------------------------
  726.   def create_detail_window
  727.     @detail_window = Window_EnemyDetail.new
  728.     @list_window.info_window = @detail_window
  729.   end
  730.   #--------------------------------------------------------------------------
  731.   # ● 选择类型完成
  732.   #--------------------------------------------------------------------------
  733.   def on_category_ok
  734.     @list_window.activate
  735.     @list_window.select_last
  736.   end
  737.   #--------------------------------------------------------------------------
  738.   # ● 离开敌人列表
  739.   #--------------------------------------------------------------------------
  740.   def on_list_cancel
  741.     @list_window.unselect
  742.     @category_window.activate
  743.   end
  744.   #--------------------------------------------------------------------------
  745.   # ● 场景更新
  746.   #--------------------------------------------------------------------------
  747.   def update
  748.     super
  749.     on_list_partial_refersh if Input.trigger?(ENEMY_MORE_INFO_BUTTON)
  750.     enemy_percent_change(:left) if Input.trigger?(:LEFT)
  751.     enemy_percent_change(:right) if Input.trigger?(:RIGHT)
  752.   end
  753.   #--------------------------------------------------------------------------
  754.   # ● 敌人讯息半刷新
  755.   #--------------------------------------------------------------------------
  756.   def on_list_partial_refersh
  757.     @detail_window.partial_refresh
  758.   end
  759.   #--------------------------------------------------------------------------
  760.   # ● 更改敌人辨识度百分比(仅游戏测试时可用)
  761.   #--------------------------------------------------------------------------
  762.   def enemy_percent_change(sym)
  763.     return unless $TEST
  764.     return unless @list_window.active
  765.     enemy = @detail_window.enemy
  766.     return unless enemy
  767.     $game_party.see_enemy(enemy.id, TEST_PERCENT) if sym == :right
  768.     $game_party.see_enemy(enemy.id, -TEST_PERCENT) if sym == :left
  769.     @list_window.refresh
  770.     @detail_window.enemy = enemy
  771.   end
  772. end
复制代码

作者: KB.Driver    时间: 2021-8-31 00:06
把脚本拷到工程看了一下,你提供的脚本并不完整(原作者脚本是Main+window+scene三部分的)
于是我就把原版的脚本拷到下面看了一下,发现你用的图鉴有自己改过
例如445行:
RUBY 代码复制
  1. value = RPGBOY.get_enemy_weak(@enemy.id)

这里会报RPGBOY未定义。

建议提供完整可测试的脚本或工程,这样你的问题可能会更快得到解决。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1