Skip to content

Commit

Permalink
PAB: AvA items (#80)
Browse files Browse the repository at this point in the history
* PAB: DRAFT menu implementation for AvA Items
- added some ToDos to be checked
- added SavedVarsPatcher code to set up initial values
- added new init function to get player name and alliance

* remove no longer needed strings

* rename key to better show its purpose

* update EN/DE texts (FR missing)

* shift function into PABankingCommon
re-use existing functions for AvA item transfer

* PAB: added FR translations from Takit
  • Loading branch information
klingo committed Apr 27, 2019
1 parent 02232bc commit 6d89684
Show file tree
Hide file tree
Showing 15 changed files with 965 additions and 129 deletions.
23 changes: 19 additions & 4 deletions PersonalAssistant/PersonalAssistant.lua
Expand Up @@ -23,7 +23,7 @@ PA.isBankClosed = true
local showWelcomeMessage = true

-- init default values
local function initDefaults()
local function _initDefaults()
-- initialize the multi-profile structure
PA.General_Defaults = {}
-- -----------------------------------------------------
Expand All @@ -43,6 +43,21 @@ local function initDefaults()
}
end

-- init player name and player alliance
local function _initPlayerNameAndAlliance()
local playerName = GetUnitName("player")
local numCharacters = GetNumCharacters()
for index = 1, numCharacters do
local name, _, _, _, _, alliance, _, _ = GetCharacterInfo(index)
local nameFmt = zo_strformat(SI_UNIT_NAME, name)
if playerName == nameFmt then
PA.playerName = nameFmt
PA.alliance = alliance
break
end
end
end


-- init saved variables and register Addon
local function initAddon(_, addOnName)
Expand All @@ -53,15 +68,15 @@ local function initAddon(_, addOnName)
-- addon load started - unregister event
PAEM.UnregisterForEvent(PA.AddonName, EVENT_ADD_ON_LOADED)

-- initialize the default values
initDefaults()
-- initialize the default and player/alliance values
_initDefaults()
_initPlayerNameAndAlliance()

-- gets values from SavedVars, or initialises with default values
local PASavedVars = PA.SavedVars
PASavedVars.General = ZO_SavedVars:NewAccountWide("PersonalAssistant_SavedVariables", PACAddon.SAVED_VARS_VERSION.MAJOR.GENERAL, nil, PA.General_Defaults)
PASavedVars.Profile = ZO_SavedVars:NewCharacterNameSettings("PersonalAssistant_SavedVariables", PACAddon.SAVED_VARS_VERSION.MAJOR.PROFILE, nil, PA.Profile_Defaults)


-- create the options with LAM-2
local PAMainMenu = PA.MainMenu
PAMainMenu.createOptions()
Expand Down
387 changes: 375 additions & 12 deletions PersonalAssistant/PersonalAssistantBanking/Menu/PABankingMenu.lua

Large diffs are not rendered by default.

Expand Up @@ -142,6 +142,92 @@ local PABankingMenuDefaults = {
},
},
AvA = {
avaItemsEnabled = false,
CrossAllianceItemIds = {
[1000] = { -- [<Alliance> Ballista]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[1100] = { -- [<Alliance> Fire Ballista]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[1200] = { -- [<Alliance> Lightning Ballista]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[1300] = { -- [<Alliance> Cold Fire Ballista]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[2000] = { -- [<Alliance> Meatbag Catapult]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[2100] = { -- [<Alliance> Oil Catapult]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[2200] = { -- [<Alliance> Scattershot Catapult]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[3000] = { -- [<Alliance> Firepot Trebuchet]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[3100] = { -- [<Alliance> Iceball Trebuchet]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[3200] = { -- [<Alliance> Stone Trebuchet]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[3300] = { -- [<Alliance> Cold Fire Trebuchet]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[3400] = { -- [<Alliance> Cold Stone Trebuchet]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[4000] = { -- [<Alliance> Battering Ram]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[5000] = { -- [Flaming Oil]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[6000] = { -- [<Alliance> Forward Camp]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
},
ItemIds = {
[27962] = { -- [Keep Door Woodwork Repair Kit]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[27138] = { -- [Keep Wall Masonry Repair Kit]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[27112] = { -- [Siege Repair Kit]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
[141731] = { -- [Keep Recall Stone]
operator = PAC.OPERATOR.NONE,
backpackAmount = 20,
},
},
},
-- ---------------------------------------------
lazyWritCraftingCompatiblity = true,
Expand Down
Expand Up @@ -286,6 +286,121 @@ local function isIndividualItemsDisabledOrItemIdOperatorNone(individualItemId)
return true
end

--------------------------------------------------------------------------
-- PABanking AvA.CrossAllianceItemIds operator
---------------------------------
local function isAvACrossAllianceItemsDisabledOrAllOperatorNone(crossAllianceItemIdList)
if isDisabled({"AvA", "avaItemsEnabled"}) then return true end
-- if savedVarsArgs is not disabled, check the itemTypes
for crossAllianceItemId, _ in pairs(crossAllianceItemIdList) do
if PAB.SavedVars.AvA.CrossAllianceItemIds[crossAllianceItemId].operator ~= PAC.OPERATOR.NONE then return false end
end
-- if there was no 'false' returned until here; then return true
return true
end

--------------------------------------------------------------------------
-- PABanking AvA crossAllianceMathOperator
---------------------------------
local function getPABankingAvaCrossAllianceItemIdMathOperatorSetting(crossAllianceItemId)
if isDisabledPAGeneralNoProfileSelected() then return end
local value = PAB.SavedVars.AvA.CrossAllianceItemIds[crossAllianceItemId].operator
-- in case a new GENERIC individual item is added, return "-" by default
if value then return value else return tonumber(PAC.OPERATOR.NONE) end
end

local function setPABankingAvaCrossAllianceItemIdMathOperatorSetting(crossAllianceItemId, value)
if isDisabledPAGeneralNoProfileSelected() then return end
PAB.SavedVars.AvA.CrossAllianceItemIds[crossAllianceItemId].operator = value
end

--------------------------------------------------------------------------
-- PABanking AvA crossAllianceBackpackAmount
---------------------------------
local function getPABankingAvaCrossAllianceItemIdBackpackAmountSetting(crossAllianceItemId)
if isDisabledPAGeneralNoProfileSelected() then return end
local value = PAB.SavedVars.AvA.CrossAllianceItemIds[crossAllianceItemId].backpackAmount
-- in case a new GENERIC individual item is added, return "20" by default
if value then return value else return 20 end
end

local function setPABankingAvaCrossAllianceItemIdBackpackAmountSetting(crossAllianceItemId, value)
if isDisabledPAGeneralNoProfileSelected() then return end
local intValue = tonumber(value)
if intValue and intValue >= 0 then
PAB.SavedVars.AvA.CrossAllianceItemIds[crossAllianceItemId].backpackAmount = intValue
end
end

--------------------------------------------------------------------------
-- PABanking AvA crossAllianceBackpackAmountDisabled
---------------------------------
local function isAvACrossAllianceItemDisabledOrOperatorNone(crossAllianceItemId)
if isDisabledPAGeneralNoProfileSelected() then return true end
if isDisabled({"AvA", "avaItemsEnabled"}) then return true end
if PAB.SavedVars.AvA.CrossAllianceItemIds[crossAllianceItemId].operator ~= PAC.OPERATOR.NONE then return false end
-- if there was no 'false' returned until here; then return true
return true
end

--------------------------------------------------------------------------
-- PABanking AvA.ItemIds operator
---------------------------------
local function isAvAItemsDisabledOrAllOperatorNone(itemIdList)
if isDisabled({"AvA", "avaItemsEnabled"}) then return true end

-- if savedVarsArgs is not disabled, check the itemTypes
for _, itemId in pairs(itemIdList) do
if PAB.SavedVars.AvA.ItemIds[itemId].operator ~= PAC.OPERATOR.NONE then return false end
end
-- if there was no 'false' returned until here; then return true
return true
end

--------------------------------------------------------------------------
-- PABanking AvA mathOperator
---------------------------------
local function getPABankingtAvAItemIdMathOperatorSetting(itemId)
if isDisabledPAGeneralNoProfileSelected() then return end
local value = PAB.SavedVars.AvA.ItemIds[itemId].operator
-- in case a new GENERIC individual item is added, return "-" by default
if value then return value else return tonumber(PAC.OPERATOR.NONE) end
end

local function setPABankingtAvAItemIdMathOperatorSetting(itemId, value)
if isDisabledPAGeneralNoProfileSelected() then return end
PAB.SavedVars.AvA.ItemIds[itemId].operator = value
end

--------------------------------------------------------------------------
-- PABanking AvA backpackAmount
---------------------------------
local function getPABankingtAvAItemIdBackpackAmountSetting(itemId)
if isDisabledPAGeneralNoProfileSelected() then return end
local value = PAB.SavedVars.AvA.ItemIds[itemId].backpackAmount
-- in case a new GENERIC individual item is added, return "20" by default
if value then return value else return 20 end
end

local function setPABankingtAvAItemIdBackpackAmountSetting(itemId, value)
if isDisabledPAGeneralNoProfileSelected() then return end
local intValue = tonumber(value)
if intValue and intValue >= 0 then
PAB.SavedVars.AvA.ItemIds[itemId].backpackAmount = intValue
end
end

--------------------------------------------------------------------------
-- PABanking AvA backpackAmountDisabled
---------------------------------
local function isAvAItemDisabledOrOperatorNone(itemId)
if isDisabledPAGeneralNoProfileSelected() then return true end
if isDisabled({"AvA", "avaItemsEnabled"}) then return true end
if PAB.SavedVars.AvA.ItemIds[itemId].operator ~= PAC.OPERATOR.NONE then return false end
-- if there was no 'false' returned until here; then return true
return true
end

--------------------------------------------------------------------------
-- PABanking transactionDepositStacking
---------------------------------
Expand Down Expand Up @@ -432,6 +547,37 @@ local PABankingMenuFunctions = {
isIndividualItemIdAmountDisabled = function(itemId) return isIndividualItemsDisabledOrItemIdOperatorNone(itemId) end,


-- ----------------------------------------------------------------------------------
-- ALLIANCE VERSUS ALLAINCE ITEMS
-- -----------------------------
getAvAItemsEnabledSetting = function() return getValue({"AvA", "avaItemsEnabled"}) end,
setAvAItemsEnabledSetting = function(value) setValueAndRefreshEvents(value, {"AvA", "avaItemsEnabled"}) end,

isAvASiegeBallistaTransactionMenuDisabled = function() return isAvACrossAllianceItemsDisabledOrAllOperatorNone(PAC.BANKING_AVA.SIEGE[PA.alliance].BALLISTA) end,
isAvASiegeCatapultTransactionMenuDisabled = function() return isAvACrossAllianceItemsDisabledOrAllOperatorNone(PAC.BANKING_AVA.SIEGE[PA.alliance].CATAPULT) end,
isAvASiegeTrebuchetTransactionMenuDisabled = function() return isAvACrossAllianceItemsDisabledOrAllOperatorNone(PAC.BANKING_AVA.SIEGE[PA.alliance].TREBUCHET) end,
isAvASiegeRamTransactionMenuDisabled = function() return isAvACrossAllianceItemsDisabledOrAllOperatorNone(PAC.BANKING_AVA.SIEGE[PA.alliance].RAM) end,
isAvASiegeOilTransactionMenuDisabled = function() return isAvACrossAllianceItemsDisabledOrAllOperatorNone(PAC.BANKING_AVA.SIEGE[PA.alliance].OIL) end,
isAvASiegeGraveyardTransactionMenuDisabled = function() return isAvACrossAllianceItemsDisabledOrAllOperatorNone(PAC.BANKING_AVA.SIEGE[PA.alliance].GRAVEYARD) end,

isAvARepairTransactionMenuDisabled = function() return isAvAItemsDisabledOrAllOperatorNone(PAC.BANKING_AVA.REPAIR) end,
isAvAOtherTransactionMenuDisabled = function() return isAvAItemsDisabledOrAllOperatorNone(PAC.BANKING_AVA.OTHER) end,

getAvACrossAlianceItemIdMathOperatorSetting = getPABankingAvaCrossAllianceItemIdMathOperatorSetting,
setAvACrossAlianceItemIdMathOperatorSetting = setPABankingAvaCrossAllianceItemIdMathOperatorSetting,
getAvACrossAlianceItemIdAmountSetting = getPABankingAvaCrossAllianceItemIdBackpackAmountSetting,
setAvACrossAlianceItemIdAmountSetting = setPABankingAvaCrossAllianceItemIdBackpackAmountSetting,

isAvACrossAlianceItemIdAmountDisabled = function(crossAllianceItemId) return isAvACrossAllianceItemDisabledOrOperatorNone(crossAllianceItemId) end,

getAvAItemIdMathOperatorSetting = getPABankingtAvAItemIdMathOperatorSetting,
setAvAItemIdMathOperatorSetting = setPABankingtAvAItemIdMathOperatorSetting,
getAvAItemIdAmountSetting = getPABankingtAvAItemIdBackpackAmountSetting,
setAvAItemIdAmountSetting = setPABankingtAvAItemIdBackpackAmountSetting,

isAvAItemIdAmountDisabled = function(itemId) return isAvAItemDisabledOrOperatorNone(itemId) end,


-- ----------------------------------------------------------------------------------
-- DOLGUBON'S LAZY WRIT CRAFTER
-- -----------------------------
Expand Down
Expand Up @@ -35,6 +35,7 @@ local function OnBankOpen(eventCode, bankBag)
-- the eligibility is checked within the transactions
-- give it 100ms time to "refresh" the bag data structure after stacking
PAEM.addFunctionToQueue(_stackBags, PAB.AddonName)
PAEM.addFunctionToQueue(PAB.depositOrWithdrawAvAItems, PAB.AddonName, 100)
PAEM.addFunctionToQueue(PAB.depositOrWithdrawAdvancedItems, PAB.AddonName, 100)
PAEM.addFunctionToQueue(PAB.depositOrWithdrawIndividualItems, PAB.AddonName, 100)
PAEM.addFunctionToQueue(PAB.depositOrWithdrawCraftingItems, PAB.AddonName, 100)
Expand Down
@@ -0,0 +1,66 @@
-- Local instances of Global tables --
local PA = PersonalAssistant
local PAB = PA.Banking
local PAC = PA.Constants
local PAHF = PA.HelperFunctions
local PAEM = PA.EventManager

-- ---------------------------------------------------------------------------------------------------------------------

local function depositOrWithdrawAvAItems()

PAHF.debugln("PA.Banking.depositOrWithdrawAvAItems")

if PAB.SavedVars.AvA.avaItemsEnabled then
-- check if bankTransfer is already blocked
if PAB.isBankTransferBlocked then return end
PAB.isBankTransferBlocked = true

-- prepare and fill the table with all ava items that needs to be transferred
local individualItems = {}
local itemIdTable = PAB.SavedVars.AvA.ItemIds
for itemId, moveConfig in pairs(itemIdTable) do
local operator = moveConfig.operator
if operator ~= PAC.OPERATOR.NONE then
individualItems[itemId] = {
operator = operator,
targetBackpackStack = moveConfig.backpackAmount
}
end
end

-- then also check the crossAlliance ava items that need to be transferred
local PACAllianceSiegeTable = PAC.BANKING_AVA.SIEGE[PA.alliance]
for _, corssAlianceItemIdTable in pairs(PACAllianceSiegeTable) do
for crossAllianceItemId, itemId in pairs(corssAlianceItemIdTable) do
local moveConfig = PAB.SavedVars.AvA.CrossAllianceItemIds[crossAllianceItemId]
local operator = moveConfig.operator
if operator ~= PAC.OPERATOR.NONE then
individualItems[itemId] = {
operator = operator,
targetBackpackStack = moveConfig.backpackAmount
}
end
end
end

-- then get the matching data from the backpack and bank
local itemIdComparator = PAHF.getItemIdComparator(individualItems)
local backpackBagCache = SHARED_INVENTORY:GenerateFullSlotData(itemIdComparator, BAG_BACKPACK)
local bankBagCache = SHARED_INVENTORY:GenerateFullSlotData(itemIdComparator, BAG_BANK, BAG_SUBSCRIBER_BANK)

PAHF.debugln("#backpackBagCache = "..tostring(#backpackBagCache))
PAHF.debugln("#bankBagCache = "..tostring(#bankBagCache))

-- trigger the individual itemTransactions
PAB.doIndividualItemTransactions(individualItems, backpackBagCache, bankBagCache)
else
-- else, continue with the next function in queue
PAEM.executeNextFunctionInQueue(PAB.AddonName)
end
end

-- ---------------------------------------------------------------------------------------------------------------------
-- Export
PA.Banking = PA.Banking or {}
PA.Banking.depositOrWithdrawAvAItems = depositOrWithdrawAvAItems

0 comments on commit 6d89684

Please sign in to comment.