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

Project1

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

[已经解决] 谁能告诉我这个脚本是什么原理

[复制链接]

Lv3.寻梦者

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
帖子
176
跳转到指定楼层
1
发表于 2013-3-16 10:27:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 clear仔 于 2013-3-16 10:28 编辑

这个伤害美化脚本是我在别的游戏里找出来的
(因为它有显示SP伤害的功能么)
谁能告诉我它显示SP伤害的原理

这是一个XP脚本

RUBY 代码复制
  1. module RPG
  2.  
  3. class Sprite < ::Sprite
  4.   def damage(value, critical)
  5.       dispose_damage
  6.  
  7.       damage_string = value.to_s
  8.       if damage_string[0].chr == "s"
  9.         sp_recover = true
  10.         damage_string = damage_string[1,damage_string.size]
  11.         value = damage_string.to_i
  12.       elsif damage_string[0].chr == "b"
  13.         both = true
  14.         damage_string = damage_string[1,damage_string.size]
  15.         value = damage_string.to_i
  16.         damage_string = (value/2).to_s
  17.       elsif damage_string[0].chr == "g"
  18.         gray = true
  19.         damage_string = damage_string[1,damage_string.size]
  20.         value = damage_string.to_i
  21.       end
  22.  
  23.       bitmap = Bitmap.new(160, 48)
  24.       if value.is_a?(Numeric)
  25.         damage_string = value.abs.to_s unless both
  26.         bitmap.font.name = "Arial Black"
  27.         bitmap.font.size = 32        
  28.       else
  29.         bitmap.font.color.set(200, 200, 200)
  30.         damage_string = value.to_s
  31.         damage_string = "未命中" if damage_string == "Miss"
  32.         bitmap.font.bold = true
  33.       end
  34.  
  35.       bitmap.font.color.set(0, 0, 0)
  36.       unless both
  37.         bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  38.         bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  39.         bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  40.         bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  41.       end
  42.  
  43.       if sp_recover
  44.         if value < 0
  45.           bitmap.font.color.set(100, 180, 255)
  46.         elsif sp_recover>0
  47.           bitmap.font.color.set(100, 100, 255)
  48.         elsif sp_recover<0
  49.           bitmap.font.color.set(207, 6, 142)
  50.           end
  51.       elsif gray
  52.         bitmap.font.color.set(200, 200, 200)
  53.       elsif both
  54.         #bitmap.font.color.set(255, 100, 255)
  55.         bitmap.font.color.set(0, 0, 0)
  56.         bitmap.draw_text(-20-1, 12-1, 160, 36, damage_string, 1)
  57.         bitmap.draw_text(-20+1, 12-1, 160, 36, damage_string, 1)
  58.         bitmap.draw_text(-20-1, 12+1, 160, 36, damage_string, 1)
  59.         bitmap.draw_text(-20+1, 12+1, 160, 36, damage_string, 1)
  60.         bitmap.draw_text(20-1, 12-1, 160, 36, damage_string, 1)
  61.         bitmap.draw_text(20+1, 12-1, 160, 36, damage_string, 1)
  62.         bitmap.draw_text(20-1, 12+1, 160, 36, damage_string, 1)
  63.         bitmap.draw_text(20+1, 12+1, 160, 36, damage_string, 1)
  64.         bitmap.font.color.set(255, 100, 100)
  65.         bitmap.draw_text(-20, 12, 160, 36, damage_string, 1)
  66.         bitmap.font.color.set(100, 100, 255)
  67.         bitmap.draw_text(20, 12, 160, 36, damage_string, 1)
  68.       elsif value.is_a?(Numeric)
  69.         if value < 0
  70.           #bitmap.font.color.set(176, 255, 144)
  71.           bitmap.font.color.set(144, 255, 176)
  72.         elsif value == 0
  73.           bitmap.font.color.set(200, 200, 200)
  74.         else
  75.           bitmap.font.color.set(255, 100, 100)
  76.         end
  77.       else        
  78.         bitmap.font.color.set(255, 255, 255)
  79.       end
  80.  
  81.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1) unless both
  82.  
  83.       if critical
  84.         bitmap.font.size = 20
  85.         bitmap.font.color.set(0, 0, 0)
  86.         bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  87.         bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  88.         bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  89.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  90.         #bitmap.font.color.set(255, 255, 255)
  91.         bitmap.font.color.set(86, 255, 42)
  92.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  93.       end
  94.       @_damage_sprite = ::Sprite.new(self.viewport)
  95.       @_damage_sprite.bitmap = bitmap
  96.       @_damage_sprite.ox = 80
  97.       @_damage_sprite.oy = 20
  98.       @_damage_sprite.x = self.x
  99.       @_damage_sprite.y = self.y - self.oy / 2
  100.       @_damage_sprite.z = 3000
  101.       @_damage_duration = 40
  102.     end
  103.  
  104.   end
  105. end

还有两个问题:
1.为什么在使用恢复SP的物品时,第9行的.chr为什么会报错,chr不是内部方法吗?
2.我在将其美化时,我在64行换成了:
RUBY 代码复制
  1. if sp_recover > 0
  2. bitmap.font.color.set(100, 100, 255)
  3. elsif sp_recover < 0
  4. bitmap.font.color.set(241, 60, 255)

为什么会报错,而且是关于大于号和小于号的错误,我真是弄不明白


最后说一句:
如果原作者看到了请不要生气我拿了你的脚本,如果还能解决我的疑惑,那将是感激不尽。{:2_275:}

Lv3.寻梦者

梦石
0
星屑
1217
在线时间
358 小时
注册时间
2013-1-2
帖子
70

开拓者

2
发表于 2013-3-16 10:55:53 | 只看该作者
如果sp_recover > 0bitmap字体颜色设置。。。(100,100,255)elsif sp_recover<0bitmap字体颜色设置。。。(241,60,255

点评

能说仔细点吗,我听不太懂诶  发表于 2013-3-16 11:08
h
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1217
在线时间
358 小时
注册时间
2013-1-2
帖子
70

开拓者

3
发表于 2013-3-16 11:13:52 | 只看该作者
如果sp_恢复 > 位图图像字体颜色设置。。。(100,100,255)elsif sp_恢复<位图图像字体颜色设置。。。(241,60,255
h
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1217
在线时间
358 小时
注册时间
2013-1-2
帖子
70

开拓者

4
发表于 2013-3-16 11:16:29 | 只看该作者
asd1321259972 发表于 2013-3-16 11:13
如果sp_恢复 > 位图图像字体颜色设置。。。(100,100,255)elsif sp_恢复<位图图像字体颜色设置。。。( ...

第九行的翻译是  sp恢复=正确

评分

参与人数 1星屑 -10 收起 理由
亿万星辰 -10 误导群众

查看全部评分

h
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
5
发表于 2013-3-16 12:03:14 | 只看该作者
1.为什么在使用恢复SP的物品时,第9行的.chr为什么会报错,chr不是内部方法吗?
# 如果伤害字符串第一个字符是"s"
if damage_string[0].chr == "s"
如果你打出的伤害不是字符或数字就可能引起出错,你战斗类应该也做了修改,要从战斗类伤害输出找问题.
2.我在将其美化时,我在64行换成了:
在使用sp_recover前我好像没看到有赋值语句,所以sp_recover应该是nil(什么都没有).
nil不是一个数字,不能nil > 0比大小
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
帖子
176
6
 楼主| 发表于 2013-3-16 15:52:59 | 只看该作者
jhhuang 发表于 2013-3-16 12:03
1.为什么在使用恢复SP的物品时,第9行的.chr为什么会报错,chr不是内部方法吗?
# 如果伤害字符串第一个字 ...

那么,具体应该怎么改呢
第一个,在“GAMEBATTLER3” 里的“应用物品效果”的“HP SP回复”里
加这一句行么:
if sp_recover
self.damage = "s" + sp_recover.to_s
sp+=self.damage
elsif sp_recover and hp_recover
self.damage = "b" +(sp_recover+hp_recover).to_s
self.hp += hp_recover
self.sp += sp_recover
else
self.hp += hp+recover
end

第二个完全不知道应该怎么改

点评

手残,打反了,是recover_hp,sp一样  发表于 2013-3-16 16:18
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
7
发表于 2013-3-16 16:12:03 | 只看该作者
clear仔 发表于 2013-3-16 15:52
那么,具体应该怎么改呢
第一个,在“GAMEBATTLER3” 里的“应用物品效果”的“HP SP回复”里
加这一句行 ...

居然你在其他工程找来的,你应该参照工程里和攻击,特技使用和物品使用的damage相关数据

你说的
if sp_recover
self.damage = "s" + sp_recover.to_s
sp+=self.damage
...
....
打个比方,sp_recover是1,那么
self.damage 得到的是一个"s1"字符串
下面的sp应该是一个数字数据
sp+=self.damage # 一个数字加上一个字符串,会出错.
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
帖子
176
8
 楼主| 发表于 2013-3-16 16:27:08 | 只看该作者
jhhuang 发表于 2013-3-16 16:12
居然你在其他工程找来的,你应该参照工程里和攻击,特技使用和物品使用的damage相关数据

你说的

那应该怎么改才能使.chr不出错呢,还有第二个问题
(附一句:我找来的那个工程里没有物品)
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
9
发表于 2013-3-16 16:36:33 | 只看该作者
clear仔 发表于 2013-3-16 16:27
那应该怎么改才能使.chr不出错呢,还有第二个问题
(附一句:我找来的那个工程里没有物品) ...

他这个脚本应该是分别带有"s""b""g"三种显示方式的,s指sp
不过你使用物品恢复,会存在一个可以同时恢复hp和sp的问题,这种时候,你打算怎么显示?它默认只显示一次.
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
帖子
176
10
 楼主| 发表于 2013-3-16 19:12:18 手机端发表。 | 只看该作者
本帖最后由 clear仔 于 2013-3-16 19:30 编辑
jhhuang 发表于 2013-3-16 16:36
他这个脚本应该是分别带有"s""b""g"三种显示方式的,s指sp
不过你使用物品恢复,会存在一个可以同时恢复hp ...


这样可以么:
if recover_hp and recover_sp=nil
    self.damage = -recover_hp.to_s
elsif recover_sp and recover_hp=nil
    self.damage = "s"+recover_sp.to_s
elsif recover_hp and recover_sp
    self.damage = "b"+((recover_hp+recover_sp)/2).to_s
#我用的回复sp和hp的物品值都是一样的所以这里就无所谓了
else
@damage_pop=nil
end
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-27 03:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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