Project1

标题: 教给新手们的第二招 [打印本页]

作者: 怪蜀黍    时间: 2009-7-14 20:49
标题: 教给新手们的第二招
本帖最后由 雪流星 于 2009-7-15 21:41 编辑

前些日子比较忙,今天终于有点时间了。我今天就和新手们分享一下怎么巧用数据库(之一),老手们别笑话哦。
    请耐心地看看,不要因为文章太长就跳过,其实问题不是很复杂,而且保证对你有启发。
    按照惯例,先举一个例子来引出问题。我们知道,特技伤害有一个统一的计算公式(在Game_Battler类的def make_obj_damage_value(user, obj)里面),可是我们想设计一个特殊的特技,它的伤害计算和普通特技的伤害计算不同,那怎么办呢?
    数据库的特技里有这么几个选项:物理攻击、伤害MP、将伤害吸收和无视防御力。假如我们的游戏从头到尾都没有任何设定特技是“无视防御力”的,那我们的特殊特技就可以使用上这个选项!
    具体地说,普通法术的伤害计算是默认def make_obj_damage_value(user, obj)里面:
  1. damage += user.atk * 4 * obj.atk_f / 100      # 打击关系度: 使用者
  2. damage += user.spi * 2 * obj.spi_f / 100      # 精神关系度: 使用者
复制代码
我们要设定特殊特技的伤害计算就等于使用特技角色的精神力,那我们可以这样把669至772这四行删除,既在每行前面加“#”:
  1. #unless obj.ignore_defense                     # 无视防御力以外
  2.   #damage -= self.def * 2 * obj.atk_f / 100    # 打击关系度: 对象者
  3.   #damage -= self.spi * 1 * obj.spi_f / 100    # 精神关系度: 对象者
  4. #end
复制代码
然后在下面加上:
  1. if obj.ignore_defense
  2.     damage = user.spi
  3. end
复制代码
最后我们在数据库里把特殊特技的“无视防御力”前面打勾,就完成了。强调:这样做的前提是我们的游戏从头到尾都没有任何设定特技是“无视防御力”,也就是“无视防御力”选项不再具有其原先的功能!
    也许你会说,假如我想设定第二种特殊特技怎么办?
    好办!用上其他的选项!比如第二种特殊特技的伤害为使用者精神力的2倍,你可以在最后一个end前这样写(一定要在最后一个end前,否则会因if obj.damage_to_mp 后面的“else”影响到MP伤害的计算):
  1. if obj.ignore_defense && obj.damage_to_mp
  2.     damage = 2 * user.spi
  3. end
复制代码
为了使第一种特殊特技继续生效,要把原来的
  1. if obj.ignore_defense
复制代码
改成
  1. if obj.ignore_defense && obj.damage_to_mp ==false
复制代码
这样,“MP伤害”选项的功能不变,但是只要同时勾选“无视防御力”和“MP伤害”两项,就能实现第二种特殊特技伤害为使用者精神力的2倍。
    三种或更多的情况,你可以用这几个选项之间的多重勾选排列组合来实现,这样会是选项失去原来的功能,但只要在相应的地方改一下就可以恢复其功能了。
    当然,类似的修改还可以用在特级的效果范围:敌单体随机、敌二体随机……只要在Game_BattleAction类的def make_obj_targets(obj)里面修改,假如改成下面这样:
  1.      if obj.for_random?
  2.        if obj.for_one?         # 敌单体随机
  3.          number_of_targets = 2
  4.        elsif obj.for_two?      # 敌二体随机
  5.          number_of_targets = 3
  6.        else                    # 敌三体随机
  7.          number_of_targets = 4
  8.        end
复制代码
就能实现虽然勾选“敌单体随机”,但实际攻击敌二体随机;虽然勾选“敌二体随机”,但实际攻击敌三体随机;虽然勾选“敌三体随机”,但实际攻击敌四体随机。
    以上两个例子简单地说明了对数据库巧用的方法,虽然文章很长,但是理解起来并不复杂,希望能给大家带来帮助。下次发表巧用数据库(之二),欢迎大家继续关注和学习。
作者: 风雪优游    时间: 2009-7-14 20:56
如此关怀之贴,值得支持和收藏。
请LZ再接再厉!
作者: 465889216    时间: 2009-7-14 22:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: Majirefy    时间: 2009-7-15 00:02
超极品的教学贴!感激LZ的说!{:3_64:}




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1