2

我正在尝试解决魔兽世界“问机器人先生”插件中的问题。

错误的代码是这样的:

function AskMrRobot.ScanCharacter()
    AmrDb.Region = AskMrRobot.regionNames[GetCurrentRegion()]

    -- other stuff here
end

问题是GetCurrentRegion()返回客户端区域而不是登录区域:我有一个欧盟客户端登录到一个美国领域,该领域有一个同名的欧盟对应方(Area52)。最终效果是该插件返回一个现有但不正确的领域(“EU-Area52”),而不是现有且正确的领域(“US-Area52”)。

这个问题也记录在gamepedia

这个功能对于切换区域的玩家来说是不可靠的。例如,如果玩家安装了美国客户端,然后登录到欧盟服务器,该功能会错误地报告他们仍在美国地区。

所以,我想GetCurrentRegion()用返回可靠数据的替代调用或函数替换。

我怎样才能做到这一点?

4

2 回答 2

2

有一个库LibRealmInfo ( WoWI / Curse ),它提供硬编码、手工收集的数据的查找,以可靠的方式确定当前区域(以后添加的新领域可能会失败,因此请检查更新)

其他不可靠的方法:

  • CVar"portal"实际上是GetCurrentRegion()返回的值,所以它是相同的,可能是不正确的值
  • 作为臭名昭著的 Simca 在 Hotted24 链接的线程中的回复"realmList",CVar不再适用于 WoD。(可能仍然“工作” - 因为在给予时不会引发错误GetCVar- 如果它在 Config.wtf 中,但很可能不会再被启动器更改)

编辑:经过消毒的帖子

于 2014-12-28T07:53:00.320 回答
-1
local realmlist = GetCVar("realmList")
local region = string.match(realmlist,"(%a+)%..+")
if region then
  -- use region
end

在 wowinterface 上看到它,一直在使用它,上次我检查时工作 =)

参考

编辑 :

未经测试,但相当肯定它会工作:

local guid = UnitGUID("player")
local currentRegion
if guid then
    local server = tonumber(strmatch(guid, "^Player%-(%d+)"))
    local realm = realmData[server]
    if realm then
        currentRegion = realm.region
    end
end

参考

于 2014-12-30T09:59:10.023 回答