diff --git a/ElvUI_SLE/core/modules.lua b/ElvUI_SLE/core/modules.lua index 55a2629..3bac6cd 100644 --- a/ElvUI_SLE/core/modules.lua +++ b/ElvUI_SLE/core/modules.lua @@ -24,6 +24,7 @@ local modules = { ['SLE_Media'] = {'AceHook-3.0'}, ['SLE_InstDif'] = {'AceHook-3.0', 'AceEvent-3.0'}, ['SLE_ScreenSaver'] = { 'AceHook-3.0', 'AceEvent-3.0' }, + ['SLE_Garrison'] = { 'AceEvent-3.0' }, ['SLE'] = {'AceHook-3.0', 'AceEvent-3.0'}, } diff --git a/ElvUI_SLE/defaults/profile.lua b/ElvUI_SLE/defaults/profile.lua index f346a3a..63ba57e 100644 --- a/ElvUI_SLE/defaults/profile.lua +++ b/ElvUI_SLE/defaults/profile.lua @@ -453,6 +453,13 @@ P['sle'] = { ['bags'] = { ['lootflash'] = true, }, + + ['garrison'] = { + ['autoOrder'] = false, + ['autoWar'] = false, + ['autoTrade'] = false, + ['showOrderButton'] = true, + }, } P.chat.editboxhistory = 5 diff --git a/ElvUI_SLE/locales/russian.lua b/ElvUI_SLE/locales/russian.lua index a642529..86013dd 100644 --- a/ElvUI_SLE/locales/russian.lua +++ b/ElvUI_SLE/locales/russian.lua @@ -485,6 +485,17 @@ L["Position power text on this bar of chosen frame"] = "Позициониров L["Enhanced Vehicle Bar"] = "Улучшенный контроль машин" L["A different look/feel vehicle bar based on work by Azilroka"] = "Использовать улучшенную панель управления средствами передвижения, основанную на коде Azilroka" +--Garrison-- +L["Auto Work Orders"] = "Автоматические заказы" +L["Automatically queue maximum number of work orders available when visitin respected NPC."] = "Автоматически делать максимально возможное количество заказов при открытии соответствующего диалога." +L["Auto Work Orders for Warmill"] = "Авто. заказы на фабрике" +L["Automatically queue maximum number of work orders available for Warmill/Dwarven Bunker."] = "Автоматически делать максимальное количество заказов для военной фабрики/дворфийского бункера." +L["Auto Work Orders for Trading Post"] = "Авто. заказы в торговой лавке" +L["Automatically queue maximum number of work orders available for Trading Post."] = "Автоматически делать максимальное количество заказов для торговой лавки." +L["Show Max Order Button"] = "Кнопка максимума" +L["Show the button to queue maximum number of work orders in building's UI."] = "Отображать кнопку для выполнения максимума заказов в интерфейсе зданий." +L["Max"] = "Макс." + --Credits-- L["Submodules and Coding:"] = "Субмодули и помощь с кодом:" L["Other Support:"] = "Прочая поддержка:" diff --git a/ElvUI_SLE/modules/garrison.lua b/ElvUI_SLE/modules/garrison.lua new file mode 100644 index 0000000..8ade0dd --- /dev/null +++ b/ElvUI_SLE/modules/garrison.lua @@ -0,0 +1,135 @@ +local E, L, V, P, G = unpack(ElvUI); +local S = E:GetModule("Skins") +local G = E:GetModule("SLE_Garrison") + +local n = 0 +local buildID = { + [8] = "War", + [9] = "War", + [10] = "War", + [111] = "Trade", + [144] = "Trade", + [145] = "Trade", +} + +function G:WorkOrderButtonCreate() + local button = CreateFrame("Button", 'SLE_MaxWorkOrderButton', GarrisonCapacitiveDisplayFrame, "OptionsButtonTemplate"); + button:Point("RIGHT", GarrisonCapacitiveDisplayFrame.StartWorkOrderButton, "LEFT", -4, 0); + button:Width(50); + button:Height(22); + S:HandleButton(button) + + button.text = button:CreateFontString(nil, "OVERLAY", button) + button.text:SetPoint("CENTER", button, "CENTER", -2, 0) + button.text:FontTemplate() + + button:SetScript('OnClick', G.AutoOrderScript) +end + +function G:GetNumOrders(maxShipments) + if not maxShipments then return end + local number = (maxShipments or 0) - (C_Garrison.GetNumPendingShipments() or 0) + for i = 1, C_Garrison.GetNumShipmentReagents() do + local name, texture, quality, needed, quantity, itemID = C_Garrison.GetShipmentReagentInfo(i); + if (not name) then + break; + end + local canDo = quantity/needed + if canDo < number then number = floor(canDo) end + end + + return number +end + +function G:AutoOrderScript() + local self = SLE_AutoOrderFrame + + if n <= 0 then self:SetScript("OnUpdate", nil); return end + self.elapsed = 0 + self:SetScript("OnUpdate", function (self, elapsed) + self.elapsed = self.elapsed + elapsed + if self.elapsed > 0.2 then + self.elapsed = 0; + if n > 0 then + C_Garrison.RequestShipmentCreation() + else + self:SetScript("OnUpdate", nil); + self:Disable(); + end + end + end) +end + +function G:SHIPMENT_CRAFTER_OPENED(containerID) + if E.db.sle.garrison.showOrderButton then + if SLE_MaxWorkOrderButton then SLE_MaxWorkOrderButton:Show() end + else + if SLE_MaxWorkOrderButton then SLE_MaxWorkOrderButton:Hide() end + end + SLE_AutoOrderFrame:SetScript("OnUpdate", nil); +end + +function G:SHIPMENT_CRAFTER_CLOSED() + SLE_AutoOrderFrame:SetScript("OnUpdate", nil); +end + +function G:SHIPMENT_CRAFTER_INFO(event, success, _, maxShipments, plotID) + if not GarrisonCapacitiveDisplayFrame then return end + n = G:GetNumOrders(maxShipments) + local button = SLE_MaxWorkOrderButton + + local enabled = GarrisonCapacitiveDisplayFrame.StartWorkOrderButton:IsEnabled() + if button then button:SetEnabled(enabled) end + if not enabled then + SLE_AutoOrderFrame:SetScript ("OnUpdate", nil) + if button then + button.text:SetText(L["Max"]) + button.text:SetTextColor(0.6, 0.6, 0.6) + end + return + else + if button then + button.text:SetText("x"..n) + button.text:SetTextColor(1,0.9,0) + end + end + + if not E.db.sle.garrison.autoOrder then return end + if not enabled then return end + local ID = C_Garrison.GetOwnedBuildingInfo(plotID) + local nope = buildID[ID] + if nope then + if E.db.sle.garrison['auto'..nope] then + G:AutoOrderScript() + end + else + G:AutoOrderScript() + end +end + +function G:ADDON_LOADED(event, name) + if name == 'Blizzard_GarrisonUI' then + G:WorkOrderButtonCreate() + G:UnregisterEvent('ADDON_LOADED') + end +end + +function G:ShowButton() + if E.db.sle.garrison.showOrderButton then + if IsAddOnLoaded('Blizzard_GarrisonUI') and not SLE_MaxWorkOrderButton then + G:WorkOrderButtonCreate() + else + G:RegisterEvent('ADDON_LOADED') + end + else + G:UnregisterEvent('ADDON_LOADED') + end +end + +function G:Initialize() + local f = CreateFrame("Frame", "SLE_AutoOrderFrame", GarrisonCapacitiveDisplayFrame) + G:ShowButton() + self:RegisterEvent("SHIPMENT_CRAFTER_INFO"); + self:RegisterEvent("SHIPMENT_CRAFTER_OPENED"); + self:RegisterEvent("SHIPMENT_CRAFTER_CLOSED"); +end \ No newline at end of file diff --git a/ElvUI_SLE/modules/load_modules.xml b/ElvUI_SLE/modules/load_modules.xml index fe6f3a3..19cec56 100644 --- a/ElvUI_SLE/modules/load_modules.xml +++ b/ElvUI_SLE/modules/load_modules.xml @@ -3,6 +3,7 @@ <Script file='auras.lua'/> <Script file='autorelease.lua'/> <Script file='backgrounds.lua'/> + <Script file='garrison.lua'/> <Script file='bags.lua'/> <Include file='characterframe\load_characterframe.xml'/> <Script file='datatexts.lua'/> diff --git a/ElvUI_SLE/options/garrison_c.lua b/ElvUI_SLE/options/garrison_c.lua new file mode 100644 index 0000000..43c6ce4 --- /dev/null +++ b/ElvUI_SLE/options/garrison_c.lua @@ -0,0 +1,57 @@ +local E, L, V, P, G = unpack(ElvUI); + +local function configTable() + E.Options.args.sle.args.options.args.general.args.garrison = { + type = "group", + name = GARRISON_LOCATION_TOOLTIP, + order = 53, + args = { + header = { + order = 1, + type = "header", + name = GARRISON_LOCATION_TOOLTIP, + }, + -- intro = { + -- order = 2, + -- type = "description", + -- name = L["UB_DESC"], + -- }, + autoOrder = { + order = 3, + type = "toggle", + name = L["Auto Work Orders"], + desc = L["Automatically queue maximum number of work orders available when visitin respected NPC."], + get = function(info) return E.db.sle.garrison.autoOrder end, + set = function(info, value) E.db.sle.garrison.autoOrder = value end + }, + autoWar = { + order = 4, + type = "toggle", + name = L["Auto Work Orders for Warmill"], + desc = L["Automatically queue maximum number of work orders available for Warmill/Dwarven Bunker."], + disabled = function() return not E.db.sle.garrison.autoOrder end, + get = function(info) return E.db.sle.garrison.autoWar end, + set = function(info, value) E.db.sle.garrison.autoWar = value end + }, + autoTrade = { + order = 5, + type = "toggle", + name = L["Auto Work Orders for Trading Post"], + desc = L["Automatically queue maximum number of work orders available for Trading Post."], + disabled = function() return not E.db.sle.garrison.autoOrder end, + get = function(info) return E.db.sle.garrison.autoTrade end, + set = function(info, value) E.db.sle.garrison.autoTrade = value end + }, + showButton = { + order = 6, + type = "toggle", + name = L["Show Max Order Button"], + desc = L["Show the button to queue maximum number of work orders in building's UI."], + get = function(info) return E.db.sle.garrison.showOrderButton end, + set = function(info, value) E.db.sle.garrison.showOrderButton = value; E:GetModule('SLE_Garrison'):ShowButton() end + }, + }, + } +end + +table.insert(E.SLEConfigs, configTable) \ No newline at end of file diff --git a/ElvUI_SLE/options/load_options.xml b/ElvUI_SLE/options/load_options.xml index 3ed4be7..773b6cb 100644 --- a/ElvUI_SLE/options/load_options.xml +++ b/ElvUI_SLE/options/load_options.xml @@ -13,6 +13,7 @@ <Script file='equipmanager_c.lua'/> <Script file='exprepbar_c.lua'/> <Script file='farm_c.lua'/> + <Script file='garrison_c.lua'/> <Script file='imports_c.lua'/> <Script file='loot_c.lua'/> <Script file='minimap_c.lua'/>