Project1

标题: 求大神看看这个显示敌人信息脚本可以像这样改造吗~ [打印本页]

作者: RMVXA    时间: 2021-8-28 10:33
标题: 求大神看看这个显示敌人信息脚本可以像这样改造吗~
本帖最后由 RMVXA 于 2021-8-31 06:14 编辑

改造前:

改造后预期:


相当于显示敌人后缀的功能直接替换成为显示敌人信息的功能

脚本截图:


范例工程:
+敌人选择窗口改造.rar (1.59 MB, 下载次数: 31)


作者: KB.Driver    时间: 2021-8-28 10:33
RMVXA 发表于 2021-9-3 23:39
半夜爬起来上厕所看到的,习惯又用了点评Sorry。
这个图片只是演示了一下大概布局,不是最终的效 ...

简单写的,你可以看一下。

RUBY 代码复制
  1. module CLD99
  2.   module Config
  3.     # 是否固定状态绘制的起始位置
  4.     STATES_FIX_POS = false
  5.  
  6.     # 固定状态绘制的起始位置时,X坐标位置
  7.     STATES_X = 100
  8.  
  9.     # 是否固定状态绘制的宽度
  10.     STATES_FIX_WIDTH = false
  11.  
  12.     # 留给状态的最大宽度
  13.     STATES_WIDTH = 100
  14.  
  15.     # 状态的绘制间隔
  16.     STATE_MARGIN = 24
  17.  
  18.     # 状态与血条的间隔
  19.     STATE_PADDING = 8
  20.  
  21.     # 留给血条的宽度
  22.     GAUGE_WIDTH = 60
  23.  
  24.     # 血条与弱点的间隔
  25.     GAUGE_PADDING = 8
  26.  
  27.     # 当属性伤害到达多少倍时视作弱点属性
  28.     ELEMENT_RATIO = 1.5
  29.  
  30.     # 弱点的绘制间隔
  31.     ELEMENT_MARGIN = 24
  32.  
  33.     # 属性アイコン設定 [なし, 物理, 吸収, 炎, 氷, 雷, 水, 大地, 風, 神聖, 暗黒]
  34.     # iconのindexを上記の順に指定してください。
  35.     ELEMENT_ICONS = [0, 15, 10, 96, 97, 98, 99, 100, 101, 102, 103]
  36.   end
  37. end
  38.  
  39.  
  40. class Window_BattleEnemy
  41.  
  42.   include CLD99::Config
  43.  
  44.   alias draw_all_items_for_states_cld99 draw_all_items
  45.   def draw_all_items
  46.     begin
  47.       if STATES_FIX_POS
  48.         @_state_x = STATES_X
  49.       else
  50.         @_state_x = $game_troop.alive_members.map { |m|
  51.           self.text_size(m.name).width
  52.         }.max + 24
  53.       end
  54.  
  55.       if STATES_FIX_WIDTH
  56.         @_state_width = STATES_WIDTH
  57.       else
  58.         @_state_width = $game_troop.alive_members.map { |m|
  59.           [m.states.size - 1, (STATES_WIDTH - 24) / STATE_MARGIN].min
  60.         }.max * STATE_MARGIN + 24
  61.       end
  62.     rescue
  63.       @_state_x = STATES_X
  64.       @_state_width = STATES_WIDTH
  65.     end
  66.     draw_all_items_for_states_cld99
  67.   end
  68.  
  69.   alias draw_item_for_states_cld99 draw_item
  70.   def draw_item(index)
  71.     draw_item_for_states_cld99(index)
  72.     draw_item_states(index)
  73.     draw_item_gauge(index)
  74.     draw_item_weak(index)
  75.   end
  76.  
  77.   def draw_item_states(index)
  78.     return if $game_troop.alive_members.size < 1
  79.     if STATES_FIX_POS
  80.       x = STATES_X
  81.     else
  82.       x = $game_troop.alive_members.map { |m| self.text_size(m.name).width }.max + 24
  83.     end
  84.     @_state_x = x
  85.     enemy = $game_troop.alive_members[index]
  86.     rect = item_rect(index)
  87.     states = enemy.state_icons + enemy.buff_icons
  88.     states.each_with_index do |n, i|
  89.       break if x + 24 > @_state_x + STATES_WIDTH
  90.       draw_icon(n, x, rect.y)
  91.       x += STATE_MARGIN
  92.     end
  93.   end
  94.  
  95.   def draw_item_gauge(index)
  96.     return if $game_troop.alive_members.size < 1
  97.     x = @_state_x + @_state_width + STATE_PADDING
  98.     enemy = $game_troop.alive_members[index]
  99.     rect = item_rect(index)
  100.     text_rect = text_size(enemy.hp.to_s)
  101.  
  102.     draw_gauge(x, rect.y, GAUGE_WIDTH, enemy.hp_rate, hp_gauge_color1, hp_gauge_color2)
  103.     change_color(hp_color(enemy))
  104.     draw_text(x + GAUGE_WIDTH - text_rect.width, rect.y, text_rect.width, text_rect.height, enemy.hp)
  105.     change_color(normal_color)
  106.   end
  107.  
  108.   def draw_item_weak(index)
  109.     return if $game_troop.alive_members.size < 1
  110.     x = @_state_x + @_state_width + STATE_PADDING + GAUGE_WIDTH + GAUGE_PADDING
  111.     inc = 0
  112.     enemy = $game_troop.alive_members[index]
  113.     rect = item_rect(index)
  114.     width = rect.width - x
  115.  
  116.     1.upto($data_system.elements.size) do |i|
  117.       break if inc + 24 > width
  118.       next unless enemy.element_rate(i) >= ELEMENT_RATIO
  119.       draw_icon(ELEMENT_ICONS[i], x + inc, rect.y)
  120.       inc += ELEMENT_MARGIN
  121.     end
  122.   end
  123.  
  124. end





通过设置也可以固定状态的X值

作者: KB.Driver    时间: 2021-8-31 00:13
理论可行,不过工程没看到。
作者: RMVXA    时间: 2021-9-2 06:34
本帖最后由 RMVXA 于 2021-9-2 07:28 编辑
KB.Driver 发表于 2021-8-31 00:13
理论可行,不过工程没看到。


不好意思刚上线
我想在敌人的选择窗口里,敌人名字后面显示:
状态图标+血条(血条这里的话个别敌人如BOSS会显示问号) +弱点图标。
各元素的坐标跟我方窗口相同即可,把TP槽值的部分替换为显示弱点的图标了,而且敌人有时会多于4个,比我方数量多,这时菜单下拉...
这是我预想的结果,不知道能不能实现,感谢大神的回复~
作者: KB.Driver    时间: 2021-9-2 22:28
RMVXA 发表于 2021-9-2 06:34
不好意思刚上线 ,
我想在敌人的选择窗口里,敌人名字后面显示:
状态图标+血条(血条这里的话个 ...

你可能要想清楚,这还是没解决UI拥堵的问题。
敌人名字长的话,窗口后面那点长度不足以显示状态、血条、弱点。

相比之下, 有些现成的战斗系统做了仿XP的敌人选择,
上方会显示一个信息窗口,那里可以放很多东西

你可以考虑是否要用现成的脚本
作者: RMVXA    时间: 2021-9-3 06:50
本帖最后由 RMVXA 于 2021-9-3 06:56 编辑
KB.Driver 发表于 2021-9-2 22:28
你可能要想清楚,这还是没解决UI拥堵的问题。
敌人名字长的话,窗口后面那点长度不足以显示状态、血条、 ...


大神~ 我的敌人选择栏宽度跟我方一样的就像这样:
我方:

敌方:


改造后预想效果:(状态栏,血条的位置跟我方窗口完全相同)

菜鸟只会修改,完全不知道应该怎么添加新的上去,照着我方的脚本写也经常报错

作者: alexncf125    时间: 2021-9-3 07:25
冒昧问一下,主楼工程內的脚本是官方原裝版吗,怎么看上去有不少地方被注释了

顺道求一下官网网址或脚本出処,,,
作者: KB.Driver    时间: 2021-9-3 21:22
RMVXA 发表于 2021-9-3 06:50
大神~ 我的敌人选择栏宽度跟我方一样的就像这样:
我方:

想做得更像的话,你可以提供一下这个血条的素材
作者: RMVXA    时间: 2021-9-3 23:39
KB.Driver 发表于 2021-9-3 21:22
想做得更像的话,你可以提供一下这个血条的素材

半夜爬起来上厕所看到的,习惯又用了点评Sorry
这个图片只是演示了一下大概布局,不是最终的效果。
主要是不知道怎么添加这些模块,调整参数这种细节我就比较擅长啦。
还有这个血条用的是KMS的槽值美化脚本。




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