什么是损坏的WoW API调用GetCurrentRegion()的替代方案



我正在尝试解决魔兽世界"问机器人先生"附加组件中的一个问题。

错误代码是这样的:

function AskMrRobot.ScanCharacter()
    AmrDb.Region = AskMrRobot.regionNames[GetCurrentRegion()]
    -- other stuff here
end

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

这个问题也记录在游戏百科上

此功能对于在区域之间切换的玩家来说不可靠。例如,如果玩家安装美国客户端,然后登录到欧盟服务器,则此函数将错误地报告他们仍在美国区域。

因此,我想将GetCurrentRegion()替换为返回可靠数据的替代调用或函数。

我该怎么做?

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

其他不可靠的方法:

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

编辑:经过消毒的帖子

local realmlist = GetCVar("realmList")
local region = string.match(realmlist,"(%a+)%..+")
if region then
  -- use region
end

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

参考

编辑:

未经测试,但相当确定它会起作用:

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

参考

相关内容

  • 没有找到相关文章

最新更新