vanilla-wow-addons – Rev 1
?pathlinks?
-- Storage of Quest levels...
-- All credits go to Elkano for his addon Quest Level
-- ---------------------- --
-- hooking game functions --
-- ---------------------- --
local QuestLevel_original_GetTitleText = GetTitleText;
-- GossipFrame
-- local QuestLevel_original_GossipFrameUpdate = GossipFrameUpdate;
local QuestLevel_original_GetGossipAvailableQuests = GetGossipAvailableQuests;
local QuestLevel_original_GetGossipActiveQuests = GetGossipActiveQuests;
-- QuestFrame
-- local QuestLevel_original_QuestFrameGreetingPanel_OnShow = QuestFrameGreetingPanel_OnShow;
local QuestLevel_original_GetActiveTitle = GetActiveTitle;
local QuestLevel_original_GetAvailableTitle = GetAvailableTitle;
-- -------------- --
-- storage system --
-- -------------- --
QuestLevel_StorageKeys = { };
QuestLevel_StorageKeys["levelmin"] = "<";
QuestLevel_StorageKeys["levelmax"] = ">";
QuestLevel_StorageKeys["elite"] = "@";
function QuestLevel_StorageSet(storage, key, value)
if (not QuestLevel_StorageKeys[key]) then
return storage;
end
if (storage == nil) then
storage = "";
end
local storagearray = {};
for storagekey, storagevalue in QuestLevel_StorageKeys do
s1, s2, storagearray[storagekey] = string.find(storage, storagevalue.."(.-)¤");
end
storagearray[key] = value;
local newstorage = "";
for storagekey, storagevalue in storagearray do
newstorage = newstorage..QuestLevel_StorageKeys[storagekey]..storagevalue.."¤";
end
return newstorage;
end
function QuestLevel_StorageGet(storage, key)
if (not QuestLevel_StorageKeys[key]) then
return nil;
end
if (storage == nil) then
storage = "";
end
s1, s2, value = string.find(storage, QuestLevel_StorageKeys[key].."(.-)¤");
if ( value ) then
return value;
else
return nil;
end
end
-- -------------- --
-- main functions --
-- -------------- --
local function QuestLevel_VariablesLoaded()
if( not QuestLevel_Quest2Level ) then
QuestLevel_Quest2Level = { };
end
-- convert to now storage -- beta2
for quest, data in QuestLevel_Quest2Level do
if ( type(data) == "table" or string.find(data, QuestLevel_StorageKeys["levelmin"]) == nil ) then
if ( type(data) == "table" ) then
local queststorage = "";
queststorage = QuestLevel_StorageSet(queststorage, "levelmin", data["min"]);
queststorage = QuestLevel_StorageSet(queststorage, "levelmax", data["max"]);
QuestLevel_Quest2Level[quest] = queststorage;
else
local queststorage = "";
queststorage = QuestLevel_StorageSet(queststorage, "levelmin", data);
QuestLevel_Quest2Level[quest] = queststorage;
end
else
break; -- data is validstorage -> table had been converted before
end
end
-- convert to now storage -- beta3
for quest, data in QuestLevel_Quest2Level do
local levelmin = QuestLevel_StorageGet(data, "levelmin");
local levelmax = QuestLevel_StorageGet(data, "levelmax");
if ( levelmax == nil ) then
break; -- data is validstorage -> table had been converted before
end
if ( tonumber(levelmin) >= tonumber(levelmax) ) then
data = QuestLevel_StorageSet(data, "levelmax", nil);
QuestLevel_Quest2Level[quest] = data;
end
end
end
function QuestLevel_OnLoad()
this:RegisterEvent("VARIABLES_LOADED");
if( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage("Elkano's QuestLevel AddOn v2.0 loaded");
end
end
function QuestLevel_OnEvent()
if( event == "VARIABLES_LOADED" ) then
QuestLevel_VariablesLoaded();
end
end
local function QuestLevel_AddLevelFromTable(questname)
if ( QuestLevel_Quest2Level[questname] ) then
local levelmin = tonumber(QuestLevel_StorageGet(QuestLevel_Quest2Level[questname], "levelmin"));
local levelmax = QuestLevel_StorageGet(QuestLevel_Quest2Level[questname], "levelmax");
if ( levelmax == nil ) then
levelmax = levelmin;
else
levelmax = tonumber(levelmax);
end
local leveltag = "";
if ( levelmin < levelmax ) then
leveltag = leveltag..levelmin.."-"..levelmax;
else
leveltag = leveltag..levelmin;
end
if (QuestLevel_StorageGet(QuestLevel_Quest2Level[questname], "elite") ~= nil) then
leveltag = leveltag.."+";
end
return "["..leveltag.."] "..questname;
end
return "[?] "..questname;
end
function GetTitleText()
if ( QuestlogOptions[EQL3_Player].ShowQuestLevels == 1 and QuestlogOptions[EQL3_Player].OnlyLevelsInLog == 0 ) then
local titletext = QuestLevel_original_GetTitleText();
-- if( DEFAULT_CHAT_FRAME ) then
-- DEFAULT_CHAT_FRAME:AddMessage("[QuestLevel] DEBUG: GetTitleText -> "..titletext);
-- end
return QuestLevel_AddLevelFromTable(titletext);
else
-- still stor the quests..
local titletext = QuestLevel_original_GetTitleText();
QuestLevel_AddLevelFromTable(titletext);
return QuestLevel_original_GetTitleText();
end
end
local function QuestLevel_table2args(intable)
if ( intable.n == 0 ) then
return;
elseif ( intable.n == 1 ) then
return intable[1];
else
return table.remove(intable, 1), QuestLevel_table2args(intable);
end
end
local function QuestLevel_addLevelGossip(...)
if ( arg.n == 0) then
return
end
for i=1, arg.n, 2 do
-- if( DEFAULT_CHAT_FRAME ) then
-- DEFAULT_CHAT_FRAME:AddMessage("[QuestLevel] DEBUG: arg["..i.."] -> "..arg[i]);
-- end
arg[i] = QuestLevel_AddLevelFromTable(arg[i]);
end
return QuestLevel_table2args(arg);
end
-- function GossipFrameUpdate()
-- if( DEFAULT_CHAT_FRAME ) then
-- DEFAULT_CHAT_FRAME:AddMessage("[QuestLevel] DEBUG: |cffffff00GossipFrameUpdate|r called");
-- end
-- return QuestLevel_original_GossipFrameUpdate();
-- end
function GetGossipAvailableQuests()
-- if( DEFAULT_CHAT_FRAME ) then
-- DEFAULT_CHAT_FRAME:AddMessage("[QuestLevel] DEBUG: |cffffff00GetGossipAvailableQuests|r called");
-- end
if ( QuestlogOptions[EQL3_Player].ShowQuestLevels == 1 and QuestlogOptions[EQL3_Player].OnlyLevelsInLog == 0 ) then
return QuestLevel_addLevelGossip(QuestLevel_original_GetGossipAvailableQuests());
else
return QuestLevel_original_GetGossipAvailableQuests();
end
end
function GetGossipActiveQuests()
-- if( DEFAULT_CHAT_FRAME ) then
-- DEFAULT_CHAT_FRAME:AddMessage("[QuestLevel] DEBUG: |cffffff00GetGossipActiveQuests|r called");
-- end
if ( QuestlogOptions[EQL3_Player].ShowQuestLevels == 1 and QuestlogOptions[EQL3_Player].OnlyLevelsInLog == 0 ) then
return QuestLevel_addLevelGossip(QuestLevel_original_GetGossipActiveQuests());
else
return QuestLevel_original_GetGossipActiveQuests();
end
end
-- function QuestFrameGreetingPanel_OnShow()
-- if( DEFAULT_CHAT_FRAME ) then
-- DEFAULT_CHAT_FRAME:AddMessage("[QuestLevel] DEBUG: |cffffff00QuestFrameGreetingPanel_OnShow|r called");
-- end
-- return QuestLevel_original_QuestFrameGreetingPanel_OnShow();
-- end
function GetActiveTitle(i)
-- if( DEFAULT_CHAT_FRAME ) then
-- DEFAULT_CHAT_FRAME:AddMessage("[QuestLevel] DEBUG: |cffffff00GetActiveTitle("..i..")|r called");
-- end
if ( QuestlogOptions[EQL3_Player].ShowQuestLevels == 1 and QuestlogOptions[EQL3_Player].OnlyLevelsInLog == 0 ) then
return QuestLevel_AddLevelFromTable(QuestLevel_original_GetActiveTitle(i));
else
return QuestLevel_original_GetActiveTitle(i);
end
end
function GetAvailableTitle(i)
-- if( DEFAULT_CHAT_FRAME ) then
-- DEFAULT_CHAT_FRAME:AddMessage("[QuestLevel] DEBUG: |cffffff00GetAvailableTitle("..i..")|r called");
-- end
if ( QuestlogOptions[EQL3_Player].ShowQuestLevels == 1 and QuestlogOptions[EQL3_Player].OnlyLevelsInLog == 0 ) then
return QuestLevel_AddLevelFromTable(QuestLevel_original_GetAvailableTitle(i));
else
return QuestLevel_original_GetAvailableTitle(i);
end
end