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

Project1

 找回密码
 注册会员
搜索
查看: 4304|回复: 3

[已经过期] 只想在VA默认的战斗系统上增加伤害值显示,怎么弄?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
30 小时
注册时间
2012-2-7
帖子
19
发表于 2012-2-27 22:43:53 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 humzlo 于 2012-2-28 17:16 编辑

只想在VA默认的战斗系统上增加伤害值显示,怎么弄?下了一个横版的战斗脚本 只喜欢那个伤害值显示

哪位高人指点一下?谢谢

点评

如题?请先看看版规,请不要用如题,要扣分的。  发表于 2012-2-28 00:20

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-8-19
帖子
7
发表于 2012-3-12 12:50:53 | 显示全部楼层
我也很想知道!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
69 小时
注册时间
2012-3-3
帖子
79
发表于 2012-3-13 10:49:34 | 显示全部楼层

  1. #==============================================================================
  2. # 功能:战斗中显示怪物受到的伤害和回复
  3. # 适用:RMVX Ace
  4. # 作者:殇殃 2012.3.13 改自 后知后觉的横版战斗模板v1.7  2012-02-09
  5. # 使用方法:复制整个脚本插入到Main之前
  6. #==============================================================================
  7. # ■ Sprite_Damage (新增类)
  8. #==============================================================================
  9. class Sprite_Damage < Sprite
  10.   #--------------------------------------------------------------------------
  11.   # ● 获取/生成伤害值源图
  12.   #--------------------------------------------------------------------------
  13.   @@obmp = nil
  14.   def self.obmp
  15.     if @@obmp.nil? or @@obmp.disposed?
  16.       @@obmp = Bitmap.new(180, 256)
  17.       #@@obmp.font.bold = true #粗黑体
  18.       #@@obmp.font.shadow = false #阴影
  19.       #@@obmp.font.outline = true #数字外围边框
  20.       @@obmp.font.out_color = Color.new(255, 255, 255, 255)
  21.       @@obmp.font.size = 32
  22.       colors = []
  23.       colors.push(Color.new(255,   0,   0, 255))#HP伤害颜色(红)
  24.       colors.push(Color.new(  0, 224,  96, 255))#HP回复颜色(亮绿)
  25.       colors.push(Color.new(  0,   0, 255, 255))#MP伤害颜色(蓝)
  26.       colors.push(Color.new(255, 255,  64, 255))#MP回复颜色(亮黄)
  27.       colors.push(Color.new(  0,   0,   0, 255))#TP伤害颜色(深黑)
  28.       colors.push(Color.new(255, 255, 255, 255))#TP回复颜色(白)
  29.       #Graphics/System/damage.png伤害图8行10列180×256
  30.       #第 1 行 HP 伤害数字0~9
  31.       #第 2 行 HP 回复数字0~9
  32.       #第 3 行 MP 伤害数字0~9
  33.       #第 4 行 MP 回复数字0~9
  34.       #第 5 行 TP 伤害数字0~9
  35.       #第 6 行 TP 回复数字0~9
  36.       #第 7 行 左边暴击(Critical)右边 攻击落空(Miss)
  37.       #第 8 行 左边闪避(Evasion) 右边 留空
  38.       colors.each_with_index do |color, hi| #每个数字占18×32
  39.         @@obmp.font.color = color
  40.         for wi in 0..9
  41.           @@obmp.draw_text(wi * 18, hi * 32, 18, 32, "#{wi}", 1)
  42.         end
  43.       end
  44.       @@obmp.font.size = 24 #字体大小
  45.       #@@obmp.font.italic = true #斜体
  46.       @@obmp.font.out_color = Color.new(0, 0, 0, 255)
  47.       @@obmp.font.color = Color.new(255,   0, 255, 255)#暴击等文字的颜色(亮粉红)
  48.       @@obmp.draw_text( 0, 192, 90, 32, "暴击", 1)
  49.       @@obmp.draw_text(90, 192, 90, 32, "Miss", 1)
  50.       @@obmp.draw_text( 0, 224, 90, 32, "闪避", 1)
  51.       #@@obmp.hue_change(0)# 设置伤害值图形的色相 取值范围 0~360
  52.     end
  53.     return @@obmp
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 初始化
  57.   #--------------------------------------------------------------------------
  58.   def initialize(viewport, args)
  59.     super(viewport)
  60.     @type = args[0] #伤害类型hp、mp、tp
  61.     @value = args[1] #伤害值
  62.     @critical = args[2] #是否暴击
  63.     self.x = args[4]
  64.     self.y = args[5]
  65.     self.z = args[6] + Graphics.height * 5
  66.     make_move(args[3])
  67.     refresh
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 生成移动数据
  71.   #--------------------------------------------------------------------------
  72.   def make_move(battler_obj_class)
  73.     @move = []
  74.     case battler_obj_class
  75.     when :actor
  76.       make_move_actor
  77.     when :enemy
  78.       make_move_enemy
  79.     else
  80.       make_move_default
  81.     end
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 生成移动数据 默认
  85.   #--------------------------------------------------------------------------
  86.   def make_move_default
  87.     45.times do |n|
  88.       if n % 3 == 0
  89.         ady = n < 21 ? -6 : -1
  90.         opa = n < 21 ? 255 : 255-(n-21)*6
  91.         @move.push([0, ady, opa])
  92.       else
  93.         @move.push([0, 0, -1])
  94.       end
  95.     end
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 生成移动数据 角色
  99.   #--------------------------------------------------------------------------
  100.   def make_move_actor
  101.     make_move_default
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 生成移动数据 敌人
  105.   #--------------------------------------------------------------------------
  106.   def make_move_enemy
  107.     make_move_default
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 描绘
  111.   #--------------------------------------------------------------------------
  112.   def refresh
  113.     if not self.bitmap.nil?
  114.       self.bitmap.dispose
  115.       self.bitmap = nil
  116.     end
  117.     begin
  118.       @obmp = Cache.system("damage")
  119.     rescue Errno::ENOENT
  120.       @obmp = Sprite_Damage.obmp #找不到伤害值显示图则使用自建的代替图
  121.     end
  122.     @numw = @obmp.width / 10
  123.     @numh = @obmp.height / 8
  124.     @strw = @obmp.width / 2
  125.     case @value
  126.     when Numeric #伤害值是数字
  127.       blt_obmp_numeric
  128.     when Symbol #伤害值是文字
  129.       blt_obmp_text
  130.     end
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 通过源图描绘数字
  134.   #--------------------------------------------------------------------------
  135.   def blt_obmp_numeric
  136.     nums = @value.to_i.abs.to_s.split("")
  137.     nbmpw = nums.size * @numw
  138.     bmph = @numh
  139.     cbmpw = 0
  140.     crect = nil
  141.     dy = 0
  142.     if @critical
  143.       cbmpw = @strw
  144.       bmph *= 2
  145.       crect = Rect.new(0, @numh * 6, @strw, @numh)
  146.       dy = @numh
  147.     end
  148.     self.bitmap = Bitmap.new([nbmpw, cbmpw, 32].max, [bmph, 32].max)
  149.     self.ox = bitmap.width / 2
  150.     self.oy = bmph /2
  151.     bitmap.blt((bitmap.width - cbmpw) / 2, 0, @obmp, crect) if crect
  152.     dx = (bitmap.width - nbmpw) / 2
  153.     ry = 0
  154.     case @type
  155.     when :hp
  156.       ry = @value >= 0 ? 0 : @numh
  157.     when :mp
  158.       ry = @value >= 0 ? @numh * 2 : @numh * 3
  159.     when :tp
  160.       ry = @value >= 0 ? @numh * 4 : @numh * 5
  161.     else
  162.       return
  163.     end
  164.     rect = Rect.new(0, ry, @numw, @numh)
  165.     nums.each_with_index do |str, i|
  166.       rect.x = str.to_i * @numw
  167.       bitmap.blt(dx, dy, @obmp, rect)
  168.       dx += @numw
  169.     end
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 通过源图描绘文字
  173.   #--------------------------------------------------------------------------
  174.   def blt_obmp_text
  175.     self.bitmap = Bitmap.new([@strw, 32].max, [@numh, 32].max)
  176.     self.ox = @strw / 2
  177.     self.oy = @numh / 2
  178.     rx = ry = 0
  179.     case @type
  180.     when :miss
  181.       rx = @strw
  182.       ry = @numh * 6
  183.     when :eva
  184.       ry = @numh * 7
  185.     else
  186.       return
  187.     end
  188.     rect = Rect.new(rx, ry, @strw, @numh)
  189.     bitmap.blt(0, 0, @obmp, rect)
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ● 释放
  193.   #--------------------------------------------------------------------------
  194.   def dispose
  195.     bitmap.dispose if bitmap
  196.     super
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 移动中判定
  200.   #--------------------------------------------------------------------------
  201.   def moving?
  202.     return (not @move.empty?)
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 刷新
  206.   #--------------------------------------------------------------------------
  207.   def update
  208.     super
  209.     if moving?
  210.       ary = @move.shift
  211.       self.x += ary[0]
  212.       self.y += ary[1]
  213.       self.opacity = ary[2] if ary[2] >= 0
  214.     end
  215.   end
  216. end

  217. #==============================================================================
  218. # ■ Window_BattleLog
  219. #==============================================================================
  220. class Window_BattleLog < Window_Selectable
  221.   #--------------------------------------------------------------------------
  222.   # ● 显示 MISS (追加定义)
  223.   #--------------------------------------------------------------------------
  224.   alias hzhj_old_display_miss_for_display_damage_wnd_btlog display_miss
  225.   def display_miss(target, item)
  226.     target.damage_for_show = [:miss, :miss, false]
  227.     hzhj_old_display_miss_for_display_damage_wnd_btlog(target, item)
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 显示回避 (追加定义)
  231.   #--------------------------------------------------------------------------
  232.   alias hzhj_old_display_evasion_for_display_damage_wnd_btlog display_evasion
  233.   def display_evasion(target, item)
  234.     target.damage_for_show = [:eva, :evasion, false]
  235.     hzhj_old_display_evasion_for_display_damage_wnd_btlog(target, item)
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ● 显示 HP 伤害 (追加定义)
  239.   #--------------------------------------------------------------------------
  240.   alias hzhj_old_display_hp_damage_for_display_damage_wnd_btlog display_hp_damage
  241.   def display_hp_damage(target, item)
  242.     return if target.result.hp_damage == 0 && item && !item.damage.to_hp?
  243.     value = target.result.hp_damage
  244.     critical = target.result.critical
  245.     target.damage_for_show = [:hp, value, critical]
  246.     hzhj_old_display_hp_damage_for_display_damage_wnd_btlog(target, item)
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● 显示 MP 伤害 (追加定义)
  250.   #--------------------------------------------------------------------------
  251.   alias hzhj_old_display_mp_damage_for_display_damage_wnd_btlog display_mp_damage
  252.   def display_mp_damage(target, item)
  253.     return if target.dead? || target.result.mp_damage == 0
  254.     value = target.result.mp_damage
  255.     critical = target.result.critical
  256.     target.damage_for_show = [:mp, value, critical]
  257.     hzhj_old_display_mp_damage_for_display_damage_wnd_btlog(target, item)
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● 显示 TP 伤害 (追加定义)
  261.   #--------------------------------------------------------------------------
  262.   alias hzhj_old_display_tp_damage_for_display_damage_wnd_btlog display_tp_damage
  263.   def display_tp_damage(target, item)
  264.     return if target.dead? || target.result.tp_damage == 0
  265.     value = target.result.tp_damage
  266.     critical = target.result.critical
  267.     target.damage_for_show = [:tp, value, critical]
  268.     hzhj_old_display_tp_damage_for_display_damage_wnd_btlog(target, item)
  269.   end
  270. end

  271. #==============================================================================
  272. # ■ Sprite_Base
  273. #==============================================================================
  274. class Sprite_Base < Sprite
  275.   #--------------------------------------------------------------------------
  276.   # ● 初始化(追加定义)
  277.   #--------------------------------------------------------------------------
  278.   alias hzhj_old_init_for_display_damage_spr_base initialize
  279.   def initialize(*args)
  280.     hzhj_old_init_for_display_damage_spr_base(*args)
  281.     @damage_num_sprites = []
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● 释放(追加定义)
  285.   #--------------------------------------------------------------------------
  286.   alias hzhj_old_dispose_for_display_damage_spr_base dispose
  287.   def dispose
  288.     hzhj_old_dispose_for_display_damage_spr_base
  289.     dispose_damage
  290.   end
  291.   #--------------------------------------------------------------------------
  292.   # ● 判断是否有伤害在显示(新增定义)
  293.   #--------------------------------------------------------------------------
  294.   def damage?
  295.     return (not @damage_num_sprites.empty?)
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 开始显示伤害(新增定义)
  299.   #--------------------------------------------------------------------------
  300.   def start_damage(args)
  301.     args[4] = x - ox + width / 2
  302.     args[5] = y - oy + height / 2
  303.     args[6] = z
  304.     @damage_num_sprites.push(Sprite_Damage.new(viewport, args))
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● 释放所有伤害显示(新增定义)
  308.   #--------------------------------------------------------------------------
  309.   def dispose_damage
  310.     return unless damage?
  311.     @damage_num_sprites.each{|sprite|sprite.dispose}
  312.     @damage_num_sprites.clear
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● 刷新(追加定义)
  316.   #--------------------------------------------------------------------------
  317.   alias hzhj_old_update_for_display_damage_spr_base update
  318.   def update
  319.     hzhj_old_update_for_display_damage_spr_base
  320.     update_damage
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # ● 刷新显示伤害(新增定义)
  324.   #--------------------------------------------------------------------------
  325.   def update_damage
  326.     return unless damage?
  327.     @damage_num_sprites.each_with_index do |sprite, i|
  328.       if sprite.moving?
  329.         sprite.update
  330.       else
  331.         sprite.dispose
  332.         @damage_num_sprites[i] = nil
  333.       end
  334.     end
  335.     @damage_num_sprites.delete(nil)
  336.   end
  337. end

  338. #==============================================================================
  339. # ■ Sprite_Battler
  340. #==============================================================================
  341. class Sprite_Battler < Sprite_Base
  342.   #--------------------------------------------------------------------------
  343.   # ● 刷新(追加定义)
  344.   #--------------------------------------------------------------------------
  345.   alias hzhj_old_update_for_display_damage_spr_battler update
  346.   def update
  347.     hzhj_old_update_for_display_damage_spr_battler
  348.     if @battler
  349.       if not @battler.damage_for_show.empty?
  350.         #unless @battler.damage_section_displayed
  351.           args = @battler.damage_for_show.clone
  352.           args[3] = @battler.actor? ? :actor : (@battler.enemy? ? :enemy : nil)
  353.           start_damage(args)
  354.         #end
  355.         @battler.damage_for_show.clear
  356.       end
  357.     end
  358.   end
  359.   
  360. end

  361. #==============================================================================
  362. # ■ Game_BattlerBase
  363. #==============================================================================
  364. class Game_BattlerBase
  365.   #--------------------------------------------------------------------------
  366.   # ● 实例变量(新增定义)
  367.   #--------------------------------------------------------------------------
  368.   attr_accessor :damage_for_show #hzhj_damage
  369.   #--------------------------------------------------------------------------
  370.   # ● 初始化(追加定义)
  371.   #--------------------------------------------------------------------------
  372.   alias hzhj_old_init_for_display_damage_game_battler_base initialize
  373.   def initialize
  374.     @damage_for_show = []
  375.     hzhj_old_init_for_display_damage_game_battler_base
  376.   end
  377. end
复制代码
怪物伤害显示.png
内事不决问@度娘,外事不决问@谷哥。
有此二人辅佐,何愁天下不定乎!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
285
在线时间
4 小时
注册时间
2012-4-11
帖子
1
发表于 2012-4-23 15:35:57 | 显示全部楼层
本帖最后由 saron7890 于 2012-4-23 15:38 编辑

请问植入以上代码有什么需要注意的事项吗?

我加入后,进入游戏,开始战斗出错,在352行左右

但只是在“数据库”中的“敌群”中测试正常。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-28 22:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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