Project1

标题: 如何设置装备使其特效为生命值百分比转化为攻击力 [打印本页]

作者: xiaochen2098    时间: 2014-10-20 21:29
标题: 如何设置装备使其特效为生命值百分比转化为攻击力
设置装备想使其特效为将生命0.15%转化为攻击力  或者是最大魔力值0.5%转化为法力强度
作者: lirn    时间: 2014-10-21 11:43
参考救市小树的公式
作者: lirn    时间: 2014-10-30 18:21
本帖最后由 lirn 于 2014-10-30 18:23 编辑

在Game_Battler下找到,理论是这样,没试过
#--------------------------------------------------------------------------
  # ● 计算伤害
  #--------------------------------------------------------------------------
  def make_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables)
    value *= item_element_rate(user, item)
    value *= pdr if item.physical?
    value *= mdr if item.magical?
    value *= rec if item.damage.recover?
    value += self.hp*0.2 if self.state?(XX) #加这一行,这公式是附加当前生命值的20%
    value = apply_critical(value) if @result.critical
    value = apply_variance(value, item.damage.variance)
    value = apply_guard(value)
    @result.make_damage(value.to_i, item)
  end


因为敌人没有装备,所以直接判断装备与否可能会在敌人产生错误,建议配合自动状态脚本;或者可以给装备附加技能,然后以角色是否会该技能作为判断条件,只是我忘记了判断会不会某技能是怎么写的了。
作者: chd114    时间: 2014-10-30 21:42
先放这个https://rpg.blue/thread-365967-1-1.html
再放这个
  1. #--------------------------------------------------------------------------
  2. # ● require [url=home.php?mod=space&uid=102614]@taroxd[/url] 基础设置
  3. #    使用方法:在可以设置“特性”的地方备注 <drain r>。
  4. #              其中 r 为吸血的比例。
  5. #--------------------------------------------------------------------------

  6. RPG::BaseItem.note_f :drain

  7. class Game_Battler < Game_BattlerBase
  8.   #--------------------------------------------------------------------------
  9.   # ● 处理伤害
  10.   #--------------------------------------------------------------------------
  11.   def_after :execute_damage do |user|
  12.     user.hp += (@result.hp_damage * user.feature_objects.sum(&:drain)).to_i
  13.   end
  14. end
复制代码
或者参照楼上
作者: chd114    时间: 2014-10-30 21:44
lirn 发表于 2014-10-30 01:21
在Game_Battler下找到,理论是这样,没试过
#---------------------------------------------------------- ...

在Game_Enemy里面
  1.     @mp = mmp
  2.   end
复制代码
的下面加
  1.   #--------------------------------------------------------------------------
  2.   # ● 是否学会技能
  3.   #--------------------------------------------------------------------------
  4.   def skill_learn?(skill)
  5.     return false
  6.   end
  7.   #--------------------------------------------------------------------------
  8.   # ● 是否装备武器
  9.   #--------------------------------------------------------------------------
  10.   def weapon?(weapon)
  11.     return false
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   # ● 是否装备护甲
  15.   #--------------------------------------------------------------------------
  16.   def armor?(armor)
  17.     return false
  18.   end
复制代码

作者: chd114    时间: 2014-10-30 21:44
lirn 发表于 2014-10-30 01:21
在Game_Battler下找到,理论是这样,没试过
#---------------------------------------------------------- ...

如果敌人没有就会返回false···
作者: 三途亚梦    时间: 2014-10-31 16:49
楼主这个问题说的简单,但是解决起来挺麻烦的……

首先hp是一个会变动的数值,那么这个转化的比例会随着战斗和事件不断发生改变。
而后这个效果本质上来说是给人物的能力值增加一些数值,通过技能公式解决是看不到具体增加值是多少的。

那么就一定需要改动脚本才能做到这样的效果啦。

思路是这样的:
你在Game_BattlerBase的大概第500行找到
  1. def refresh
复制代码
然后在它的下面的
  1. @mp = [[@mp, mmp].min, 0].max
  2. @hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
复制代码
之间加入这么一段内容
  1.     if self.actor?
  2.       if self.weapons.include?($data_weapons[1])
  3.        if $game_variables[100] != @hp * 0.15
  4.          @param_plus[2] -= $game_variables[100]
  5.          $game_variables[100] = @hp * 0.15
  6.        end
  7.         @param_plus[2] += $game_variables[100]
  8.       else
  9.         @param_plus[2] -= $game_variables[100]
  10.       end
  11.     end
复制代码
这一段的效果就是该玩家人物装备id为1的武器时,会将该角色hp的0.15倍转化为atk。

这段代码存在缺陷,需要占用掉第100号变量,并且只能准确的检测一个这样装备,当有两个角色都装备了这个装备后就会出现计算错误。
作者: 希忆    时间: 2014-10-31 17:27
本帖最后由 希忆 于 2014-10-31 17:35 编辑

未测试
  1. #1号角色物理攻击力提升hp的15%魔法攻击力提升mp的15% 享受特性乘法修正
  2. class Game_BattlerBase
  3.   def param_plus(param_id)
  4.     add = 0
  5.     case param_id
  6.     when 2
  7.       add = (self.hp*0.15).to_i if self.is_a?(Game_Actor) and self.id == 1
  8.       #这里写计算方法和限制条件
  9.     when 4
  10.       add = (self.mp*0.15).to_i if self.is_a?(Game_Actor) and self.id == 1
  11.     end
  12.     @param_plus[param_id] + add
  13.   end
  14. end
复制代码

作者: 三途亚梦    时间: 2014-10-31 22:28
希忆 发表于 2014-10-31 17:27
未测试

这里我借用LS的思路修改了一下。
直接新开一个脚本,复制粘贴进去就有效果了。

#以下脚本的效果是,当玩家人物携带id为1的武器时hp的15%转化为atk,携带id为2的武器时mmp的50%转化为mat
RUBY 代码复制
  1. class Game_BattlerBase
  2.   def param_plus(param_id)
  3.     add = 0
  4.     case param_id
  5.     when 2
  6.       add = (self.hp*0.15).to_i if self.actor? && self.weapons.include?($data_weapons[1])
  7.       #这里写计算方法和限制条件
  8.     when 4
  9.       add = (self.mmp*0.5).to_i if self.actor? && self.weapons.include?($data_weapons[2])  
  10.     end
  11.     @param_plus[param_id] + add
  12.   end
  13. end





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