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

Project1

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

[有事请教] 求助,技能多属性

[复制链接]

Lv2.观梦者

梦石
0
星屑
383
在线时间
52 小时
注册时间
2020-6-4
帖子
6
跳转到指定楼层
1
发表于 2024-11-24 18:56:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
技能该怎样才能设置有两个及以上的属性,比如技能设置了水属性,还想让技能带着其他的属性

Lv2.观梦者

梦石
0
星屑
392
在线时间
89 小时
注册时间
2023-7-26
帖子
16
2
发表于 2024-11-24 19:07:11 | 只看该作者
  1. # =============================================================================
  2. # TheoAllen - 多属性技能
  3. # Version : 1.0
  4. # Contact : www.rpgmakerid.com
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. $imported = {} if $imported.nil?
  8. $imported[:Theo_MultiElements] = true
  9. # =============================================================================
  10. # CHANGE LOGS:
  11. # -----------------------------------------------------------------------------
  12. # 2013.05.05 - Started and Finished script
  13. # =============================================================================
  14. =begin

  15.   介绍 :
  16.   本脚本可以为技能设定多重属性,还可以选择计算所占比例.
  17.   
  18.   使用方法:
  19.   如果技能有火属性,武器有斩切属性,则该技能已经有两种属性了。
  20.   使用技能/物品备注添加属性:
  21.   
  22.   <elements id: x>
  23.   <elements id: x,x>
  24.   
  25.   使用规定 :
  26.   署名脚本作者, TheoAllen. 你可以自由编辑此脚本,只要你不声明你是脚本的原作者
  27.   如果你想用此脚本于商业游戏,请和我共享收益.别忘了给我一份免费的游戏拷贝.  
  28.   
  29.   注意:
  30.   如果你对管理属性有想法,请联系我 http://theolized.blogspot.com
  31.   
  32. =end
  33. # =============================================================================
  34. # 设定 :
  35. # =============================================================================
  36. module THEO
  37.   module ELEMENTS
  38.    
  39.     # -----------------------------------------------------------------------
  40.     PHYSICAL_ELEMENT = true
  41.     # -----------------------------------------------------------------------
  42.     # 如果你希望物理技能组合攻击属性(武器),设定为true.
  43.     # -----------------------------------------------------------------------
  44.    
  45.     # -----------------------------------------------------------------------
  46.     MAGICAL_ELEMENT = false
  47.     # -----------------------------------------------------------------------
  48.     # 如果你希望魔法技能组合攻击属性(武器),设定为true.
  49.     # -----------------------------------------------------------------------
  50.    
  51.     # -----------------------------------------------------------------------
  52.     CERT_HIT_ELEMENT = false
  53.     # -----------------------------------------------------------------------
  54.     # 如果你希望必定命中技能组合攻击属性(武器),设定为true.
  55.     # -----------------------------------------------------------------------
  56.    
  57.     # -----------------------------------------------------------------------
  58.     IGNORE_RECOVERY = true
  59.     # -----------------------------------------------------------------------
  60.     # 回复技能是否带属性. (回复带属性?)
  61.     # -----------------------------------------------------------------------
  62.    
  63.     # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  64.     # 合并类型
  65.     # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  66.     # 在这里设定属性的计算公式,如果这种计算方式局限性太大了,我很抱歉。
  67.     # 如果你有建议,记得联系我:http://theolized.blogspot.com
  68.     #
  69.     # 嗯,如果一个技能同时拥有两种属性,且技能目标对这两种属性的抗性为50%, 100%,
  70.     # -----------------------------------------------------------------------
  71.     # 0 : 由最大的那个决定
  72.     # -----------------------------------------------------------------------
  73.     # --> 结果为 = 100%
  74.     # -----------------------------------------------------------------------
  75.     # 1 : 加法 / 添加
  76.     # -----------------------------------------------------------------------
  77.     # 公式 = 100 + (属性_1 - 100) + (属性_n - 100)
  78.     # --> 100 + (50 - 100) + (100 - 100) = 50%
  79.     # -----------------------------------------------------------------------
  80.     # 2 : 平均值 / 取平均数
  81.     # -----------------------------------------------------------------------
  82.     # 公式 = 总抗性 / 数量
  83.     # --> (50+100) / 2 = 75%
  84.     # -----------------------------------------------------------------------
  85.     # 3 : 乘法 / 相乘
  86.     # -----------------------------------------------------------------------
  87.     # 公式 = 100 * (属性_1/100) * (属性_n/100)
  88.     # --> 100 * (50/100) * (100/100)
  89.     # -----------------------------------------------------------------------
  90.     MERGE_TYPE = 2
  91.     # -----------------------------------------------------------------------
  92.    
  93.   end
  94. end
  95. # =============================================================================
  96. # 除非你理解否则以下勿动
  97. # =============================================================================
  98. module THEO
  99.   module ELEMENTS
  100.   module REGEXP
  101.    
  102.     ELEMENTS = /<(?:ELEMENTS_ID|elements id):[ ]*[ ]*(\d+(?:\s*,\s*\d+)*)>/i
  103.    
  104.   end
  105.   end
  106. end

  107. module DataManager
  108.   
  109.   class << self
  110.     alias pre_load_multiple_elements_database load_database
  111.   end
  112.   
  113.   def self.load_database
  114.     pre_load_multiple_elements_database
  115.     load_multiple_elements
  116.   end
  117.   
  118.   def self.load_multiple_elements
  119.     [$data_skills, $data_items].each do |database|
  120.       database.each do |obj|
  121.         next unless obj
  122.         obj.load_multiple_elements
  123.       end
  124.     end
  125.   end
  126.   
  127. end

  128. class RPG::UsableItem < RPG::BaseItem
  129.   attr_accessor :elements_array
  130.   
  131.   def load_multiple_elements
  132.     @elements_array = [self.damage.element_id]
  133.     self.note.split(/[\r\n]+/).each { |line|
  134.       case line
  135.       when THEO::ELEMENTS::REGEXP::ELEMENTS
  136.         $1.scan(/\d+/).each { |num|
  137.         @elements_array.push(num.to_i) if num.to_i > 0 }
  138.       end
  139.     }
  140.   end
  141.   
  142. end

  143. class Game_Battler < Game_BattlerBase
  144.   
  145.   def item_element_rate(user, item)
  146.     return 1.0 if item.damage.recover? && THEO::ELEMENTS::IGNORE_RECOVERY
  147.     array = make_elements_array(user, item)
  148.     return 1.0 if array.empty?
  149.     return calculate_element_rate(user, item, array)
  150.   end
  151.   
  152.   def make_elements_array(user, item)
  153.     array = item.elements_array.dup
  154.     array = attack_elements_array(user, item, array)
  155.     array
  156.   end
  157.   
  158.   def attack_elements_array(user, item, array)
  159.     return array if user.atk_elements.empty?
  160.     array += user.atk_elements if item.physical? && THEO::ELEMENTS::PHYSICAL_ELEMENT
  161.     array += user.atk_elements if item.magical? && THEO::ELEMENTS::MAGICAL_ELEMENT
  162.     array += user.atk_elements if item.certain? && THEO::ELEMENTS::CERT_HIT_ELEMENT
  163.     return array
  164.   end
  165.   
  166.   def calculate_element_rate(user, item, array)
  167.     case THEO::ELEMENTS::MERGE_TYPE
  168.     when 0
  169.       return elements_max_rate(array)
  170.     when 1
  171.       return calculate_addition_rate(array)
  172.     when 2
  173.       return calculate_average_rate(array)
  174.     when 3
  175.       return calculate_multiply_rate(array)
  176.     else
  177.       return 1.0
  178.     end
  179.   end
  180.   
  181.   def calculate_addition_rate(array)
  182.     rate = 1.0
  183.     array.each do |element|
  184.       rate += element_rate(element) - 1.0
  185.     end
  186.     return rate
  187.   end
  188.   
  189.   def calculate_average_rate(array)
  190.     rate = 0.0
  191.     array.each do |element|
  192.       rate += element_rate(element)
  193.     end
  194.     puts array.size
  195.     return rate / array.size
  196.   end
  197.   
  198.   def calculate_multiply_rate(array)
  199.     rate = 1.0
  200.     array.each do |element|
  201.       rate *= element_rate(element)
  202.     end
  203.     return rate
  204.   end
  205.   
  206. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 05:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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