Project1

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

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

改造前:
(, 下载次数: 146)
改造后预期:
(, 下载次数: 148)

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

脚本截图:
(, 下载次数: 170)

范例工程:
(, 下载次数: 31)


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

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

[pre lang="ruby"]
module CLD99
  module Config
    # 是否固定状态绘制的起始位置
    STATES_FIX_POS = false
   
    # 固定状态绘制的起始位置时,X坐标位置
    STATES_X = 100

    # 是否固定状态绘制的宽度
    STATES_FIX_WIDTH = false
   
    # 留给状态的最大宽度
    STATES_WIDTH = 100
   
    # 状态的绘制间隔
    STATE_MARGIN = 24

    # 状态与血条的间隔
    STATE_PADDING = 8

    # 留给血条的宽度
    GAUGE_WIDTH = 60

    # 血条与弱点的间隔
    GAUGE_PADDING = 8

    # 当属性伤害到达多少倍时视作弱点属性
    ELEMENT_RATIO = 1.5

    # 弱点的绘制间隔
    ELEMENT_MARGIN = 24

    # 属性アイコン設定 [なし, 物理, 吸収, 炎, 氷, 雷, 水, 大地, 風, 神聖, 暗黒]
    # iconのindexを上記の順に指定してください。
    ELEMENT_ICONS = [0, 15, 10, 96, 97, 98, 99, 100, 101, 102, 103]
  end
end


class Window_BattleEnemy
  
  include CLD99::Config

  alias draw_all_items_for_states_cld99 draw_all_items
  def draw_all_items
    begin
      if STATES_FIX_POS
        @_state_x = STATES_X
      else
        @_state_x = $game_troop.alive_members.map { |m|
          self.text_size(m.name).width
        }.max + 24
      end
   
      if STATES_FIX_WIDTH
        @_state_width = STATES_WIDTH
      else
        @_state_width = $game_troop.alive_members.map { |m|
          [m.states.size - 1, (STATES_WIDTH - 24) / STATE_MARGIN].min
        }.max * STATE_MARGIN + 24
      end
    rescue
      @_state_x = STATES_X
      @_state_width = STATES_WIDTH
    end
    draw_all_items_for_states_cld99
  end
  
  alias draw_item_for_states_cld99 draw_item
  def draw_item(index)
    draw_item_for_states_cld99(index)
    draw_item_states(index)
    draw_item_gauge(index)
    draw_item_weak(index)
  end

  def draw_item_states(index)
    return if $game_troop.alive_members.size < 1
    if STATES_FIX_POS
      x = STATES_X
    else
      x = $game_troop.alive_members.map { |m| self.text_size(m.name).width }.max + 24
    end
    @_state_x = x
    enemy = $game_troop.alive_members[index]
    rect = item_rect(index)
    states = enemy.state_icons + enemy.buff_icons
    states.each_with_index do |n, i|
      break if x + 24 > @_state_x + STATES_WIDTH
      draw_icon(n, x, rect.y)
      x += STATE_MARGIN
    end
  end

  def draw_item_gauge(index)
    return if $game_troop.alive_members.size < 1
    x = @_state_x + @_state_width + STATE_PADDING
    enemy = $game_troop.alive_members[index]
    rect = item_rect(index)
    text_rect = text_size(enemy.hp.to_s)

    draw_gauge(x, rect.y, GAUGE_WIDTH, enemy.hp_rate, hp_gauge_color1, hp_gauge_color2)
    change_color(hp_color(enemy))
    draw_text(x + GAUGE_WIDTH - text_rect.width, rect.y, text_rect.width, text_rect.height, enemy.hp)
    change_color(normal_color)
  end

  def draw_item_weak(index)
    return if $game_troop.alive_members.size < 1
    x = @_state_x + @_state_width + STATE_PADDING + GAUGE_WIDTH + GAUGE_PADDING
    inc = 0
    enemy = $game_troop.alive_members[index]
    rect = item_rect(index)
    width = rect.width - x
   
    1.upto($data_system.elements.size) do |i|
      break if inc + 24 > width
      next unless enemy.element_rate(i) >= ELEMENT_RATIO
      draw_icon(ELEMENT_ICONS, x + inc, rect.y)
      inc += ELEMENT_MARGIN
    end
  end

end[/pre]

(, 下载次数: 157)
(, 下载次数: 165)

通过设置也可以固定状态的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拥堵的问题。
敌人名字长的话,窗口后面那点长度不足以显示状态、血条、 ...


大神~ 我的敌人选择栏宽度跟我方一样的就像这样:
我方:
(, 下载次数: 143)
敌方:
(, 下载次数: 155)

改造后预想效果:(状态栏,血条的位置跟我方窗口完全相同)
(, 下载次数: 152)
菜鸟只会修改,完全不知道应该怎么添加新的上去,照着我方的脚本写也经常报错

作者: 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! X5.0