赞 | 40 |
VIP | 559 |
好人卡 | 234 |
积分 | 47 |
经验 | 251834 |
最后登录 | 2024-10-11 |
在线时间 | 5240 小时 |
Lv3.寻梦者 (版主) 八宝粥的基叔
- 梦石
- 0
- 星屑
- 4684
- 在线时间
- 5240 小时
- 注册时间
- 2009-4-29
- 帖子
- 14318
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 雪流星 于 2009-7-15 21:41 编辑
前些日子比较忙,今天终于有点时间了。我今天就和新手们分享一下怎么巧用数据库(之一),老手们别笑话哦。
请耐心地看看,不要因为文章太长就跳过,其实问题不是很复杂,而且保证对你有启发。
按照惯例,先举一个例子来引出问题。我们知道,特技伤害有一个统一的计算公式(在Game_Battler类的def make_obj_damage_value(user, obj)里面),可是我们想设计一个特殊的特技,它的伤害计算和普通特技的伤害计算不同,那怎么办呢?
数据库的特技里有这么几个选项:物理攻击、伤害MP、将伤害吸收和无视防御力。假如我们的游戏从头到尾都没有任何设定特技是“无视防御力”的,那我们的特殊特技就可以使用上这个选项!
具体地说,普通法术的伤害计算是默认def make_obj_damage_value(user, obj)里面:- damage += user.atk * 4 * obj.atk_f / 100 # 打击关系度: 使用者
- damage += user.spi * 2 * obj.spi_f / 100 # 精神关系度: 使用者
复制代码 我们要设定特殊特技的伤害计算就等于使用特技角色的精神力,那我们可以这样把669至772这四行删除,既在每行前面加“#”:- #unless obj.ignore_defense # 无视防御力以外
- #damage -= self.def * 2 * obj.atk_f / 100 # 打击关系度: 对象者
- #damage -= self.spi * 1 * obj.spi_f / 100 # 精神关系度: 对象者
- #end
复制代码 然后在下面加上:- if obj.ignore_defense
- damage = user.spi
- end
复制代码 最后我们在数据库里把特殊特技的“无视防御力”前面打勾,就完成了。强调:这样做的前提是我们的游戏从头到尾都没有任何设定特技是“无视防御力”,也就是“无视防御力”选项不再具有其原先的功能!
也许你会说,假如我想设定第二种特殊特技怎么办?
好办!用上其他的选项!比如第二种特殊特技的伤害为使用者精神力的2倍,你可以在最后一个end前这样写(一定要在最后一个end前,否则会因if obj.damage_to_mp 后面的“else”影响到MP伤害的计算):- if obj.ignore_defense && obj.damage_to_mp
- damage = 2 * user.spi
- end
复制代码 为了使第一种特殊特技继续生效,要把原来的改成- if obj.ignore_defense && obj.damage_to_mp ==false
复制代码 这样,“MP伤害”选项的功能不变,但是只要同时勾选“无视防御力”和“MP伤害”两项,就能实现第二种特殊特技伤害为使用者精神力的2倍。
三种或更多的情况,你可以用这几个选项之间的多重勾选排列组合来实现,这样会是选项失去原来的功能,但只要在相应的地方改一下就可以恢复其功能了。
当然,类似的修改还可以用在特级的效果范围:敌单体随机、敌二体随机……只要在Game_BattleAction类的def make_obj_targets(obj)里面修改,假如改成下面这样:- if obj.for_random?
- if obj.for_one? # 敌单体随机
- number_of_targets = 2
- elsif obj.for_two? # 敌二体随机
- number_of_targets = 3
- else # 敌三体随机
- number_of_targets = 4
- end
复制代码 就能实现虽然勾选“敌单体随机”,但实际攻击敌二体随机;虽然勾选“敌二体随机”,但实际攻击敌三体随机;虽然勾选“敌三体随机”,但实际攻击敌四体随机。
以上两个例子简单地说明了对数据库巧用的方法,虽然文章很长,但是理解起来并不复杂,希望能给大家带来帮助。下次发表巧用数据库(之二),欢迎大家继续关注和学习。 |
|