Project1

标题: 突然呆萌忘掉了是否有达成此功能的东西 [打印本页]

作者: 刹那铃音    时间: 2018-3-1 02:43
标题: 突然呆萌忘掉了是否有达成此功能的东西
每失去1%HP增加一定能力值这种应该有吧,但是找了好多再加上难以搜索,我也弱智一回来问问吧
作者: 芯☆淡茹水    时间: 2018-3-1 07:42
那每恢复 1% 的HP又会怎么样呢?
作者: 2256538860    时间: 2018-3-1 16:13
总觉得...不需要插件脚本就能做到呢
作者: 芯☆淡茹水    时间: 2018-3-2 08:39
大体是这个效果?

  1. #==============================================================================
  2. class Game_Actor < Game_Battler
  3.   #--------------------------------------------------------------------------
  4.   #HP每少 1% 属性增加的点数。格式:属性ID=>增加值。
  5.   #(1:最大MP;2:攻击;3:防御;4:魔攻;5:魔防;6:敏捷;7:运气)
  6.   # 某项属性不增加可写 0 或删除它。
  7.   HP_PLUS_DATA = {1=>1,2=>2,3=>1,4=>2,5=>1,6=>1.5,7=>1.5}
  8.   #--------------------------------------------------------------------------
  9.   def param(param_id)
  10.     return (param_id == 0 ? 0 : hp_rate_plus(param_id)) + super
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   def hp_rate_plus(param_id)
  14.     rate = (mhp - hp) * 100.0 / mhp
  15.     return ((HP_PLUS_DATA[param_id] || 0) * rate).to_i
  16.   end
  17. end
  18. #==============================================================================
复制代码


这个增加值是纯加,不会因 buff 而增幅。
作者: 300英雄    时间: 2018-3-2 20:23
    value = param_base(param_id) + param_plus(param_id) #基础+装备固定
    value *= param_rate(param_id) * param_buff_rate(param_id) #百分比*BUFF

param_id: 0 血量 1 法力值 2攻击力 3 防御 4 法强 5 法抗 6 速度 7 幸运

举个例子 value += 1(加的数值) if param_id == 2(这是p_id) #攻击力+1 总结来说,你只要把value看成一个数值就可以了,判定不止pid = X的 可以技能判定,状态判定等等。想知道更多判定方法可以看我的教程交流贴

介绍一个比较简单的例子:给1号角色+100血量—— value +=100 if param_id == 0 and self.id == 1 and self.actor?
pid = 0 id=1 确认为角色(self.enemy?这是确认敌人)
写起来可能会麻烦,但是学到了再去写是很快的,而且只受自身脑子的限制,而不会被其他的的构思限制

QQ截图20180302201715.png (116.38 KB, 下载次数: 30)

QQ截图20180302201715.png

作者: 芯☆淡茹水    时间: 2018-3-3 10:27
300英雄 发表于 2018-3-2 20:23
value = param_base(param_id) + param_plus(param_id) #基础+装备固定
    value *= param_rate(param ...



你这是在写教程? 还是在解决LZ问题?

如果是写教程,请稍微规范一点。
“ if param_id == 2(这是p_id)”  excuse me ???   p_id 是什么鬼?  
“判定不止pid = X的”                      这个 pid 又是什么东东?
讲真,可能本人比较愚钝,看得云里雾里。

如果是解决LZ问题,人家LZ提出的 每少1%HP增加属性, 你还没提到点子上呢?!
就“value += 1(加的数值) if param_id == 2”后面再判断“ self.id == 1”?!
那还不如直接 事件 - 更改角色属性 !

不就是需要 敌人 也要有这个效果吗?!
RUBY 代码复制
  1. #==============================================================================
  2. class Game_BattlerBase
  3.   #--------------------------------------------------------------------------
  4.   #HP每少 1% 属性增加的点数。格式:属性ID=>增加值。
  5.   #(1:最大MP;2:攻击;3:防御;4:魔攻;5:魔防;6:敏捷;7:运气)
  6.   # 某项属性不增加可写 0 或删除它。
  7.  
  8.   # ↓ 角色属性增加
  9.   ACTOR_HP_PLUS_DATA = {1=>1,2=>2,3=>1,4=>2,5=>1,6=>1.5,7=>1.5}
  10.  
  11.   # ↓ 敌人属性增加
  12.   ENEMY_HP_PLUS_DATA = {1=>0,2=>1,3=>0.5,4=>1,5=>1,6=>1,7=>1}
  13.   #--------------------------------------------------------------------------
  14.   alias xr_hp_plus_param param
  15.   def param(param_id)
  16.     return (param_id == 0 ? 0 : hp_rate_plus(param_id)) + xr_hp_plus_param(param_id)
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   def hp_rate_plus(param_id)
  20.     rate = (mhp - hp) * 100.0 / mhp
  21.     plus_data = actor? ? ACTOR_HP_PLUS_DATA : ENEMY_HP_PLUS_DATA
  22.     return ((plus_data[param_id] || 0) * rate).to_i
  23.   end
  24. end
  25. #==============================================================================


如果只需要 角色 有该效果,我干嘛一定要写在 父类 里面!!


作者: 300英雄    时间: 2018-3-3 16:31
本帖最后由 300英雄 于 2018-3-3 16:36 编辑

每少1%HP增加属性是吧 p_id是param_id的简写,字懒得打那么多,组合太灵活了:各种各样的判定说不完

这里分享技能类
if self.skills.include?($data_skills[X]) X表示你技能的ID,只要拥有这个技能就可以触发,角色持有的话:if self.skills.include?($data_skills[X]) and self.actor?添加一下就行
case param_id
when 1..7        这里数字看p_id的解释,血量是0号所以p_id不要弄0,会弄出A召唤B B召唤A的那种循环BUG
(self.mhp - self.hp).to_f / self.mhp.to_f * Y      Y是你要的数值每损失1%增加Y数值
end
end

self.skills.include?($data_skills[X])可以改成self.state?(X):表示状态ID。self.id如果要判断建议再判定一次self.enemy?或者self.actor?不然敌人角色只要符合你的判定都可以加的
作者: 芯☆淡茹水    时间: 2018-3-4 20:37
  1. #==============================================================================
  2. class Game_BattlerBase
  3.   #--------------------------------------------------------------------------
  4.   #HP每少 1% 属性增加的点数。格式:属性ID=>增加值。
  5.   #(1:最大MP;2:攻击;3:防御;4:魔攻;5:魔防;6:敏捷;7:运气)
  6.   # 某项属性不增加可写 0 或删除它。

  7.   # ↓ 角色属性增加
  8.   ACTOR_HP_PLUS_DATA = {1=>1,2=>2,3=>1,4=>2,5=>1,6=>1.5,7=>1.5}

  9.   # ↓ 敌人属性增加
  10.   ENEMY_HP_PLUS_DATA = {1=>0,2=>1,3=>0.5,4=>1,5=>1,6=>1,7=>1}
  11.   
  12.   # 备注:
  13.   # 装备 或 技能 备注:<HpRatePlus>
  14.   # 只有当角色穿上该装备或习得该技能时, 这个 属性增加 才起效。
  15.   
  16.   # 敌人也是备注:<HpRatePlus>
  17.   # 未备注的敌人不起效。
  18.   
  19.   #--------------------------------------------------------------------------
  20.   alias xr_hp_plus_param param
  21.   def param(param_id)
  22.     return (param_id == 0 ? 0 : hp_rate_plus(param_id)) + xr_hp_plus_param(param_id)
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   def hp_rate_plus(param_id)
  26.     return 0 unless meet_condition?
  27.     rate = (mhp - hp) * 100.0 / mhp
  28.     plus_data = actor? ? ACTOR_HP_PLUS_DATA : ENEMY_HP_PLUS_DATA
  29.     return ((plus_data[param_id] || 0) * rate).to_i
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   def meet_condition?
  33.     return actor? ? actor_condition : enemy_condition
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   def actor_condition
  37.     return equip_condition || skill_condition
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   def equip_condition
  41.     return equips.any?{|e| e && e.note.match(/<HpRatePlus>/)}
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   def skill_condition
  45.     return skills.any?{|s| s && s.note.match(/<HpRatePlus>/)}
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   def enemy_condition
  49.     return enemy && enemy.note.match(/<HpRatePlus>/)
  50.   end
  51. end
  52. #==============================================================================
复制代码





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