我正在尝试解决魔兽世界"问机器人先生"附加组件中的一个问题。
错误代码是这样的:
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
参考