利用set_trace_func方法来判断一个方法是否被alias过

2014 年 8 月 26 日

其实就是囧叔跟我说的利用irb的help相同的技巧,在set_trace_func下调用,在合适的binding中取得信息并且直接用throw…catch来跳出(实际并不执行方法体),

详细方法见代码注释:

顺便,在Ruby1.8的Method没有定义source_location的情况下取得方法定义的位置的方法,以及取得参数名的方法。

 

 

在RM中使用gem和bundle

其实很多东西跟普通ruby使用gem和bundle是一样的,但是RM没有自带rubygems,因此有两种思路,一种是给RM嵌入一个rubygems,一种是利用另一个Ruby(也就是实际运行bundle的ruby.exe等)来发现require需要的文件和依赖关系。

下面以第二种思路为例,例子任务是使用iniparse这个gem来帮助RM里面读Game.ini。

注意:RPGMaker系列本身不支持载入.so文件,因此能用到的gems只能是纯Ruby形式的源文件组成的代码,这个文章与这个限制无关,也无意绕过这个限制。只是提供了另一种管理脚本插件的思路:借用rubygems。产生的gem目录也可以最后放在加密的rgssad(rgss2a/rgss3a)文件里面并用某种手段当做本地目录读出来,从而保证了加密保护游戏程序的语义,当然这里也不讨论对gem目录的加密和解包具体方法。

1. 首先像正常使用bundle一样在Game.exe目录下建立一个gemfile:

2. 用bundle在工程目录安装所需的gems:

用cmd在工程目录下运行下列代码。

3. 在RM的脚本编辑器中插入一段辅助代码,让require可以自动去找到我们指定的gem:

 

4. 这个时候在脚本编辑器之后可以插入使用的代码了,这里我们用的是RGSS3(RPG Maker VX Ace)的代码例子:

5. 最后,运行的方式是在cmd下运行下列代码,你也可以建立快捷方式: