设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3583|回复: 5
打印 上一主题 下一主题

[已经解决] 萌新求助,怎么设置被动技能

[复制链接]

Lv2.观梦者

梦石
0
星屑
484
在线时间
24 小时
注册时间
2020-8-15
帖子
10
跳转到指定楼层
1
发表于 2020-8-23 17:15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
就比如说我设计一个被动技能【半龙体】,内容是增加角色生命上限1000,并且这个技能可以在特技栏里面看到。。。
事实上我打算和武器附带技能的脚本一起使用,就是装备该武器,人物的特技栏里就会显示【被动-半龙体】(当然,这是无法使用的),如果我把该装备脱下,该角色就会失去这个技能。。我还准备设置类似怪物被动模板的。。就是【精英模板】-血量加100-攻击加100。。。
我想通过设定状态来实现这个功能,但我发现首先是,状态里好像没法直接增加具体的数值;其次,如果设定了状态,就会变成每次战斗时都要使用才会出现这个状态。。这就使得很累赘。。
希望各位大佬能给我出出主意,谢谢了!

萌新一枚

Lv3.寻梦者

梦石
0
星屑
1976
在线时间
271 小时
注册时间
2019-12-4
帖子
21
2
发表于 2020-8-23 22:48:17 | 只看该作者
#可以使用装备附带hp/mp脚本,插入main前~使用方法在装备名称后面加 “,”
#列如 xx,1000,100,意思就是xx增加1000hp和100mp
#至于技能的话实际是个躯壳,没有任何效果,只需把技能改成不能使用即可~
module RPG
  class Weapon
    def name
      return @name.split(/,/)[0]
    end
    def hp
      return @name.split(/,/)[1] == nil ? 0 : @name.split(/,/)[1].to_i
    end
    def sp
      return @name.split(/,/)[2] == nil ? 0 : @name.split(/,/)[2].to_i
    end
  end
  class Armor
    def name
      return @name.split(/,/)[0]
    end
    def hp
      return @name.split(/,/)[1] == nil ? 0 : @name.split(/,/)[1].to_i
    end
    def sp
      return @name.split(/,/)[2] == nil ? 0 : @name.split(/,/)[2].to_i
    end
  end
end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 获取基本 MaxHP
  #--------------------------------------------------------------------------
  def base_maxhp
    n = $data_actors[@actor_id].parameters[0, @level]
    n += $data_weapons[@weapon_id].hp if $data_weapons[@weapon_id] != nil
    n += $data_armors[@armor1_id].hp if $data_armors[@armor1_id] != nil
    n += $data_armors[@armor2_id].hp if $data_armors[@armor2_id] != nil
    n += $data_armors[@armor3_id].hp if $data_armors[@armor3_id] != nil
    n += $data_armors[@armor4_id].hp if $data_armors[@armor4_id] != nil
    return n
  end
  #--------------------------------------------------------------------------
  # ● 获取基本 MaxSP
  #--------------------------------------------------------------------------
  def base_maxsp
    n = $data_actors[@actor_id].parameters[1, @level]
    n += $data_weapons[@weapon_id].sp if $data_weapons[@weapon_id] != nil
    n += $data_armors[@armor1_id].sp if $data_armors[@armor1_id] != nil
    n += $data_armors[@armor2_id].sp if $data_armors[@armor2_id] != nil
    n += $data_armors[@armor3_id].sp if $data_armors[@armor3_id] != nil
    n += $data_armors[@armor4_id].sp if $data_armors[@armor4_id] != nil
    return n
  end
  
  
  alias equip_hp_sp_old_dl equip
  def equip(equip_type, id)
    equip_hp_sp_old_dl(equip_type, id)
    @hp = maxhp if @hp > maxhp
    @sp = maxsp if @sp > maxsp
  end
end

评分

参与人数 1星屑 +50 +1 收起 理由
RyanBern + 50 + 1 认可答案

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

梦石
0
星屑
484
在线时间
24 小时
注册时间
2020-8-15
帖子
10
3
 楼主| 发表于 2020-8-23 23:12:31 | 只看该作者
kelove331 发表于 2020-8-23 22:48
#可以使用装备附带hp/mp脚本,插入main前~使用方法在装备名称后面加 “,”
#列如 xx,1000,100,意思就是xx ...

多谢!我想请教一下怎么把特技改为无法使用,谢谢了
萌新一枚
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1976
在线时间
271 小时
注册时间
2019-12-4
帖子
21
4
发表于 2020-8-24 00:01:57 | 只看该作者
独过三千陌 发表于 2020-8-23 23:12
多谢!我想请教一下怎么把特技改为无法使用,谢谢了

可能使用时:不能使用
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
484
在线时间
24 小时
注册时间
2020-8-15
帖子
10
5
 楼主| 发表于 2020-9-12 21:09:05 | 只看该作者
本帖最后由 独过三千陌 于 2020-9-12 21:12 编辑
  1. #我在天干宝典乙卷找到了被动技能的脚本,所以在这里特地把代码发出来,感谢Sailcat大佬!
复制代码


萌新一枚
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
484
在线时间
24 小时
注册时间
2020-8-15
帖子
10
6
 楼主| 发表于 2020-9-12 21:11:08 | 只看该作者
RUBY 代码复制
  1. =begin
  2. 很多游戏都有被动技能,所谓被动技能就是学会后不能使用,但有这样那样自动
  3. 效果的技能,比如增加HP,增加力量,增加防御等等.RMXP原本是没有被动技能的
  4. 设定的,增加这些值只能依靠武器防具装备和状态等.不过,要实现被动技能并不
  5. 复杂,甚至你可以通过数据库来设定被动技能的效果.
  6. 心得:一直就很想做这样一个系统,又不甘心到脚本里去用case..../if...这样
  7. 的条件分歧来手工一条条设定技能效果(因为麻烦,不通用,想改还不好改).不过
  8. ,在彻底了解了数据库的格式后,被动技能的系统便水到渠成了.
  9.  
  10. 本文虽然算是脚本发布,但更重的偏重于教学吧
  11. 被动技能的实现原理:
  12. 1.通过将该技能的使用场合设定为"不能使用"来明确声明这个技能是一个被动技
  13. 能(其实也没想到RMXP会在数据库中留这一手)
  14. 2.重新定义技能的各项数值,让它们成为被动技能的加成值,我这里用了一个充分
  15. 利用每一格,但同时兼顾直观并充分利用空间的定义方法
  16. 3.在Game_Actor里,通过修改取得的各种数据判定,追加被动技能的实际效果
  17.  
  18. 这个脚本发布的被动技能,其设定方法如下:
  19. 可能使用时: 不能使用 (重要,这是识别被动技能的标志也是惟一的标志,凡是设
  20. 定成这样的技能,不论其他设定如何,都会被认为是被动技能)
  21. 效果范围: 无 (这个实际上可以控制被动技能的分页,这一项有8条,也就可以设定
  22. 8页,每一页上的各个格子都可以赋予某个意义,原则上,你可以想出的任何千差万别
  23. 的被动技能都可以定义出来) 作为示范,脚本中所有的被动技效果,都是在效果范围
  24. 设成"无"时的效果,如果你设成其他的,就会失效(你可以自己去定义)
  25. 动画/SE/公共事件, 反正技能用不了,也没意义....留空就行了
  26. 下面那些格子是关键所在:
  27. 消费SP : 这是一个设定范围在0到9999间的格子,脚本中,我将它用做其他格子数值
  28. 正负的开关(因为很多格子不能设定负数),每个二进制位控制一个格子,9999以下可
  29. 以写出14个二进制位,足够使用了(只需要用10个),特别的,在本脚本中,当消费SP的
  30. 第12位被置成1时(其值为2048),代表被动技能效果"物理攻击强制命中"
  31. 威力 : 这是12格中惟一一个允许设定负数的格子,所以我将它和右边的属性/状态联
  32. 系起来(因为那两栏是无限扩展的,不好用消费SP的值来控制正负数开关)
  33. 余下的格子,除了攻击力F是0-200范围外,其余都是0-100,不过已经够了,基本上可以
  34. 满足脚本中使用功能的需要
  35. 攻击力F: 设为0以外的数值时,角色攻击力将增加(减少)这个数值的百分比
  36. 回避F: 设为0以外的数值时,角色回避力将增加(减少)这个数值的百分比
  37. 力量F: 设为0以外的数值时,角色力量将......百分比
  38. 灵巧F: 设为0以外的数值时,角色灵巧将......百分比
  39. 速度F: ........速度.....百分比
  40. 魔力F: .......魔力....百分比
  41. 防御力F: .....防御力.....
  42. 魔防力F: .....魔防力.....
  43. 只有"命中率"和"分散"两个值特殊,这里我将它们用做了MaxHP和MaxSP增加的百分比
  44. 数值的正负,通过消费SP值的二进制位来控制,从"攻击力"到"分散",按照格子的排列
  45. 顺序,对应消费SP值的第1位到第10位.某一位置1,这一格的值就会按负数计算
  46. 因为大多数情况下被动技能不太可能有降低属性值的效果,所以可能不会碰到这么复
  47. 杂的设定,这里只是留一个功能以防需要时使用.
  48.  
  49. 然后说一下右边那两排:
  50. 属性: 打勾的话,对应属性的防御度,会增加(威力)的数值
  51.      如果你想要实现属性相克的效果,比如提升火属性防御度会降低冰属性防御度,
  52. 也简单, 将"状态"那一栏里,横向相对的那一个状态打上减号,那么这个属性防御就会
  53. 减低(脚本中减低的数值是威力值的一半,你可以修改这个比率)
  54. 状态: 刚说了,这个是控制属性增减符号的,如果你想用它来控制状态,把属性里所有的
  55. 格子全部留空不打勾就可以了,这时,打了+状态属性的防御度,会增加(威力)的数值(更
  56. 不容易中这个状态),打了-状态属性的防御度,则会降低(威力)的数值(更容易中这个状态).
  57.      另外,如果你把SP消费的第11位置成1(值1024),那么+和-的定义会发生改变:打了
  58. +状态,会变成角色的自动状态(就像你穿上有自动状态的防具一样),打了-的状态,则会
  59. 变成完全免疫的状态(就像防具的防御状态一样).
  60. 例子: 一个学会后增加力量值百分之六十的技能
  61.  
  62.  
  63. 可以看到,以上的讨论,都是基于"被动技能是给角色增减能力"的情况,如果你要实现更
  64. 多的功能,比如"一人装备,全队生效",比如"己方装备,对敌人有效果",的情况,就要修改
  65. Game_Party或Game_Enemy的相关部分.这个脚本仅仅限于对Game_Actor的修改(少量Game
  66. _Battler,仅一处),在大多数情况下,已经够用了,基本能力的加成全都可以解决.
  67.  
  68. 被动技能生效的前提是学会这个技能, 如果你想实现像装备那样有栏位的....其实我已
  69. 经做到了,考虑到这个是我自己游戏系统比较核心的部分,就先暂缓放出来了....
  70.  
  71. 脚本,加了注释的,稍微通一些RGSS就能看出来其实这个系统实际上并不复杂(基本就是把
  72. 各个角色能力值全部重新定义一遍),只是难度比较高(因为牵涉到对数据库解释器的修改).
  73. =end
  74.  
  75.  
  76. #--------------------------------------------------------------------------
  77. # □ RPG::Skill
  78. #--------------------------------------------------------------------------
  79. module RPG
  80. class Skill
  81.    #--------------------------------------------------------------------------
  82.    # ● 特技类型 (0 : 攻击, 1 : 回复, 2 : 支援, 3 : 被动)
  83.    #--------------------------------------------------------------------------
  84.    def type
  85.      if @occasion == 3
  86.        return 3
  87.      elsif @power == 0 and @atk_f == 0
  88.        return 2
  89.      elsif @power < 0
  90.        return 1
  91.      else
  92.        return 0
  93.      end
  94.    end
  95.    #--------------------------------------------------------------------------
  96.    # ● 被动技判定
  97.    #--------------------------------------------------------------------------
  98.    def innate?
  99.      return (type == 3)
  100.    end
  101.    #--------------------------------------------------------------------------
  102.    # ● 获得被动特技类型
  103.    #     skill : 特技
  104.    #--------------------------------------------------------------------------
  105.    def innate_type
  106.      # 不是被动特技的情况下
  107.      if not innate?
  108.        return -1
  109.      end
  110.      case @scope
  111.      when 0
  112.        # 属性防御类特技
  113.        if @element_set != []
  114.          return 1
  115.        # 状态防御类特技
  116.        elsif @minus_state_set != [] or @plus_state_set != []
  117.          return 2
  118.        # 数值加成类特技
  119.        else
  120.          return 0
  121.        end
  122.      when 1
  123.        return 3
  124.      end
  125.    end
  126.    #--------------------------------------------------------------------------
  127.    # ● 判断增加或减少
  128.    #     index : 判断项目
  129.    #--------------------------------------------------------------------------
  130.    def sign(index)
  131.      unless innate?
  132.        return 0
  133.      end
  134.      if index >= 0
  135.        return (@sp_cost & (2 ** index) == 2 ** index) ? -1 : 1
  136.      else
  137.        case innate_type
  138.        when 0
  139.          return 0
  140.        when 1
  141.          return @minus_state_set.include?(-index) ? -0.5 : 1
  142.        when 2
  143.          return (@sp_cost & 1024 == 1024) ? true : false
  144.        end
  145.      end
  146.    end
  147.    #--------------------------------------------------------------------------
  148.    # ● 最大 HP 上升量
  149.    #--------------------------------------------------------------------------
  150.    def maxhp_plus
  151.      return (innate? and innate_type <= 2) ? @hit * sign(6) : 0
  152.    end
  153.    #--------------------------------------------------------------------------
  154.    # ● 最大 SP 上升量
  155.    #--------------------------------------------------------------------------
  156.    def maxsp_plus
  157.      return (innate? and innate_type <= 2) ? @variance * sign(9) : 0
  158.    end
  159.    #--------------------------------------------------------------------------
  160.    # ● 力量上升量
  161.    #--------------------------------------------------------------------------
  162.    def str_plus
  163.      return (innate? and innate_type <= 2) ? @str_f * sign(2) : 0
  164.    end
  165.    #--------------------------------------------------------------------------
  166.    # ● 灵巧上升量
  167.    #--------------------------------------------------------------------------
  168.    def dex_plus
  169.      return (innate? and innate_type <= 2) ? @dex_f * sign(3): 0
  170.    end
  171.    #--------------------------------------------------------------------------
  172.    # ● 速度上升量
  173.    #--------------------------------------------------------------------------
  174.    def agi_plus
  175.      return (innate? and innate_type <= 2) ? @agi_f * sign(4) : 0
  176.    end
  177.    #--------------------------------------------------------------------------
  178.    # ● 魔力上升量
  179.    #--------------------------------------------------------------------------
  180.    def int_plus
  181.      return (innate? and innate_type <= 2) ? @int_f * sign(5) : 0
  182.    end
  183.    #--------------------------------------------------------------------------
  184.    # ● 攻击力上升量
  185.    #--------------------------------------------------------------------------
  186.    def atk_plus
  187.      return (innate? and innate_type <= 2) ? @atk_f * sign(0) : 0
  188.    end
  189.    #--------------------------------------------------------------------------
  190.    # ● 防御力上升量
  191.    #--------------------------------------------------------------------------
  192.    def pdef_plus
  193.      return (innate? and innate_type <= 2) ? @pdef_f * sign(7) : 0
  194.    end
  195.    #--------------------------------------------------------------------------
  196.    # ● 魔防力上升量
  197.    #--------------------------------------------------------------------------
  198.    def mdef_plus
  199.      return (innate? and innate_type <= 2) ? @mdef_f * sign(8) : 0
  200.    end
  201.    #--------------------------------------------------------------------------
  202.    # ● 回避修正上升量
  203.    #--------------------------------------------------------------------------
  204.    def eva_plus
  205.      return (innate? and innate_type <= 2) ? @eva_f * sign(1) : 0
  206.    end
  207.    #--------------------------------------------------------------------------
  208.    # ● 属性防御上升量
  209.    #     element_id : 属性ID
  210.    #--------------------------------------------------------------------------
  211.    def element_plus(element_id)
  212.      unless innate? and innate_type == 1
  213.        return 0
  214.      else
  215.        if @element_set.include?(element_id)
  216.          return Integer(@power * sign(-element_id))
  217.        else
  218.          return 0
  219.        end
  220.      end
  221.    end
  222.    #--------------------------------------------------------------------------
  223.    # ● 状态防御上升量
  224.    #     state_id : 状态ID
  225.    #--------------------------------------------------------------------------
  226.    def state_plus(state_id)
  227.      unless innate? and innate_type == 2 and not sign(-1)
  228.        return 0
  229.      else
  230.        if @plus_state_set.include?(state_id)
  231.          return @power
  232.        elsif @minus_state_set.include?(state_id)
  233.          return -@power
  234.        else
  235.          return 0
  236.        end
  237.      end
  238.    end
  239.    #--------------------------------------------------------------------------
  240.    # ● 状态防御集合
  241.    #--------------------------------------------------------------------------
  242.    def guard_state_set
  243.      return (innate? and innate_type == 2 and sign(-1)) ? @minus_state_set : []
  244.    end
  245.    #--------------------------------------------------------------------------
  246.    # ● 自动状态集合
  247.    #--------------------------------------------------------------------------
  248.    def auto_states
  249.      return (innate? and innate_type == 2 and sign(-1)) ? @plus_state_set : []
  250.    end
  251. end
  252. end
  253. #==============================================================================
  254. # ■ Game_Actor (分割定义 2)
  255. #------------------------------------------------------------------------------
  256. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  257. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  258. #==============================================================================
  259.  
  260. class Game_Actor
  261. #--------------------------------------------------------------------------
  262. # ● 定义实例变量
  263. #--------------------------------------------------------------------------
  264. attr_reader   :innate_skills            # 被动特技
  265. alias sailcat_setup setup
  266. alias sailcat_learn_skill learn_skill
  267. alias sailcat_forget_skill forget_skill
  268. alias sailcat_base_maxhp base_maxhp
  269. alias sailcat_base_maxsp base_maxsp
  270. alias sailcat_base_str base_str
  271. alias sailcat_base_dex base_dex
  272. alias sailcat_base_agi base_agi
  273. alias sailcat_base_int base_int
  274. alias sailcat_base_atk base_atk
  275. alias sailcat_base_pdef base_pdef
  276. alias sailcat_base_mdef base_mdef
  277. alias sailcat_base_eva base_eva
  278. alias sailcat_element_rate element_rate
  279. alias sailcat_state_guard? state_guard?
  280. alias sailcat_hit hit
  281. #--------------------------------------------------------------------------
  282. # ● 设置
  283. #     actor_id : 角色 ID
  284. #--------------------------------------------------------------------------
  285. def setup(actor_id)
  286.    @innate_skills = []
  287.    sailcat_setup(actor_id)
  288. end
  289. #--------------------------------------------------------------------------
  290. # ● 领悟特技
  291. #     skill_id : 特技 ID
  292. #--------------------------------------------------------------------------
  293. def learn_skill(skill_id)
  294.    sailcat_learn_skill(skill_id)
  295.    unless @innate_skills.include?(skill_id)
  296.      @innate_skills.push(skill_id)
  297.      @innate_skills.sort!
  298.      update_skill_state(nil, $data_skills[skill_id])
  299.    end
  300. end
  301. #--------------------------------------------------------------------------
  302. # ● 遗忘特技
  303. #     skill_id : 特技 ID
  304. #--------------------------------------------------------------------------
  305. def forget_skill(skill_id)
  306.    sailcat_forget_skill(skill_id)
  307.    @innate_skills.delete(skill_id)
  308.    update_skill_state($data_skills[skill_id], nil)
  309. end
  310. #--------------------------------------------------------------------------
  311. # ● 更新被动特技的自动状态
  312. #     old_skill : 去除的特技
  313. #     new_skill : 设定的特技
  314. #--------------------------------------------------------------------------
  315. def update_skill_state(old_skill, new_skill)
  316.    if old_skill != nil and old_skill.auto_states != []
  317.      for state in old_skill.auto_states
  318.        remove_state(state, true)
  319.      end
  320.    end
  321.    if new_skill != nil and new_skill.auto_states != []
  322.      for state in new_skill.auto_states
  323.        add_state(state, true)
  324.      end
  325.    end
  326. end
  327. #--------------------------------------------------------------------------
  328. # ● 获取基本 MaxHP
  329. #--------------------------------------------------------------------------
  330. def base_maxhp
  331.    m = n = sailcat_base_maxhp
  332.    for skill_id in @innate_skills
  333.      skill = $data_skills[skill_id]
  334.      n += m * (skill != nil ? skill.maxhp_plus : 0) / 100
  335.    end
  336.    return n
  337. end
  338. #--------------------------------------------------------------------------
  339. # ● 获取基本 MaxSP
  340. #--------------------------------------------------------------------------
  341. def base_maxsp
  342.    m = n = sailcat_base_maxsp
  343.    for skill_id in @innate_skills
  344.      skill = $data_skills[skill_id]
  345.      n += m * (skill != nil ? skill.maxsp_plus : 0) / 100
  346.    end
  347.    return n
  348. end
  349. #--------------------------------------------------------------------------
  350. # ● 获取基本力量
  351. #--------------------------------------------------------------------------
  352. def base_str
  353.    m = n = sailcat_base_str
  354.    for skill_id in @innate_skills
  355.      skill = $data_skills[skill_id]
  356.      n += m * (skill != nil ? skill.str_plus : 0) / 100
  357.    end
  358.    return [n, 999].min
  359. end
  360. #--------------------------------------------------------------------------
  361. # ● 获取基本灵巧
  362. #--------------------------------------------------------------------------
  363. def base_dex
  364.    m = n = sailcat_base_dex
  365.    for skill_id in @innate_skills
  366.      skill = $data_skills[skill_id]
  367.      n += m * (skill != nil ? skill.dex_plus : 0) / 100
  368.    end
  369.    return [n, 999].min
  370. end
  371. #--------------------------------------------------------------------------
  372. # ● 获取基本速度
  373. #--------------------------------------------------------------------------
  374. def base_agi
  375.    m = n = sailcat_base_agi
  376.    for skill_id in @innate_skills
  377.      skill = $data_skills[skill_id]
  378.      n += m * (skill != nil ? skill.agi_plus : 0) / 100
  379.    end
  380.    return [n, 999].min
  381. end
  382. #--------------------------------------------------------------------------
  383. # ● 获取基本魔力
  384. #--------------------------------------------------------------------------
  385. def base_int
  386.    m = n = sailcat_base_int
  387.    for skill_id in @innate_skills
  388.      skill = $data_skills[skill_id]
  389.      n += m * (skill != nil ? skill.int_plus : 0) / 100
  390.    end
  391.    return [n, 999].min
  392. end
  393. #--------------------------------------------------------------------------
  394. # ● 获取基本攻击力
  395. #--------------------------------------------------------------------------
  396. def base_atk
  397.    m = n = sailcat_base_atk
  398.    for skill_id in @innate_skills
  399.      skill = $data_skills[skill_id]
  400.      n += m * (skill != nil ? skill.atk_plus : 0) / 100
  401.    end
  402.    return [n, 999].min
  403. end
  404. #--------------------------------------------------------------------------
  405. # ● 获取基本物理防御
  406. #--------------------------------------------------------------------------
  407. def base_pdef
  408.    m = n = sailcat_base_pdef
  409.    for skill_id in @innate_skills
  410.      skill = $data_skills[skill_id]
  411.      n += m * (skill != nil ? skill.pdef_plus : 0) / 100
  412.    end
  413.    return [n, 999].min
  414. end
  415. #--------------------------------------------------------------------------
  416. # ● 获取基本魔法防御
  417. #--------------------------------------------------------------------------
  418. def base_mdef
  419.    m = n = sailcat_base_mdef
  420.    for skill_id in @innate_skills
  421.      skill = $data_skills[skill_id]
  422.      n += m * (skill != nil ? skill.mdef_plus : 0) / 100
  423.    end
  424.    return [n, 999].min
  425. end
  426. #--------------------------------------------------------------------------
  427. # ● 获取基本回避修正
  428. #--------------------------------------------------------------------------
  429. def base_eva
  430.    n = sailcat_base_eva
  431.    for skill_id in @innate_skills
  432.      skill = $data_skills[skill_id]
  433.      n += skill != nil ? skill.eva_plus : 0
  434.    end
  435.    return [n, 100].min
  436. end
  437. #--------------------------------------------------------------------------
  438. # ● 获取命中率
  439. #--------------------------------------------------------------------------
  440. def hit
  441.    n = sailcat_hit
  442.    for skill_id in @innate_skills
  443.      skill = $data_skills[skill_id]
  444.      n = (skill != nil and skill.sign(12) == -1) ? 100 : n
  445.    end
  446.    return n
  447. end
  448. #--------------------------------------------------------------------------
  449. # ● 判定防御状态
  450. #     state_id : 状态 ID
  451. #--------------------------------------------------------------------------
  452. def state_guard?(state_id)
  453.    n = sailcat_state_guard?(state_id)
  454.    for skill_id in @innate_skills
  455.      skill = $data_skills[skill_id]
  456.      n |= skill.guard_state_set.include?(state_id) if skill != nil
  457.    end
  458.    return n
  459. end
  460. #--------------------------------------------------------------------------
  461. # ● 取得属性修正值
  462. #     element_id : 属性 ID
  463. #--------------------------------------------------------------------------
  464. def element_rate(element_id)
  465.    result = sailcat_element_rate(element_id)
  466.    for skill_id in @innate_skills
  467.      skill = $data_skills[skill_id]
  468.      if skill != nil
  469.        result -= skill.element_plus(element_id)
  470.        result = [[result, 300].min, -200].max
  471.      end
  472.    end
  473.    return result
  474. end
  475. #--------------------------------------------------------------------------
  476. # ● 取得状态修正值
  477. #     state_id : 状态 ID
  478. #--------------------------------------------------------------------------
  479. def state_rate(state_id)
  480.    table = [0,100,80,60,40,20,0]
  481.    result = table[self.state_ranks[state_id]]
  482.    for skill_id in @innate_skills
  483.      skill = $data_skills[skill_id]
  484.      if skill != nil
  485.        result -= skill.state_plus(state_id)
  486.        result = [[result, 100].min, 0].max
  487.      end
  488.    end
  489.    return result
  490. end
  491. end
  492. class Game_Battler
  493. #--------------------------------------------------------------------------
  494. # ● 状态变化 (+) 的适用
  495. #     plus_state_set  : 状态变化 (+)
  496. #--------------------------------------------------------------------------
  497. def states_plus(plus_state_set)
  498.    # 清除有效标志
  499.    effective = false
  500.    # 循环 (附加状态)
  501.    for i in plus_state_set
  502.      # 无法防御本状态的情况下
  503.      unless self.state_guard?(i)
  504.        # 这个状态如果不是 full 的话就设置有效标志
  505.        effective |= self.state_full?(i) == false
  506.        # 状态为 [不能抵抗] 的情况下
  507.        if $data_states[i].nonresistance
  508.          # 设置状态变化标志
  509.          @state_changed = true
  510.          # 附加状态
  511.          add_state(i)
  512.        # 这个状态不是 full 的情况下
  513.        elsif self.state_full?(i) == false
  514.          # 将状态的有效度变换为概率、与随机数比较
  515.          if rand(100) < self.state_rate(i)
  516.            # 设置状态变化标志
  517.            @state_changed = true
  518.            # 附加状态
  519.            add_state(i)
  520.          end
  521.        end
  522.      end
  523.    end
  524.    # 过程结束
  525.    return effective
  526. end
  527. end
  528. class Game_Enemy
  529. #--------------------------------------------------------------------------
  530. # ● 获取状态修正值
  531. #     state_id : 状态 ID
  532. #--------------------------------------------------------------------------
  533. def state_rate(state_id)
  534.    return [0,100,80,60,40,20,0][self.state_ranks[state_id]]
  535. end
  536. end
萌新一枚
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 22:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表