Project1

标题: 被动技能 [打印本页]

作者: tan12345    时间: 2013-12-19 12:41
标题: 被动技能
不知道这个东西能不能发表,而且我是菜鸟,这东西又非常简单,而且有先例,只是先例里的计算方式和VA默认的计算方式有些不对,所以我重写了这个……
RUBY 代码复制
  1. =begin
  2. # 被动技能脚本(只针对人物,敌人无效,因为敌人没有学会技能这一说)
  3. # 使用方法:在数据库-技能-备注栏里添加备注(可多行),其中:
  4. # <atk = i>            代表atk增加i
  5. # <def = i>            代表def增加i
  6. # <mat = i>            代表mat增加i
  7. # <mdf = i>            代表mdf增加i
  8. # <agi = i>            代表agi增加i
  9. # <luk = i>            代表luk增加i
  10. # <mhp = i>            代表mhp增加i
  11. # <mmp = i>            代表mmp增加i
  12. #
  13. # <ratk = i>           代表atk增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  14. # <rdef = i>           代表def增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  15. # <rmat = i>           代表mat增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  16. # <rmdf = i>           代表mdf增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  17. # <ragi = i>           代表agi增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  18. # <rluk = i>           代表luk增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  19. # <rmhp = i>           代表mhp增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  20. # <rmmp = i>           代表mmp增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  21. #
  22. # <hit = i>             代表命中率增加i%
  23. # <eva = i>             代表回避率增加i%
  24. # <cri = i>             代表必杀率增加i%
  25. # <cev = i>             代表必杀回避率增加i%
  26. # <mev = i>             代表魔法回避率增加i%
  27. # <mrf = i>             代表魔法反射率增加i%
  28. # <cnt = i>             代表反击率增加i%
  29. # <hrg = i>             代表HP再生率增加i%
  30. # <mrg = i>             代表MP再生率增加i%
  31. # <trg = i>             代表TP再生率增加i%
  32. =end
  33. class Game_Actor < Game_Battler
  34.   #--------------------------------------------------------------------------
  35.   # ● 获取技能数组的被动属性(加法)
  36.   #--------------------------------------------------------------------------
  37.   def get_skills_paramad(param_id)
  38.     ren = 0
  39.     case param_id
  40.     when 0          #HP
  41.       skills.each {|skill| ren += (skill.note =~ /<mhp = (\d+?)>/i ? $1.to_i : 0) }
  42.     when 1          #MP
  43.       skills.each {|skill| ren += (skill.note =~ /<mmp = (\d+?)>/i ? $1.to_i : 0) }
  44.     when 2          #atk
  45.       skills.each {|skill| ren += (skill.note =~ /<atk = (\d+?)>/i ? $1.to_i : 0) }
  46.     when 3          #def
  47.       skills.each {|skill| ren += (skill.note =~ /<def = (\d+?)>/i ? $1.to_i : 0) }
  48.     when 4          #mat
  49.       skills.each {|skill| ren += (skill.note =~ /<mat = (\d+?)>/i ? $1.to_i : 0) }
  50.     when 5          #mdf
  51.       skills.each {|skill| ren += (skill.note =~ /<mdf = (\d+?)>/i ? $1.to_i : 0) }
  52.     when 6          #agi
  53.       skills.each {|skill| ren += (skill.note =~ /<agi = (\d+?)>/i ? $1.to_i : 0) }
  54.     when 7          #luk
  55.       skills.each {|skill| ren += (skill.note =~ /<luk = (\d+?)>/i ? $1.to_i : 0) }
  56.     else
  57.     end
  58.     return ren
  59.   end
  60.  
  61.   #--------------------------------------------------------------------------
  62.   # ● 获取技能数组的被动属性(乘法)
  63.   #--------------------------------------------------------------------------
  64.   def get_skills_parammu(param_id)
  65.     ren = 0
  66.     case param_id
  67.     when 0          #HP
  68.       skills.each {|skill| ren += (skill.note =~ /<rmhp = (\d+?)>/i ? $1.to_i : 0) }
  69.     when 1          #MP
  70.       skills.each {|skill| ren += (skill.note =~ /<rmmp = (\d+?)>/i ? $1.to_i : 0) }
  71.     when 2          #atk
  72.       skills.each {|skill| ren += (skill.note =~ /<ratk = (\d+?)>/i ? $1.to_i : 0) }
  73.     when 3          #def
  74.       skills.each {|skill| ren += (skill.note =~ /<rdef = (\d+?)>/i ? $1.to_i : 0) }
  75.     when 4          #mat
  76.       skills.each {|skill| ren += (skill.note =~ /<rmat = (\d+?)>/i ? $1.to_i : 0) }
  77.     when 5          #mdf
  78.       skills.each {|skill| ren += (skill.note =~ /<rmdf = (\d+?)>/i ? $1.to_i : 0) }
  79.     when 6          #agi
  80.       skills.each {|skill| ren += (skill.note =~ /<ragi = (\d+?)>/i ? $1.to_i : 0) }
  81.     when 7          #luk
  82.       skills.each {|skill| ren += (skill.note =~ /<rluk = (\d+?)>/i ? $1.to_i : 0) }
  83.     else
  84.     end
  85.     return ren * 0.01
  86.   end
  87.  
  88.   #--------------------------------------------------------------------------
  89.   # ● 获取技能数组的被动特殊属性(加法)
  90.   #--------------------------------------------------------------------------
  91.   def get_skills_xparamad(xparam_id)
  92.     ren = 0
  93.     case xparam_id
  94.     when 0          #命中率hit
  95.       skills.each {|skill| ren += (skill.note =~ /<hit = (\d+?)>/i ? $1.to_i : 0) }
  96.     when 1          #闪避率eva
  97.       skills.each {|skill| ren += (skill.note =~ /<eva = (\d+?)>/i ? $1.to_i : 0) }
  98.     when 2          #必杀率cri
  99.       skills.each {|skill| ren += (skill.note =~ /<cri = (\d+?)>/i ? $1.to_i : 0) }
  100.     when 3          #必杀回避率cev
  101.       skills.each {|skill| ren += (skill.note =~ /<cev = (\d+?)>/i ? $1.to_i : 0) }
  102.     when 4          #魔法回避率mev
  103.       skills.each {|skill| ren += (skill.note =~ /<mev = (\d+?)>/i ? $1.to_i : 0) }
  104.     when 5          #魔法反射率mrf
  105.       skills.each {|skill| ren += (skill.note =~ /<mrf = (\d+?)>/i ? $1.to_i : 0) }
  106.     when 6          #反击率cnt
  107.       skills.each {|skill| ren += (skill.note =~ /<cnt = (\d+?)>/i ? $1.to_i : 0) }
  108.     when 7          #HP再生率hrg
  109.       skills.each {|skill| ren += (skill.note =~ /<hrg = (\d+?)>/i ? $1.to_i : 0) }
  110.     when 8          #MP再生率mrg
  111.       skills.each {|skill| ren += (skill.note =~ /<mrg = (\d+?)>/i ? $1.to_i : 0) }
  112.     when 9          #TP再生率trg
  113.       skills.each {|skill| ren += (skill.note =~ /<trg = (\d+?)>/i ? $1.to_i : 0) }
  114.     else
  115.     end
  116.     return ren * 0.01
  117.   end
  118.  
  119.  
  120.   #--------------------------------------------------------------------------
  121.   # ● 获取普通能力的基础值
  122.   #--------------------------------------------------------------------------
  123.   alias tan_game_actor_param_base param_base
  124.   def param_base(param_id)
  125.     tan_game_actor_param_base(param_id) + get_skills_paramad(param_id)
  126.   end
  127.  
  128.  
  129.   #--------------------------------------------------------------------------
  130.   # ● 获取普通能力
  131.   #--------------------------------------------------------------------------
  132.   alias tan_game_actor_param param
  133.   def param(param_id)
  134.     value = param_base(param_id) + param_plus(param_id)
  135.     value *= (param_rate(param_id) + get_skills_parammu(param_id)) * param_buff_rate(param_id)
  136.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  137.   end
  138.  
  139.  
  140.   #--------------------------------------------------------------------------
  141.   # ● 获取添加能力
  142.   #--------------------------------------------------------------------------
  143.   alias tan_game_actor_xparam xparam
  144.   def xparam(xparam_id)
  145.     tan_game_actor_xparam(xparam_id) + get_skills_xparamad(xparam_id)
  146.   end
  147. end

作者: taroxd    时间: 2013-12-19 12:49
首先,发布应该发到技术区吧?
然后,网上有更好的脚本
转载来源在此
  1. #==============================================================================
  2. # ★ RGSS3_パッシブスキル Ver1.01
  3. #==============================================================================
  4. =begin

  5. 作者:tomoaky
  6. webサイト:ひきも記 (http://hikimoki.sakura.ne.jp/)

  7. メモ欄に <パッシブ 5> という文字列が含まれるスキルを習得していると
  8. ID5番の武器を装備しているのと同じ効果が得られるようになります。

  9. Taroxd翻译:在技能备注输入 <パッシブ 5> ,那么习得该技能后,相当于装备了第5号武器。

  10. 2012.02.24  Ver1.01
  11.  ・パッシブスキルのみを習得している場合に発生する不具合を修正

  12. 2012.02.17 Ver1.0
  13.   公開

  14. =end

  15. #==============================================================================
  16. # □ 設定項目
  17. #==============================================================================
  18. module TMPASSIVE
  19.   INVISIBLE_TYPE = [3]      # 戦闘中のコマンドリストに表示しないスキルタイプ
  20. end

  21. #==============================================================================
  22. # ■ RPG::Skill
  23. #==============================================================================
  24. class RPG::Skill
  25.   #--------------------------------------------------------------------------
  26.   # ○ パッシブスキルの効果(武器ID)を返す
  27.   #--------------------------------------------------------------------------
  28.   def passive_effect
  29.     @passive_effect ||= /<パッシブ\s*(\d+)\s*>/ =~ @note ? $1.to_i : 0
  30.   end
  31. end

  32. #==============================================================================
  33. # ■ Game_Actor
  34. #==============================================================================
  35. class Game_Actor
  36.   #--------------------------------------------------------------------------
  37.   # ● 追加スキルタイプの取得
  38.   #--------------------------------------------------------------------------
  39.   alias tmpassive_game_actor_added_skill_types added_skill_types
  40.   def added_skill_types
  41.     if $game_party.in_battle
  42.       tmpassive_game_actor_added_skill_types - TMPASSIVE::INVISIBLE_TYPE
  43.     else
  44.       tmpassive_game_actor_added_skill_types
  45.     end
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 特徴を保持する全オブジェクトの配列取得
  49.   #--------------------------------------------------------------------------
  50.   alias tmpassive_game_actor_feature_objects feature_objects
  51.   def feature_objects
  52.     tmpassive_game_actor_feature_objects + passive_skills
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 通常能力値の加算値取得
  56.   #--------------------------------------------------------------------------
  57.   alias tmpassive_game_actor_param_plus param_plus
  58.   def param_plus(param_id)
  59.     passive_skills.inject(tmpassive_game_actor_param_plus(param_id)) {
  60.       |r, item| r += item.params[param_id] }
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ○ 習得しているパッシブスキルの効果(武器オブジェクト)の配列を返す
  64.   #--------------------------------------------------------------------------
  65.   def passive_skills
  66.     result = ((@skills.collect {|id| $data_skills[id] }).collect {
  67.       |skill| $data_weapons[skill.passive_effect] }).compact
  68.     result
  69.   end
  70. end



复制代码

作者: SuperMario    时间: 2013-12-21 00:13
加个自动附加状态(隐藏)的功能应该就实用了。
作者: 卡奥尼特    时间: 2013-12-23 18:49
被动技能的脚本,这个似乎是个很好的例子
作者: wdhh028    时间: 2013-12-28 22:05
果断收藏!
作者: taoboy    时间: 2013-12-30 01:38
被动技能 以武器属性来表达,真好!
作者: 332603    时间: 2022-5-21 19:52
感谢分享




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