diff --git a/Doc/Changelog.txt b/Doc/Changelog.txt
index 3b89409..396c9ab 100644
--- a/Doc/Changelog.txt
+++ b/Doc/Changelog.txt
@@ -1,8 +1,9 @@
2018-09-15 version 53
+ Thanks Snakefish!
Added missing skillquests,
Some code has been refactored
In game part changed to cope with ZOS.
- After installing type /histload for the current char. Other wise it my take 1 day to get the historic achievements.
+ After installing type /histload for the current char. Other wise it may take 1 day to get the historic achievements.
2018-09-11 version 53-beta
diff --git a/HistOfflineBeta.lua b/HistOfflineBeta.lua
index 13573d1..c568aec 100644
--- a/HistOfflineBeta.lua
+++ b/HistOfflineBeta.lua
@@ -5,12 +5,12 @@
-- Configuration ==========
--local dateformat = "%Y-%m-%d, %H:%M"
-local dateformat_log = "%Y-%m-%d, %H:%M:%S"
-local FG_Colour_Not_Complete = "#FFB67D"
-local FG_Colour_Complete = "#000000"
-local BG_Colour_Not_Complete = "#FFB67D"
-local BG_Colour_Complete = "#A4FF5A"
-local Colour_Heading_Complete = "#58FA58"
+dateformat_log = "%Y-%m-%d, %H:%M:%S"
+FG_Colour_Not_Complete = "#FFB67D"
+FG_Colour_Complete = "#000000"
+BG_Colour_Not_Complete = "#FFB67D"
+BG_Colour_Complete = "#A4FF5A"
+Colour_Heading_Complete = "#58FA58"
local dname, key, count, ccount, colour, bgcolour
--force_lang = "fr" -- or "de" or "fr" for debugging
@@ -43,9 +43,9 @@ dofile "./data/DLC.lua" --Achievement to Grid lookup, language independent
dofile "./data/Group1.lua" -- Grp Mode 1 data, N, V, VH
dofile "./data/Group2.lua" -- Grp Mode 2 data, N, V, VH
dofile "./data/Public.lua"
-dofile "./data/Quest.lua"
+dofile "./data/Quest2.lua"
dofile "./data/Veteran.lua" -- Auxiliary Achievements for Vet Dungeons
-dofile "./data/WB.lua"
+dofile "./data/WB2.lua"
dofile "./data/Trials.lua"
dofile "./data/Special.lua" -- Record of non standard Achievement ID's we need to keep.
dofile "./data/utility.lua" -- utility functions
@@ -89,39 +89,6 @@ load_lang = function (lang)
end
-
-
---SQ_Dat loaded from Quest.lua
-SQ_Info= {} -- keyed by "LC" string as the ZONE Identifier
-for id,_ in pairs (SQ_dat) do -- Load all Quest Data by Achievement ID
- local L = SQ_dat[id].L
- local C = SQ_dat[id].C
- local key = tostring(L) .. tostring(C) -- make name key
-
- if SQ_Info[key] == nil then
- SQ_Info[key] = {}
- SQ_Info[key].ids = {} --Array of Achievement ID's
- end
- table.insert(SQ_Info[key].ids,id)
-end
-
---WB_Dat loaded from WB.lua
-WB_Info= {} -- keyed by "LC" string as the ZONE Identifier
-for id,_ in pairs (WB_dat) do -- Load all WB Data by Achievement ID
- local L = WB_dat[id].L
- local C = WB_dat[id].C
- local key = tostring(L) .. tostring(C) -- make name key
-
- if WB_Info[key] == nil then
- WB_Info[key] = {}
- WB_Info[key].ids = {} --Array of Achievement ID's
- end
- table.insert(WB_Info[key].ids,id)
-end
-
-
-
-
accounts = {}
accounts_list = {} -- String list for selection dialog
playerNames = {} -- Get name from ID.
@@ -218,7 +185,7 @@ for acc,_ in pairs(History_SV["Default"]) do
end
-- a quick link to my Achievements
- me.Ach = thischar.Ach
+ me.ach = thischar.ach
end
table.sort(accounts[acc].playerIDs,function(a,b) return (playerNames[a] < playerNames[b]) end)
@@ -749,67 +716,17 @@ end
Line= Line +1
end
-- Create WorldBoss Achievements Box==========================
- me.WB_box= iup.matrix {numcol=4, numcol_visible=4, numlin=5, widthdef=110}
- for i=1, 4 do -- Load headings, not Trials
- me.WB_box:setcell(0,i, Area_names[i].long)
- end
- me.WB_box:setcell(0,0, L.Zone)
- me.WB_box:setcell(1,0, "1")
- me.WB_box:setcell(2,0, "2")
- me.WB_box:setcell(3,0, "3")
- me.WB_box:setcell(4,0, "4")
- me.WB_box:setcell(5,0, "5")
- iup.SetAttribute(me.WB_box, "READONLY", "YES")
- iup.SetAttribute(me.WB_box, "ALIGNMENT0", "ACENTER")
-
-
- -- Need to keep track of multiple achievements for WB in Zones. Index them by zone LineColumn.
- WB_Area={}
- local dname, key, count, ccount
--- Scan over all Slots, see what we have
- for C=1, 4 do
- ccount = 0 -- per column
- for L = 1, 5 do
- key = tostring(L) .. tostring(C) -- make name key
- dname = Locations[key] -- Zone Locations
- if dname == nil then
- break -- only 1 in Coldharbour,1 morrowind, not worry about empty slots
- end
+ me.WB_box= Location_Box()
+ Populate_Dat(me.WB_box, WB_dat,me.ach)
- count = 0
- if WB_Info[key] == nil then
- break -- Some Locations not necessarily have WB
- end
- for _, id in ipairs (WB_Info[key].ids) do -- get the WB of the zone
- if thischar.ach[id] ~= nil then -- Have we got it?
- count =count +1
- end
- end
- ccount = ccount + count -- Track the faction (Column)
- me.WB_box:setcell(L,C,dname .. " (" .. tostring(count) .. ")")
-
- colour = "FGCOLOR" .. L .. ":" .. C
- bgcolour = "BGCOLOR" .. L .. ":" .. C
- if count == #WB_Info[key].ids then -- Got them all??
- iup.SetAttribute(me.WB_box, colour , FG_Colour_Complete) -- Yup
- iup.SetAttribute(me.WB_box, bgcolour , BG_Colour_Complete)
- end
- end -- L
-
- --Set Column Heading Colours
- if ccount >= 15 then
- iup.SetAttribute(me.WB_box, "BGCOLOR0:" .. tostring(C), Colour_Heading_Complete)
- end
- end -- C
----
-- Create WorldBoss Achievements Detail Boxes=======================
me.WB_Detail_box = {}
me.WB_Detail_Zbox = iup.zbox{}
-
+--[[
for key, dat in pairs(WB_Info) do -- for each zone
me.WB_Detail_box[key]= iup.matrix {numcol=2, numcol_visible=2, numlin=#dat.ids}
@@ -851,56 +768,19 @@ end
function me.WB_box:enteritem_cb(L,C)
me.WB_Detail_Zbox.value = me.WB_Detail_box[tostring(L) .. tostring(C)]
end
-
+--]]
-- Create SkillQuest Achievements Box==========================
- me.SQ_box= Location_Box("name")
-
- -- Need to keep track of multiple achievements for SQ in Zones. Index them by zone LineColumn.
-
- for C=1, 5 do
- ccount = 0 -- per column
- for L = 1, 5 do
- key = tostring(L) .. tostring(C) -- make name key
- dname = Locations[key] -- Zone Locations
- if dname == nil then
- break -- only 1 in Coldharbour,1 morrowind not worry about empty slots
- end
+ me.SQ_box= Location_Box()
+ Populate_Dat(me.SQ_box, SQ_dat,me.ach)
- count = 0
- if SQ_Info[key] == nil then
- break -- Some Locations not necessarily have Skill Quests
- end
- for _, id in ipairs (SQ_Info[key].ids) do -- get the quests of the zone
-
- if thischar.ach[id] ~= nil then -- Have we got it?
- count =count +1
- end
- end
- ccount = ccount + count -- Track the faction (Column)
- me.SQ_box:setcell(L,C,dname .. " (" .. tostring(count) .. ")")
-
- colour = "FGCOLOR" .. L .. ":" .. C
- bgcolour = "BGCOLOR" .. L .. ":" .. C
- if count == #SQ_Info[key].ids then -- Got them all??
- iup.SetAttribute(me.SQ_box, colour , FG_Colour_Complete) -- Yup
- iup.SetAttribute(me.SQ_box, bgcolour , BG_Colour_Complete)
- end
- end -- L
-
- --Set Column Heading Colours
- if ccount >= 15 then
- iup.SetAttribute(me.SQ_box, "BGCOLOR0:" .. tostring(C), Colour_Heading_Complete)
- end
- end -- C
----
-- Create SkillQuest Achievements Detail Boxes=======================
me.SQ_Detail_box = {}
me.SQ_Detail_Zbox = iup.zbox{}
-
+--[[
local link
for key, dat in pairs(SQ_Info) do -- for each zone
me.SQ_Detail_box[key]= iup.matrix {numcol=2, numcol_visible=2, numlin=#dat.ids}
@@ -951,6 +831,7 @@ end
function me.SQ_box:enteritem_cb(L,C)
me.SQ_Detail_Zbox.value = me.SQ_Detail_box[tostring(L) .. tostring(C)]
end
+ --]]
--========== DLC
me.DLC_box= iup.matrix {numcol=6, numcol_visible=6, numlin=4, widthdef=105}
diff --git a/data/Quest2.lua b/data/Quest2.lua
new file mode 100644
index 0000000..fb88b31
--- /dev/null
+++ b/data/Quest2.lua
@@ -0,0 +1,173 @@
+--[[ Taken from Locations2 (en) for reference
+--EP
+{ name="Stonefalls",Grp="Fungal Grotto", Pub="Crow's Wood"}, --1
+{ name="Deshaan", Grp="Darkshade Caverns", Pub="Forgotten Crypts"}, --2
+{ name="Shadowfen", Grp="Arx Corinum", Pub="Sanguine's Demesne"}, --3
+{ name="Eastmarch", Grp="Direfrost Keep", Pub="Hall of the Dead"}, --4
+{ name="The Rift", Grp="Blessed Crucible", Pub="Lion's Den"}, --5
+--DC
+{ name="Glenumbra", Grp="Spindleclutch", Pub="Bad Man's Hallows"}, --6
+{ name="Stormhaven", Grp="Wayrest Sewers", Pub="Bonesnap Ruins"}, --7
+{ name="Rivenspire", Grp="Crypt of Hearts", Pub="Obsidian Scar"}, --8
+{ name="Alik'r Desert", Grp="Volenfell", Pub="Lost City"}, --9
+{ name="Bangkorai", Grp="Blackheart Haven", Pub="Razaks Wheel"}, --10
+--AD
+{ name="Auridon", Grp="Banished Cells", Pub="Toothmall Gully"}, --11
+{ name="Grahtwood", Grp="Elden Hollow", Pub="Root Sunder Ruins"}, --12
+{ name="Greenshade", Grp="City of Ash", Pub="Rulanyil's Fall"}, --13
+{ name="Malabal-Tor", Grp="Tempest Island", Pub="Crimson Cove"}, --14
+{ name="Reaper's March", Grp="Selene's Web", Pub="The Vile Manse"}, --15
+--Coldharbour
+{ name="Coldharbour", Grp="Vaults of Madness", Pub="Village of the Lost"}, --16
+{ name="Dark Brotherhood"}, --17
+{ name="Thieves Guild"}, --18
+{ name="Imperial City"}, --19
+{ name="VVardenfell"}, --20
+
+{ name="Orsinium"},--21
+{ name="Clockwork City"}, --22
+{ name="Summerset"}, --23
+
+}
+--]]
+
+--Quests that have skill points
+SQ_dat = {
+--["11"] = StoneFalls
+[201] = {Location=1, ["link1"] ="http://www.uesp.net/wiki/Online:The_Death_of_Balreth" },
+[204] = {Location=1, ["link1"] = "http://www.uesp.net/wiki/Online:The_General%27s_Demise"},
+[209] = {Location=1, ["link1"] = "http://www.uesp.net/wiki/Online:Sadal%27s_Final_Defeat"},
+
+--Deshaan
+[363] = {Location=2, ["link1"] = "http://www.uesp.net/wiki/Online:Plague_Bringer"},
+[365] = {Location=2, ["link1"] = "http://www.uesp.net/wiki/Online:The_Judgment_of_Veloth"},
+[364] = {Location=2, ["link1"] = "http://www.uesp.net/wiki/Online:The_Seal_of_Three"},
+
+--Shadowfen
+[950] = {Location=3, ["link1"] = "http://www.uesp.net/wiki/Online:The_Dream_of_the_Hist"},
+[185] = {Location=3, ["link1"] = "http://www.uesp.net/wiki/Online:Keepers_of_the_Shell" },
+[184] = {Location=3, ["link1"] ="http://www.uesp.net/wiki/Online:The_Skin-Stealer%27s_Lair"},
+
+--["41"] = "Eastmarch",
+[599] = {Location=4, ["link1"] = "http://www.uesp.net/wiki/Online:Songs_of_Sovngarde"},
+[597] = {Location=4, ["link1"] = "http://www.uesp.net/wiki/Online:The_Siege_of_Cradlecrush"},
+[598] = {Location=4, ["link1"] = "http://www.uesp.net/wiki/Online:One_Victor,_One_King" },
+
+--["51"] the Rift
+[336] = {Location=5, ["link1"] = "http://www.uesp.net/wiki/Online:Shattered_Hopes"},
+[337] = {Location=5, ["link1"] = "http://www.uesp.net/wiki/Online:Stomping_Sinmur" },
+[335] = {Location=5, ["link1"] = "http://www.uesp.net/wiki/Online:Through_the_Shroud"},
+
+--["12"]Glenumbra
+[31] = {Location=6, ["link1"] = "http://www.uesp.net/wiki/Online:Angof_the_Gravesinger_%28quest%29"}, --v
+[28] = {Location=6, ["link1"] = "http://www.uesp.net/wiki/Online:The_Fall_of_Faolchu"},
+[30] = {Location=6, ["link1"] = "http://www.uesp.net/wiki/Online:Purifying_the_Wyrd_Tree"},
+
+--["22"] = "Stormhaven"
+
+[155] = {Location=7,["link1"] = "http://www.uesp.net/wiki/Online:The_Return_of_the_Dream_Shard"};
+[154] = {Location=7,["link1"] = "http://www.uesp.net/wiki/Online:Sir_Hughes%27_Fate"},
+[156] = {Location=7,["link1"] = "http://www.uesp.net/wiki/Online:Vaermina%27s_Gambit"},
+
+--Rivenspire
+[589] = {Location=8, ["link1"] = "http://www.uesp.net/wiki/Online:The_Blood-Splattered_Shield" },
+[590] = {Location=8, ["link1"] = "http://www.uesp.net/wiki/Online:The_Liberation_of_Northpoint" },
+[591] = {Location=8, ["link1"] = "http://www.uesp.net/wiki/Online:The_Lightless_Remnant"},
+
+--Alik'r Desert
+[517] ={Location=9, ["link1"] = "http://www.uesp.net/wiki/Online:Alasan%27s_Plot" },
+[518] ={Location=9, ["link1"] = "http://www.uesp.net/wiki/Online:Amputating_the_Hand"},
+[516] ={Location=9, ["link1"] = "http://www.uesp.net/wiki/Online:A_Reckoning_with_Uwafa"},
+
+--["52"] = "Bangkorai",
+[145] ={Location=10, ["link1"] = "http://www.uesp.net/wiki/Online:The_Parley"},
+[146] ={Location=10, ["link1"] = "http://www.uesp.net/wiki/Online:Storming_the_Garrison" },
+[147] ={Location=10, ["link1"] = "http://www.uesp.net/wiki/Online:To_Walk_on_Far_Shores"},
+
+
+--["13"] = "Auridon",
+[360] ={Location=11, ["link1"] = "http://www.uesp.net/wiki/Online:Rites_of_the_Queen"},
+[362] ={Location=11, ["link1"] = "http://www.uesp.net/wiki/Online:Sever_All_Ties"},
+[361] ={Location=11, ["link1"] = "http://www.uesp.net/wiki/Online:The_Veil_Falls"},
+
+--["23"] = "Grahtwood",
+[605] = {Location=12, ["link1"] = "http://www.uesp.net/wiki/Online:The_Grip_of_Madness"},
+[606] = {Location=12, ["link1"] = "http://www.uesp.net/wiki/Online:Heart_of_the_Matter" },
+[607] = {Location=12, ["link1"] = "http://www.uesp.net/wiki/Online:A_Lasting_Winter" },
+
+--["33"] = "Greenshade",
+[511] = {Location=13, ["link1"] = "http://www.uesp.net/wiki/Online:Pelidil%27s_End"},
+--[945] = {Location=13, ["link1"] = "http://www.uesp.net/wiki/Online:Striking_at_the_Heart"}, -- Striking is a composite of 3 quests
+[512] = {Location=13, ["link1"] = "http://www.uesp.net/wiki/Online:Striking_at_the_Heart"}, -- Achievement granting skill pt is Valenwood Protector
+[510] = {Location=13, ["link1"] = "http://www.uesp.net/wiki/Online:Throne_of_the_Wilderking"},
+
+-- Malabal-Tor
+[284] = {Location=14, ["link1"] = "http://www.uesp.net/wiki/Online:The_Prisoner_of_Jathsogur"},
+[283] = {Location=14, ["link1"] = "http://www.uesp.net/wiki/Online:Reap_What_Is_Sown"},
+---- Has no Achievement
+[99999999] = {Location=14, ["link1"] = "http://www.uesp.net/wiki/Online:Buyer_Beware"},
+
+--Reapers march
+[538] = {Location=15, ["link1"] = "http://www.uesp.net/wiki/Online:The_Den_of_Lorkhaj"},
+[536] = {Location=15,["link1"] = "http://www.uesp.net/wiki/Online:Stonefire_Machinations"},
+[537] = {Location=15,["link1"] = "http://www.uesp.net/wiki/Online:Motes_in_the_Moonlight" },
+
+--Coldharbour
+[613] = {Location=16, ["link1"] = "http://www.uesp.net/wiki/Online:Breaking_the_Shackle"},
+[614] = {Location=16, ["link1"] = "http://www.uesp.net/wiki/Online:The_Final_Assault"},
+[612] = {Location=16, ["link1"] = "http://www.uesp.net/wiki/Online:Light_from_the_Darkness"},
+
+--Brotherhood
+[1436] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Dark_Initiate"}, -- Signed in Blood "Dark Initiate", "Complete the \"Signed in Blood\" Dark Brotherhood quest in the Gold Coast.",
+[1438] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Sermonizer_Subduer"}, -- A Lesson in Silence "Sermonizer Subduer","Complete the \"A Lesson in Silence\" Dark Brotherhood quest in the Gold Coast.",
+[1439] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Brethren_Benefactor"}, -- Questions of Faith "Brethren Benefactor", "Complete the \"Questions of Faith\" Dark Brotherhood quest in the Gold Coast.",
+[1440] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Assassin_(achievement)"}, -- A Special Request"Assassin", "Complete the \"A Special Request\" Dark Brotherhood quest in the Gold Coast.",
+[1441] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Dark_Discovery"}, -- Dark Revelations "Dark Discovery", "Complete the \"Dark Revelations\" Dark Brotherhood quest in the Gold Coast.",
+[1442] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Dark_Investigator"}, -- A Ghost from the Past "Dark Investigator","Complete the \"A Ghost from the Past\" Dark Brotherhood quest in the Gold Coast.",
+[1443] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Wrath_of_Sithis"}, -- The Wrath of Sithis "Wrath of Sithis", "Complete \"The Wrath of Sithis\" Dark Brotherhood quest in the Gold Coast.",
+[1444] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Silencer"}, -- "Silencer", Filling the Void "Complete the \"Filling the Void\" Dark Brotherhood quest in the Gold Coast.",
+
+-- TG
+[1360] = {Location=18, ["link1"] = "http://en.uesp.net/wiki/Online:Always_Travel_Separately"}, --Cleaning House "Always Travel Separately", "Complete quest \"Cleaning House\" in Hew's Bane.",
+[1370] = {Location=18, ["link1"] = "http://en.uesp.net/wiki/Online:Iron_Wheel_Infiltration"}, --The Long Game "Iron Wheel Infiltration", "Complete quest \"The Long Game\" in Hew's Bane.",
+[1361] = {Location=18, ["link1"] = "http://en.uesp.net/wiki/Online:Never,_Ever_Steal_From_the_Guild"}, -- "Never, Ever Steal From the Guild", "Complete quest \"A Flawless Plan\" in Hew's Bane.",
+[1362] = {Location=18, ["link1"] = "http://en.uesp.net/wiki/Online:Wedding_Crashers"}, --"Wedding Crashers", "Complete quest \"Forever Hold Your Peace\" in Hew's Bane.",
+[1363] = {Location=18, ["link1"] = "http://en.uesp.net/wiki/Online:Broken_Wheel"}, -- "Broken Wheel", "Complete quest \"Prison Break\" in Hew's Bane.",
+
+
+
+
+-- IC
+[1175] = {Location=19, ["link1"] = "http://en.uesp.net/wiki/Online:The_Sublime_Brazier"}, --"The Sublime Protector",
+
+--Vvardenfell
+[1870] = {Location=20, ["link1"] = "http://en.uesp.net/wiki/Online:Naryu%27s_Confidant"}, --"Naryu's Confidant" Family Reunion http://en.uesp.net/wiki/Online:Family_Reunion
+[1869] = {Location=20, ["link1"] = "http://en.uesp.net/wiki/Online:Rising_Sun"}, -- The Heart of a Telvanni http://en.uesp.net/wiki/Online:The_Heart_of_a_Telvanni
+[1852] = {Location=20, ["link1"] = "http://en.uesp.net/wiki/Online:Champion_of_Vivec"}, --Champion of Vivec
+
+
+--next Column
+-- Orsinium
+[1325] = {Location=21, ["link1"] = "http://en.uesp.net/wiki/Online:A_King-Sized_Problem"}, -- A King-Sized Problem "Orc King's Councilor","Complete quest \"A King-Sized Problem\" in Wrothgar.",
+[1326] = {Location=21, ["link1"] = "http://en.uesp.net/wiki/Online:The_Anger_of_a_King"}, -- The Anger of a King "Orc King's Marshal","Complete quest \"The Anger of a King\" in Wrothgar.",
+[1327] = {Location=21, ["link1"] = "http://en.uesp.net/wiki/Online:Blood_on_a_King%27s_Hands"}, --Blood on a King's Hands "Orc King's Conqueror", "Complete quest \"Blood on a King's Hands\" in Wrothgar.",
+
+--Clockwork
+[2050] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:To_The_Clockwork_City"}, --To The Clockwork City "Land of Gears and Cogs","Complete the \"To the Clockwork City\" quest.",
+[2058] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:In_Search_of_a_Sponsor"}, -- In Search of a Sponsor "Clockwork Citizen","Complete the \"In Search of a Sponsor\" quest.",
+[2059] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:The_Strangeness_of_Seht"}, -- The Strangeness of Seht "Smoke and Mirrors","Complete the \"The Strangeness of Seht\" quest.",
+[2060] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:Deepening_Shadows"}, -- Deepening Shadows "Middle-Man", "Complete the \"Deepening Shadows\" quest.",
+[2061] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:Lost_in_the_Gloam"}, -- Lost in the Gloam "Birds of a Feather","Complete the \"Lost in the Gloam\" quest.",
+[2062] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:Unto_the_Dark"}, -- Unto the Dark "Shadow Boxing", "Complete the \"Unto the Dark\" quest.",
+[2063] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:Where_Shadows_Lie"}, --Where Shadows Lie The Real Sotha Sil" "Complete the \"Where Shadows Lie\" quest.",
+[2064] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:The_Light_of_Knowledge"}, -- The Light of Knowledge "The Burden of Knowledge", "Complete the \"The Light of Knowledge\" quest.",
+
+--Summerset
+[2203] = {Location=23, ["link1"] = "http://en.uesp.net/wiki/Online:Buried_Memories"}, -- Buried Memories "Mind Games", "Complete the \"Buried Memories\" quest.",
+[2206] = {Location=23, ["link1"] = "http://en.uesp.net/wiki/Online:Lost_in_Translation"}, -- Lost in Translation "Unreliable Narrator", "Complete the \"Lost in Translation\" quest.",
+[2208] = {Location=23, ["link1"] = "http://en.uesp.net/wiki/Online:The_Crystal_Tower"}, -- The Crystal Tower What Must Be Done", "Complete the \"The Crystal Tower\" quest.",
+--[[
+
+
+--]]
+}
diff --git a/data/WB2.lua b/data/WB2.lua
new file mode 100644
index 0000000..b1dc0d3
--- /dev/null
+++ b/data/WB2.lua
@@ -0,0 +1,199 @@
+--[[ Taken from Locations2 (en) for reference
+--EP
+{ name="Stonefalls",Grp="Fungal Grotto", Pub="Crow's Wood"}, --1
+{ name="Deshaan", Grp="Darkshade Caverns", Pub="Forgotten Crypts"}, --2
+{ name="Shadowfen", Grp="Arx Corinum", Pub="Sanguine's Demesne"}, --3
+{ name="Eastmarch", Grp="Direfrost Keep", Pub="Hall of the Dead"}, --4
+{ name="The Rift", Grp="Blessed Crucible", Pub="Lion's Den"}, --5
+--DC
+{ name="Glenumbra", Grp="Spindleclutch", Pub="Bad Man's Hallows"}, --6
+{ name="Stormhaven", Grp="Wayrest Sewers", Pub="Bonesnap Ruins"}, --7
+{ name="Rivenspire", Grp="Crypt of Hearts", Pub="Obsidian Scar"}, --8
+{ name="Alik'r Desert", Grp="Volenfell", Pub="Lost City"}, --9
+{ name="Bangkorai", Grp="Blackheart Haven", Pub="Razaks Wheel"}, --10
+--AD
+{ name="Auridon", Grp="Banished Cells", Pub="Toothmall Gully"}, --11
+{ name="Grahtwood", Grp="Elden Hollow", Pub="Root Sunder Ruins"}, --12
+{ name="Greenshade", Grp="City of Ash", Pub="Rulanyil's Fall"}, --13
+{ name="Malabal-Tor", Grp="Tempest Island", Pub="Crimson Cove"}, --14
+{ name="Reaper's March", Grp="Selene's Web", Pub="The Vile Manse"}, --15
+--Coldharbour
+{ name="Coldharbour", Grp="Vaults of Madness", Pub="Village of the Lost"}, --16
+{ name="Dark Brotherhood"}, --17
+{ name="Thieves Guild"}, --18
+{ name="Imperial City"}, --19
+{ name="VVardenfell"}, --20
+
+{ name="Orsinium"},--21
+{ name="Clockwork City"}, --22
+{ name="Summerset"}, --23
+
+}
+--]]
+
+
+
+
+WB_dat = { --World Boss Achievements
+--]These index Locations2 (en) and Locations2key
+-- StoneFalls
+[197] = {Location=1}, --Shipwreck Strand
+[199] = {Location=1}, --Shivering Shrine
+[196] = {Location=1}, --Cave of Memories
+[200] = {Location=1}, --Brahma's Grove
+[198] = {Location=1}, --Matron's Clutch
+[195] = {Location=1}, --Strifeswarm Hive
+--Deshaan
+[277] = {Location=2}, --Sharpfang
+[276] = {Location=2}, --Grove of the Abomination
+[275] = {Location=2}, --Short-Tusk
+[278] = {Location=2}, --Mabrigash Burial Circle
+[280] = {Location=2}, --Caravan Crest
+[279] = {Location=2}, --Druitularg's Ritual Altar
+
+--Shadowfen
+[189] = {Location=3}, --Nen Ria
+[187] = {Location=3}, --Haynekhtnamet
+[192] = {Location=3}, --Slaver Camp
+[191] = {Location=3}, --Bitterroot Cave
+[188] = {Location=3}, --Xal Thak
+[190] = {Location=3}, --Captain Bones
+--Eastmarch
+[210] = {Location=4}, --RageClaw
+[211] = {Location=4}, --Dragon Mound
+[212] = {Location=4}, --Ratmaster
+[213] = {Location=4}, --Dragon's Hallow
+[257] = {Location=4}, --Swiftblade
+[214] = {Location=4}, --Ammabani's Pride
+--The Rift
+[345] = {Location=5}, --Hunter Camp
+[346] = {Location=5}, --Troll Cave
+[347] = {Location=5}, --Frozen Ruins
+[348] = {Location=5}, --Abandoned Camp
+[350] = {Location=5}, --Wisplight Glen
+[349] = {Location=5}, --Giant Camp
+--Glenumbra
+[387] = {Location=6}, --Balefire Island
+[382] = {Location=6}, --Seaview Point
+[385] = {Location=6}, --North Shore Point
+[384] = {Location=6}, --Wolf's Camp
+[383] = {Location=6}, --Western Overlook
+[386] = {Location=6}, --Trapjaw's Cove
+--Stormhaven
+[400] = {Location=7}, --Spider Nest
+[399] = {Location=7}, --Mudcrab Beach
+[401] = {Location=7}, --Dreugh Waters
+[402] = {Location=7}, --Abandoned Farm
+[403] = {Location=7}, --Scrag's Larder
+[404] = {Location=7}, --Ancient Altar
+--Rivenspire
+[158] = {Location=8}, --Aesar's Web
+[159] = {Location=8}, --Valeguard Tower
+[161] = {Location=8}, --Magdelena's Haunt
+[160] = {Location=8}, --Old Kalgon's Keep
+[162] = {Location=8}, --East-Rock Landing
+[163] = {Location=8}, --Siren's Cove
+--Alik'r Desert
+[500] = {Location=9}, --Lesser Circle
+[495] = {Location=9}, --Lost Caravan
+[498] = {Location=9}, --Forsaken Hearts Cave
+[496] = {Location=9}, --Giant Camp
+[497] = {Location=9}, --Hag Camp
+[499] = {Location=9}, --King's Rest
+--Bangkorai
+[151] = {Location=10}, --Telesubi Ruins
+[150] = {Location=10}, --Nilata Falls
+[152] = {Location=10}, --Summoner's Camp
+[149] = {Location=10}, --Arlimahera's Sanctum
+[153] = {Location=10}, --Lakewatch Tower
+[148] = {Location=10}, --Blighted Isle
+--Auridon
+[352] = {Location=11}, --Seaside Scarp
+[351] = {Location=11}, --Soulfire Plateau
+[353] = {Location=11}, --Wreck of the Raptor
+[354] = {Location=11}, --Heretic's Summons
+[355] = {Location=11}, --Nestmother's Den
+[356] = {Location=11}, --Heritance Proving Ground
+--Grahtwood
+[700] = {Location=12}, --Thugrub's Cave
+[699] = {Location=12}, --Poacher Camp
+[701] = {Location=12}, --Valanir's Rest
+[698] = {Location=12}, --Lady Solace's Fen
+[696] = {Location=12}, --Hircine's Henge
+[697] = {Location=12}, --Nindaeril's Perch
+--Greenshade
+[562] = {Location=13}, --Maormer Camp
+[561] = {Location=13}, --Thodundor's View
+[563] = {Location=13}, --Rootwater Spring
+[564] = {Location=13}, --Reconnaissance Camp
+[560] = {Location=13}, --Gathongor's Mire
+[565] = {Location=13}, --Pelda Tarn
+--Malabal-Tor
+[258] = {Location=14}, --Bitterpoint Strand
+[259] = {Location=14}, --Dugan
+[261] = {Location=14}, --Jagged Grotto
+[260] = {Location=14}, --Bone Grappler
+[263] = {Location=14}, --River Edge
+[262] = {Location=14}, --Windshriek Strand
+--Reaper's March
+[427] = {Location=15}, --Waterdancer Falls
+[425] = {Location=15}, --Deathsong Cleft
+[428] = {Location=15}, --Reaper's Henge
+[429] = {Location=15}, --Old S'ren-ja Docks
+[426] = {Location=15}, --Big Ozur's Valley
+[430] = {Location=15}, --Ushmal's Rest
+--Coldharbour
+[440] = {Location=16}, --Duriatundur's Killing Field
+[439] = {Location=16}, --Aba-Darre
+[443] = {Location=16}, --Risen Court
+[444] = {Location=16}, --Cynhamoth's Grove
+[442] = {Location=16}, --Daedroth Larder
+[441] = {Location=16}, --Zemarek's Hollow
+
+--Dark Brotherhood Gold Coast
+[1419] = {Location=17}, -- "Defeat Limenauruus" "Defeat Limenauruus the possessed minotaur and the shadow spirits at Tribune's Folly.",
+[1420] = {Location=17}, -- "Conquer the Kvatch Arena" "Enter the Kvatch Arena and defeat all challengers.",
+
+-- Thieves Guild. Hews Bane
+[1352] = {Location=18}, -- "Deepest Shallows" "Kill Syvarra of the Deep at Ko Estaran.",
+[1353] = {Location=18}, -- "Cutting the Keel" "Kill Captain Virindi Slave-Taker at Thrall Cove.",
+
+--No Wb in Imperial City 19
+
+
+
+--Vvardenfell
+[1847] = {Location=20}, --Loop Eradicator ,"Save Dubdil Alar from the consequences of his temporal experiments.",
+[1802] = {Location=20}, --Songbird Silencer
+[1803] = {Location=20}, --Salothan's Cursebreaker
+[1805] = {Location=20}, --Breaker of the Unbroken, Defeat the nix-ox Nilthog the Unbroken at Nilthog's Hollow.
+[1807] = {Location=20}, --Cheater Defeater, Defeat the Skaafin, Mehz the Cozener, at Dubdil Alar Tower and seal the rift to Oblivion.
+[1804] = {Location=20}, -- "Consort Killer""Defeat the Queen's Consort at Missir-Dadalit Egg Mine.",
+
+
+
+--Orsinium
+[1286] = {Location=21}, -- Kill Zandadunoz the Reborn, Defeat Zandadunoz the Reborn at the Unfinished Dolmen.
+[1285] = {Location=21}, -- Kill Old Snagara, Kill Old Snagara the echatere in the Poacher's Encampment.
+[1290] = {Location=21}, -- Kill Nyzchaleft, Kill Nyzchaleft the Dwarven Centurion at Nyzchaleft Falls.
+[1289] = {Location=21}, -- Kill Mad Urkazbur the Ogre, Kill Mad Urkazbur at the Mad-Ogre's Altar.
+[1287] = {Location=21}, -- Kill King-Chief Edu, Kill the Riekr regent King-Chief Edu at the King-Chief's Throne.
+[1288] = {Location=21}, -- Kill Corintthac the Abomination, Kill the Winterborn Briarheart Warrior, Corintthac the Abomination, at the Accursed Nursery.
+
+
+--Clock
+[2046] = {Location=22}, -- "Murderer of Crows" "Defeat Ithoxis, Abathoth, and Ssatinot in Exarchs' Egress.",
+[2028] = {Location=22}, -- "Imperfection" "Defeat The Imperfect in the Sanctuary of Verification.",
+
+
+--Summerset
+[2036] = {Location=23}, -- "Reef Raider" "Defeat Queen of the Reef at The Queen's Hatchery.",
+[2037] = {Location=23}, -- "Bucking the Matriarchy" "Defeat Caanerin at Indrik Frolic.",
+[2038] = {Location=23}, -- "Sea Sload Slugger""Defeat the Sea Sload B'Korgen at Welenkin Cove.",
+[2039] = {Location=23}, -- "Talon Taker" "Defeat Haeliata and Nagravia at Gryphon Run.",
+[2040] = {Location=23}, -- "Amphibian Agitator""Defeat Graveld at Graveld's Hideaway.",
+[2041] = {Location=23}, -- "Keel Hauler" "Defeat Keelsplitter at Keelsplitter's Nest.",
+[2212] = {Location=23}, -- "Asp Awareness" "Defeat Keelsplitter without stepping on any of the snakes.",
+
+
+}
diff --git a/data/en/en.lua b/data/en/en.lua
index 8084aa4..1b53d1a 100644
--- a/data/en/en.lua
+++ b/data/en/en.lua
@@ -298,33 +298,33 @@ Locations = { -- Used for WB and SQ
Locations2 = { -- Used for WB and SQ,
--EP
-{ name="Stonefalls",Grp="Fungal Grotto", Pub="Crow's Wood"},
-{ name="Deshaan", Grp="Darkshade Caverns", Pub="Forgotten Crypts"},
-{ name="Shadowfen", Grp="Arx Corinum", Pub="Sanguine's Demesne"},
-{ name="Eastmarch", Grp="Direfrost Keep", Pub="Hall of the Dead"},
-{ name="The Rift", Grp="Blessed Crucible", Pub="Lion's Den"},
+{ name="Stonefalls",Grp="Fungal Grotto", Pub="Crow's Wood"}, --1
+{ name="Deshaan", Grp="Darkshade Caverns", Pub="Forgotten Crypts"}, --2
+{ name="Shadowfen", Grp="Arx Corinum", Pub="Sanguine's Demesne"}, --3
+{ name="Eastmarch", Grp="Direfrost Keep", Pub="Hall of the Dead"}, --4
+{ name="The Rift", Grp="Blessed Crucible", Pub="Lion's Den"}, --5
--DC
-{ kname="Glenumbra", Grp="Spindleclutch", Pub="Bad Man's Hallows"},
-{ name="Stormhaven", Grp="Wayrest Sewers", Pub="Bonesnap Ruins"},
-{ name="Rivenspire", Grp="Crypt of Hearts", Pub="Obsidian Scar"},
-{ name="Alik'r Desert", Grp="Volenfell", Pub="Lost City"},
-{ name="Bangkorai", Grp="Blackheart Haven", Pub="Razaks Wheel"},
+{ name="Glenumbra", Grp="Spindleclutch", Pub="Bad Man's Hallows"}, --6
+{ name="Stormhaven", Grp="Wayrest Sewers", Pub="Bonesnap Ruins"}, --7
+{ name="Rivenspire", Grp="Crypt of Hearts", Pub="Obsidian Scar"}, --8
+{ name="Alik'r Desert", Grp="Volenfell", Pub="Lost City"}, --9
+{ name="Bangkorai", Grp="Blackheart Haven", Pub="Razaks Wheel"}, --10
--AD
-{ name="Auridon", Grp="Banished Cells", Pub="Toothmall Gully"},
-{ name="Grahtwood", Grp="Elden Hollow", Pub="Root Sunder Ruins"},
-{ name="Greenshade", Grp="City of Ash", Pub="Rulanyil's Fall"},
-{ name="Malabal-Tor", Grp="Tempest Island", Pub="Crimson Cove"},
-{ name="Reaper's March", Grp="Selene's Web", Pub="The Vile Manse"},
+{ name="Auridon", Grp="Banished Cells", Pub="Toothmall Gully"}, --11
+{ name="Grahtwood", Grp="Elden Hollow", Pub="Root Sunder Ruins"}, --12
+{ name="Greenshade", Grp="City of Ash", Pub="Rulanyil's Fall"}, --13
+{ name="Malabal-Tor", Grp="Tempest Island", Pub="Crimson Cove"}, --14
+{ name="Reaper's March", Grp="Selene's Web", Pub="The Vile Manse"}, --15
--Coldharbour
-{ name="Coldharbour", Grp="Vaults of Madness", Pub="Village of the Lost"},
-{ name="Dark Brotherhood"},
-{ name="Thieves Guild"},
-{ name="Imperial City"},
-{ name="VVardenfell"},
+{ name="Coldharbour", Grp="Vaults of Madness", Pub="Village of the Lost"}, --16
+{ name="Dark Brotherhood"}, --17
+{ name="Thieves Guild"}, --18
+{ name="Imperial City"}, --19
+{ name="VVardenfell"}, --20
-{ name="Orsinium"},
-{ name="Clockwork City"},
-{ name="Summerset"},
+{ name="Orsinium"},--21
+{ name="Clockwork City"}, --22
+{ name="Summerset"}, --23
}
diff --git a/data/keys.lua b/data/keys.lua
index 527f8ac..112be8c 100644
--- a/data/keys.lua
+++ b/data/keys.lua
@@ -184,32 +184,32 @@ Locations2Key = { -- Used for WB and SQ,
--Area is the heading L.Area_Names[Area]
--EP
-{ key="11",L=1,C=1,Area=1}, -- name="Stonefalls"},
-{ key="21",L=2,C=1,Area=1}, -- name="Deshaan"},
-{ key="31",L=3,C=1,Area=1}, -- name="Shadowfen"},
-{ key="41",L=4,C=1,Area=1}, -- name="Eastmarch"},
-{ key="51",L=5,C=1,Area=1}, -- name="The Rift"},
+{ key="1:1",L=1,C=1,Area=1}, -- name="Stonefalls"},
+{ key="2:1",L=2,C=1,Area=1}, -- name="Deshaan"},
+{ key="3:1",L=3,C=1,Area=1}, -- name="Shadowfen"},
+{ key="4:1",L=4,C=1,Area=1}, -- name="Eastmarch"},
+{ key="5:1",L=5,C=1,Area=1}, -- name="The Rift"}, 5
--DC
-{ key="12",L=1,C=2,Area=2}, -- name="Glenumbra"},
-{ key="22",L=2,C=2,Area=2}, -- name="Stormhaven"},
-{ key="32",L=3,C=2,Area=2}, -- name="Rivenspire"},
-{ key="42",L=4,C=2,Area=2}, -- name="Alik'r Desert"},
-{ key="52",L=5,C=2,Area=2}, -- name="Bangkorai"},
+{ key="1:2",L=1,C=2,Area=2}, -- name="Glenumbra"},
+{ key="2:2",L=2,C=2,Area=2}, -- name="Stormhaven"},
+{ key="3:2",L=3,C=2,Area=2}, -- name="Rivenspire"},
+{ key="4:2",L=4,C=2,Area=2}, -- name="Alik'r Desert"},
+{ key="5:2",L=5,C=2,Area=2}, -- name="Bangkorai"}, 10
--AD
-{ key="13",L=1,C=3,Area=3}, -- name="Auridon"},
-{ key="23",L=2,C=3,Area=3}, -- name="Grahtwood"},
-{ key="33",L=3,C=3,Area=3},-- -- name="Greenshade"},
-{ key="43",L=4,C=3,Area=3},-- -- name="Malabal-Tor"},
-{ key="53",L=5,C=3,Area=3},-- -- name="Reaper's March"},
+{ key="1:3",L=1,C=3,Area=3}, -- name="Auridon"},
+{ key="2:3",L=2,C=3,Area=3}, -- name="Grahtwood"},
+{ key="3:3",L=3,C=3,Area=3},-- -- name="Greenshade"},
+{ key="4:3",L=4,C=3,Area=3},-- -- name="Malabal-Tor"},
+{ key="5:3",L=5,C=3,Area=3},-- -- name="Reaper's March"}, 15
--Coldharbour
-{ key="14",L=1,C=4,Area=4}, -- name="Reaper's March"},
-{ key="24",L=2,C=4,Area=4}, -- name="Dark Brotherhood"},
-{ key="34",L=3,C=4,Area=4}, -- name="Thieves Guild"},
-{ key="44",L=4,C=4,Area=4}, -- name="Imperial City"},
-{ key="54",L=5,C=4,Area=4}, -- name="VVardenfell"},
+{ key="1:4",L=1,C=4,Area=4}, -- name="Coldharbour}, --16
+{ key="2:4",L=2,C=4,Area=4}, -- name="Dark Brotherhood"}, 17
+{ key="3:4",L=3,C=4,Area=4}, -- name="Thieves Guild"}, 18
+{ key="4:4",L=4,C=4,Area=4}, -- name="Imperial City"}, 19
+{ key="5:4",L=5,C=4,Area=4}, -- name="VVardenfell"}, 20
-{ key="15",L=1,C=5,Area=4}, -- name="Orsinium"},
-{ key="25",L=2,C=5,Area=4}, -- name="Clockwork City"},
-{ key="35",L=3,C=5,Area=4}, -- name="Summerset"},
+{ key="1:5",L=1,C=5,Area=4}, -- name="Orsinium"}, 21
+{ key="2:5",L=2,C=5,Area=4}, -- name="Clockwork City"}, 22
+{ key="3:5",L=3,C=5,Area=4}, -- name="Summerset"}, 23
}
diff --git a/data/utility.lua b/data/utility.lua
index 0d170a6..4318619 100644
--- a/data/utility.lua
+++ b/data/utility.lua
@@ -1,3 +1,4 @@
+
dump = function (o)
if type(o) == 'table' then
local s = '{ '
@@ -224,11 +225,6 @@ end
--Run through Location data to get the info needed to dimension the WB and SQ boxes
Location_Box = function (name)
- if type(name) ~= "string" then
- print ("Location_Box name is not string.")
- return
- end
-
local cols = {}
local lines = {}
@@ -263,11 +259,57 @@ Location_Box = function (name)
return_t:setcell(0,0, L.Zone)
for line,_ in ipairs(lines) do
return_t:setcell(line,0, tostring(line))
- iup.SetAttribute(return_t, "FGCOLOR*:".. tostring(line), FG_Colour_Not_Complete)
- iup.SetAttribute(return_t, "BGCOLOR*:".. tostring(line), BG_Colour_Not_Complete)
+ -- iup.SetAttribute(return_t, "FGCOLOR*:".. tostring(line), FG_Colour_Not_Complete)
+ -- iup.SetAttribute(return_t, "BGCOLOR*:".. tostring(line), BG_Colour_Not_Complete)
end
+ --optionally set Contents
+ if (type(name) ~= "string") then return return_t end
+-- get
return return_t
end
+
+-- take WB_Dat or SQ_Dat, which are indexed on id and return array
+-- lines_t = table[key] of {done,of ids{id=false, id=false}} then we can scan and set id to true if found
+Reverse_Dat = function (dat_t,ids_t)
+
+ local lines_t = {} -- accumulate as LC Key
+ for id, location_t in pairs (dat_t) do --location is index into Locations2key and Locations2
+
+ local key = Locations2Key[location_t.Location].key
+ local gotid = (type(ids_t[id]) == "table") -- do we have this achievement? nil is no. table is yes
+ if lines_t[key] == nil then -- add new line
+ lines_t[key] = {}
+ lines_t[key].L = Locations2Key[location_t.Location].L
+ lines_t[key].C = Locations2Key[location_t.Location].C
+ lines_t[key].ids={}
+ lines_t[key].ids[id] = gotid
+ lines_t[key].of =1
+ if gotid then lines_t[key].done = 1 else lines_t[key].done = 0 end
+ else
+ lines_t[key].ids[id] = gotid -- add id to existing line
+ lines_t[key].of = lines_t[key].of + 1
+ if gotid then lines_t[key].done = lines_t[key].done + 1 end
+ end
+ end
+ return lines_t
+end
+
+Populate_Dat = function(matrix, dat_t,ids_t)
+ local Rev = Reverse_Dat(dat_t,ids_t)
+ for i,key_t in ipairs (Locations2Key) do -- { key="1:1",L=1,C=1,Area=1}, -- name="Stonefalls"}
+ local name = Locations2[i].name
+ local line =Rev[key_t.key]
+ if line == nil then -- this is ok. Location without a WB or SQ
+ else
+ matrix:setcell(line.L,line.C,name .. " (" .. line.done .. "/" .. line.of .. ")")
+ if line.done == line.of then
+ iup.SetAttribute(matrix, "FGCOLOR" .. key_t.key , FG_Colour_Complete) -- Yup
+ iup.SetAttribute(matrix, "BGCOLOR" .. key_t.key , BG_Colour_Complete)
+ end
+ end
+ end
+end
+