From 73a9b132b4aa0fd42dbc60729a661276dcca4d07 Mon Sep 17 00:00:00 2001 From: Alex Dcnh <140754794+Wishmaster117@users.noreply.github.com> Date: Mon, 4 May 2026 13:51:40 +0200 Subject: [PATCH 1/2] Added advanced item handling (bank / guild bank / buy) in an inventory extension. --- Core/MultiBotComm.lua | 316 +++++++++++++++++++++++++++++ Core/MultiBotInit.lua | 4 + Locales/MultiBotAceLocale-enGB.lua | 45 ++++ Locales/MultiBotAceLocale-enUS.lua | 54 +++++ Locales/MultiBotAceLocale-frFR.lua | 55 +++++ MultiBot.toc | 1 + TODO.md | 24 ++- 7 files changed, 495 insertions(+), 4 deletions(-) diff --git a/Core/MultiBotComm.lua b/Core/MultiBotComm.lua index c92d0b6..21f4410 100644 --- a/Core/MultiBotComm.lua +++ b/Core/MultiBotComm.lua @@ -113,6 +113,14 @@ local function ensureBridgeState() state.bootstrapDeadline = state.bootstrapDeadline or 0 state.inventorySeq = state.inventorySeq or 0 state.inventoryActive = state.inventoryActive or nil + state.bankItems = state.bankItems or {} + state.bankSeq = state.bankSeq or 0 + state.bankActive = state.bankActive or nil + state.guildBankItems = state.guildBankItems or {} + state.guildBankSeq = state.guildBankSeq or 0 + state.guildBankActive = state.guildBankActive or nil + state.inventoryItemActionSeq = state.inventoryItemActionSeq or 0 + state.inventoryItemActions = state.inventoryItemActions or {} state.spellbookSeq = state.spellbookSeq or 0 state.spellbookActive = state.spellbookActive or nil state.botSkills = state.botSkills or {} @@ -548,6 +556,58 @@ function Comm.RequestInventory(name) return true end +function Comm.RequestBank(name) + local state = ensureBridgeState() + name = trim(name) + if name == "" or not state.connected then + return false + end + + state.bankSeq = (tonumber(state.bankSeq) or 0) + 1 + local token = tostring(math.floor(safeNow() * 1000)) .. "-bank-" .. tostring(state.bankSeq) + state.bankActive = { + botName = name, + botNameKey = string.lower(name), + token = token, + startedAt = safeNow(), + items = {}, + error = nil, + } + + if not Comm.Send("GET", "BANK~" .. name .. "~" .. token) then + state.bankActive = nil + return false + end + + return token +end + +function Comm.RequestGuildBank(name) + local state = ensureBridgeState() + name = trim(name) + if name == "" or not state.connected then + return false + end + + state.guildBankSeq = (tonumber(state.guildBankSeq) or 0) + 1 + local token = tostring(math.floor(safeNow() * 1000)) .. "-gbank-" .. tostring(state.guildBankSeq) + state.guildBankActive = { + botName = name, + botNameKey = string.lower(name), + token = token, + startedAt = safeNow(), + items = {}, + error = nil, + } + + if not Comm.Send("GET", "GBANK~" .. name .. "~" .. token) then + state.guildBankActive = nil + return false + end + + return token +end + function Comm.RequestSpellbook(name) local state = ensureBridgeState() name = trim(name) @@ -653,6 +713,35 @@ function Comm.RunProfessionRecipeCraft(name, skillId, spellId, itemId) return token end +function Comm.RunInventoryItemAction(name, action, itemId, count) + local state = ensureBridgeState() + name = trim(name) + action = string.upper(trim(action)) + itemId = tonumber(itemId or 0) or 0 + count = tonumber(count or 0) or 0 + if name == "" or action == "" or itemId <= 0 or count < 0 or not state.connected then + return false + end + + state.inventoryItemActionSeq = (tonumber(state.inventoryItemActionSeq) or 0) + 1 + local token = tostring(math.floor(safeNow() * 1000)) .. "-item-" .. tostring(state.inventoryItemActionSeq) + state.inventoryItemActions[token] = { + botName = name, + botNameKey = string.lower(name), + action = action, + itemId = itemId, + count = count, + startedAt = safeNow(), + } + + if not Comm.Send("RUN", "ITEM_ACTION~" .. name .. "~" .. token .. "~" .. action .. "~" .. itemId .. "~" .. count) then + state.inventoryItemActions[token] = nil + return false + end + + return token +end + function Comm.MarkDisconnected(reason) local state = ensureBridgeState() state.connected = false @@ -660,6 +749,9 @@ function Comm.MarkDisconnected(reason) state.protocol = nil state.lastError = reason or nil state.inventoryActive = nil + state.bankActive = nil + state.guildBankActive = nil + state.inventoryItemActions = {} state.spellbookActive = nil state.botSkillActive = nil state.professionRecipeActive = nil @@ -1631,6 +1723,56 @@ local function clearActiveInventoryRequest(botName, token) end end +local function getActiveBankRequest(botName, token) + local state = ensureBridgeState() + local active = state.bankActive + if not active then + return nil + end + + if trim(token) ~= trim(active.token) then + return nil + end + + if string.lower(trim(urlDecodeField(botName))) ~= tostring(active.botNameKey or "") then + return nil + end + + return active +end + +local function clearActiveBankRequest(botName, token) + local state = ensureBridgeState() + if getActiveBankRequest(botName, token) then + state.bankActive = nil + end +end + +local function getActiveGuildBankRequest(botName, token) + local state = ensureBridgeState() + local active = state.guildBankActive + if not active then + return nil + end + + if trim(token) ~= trim(active.token) then + return nil + end + + if string.lower(trim(urlDecodeField(botName))) ~= tostring(active.botNameKey or "") then + return nil + end + + return active +end + +local function clearActiveGuildBankRequest(botName, token) + local state = ensureBridgeState() + if getActiveGuildBankRequest(botName, token) then + state.guildBankActive = nil + end +end + local function getInventoryFrame() return MultiBot and MultiBot.inventory or nil end @@ -2044,6 +2186,180 @@ function Comm.HandleAddonMessage(prefix, message, distribution, sender) return true end + if opcode == "BANK_BEGIN" then + local botName, token = splitOnce(payload or "", "~") + botName = trim(urlDecodeField(botName)) + state.connected = true + state.lastError = nil + + local active = getActiveBankRequest(botName, token) + if active then + active.items = {} + active.error = nil + if MultiBot.OnBridgeBankBegin then + MultiBot.OnBridgeBankBegin(botName, token) + end + end + + return true + end + + if opcode == "BANK_ITEM" then + local botName, rest = splitOnce(payload or "", "~") + local token, encodedLine = splitOnce(rest or "", "~") + botName = trim(urlDecodeField(botName)) + state.connected = true + state.lastError = nil + + local active = getActiveBankRequest(botName, token) + if active then + table.insert(active.items, urlDecodeField(encodedLine)) + end + + return true + end + + if opcode == "BANK_ERROR" then + local botName, rest = splitOnce(payload or "", "~") + local token, reason = splitOnce(rest or "", "~") + botName = trim(urlDecodeField(botName)) + reason = trim(urlDecodeField(reason)) + state.connected = true + state.lastError = nil + + local active = getActiveBankRequest(botName, token) + if active then + active.error = reason ~= "" and reason or "FAILED" + end + + return true + end + + if opcode == "BANK_END" then + local botName, token = splitOnce(payload or "", "~") + botName = trim(urlDecodeField(botName)) + state.connected = true + state.lastError = nil + + local active = getActiveBankRequest(botName, token) + if active then + local key = string.lower(botName) + state.bankItems[key] = active.items or {} + if MultiBot.OnBridgeBankItems then + MultiBot.OnBridgeBankItems(botName, state.bankItems[key], active.error, token) + end + end + + clearActiveBankRequest(botName, token) + return true + end + + if opcode == "GBANK_BEGIN" then + local botName, token = splitOnce(payload or "", "~") + botName = trim(urlDecodeField(botName)) + state.connected = true + state.lastError = nil + + local active = getActiveGuildBankRequest(botName, token) + if active then + active.items = {} + active.error = nil + if MultiBot.OnBridgeGuildBankBegin then + MultiBot.OnBridgeGuildBankBegin(botName, token) + end + end + + return true + end + + if opcode == "GBANK_ITEM" then + local botName, rest = splitOnce(payload or "", "~") + local token, encodedLine = splitOnce(rest or "", "~") + botName = trim(urlDecodeField(botName)) + state.connected = true + state.lastError = nil + + local active = getActiveGuildBankRequest(botName, token) + if active then + table.insert(active.items, urlDecodeField(encodedLine)) + end + + return true + end + + if opcode == "GBANK_ERROR" then + local botName, rest = splitOnce(payload or "", "~") + local token, reason = splitOnce(rest or "", "~") + botName = trim(urlDecodeField(botName)) + reason = trim(urlDecodeField(reason)) + state.connected = true + state.lastError = nil + + local active = getActiveGuildBankRequest(botName, token) + if active then + active.error = reason ~= "" and reason or "FAILED" + end + + return true + end + + if opcode == "GBANK_END" then + local botName, token = splitOnce(payload or "", "~") + botName = trim(urlDecodeField(botName)) + state.connected = true + state.lastError = nil + + local active = getActiveGuildBankRequest(botName, token) + if active then + local key = string.lower(botName) + state.guildBankItems[key] = active.items or {} + if MultiBot.OnBridgeGuildBankItems then + MultiBot.OnBridgeGuildBankItems(botName, state.guildBankItems[key], active.error, token) + end + end + + clearActiveGuildBankRequest(botName, token) + return true + end + + if opcode == "INVENTORY_ITEM_ACTION" then + local botName, rest = splitOnce(payload or "", "~") + local token, rest2 = splitOnce(rest or "", "~") + local action, rest3 = splitOnce(rest2 or "", "~") + local itemId, rest4 = splitOnce(rest3 or "", "~") + local result, rest5 = splitOnce(rest4 or "", "~") + local reason, moved = splitOnce(rest5 or "", "~") + + botName = trim(urlDecodeField(botName)) + token = trim(token) + action = string.upper(trim(action)) + itemId = tonumber(itemId or "0") or 0 + result = trim(result) + reason = trim(urlDecodeField(reason)) + moved = tonumber(moved or "0") or 0 + state.connected = true + state.lastError = nil + + local command = state.inventoryItemActions and state.inventoryItemActions[token] or nil + if command then + command.botName = botName ~= "" and botName or command.botName + command.action = action ~= "" and action or command.action + command.itemId = itemId > 0 and itemId or command.itemId + command.result = result + command.reason = reason + command.moved = moved + + if MultiBot.OnBridgeInventoryItemActionResult then + MultiBot.OnBridgeInventoryItemActionResult(command.botName, command.action, command.itemId, result, reason, moved, command) + end + + state.inventoryItemActions[token] = nil + end + + debugPrint("ADDON:RX", "INVENTORY_ITEM_ACTION", botName, action, itemId, result, reason, moved) + return true + end + if opcode == "SB_BEGIN" then local botName, token = splitOnce(payload or "", "~") state.connected = true diff --git a/Core/MultiBotInit.lua b/Core/MultiBotInit.lua index 6d77fd2..1e61ccd 100644 --- a/Core/MultiBotInit.lua +++ b/Core/MultiBotInit.lua @@ -73,6 +73,10 @@ if MultiBot.InitializeCharacterInfoFrame then MultiBot.InitializeCharacterInfoFrame() end +if MultiBot.InitializeBankFrame then + MultiBot.InitializeBankFrame() +end + if MultiBot.InitializeRewardFrame then MultiBot.InitializeRewardFrame() end diff --git a/Locales/MultiBotAceLocale-enGB.lua b/Locales/MultiBotAceLocale-enGB.lua index ba28489..d0f2132 100644 --- a/Locales/MultiBotAceLocale-enGB.lua +++ b/Locales/MultiBotAceLocale-enGB.lua @@ -52,6 +52,10 @@ local enGBValues = { ["profession.recipes.craft.ok"] = "Craft started.", ["profession.recipes.craft.failed"] = "Craft request failed.", ["profession.recipes.craft.err"] = "Craft failed: %s", + ["profession.recipes.buy_missing"] = "Buy", + ["profession.recipes.buy_missing.tooltip"] = "Ask the bot to buy the first missing material from a nearby vendor.", + ["profession.recipes.buy_missing.pending"] = "Buy requested...", + ["profession.recipes.buy_missing.failed"] = "Buy request failed.", ["profession.recipes.craft.reason.NO_BOT"] = "Bot not found.", ["profession.recipes.craft.reason.NO_AI"] = "Bot AI unavailable.", ["profession.recipes.craft.reason.BAD_REQUEST"] = "Invalid recipe request.", @@ -92,7 +96,48 @@ local enGBValues = { ["character.skills.skill.arms"] = "Arms", ["character.skills.skill.fury"] = "Fury", ["character.skills.skill.protection"] = "Protection", + ["inventory.mode.bank"] = "Bank", + ["inventory.mode.gbank"] = "Guild Bank", + ["inventory.mode.buy"] = "Buy", + ["inventory.bank.title"] = "Bot Bank", + ["inventory.bank.loading"] = "Loading bank...", + ["inventory.bank.count"] = "bank item(s)", + ["inventory.bank.withdraw"] = "Withdraw", + ["inventory.bank.withdraw.pending"] = "Withdraw requested...", + ["inventory.bank.withdraw.failed"] = "Withdraw request failed.", + ["inventory.bank.bridge.required"] = "Bank bridge is not connected.", + ["info.inventory.action.BANK_DEPOSIT"] = "Bank deposit", + ["info.inventory.action.BANK_WITHDRAW"] = "Bank withdraw", + ["info.inventory.action.GBANK_DEPOSIT"] = "Guild bank deposit", + ["info.inventory.action.GBANK_WITHDRAW"] = "Guild bank withdraw", + ["info.inventory.action.BUY_ITEM"] = "Buy item", + ["info.inventory.item_action.ok"] = "%s: %s x%d.", + ["info.inventory.item_action.err"] = "%s failed: %s", + ["info.inventory.item_action.failed"] = "%s failed.", + ["info.inventory.item_action.buy.ok"] = "Purchase completed.", + ["info.inventory.item_action.buy.err"] = "Purchase failed: %s", + ["info.inventory.item_action.reason.NO_BOT"] = "Bot not found.", + ["info.inventory.item_action.reason.BAD_REQUEST"] = "Invalid item request.", + ["info.inventory.item_action.reason.BAD_ACTION"] = "Unsupported item action.", + ["info.inventory.item_action.reason.ITEM_NOT_FOUND"] = "Item not found.", + ["info.inventory.item_action.reason.BANKER_NOT_FOUND"] = "No banker nearby.", + ["info.inventory.item_action.reason.BANK_FULL"] = "The bot bank is full.", + ["info.inventory.item_action.reason.BAGS_FULL"] = "The bot bags are full.", + ["info.inventory.item_action.reason.GUILD_BANK_NOT_FOUND"] = "No guild bank nearby.", + ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "The bot is not in your guild.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "The bot cannot deposit into the first guild bank tab.", + ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "The guild bank did not accept the item.", + ["info.inventory.item_action.reason.VENDOR_NOT_FOUND"] = "No vendor nearby.", + ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "The nearby vendor does not sell this item.", + ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "The bot does not have enough money.", + ["info.inventory.item_action.reason.BUY_FAILED"] = "The purchase failed.", + ["info.inventory.item_action.reason.NOT_SUPPORTED"] = "This action is not supported by the bridge yet.", + ["info.inventory.item_action.reason.FAILED"] = "The action failed.", ["tips.units.rti"] = "RTI", + ["tips.inventory.bank.deposit"] = "Deposit to bank|cffffffff\nClick an item to move matching stacks from the bot bags to its bank.\nThe bot must be near a banker.|r\n\n|cffff0000Only affects the Bot whose inventory is open.|r", + ["tips.inventory.gbank.deposit"] = "Deposit to guild bank|cffffffff\nClick an item to move matching stacks from the bot bags to the first guild bank tab.\nThe bot must be near a guild bank and have deposit rights.|r\n\n|cffff0000Only affects the Bot whose inventory is open.|r", + ["tips.inventory.buy"] = "Buy this item|cffffffff\nClick an item to buy one matching item from a nearby vendor.\nThe vendor must sell that item.|r\n\n|cffff0000Only affects the Bot whose inventory is open.|r", + ["tips.inventory.bank.open"] = "Open bot bank|cffffffff\nShows the bot bank contents through the bridge.\nThe bot must be near a banker.|r", ["tips.disperse.main"] = "Disperse", ["tips.disperse.set"] = "Set disperse distance", ["tips.disperse.disable"] = "Disable disperse", diff --git a/Locales/MultiBotAceLocale-enUS.lua b/Locales/MultiBotAceLocale-enUS.lua index 5dd7104..f10ef9a 100644 --- a/Locales/MultiBotAceLocale-enUS.lua +++ b/Locales/MultiBotAceLocale-enUS.lua @@ -52,6 +52,10 @@ local enUSValues = { ["profession.recipes.craft.ok"] = "Craft started.", ["profession.recipes.craft.failed"] = "Craft request failed.", ["profession.recipes.craft.err"] = "Craft failed: %s", + ["profession.recipes.buy_missing"] = "Buy", + ["profession.recipes.buy_missing.tooltip"] = "Ask the bot to buy the missing materials from nearby vendors.", + ["profession.recipes.buy_missing.pending"] = "Buy requested...", + ["profession.recipes.buy_missing.failed"] = "Buy request failed.", ["profession.recipes.craft.reason.NO_BOT"] = "Bot not found.", ["profession.recipes.craft.reason.NO_AI"] = "Bot AI unavailable.", ["profession.recipes.craft.reason.BAD_REQUEST"] = "Invalid recipe request.", @@ -92,7 +96,57 @@ local enUSValues = { ["character.skills.skill.arms"] = "Arms", ["character.skills.skill.fury"] = "Fury", ["character.skills.skill.protection"] = "Protection", + ["inventory.mode.bank"] = "Bank", + ["inventory.mode.gbank"] = "Guild Bank", + ["inventory.mode.buy"] = "Buy", + ["inventory.bank.title"] = "Bot Bank", + ["inventory.bank.loading"] = "Loading bank...", + ["inventory.bank.count"] = "bank item(s)", + ["inventory.bank.withdraw"] = "Withdraw", + ["inventory.bank.withdraw.pending"] = "Withdraw requested...", + ["inventory.bank.withdraw.failed"] = "Withdraw request failed.", + ["inventory.bank.bridge.required"] = "Bank bridge is not connected.", + ["inventory.gbank.title"] = "Guild Bank", + ["inventory.gbank.loading"] = "Loading guild bank...", + ["inventory.gbank.count"] = "guild bank item(s)", + ["inventory.gbank.bridge.required"] = "Guild bank bridge is not connected.", + ["info.inventory.action.BANK_DEPOSIT"] = "Bank deposit", + ["info.inventory.action.BANK_WITHDRAW"] = "Bank withdraw", + ["info.inventory.action.GBANK_DEPOSIT"] = "Guild bank deposit", + ["info.inventory.action.GBANK_WITHDRAW"] = "Guild bank withdraw", + ["info.inventory.action.BUY_ITEM"] = "Buy item", + ["info.inventory.item_action.ok"] = "%s: %s x%d.", + ["info.inventory.item_action.err"] = "%s failed: %s", + ["info.inventory.item_action.failed"] = "%s failed.", + ["info.inventory.item_action.buy.ok"] = "Purchase completed.", + ["info.inventory.item_action.buy.err"] = "Purchase failed: %s", + ["info.inventory.item_action.reason.NO_BOT"] = "Bot not found.", + ["info.inventory.item_action.reason.BAD_REQUEST"] = "Invalid item request.", + ["info.inventory.item_action.reason.BAD_ACTION"] = "Unsupported item action.", + ["info.inventory.item_action.reason.ITEM_NOT_FOUND"] = "Item not found.", + ["info.inventory.item_action.reason.BOT_NOT_IN_GUILD"] = "The bot is not in a guild.", + ["info.inventory.item_action.reason.BANKER_NOT_FOUND"] = "No banker nearby.", + ["info.inventory.item_action.reason.BANK_FULL"] = "The bot bank is full.", + ["info.inventory.item_action.reason.BAGS_FULL"] = "The bot bags are full.", + ["info.inventory.item_action.reason.GUILD_BANK_NOT_FOUND"] = "No guild bank nearby.", + ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "The bot is not in your guild.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "The bot cannot deposit into the first guild bank tab.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "The bot does not have the required guild bank rights.", + ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "The guild bank did not accept the item.", + ["info.inventory.item_action.reason.VENDOR_NOT_FOUND"] = "No vendor nearby.", + ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "The nearby vendor does not sell this item.", + ["info.inventory.item_action.reason.VENDOR_REQUIRES_SPECIAL_CURRENCY"] = "The vendor requires another currency or item, not coins.", + ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "No nearby vendor sells this item.", + ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "The bot does not have enough money.", + ["info.inventory.item_action.reason.BUY_FAILED"] = "The purchase failed.", + ["info.inventory.item_action.reason.NOT_SUPPORTED"] = "This action is not supported by the bridge yet.", + ["info.inventory.item_action.reason.FAILED"] = "The action failed.", ["tips.units.rti"] = "RTI", + ["tips.inventory.bank.deposit"] = "Deposit to bank|cffffffff\nClick an item to move matching stacks from the bot bags to its bank.\nThe bot must be near a banker.|r\n\n|cffff0000Only affects the Bot whose inventory is open.|r", + ["tips.inventory.gbank.deposit"] = "Deposit to guild bank|cffffffff\nClick an item to move matching stacks from the bot bags to the first guild bank tab.\nThe bot must be near a guild bank and have deposit rights.|r\n\n|cffff0000Only affects the Bot whose inventory is open.|r", + ["tips.inventory.buy"] = "Buy this item|cffffffff\nClick an item to buy one matching item from a nearby vendor.\nThe vendor must sell that item.|r\n\n|cffff0000Only affects the Bot whose inventory is open.|r", + ["tips.inventory.bank.open"] = "Open bot bank|cffffffff\nShows the bot bank contents through the bridge.\nThe bot must be near a banker.|r", + ["tips.inventory.gbank.open"] = "Open bot guild bank|cffffffff\nShows the guild bank contents visible to the bot through the bridge.\nThe bot must be near a guild bank.|r", ["tips.disperse.main"] = "Disperse", ["tips.disperse.set"] = "Set disperse distance", ["tips.disperse.disable"] = "Disable disperse", diff --git a/Locales/MultiBotAceLocale-frFR.lua b/Locales/MultiBotAceLocale-frFR.lua index 7d540d7..57c1e0d 100644 --- a/Locales/MultiBotAceLocale-frFR.lua +++ b/Locales/MultiBotAceLocale-frFR.lua @@ -52,6 +52,11 @@ local frFRValues = { ["profession.recipes.craft.ok"] = "Création lancée.", ["profession.recipes.craft.failed"] = "La demande de création a échoué.", ["profession.recipes.craft.err"] = "Création échouée : %s", + ["profession.recipes.buy_missing"] = "Acheter", + ["profession.recipes.buy_missing.tooltip"] = "Demande au bot d'acheter le premier composant manquant chez un vendeur proche.", + ["profession.recipes.buy_missing.tooltip"] = "Demande au bot d'acheter les composants manquants chez les vendeurs proches.", + ["profession.recipes.buy_missing.pending"] = "Achat demandé...", + ["profession.recipes.buy_missing.failed"] = "La demande d'achat a échoué.", ["profession.recipes.craft.reason.NO_BOT"] = "Bot introuvable.", ["profession.recipes.craft.reason.NO_AI"] = "IA du bot indisponible.", ["profession.recipes.craft.reason.BAD_REQUEST"] = "Demande de recette invalide.", @@ -92,7 +97,57 @@ local frFRValues = { ["character.skills.skill.arms"] = "Armes", ["character.skills.skill.fury"] = "Fureur", ["character.skills.skill.protection"] = "Protection", + ["inventory.mode.bank"] = "Banque", + ["inventory.mode.gbank"] = "Banque de guilde", + ["inventory.mode.buy"] = "Acheter", + ["inventory.bank.title"] = "Banque du bot", + ["inventory.bank.loading"] = "Chargement de la banque...", + ["inventory.bank.count"] = "objet(s) en banque", + ["inventory.bank.withdraw"] = "Retirer", + ["inventory.bank.withdraw.pending"] = "Retrait demandé...", + ["inventory.bank.withdraw.failed"] = "La demande de retrait a échoué.", + ["inventory.bank.bridge.required"] = "Le bridge de banque n'est pas connecté.", + ["inventory.gbank.title"] = "Banque de guilde", + ["inventory.gbank.loading"] = "Chargement de la banque de guilde...", + ["inventory.gbank.count"] = "objet(s) en banque de guilde", + ["inventory.gbank.bridge.required"] = "Le bridge de banque de guilde n'est pas connecté.", + ["info.inventory.action.BANK_DEPOSIT"] = "Dépôt banque", + ["info.inventory.action.BANK_WITHDRAW"] = "Retrait banque", + ["info.inventory.action.GBANK_DEPOSIT"] = "Dépôt banque de guilde", + ["info.inventory.action.GBANK_WITHDRAW"] = "Retrait banque de guilde", + ["info.inventory.action.BUY_ITEM"] = "Achat objet", + ["info.inventory.item_action.ok"] = "%s : %s x%d.", + ["info.inventory.item_action.err"] = "%s échoué : %s", + ["info.inventory.item_action.failed"] = "%s échoué.", + ["info.inventory.item_action.buy.ok"] = "Achat terminé.", + ["info.inventory.item_action.buy.err"] = "Achat échoué : %s", + ["info.inventory.item_action.reason.NO_BOT"] = "Bot introuvable.", + ["info.inventory.item_action.reason.BAD_REQUEST"] = "Demande d'objet invalide.", + ["info.inventory.item_action.reason.BAD_ACTION"] = "Action d'objet non supportée.", + ["info.inventory.item_action.reason.ITEM_NOT_FOUND"] = "Objet introuvable.", + ["info.inventory.item_action.reason.BOT_NOT_IN_GUILD"] = "Le bot n'est dans aucune guilde.", + ["info.inventory.item_action.reason.BANKER_NOT_FOUND"] = "Aucun banquier à proximité.", + ["info.inventory.item_action.reason.BANK_FULL"] = "La banque du bot est pleine.", + ["info.inventory.item_action.reason.BAGS_FULL"] = "Les sacs du bot sont pleins.", + ["info.inventory.item_action.reason.GUILD_BANK_NOT_FOUND"] = "Aucune banque de guilde à proximité.", + ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "Le bot n'est pas dans ta guilde.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "Le bot ne peut pas déposer dans le premier onglet de banque de guilde.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "Le bot n'a pas les droits requis pour la banque de guilde.", + ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "La banque de guilde n'a pas accepté l'objet.", + ["info.inventory.item_action.reason.VENDOR_NOT_FOUND"] = "Aucun vendeur à proximité.", + ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "Le vendeur à proximité ne vend pas cet objet.", + ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "Aucun vendeur proche ne vend cet objet.", + ["info.inventory.item_action.reason.VENDOR_REQUIRES_SPECIAL_CURRENCY"] = "Le vendeur demande une autre monnaie ou un objet, pas des pièces.", + ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "Le bot n'a pas assez d'argent.", + ["info.inventory.item_action.reason.BUY_FAILED"] = "L'achat a échoué.", + ["info.inventory.item_action.reason.NOT_SUPPORTED"] = "Cette action n'est pas encore supportée par le bridge.", + ["info.inventory.item_action.reason.FAILED"] = "L'action a échoué.", ["tips.units.rti"] = "RTI", + ["tips.inventory.bank.deposit"] = "Déposer en banque|cffffffff\nClique un objet pour déplacer les piles correspondantes des sacs du bot vers sa banque.\nLe bot doit être près d'un banquier.|r\n\n|cffff0000N'affecte que le Bot dont l'inventaire est ouvert.|r", + ["tips.inventory.gbank.deposit"] = "Déposer en banque de guilde|cffffffff\nClique un objet pour déplacer les piles correspondantes des sacs du bot vers le premier onglet de banque de guilde.\nLe bot doit être près d'une banque de guilde et avoir les droits de dépôt.|r\n\n|cffff0000N'affecte que le Bot dont l'inventaire est ouvert.|r", + ["tips.inventory.buy"] = "Acheter cet objet|cffffffff\nClique un objet pour acheter un exemplaire correspondant chez un vendeur proche.\nLe vendeur doit vendre cet objet.|r\n\n|cffff0000N'affecte que le Bot dont l'inventaire est ouvert.|r", + ["tips.inventory.bank.open"] = "Ouvrir la banque du bot|cffffffff\nAffiche le contenu de la banque du bot via le bridge.\nLe bot doit être près d'un banquier.|r", + ["tips.inventory.gbank.open"] = "Ouvrir la banque de guilde du bot|cffffffff\nAffiche le contenu de banque de guilde visible par le bot via le bridge.\nLe bot doit être près d'une banque de guilde.|r", ["tips.disperse.main"] = "Disperse", ["tips.disperse.set"] = "Définir la distance de disperse", ["tips.disperse.disable"] = "Désactiver disperse", diff --git a/MultiBot.toc b/MultiBot.toc index 2f4f231..10e2ea2 100644 --- a/MultiBot.toc +++ b/MultiBot.toc @@ -69,6 +69,7 @@ UI\MultiBotRewardFrame.lua UI\MultiBotOutfitUI.lua UI\MultiBotInventoryFrame.lua UI\MultiBotInventoryItem.lua +UI\MultiBotBankFrame.lua UI\MultiBotInspectUI.lua UI\MultiBotItemusFrame.lua UI\MultiBotIconosFrame.lua diff --git a/TODO.md b/TODO.md index 20a40b8..b3406f4 100644 --- a/TODO.md +++ b/TODO.md @@ -20,10 +20,26 @@ * Faire une UI pour enchanter les objets à moins qu'on arrive à faire le bot caster le spell sur la fenêtre de trade. ## Informations bot -** Frame faite -* Il y'a encore des spell des professions qui fuitent vers le spellbook -* y ajouter Monnaies (emblemes etc..) -* Réputations +* Dans les frames métier ajout d'un bouton pour faire le bot acheter les composants manquants pour crafter l'item. + +** TODO +* Ajouter les Monnaies (emblemes etc..) +* Ajouter les Réputations + + +## Inventaire Bot étendu +* Ajout d'un bouton Pour déposer des objets dans la banque du bot. +* Ajout d'une frame pour afficher le contenu de la banque du bot, avec un bouton pour retirer les objets de la banque. +* Ajout d'un bouton pour déposer des objets dans la banque de guilde. +* Ajout d'une frame pour afficher le contenu de la banque de guilde. +* + +** TODO +* Voire si on tiends compte des droits de guilde pour les retraits et dépots, est ce que les rangs des bots évoluent dans playerbots. +* Les banquier neutres comme par exemple Dalaran ne sont pas reconnus comme banquiers +* Uniformiser le layout des frames de banque bot et BDG +* Ajouter un bouton retrait à la frame BDG +* Afficher les sous de la guilde dans la frame BDG ## Frame Loot From b38b2a977bebca984839903911cb4e406f607f8d Mon Sep 17 00:00:00 2001 From: Alex Dcnh <140754794+Wishmaster117@users.noreply.github.com> Date: Mon, 4 May 2026 14:19:13 +0200 Subject: [PATCH 2/2] Add missing translations --- Locales/MultiBotAceLocale-deDE.lua | 52 ++++++++++++++++++++++++++++++ Locales/MultiBotAceLocale-enGB.lua | 35 ++++++++++++-------- Locales/MultiBotAceLocale-enUS.lua | 28 ++++++++-------- Locales/MultiBotAceLocale-esES.lua | 52 ++++++++++++++++++++++++++++++ Locales/MultiBotAceLocale-frFR.lua | 1 - Locales/MultiBotAceLocale-koKR.lua | 52 ++++++++++++++++++++++++++++++ Locales/MultiBotAceLocale-ruRU.lua | 52 ++++++++++++++++++++++++++++++ Locales/MultiBotAceLocale-zhCN.lua | 52 ++++++++++++++++++++++++++++++ 8 files changed, 294 insertions(+), 30 deletions(-) diff --git a/Locales/MultiBotAceLocale-deDE.lua b/Locales/MultiBotAceLocale-deDE.lua index 5b33ccb..84e76af 100644 --- a/Locales/MultiBotAceLocale-deDE.lua +++ b/Locales/MultiBotAceLocale-deDE.lua @@ -52,6 +52,10 @@ local deDEValues = { ["profession.recipes.craft.ok"] = "Herstellung gestartet.", ["profession.recipes.craft.failed"] = "Herstellungsanfrage fehlgeschlagen.", ["profession.recipes.craft.err"] = "Herstellung fehlgeschlagen: %s", + ["profession.recipes.buy_missing"] = "Kaufen", + ["profession.recipes.buy_missing.tooltip"] = "Den Bot bitten, das erste fehlende Material bei einem nahegelegenen Händler zu kaufen.", + ["profession.recipes.buy_missing.pending"] = "Kauf angefordert...", + ["profession.recipes.buy_missing.failed"] = "Kaufanfrage fehlgeschlagen.", ["profession.recipes.craft.reason.NO_BOT"] = "Bot nicht gefunden.", ["profession.recipes.craft.reason.NO_AI"] = "Bot-KI nicht verfügbar.", ["profession.recipes.craft.reason.BAD_REQUEST"] = "Ungültige Rezeptanfrage.", @@ -92,7 +96,55 @@ local deDEValues = { ["character.skills.skill.arms"] = "Waffen", ["character.skills.skill.fury"] = "Furor", ["character.skills.skill.protection"] = "Schutz", + ["inventory.mode.bank"] = "Bank", + ["inventory.mode.gbank"] = "Gildenbank", + ["inventory.mode.buy"] = "Kaufen", + ["inventory.bank.title"] = "Bot-Bank", + ["inventory.bank.loading"] = "Bank wird geladen...", + ["inventory.bank.count"] = "Gegenstand/Gegenstände in der Bank", + ["inventory.bank.withdraw"] = "Abheben", + ["inventory.bank.withdraw.pending"] = "Abhebung angefordert...", + ["inventory.bank.withdraw.failed"] = "Abhebungsanfrage fehlgeschlagen.", + ["inventory.bank.bridge.required"] = "Die Bank-Bridge ist nicht verbunden.", + ["inventory.gbank.title"] = "Gildenbank", + ["inventory.gbank.loading"] = "Gildenbank wird geladen...", + ["inventory.gbank.count"] = "Gegenstand/Gegenstände in der Gildenbank", + ["inventory.gbank.bridge.required"] = "Die Gildenbank-Bridge ist nicht verbunden.", + ["info.inventory.action.BANK_DEPOSIT"] = "Bankeinzahlung", + ["info.inventory.action.BANK_WITHDRAW"] = "Bankabhebung", + ["info.inventory.action.GBANK_DEPOSIT"] = "Gildenbankeinzahlung", + ["info.inventory.action.GBANK_WITHDRAW"] = "Gildenbankabhebung", + ["info.inventory.action.BUY_ITEM"] = "Gegenstand kaufen", + ["info.inventory.item_action.ok"] = "%s: %s x%d.", + ["info.inventory.item_action.err"] = "%s fehlgeschlagen: %s", + ["info.inventory.item_action.failed"] = "%s fehlgeschlagen.", + ["info.inventory.item_action.buy.ok"] = "Kauf abgeschlossen.", + ["info.inventory.item_action.buy.err"] = "Kauf fehlgeschlagen: %s", + ["info.inventory.item_action.reason.NO_BOT"] = "Bot nicht gefunden.", + ["info.inventory.item_action.reason.BAD_REQUEST"] = "Ungültige Gegenstandsanfrage.", + ["info.inventory.item_action.reason.BAD_ACTION"] = "Nicht unterstützte Gegenstandsaktion.", + ["info.inventory.item_action.reason.ITEM_NOT_FOUND"] = "Gegenstand nicht gefunden.", + ["info.inventory.item_action.reason.BOT_NOT_IN_GUILD"] = "Der Bot ist in keiner Gilde.", + ["info.inventory.item_action.reason.BANKER_NOT_FOUND"] = "Kein Bankier in der Nähe.", + ["info.inventory.item_action.reason.BANK_FULL"] = "Die Bot-Bank ist voll.", + ["info.inventory.item_action.reason.BAGS_FULL"] = "Die Taschen des Bots sind voll.", + ["info.inventory.item_action.reason.GUILD_BANK_NOT_FOUND"] = "Keine Gildenbank in der Nähe.", + ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "Der Bot ist nicht in deiner Gilde.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "Der Bot hat nicht die erforderlichen Rechte für die Gildenbank.", + ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "Die Gildenbank hat den Gegenstand nicht akzeptiert.", + ["info.inventory.item_action.reason.VENDOR_NOT_FOUND"] = "Kein Händler in der Nähe.", + ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "Der Händler verkauft diesen Gegenstand nicht.", + ["info.inventory.item_action.reason.VENDOR_REQUIRES_SPECIAL_CURRENCY"] = "Der Händler verlangt eine andere Währung oder einen Gegenstand.", + ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "Der Bot hat nicht genug Geld.", + ["info.inventory.item_action.reason.BUY_FAILED"] = "Kauf fehlgeschlagen.", + ["info.inventory.item_action.reason.NOT_SUPPORTED"] = "Diese Aktion wird von der Bridge noch nicht unterstützt.", + ["info.inventory.item_action.reason.FAILED"] = "Die Aktion ist fehlgeschlagen.", ["tips.units.rti"] = "RTI", + ["tips.inventory.bank.deposit"] = "In die Bank einzahlen|cffffffff\nKlicke auf einen Gegenstand, um die entsprechenden Stapel aus den Taschen des Bots in seine Bank zu verschieben.\nDer Bot muss sich in der Nähe eines Bankiers befinden.|r\n\n|cffff0000Betrifft nur den Bot, dessen Inventar geöffnet ist.|r", + ["tips.inventory.gbank.deposit"] = "In die Gildenbank einzahlen|cffffffff\nKlicke auf einen Gegenstand, um die entsprechenden Stapel aus den Taschen des Bots in den ersten Reiter der Gildenbank zu verschieben.\nDer Bot muss sich in der Nähe einer Gildenbank befinden und Einzahlungsrechte besitzen.|r\n\n|cffff0000Betrifft nur den Bot, dessen Inventar geöffnet ist.|r", + ["tips.inventory.buy"] = "Diesen Gegenstand kaufen|cffffffff\nKlicke auf einen Gegenstand, um ein Exemplar davon bei einem nahegelegenen Händler zu kaufen.\nDer Händler muss diesen Gegenstand verkaufen.|r\n\n|cffff0000Betrifft nur den Bot, dessen Inventar geöffnet ist.|r", + ["tips.inventory.bank.open"] = "Bot-Bank öffnen|cffffffff\nZeigt den Inhalt der Bot-Bank über die Bridge an.\nDer Bot muss sich in der Nähe eines Bankiers befinden.|r", + ["tips.inventory.gbank.open"] = "Gildenbank des Bots öffnen|cffffffff\nZeigt den für den Bot sichtbaren Inhalt der Gildenbank über die Bridge an.\nDer Bot muss sich in der Nähe einer Gildenbank befinden.|r", ["tips.disperse.main"] = "Disperse", ["tips.disperse.set"] = "Disperse-Distanz setzen", ["tips.disperse.disable"] = "Disperse deaktivieren", diff --git a/Locales/MultiBotAceLocale-enGB.lua b/Locales/MultiBotAceLocale-enGB.lua index d0f2132..c685e38 100644 --- a/Locales/MultiBotAceLocale-enGB.lua +++ b/Locales/MultiBotAceLocale-enGB.lua @@ -101,15 +101,19 @@ local enGBValues = { ["inventory.mode.buy"] = "Buy", ["inventory.bank.title"] = "Bot Bank", ["inventory.bank.loading"] = "Loading bank...", - ["inventory.bank.count"] = "bank item(s)", + ["inventory.bank.count"] = "item(s) in bank", ["inventory.bank.withdraw"] = "Withdraw", ["inventory.bank.withdraw.pending"] = "Withdraw requested...", ["inventory.bank.withdraw.failed"] = "Withdraw request failed.", ["inventory.bank.bridge.required"] = "Bank bridge is not connected.", + ["inventory.gbank.title"] = "Guild Bank", + ["inventory.gbank.loading"] = "Loading guild bank...", + ["inventory.gbank.count"] = "item(s) in guild bank", + ["inventory.gbank.bridge.required"] = "Guild bank bridge is not connected.", ["info.inventory.action.BANK_DEPOSIT"] = "Bank deposit", - ["info.inventory.action.BANK_WITHDRAW"] = "Bank withdraw", + ["info.inventory.action.BANK_WITHDRAW"] = "Bank withdrawal", ["info.inventory.action.GBANK_DEPOSIT"] = "Guild bank deposit", - ["info.inventory.action.GBANK_WITHDRAW"] = "Guild bank withdraw", + ["info.inventory.action.GBANK_WITHDRAW"] = "Guild bank withdrawal", ["info.inventory.action.BUY_ITEM"] = "Buy item", ["info.inventory.item_action.ok"] = "%s: %s x%d.", ["info.inventory.item_action.err"] = "%s failed: %s", @@ -120,24 +124,27 @@ local enGBValues = { ["info.inventory.item_action.reason.BAD_REQUEST"] = "Invalid item request.", ["info.inventory.item_action.reason.BAD_ACTION"] = "Unsupported item action.", ["info.inventory.item_action.reason.ITEM_NOT_FOUND"] = "Item not found.", + ["info.inventory.item_action.reason.BOT_NOT_IN_GUILD"] = "Bot is not in a guild.", ["info.inventory.item_action.reason.BANKER_NOT_FOUND"] = "No banker nearby.", - ["info.inventory.item_action.reason.BANK_FULL"] = "The bot bank is full.", - ["info.inventory.item_action.reason.BAGS_FULL"] = "The bot bags are full.", + ["info.inventory.item_action.reason.BANK_FULL"] = "Bot bank is full.", + ["info.inventory.item_action.reason.BAGS_FULL"] = "Bot bags are full.", ["info.inventory.item_action.reason.GUILD_BANK_NOT_FOUND"] = "No guild bank nearby.", - ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "The bot is not in your guild.", - ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "The bot cannot deposit into the first guild bank tab.", - ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "The guild bank did not accept the item.", + ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "Bot is not in your guild.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "Bot does not have the required guild bank rights.", + ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "Guild bank did not accept the item.", ["info.inventory.item_action.reason.VENDOR_NOT_FOUND"] = "No vendor nearby.", ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "The nearby vendor does not sell this item.", - ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "The bot does not have enough money.", - ["info.inventory.item_action.reason.BUY_FAILED"] = "The purchase failed.", + ["info.inventory.item_action.reason.VENDOR_REQUIRES_SPECIAL_CURRENCY"] = "Vendor requires a different currency or item.", + ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "Bot does not have enough money.", + ["info.inventory.item_action.reason.BUY_FAILED"] = "Purchase failed.", ["info.inventory.item_action.reason.NOT_SUPPORTED"] = "This action is not supported by the bridge yet.", ["info.inventory.item_action.reason.FAILED"] = "The action failed.", ["tips.units.rti"] = "RTI", - ["tips.inventory.bank.deposit"] = "Deposit to bank|cffffffff\nClick an item to move matching stacks from the bot bags to its bank.\nThe bot must be near a banker.|r\n\n|cffff0000Only affects the Bot whose inventory is open.|r", - ["tips.inventory.gbank.deposit"] = "Deposit to guild bank|cffffffff\nClick an item to move matching stacks from the bot bags to the first guild bank tab.\nThe bot must be near a guild bank and have deposit rights.|r\n\n|cffff0000Only affects the Bot whose inventory is open.|r", - ["tips.inventory.buy"] = "Buy this item|cffffffff\nClick an item to buy one matching item from a nearby vendor.\nThe vendor must sell that item.|r\n\n|cffff0000Only affects the Bot whose inventory is open.|r", - ["tips.inventory.bank.open"] = "Open bot bank|cffffffff\nShows the bot bank contents through the bridge.\nThe bot must be near a banker.|r", + ["tips.inventory.bank.deposit"] = "Deposit to bank|cffffffff\nClick an item to move matching stacks from the bot's bags to its bank.\nThe bot must be near a banker.|r\n\n|cffff0000Affects only the bot whose inventory is open.|r", + ["tips.inventory.gbank.deposit"] = "Deposit to guild bank|cffffffff\nClick an item to move matching stacks from the bot's bags to the first guild bank tab.\nThe bot must be near a guild bank and have deposit rights.|r\n\n|cffff0000Affects only the bot whose inventory is open.|r", + ["tips.inventory.buy"] = "Buy this item|cffffffff\nClick an item to buy one matching copy from a nearby vendor.\nThe vendor must sell this item.|r\n\n|cffff0000Affects only the bot whose inventory is open.|r", + ["tips.inventory.bank.open"] = "Open bot bank|cffffffff\nDisplays the bot's bank contents through the bridge.\nThe bot must be near a banker.|r", + ["tips.inventory.gbank.open"] = "Open bot guild bank|cffffffff\nDisplays the guild bank contents visible to the bot through the bridge.\nThe bot must be near a guild bank.|r", ["tips.disperse.main"] = "Disperse", ["tips.disperse.set"] = "Set disperse distance", ["tips.disperse.disable"] = "Disable disperse", diff --git a/Locales/MultiBotAceLocale-enUS.lua b/Locales/MultiBotAceLocale-enUS.lua index f10ef9a..06d1283 100644 --- a/Locales/MultiBotAceLocale-enUS.lua +++ b/Locales/MultiBotAceLocale-enUS.lua @@ -101,19 +101,19 @@ local enUSValues = { ["inventory.mode.buy"] = "Buy", ["inventory.bank.title"] = "Bot Bank", ["inventory.bank.loading"] = "Loading bank...", - ["inventory.bank.count"] = "bank item(s)", + ["inventory.bank.count"] = "item(s) in bank", ["inventory.bank.withdraw"] = "Withdraw", ["inventory.bank.withdraw.pending"] = "Withdraw requested...", ["inventory.bank.withdraw.failed"] = "Withdraw request failed.", ["inventory.bank.bridge.required"] = "Bank bridge is not connected.", ["inventory.gbank.title"] = "Guild Bank", ["inventory.gbank.loading"] = "Loading guild bank...", - ["inventory.gbank.count"] = "guild bank item(s)", + ["inventory.gbank.count"] = "item(s) in guild bank", ["inventory.gbank.bridge.required"] = "Guild bank bridge is not connected.", ["info.inventory.action.BANK_DEPOSIT"] = "Bank deposit", - ["info.inventory.action.BANK_WITHDRAW"] = "Bank withdraw", + ["info.inventory.action.BANK_WITHDRAW"] = "Bank withdrawal", ["info.inventory.action.GBANK_DEPOSIT"] = "Guild bank deposit", - ["info.inventory.action.GBANK_WITHDRAW"] = "Guild bank withdraw", + ["info.inventory.action.GBANK_WITHDRAW"] = "Guild bank withdrawal", ["info.inventory.action.BUY_ITEM"] = "Buy item", ["info.inventory.item_action.ok"] = "%s: %s x%d.", ["info.inventory.item_action.err"] = "%s failed: %s", @@ -124,21 +124,19 @@ local enUSValues = { ["info.inventory.item_action.reason.BAD_REQUEST"] = "Invalid item request.", ["info.inventory.item_action.reason.BAD_ACTION"] = "Unsupported item action.", ["info.inventory.item_action.reason.ITEM_NOT_FOUND"] = "Item not found.", - ["info.inventory.item_action.reason.BOT_NOT_IN_GUILD"] = "The bot is not in a guild.", + ["info.inventory.item_action.reason.BOT_NOT_IN_GUILD"] = "Bot is not in a guild.", ["info.inventory.item_action.reason.BANKER_NOT_FOUND"] = "No banker nearby.", - ["info.inventory.item_action.reason.BANK_FULL"] = "The bot bank is full.", - ["info.inventory.item_action.reason.BAGS_FULL"] = "The bot bags are full.", + ["info.inventory.item_action.reason.BANK_FULL"] = "Bot bank is full.", + ["info.inventory.item_action.reason.BAGS_FULL"] = "Bot bags are full.", ["info.inventory.item_action.reason.GUILD_BANK_NOT_FOUND"] = "No guild bank nearby.", - ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "The bot is not in your guild.", - ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "The bot cannot deposit into the first guild bank tab.", - ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "The bot does not have the required guild bank rights.", - ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "The guild bank did not accept the item.", + ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "Bot is not in your guild.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "Bot does not have the required guild bank rights.", + ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "Guild bank did not accept the item.", ["info.inventory.item_action.reason.VENDOR_NOT_FOUND"] = "No vendor nearby.", ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "The nearby vendor does not sell this item.", - ["info.inventory.item_action.reason.VENDOR_REQUIRES_SPECIAL_CURRENCY"] = "The vendor requires another currency or item, not coins.", - ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "No nearby vendor sells this item.", - ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "The bot does not have enough money.", - ["info.inventory.item_action.reason.BUY_FAILED"] = "The purchase failed.", + ["info.inventory.item_action.reason.VENDOR_REQUIRES_SPECIAL_CURRENCY"] = "Vendor requires a different currency or item.", + ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "Bot does not have enough money.", + ["info.inventory.item_action.reason.BUY_FAILED"] = "Purchase failed.", ["info.inventory.item_action.reason.NOT_SUPPORTED"] = "This action is not supported by the bridge yet.", ["info.inventory.item_action.reason.FAILED"] = "The action failed.", ["tips.units.rti"] = "RTI", diff --git a/Locales/MultiBotAceLocale-esES.lua b/Locales/MultiBotAceLocale-esES.lua index c077e27..a27a6e2 100644 --- a/Locales/MultiBotAceLocale-esES.lua +++ b/Locales/MultiBotAceLocale-esES.lua @@ -52,6 +52,10 @@ local esESValues = { ["profession.recipes.craft.ok"] = "Creación iniciada.", ["profession.recipes.craft.failed"] = "La solicitud de creación falló.", ["profession.recipes.craft.err"] = "Creación fallida: %s", + ["profession.recipes.buy_missing"] = "Comprar", + ["profession.recipes.buy_missing.tooltip"] = "Pide al bot que compre el primer material que falte en un vendedor cercano.", + ["profession.recipes.buy_missing.pending"] = "Compra solicitada...", + ["profession.recipes.buy_missing.failed"] = "La solicitud de compra ha fallado.", ["profession.recipes.craft.reason.NO_BOT"] = "Bot no encontrado.", ["profession.recipes.craft.reason.NO_AI"] = "IA del bot no disponible.", ["profession.recipes.craft.reason.BAD_REQUEST"] = "Solicitud de receta no válida.", @@ -92,7 +96,55 @@ local esESValues = { ["character.skills.skill.arms"] = "Armas", ["character.skills.skill.fury"] = "Furia", ["character.skills.skill.protection"] = "Protección", + ["inventory.mode.bank"] = "Banco", + ["inventory.mode.gbank"] = "Banco de hermandad", + ["inventory.mode.buy"] = "Comprar", + ["inventory.bank.title"] = "Banco del bot", + ["inventory.bank.loading"] = "Cargando banco...", + ["inventory.bank.count"] = "objeto(s) en el banco", + ["inventory.bank.withdraw"] = "Retirar", + ["inventory.bank.withdraw.pending"] = "Retiro solicitado...", + ["inventory.bank.withdraw.failed"] = "La solicitud de retiro ha fallado.", + ["inventory.bank.bridge.required"] = "El bridge del banco no está conectado.", + ["inventory.gbank.title"] = "Banco de hermandad", + ["inventory.gbank.loading"] = "Cargando banco de hermandad...", + ["inventory.gbank.count"] = "objeto(s) en el banco de hermandad", + ["inventory.gbank.bridge.required"] = "El bridge del banco de hermandad no está conectado.", + ["info.inventory.action.BANK_DEPOSIT"] = "Depósito en banco", + ["info.inventory.action.BANK_WITHDRAW"] = "Retiro de banco", + ["info.inventory.action.GBANK_DEPOSIT"] = "Depósito en banco de hermandad", + ["info.inventory.action.GBANK_WITHDRAW"] = "Retiro de banco de hermandad", + ["info.inventory.action.BUY_ITEM"] = "Comprar objeto", + ["info.inventory.item_action.ok"] = "%s: %s x%d.", + ["info.inventory.item_action.err"] = "%s falló: %s", + ["info.inventory.item_action.failed"] = "%s falló.", + ["info.inventory.item_action.buy.ok"] = "Compra completada.", + ["info.inventory.item_action.buy.err"] = "Compra fallida: %s", + ["info.inventory.item_action.reason.NO_BOT"] = "Bot no encontrado.", + ["info.inventory.item_action.reason.BAD_REQUEST"] = "Solicitud de objeto inválida.", + ["info.inventory.item_action.reason.BAD_ACTION"] = "Acción de objeto no soportada.", + ["info.inventory.item_action.reason.ITEM_NOT_FOUND"] = "Objeto no encontrado.", + ["info.inventory.item_action.reason.BOT_NOT_IN_GUILD"] = "El bot no está en ninguna hermandad.", + ["info.inventory.item_action.reason.BANKER_NOT_FOUND"] = "No hay banquero cerca.", + ["info.inventory.item_action.reason.BANK_FULL"] = "El banco del bot está lleno.", + ["info.inventory.item_action.reason.BAGS_FULL"] = "Las bolsas del bot están llenas.", + ["info.inventory.item_action.reason.GUILD_BANK_NOT_FOUND"] = "No hay banco de hermandad cerca.", + ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "El bot no está en tu hermandad.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "El bot no tiene permisos para el banco de hermandad.", + ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "El banco de hermandad no aceptó el objeto.", + ["info.inventory.item_action.reason.VENDOR_NOT_FOUND"] = "No hay vendedor cerca.", + ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "El vendedor cercano no vende este objeto.", + ["info.inventory.item_action.reason.VENDOR_REQUIRES_SPECIAL_CURRENCY"] = "El vendedor requiere otra moneda u objeto.", + ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "El bot no tiene suficiente dinero.", + ["info.inventory.item_action.reason.BUY_FAILED"] = "La compra ha fallado.", + ["info.inventory.item_action.reason.NOT_SUPPORTED"] = "Esta acción aún no está soportada por el bridge.", + ["info.inventory.item_action.reason.FAILED"] = "La acción ha fallado.", ["tips.units.rti"] = "RTI", + ["tips.inventory.bank.deposit"] = "Depositar en el banco|cffffffff\nHaz clic en un objeto para mover las pilas correspondientes desde las bolsas del bot a su banco.\nEl bot debe estar cerca de un banquero.|r\n\n|cffff0000Solo afecta al bot cuyo inventario está abierto.|r", + ["tips.inventory.gbank.deposit"] = "Depositar en el banco de hermandad|cffffffff\nHaz clic en un objeto para mover las pilas correspondientes desde las bolsas del bot al primer tab del banco de hermandad.\nEl bot debe estar cerca de un banco de hermandad y tener permisos de depósito.|r\n\n|cffff0000Solo afecta al bot cuyo inventario está abierto.|r", + ["tips.inventory.buy"] = "Comprar este objeto|cffffffff\nHaz clic en un objeto para comprar una copia correspondiente en un vendedor cercano.\nEl vendedor debe vender este objeto.|r\n\n|cffff0000Solo afecta al bot cuyo inventario está abierto.|r", + ["tips.inventory.bank.open"] = "Abrir banco del bot|cffffffff\nMuestra el contenido del banco del bot mediante el bridge.\nEl bot debe estar cerca de un banquero.|r", + ["tips.inventory.gbank.open"] = "Abrir banco de hermandad del bot|cffffffff\nMuestra el contenido del banco de hermandad visible para el bot mediante el bridge.\nEl bot debe estar cerca de un banco de hermandad.|r", ["tips.disperse.main"] = "Dispersar", ["tips.disperse.set"] = "Definir distancia de dispersión", ["tips.disperse.disable"] = "Desactivar dispersión", diff --git a/Locales/MultiBotAceLocale-frFR.lua b/Locales/MultiBotAceLocale-frFR.lua index 57c1e0d..535cb04 100644 --- a/Locales/MultiBotAceLocale-frFR.lua +++ b/Locales/MultiBotAceLocale-frFR.lua @@ -54,7 +54,6 @@ local frFRValues = { ["profession.recipes.craft.err"] = "Création échouée : %s", ["profession.recipes.buy_missing"] = "Acheter", ["profession.recipes.buy_missing.tooltip"] = "Demande au bot d'acheter le premier composant manquant chez un vendeur proche.", - ["profession.recipes.buy_missing.tooltip"] = "Demande au bot d'acheter les composants manquants chez les vendeurs proches.", ["profession.recipes.buy_missing.pending"] = "Achat demandé...", ["profession.recipes.buy_missing.failed"] = "La demande d'achat a échoué.", ["profession.recipes.craft.reason.NO_BOT"] = "Bot introuvable.", diff --git a/Locales/MultiBotAceLocale-koKR.lua b/Locales/MultiBotAceLocale-koKR.lua index be63ff6..aa02cc1 100644 --- a/Locales/MultiBotAceLocale-koKR.lua +++ b/Locales/MultiBotAceLocale-koKR.lua @@ -52,6 +52,10 @@ local koKRValues = { ["profession.recipes.craft.ok"] = "제작을 시작했습니다.", ["profession.recipes.craft.failed"] = "제작 요청에 실패했습니다.", ["profession.recipes.craft.err"] = "제작 실패: %s", + ["profession.recipes.buy_missing"] = "구매", + ["profession.recipes.buy_missing.tooltip"] = "봇에게 가까운 상인에게서 첫 번째 부족한 재료를 구매하도록 요청합니다.", + ["profession.recipes.buy_missing.pending"] = "구매 요청 중...", + ["profession.recipes.buy_missing.failed"] = "구매 요청 실패.", ["profession.recipes.craft.reason.NO_BOT"] = "봇을 찾을 수 없습니다.", ["profession.recipes.craft.reason.NO_AI"] = "봇 AI를 사용할 수 없습니다.", ["profession.recipes.craft.reason.BAD_REQUEST"] = "잘못된 제조법 요청입니다.", @@ -92,7 +96,55 @@ local koKRValues = { ["character.skills.skill.arms"] = "무기", ["character.skills.skill.fury"] = "분노", ["character.skills.skill.protection"] = "방어", + ["inventory.mode.bank"] = "은행", + ["inventory.mode.gbank"] = "길드 은행", + ["inventory.mode.buy"] = "구매", + ["inventory.bank.title"] = "봇 은행", + ["inventory.bank.loading"] = "은행 불러오는 중...", + ["inventory.bank.count"] = "은행에 있는 아이템", + ["inventory.bank.withdraw"] = "인출", + ["inventory.bank.withdraw.pending"] = "인출 요청 중...", + ["inventory.bank.withdraw.failed"] = "인출 요청 실패.", + ["inventory.bank.bridge.required"] = "은행 브릿지가 연결되지 않았습니다.", + ["inventory.gbank.title"] = "길드 은행", + ["inventory.gbank.loading"] = "길드 은행 불러오는 중...", + ["inventory.gbank.count"] = "길드 은행 아이템", + ["inventory.gbank.bridge.required"] = "길드 은행 브릿지가 연결되지 않았습니다.", + ["info.inventory.action.BANK_DEPOSIT"] = "은행 입금", + ["info.inventory.action.BANK_WITHDRAW"] = "은행 인출", + ["info.inventory.action.GBANK_DEPOSIT"] = "길드 은행 입금", + ["info.inventory.action.GBANK_WITHDRAW"] = "길드 은행 인출", + ["info.inventory.action.BUY_ITEM"] = "아이템 구매", + ["info.inventory.item_action.ok"] = "%s: %s x%d.", + ["info.inventory.item_action.err"] = "%s 실패: %s", + ["info.inventory.item_action.failed"] = "%s 실패.", + ["info.inventory.item_action.buy.ok"] = "구매 완료.", + ["info.inventory.item_action.buy.err"] = "구매 실패: %s", + ["info.inventory.item_action.reason.NO_BOT"] = "봇을 찾을 수 없습니다.", + ["info.inventory.item_action.reason.BAD_REQUEST"] = "잘못된 아이템 요청입니다.", + ["info.inventory.item_action.reason.BAD_ACTION"] = "지원되지 않는 아이템 작업입니다.", + ["info.inventory.item_action.reason.ITEM_NOT_FOUND"] = "아이템을 찾을 수 없습니다.", + ["info.inventory.item_action.reason.BOT_NOT_IN_GUILD"] = "봇이 길드에 속해 있지 않습니다.", + ["info.inventory.item_action.reason.BANKER_NOT_FOUND"] = "근처에 은행원이 없습니다.", + ["info.inventory.item_action.reason.BANK_FULL"] = "봇 은행이 가득 찼습니다.", + ["info.inventory.item_action.reason.BAGS_FULL"] = "봇 가방이 가득 찼습니다.", + ["info.inventory.item_action.reason.GUILD_BANK_NOT_FOUND"] = "근처에 길드 은행이 없습니다.", + ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "봇이 당신의 길드에 속해 있지 않습니다.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "봇에게 길드 은행 권한이 없습니다.", + ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "길드 은행이 아이템을 받지 않았습니다.", + ["info.inventory.item_action.reason.VENDOR_NOT_FOUND"] = "근처에 상인이 없습니다.", + ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "근처 상인이 이 아이템을 판매하지 않습니다.", + ["info.inventory.item_action.reason.VENDOR_REQUIRES_SPECIAL_CURRENCY"] = "상인이 다른 화폐 또는 아이템을 요구합니다.", + ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "봇에게 돈이 부족합니다.", + ["info.inventory.item_action.reason.BUY_FAILED"] = "구매 실패.", + ["info.inventory.item_action.reason.NOT_SUPPORTED"] = "이 작업은 아직 브릿지에서 지원되지 않습니다.", + ["info.inventory.item_action.reason.FAILED"] = "작업 실패.", ["tips.units.rti"] = "RTI", + ["tips.inventory.bank.deposit"] = "은행에 보관|cffffffff\n아이템을 클릭하면 봇의 가방에서 은행으로 해당 스택을 이동합니다.\n봇은 은행원 근처에 있어야 합니다.|r\n\n|cffff0000열려 있는 인벤토리의 봇에게만 적용됩니다.|r", + ["tips.inventory.gbank.deposit"] = "길드 은행에 보관|cffffffff\n아이템을 클릭하면 봇의 가방에서 길드 은행 첫 번째 탭으로 해당 스택을 이동합니다.\n봇은 길드 은행 근처에 있어야 하며 입금 권한이 필요합니다.|r\n\n|cffff0000열려 있는 인벤토리의 봇에게만 적용됩니다.|r", + ["tips.inventory.buy"] = "이 아이템 구매|cffffffff\n아이템을 클릭하면 근처 상인에게서 해당 아이템을 1개 구매합니다.\n상인이 이 아이템을 판매해야 합니다.|r\n\n|cffff0000열려 있는 인벤토리의 봇에게만 적용됩니다.|r", + ["tips.inventory.bank.open"] = "봇 은행 열기|cffffffff\n브릿지를 통해 봇 은행의 내용을 표시합니다.\n봇은 은행원 근처에 있어야 합니다.|r", + ["tips.inventory.gbank.open"] = "봇 길드 은행 열기|cffffffff\n브릿지를 통해 봇이 볼 수 있는 길드 은행 내용을 표시합니다.\n봇은 길드 은행 근처에 있어야 합니다.|r", ["tips.disperse.main"] = "분산", ["tips.disperse.set"] = "분산 거리 설정", ["tips.disperse.disable"] = "분산 비활성화", diff --git a/Locales/MultiBotAceLocale-ruRU.lua b/Locales/MultiBotAceLocale-ruRU.lua index 2182fad..0a85bb6 100644 --- a/Locales/MultiBotAceLocale-ruRU.lua +++ b/Locales/MultiBotAceLocale-ruRU.lua @@ -52,6 +52,10 @@ local ruRUValues = { ["profession.recipes.craft.ok"] = "Создание начато.", ["profession.recipes.craft.failed"] = "Запрос создания не удался.", ["profession.recipes.craft.err"] = "Создание не удалось: %s", + ["profession.recipes.buy_missing"] = "Купить", + ["profession.recipes.buy_missing.tooltip"] = "Попросить бота купить первый недостающий материал у ближайшего продавца.", + ["profession.recipes.buy_missing.pending"] = "Запрос на покупку...", + ["profession.recipes.buy_missing.failed"] = "Не удалось выполнить запрос на покупку.", ["profession.recipes.craft.reason.NO_BOT"] = "Бот не найден.", ["profession.recipes.craft.reason.NO_AI"] = "ИИ бота недоступен.", ["profession.recipes.craft.reason.BAD_REQUEST"] = "Недопустимый запрос рецепта.", @@ -92,7 +96,55 @@ local ruRUValues = { ["character.skills.skill.arms"] = "Оружие", ["character.skills.skill.fury"] = "Неистовство", ["character.skills.skill.protection"] = "Защита", + ["inventory.mode.bank"] = "Банк", + ["inventory.mode.gbank"] = "Банк гильдии", + ["inventory.mode.buy"] = "Купить", + ["inventory.bank.title"] = "Банк бота", + ["inventory.bank.loading"] = "Загрузка банка...", + ["inventory.bank.count"] = "предмет(ы) в банке", + ["inventory.bank.withdraw"] = "Снять", + ["inventory.bank.withdraw.pending"] = "Запрос на снятие...", + ["inventory.bank.withdraw.failed"] = "Не удалось выполнить запрос на снятие.", + ["inventory.bank.bridge.required"] = "Банковский мост не подключён.", + ["inventory.gbank.title"] = "Банк гильдии", + ["inventory.gbank.loading"] = "Загрузка банка гильдии...", + ["inventory.gbank.count"] = "предмет(ы) в банке гильдии", + ["inventory.gbank.bridge.required"] = "Мост банка гильдии не подключён.", + ["info.inventory.action.BANK_DEPOSIT"] = "Вклад в банк", + ["info.inventory.action.BANK_WITHDRAW"] = "Снятие из банка", + ["info.inventory.action.GBANK_DEPOSIT"] = "Вклад в банк гильдии", + ["info.inventory.action.GBANK_WITHDRAW"] = "Снятие из банка гильдии", + ["info.inventory.action.BUY_ITEM"] = "Покупка предмета", + ["info.inventory.item_action.ok"] = "%s: %s x%d.", + ["info.inventory.item_action.err"] = "%s не удалось: %s", + ["info.inventory.item_action.failed"] = "%s не удалось.", + ["info.inventory.item_action.buy.ok"] = "Покупка завершена.", + ["info.inventory.item_action.buy.err"] = "Покупка не удалась: %s", + ["info.inventory.item_action.reason.NO_BOT"] = "Бот не найден.", + ["info.inventory.item_action.reason.BAD_REQUEST"] = "Неверный запрос предмета.", + ["info.inventory.item_action.reason.BAD_ACTION"] = "Неподдерживаемое действие с предметом.", + ["info.inventory.item_action.reason.ITEM_NOT_FOUND"] = "Предмет не найден.", + ["info.inventory.item_action.reason.BOT_NOT_IN_GUILD"] = "Бот не состоит в гильдии.", + ["info.inventory.item_action.reason.BANKER_NOT_FOUND"] = "Рядом нет банкира.", + ["info.inventory.item_action.reason.BANK_FULL"] = "Банк бота заполнен.", + ["info.inventory.item_action.reason.BAGS_FULL"] = "Сумки бота заполнены.", + ["info.inventory.item_action.reason.GUILD_BANK_NOT_FOUND"] = "Рядом нет банка гильдии.", + ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "Бот не в вашей гильдии.", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "У бота нет прав на использование банка гильдии.", + ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "Банк гильдии не принял предмет.", + ["info.inventory.item_action.reason.VENDOR_NOT_FOUND"] = "Рядом нет продавца.", + ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "Продавец рядом не продаёт этот предмет.", + ["info.inventory.item_action.reason.VENDOR_REQUIRES_SPECIAL_CURRENCY"] = "Продавец требует другую валюту или предмет.", + ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "У бота недостаточно денег.", + ["info.inventory.item_action.reason.BUY_FAILED"] = "Покупка не удалась.", + ["info.inventory.item_action.reason.NOT_SUPPORTED"] = "Это действие ещё не поддерживается мостом.", + ["info.inventory.item_action.reason.FAILED"] = "Действие не удалось.", ["tips.units.rti"] = "RTI", + ["tips.inventory.bank.deposit"] = "Положить в банк|cffffffff\nНажмите на предмет, чтобы переместить соответствующие стопки из сумок бота в его банк.\nБот должен находиться рядом с банкиром.|r\n\n|cffff0000Применяется только к боту, чей инвентарь открыт.|r", + ["tips.inventory.gbank.deposit"] = "Положить в банк гильдии|cffffffff\nНажмите на предмет, чтобы переместить соответствующие стопки из сумок бота в первую вкладку банка гильдии.\nБот должен быть рядом с банком гильдии и иметь права на вклад.|r\n\n|cffff0000Применяется только к боту, чей инвентарь открыт.|r", + ["tips.inventory.buy"] = "Купить этот предмет|cffffffff\nНажмите на предмет, чтобы купить один соответствующий экземпляр у ближайшего продавца.\nПродавец должен продавать этот предмет.|r\n\n|cffff0000Применяется только к боту, чей инвентарь открыт.|r", + ["tips.inventory.bank.open"] = "Открыть банк бота|cffffffff\nПоказывает содержимое банка бота через bridge.\nБот должен находиться рядом с банкиром.|r", + ["tips.inventory.gbank.open"] = "Открыть банк гильдии бота|cffffffff\nПоказывает содержимое банка гильдии, доступное боту, через bridge.\nБот должен находиться рядом с банком гильдии.|r", ["tips.disperse.main"] = "Рассредоточение", ["tips.disperse.set"] = "Задать дистанцию рассредоточения", ["tips.disperse.disable"] = "Отключить рассредоточение", diff --git a/Locales/MultiBotAceLocale-zhCN.lua b/Locales/MultiBotAceLocale-zhCN.lua index 6eb8bf4..54e9e6e 100644 --- a/Locales/MultiBotAceLocale-zhCN.lua +++ b/Locales/MultiBotAceLocale-zhCN.lua @@ -52,6 +52,10 @@ local zhCNValues = { ["profession.recipes.craft.ok"] = "已开始制作。", ["profession.recipes.craft.failed"] = "制作请求失败。", ["profession.recipes.craft.err"] = "制作失败:%s", + ["profession.recipes.buy_missing"] = "购买", + ["profession.recipes.buy_missing.tooltip"] = "让机器人从附近的商人处购买第一个缺少的材料。", + ["profession.recipes.buy_missing.pending"] = "正在请求购买...", + ["profession.recipes.buy_missing.failed"] = "购买请求失败。", ["profession.recipes.craft.reason.NO_BOT"] = "未找到机器人。", ["profession.recipes.craft.reason.NO_AI"] = "机器人 AI 不可用。", ["profession.recipes.craft.reason.BAD_REQUEST"] = "无效的配方请求。", @@ -92,7 +96,55 @@ local zhCNValues = { ["character.skills.skill.arms"] = "武器", ["character.skills.skill.fury"] = "狂怒", ["character.skills.skill.protection"] = "防护", + ["inventory.mode.bank"] = "银行", + ["inventory.mode.gbank"] = "公会银行", + ["inventory.mode.buy"] = "购买", + ["inventory.bank.title"] = "机器人银行", + ["inventory.bank.loading"] = "正在加载银行...", + ["inventory.bank.count"] = "银行中的物品", + ["inventory.bank.withdraw"] = "取出", + ["inventory.bank.withdraw.pending"] = "正在请求取出...", + ["inventory.bank.withdraw.failed"] = "取出请求失败。", + ["inventory.bank.bridge.required"] = "银行桥未连接。", + ["inventory.gbank.title"] = "公会银行", + ["inventory.gbank.loading"] = "正在加载公会银行...", + ["inventory.gbank.count"] = "公会银行中的物品", + ["inventory.gbank.bridge.required"] = "公会银行桥未连接。", + ["info.inventory.action.BANK_DEPOSIT"] = "银行存入", + ["info.inventory.action.BANK_WITHDRAW"] = "银行取出", + ["info.inventory.action.GBANK_DEPOSIT"] = "公会银行存入", + ["info.inventory.action.GBANK_WITHDRAW"] = "公会银行取出", + ["info.inventory.action.BUY_ITEM"] = "购买物品", + ["info.inventory.item_action.ok"] = "%s:%s x%d。", + ["info.inventory.item_action.err"] = "%s 失败:%s", + ["info.inventory.item_action.failed"] = "%s 失败。", + ["info.inventory.item_action.buy.ok"] = "购买完成。", + ["info.inventory.item_action.buy.err"] = "购买失败:%s", + ["info.inventory.item_action.reason.NO_BOT"] = "未找到机器人。", + ["info.inventory.item_action.reason.BAD_REQUEST"] = "无效的物品请求。", + ["info.inventory.item_action.reason.BAD_ACTION"] = "不支持的物品操作。", + ["info.inventory.item_action.reason.ITEM_NOT_FOUND"] = "未找到物品。", + ["info.inventory.item_action.reason.BOT_NOT_IN_GUILD"] = "机器人未加入任何公会。", + ["info.inventory.item_action.reason.BANKER_NOT_FOUND"] = "附近没有银行职员。", + ["info.inventory.item_action.reason.BANK_FULL"] = "机器人银行已满。", + ["info.inventory.item_action.reason.BAGS_FULL"] = "机器人的背包已满。", + ["info.inventory.item_action.reason.GUILD_BANK_NOT_FOUND"] = "附近没有公会银行。", + ["info.inventory.item_action.reason.NOT_IN_SAME_GUILD"] = "机器人不在你的公会中。", + ["info.inventory.item_action.reason.NO_GUILD_BANK_RIGHTS"] = "机器人没有公会银行权限。", + ["info.inventory.item_action.reason.GUILD_BANK_FULL"] = "公会银行未接受该物品。", + ["info.inventory.item_action.reason.VENDOR_NOT_FOUND"] = "附近没有商人。", + ["info.inventory.item_action.reason.VENDOR_DOES_NOT_SELL_ITEM"] = "附近的商人不出售该物品。", + ["info.inventory.item_action.reason.VENDOR_REQUIRES_SPECIAL_CURRENCY"] = "商人需要特殊货币或物品,而不是金币。", + ["info.inventory.item_action.reason.NOT_ENOUGH_MONEY"] = "机器人没有足够的金币。", + ["info.inventory.item_action.reason.BUY_FAILED"] = "购买失败。", + ["info.inventory.item_action.reason.NOT_SUPPORTED"] = "该操作尚未被桥接模块支持。", + ["info.inventory.item_action.reason.FAILED"] = "操作失败。", ["tips.units.rti"] = "RTI", + ["tips.inventory.bank.deposit"] = "存入银行|cffffffff\n点击物品可将机器人背包中的对应堆叠移动到其银行。\n机器人必须在银行职员附近。|r\n\n|cffff0000仅影响当前打开背包的机器人。|r", + ["tips.inventory.gbank.deposit"] = "存入公会银行|cffffffff\n点击物品可将机器人背包中的对应堆叠移动到公会银行的第一个标签页。\n机器人必须在公会银行附近并拥有存款权限。|r\n\n|cffff0000仅影响当前打开背包的机器人。|r", + ["tips.inventory.buy"] = "购买此物品|cffffffff\n点击物品可从附近的商人处购买一个对应物品。\n商人必须出售此物品。|r\n\n|cffff0000仅影响当前打开背包的机器人。|r", + ["tips.inventory.bank.open"] = "打开机器人银行|cffffffff\n通过 bridge 显示机器人的银行内容。\n机器人必须在银行职员附近。|r", + ["tips.inventory.gbank.open"] = "打开机器人公会银行|cffffffff\n通过 bridge 显示机器人可见的公会银行内容。\n机器人必须在公会银行附近。|r", ["tips.disperse.main"] = "分散", ["tips.disperse.set"] = "设置分散距离", ["tips.disperse.disable"] = "禁用分散",