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

Project1

 找回密码
 注册会员
搜索
查看: 7337|回复: 14
打印 上一主题 下一主题

[RMVX发布] [更新]自地图上显示伤害,ARPG再度有望?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2008-4-7
帖子
69
跳转到指定楼层
1
发表于 2008-4-15 06:09:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
就是在地图上显示伤害,没什么特别。
事实上有些偷懒,伤害的相关部分完全是从XP拷贝的。

使用方法:
在事件里输入脚本:
get_character(事件编号).damage = 伤害数值
get_character(事件编号).critical = true
get_character(事件编号).damage_pop = true

事件编号就是地图上的事件编号,0为本事件,-1为角色,其他则为编号。
伤害数值为负数就是恢复的效果,伤害数值也可以为字符,不一定是数字。
如果不需要CRITICAL的伤害,彩色那行脚本不用写。




  1. class Game_Character
  2.   attr_accessor :damage
  3.   attr_accessor :damage_pop
  4.   attr_accessor :critical
  5.   alias new_initialize initialize
  6.   def initialize
  7.     new_initialize
  8.     @damage = 0
  9.     @damage_pop = false
  10.     @critical = false
  11.   end
  12. end

  13. class Sprite_Character < Sprite_Base
  14.   def initialize(viewport, character = nil)
  15.     super(viewport)
  16.     @character = character
  17.     @balloon_duration = 0
  18.     @_damage_duration = 0
  19.     @damage_x = 0
  20.     @damage_y = 0
  21.     update
  22.   end
  23.   alias new_update update
  24.   def update
  25.     new_update
  26.     update_damage
  27.     if @character.damage_pop == true
  28.       start_damage(@character.damage,@character.critical)
  29.       @character.damage_pop = false
  30.       @character.critical = false
  31.     end
  32.   end
  33.   def start_damage(value, critical)
  34.     dispose_damage
  35.     if value.is_a?(Numeric)
  36.       damage_string = value.abs.to_s
  37.     else
  38.       damage_string = value.to_s
  39.     end
  40.     bitmap = Bitmap.new(160, 48)
  41.     bitmap.font.name = "Arial Black"
  42.     bitmap.font.size = 28
  43.     bitmap.font.color.set(0, 0, 0)
  44.     bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  45.     bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  46.     bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  47.     bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  48.     if value.is_a?(Numeric) and value < 0
  49.       bitmap.font.color.set(176, 255, 144)
  50.     else
  51.       bitmap.font.color.set(255, 255, 255)
  52.     end
  53.     bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  54.     if critical
  55.       bitmap.font.size = 20
  56.       bitmap.font.color.set(0, 0, 0)
  57.       bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  58.       bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  59.       bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  60.       bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  61.       bitmap.font.color.set(255, 255, 255)
  62.       bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  63.     end
  64.     @_damage_sprite = ::Sprite.new(self.viewport)
  65.     @_damage_sprite.bitmap = bitmap
  66.     @_damage_sprite.ox = 80
  67.     @_damage_sprite.oy = 20
  68.     @_damage_sprite.x = self.x
  69.     @_damage_sprite.y = self.y - self.oy
  70.     @_damage_sprite.z = 3000
  71.     @_damage_duration = 40
  72.     @damage_x = @character.screen_x
  73.     @damage_y = @character.screen_y
  74.     update_damage
  75.   end
  76.   def update_damage
  77.     if @_damage_duration > 0
  78.       @_damage_sprite.x += (@character.screen_x - @damage_x)
  79.       @_damage_sprite.y += (@character.screen_y - @damage_y)
  80.       @damage_x = @character.screen_x
  81.       @damage_y = @character.screen_y
  82.       @_damage_duration -= 1
  83.       case @_damage_duration
  84.       when 38..39
  85.         @_damage_sprite.y -= 4
  86.       when 36..37
  87.         @_damage_sprite.y -= 2
  88.       when 34..35
  89.         @_damage_sprite.y += 2
  90.       when 28..33
  91.         @_damage_sprite.y += 4
  92.       end
  93.       @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  94.       if @_damage_duration == 0
  95.         dispose_damage
  96.       end
  97.     end
  98.   end
  99.   def dispose_damage
  100.     if @_damage_sprite != nil
  101.       @_damage_sprite.bitmap.dispose
  102.       @_damage_sprite.dispose
  103.       @_damage_sprite = nil
  104.       @_damage_duration = 0
  105.     end
  106.   end
  107. end
复制代码


可能有些人认为XP默认的不好看,想要用图片显示,所以这里也做了准备。
这个是图片版,从伤害显示美化脚本里踢出来的,图片格式也一样,请自行参考。
http://rpg.blue/web/htm/news216.htm

效果图:


图片素材(注:图片请放入picture的文件夹底下):


  1. class Game_Character
  2.   attr_accessor :damage
  3.   attr_accessor :damage_pop
  4.   attr_accessor :critical
  5.   alias new_initialize initialize
  6.   def initialize
  7.     new_initialize
  8.     @damage = 0
  9.     @damage_pop = false
  10.     @critical = false
  11.   end
  12. end

  13. class Sprite_Character < Sprite_Base
  14.   def initialize(viewport, character = nil)
  15.     super(viewport)
  16.     @character = character
  17.     @balloon_duration = 0
  18.     @_damage_duration = 0
  19.     @damage_x = 0
  20.     @damage_y = 0
  21.     update
  22.   end
  23.   alias new_update update
  24.   def update
  25.     new_update
  26.     update_damage
  27.     if @character.damage_pop == true
  28.       start_damage(@character.damage,@character.critical)
  29.       @character.damage_pop = false
  30.       @character.critical = false
  31.     end
  32.   end
  33.   def start_damage(value, critical)
  34.     dispose_damage
  35.     if value.is_a?(Numeric)
  36.       damage_string = value.abs.to_s
  37.     else
  38.       damage_string = value.to_s
  39.     end
  40.     bitmap = Bitmap.new(162, 64)
  41.     bitmap.font.name = "Arial Black"
  42.     bitmap.font.size = 28
  43.     if value.is_a?(Numeric)
  44.       damage_array = damage_string.scan(/./)
  45.       damage_x = 81 - damage_string.size * 9
  46.       if value < 0
  47.         rect_y = 32
  48.       else
  49.         rect_y = 0
  50.       end
  51.       for char in damage_array
  52.         number = char.to_i
  53.         bitmap.blt(damage_x, 32, Cache.picture("Damage"),
  54.         Rect.new(number * 18, rect_y, 18, 32))
  55.         damage_x += 18
  56.       end
  57.     else
  58.       unless value == "Miss"
  59.         bitmap.font.color.set(0, 0, 0)
  60.         bitmap.draw_text(-1, 27, 162, 36, damage_string, 1)
  61.         bitmap.draw_text(+1, 27, 162, 36, damage_string, 1)
  62.         bitmap.draw_text(-1, 29, 162, 36, damage_string, 1)
  63.         bitmap.draw_text(+1, 29, 162, 36, damage_string, 1)
  64.         bitmap.font.color.set(255, 255, 255)
  65.         bitmap.draw_text(0, 28, 162, 36, damage_string, 1)
  66.       else
  67.         bitmap.blt(36, 28, Cache.picture("Damage"), Rect.new(90, 64, 90, 32))
  68.       end
  69.     end
  70.     if critical
  71.       bitmap.blt(36, 0, Cache.picture("Damage"), Rect.new(0, 64, 90, 32))
  72.     end
  73.     @_damage_sprite = ::Sprite.new(self.viewport)
  74.     @_damage_sprite.bitmap = bitmap
  75.     @_damage_sprite.ox = 81
  76.     @_damage_sprite.oy = 20
  77.     @_damage_sprite.x = self.x
  78.     @_damage_sprite.y = self.y - self.oy * 3 / 2
  79.     @_damage_sprite.z = 3000
  80.     @_damage_duration = 40
  81.     @damage_x = @character.screen_x
  82.     @damage_y = @character.screen_y
  83.     update_damage
  84.   end
  85.   def update_damage
  86.     if @_damage_duration > 0
  87.       @_damage_sprite.x += (@character.screen_x - @damage_x)
  88.       @_damage_sprite.y += (@character.screen_y - @damage_y)
  89.       @damage_x = @character.screen_x
  90.       @damage_y = @character.screen_y
  91.       @_damage_duration -= 1
  92.       case @_damage_duration
  93.       when 38..39
  94.         @_damage_sprite.y -= 4
  95.       when 36..37
  96.         @_damage_sprite.y -= 2
  97.       when 34..35
  98.         @_damage_sprite.y += 2
  99.       when 28..33
  100.         @_damage_sprite.y += 4
  101.       end
  102.       @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  103.       if @_damage_duration == 0
  104.         dispose_damage
  105.       end
  106.     end
  107.   end
  108.   def dispose_damage
  109.     if @_damage_sprite != nil
  110.       @_damage_sprite.bitmap.dispose
  111.       @_damage_sprite.dispose
  112.       @_damage_sprite = nil
  113.       @_damage_duration = 0
  114.     end
  115.   end
  116. end
复制代码


最后,以上内容脚本可以任意转载使用,不过请注明从66RPG转载。
还有,要是有人能够拿去优化更好,毕竟是偷懒的产物。
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-3-31
帖子
102
2
发表于 2008-4-15 21:37:40 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
44 小时
注册时间
2006-6-4
帖子
386
3
发表于 2008-4-16 03:16:20 | 只看该作者
魔塔有望??
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

4
发表于 2008-4-16 04:49:32 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2008-4-7
帖子
69
5
 楼主| 发表于 2008-4-16 07:19:40 | 只看该作者
虽然楼主瞧不起SLG,可我仍然觉得:
显示伤害到处有人写,实现方法也没变过,SLG就空白了...您要是抽空做个SLG模板,价值比这个高得多...不过伤害显示SLG也能用就是

嗯……等下,是不是我的有些话让沉兄误会了??
我并没有瞧不起SLG,所有游戏战斗模式中,我最欣赏的就是SLG,
所以之前在用RMXP的时候,才拼命苦练,终于让我有办法独立完成一个SLG引擎。
至与这个伤害显示的确是到处都有人写,本来我也不想发的,不过是有人PM我,
希望我可以放出伤害显示脚本。基本上这个脚本本来就是根据我的VX SLG系统写的,
不过是因为现在比较想做ARPG,所以就搬过来用,基本上在我的这两个模子里,
这脚本是能够互用的。SLG模板的模版我会考虑的,因为我写的SLG使用度非常复杂,
必须把所有的细节都调整好才能够确保完全不会出错,而且我写脚本从来都是不带注释,
如果这样贸然的放出来给大家使用,搞不好最后头疼的还是我,
而且我也不大想将辛辛苦苦编好的脚本就这样无私的奉献出去,
毕竟我还是有私心的,没办法像其他人一样,毫无保留。
说了这么多,只是想说我没有瞧不起SLG,可能我言语上让沉兄误会,
我先在这里道歉了。{/hx}
回复 支持 反对

使用道具 举报

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

6
发表于 2008-4-16 07:52:28 | 只看该作者
我写脚本从来都是不带注释


建议小lim写脚本还是写写注释比较好,不然时间久了有时候自己也会看不懂吧?
而且这样也比较适合脚本发展

VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2008-4-7
帖子
69
7
 楼主| 发表于 2008-4-17 00:34:56 | 只看该作者
建议小lim写脚本还是写写注释比较好,不然时间久了有时候自己也会看不懂吧?
而且这样也比较适合脚本发展

习惯了,恐怕要改过来也难了。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

8
发表于 2008-4-17 01:50:56 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

9
发表于 2008-5-10 06:32:47 | 只看该作者
对了,那啥,

在脚本后面要是写某个变量的话,我要写几号变量,而不是具体数字,怎么写啊?
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-20
帖子
258
10
发表于 2008-5-10 16:29:52 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 05:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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