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

Project1

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

[已经解决] 两个脚本的冲突

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2150
在线时间
1010 小时
注册时间
2015-10-17
帖子
1283
跳转到指定楼层
1
发表于 2019-5-14 10:28:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
下面两个脚本,只能生效一个,如何让两个都起效果,知道的告诉下,谢谢

RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.  
  3.         #--------------------------------------------------------------------------
  4.   # ● 通常能力値の取得
  5.   #--------------------------------------------------------------------------
  6.   def param(param_id)
  7.     super(param_id) - (spirit? ? Spirits::PRM_BASE[param_id] : 0)
  8. end
  9.    alias org_param param
  10.   def param(param_id)
  11.     org = org_param(param_id)
  12.     if has_spirit?
  13.       partners_objs.each do |s|
  14.         org += Spirits.affinity_param(s.org_param(param_id), @actor_id, s.spirit_id)
  15.       end
  16.     end
  17.     org
  18.   end


RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   #初始化角色
  3.   #@skill_level:存放技能等级数据的哈希表,技能id=>技能等级
  4.   #@sp:剩余技能点
  5.   alias setup_201410131453 setup
  6.   def setup(actor_id)
  7.     @skill_level=Hash.new(0)
  8.     setup_201410131453(actor_id)
  9.     @sp = (@level-1) * SkillLevel::LEVELUPSP + SkillLevel::INITIALSP
  10.     auto_skill_levelup if self.class.auto_sp
  11.   end
  12.  
  13.   #读取技能点的方法,如果是自动升级技能的职业,则没必要有技能点
  14.   def sp
  15.     return 0 if self.class.auto_sp
  16.     @sp
  17.   end
  18.  
  19.   #读取技能基础等级,
  20.   #锁定技能等级优先度最高,
  21.   #链接技能等级次之,这个我好像在计算技能最终等级的方法里面又来了一遍。
  22.   #主要是技能基础等级是升级技能的窗口看到的等级,最终等级是使用技能的窗口。
  23.   def skill_basic_level(skill_id)
  24.     return 0 if skill_id == 0
  25.     lock = $data_skills[skill_id].lock_level
  26.     return lock if lock != 0
  27.     lnk = $data_skills[skill_id].link_skill
  28.     return skill_basic_level(lnk) if lnk != 0
  29.     @skill_level[skill_id]
  30.   end
  31.  
  32.   #获取装备增加技能的等级之和
  33.   def skill_plus_level(skill_id)
  34.     self.equips.compact.inject(0){|skl,eqp| skl+eqp.add_skill(skill_id)}
  35.   end
  36.  
  37.   #读取技能最终等级,如果技能基础等级为零,则不加装备提升直接等于零。
  38.   #最后返回基础等级+装备附加与技能最大等级中的小值
  39.   def skill_level(skill_id)
  40.     return 0 if skill_id == 0
  41.     lock = $data_skills[skill_id].lock_level
  42.     return lock if lock != 0
  43.     lnk = $data_skills[skill_id].link_skill
  44.     return skill_level(lnk) if lnk != 0
  45.     return 0 unless @skills.include?(skill_id)
  46.     return 0 if skill_basic_level(skill_id) == 0
  47.     [skill_basic_level(skill_id) + skill_plus_level(skill_id) ,\
  48.     $data_skills[skill_id].max_level].min
  49.   end
  50.  
  51.   #升一级技能技能能升级就升级,返回成功,否则返回失败
  52.   def level_up_skill(skill_id)
  53.     skl = $data_skills[skill_id]
  54.     if skill_can_levelup?(skl)
  55.       @sp -= skl.sp_cost
  56.       @skill_level[skill_id] += 1
  57.       return true
  58.     else
  59.       return false
  60.     end
  61.   end
  62.  
  63.   #初始化角色时初始化技能的方法,
  64.   #这里是不管默认的技能设定直接加载能学到的所有技能,也就是职业列表下的那些。
  65.   def init_skills
  66.     @skills = []
  67.     self.class.learnings.each do |learning|
  68.       @skills.push(learning.skill_id)
  69.     end
  70.     @skills.sort!
  71.   end
  72.  
  73.   #主要用在技能列表的窗口里的。确保只有技能等级为1级及以上的技能才能显示。
  74.   def has_skill?(skill)
  75.     skills.include?(skill) && skill_basic_level(skill.id) >= 0
  76.   end
  77.  
  78.   #判断是否学习了技能,同样要确保只有技能等级为1级及以上的技能才能显示。
  79.   #和上面的区别是上面的可以有装备附带,状态附带的技能等级不为0的技能
  80.   #这里只能是职业列表下“领悟”的技能,装备状态附带的都不算
  81.   def skill_learn?(skill)
  82.     skill.is_a?(RPG::Skill) && @skills.include?(skill.id) && skill_basic_level(skill.id) >= 0
  83.   end
  84.  
  85.   #判断前置技能是否都满足
  86.   def skill_former_match?(skill)
  87.     skill.former.each do |former|
  88.       return false unless skill_basic_level(former[0]) >= former[1]
  89.     end
  90.     true
  91.   end
  92.  
  93.   #判断技能是否已经学到精通了、
  94.   def skill_max_learn?(skill)
  95.     skill_basic_level(skill.id) == skill.max_learn
  96.   end
  97.  
  98.   #计算学习下一等级的技能所需要的人物等级
  99.   #如果精通了return false【感觉好像有点奇葩。。。】
  100.   def skill_next_level(skill)
  101.     return false if skill_max_learn?(skill)
  102.     skill.learn_level[0] + skill_basic_level(skill.id) * skill.learn_level[1]
  103.   end
  104.  
  105.   #技能能否升级?首先看是否锁定,是否链接,是否精通,
  106.   #再看等级是否符合学习下一级,sp是否足够,前置技能是否满足要求。
  107.   def skill_can_levelup?(skill)
  108.     return false if skill.lock_level != 0
  109.     return false if skill.link_skill != 0
  110.     return false if skill_max_learn?(skill)
  111.     @level >= skill_next_level(skill) && @sp >= skill.sp_cost && skill_former_match?(skill)
  112.   end
  113.  
  114.   #好像没什么用处。。。当初修改的用意是直接设置技能等级,后来觉得不好控制。。。
  115.   #反正就放着吧,不去管它好了
  116.   def learn_skill(skill_id,sk_level=0)
  117.     unless skill_learn?($data_skills[skill_id])
  118.       @skills.push(skill_id)
  119.       @skills.sort!
  120.       @skill_level[skill_id]=sk_level unless @skill_level.has_key?(skill_id)
  121.     end
  122.   end
  123.  
  124.   #自动升级技能。
  125.   def auto_skill_levelup
  126.     @skills.each do |skill|
  127.       skl=$data_skills[skill]
  128.       if self.class.auto_sp
  129.         while skill_next_level(skl) && skill_next_level(skl) <= @level do
  130.           @skill_level[skill] += 1
  131.         end
  132.       elsif skl.auto_levelup
  133.         while level_up_skill(skill) do
  134.         end
  135.       end
  136.     end
  137.   end
  138.  
  139.   #升级时发生的事情,等级+1,sp增加,如果是自动升级技能的职业则自动升级技能
  140.   def level_up
  141.     @level += 1
  142.     @sp += SkillLevel::LEVELUPSP
  143.     auto_skill_levelup
  144.   end
  145.  
  146.   #被动技能提升的基础属性(加法叠加的部分)
  147.   #SkillLevel.formula:带入公式计算。
  148.   def skill_plus(param_id)
  149.     skills.inject(0) do |plu,skl|
  150.       plu + SkillLevel.formula(self.skill_level(skl.id),skl.param_add(param_id))
  151.     end
  152.   end
  153.  
  154.   #被动技能提升的基础属性倍率(乘法叠加)
  155.   def skill_rate(param_id)
  156.     skills.inject(1.00) do |plu,skl|
  157.       plu * SkillLevel.formula(self.skill_level(skl.id),skl.param_rate(param_id))
  158.     end
  159.   end
  160.  
  161.   #被动技能影响的属性抗性(乘法叠加)
  162.   def skill_element_rate(element_id)
  163.     skills.inject(1.00) do |plu,skl|
  164.       plu * SkillLevel.formula(self.skill_level(skl.id),skl.element_rate(element_id))
  165.     end
  166.   end
  167.  
  168.   #状态提升的基础属性(加法叠加的部分)
  169.   def state_param_plus(param_id)
  170.     states.inject(0) do |plu,sta|
  171.       plu + SkillLevel.formula(@state_level[sta.id],sta.param_add(param_id))
  172.     end
  173.   end
  174.   #状态提升的基础属性倍率(乘法叠加)
  175.   def state_param_rate(param_id)
  176.     states.inject(1.00) do |plu,sta|
  177.       plu * SkillLevel.formula(@state_level[sta.id],sta.param_rate(param_id))
  178.     end
  179.   end
  180.   #状态额外影响的属性抗性(乘法叠加)
  181.   def state_element_rate(element_id)
  182.     states.inject(1.00) do |plu,sta|
  183.       plu * SkillLevel.formula(@state_level[sta.id],sta.element_rate(element_id))
  184.     end
  185.   end
  186.  
  187.   #基础属性的计算,添加了被动技能的提升,按默认的先加后乘
  188.   def param(param_id)
  189.     value = param_base(param_id) + param_plus(param_id) +
  190.             skill_plus(param_id) + state_param_plus(param_id)
  191.     value *= param_rate(param_id) * param_buff_rate(param_id) *
  192.              skill_rate(param_id) * state_param_rate(param_id)
  193.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  194.   end
  195.  
  196.   #状态影响的附加属性xparam
  197.   def state_xparam(xparam_id)
  198.     states.inject(0.0) do |plu,sta|
  199.       plu + SkillLevel.formula(@state_level[sta.id],sta.xparam(xparam_id))
  200.     end
  201.   end
  202.   #附加属性xparam的计算,命中暴击什么的,迭代加算。
  203.   def xparam(xparam_id)
  204.     state_xparam(xparam_id) + @skills.inject(super(xparam_id)) do |plu,skl|
  205.       plu + SkillLevel.formula(self.skill_level(skl),$data_skills[skl].xparam(xparam_id))
  206.     end
  207.   end
  208.  
  209.   #状态影响特殊属性sparam的计算
  210.   def state_sparam(sparam_id)
  211.     states.inject(1.0) do |plu,sta|
  212.       plu * SkillLevel.formula(@state_level[sta.id],sta.sparam(sparam_id))
  213.     end
  214.   end
  215.   #特殊属性sparam的计算,经验值比率什么的,迭代连乘计算。
  216.   def sparam(sparam_id)
  217.     state_sparam(sparam_id)*skills.inject(super(sparam_id)) do |plu,skl|
  218.       plu * SkillLevel.formula(self.skill_level(skl.id),skl.sparam(sparam_id))
  219.     end
  220.   end
  221.  
  222.   #技能消耗mp由于技能等级修正的倍率,
  223.   #反正就是到SkillLevel.formula找对应编号的公式。
  224.   def skill_mp_rate(skill)
  225.     SkillLevel.formula(skill_level(skill.id),skill.mp_type)
  226.   end
  227.  
  228.   #计算最终技能消耗mp的量
  229.   def skill_mp_cost(skill)
  230.     (skill.mp_cost * mcr * skill_mp_rate(skill)).to_i
  231.   end
  232.  
  233.   #计算暴击伤害倍率super:Game_Battler中的critical_rate,返回1.5
  234.   #人物提升,职业提升,被动技能修正和装备提升
  235.   def critical_rate
  236.     v = super
  237.     v *= (1.0 + self.actor.critical_rate/100.0)
  238.     v *= (1.0 + self.class.critical_rate/100.0)
  239.     v *= skills.inject(1.00) do |plu,skl|
  240.       plu * SkillLevel.formula(self.skill_level(skl.id),skl.critical_rate)
  241.     end
  242.     v*equips.compact.inject(1.00){ |rat,equip| rat*(1.00+equip.critical_rate/100.0) }
  243.   end
  244.  
  245.   #属性伤害修正。
  246.   def element_rate(element_id)
  247.     super(element_id) * skill_element_rate(element_id) * state_element_rate(element_id)
  248.   end
  249.  
  250.   #被动技能影响的属性强化效果。
  251.   def skill_element_damage(element_id)
  252.     skills.inject(1.00) do |plu,skl|
  253.       plu * SkillLevel.formula(self.skill_level(skl.id),skl.element_damage(element_id))
  254.     end
  255.   end
  256.  
  257.   def state_element_damage(element_id)
  258.     states.inject(1.00) do |plu,sta|
  259.       plu * SkillLevel.formula(@state_level[sta.id],sta.element_damage(element_id))
  260.     end
  261.   end
  262.  
  263.   #基础属性强化,角色备注和职业备注修正。
  264.   def basic_element_damage(element_id)
  265.     (1.0 + self.actor.element_damage(element_id)/100.0) *
  266.     (1.0 + self.class.element_damage(element_id)/100.0)
  267.   end
  268.  
  269.   #计算最终属性强化基础技能装备迭代连乘
  270.   def element_damage(element_id)
  271.     basic_element_damage(element_id) *
  272.     equips.compact.inject(skill_element_damage(element_id)) do |rat,equip|
  273.       rat*(1.00+equip.element_damage(element_id)/100.0)
  274.     end
  275.   end
  276.  
  277.   #受到hp伤害转移给mp的比例,遍历计算并返回最大值
  278.   def damage_convert
  279.     skl = skills.collect{|sk| sk = SkillLevel.formula(self.skill_level(sk.id),sk.damage_convert)}
  280.     sta = states.collect{|st| st = SkillLevel.formula(@state_level[st.id],st.damage_convert)}
  281.     (skl+sta).max
  282.   end
  283.  
  284.  
  285.  
  286.   #洗技能了,
  287.   alias item_apply_201411181846 item_apply
  288.   def item_apply(user, item)
  289.     item_apply_201411181846(user, item)
  290.     if item.is_a?(RPG::Item) and item.id == SkillLevel::RESETITEM
  291.       if self.reset_skill
  292.         self.hp = [self.hp,self.mhp].min
  293.         self.mp = [self.mp,self.mmp].min
  294.       end
  295.     end
  296.   end
  297.  
  298.   #洗技能的方法
  299.   def reset_skill
  300.     return false if self.class.auto_sp
  301.     @sp = (@level-1) * SkillLevel::LEVELUPSP + SkillLevel::INITIALSP
  302.     @skills.each  { |skill| @skill_level[skill]=0 }
  303.     return true
  304.   end
  305.  
  306. end
  307.  
  308. #有关洗点水的使用判断,想和上面洗点放在一起。于是没有放进场景相关。
  309. class Scene_ItemBase < Scene_MenuBase
  310.   def item_usable?
  311.     if item.id == SkillLevel::RESETITEM
  312.       return false if item_target_actors[0].class.auto_sp
  313.       return true
  314.     end
  315.     user.usable?(item) && item_effects_valid?
  316.   end
  317. end

Lv3.寻梦者

梦石
0
星屑
4803
在线时间
1350 小时
注册时间
2015-7-25
帖子
541

开拓者

2
发表于 2019-5-14 15:57:23 | 只看该作者
目测....酱紫...
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   def param(param_id)
  3.     value = param_base(param_id) + param_plus(param_id) +
  4.             skill_plus(param_id) + state_param_plus(param_id)
  5.     value *= param_rate(param_id) * param_buff_rate(param_id) *
  6.              skill_rate(param_id) * state_param_rate(param_id)
  7.     v = [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  8.     org = v - (spirit? ? Spirits::PRM_BASE[param_id] : 0)
  9.     if has_spirit?
  10.       partners_objs.each do |s|
  11.         org += Spirits.affinity_param(s.org_param(param_id), @actor_id, s.spirit_id)
  12.       end
  13.     end
  14.     org
  15.   end
  16. end

点评

fjm
感谢肉包,问题解决了  发表于 2019-5-14 17:29

评分

参与人数 2星屑 +100 +1 收起 理由
VIPArcher + 100 认可答案
fjm + 1 认可答案

查看全部评分

目前的坑 幽灵契约外传:歌莉娅
回归持续更新中~ 进度 v0.21/v1.00
笨肉包开始学像素画啦!努力训练中XD
啊~今天也是填坑的一天呢!

看!是肉包!
只能看!不能吃!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 23:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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