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

Project1

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

[RMVA发布] 事件脚本偷懒大法,再也不怕脚本框太短了!

[复制链接]

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

跳转到指定楼层
1
发表于 2014-2-21 21:27:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 taroxd 于 2014-7-12 15:12 编辑

本脚本不适合事件党食用。

RUBY 代码复制
  1. module Taroxd end
  2.  
  3. module Taroxd::Eval
  4.   SCRIPT_ABBR_LIST = {
  5.   #--------------------------------------------------------------------------
  6.   # ● 导入本脚本后,在事件脚本/战斗公式中可以使用如下的简称。
  7.   #--------------------------------------------------------------------------
  8.   # 简称    全称
  9.     'V' => '$game_variables',
  10.     'S' => '$game_switches',
  11.     'N' => '$game_actors',
  12.     'A' => '$game_actors',
  13.     'P' => '$game_party',
  14.     'G' => '$game_party.gold',
  15.     'E' => '$game_troop'
  16.   #--------------------------------------------------------------------------
  17.   # 同时,对应的小写字母作为局部变量也是可用的。
  18.   # (a、v 在战斗公式中依然保持原本的意义)
  19.   # 因此,请不要拿这些大写字母单独作为常量或者方法名。
  20.   #--------------------------------------------------------------------------
  21.   # 脚本出错时,会得到更加精确的报错位置。
  22.   # 技能公式出错时不会掩盖错误(rescue)。
  23.   #--------------------------------------------------------------------------
  24.   # 将技能公式中的 self 设为了技能的目标。
  25.   #--------------------------------------------------------------------------
  26.   # 此外,在窗口中的信息里面,#{expression} 会被替换成表达式的值,
  27.   # 就和 ruby 中的双引号字符串一样。同时上述简称也是可用的。
  28.   # 但是,这个功能并不完整,因此请务必保证 expression 中的花括号{}成对出现。
  29.   # 像 #{'}'} 这样的表达式虽然 Ruby 里是可用的,但是这里不行。
  30.   # 如果想要禁用这个功能,请在#号前面打上反斜杠。如 \#{1} 会被替换为 #{1}
  31.   # 而 \\#{1} 会被替换为 \1
  32.   #--------------------------------------------------------------------------
  33.   }
  34.   #--------------------------------------------------------------------------
  35.   # ● 处理脚本用的正则表达式
  36.   #--------------------------------------------------------------------------
  37.   SCRIPT_ABBR_RE =
  38.     /(?<!::|\.)\b(?:#{SCRIPT_ABBR_LIST.keys.join('|')})\b(?! *[(@$\w])/
  39.   module_function
  40.   #--------------------------------------------------------------------------
  41.   # ● 对脚本的处理
  42.   #--------------------------------------------------------------------------
  43.   def process_script(script)
  44.     script.gsub(SCRIPT_ABBR_RE, SCRIPT_ABBR_LIST)
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 执行脚本
  48.   #--------------------------------------------------------------------------
  49.   def eval(script, *args)
  50.     v = $game_variables
  51.     s = $game_switches
  52.     n = $game_actors
  53.     a = $game_actors
  54.     p = $game_party
  55.     g = $game_party.gold
  56.     e = $game_troop
  57.     script = process_script(script)
  58.     if args.empty?
  59.       instance_eval(script, __FILE__, __LINE__)
  60.     else
  61.       Kernel.eval(script, *args)
  62.     end
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 混入模块
  66.   #--------------------------------------------------------------------------
  67.   Game_BattlerBase.send :include, self
  68.   Game_Character.send   :include, self
  69.   Game_Interpreter.send :include, self
  70.   Window_Base.send      :include, self
  71. end
  72.  
  73. class RPG::UsableItem::Damage
  74.   #--------------------------------------------------------------------------
  75.   # ● 根据参数执行计算公式
  76.   #--------------------------------------------------------------------------
  77.   def eval(a, b, v)
  78.     value = Taroxd::Eval.eval(@formula, b.formula_binding(a, b, v))
  79.     value > 0 ? value * sign : 0
  80.   end
  81. end
  82.  
  83. class Game_BattlerBase
  84.   #--------------------------------------------------------------------------
  85.   # ● 执行计算公式的环境
  86.   #--------------------------------------------------------------------------
  87.   def formula_binding(a, b, v)
  88.     s = $game_switches
  89.     n = $game_actors
  90.     p = $game_party
  91.     g = $game_party.gold
  92.     e = $game_troop
  93.     binding
  94.   end
  95. end
  96.  
  97. class Window_Base < Window
  98.   #--------------------------------------------------------------------------
  99.   # ● 对 #{} 的处理
  100.   #--------------------------------------------------------------------------
  101.   alias convert_escape_characters_without_eval convert_escape_characters
  102.   def convert_escape_characters(text)
  103.     convert_escape_characters_without_eval(text)
  104.     .gsub(/\e?#(?<bracket>\{([^{}]|\g<bracket>)*\})/) do |code|
  105.       next code if code.slice!(0) == "\e"
  106.       eval(code[1..-2])
  107.     end
  108.   end
  109. end

评分

参与人数 2星屑 +380 收起 理由
怪蜀黍 + 350 发布奖励
晴兰 + 30 挺好用的

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
196 小时
注册时间
2013-5-10
帖子
410
2
发表于 2014-2-21 22:56:04 | 只看该作者
感谢分享!这样打脚本就不用记那么多单词了!(←_←偷懒)
大前年的作品《猪刀历险记》
前年的作品《深蓝之心》
上面都是黑历史!
开学了我终于要长久潜水了!
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

3
 楼主| 发表于 2014-3-15 13:24:37 | 只看该作者
本帖最后由 taroxd 于 2014-7-8 20:48 编辑

自用版在此:https://rpg.blue/thread-367691-1-1.html

配合群组中置顶的脚本,可以实现 P[0](索引队伍) 、P - 1000 (损失金钱)等更为便捷的用法
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
105 小时
注册时间
2012-11-11
帖子
72
4
发表于 2014-3-17 22:56:09 | 只看该作者
说得很好!给我这种脚本渣提供了宝贵的资源啊。必须赞一个!

不过“S[5] = true if P[0].hp > E[0].hp”这一段我还是没看明白呀....
回复 支持 反对

使用道具 举报

Lv1.梦旅人

史莱姆的信徒
12-B

梦石
0
星屑
53
在线时间
368 小时
注册时间
2013-8-14
帖子
1011
5
发表于 2014-3-22 07:55:00 手机端发表。 | 只看该作者
怒首苍穹 发表于 2014-3-17 22:56
说得很好!给我这种脚本渣提供了宝贵的资源啊。必须赞一个!

不过“S[5] = true if P[0].hp > E[0].hp”这 ...

如果if后的成立,就执行前面的

点评

多谢啦,现在差不多懂了  发表于 2014-3-23 20:38
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

6
 楼主| 发表于 2014-7-8 20:51:59 | 只看该作者
2014.07.08
重大更新。偷懒程度更高,使用范围更广,功能大幅增强。

感谢 @晴兰 在技术讨论区给予的帮助。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 06:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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