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

Project1

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

[已经解决] 请教被动技能脚本加判定条件的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
跳转到指定楼层
1
发表于 2014-11-7 15:47:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
想在这个被动技能脚本里增加一个判定条件,判定当队伍中存在某某角色时,技能生效(技能设定为已经学会,只是在计算能力时会判断,如果存在某某角色时,按照备注来增加能力,不存在时按照原能力计算)
原脚本如下
RUBY 代码复制
  1. #====================================================================
  2.     # 腳本名稱:被動技能
  3.     # 使用方法:在數據庫-技能-備註裡面打上所需效果即可(可多行)
  4.     # PS.只對主角有效,因為敵人沒有學會技能的系統
  5.     #====================================================================
  6.     # 被動技能能力表:
  7.     # <atk = i>            代表atk增加i
  8.     # <def = i>            代表def增加i
  9.     # <mat = i>            代表mat增加i
  10.     # <mdf = i>            代表mdf增加i
  11.     # <agi = i>            代表agi增加i
  12.     # <luk = i>            代表luk增加i
  13.     # <mhp = i>            代表mhp增加i
  14.     # <mmp = i>            代表mmp增加i
  15.     #
  16.     # <ratk = i>           代表atk增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  17.     # <rdef = i>           代表def增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  18.     # <rmat = i>           代表mat增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  19.     # <rmdf = i>           代表mdf增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  20.     # <ragi = i>           代表agi增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  21.     # <rluk = i>           代表luk增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  22.     # <rmhp = i>           代表mhp增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  23.     # <rmmp = i>           代表mmp增加i%(如果学会多个这样的技能,最终增加的是(i1+i2+...+ix)%)
  24.     #
  25.     # <hit = i>             代表命中率增加i%
  26.     # <eva = i>             代表回避率增加i%
  27.     # <cri = i>             代表必杀率增加i%
  28.     # <cev = i>             代表必杀回避率增加i%
  29.     # <mev = i>             代表魔法回避率增加i%
  30.     # <mrf = i>             代表魔法反射率增加i%
  31.     # <cnt = i>             代表反击率增加i%
  32.     # <hrg = i>             代表HP再生率增加i%
  33.     # <mrg = i>             代表MP再生率增加i%
  34.     # <trg = i>             代表TP再生率增加i%
  35.     #====================================================================
  36.     class Game_Actor < Game_Battler
  37.       #--------------------------------------------------------------------------
  38.       # ● 获取技能数组的被动属性(加法)
  39.       #--------------------------------------------------------------------------
  40.       def get_skills_paramad(param_id)
  41.         ren = 0
  42.         case param_id
  43.         when 0          #HP
  44.           skills.each {|skill| ren += (skill.note =~ /<mhp = (\d+?)>/i ? $1.to_i : 0) }
  45.         when 1          #MP
  46.           skills.each {|skill| ren += (skill.note =~ /<mmp = (\d+?)>/i ? $1.to_i : 0) }
  47.         when 2          #atk
  48.           skills.each {|skill| ren += (skill.note =~ /<atk = (\d+?)>/i ? $1.to_i : 0) }
  49.         when 3          #def
  50.           skills.each {|skill| ren += (skill.note =~ /<def = (\d+?)>/i ? $1.to_i : 0) }
  51.         when 4          #mat
  52.           skills.each {|skill| ren += (skill.note =~ /<mat = (\d+?)>/i ? $1.to_i : 0) }
  53.         when 5          #mdf
  54.           skills.each {|skill| ren += (skill.note =~ /<mdf = (\d+?)>/i ? $1.to_i : 0) }
  55.         when 6          #agi
  56.           skills.each {|skill| ren += (skill.note =~ /<agi = (\d+?)>/i ? $1.to_i : 0) }
  57.         when 7          #luk
  58.           skills.each {|skill| ren += (skill.note =~ /<luk = (\d+?)>/i ? $1.to_i : 0) }
  59.         else
  60.         end
  61.         return ren
  62.       end
  63.  
  64.       #--------------------------------------------------------------------------
  65.       # ● 获取技能数组的被动属性(乘法)
  66.       #--------------------------------------------------------------------------
  67.       def get_skills_parammu(param_id)
  68.         ren = 0
  69.         case param_id
  70.         when 0          #HP
  71.           skills.each {|skill| ren += (skill.note =~ /<rmhp = (\d+?)>/i ? $1.to_i : 0) }
  72.         when 1          #MP
  73.           skills.each {|skill| ren += (skill.note =~ /<rmmp = (\d+?)>/i ? $1.to_i : 0) }
  74.         when 2          #atk
  75.           skills.each {|skill| ren += (skill.note =~ /<ratk = (\d+?)>/i ? $1.to_i : 0) }
  76.         when 3          #def
  77.           skills.each {|skill| ren += (skill.note =~ /<rdef = (\d+?)>/i ? $1.to_i : 0) }
  78.         when 4          #mat
  79.           skills.each {|skill| ren += (skill.note =~ /<rmat = (\d+?)>/i ? $1.to_i : 0) }
  80.         when 5          #mdf
  81.           skills.each {|skill| ren += (skill.note =~ /<rmdf = (\d+?)>/i ? $1.to_i : 0) }
  82.         when 6          #agi
  83.           skills.each {|skill| ren += (skill.note =~ /<ragi = (\d+?)>/i ? $1.to_i : 0) }
  84.         when 7          #luk
  85.           skills.each {|skill| ren += (skill.note =~ /<rluk = (\d+?)>/i ? $1.to_i : 0) }
  86.         else
  87.         end
  88.         return ren * 0.01
  89.       end
  90.  
  91.       #--------------------------------------------------------------------------
  92.       # ● 获取技能数组的被动特殊属性(加法)
  93.       #--------------------------------------------------------------------------
  94.       def get_skills_xparamad(xparam_id)
  95.         ren = 0
  96.         case xparam_id
  97.         when 0          #命中率hit
  98.           skills.each {|skill| ren += (skill.note =~ /<hit = (\d+?)>/i ? $1.to_i : 0) }
  99.         when 1          #闪避率eva
  100.           skills.each {|skill| ren += (skill.note =~ /<eva = (\d+?)>/i ? $1.to_i : 0) }
  101.         when 2          #必杀率cri
  102.           skills.each {|skill| ren += (skill.note =~ /<cri = (\d+?)>/i ? $1.to_i : 0) }
  103.         when 3          #必杀回避率cev
  104.           skills.each {|skill| ren += (skill.note =~ /<cev = (\d+?)>/i ? $1.to_i : 0) }
  105.         when 4          #魔法回避率mev
  106.           skills.each {|skill| ren += (skill.note =~ /<mev = (\d+?)>/i ? $1.to_i : 0) }
  107.         when 5          #魔法反射率mrf
  108.           skills.each {|skill| ren += (skill.note =~ /<mrf = (\d+?)>/i ? $1.to_i : 0) }
  109.         when 6          #反击率cnt
  110.           skills.each {|skill| ren += (skill.note =~ /<cnt = (\d+?)>/i ? $1.to_i : 0) }
  111.         when 7          #HP再生率hrg
  112.           skills.each {|skill| ren += (skill.note =~ /<hrg = (\d+?)>/i ? $1.to_i : 0) }
  113.         when 8          #MP再生率mrg
  114.           skills.each {|skill| ren += (skill.note =~ /<mrg = (\d+?)>/i ? $1.to_i : 0) }
  115.         when 9          #TP再生率trg
  116.           skills.each {|skill| ren += (skill.note =~ /<trg = (\d+?)>/i ? $1.to_i : 0) }
  117.         else
  118.         end
  119.         return ren * 0.01
  120.       end
  121.  
  122.  
  123.       #--------------------------------------------------------------------------
  124.       # ● 获取普通能力的基础值
  125.       #--------------------------------------------------------------------------
  126.       alias tan_game_actor_param_base param_base
  127.       def param_base(param_id)
  128.         tan_game_actor_param_base(param_id) + get_skills_paramad(param_id)
  129.       end
  130.  
  131.  
  132.       #--------------------------------------------------------------------------
  133.       # ● 获取普通能力
  134.       #--------------------------------------------------------------------------
  135.       alias tan_game_actor_param param
  136.       def param(param_id)
  137.         value = param_base(param_id) + param_plus(param_id)
  138.         value *= (param_rate(param_id) + get_skills_parammu(param_id)) * param_buff_rate(param_id)
  139.         [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  140.       end
  141.  
  142.  
  143.       #--------------------------------------------------------------------------
  144.       # ● 获取添加能力
  145.       #--------------------------------------------------------------------------
  146.       alias tan_game_actor_xparam xparam
  147.       def xparam(xparam_id)
  148.         tan_game_actor_xparam(xparam_id) + get_skills_xparamad(xparam_id)
  149.       end
  150.     end


我在获取普通能力里判断$game_party.members.include?$game_actors[id]会出现堆栈过深的错误提示,id号同样通过备注来读取

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2014-11-7 16:05:14 | 只看该作者
本帖最后由 taroxd 于 2014-11-7 16:17 编辑

堆栈过深的原因我解释一下吧

初始化角色1
将角色1完全恢复,需要知道角色A的最大HP
要知道角色1的最大HP,需要知道队伍里是否存在角色1
要知道队伍里是否存在角色1,根据你的判断语句,需要调用 $game_actors[1]
要得到 $game_actors[1] 需要初始化角色1

解决方式:在 https://rpg.blue/thread-365967-1-1.html 这个脚本中定义了 Game_Party#include? 可以直接传入角色 id 作为参数。

最后打个广告:https://rpg.blue/thread-365969-1-2.html

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
3
 楼主| 发表于 2014-11-7 16:25:53 | 只看该作者
taroxd 发表于 2014-11-7 16:05
堆栈过深的原因我解释一下吧

初始化角色1

1、谢谢解答,用了大大的基础设置后,还是会堆栈过深那,怎么办?
2、大大的那个被动脚本我收藏了的,主要是看的不太懂,这个比较低级一点,还看得懂。

点评

alias tan_game_actor_param param def param(param_id) value = param_base(param_id) + param_plus(param_id) if $game_party.include? 4 value *= (param_rate(param_id) +   发表于 2014-11-7 16:33
这个脚本中定义了 Game_Party#include? 可以直接传入角色 id 作为参数。直接用 $game_party.include? id 判断  发表于 2014-11-7 16:26
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
4
 楼主| 发表于 2014-11-7 16:34:33 | 只看该作者
morningboo 发表于 2014-11-7 16:25
1、谢谢解答,用了大大的基础设置后,还是会堆栈过深那,怎么办?
2、大大的那个被动脚本我收藏了的,主 ...
  1. alias tan_game_actor_param param
  2.       def param(param_id)
  3.         value = param_base(param_id) + param_plus(param_id)  
  4.         if $game_party.include? 4
  5.            value *= (param_rate(param_id) + get_skills_parammu(param_id)) * param_buff_rate(param_id)
  6.           [[value, param_max(param_id)].min, param_min(param_id)].max.to_i      
  7.         else
  8.           value *= param_rate(param_id) * param_buff_rate(param_id)
  9.           [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  10.         end
  11.       end
复制代码
点评放不下啊,这样还是堆栈过深。。郁闷了(那个4是临时用下的,实际用时读取备注)

点评

本地测试并没有出现问题  发表于 2014-11-7 16:38
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

5
发表于 2014-11-7 16:40:31 | 只看该作者
对上面的代码,我这里并没有试出问题(虽然我也没有仔细试过)

请尝试设置断点,在断点处查看堆栈,进行调试(打开控制台)

具体做法如下:
  1. $count = 0
  2. # ...
  3. def aaa
  4.   # 你怀疑出问题的地方
  5.   # 保留原来的代码
  6.   $count += 1
  7.   if $count > 2
  8.     puts caller
  9.     rgss_stop
  10.   end
  11. end
复制代码

点评

试了一下午了,还是堆栈过深那,断点看不出来(应该是我的水平差的原因),我换用def init_skills 来测试也是堆栈过深。。。无力了。。。  发表于 2014-11-7 21:14

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
6
 楼主| 发表于 2014-11-7 21:31:20 | 只看该作者
本帖最后由 morningboo 于 2014-11-7 22:04 编辑
taroxd 发表于 2014-11-7 16:40
对上面的代码,我这里并没有试出问题(虽然我也没有仔细试过)

请尝试设置断点,在断点处查看堆栈,进行调 ...


想了个办法,把那个判断语句改成判断全局变量开关是否打开,但是用if $game_switches[10] = true
判断了没有效果,无论是否开启都会按照备注增加能力,请教怎么回事?



换用了大大的那个被动技能脚本,这里我改成这样也是堆栈过深,并且改为开关判断的话和那个脚本一样,不起作用
RUBY 代码复制
  1. def_with :param_plus do |old, param_id|
  2.     if  $game_party.include? 4
  3.     passive_weapons.sum(old) {|item| item.params[param_id] }
  4.    else
  5.     end
  6.  
  7.   end

请大大指点
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

7
发表于 2014-11-8 07:34:34 | 只看该作者
morningboo 发表于 2014-11-7 21:31
想了个办法,把那个判断语句改成判断全局变量开关是否打开,但是用if $game_switches[10] = true
判断了 ...

1. if $game_switches[10] == true
或者干脆 if $game_switches[10] 就好了

2. 我这里没有发生堆栈过深的错误。你应该把else语句中的返回值设为old,但这和堆栈过深没有关系。

评分

参与人数 1星屑 +150 收起 理由
VIPArcher + 150 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
8
 楼主| 发表于 2014-11-8 08:13:26 | 只看该作者
taroxd 发表于 2014-11-8 07:34
1. if $game_switches[10] == true
或者干脆 if $game_switches[10] 就好了

谢谢解答,堆栈过深的问题不搞了,水平还是太低,不过用开关的方法算是解决了,原来之前是我一直写错了,谢谢大大指点,可以结贴了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-14 23:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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