Project1

标题: 属性修正值的计算方法改动 [打印本页]

作者: cftx    时间: 2006-8-11 16:13
标题: 属性修正值的计算方法改动
RMXP的默认属性修正值计算方法是依次检查所有防具和状态,只要拥有该属性防御那么该属性有效度就减半,这样的计算方法局限性很大,比如本来是正值的属性有效度无论如何也不会变成负值(属性吸收),本来是吸收100%火属性(有效度为-100%)的人再装备上火属性抵抗的装备吸收效果反而会下降,因此,我做了一些改动,自己用的,也发上来给大家看看......

属性修正的计算在Game_Actor107行和Game_Enemy118行处,因此我在这里动了手脚.
Game_Actor里的内容为
  1. #--------------------------------------------------------------------------
  2. # ● 取得属性修正值
  3. #     element_id : 属性 ID
  4. #--------------------------------------------------------------------------
  5. def element_rate(element_id)
  6.    # 获取对应属性有效度的数值
  7.    table = [0,200,150,100,50,0,-100]
  8.    result = table[$data_classes[@class_id].element_ranks[element_id]]
  9.    # 防具能防御本属性的情况下效果减半
  10.    for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  11.      armor = $data_armors[i]
  12.      if armor != nil and armor.guard_element_set.include?(element_id)
  13.        result /= 2
  14.      end
  15.    end
  16.    # 状态能防御本属性的情况下效果减半
  17.    for i in @states
  18.      if $data_states[i].guard_element_set.include?(element_id)
  19.        result /= 2
  20.      end
  21.    end
  22.    # 过程结束
  23.    return result
  24. end
复制代码

我把它改成
  1. #--------------------------------------------------------------------------
  2.   # ● 取得属性修正值
  3.   #     element_id : 属性 ID
  4.   #--------------------------------------------------------------------------
  5.   def element_rate(element_id)
  6.     # 获取对应属性有效度的数值
  7.     table = [0,200,150,100,50,0,-100]
  8.     result = table[$data_classes[@class_id].element_ranks[element_id]]
  9.     # 防具能防御本属性的情况下
  10.     for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  11.       beishu=1
  12.       armor = $data_armors[i]
  13.       if armor != nil and armor.guard_element_set.include?(37)
  14.         beishu=2
  15.       elsif armor != nil and armor.guard_element_set.include?(38)
  16.         beishu=3
  17.       elsif armor != nil and armor.guard_element_set.include?(39)
  18.         beishu=4
  19.       end
  20.       if armor != nil and armor.guard_element_set.include?(40)
  21.         beishu *= -1
  22.       end
  23.       armor = $data_armors[i]
  24.       if armor != nil and armor.guard_element_set.include?(element_id)
  25.         result -= 35*beishu
  26.         if result > 200 then result=200
  27.         elsif result <-100 then result =-100
  28.         end
  29.       end
  30.     end
  31.     # 状态能防御本属性的情况下
  32.     for i in @states
  33.       beishu=1
  34.       if $data_states[i].guard_element_set.include?(37)
  35.         beishu= 2
  36.       elsif $data_states[i].guard_element_set.include?(38)
  37.         beishu= 3
  38.       elsif $data_states[i].guard_element_set.include?(39)
  39.         beishu= 4
  40.       end
  41.       if $data_states[i].guard_element_set.include?(40)
  42.         beishu *= -1
  43.       end
  44.       if $data_states[i].guard_element_set.include?(element_id)
  45.         result -= 35*beishu
  46.         if result > 200 then result=200
  47.         elsif result <-100 then result =-100
  48.         end
  49.       end
  50.     end
  51.     # 过程结束
  52.     return result
  53.   end
复制代码

这样修改的效果是,每个拥有属性防御的装备或者状态会使其防御的属性的属性有效度下降35%,另外如果它的属性防御里包括37号属性,那么效果加倍,如果包括38号,效果3倍,如果包括39号,效果4倍,如果包括40号,效果变成属性有效度增加.
另外,某人物的属性有效度上限为200%,下限为-100%,以防出现不可预期的错误......

例如:
抗炎戒指的属性防御中包括001(炎)和037,那么其装备效果为对该人物火属性有效度下降70%(35%×2)
全金属盔甲的属性防御中包括003(雷)和040,那么其装备效果为对该人物雷属性有效度上升35%(-35%)
状态"神之护盾"的属性防御中包括001~008(所有属性)和039,那么其装备效果为对该人物所有属性有效度下降140%(35%×4)
状态"光暗脆弱"的属性防御中包括007(光)、008(暗)、038、040,那么其装备效果为对该人物光和暗属性有效度上升105(-35%×3)

某人物初始所有属性有效度为100%(C),装备全金属盔甲(雷有效+35%)、抗炎戒指(火有效-70%),拥有状态神之护盾(全有效下降140%)、光暗脆弱(光暗有效+105%)。则其最终属性有效度为光、暗65%,雷-5%,火-100%(低于-100%,自动修正),其余属性都是-40%。




              [本贴由 雷欧纳德 于 2006-11-20 18:55:35 进行了编辑]
作者: cftx    时间: 2006-8-11 16:13
标题: 属性修正值的计算方法改动
RMXP的默认属性修正值计算方法是依次检查所有防具和状态,只要拥有该属性防御那么该属性有效度就减半,这样的计算方法局限性很大,比如本来是正值的属性有效度无论如何也不会变成负值(属性吸收),本来是吸收100%火属性(有效度为-100%)的人再装备上火属性抵抗的装备吸收效果反而会下降,因此,我做了一些改动,自己用的,也发上来给大家看看......

属性修正的计算在Game_Actor107行和Game_Enemy118行处,因此我在这里动了手脚.
Game_Actor里的内容为
  1. #--------------------------------------------------------------------------
  2. # ● 取得属性修正值
  3. #     element_id : 属性 ID
  4. #--------------------------------------------------------------------------
  5. def element_rate(element_id)
  6.    # 获取对应属性有效度的数值
  7.    table = [0,200,150,100,50,0,-100]
  8.    result = table[$data_classes[@class_id].element_ranks[element_id]]
  9.    # 防具能防御本属性的情况下效果减半
  10.    for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  11.      armor = $data_armors[i]
  12.      if armor != nil and armor.guard_element_set.include?(element_id)
  13.        result /= 2
  14.      end
  15.    end
  16.    # 状态能防御本属性的情况下效果减半
  17.    for i in @states
  18.      if $data_states[i].guard_element_set.include?(element_id)
  19.        result /= 2
  20.      end
  21.    end
  22.    # 过程结束
  23.    return result
  24. end
复制代码

我把它改成
  1. #--------------------------------------------------------------------------
  2.   # ● 取得属性修正值
  3.   #     element_id : 属性 ID
  4.   #--------------------------------------------------------------------------
  5.   def element_rate(element_id)
  6.     # 获取对应属性有效度的数值
  7.     table = [0,200,150,100,50,0,-100]
  8.     result = table[$data_classes[@class_id].element_ranks[element_id]]
  9.     # 防具能防御本属性的情况下
  10.     for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  11.       beishu=1
  12.       armor = $data_armors[i]
  13.       if armor != nil and armor.guard_element_set.include?(37)
  14.         beishu=2
  15.       elsif armor != nil and armor.guard_element_set.include?(38)
  16.         beishu=3
  17.       elsif armor != nil and armor.guard_element_set.include?(39)
  18.         beishu=4
  19.       end
  20.       if armor != nil and armor.guard_element_set.include?(40)
  21.         beishu *= -1
  22.       end
  23.       armor = $data_armors[i]
  24.       if armor != nil and armor.guard_element_set.include?(element_id)
  25.         result -= 35*beishu
  26.         if result > 200 then result=200
  27.         elsif result <-100 then result =-100
  28.         end
  29.       end
  30.     end
  31.     # 状态能防御本属性的情况下
  32.     for i in @states
  33.       beishu=1
  34.       if $data_states[i].guard_element_set.include?(37)
  35.         beishu= 2
  36.       elsif $data_states[i].guard_element_set.include?(38)
  37.         beishu= 3
  38.       elsif $data_states[i].guard_element_set.include?(39)
  39.         beishu= 4
  40.       end
  41.       if $data_states[i].guard_element_set.include?(40)
  42.         beishu *= -1
  43.       end
  44.       if $data_states[i].guard_element_set.include?(element_id)
  45.         result -= 35*beishu
  46.         if result > 200 then result=200
  47.         elsif result <-100 then result =-100
  48.         end
  49.       end
  50.     end
  51.     # 过程结束
  52.     return result
  53.   end
复制代码

这样修改的效果是,每个拥有属性防御的装备或者状态会使其防御的属性的属性有效度下降35%,另外如果它的属性防御里包括37号属性,那么效果加倍,如果包括38号,效果3倍,如果包括39号,效果4倍,如果包括40号,效果变成属性有效度增加.
另外,某人物的属性有效度上限为200%,下限为-100%,以防出现不可预期的错误......

例如:
抗炎戒指的属性防御中包括001(炎)和037,那么其装备效果为对该人物火属性有效度下降70%(35%×2)
全金属盔甲的属性防御中包括003(雷)和040,那么其装备效果为对该人物雷属性有效度上升35%(-35%)
状态"神之护盾"的属性防御中包括001~008(所有属性)和039,那么其装备效果为对该人物所有属性有效度下降140%(35%×4)
状态"光暗脆弱"的属性防御中包括007(光)、008(暗)、038、040,那么其装备效果为对该人物光和暗属性有效度上升105(-35%×3)

某人物初始所有属性有效度为100%(C),装备全金属盔甲(雷有效+35%)、抗炎戒指(火有效-70%),拥有状态神之护盾(全有效下降140%)、光暗脆弱(光暗有效+105%)。则其最终属性有效度为光、暗65%,雷-5%,火-100%(低于-100%,自动修正),其余属性都是-40%。




              [本贴由 雷欧纳德 于 2006-11-20 18:55:35 进行了编辑]
作者: cftx    时间: 2006-8-11 16:15
差点忘了,还有敌人部分......
Game_Enemy中118行起
  1. #--------------------------------------------------------------------------
  2. # ● 获取属性修正值
  3. #     element_id : 属性 ID
  4. #--------------------------------------------------------------------------
  5. def element_rate(element_id)
  6.    # 获取对应属性有效度的数值
  7.    table = [0,200,150,100,50,0,-100]
  8.    result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
  9.    # 状态能防御本属性的情况下效果减半
  10.    for i in @states
  11.      if $data_states[i].guard_element_set.include?(element_id)
  12.        result /= 2
  13.      end
  14.    end
  15.    # 过程结束
  16.    return result
  17. end
复制代码

改为
  1. #--------------------------------------------------------------------------
  2.   # ● 获取属性修正值
  3.   #     element_id : 属性 ID
  4.   #--------------------------------------------------------------------------
  5.   def element_rate(element_id)
  6.     # 获取对应属性有效度的数值
  7.     table = [0,200,150,100,50,0,-100]
  8.     result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
  9.     # 状态能防御本属性的情况下效果减半
  10.     for i in @states
  11.       beishu=1
  12.       if $data_states[i].guard_element_set.include?(37)
  13.         beishu= 2
  14.       elsif $data_states[i].guard_element_set.include?(38)
  15.         beishu= 3
  16.       elsif $data_states[i].guard_element_set.include?(39)
  17.         beishu= 4
  18.       end
  19.       if $data_states[i].guard_element_set.include?(40)
  20.         beishu *= -1
  21.       end
  22.       if $data_states[i].guard_element_set.include?(element_id)
  23.         result -= 35*beishu
  24.         if result > 200 then result=200
  25.         elsif result <-100 then result =-100
  26.         end
  27.       end
  28.     end
  29.     # 过程结束
  30.     return result
  31.   end
复制代码

作者: OCTSJimmy    时间: 2006-8-11 20:16
嗯!不错不错!!!

这个想法很棒!!!!
作者: cftx    时间: 2006-8-12 04:01
问题是这个脚本还是只能实现8个属性变动,不够自由......
而且无法设定单一装备或者状态对多个属性有不同的影响效果(比如火+70%,水-35%......)
想不到这些问题的简单解决方法,盼望高手指导..............
作者: MogStar    时间: 2006-8-12 16:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: cftx    时间: 2006-8-12 17:01
只能如此了..............比如状态"潮湿@火-100@水+100"之类的,可是我不会这方面的代码......
作者: 柳柳    时间: 2006-11-11 12:26
提前一下……等待发布……
作者: heiman    时间: 2007-3-2 17:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: 伊卡路斯公爵    时间: 2007-3-2 18:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: cftx    时间: 2007-3-2 19:53
回上上楼,不会的,因为这只是动了装备和状态对属性有效的修正,基础的属性有效度部分没有动
回上楼,其实我也是这样................
作者: gpra8764    时间: 2007-3-3 03:19
提示: 作者被禁止或删除 内容自动屏蔽




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