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

Project1

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

[已经解决] 请教XD触这个扩展技能物品范围脚本的问题

[复制链接]

Lv1.梦旅人

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

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

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

x
请教XD大,这个脚本会在44行那个方法中发生string错误(已更新基础设置为1月1日最新的),@taroxd
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● require Taroxd基础设置
  3. #    设置技能、物品的使用目标。
  4. #--------------------------------------------------------------------------
  5. #
  6. # 使用方法:
  7. #   在技能/道具的备注栏写下类似于这样的备注。
  8. #   备注后,无视技能效果范围中“单体”或“全体”的设置。
  9. #   无人符合条件时,保持原来的使用目标。
  10. #
  11. #   例1:存活队员中 hp 最小者。
  12. #   <target>
  13. #     select: alive?
  14. #     min_by: hp_rate
  15. #   </target>
  16. #
  17. #   例2:所有 hp 大于 50 的队员
  18. #   <target>
  19. #     select: hp > 50
  20. #   </target>
  21. #
  22. #   例3:随机指定两个存活队员中 hp 小于一半的人。
  23. #   <target>
  24. #     select: alive? && hp_rate < 0.5
  25. #     sample(2)
  26. #   </target>
  27. #
  28. #--------------------------------------------------------------------------
  29.  
  30. # 解析备注栏中的备注
  31. class << Taroxd::TargetExt = Object.new
  32.  
  33.   RE_OUTER = /<target>(.*?)<\/target>/mi # 整体设置
  34.   RE_INNER = /(\S+) *(?:: *(.+))?/       # 每一行的设置
  35.  
  36.   def parse_note(note)
  37.     note =~ RE_OUTER ? parse_settings($1.scan(RE_INNER)) : false
  38.   end
  39.  
  40.   # lambda do |members|
  41.   #   members.select { |battler| battler.instance_eval {
  42.   #     alive? && hp_rate < 0.5 } }.sample(2)
  43.   # end
  44.   def parse_settings(settings)
  45.     eval %(
  46.       lambda do |members|
  47.         members#{extract_settings(settings)}
  48.       end
  49.     )
  50.   end
  51.  
  52.   def extract_settings(settings)
  53.     settings.map { |method, body|
  54.       if body
  55.         ".#{method} { |battler| battler.instance_eval { #{body} } }"
  56.       else
  57.         ".#{method}"
  58.       end
  59.     }.join
  60.   end
  61.  
  62. end
  63.  
  64. class RPG::UsableItem < RPG::BaseItem
  65.  
  66.   # 缓存生成的 lambda
  67.   def get_target
  68.     return @get_target unless @get_target.nil?
  69.     @get_target = Taroxd::TargetExt.parse_note(@note)
  70.   end
  71.  
  72.   # 是否需要选择目标
  73.   def_unless :need_selection?, :get_target
  74.  
  75. end
  76.  
  77. class Game_Action
  78.  
  79.   # 返回计算结果或原来的值
  80.   def targets_for_eval(unit, old)
  81.     get_target = item.get_target
  82.     return old.call unless get_target
  83.     targets = get_target.call(unit.members)
  84.     return old.call unless targets
  85.     targets = Array(targets)
  86.     targets.empty? ? old.call : targets
  87.   end
  88.  
  89.   # 目标为敌人
  90.   def_chain :targets_for_opponents do |old|
  91.     targets_for_eval(opponents_unit, old)
  92.   end
  93.  
  94.   # 目标为队友
  95.   def_chain :targets_for_friends do |old|
  96.     targets_for_eval(friends_unit, old)
  97.   end
  98.  
  99. end

评分

参与人数 1星屑 +1 收起 理由
永燃的狂炎 + 1 XD触是谁!Orz

查看全部评分

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

2
发表于 2015-1-7 17:24:56 | 只看该作者
本帖最后由 taroxd 于 2015-1-9 19:49 编辑

请问报错信息和备注的内容?

现在没环境,如果没法解决的话,我等周五放学再看吧。

P.S. 不懂脚本的话,不太建议使用这个脚本
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
3
 楼主| 发表于 2015-1-9 19:32:33 | 只看该作者
taroxd 发表于 2015-1-7 17:24
请问报错信息和备注的内容?

现在没环境,如果没法解决的话,我等周五放学再看吧。

报告大大,备注设置的这个:
  1. <target>
  2. select: alive?
  3. sample(3)
  4. </target>
复制代码
显示的错误是这个:
  1. line 49: SyntaxError occurred
  2. unexpected'.',expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_END
  3. members.select:.alive?.sample(3)
复制代码
PS:因为原版的随机三个敌人不是三个不同的敌人,会有可能有重复,因此先用了大大以前关于回答一个剔除重复的帖子里面的技能范围设定,如下:
  1.   def targets_for_opponents
  2.     if item.for_random?
  3.       opponents_unit.members.sample(item.number_of_targets)
  4.     elsif item.for_one?
  5.       num = 1 + (attack? ? subject.atk_times_add.to_i : 0)
  6.       if @target_index < 0
  7.         [opponents_unit.random_target] * num
  8.       else
  9.         [opponents_unit.smooth_target(@target_index)] * num
  10.       end
  11.     else
  12.       opponents_unit.alive_members
  13.     end
  14.   end
复制代码
但是这个会有一个小问题,就是选择目标时没有剔除死亡目标,刚好大大又新出了这个扩展范围脚本,所以就使用了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

4
发表于 2015-1-9 19:46:32 | 只看该作者
morningboo 发表于 2015-1-9 19:32
报告大大,备注设置的这个:显示的错误是这个:PS:因为原版的随机三个敌人不是三个不同的敌人,会有可能 ...

感谢报告。

解决方式:将 RE_INNER 的结尾处加一个 $,也就是改成:
RUBY 代码复制
  1. /(\S+) *(?:: *(.+))?$/


群组里我也会更新的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
5
 楼主| 发表于 2015-1-9 20:44:34 | 只看该作者
本帖最后由 morningboo 于 2015-1-9 20:45 编辑
taroxd 发表于 2015-1-9 19:46
感谢报告。

解决方式:将 RE_INNER 的结尾处加一个 $,也就是改成:


感谢大大回答,但是设置了之后变成全体攻击了。。。无论是选择单体敌人还是全部敌人,应该是脚本只识别了所有存活单位
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

6
发表于 2015-1-9 20:48:34 | 只看该作者
morningboo 发表于 2015-1-9 20:44
感谢大大回答,但是设置了之后变成全体攻击了。。。无论是选择单体敌人还是全部敌人,应该是脚本只识别了 ...

注释里写了啊,“备注后,无视技能效果范围中‘单体’或‘全体’的设置。”

你确定敌人个数大于三个么?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
7
 楼主| 发表于 2015-1-9 20:53:13 | 只看该作者
taroxd 发表于 2015-1-9 20:48
注释里写了啊,“备注后,无视技能效果范围中‘单体’或‘全体’的设置。”

你确定敌人个数大于三个么? ...

敌人六人,备注设置用的就是上面那个,想要的效果就是存活敌人中不重复的三人

点评

新建工程测试了,还是一样,打的是全体,特地在后面按范例加了RATE限制,还是全体,郁闷了  发表于 2015-1-9 21:12
用新工程试一试?  发表于 2015-1-9 21:02
我这里测试没有问题,可能是脚本冲突  发表于 2015-1-9 20:57
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
8
 楼主| 发表于 2015-1-9 21:16:00 | 只看该作者
morningboo 发表于 2015-1-9 20:53
敌人六人,备注设置用的就是上面那个,想要的效果就是存活敌人中不重复的三人 ...

报告大大,经过仔细测试发现问题所在了,应该就是脚本只识别了所有存活单位,因为将条件换成HP的判断是有效果的,但是执行两行代码就不行
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

9
发表于 2015-1-9 21:40:10 | 只看该作者
本帖最后由 taroxd 于 2015-1-10 08:20 编辑
morningboo 发表于 2015-1-9 21:16
报告大大,经过仔细测试发现问题所在了,应该就是脚本只识别了所有存活单位,因为将条件换成HP的判断是有 ...


已更新,再试试?

P.S. 我恨 \r。话说 $ 竟然不能匹配 \r\n ...

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
10
 楼主| 发表于 2015-1-10 10:03:36 | 只看该作者
taroxd 发表于 2015-1-9 21:40
已更新,再试试?

P.S. 我恨 \r。话说 $ 竟然不能匹配 \r\n ...

妥妥的,非常好用!感谢大大
@VIPArcher
V大快来好人卡
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 17:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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