是否有可能在没有内置支持的情况下在Lua中生成事件和钩子?

游戏是否需要内置函数来接受和运行lua脚本,或者我可以在任何游戏上使用Lua来devise事件和钩子,类似于C代码可以使用dll挂钩到WinAPI的日子吗?

我要问的原因是,我正在尝试创建一个后台应用程序,该应用程序将执行一些特定游戏中的事件和钩子,这些游戏目前不支持lua游戏。

简单的例子:

事件: – 检测到PLAYER执行的动作。 例如,打Q键通常会让我的角色使用一个能力,但是在后台运行我的Lua脚本时,会在我的电脑(或其他)上播放声音。

钩子: – 游戏中的动作被检测到。 例如,游戏每分钟都会产生一个敌人。 当一个敌人产生时,脚本会检测到这个并执行一个动作,例如在电脑上本地播放声音。

我想这样做,但是我知道像Garry的Mod这样的游戏,游戏已经内置了对运行lua脚本的支持。

有没有办法使用lua做事件或挂钩,类似于C / C ++如何使用WinAPI dll连接到游戏?

Lua并不神奇 。 Lua不能将自己与任何应用程序联系起来,并干扰任何函数调用。

你甚至不能从C那里做。是的,用Win32 DLL注入,你可以在DLL边界内插入一个DLL。 但是,如果没有DLL边界注入您的代码…你什么都不能做。 而且我猜测大多数游戏不会在DLL边界上暴露“spawn entity”function。

一般来说,大部分游戏都将主要的游戏代码放在DLL本身或者可执行文件本身之内。 graphics系统,声音系统等可能是DLL。 但即使游戏代码是一个DLL,内部游戏进程(创建实体,管理实体等,你想要钩住的东西)都将在该DLL内部。 因此不能注射。

哦,你可以做到这一点(不直接与Lua)。 但是你将不得不反编译应用程序,反向devise函数stream等,并手动编辑编译的二进制文件来添加你的外部钩子函数。

我使用WinAPI做了一个与Just Cause 2相似的事情,我使用了作弊引擎来找出玩家位置存储在内存中的位置,并将其与我的iphone联网以显示“GPS”。

你可以在这里看到代码: https : //github.com/perky/JC2-GPS

我不知道从Lua获取内存,但cheatengine似乎使用Lua,值得一看: http : //www.cheatengine.org/