关于 Trinitycore 可用于 LUA 脚本的 API 的问题

首先,如果我在这里发表问题是错的,请让我道歉。

我正在使用 单人项目服务器3.3.5。我正在尝试编写一个脚本,每当用户在游戏中地图上指向时就会传送玩家。

我修改了 Carbonite 插件,以便将项添加到地图右键菜单中,这样它就会发送 gm 命令 [.go zonexy][3] [zonecoordinate X] [zonecoordinate Y]

但它只适用于玩家当前所在的区域。我希望它适用于我在地图上能看到的所有区域。为此,我需要在 AreaTableID 上找到一个 zoneId(这是 .go zonexy 命令的一个可选参数)

我毫不怀疑,我无法弄清楚如何在客户端获取当前地图区域 ID。我查找了一下,只找到 GetCurrentMapZone(),它给我一个数字,我真的不知道该怎么做。还有 GetRealZoneText(),它返回光标所指向的区域名称。这几乎是我需要的。我需要区域 ID 而不是区域名称。GetCurrentMapAreaID() 也给了我一个 mapID,但它不匹配我需要的 zoneID。

因此,我想在服务器端制作一个 lua 脚本,将 [zonecoordinate X] [zonecoordinate Y] [zone name] 从客户端中提取出来,并将区域名称转换为区域 ID。或者通过某种方式从 GetCurrentMapZone() 和 GetCurrentMapAreaID() 中获取 zoneid。

然而,我没有找到任何关于在 Lua 脚本中可用的 API 的文档。我查看了一些随单人项目提供的脚本。其中之一是 'System_Group_commands.lua'(以下附上),我已经连接到它。我成功地将信息从客户端传递了过来,但我不知道是否可以从 LUA 查找字符串区域名称并从 AreaTableID 中获取其 ID。另外一个问题是,我传递了区域坐标,但是 Player: Teleport 在 Lua 中想要的是绝对地图坐标。我查看了 Teleport 函数和 '.go zonexy' 函数的 c++ 源代码,看来 .go zonexy 函数将本地坐标转换为全局坐标。使用


Zone2MapCoordinates(x, y, zoneEntry->ID); //line 454 in cs_go.cpp attached below

但是,我不知道这个函数是否暴露给 LUA 脚本。

如果有人能帮帮我,我将不胜感激。也许有一种简单的方法可以从客户端获取区域 ID,或者我没有注意到其他方面......

谢谢

PS. 一张图片胜过千言万语...... 这里 是目前的工作方式。将其扩展到地图的其他区域将会很好。

System_Group_commands.lua cs_go.cpp

点赞