Quantcast

Work orders stuff

Darthpred [12-24-14 - 14:34]
Work orders stuff
Filename
ElvUI_SLE/core/modules.lua
ElvUI_SLE/defaults/profile.lua
ElvUI_SLE/locales/russian.lua
ElvUI_SLE/modules/garrison.lua
ElvUI_SLE/modules/load_modules.xml
ElvUI_SLE/options/garrison_c.lua
ElvUI_SLE/options/load_options.xml
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'/>