Project1

标题: 请问如何赋予敌人职业和制作职业相克 [打印本页]

作者: 夏季冰川    时间: 2011-6-11 22:22
标题: 请问如何赋予敌人职业和制作职业相克
本帖最后由 夏季冰川 于 2011-6-11 23:54 编辑

比如在战斗中我方主角职业是枪兵,敌方有步兵和骑兵2个兵种,我想要枪兵对步兵兵种的敌人伤害翻倍

但对骑兵兵种敌人伤害只有正常的一半,请问这个效果怎么达到?(不要说用属性法,4L有更具体的说明)
作者: 后知后觉    时间: 2011-6-11 22:22
利用 数据库->职业 的属性有消毒 单独把职业相克分离出来.
本质上还是属性的关系.只是做了点手脚而已= =.

1.把 数据库->系统->属性 扩容.
有多少个 数据库->职业 就要扩容多少个属性.
至于这些属性的名字写不写都无所谓.只要自己认识就行.
不过最好还是设置为对应职业的名字为好.比较直观.

2.设置脚本开头处的常量 ClassIdDeviant
这个常量的值为 职业属性 的起始id-1
比如下面的范例工程里的 战士 的属性是第 17 号.
那么这个 ClassIdDeviant 就应该设置为 17-1=16
这个就相当于是从 职业id 到 职业属性id 的偏移值

3.在 数据库->敌人 的行动命令里给敌人设置敌人的职业id
行动的具体行为不用管.反正敌人也不会使用这条命令.
给 气血 条件打上勾.然后输入这个敌人的职业id.也就是把气血堪称是职业来设置.
再把下面的 开关 条件打上勾.然后选择一个游戏从头到尾都不会为ON的开关.
并且把这个开关的id写入脚本开头的常量 ConditionSwitchId 中
范例工程里设置的是 1 号开关.

4.在脚本开头处设置 RateTable 常量表
这个就和 属性有消毒 是一个概念了.

5.将新方法 class_correct 的调用写到伤害计算公式里去.
具体可参考范例工程的 Game_Battler 3 的第 55-57行、148-150行.

6.在 数据库->职业 设置对于这些新增的属性的有效度即可.
概念完全和默认的一样.只是影响倍率和别的属性分离开了而已.

在范例工程里.
幽灵被设置为了 4 号职业.
被 1 号职业(战士)打会很痛.被 7 号职业(僧侣)打不掉血
蜥蜴被设置为了 5 号职业.
被 2 号职业(枪兵)打会很痛.被 8 号职业(魔导士)打不掉血

最后再说一下 RateTable 的设置.首单元那个 0 可改不能删.改了也没什么用.
从 200 开始往右一次就是 ABCDEF
C 位置上的那个 100 最好别动.其余的 5 个就根据需要改吧.

脚本核心部分:
  1. #==============================================================================
  2. # ■ Game_Battler
  3. #==============================================================================

  4. class Game_Battler
  5.   ConditionSwitchId = 1
  6.   ClassIdDeviant = 16
  7.   RateTable = [0,200,150,100,50,0,-100]
  8.   def class_correct(active_battler_class_id)
  9.     element_id = active_battler_class_id + ClassIdDeviant
  10.     return RateTable[$data_classes[@class_id].element_ranks[element_id]]
  11.   end
  12. end
  13. #==============================================================================
  14. # ■ Game_Enemy
  15. #==============================================================================

  16. class Game_Enemy < Game_Battler
  17.   attr_accessor :class_id
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化对像
  20.   #--------------------------------------------------------------------------
  21.   alias creat_enemy_class_id_initialize initialize
  22.   def initialize(troop_id, member_index)
  23.     creat_enemy_class_id_initialize(troop_id, member_index)
  24.     enemy = $data_enemies[@enemy_id]
  25.     @class_id = 1
  26.     for hzhj in enemy.actions
  27.       if hzhj.condition_switch_id == ConditionSwitchId
  28.         @class_id = hzhj.condition_hp
  29.         break
  30.       end
  31.     end
  32.   end
  33. end
复制代码
范例工程:
职业相克.rar (187.11 KB, 下载次数: 168)
作者: 白鬼    时间: 2011-6-11 22:37
楼主你那么多VIP了都是怎么赚来的?
我给你个提示,你知道有一个东西叫做 属性 的吗?
知道 属性相克 吗?就是那个ABCDE5级的那个?
好了提示到此。
作者: 天使喝可乐    时间: 2011-6-11 23:08
白鬼 发表于 2011-6-11 22:37
楼主你那么多VIP了都是怎么赚来的?
我给你个提示,你知道有一个东西叫做 属性 的吗?
知道 属性相克 吗? ...

你这个提示无效 这么简单的东西谁都知道
LZ想要的效果根本不是属性相克这么简单
比如骑兵使用各种其他属性的魔法、武器 伤害翻倍怎么计算?按你的说法是将该魔法和武器勾选该属性 那要是步兵也使用同样的魔法呢?
作者: 夏季冰川    时间: 2011-6-11 23:50
本帖最后由 夏季冰川 于 2011-6-11 23:52 编辑

2L说得那个我早就想过了,好了可能算我没说明白,我要在游戏里设5到6个兵种,有些相克伤害是2倍,有些4倍,有些更高,如果只有2,3个不同种类的职业且相克造成的伤害倍率是一样的,用属性法还差不多,但是要自由设定的话这样就办不到了.
作者: 云心    时间: 2011-6-12 00:47
大致说一种思路(有很大局限性)
设有职业1、2、3、4、5、6,总共6种
在造成伤害的地方加判断,
造成伤害方职业为x,承受伤害方职业为 y
x-y的值为1或-5时,伤害为2倍
值为2或-4时,伤害为4倍
值为-1时,伤害为1/2
值为-2时,伤害为1/4





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