-- Craft Research Timer (CRT) by @aTo (EU) -- v0.4.11 RT = { name = "ResearchTimer", font = "ZoFontGame", cmdsetup = "/rt", svName = "ResearchTimer", version = "v1", playername = "", font = "ZoFontGame", interval = 20, width = 100, height = 80, UI = {}, SV={}, collect=0 } RT.UI.GRID_TLW = {} RT.UI.GRID_BD = {} RT.UI.GRID_WD = {} RT.UI.GRID_BTN = {} function RT.Collect_Data() RT.Info_Research(CRAFTING_TYPE_BLACKSMITHING, 0) RT.Info_Research(CRAFTING_TYPE_CLOTHIER, 1) RT.Info_Research(CRAFTING_TYPE_WOODWORKING, 2) end function RT.Info_Research(craft_type,id_craft) local Simu_craft = 0 local ResearchLines, ResearchTrait local MaxResearch = GetMaxSimultaneousSmithingResearch(craft_type) local nbtype = GetNumSmithingResearchLines(craft_type) --Nombre de item craftable pour un craft(ex couture: jambe/robe/ect) RT.SV.data.Craft[RT.playername][id_craft] = {} RT.SV.data.Craft[RT.playername][id_craft].doing = {} for ResearchLines = 1, nbtype, 1 do local item_name, item_icon, numTraits, timeRequiredForNextResearchSecs = GetSmithingResearchLineInfo(craft_type, ResearchLines) for ResearchTrait = 1, numTraits, 1 do local duration, timeRemaining = GetSmithingResearchLineTraitTimes(craft_type, ResearchLines, ResearchTrait) if (duration ~= nil and timeRemaining ~= nil) then Simu_craft = Simu_craft + 1 local traitType, trait_description, _ = GetSmithingResearchLineTraitInfo(craft_type,ResearchLines,ResearchTrait) local _, trait_name, trait_icon, _, _, _, _ = GetSmithingTraitItemInfo(traitType+1) RT.SV.data.Craft[RT.playername][id_craft].doing[Simu_craft] = {} RT.SV.data.Craft[RT.playername][id_craft].doing[Simu_craft]["PlayerName"] = RT.playername RT.SV.data.Craft[RT.playername][id_craft].doing[Simu_craft]["Alert"] = true RT.SV.data.Craft[RT.playername][id_craft].doing[Simu_craft]["EndTimeStamp"] = GetTimeStamp() + timeRemaining RT.SV.data.Craft[RT.playername][id_craft].doing[Simu_craft]["Item_name"] = string.sub(item_name, 1, 18) RT.SV.data.Craft[RT.playername][id_craft].doing[Simu_craft]["Item_icon"] = item_icon RT.SV.data.Craft[RT.playername][id_craft].doing[Simu_craft]["Trait_name"] = trait_name RT.SV.data.Craft[RT.playername][id_craft].doing[Simu_craft]["Trait_icon"] = trait_icon RT.SV.data.Craft[RT.playername][id_craft].doing[Simu_craft]["Trait_description"] = trait_description end end end RT.SV.data.Craft[RT.playername][id_craft].MaxResearch = MaxResearch RT.SV.data.Craft[RT.playername][id_craft].Simu_craft = Simu_craft end function RT.Char_sort() -- Produce a sorted list for display RT.CharsInOrder = {} for k, _ in pairs(RT.SV.data.Craft) do table.insert(RT.CharsInOrder,k) end if RT.SortFunction ~= nil then table.sort(RT.CharsInOrder, RT.SortFunction) end end -- for each character, find the research completing soonest and set RT.SV.data.Craft[Char].shortest function RT.Set_Shortest() local char,craft,shortest, remaining,v for char,_ in pairs (RT.SV.data.Craft) do shortest = 9999999999 for craft =0,2, 1 do for _,v in pairs (RT.SV.data.Craft[char][craft].doing) do remaining = v["EndTimeStamp"] - GetTimeStamp() if shortest > remaining then shortest = remaining end end end RT.SV.data.Craft[char].shortest = shortest end end function RT.Research_started() -- Triggered by Event -- erase all data for this character RT.SV.data.Craft[RT.playername] = {} -- Collect new data RT.Collect_Data() if (RT.UI.GRID_WD[RT.playername] == nil) then RT.GRID_Create_Character(RT.playername) end RT.Set_Shortest() RT.UI.GRID_WD[RT.playername].label:SetText(string.upper(RT.playername)) -- remove highlighting end