查看: 2478|回复: 3

[已经解决] 关于附带叠加状态的武器(已解决)

[复制链接]
梦石
10
星屑
7625
在线时间
684 小时
注册时间
2017-1-9
回帖
596

我没有哭开拓者

发表于 2017-2-18 01:20:42 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 世界第一中二 于 2017-2-18 15:36 编辑

QwQ求助~~~~~~
萌新想要制作这样的一把武器:
炎之剑:物攻+5,10%几率使目标灼伤(第30号状态,持续减血)
想为这把武器附加这样一个效果:每次使用这把武器攻击(普攻)目标,为目标附加一层【易伤】状态,最高叠加五层,每层增加敌人被这把武器攻击到时所受伤害的10%以及增加5%的被灼烧率
举例就是a了一个敌人三下后,敌人身上就会有3层【易伤】,我使用炎之剑再次攻击对手的时候伤害变为130%且有25%几率灼烧对手。
另外,因为萌新的人物有改变所持武器的技能,所以希望使用技能更换武器之后,即使敌人身上有易伤状态,也不会享受伤害加成与灼烧几率加成
另附,萌新不要求一定要将【易伤】效果显示在敌人的状态栏中,也就是说即使它只是个脚本公式而不是个新制作的状态萌新也完全不会介意
恳求各位大佬伸出援手~
如果这个问题有使用事件解决的方法那真是上上之策。
这个B天天摸鱼,快点来个谁把他从被窝里拖出来
梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
回帖
659

开拓者

发表于 2017-2-18 10:39:23 | 显示全部楼层
本帖最后由 jianyulei 于 2017-2-18 10:56 编辑

首先你需要以下状态叠加的脚本
点击展开/收起[pre lang="ruby"]class Game_Battler

  STATE_UPGRADE = {
#    28 => [28, 29, 30],  # 28、29、30号状态为三个等级。通过添加28号状态来升级
     10 => [10, 11, 12, 13, 14]   #预设好的炎之剑易伤10-14号,记得最后句的后面没有逗号
  }

  alias as_20141212 add_state
  def add_state(id)
    levels = STATE_UPGRADE[id]
    return as_20141212(id) unless levels
    index = levels.index { |state| state?(state) } # 当前等级
    return as_20141212(id) unless index
    return if index == levels.size - 1   # 已经达到最高等级
    remove_state levels[index]
    as_20141212 levels[index + 1]
  end

end[/pre]


状态叠加的问题解决了,现在该修改伤害和附加率的判定了
修改make_damage_value段,增加下面几句在value = item.damage.eval(user, self, $game_variables)这句的后面

    if user.actor? && user.weapons.include?($data_weapons[3])    #注1
      (10..14).each do |i|            #注2
      value *= ((i-9)*0.1+1).to_i  if self.state?(i)     #注3
    end;end;
#注1:其中数字3是炎之剑的ID,改成你需要的ID号,先判断user.actor?避免敌人无武器判定时报错,
#注2:循环语句,10-14是你的易伤的5层状态的状态ID,14是最高,10是最低,一定要记得有序增加的排列,你可以修改成你需要的ID号,记得要和叠加脚本里的同步
#注3:判断对方是否有循环中的状态然后增加伤害,这里面的9你要改成你第一层易伤的ID少1的数值,例如你上面改成了20-24,那么这里应该是19

不清楚某段在哪里可以选中脚本左列的名称后CTRL+SHIFT+F,进行全局搜索

以及修改item_effect_add_state_normal,增加到 chance *= user.atk_states_rate(state_id) 这句的后面
    if user.actor? && user.weapons.include?($data_weapons[3])
      (10..14).each do |i|
      chance += ((i-9)*0.05)  if  state_id == 30 && self.state?(i)        #和上面句子相比多了一句判断该状态是否是30号状态(灼烧)
      end;end;

缺点是附加易伤的当前回合也会增加灼烧的附加率


评分

参与人数 1梦石 +1 收起 理由
RaidenInfinity + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
10
星屑
7625
在线时间
684 小时
注册时间
2017-1-9
回帖
596

我没有哭开拓者

 楼主| 发表于 2017-2-18 15:36:25 | 显示全部楼层
谢谢dalao解答,问题已解决。
果然大部分想要实现的功能都要通过脚本哎
萌新总想直接用事件解决一切看起来不大现实QwQ
这个B天天摸鱼,快点来个谁把他从被窝里拖出来
回复

使用道具 举报

梦石
0
星屑
2019
在线时间
940 小时
注册时间
2015-10-26
回帖
293

开拓者

发表于 2017-2-18 22:46:58 | 显示全部楼层
攻击附加状态要脚本
给自己叠BUFF可以用事件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部