2014-12-26 7 views
2

Я пытаюсь решить проблему в дополнении «Спроси мистера Робота» для World of Warcraft.Что является альтернативой сломанному API-интерфейсу WoW API GetCurrentRegion()?

Код ошибки выглядит примерно так:

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

    -- other stuff here 
end 

Проблема заключается в том, что GetCurrentRegion() возвращает область клиента и не вошедший в регионе: У меня есть клиент ЕС вошел в системе на американскую области, которая имеет ЕС аналог с тем же именем (Area52). Чистый эффект заключается в том, что плагин возвращает существующую, но некорректную область («EU-Area52») вместо существующей и правильной («US-Area52»).

Эта проблема также задокументированы на gamepedia

Эта функция ненадежными для игроков, которые переключаются между регионами. Например, если игрок установит американский клиент и затем войдет в серверы ЕС, эта функция будет неправильно сообщать, что они все еще находятся в регионе США.

Итак, я хотел бы заменить GetCurrentRegion() альтернативным вызовом или функцией, которая возвращает надежные данные.

Как это сделать?

ответ

2

Существует библиотека LibRealmInfo (WoWI/Curse), который обеспечивает Lookups из закодированных, ручных собранных данных для определения текущего региона надежного способом (может не для новых сфер, добавленных на более позднем этапе, так что проверить для обновления)

других методов, которые являются ненадежными:

  • квар "portal" в действительности значение, которое GetCurrentRegion() возвращается, так что это то же самое, некорректное значение
  • В reply в теме, связанной Hotted24 от печально известных состояний Симка, CVar "realmList" больше не работает в WoD. (может еще «работа» - как в не бросать ошибку, когда дано GetCVar - если это в Config.WTF, но, скорее всего, не изменится больше Стартом)

редактировать: продезинфицировать размещать

+1

Спасибо, я использовал библиотеку, чтобы исправить: https: //gist.github ,com/sklivvz/b2dc51c4547818e88672 – Sklivvz

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

Видел его на wowinterface, использовал его, работая в прошлый раз, когда я проверял =)

Reference

EDIT:

Не тестировался, но абсолютно уверен, что это будет работать:

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 

Reference

+1

Ваш код не работает, как есть, нужно включить библиотеку и вызвать общедоступные методы – Sklivvz

 Смежные вопросы

  • Нет связанных вопросов^_^