Quantcast
Download
(15 Kb)
Download
Updated: 02/12/20 10:28 PM
Pictures
File Info
Compatibility:
Dragonhold (5.2.5)
Updated:02/12/20 10:28 PM
Created:10/14/19 10:49 PM
Monthly downloads:311
Total downloads:773
Favorites:8
MD5:
5.2.5
XL Gear Banker  Updated this week!
Version: 0.9.3
by: XL_Olsen [More]
Contact me for any questions and/or feedback (Either on ESOUI or directly through ingame whisper/mail @XL_Olsen on PC EU).

XL News (Version 0.9.3)
BIIIIIG XXXXXXL NEWS!!!! Added functionality for adding multiple items, which has been a requested feature. (See below list)
HOWEVER! Try to keep sets around 60 items, so you don't get booted from the server
  • Added functionality for "Add equipped items to set". This means that your favourite Dressing Room/Alpha Gear setups can now be used to E A S I L Y create a new set for XLGB! The button is visible during the "edit mode" in the UI.
  • Reworked item removal. Items are now removed in real time during "edit mode", however the changes can be discarded still by pressing the "toggle edit" button again (or cycling left or right). This change was made since the old way of marking items for removal was really bugged.

Description

XL Gear Banker (XLGB) is an ESO addon that strives to combat the tedious task of funneling all your gear to another character.
Got multiple healer characters? Multiple tanks? DDs? This addon might be for you!

Before XLGB:
  • Log into character with the gear you need.
  • Go to bank or house storage chest
  • For every gear piece you need, find it in your inventory and manually put it into bank/chest.
  • Log into character that needs the gear.
  • Go to bank or house storage chest
  • For every gear piece you need, find it in your bank/chest and manually withdraw it from the bank/chest.
After XLGB:

- Step 3: Use UI or keybind to deposit all gear pieces at once.
- Step 6: Use UI or keybind to withdraw all gear pieces at once.

One button! Easy!

Demo gif showing XLGB in action! (Updated for v0.9.3)

Dependencies

This addon uses the following libraries:

- LibCustomMenu
- LibDialog

These libraries are required to run the addon.


Known Issues
  • Performance issue on deposit/withdraw spam will lead to disconnect due to flooding item_move requests.



Changes version 0.9 & 0.9.3

On top of the UI changes XLGB now supports "Add currently equipped items to set"! This means that your favourite Dressing Room/Alpha Gear setups can now be used to E A S I L Y create a new set for XLGB! Also the remove item function has been reworked and is now not bugged :angel_smiley_face:




Roadmap
This is not the only change planned for the XLGB addon. I will further improve the user experience down the road with UI 2.0 as the next big goal that will assist in depositing/withdrawing sets easier (Which will phase out the confusing assigned set to chest thingy), as an alternative to depositing/withdrawing sets via keybinds. Below is a roadmap with features and improvements planned for the addon:
  • UI 2.0 (deposit/withdraw UI) (NOW DONE!!!)
  • Settings menu
  • Multi-language support
  • UI polishing (Adding tooltips etc.)



How to use the addon


Browsing sets
  • Open your chat and type in '/xlgb' to bring up the UI.
  • Use the arrows to browse your current sets

Edit sets (change name/remove items from set)
  • Open your chat and type in '/xlgb' to bring up the UI.
  • Press the edit icon (pen and paper thingy)
    • Now you can edit the name label to a choice of your own! (Press the label and edit away!)
    • Add items you currently wear using the button that states it does literally this.
    • Remove items using the 'X' icon to the right of the item you want removed. (If you regret your choice, you can discard your changes!)
  • Now you have a choice:
    • Discard changes by clicking the "cancel icon" that replaced the edit icon. (If you've made changes a dialog will pop up to confirm)
    • Accept changes by clicking the "accept icon". (If you've marked items for removal a dialog will pop up to confirm)
    • Remove the set by click the "minus icon". (If the set is not empty a dialog will pop up to confirm)

Adding new sets
  • Open your chat and type in '/xlgb' to bring up the UI.
  • Use the '+' to add a new set.
  • You now enter 'edit' mode. (Look above for explanation)

Removing sets

See "Edit sets" above at (3.3).

Add items to a gear set

(New in version 0.9.3+)
You can now add all your currently equipped items by opening the ui with "/xlgb", press the edit icon, and press the button "Add equipped items to set".

If you have atleast 1 set you can right-click any armor or weapon in your bank, inventory or even equipped items, an extra item in the drop-down menu will appear reading 'XLGB add >'.
If you hover over this menu you'll see all your sets, and if you click on of the sets the item you've right-clicked will be added to that set.

Remove items from a gear set

Accidentally added an item to the wrong set? Fear not!
As an alternative to removing items through the "edit mode" in the "/xlgb" UI I've kept the old way of removing items.
When an item belongs to a set a new menu item appears in the drop-down menu, similar to adding items, this menu item reads 'XLGB remove >'.
Clicking on one of the sets listed in the sub-menu will result in removing that gear piece from the set again.

Depositing/withdrawing gear

With UI 2.0 you can now deposit/withdraw currently displayed set directly through the UI! Open your bank/storage and the UI will appear with 2 buttons at the bottom of the UI saying "Deposit" and "Withdraw". These will deposit/withdraw the set you're currently looking at, easy as that! As an alternative to the UI, keybindings are also offered in keybindings menu that will deposit/withdraw specific sets.



List of slash_commands

/xlgb
Brings up the UI

/xlgb_debug
Toggles debug mode. (Note: quite verbose)

/xlgb_help
Prints out these commands in the chat.



Other
Github @ https://github.com/XLOlsen/XLGearBanker

Thanks to ESOUI wiki and other addon developers for inspiration, as this is my first ever addon, I've been reading through alot of code to get me started and help me write this addon.
[size="4"]Version 0.9.3 - Add equipped items + Remove item rework
  • Added functionality for "Add equipped items to set". The button is visible during the "edit mode" in the UI.
  • Reworked item removal. Items are now removed in real time during "edit mode", the changes can be discarded still by pressing the "toggle edit" button again (or cycling left or right).

[size="4"]Version 0.9.1 - Hotfix
Fixed a bug where calculating amount of empty bagspaces was wrong. (This bug might also be the cause of not withdrawing/depositing all items in a set - awaiting further testing).

Version 0.9 - UI 2.0
Simplified alot of the ideas I had for this and got it down to two buttons "Deposit" and "Withdraw" that now appear when you open your bank/storage. These buttons will deposit the currently displayed set!
Other things:
  • Assign sets to storage now legacy feature
  • Adding new items to a set now sorts the set alphabetically. (To sort existing sets, just add an item and remove it again)
  • Button to toggle UI when Bank/Storage is open.
  • Fixed a bug where "Item amount" wouldn't update correctly when adding/removing items.



Version 0.8 - UI 1.0

Christmas is coming early with this new update (version 0.8). An XL change that alot of people I've talked to have asked for (including myself). The XLGB addon is getting its UI and is now not a complete mess to setup anymore! What this UI update includes is a UI that would help you track your sets, create new sets, and edit current sets easier than ever before! It's simple to use:

You can now actually see your sets! (BIIG)
  • Open your chat and type in '/xlgb' to bring up the UI.
  • Use the arrows to browse your current sets


New way to edit sets! (change name/remove items from set)
  • Open your chat and type in '/xlgb' to bring up the UI.
  • Press the edit icon (pen and paper thingy)
    • Now you can edit the name label to a choice of your own! (Press the label and edit away!)
    • Mark items for removal by using the 'X' icon to the right of the item you want removed. (If you regret your choice, press the cancel button to unmark it again!)
  • Now you have a choice:
    • Discard changes by clicking the "cancel icon" that replaced the edit icon. (If you've made changes a dialog will pop up to confirm)
    • Accept changes by clicking the "accept icon". (If you've marked items for removal a dialog will pop up to confirm)
    • Remove the set by click the "minus icon". (If the set is not empty a dialog will pop up to confirm)

Adding new sets (The EZ Clap way)
  • Open your chat and type in '/xlgb' to bring up the UI.
  • Use the '+' to add a new set.
  • You now enter 'edit' mode. (Look above for explanation)

Removing sets (YEET)

See "Edit sets" above at (3.3).

Roadmap
This is not the only change planned for the XLGB addon. I will further improve the user experience down the road with UI 2.0 as the next big goal that will assist in depositing/withdrawing sets easier (Which will phase out the confusing assigned set to chest thingy), as an alternative to depositing/withdrawing sets via keybinds. Below is a roadmap with features and improvements planned for the addon:
  • UI 2.0 (deposit/withdraw UI)
  • Settings menu
  • Multi-language support
  • UI polishing (Adding tooltips etc.)

Version 0.7.3.1 Hotfix!
  • Fixed bug when using /xlgb_removeset setNumber

Version 0.7.3
  • Editing gearSets now automatically updates the storage assigned sets aswell. (No need to manually reassign set to chest)
  • Added /xlgb_clearassigned command.
  • Updated /xlgb_help message
Optional Files (0)


Archived Files (5)
File Name
Version
Size
Uploader
Date
0.9.1
14kB
XL_Olsen
01/29/20 08:02 AM
0.9
13kB
XL_Olsen
12/15/19 02:39 AM
0.8
15kB
XL_Olsen
12/13/19 12:46 AM
0.7.3.1
13kB
XL_Olsen
10/17/19 05:07 AM
0.7
14kB
XL_Olsen
10/14/19 10:49 PM


Post A Reply Comment Options
Unread 02/15/20, 04:09 AM  
Baertram
 
Baertram's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2623
File comments: 3035
Uploads: 57
Aren't there events fired like event_inventory_single_slot_updated (once as item got removed from bag_backpack/bag_worn and again as item reaches bag_babk e.g.) where you could register a callback function and after the item reaches the bag wait a bit then move the next? Maybe this works as a throttle.

btw slight visual bug:
If I manually change the hieght of the XLGB UI the scrollbar does not update properly. It stays the same height and thus scrolling looks weird.
If I switch the active selected gear in the UI the scrollbar updates again (duie to the list's refresh I guess).

Originally Posted by XL_Olsen
Edit 2: Also this doesn't seem to help either. Same problem persists:

Lua Code:
  1. local function moveGear(sourceBag, itemsToMove, targetBag, availableBagSpaces)
  2.   --Move each item of the specified gearset from sourceBag to targetBag
  3.   for i, itemEntry in ipairs(itemsToMove) do
  4.     zo_callLater(function()
  5.       moveItem(sourceBag, itemEntry.index, targetBag, availableBagSpaces[i]) end,
  6.       200
  7.     )
  8.   end
  9. end

Edit: So I quickly tried again with zo_callLater. The delay values I used for testing was 200, 2000 and 5000. What happens is that it seems like it would delay every single request by the delay time, however the delay would not add up and the staggering of requests remained the same (just with e.g. the 2 sec wait time before anything happened.)

Lua Code:
  1. local function moveItem(sourceBag, itemIndex, targetBag, availableSpace)
  2.   local moveSuccesful = false
  3.   moveSuccesful = CallSecureProtected("RequestMoveItem", sourceBag, itemIndex, targetBag, availableSpace, 1)
  4.   if moveSuccesful then
  5.     easyDebug("Item move: Success!")
  6.   end
  7. end
  8.  
  9. local function moveItemDelayed(sourceBag, itemIndex, targetBag, availableSpace)
  10.   zo_callLater(function () moveItem(sourceBag, itemIndex, targetBag, availableSpace) end, 2000)
  11. end
  12.  
  13. local function moveGear(sourceBag, itemsToMove, targetBag, availableBagSpaces)
  14.   --Move each item of the specified gearset from sourceBag to targetBag
  15.   for i, itemEntry in ipairs(itemsToMove) do
  16.     moveItemDelayed(sourceBag, itemEntry.index, targetBag, availableBagSpaces[i])
  17.   end
  18. end

Yeah I was suspecting as much. The amount of items able to be moved changing with the amount of addons sending requests makes sense too. I tried adding a delay before with no success, I guess I didn't add a high enough timer hmm. It would indeed be nice knowing that the addon will not boot you from the server without compromising the snappy/instant feel of moving items too much. Thanks for your insight !

Originally Posted by Baertram
Booted from server
This happens each time addons send too much messages due to raised events or usage of items, banking operations, creating of items by crafting, deconstruction etc. in a too short period of time.

You can always add some delay in between the operations or craft in stacks of a max amount of items (you alwas need to test what amounts the server will allow here AND having many addons enabled your raise more messages to the server so that with your addon only it will be 50 items but with 5 addons enabled it will be <50 items than.)

A working solution so far is the usage of e.g.
zo_callLater(function()
Lua Code:
  1. --your code here
  2. ), delayInMilliseconds)
in between the operations / stack of operations.

Delay will be increased each time so the next operation starts after the before one finished etc.
e.g. mass deconstruction of items before Multicraft was implmented into the vanilla UI was causing the server to boot you if you had no delay in between.
Adding a 200+ms delay in between worked and you did not get booted anymore.
Report comment to moderator  
Reply With Quote
Unread 02/13/20, 05:30 AM  
XL_Olsen
AddOn Author - Click to view AddOns

Forum posts: 0
File comments: 5
Uploads: 1
Edit 2: Also this doesn't seem to help either. Same problem persists:

Lua Code:
  1. local function moveGear(sourceBag, itemsToMove, targetBag, availableBagSpaces)
  2.   --Move each item of the specified gearset from sourceBag to targetBag
  3.   for i, itemEntry in ipairs(itemsToMove) do
  4.     zo_callLater(function()
  5.       moveItem(sourceBag, itemEntry.index, targetBag, availableBagSpaces[i]) end,
  6.       200
  7.     )
  8.   end
  9. end

Edit: So I quickly tried again with zo_callLater. The delay values I used for testing was 200, 2000 and 5000. What happens is that it seems like it would delay every single request by the delay time, however the delay would not add up and the staggering of requests remained the same (just with e.g. the 2 sec wait time before anything happened.)

Lua Code:
  1. local function moveItem(sourceBag, itemIndex, targetBag, availableSpace)
  2.   local moveSuccesful = false
  3.   moveSuccesful = CallSecureProtected("RequestMoveItem", sourceBag, itemIndex, targetBag, availableSpace, 1)
  4.   if moveSuccesful then
  5.     easyDebug("Item move: Success!")
  6.   end
  7. end
  8.  
  9. local function moveItemDelayed(sourceBag, itemIndex, targetBag, availableSpace)
  10.   zo_callLater(function () moveItem(sourceBag, itemIndex, targetBag, availableSpace) end, 2000)
  11. end
  12.  
  13. local function moveGear(sourceBag, itemsToMove, targetBag, availableBagSpaces)
  14.   --Move each item of the specified gearset from sourceBag to targetBag
  15.   for i, itemEntry in ipairs(itemsToMove) do
  16.     moveItemDelayed(sourceBag, itemEntry.index, targetBag, availableBagSpaces[i])
  17.   end
  18. end

Yeah I was suspecting as much. The amount of items able to be moved changing with the amount of addons sending requests makes sense too. I tried adding a delay before with no success, I guess I didn't add a high enough timer hmm. It would indeed be nice knowing that the addon will not boot you from the server without compromising the snappy/instant feel of moving items too much. Thanks for your insight !

Originally Posted by Baertram
Booted from server
This happens each time addons send too much messages due to raised events or usage of items, banking operations, creating of items by crafting, deconstruction etc. in a too short period of time.

You can always add some delay in between the operations or craft in stacks of a max amount of items (you alwas need to test what amounts the server will allow here AND having many addons enabled your raise more messages to the server so that with your addon only it will be 50 items but with 5 addons enabled it will be <50 items than.)

A working solution so far is the usage of e.g.
zo_callLater(function()
Lua Code:
  1. --your code here
  2. ), delayInMilliseconds)
in between the operations / stack of operations.

Delay will be increased each time so the next operation starts after the before one finished etc.
e.g. mass deconstruction of items before Multicraft was implmented into the vanilla UI was causing the server to boot you if you had no delay in between.
Adding a 200+ms delay in between worked and you did not get booted anymore.
Last edited by XL_Olsen : 02/13/20 at 06:11 AM.
Report comment to moderator  
Reply With Quote
Unread 02/13/20, 03:55 AM  
Baertram
 
Baertram's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2623
File comments: 3035
Uploads: 57
Booted from server
This happens each time addons send too much messages due to raised events or usage of items, banking operations, creating of items by crafting, deconstruction etc. in a too short period of time.

You can always add some delay in between the operations or craft in stacks of a max amount of items (you alwas need to test what amounts the server will allow here AND having many addons enabled your raise more messages to the server so that with your addon only it will be 50 items but with 5 addons enabled it will be <50 items than.)

A working solution so far is the usage of e.g.
zo_callLater(function()
Lua Code:
  1. --your code here
  2. ), delayInMilliseconds)
in between the operations / stack of operations.

Delay will be increased each time so the next operation starts after the before one finished etc.
e.g. mass deconstruction of items before Multicraft was implmented into the vanilla UI was causing the server to boot you if you had no delay in between.
Adding a 200+ms delay in between worked and you did not get booted anymore.
Report comment to moderator  
Reply With Quote
Unread 12/28/19, 04:41 AM  
XL_Olsen
AddOn Author - Click to view AddOns

Forum posts: 0
File comments: 5
Uploads: 1
Re: Server Boots

(Edit: The issue with all items not getting withdrawn/deposited is now fixed! Only the booting from server remains)

Thank you for your kind words! You are 100% right about this, and I'm looking for a clean way to stagger the items as you mentioned. I fear the "instant" withdrawal/depositing of items is also what causes some items, to not withdraw/deposit at all aswell (even in smaller sets where you don't get booted e.g. look at one of the comments below).

I do have finals coming up so I don't know how much time I'll have to come up with a solution these issues currently Just letting you guys know that you've been heard and a fix will come eventually!
For now I think my suggestion would be to create sets at around 50-60 items (I've found that to be a "manageable" number), and also do some quick maths to check whether all items did withdraw/deposit (did the bank get itemNumberAmount of items upon withdrawal).

I'll leave an open issues comment here with information of current issues and the raw facts (Feel free to correct me if I've gotten any of these wrong):

Booted from server
  • Attempting to move large amount of items kicks you from the server.
  • 50-60 items seems to be the sweet spot.
  • Alternating deposit/withdraw in quick succession provides same result.

All items not getting withdrawn/deposited
  • Only happens to some users/sets.
  • Amount of items in a set seems to have no correlation (One user reports issue at 26 items, another at 46)
  • The item that does not get withdrawn/deposited seems to be the same item every time (One user reports item #1, another user reports item #22.)
  • Users with ESO+, reports this is an issue while using bank. (One user reports this issue does not happen when using storage chest, only when using his bank)

Thanks for using the addon despite its current flaws, I'm glad that it can help other ppl!

Originally Posted by sobelding
First of all, thank you so much for this addon! I can see how this will be incredibly helpful for transferring gear between alts.

Currently the addon is having issues handling large sets of gear. For example, I made a set with 106 pieces of gear (all my healer sets). I opened the bank, clicked Withdraw, but only 100 items were withdrawn. The game then booted me from the server. When I was able to log back in, I clicked Withdraw and the remaining 6 pieces were withdrawn. I then attempted to deposit the set back into the bank. This time it only deposited 29 items, and again I was booted from the server.

I'm assuming the server boots are because it considers the large amount of bank transactions all at once as spamming, so maybe this could be prevented by staggering the transactions similar to how Personal Assistant handles bulk deposits/withdrawals?
Last edited by XL_Olsen : 02/12/20 at 11:42 PM.
Report comment to moderator  
Reply With Quote
Unread 12/27/19, 09:58 AM  
sobelding

Forum posts: 0
File comments: 10
Uploads: 0
Server Boots

First of all, thank you so much for this addon! I can see how this will be incredibly helpful for transferring gear between alts.

Currently the addon is having issues handling large sets of gear. For example, I made a set with 106 pieces of gear (all my healer sets). I opened the bank, clicked Withdraw, but only 100 items were withdrawn. The game then booted me from the server. When I was able to log back in, I clicked Withdraw and the remaining 6 pieces were withdrawn. I then attempted to deposit the set back into the bank. This time it only deposited 29 items, and again I was booted from the server.

I'm assuming the server boots are because it considers the large amount of bank transactions all at once as spamming, so maybe this could be prevented by staggering the transactions similar to how Personal Assistant handles bulk deposits/withdrawals?
Report comment to moderator  
Reply With Quote
Unread 12/20/19, 07:20 AM  
SimplyArmin

Forum posts: 0
File comments: 27
Uploads: 0
Re: Re: More then 45 items

Originally Posted by XL_Olsen
Hi SimplyArmin! I had that problem before and thought I fixed it hmm. Are you using the bank or storage chest? Also are you ESO+ or no ? What item is not getting withdrawn/deposited (what number in the list)?
Originally Posted by SimplyArmin
I have a total of 46 items in a set but only 45 are getting withdrawn. Even if it withdrawn 45 items and i click again to withdraw the last item it will not do it. Also happends with deposit.
Wrong info I gave u before about withdraw... Here is the corrected issue.
So... I had all 46 items in the bank. I withdrew them and it worked. When I deposited them only 45 were deposit. 1 Perfect False God Ring didnt. Also last time i described the issue it was exactly that ring.
I have ESO+ and use the default banker. Its No. 22 in the Gear Banker List.

Right now I tested again... I removed that ring which caused issues. So my list went down from 46 to 45.
Again 1 Item didn't deposit. It was my Perfect False God Robe which was now No. 22 in the list.
So I removed the Robe as well. And now its my FG Sash which now is No. 22 and didnt deposit again.


TLDR: Withdraw works. Deposit the item No. 22 is not working in the set.
Last edited by SimplyArmin : 12/20/19 at 07:26 AM.
Report comment to moderator  
Reply With Quote
Unread 12/17/19, 08:32 PM  
XL_Olsen
AddOn Author - Click to view AddOns

Forum posts: 0
File comments: 5
Uploads: 1
Re: More then 45 items

Hi SimplyArmin! I had that problem before and thought I fixed it hmm. Are you using the bank or storage chest? Also are you ESO+ or no ? What item is not getting withdrawn/deposited (what number in the list)?
Originally Posted by SimplyArmin
I have a total of 46 items in a set but only 45 are getting withdrawn. Even if it withdrawn 45 items and i click again to withdraw the last item it will not do it. Also happends with deposit.
Last edited by XL_Olsen : 12/17/19 at 08:33 PM.
Report comment to moderator  
Reply With Quote
Unread 12/17/19, 10:30 AM  
SimplyArmin

Forum posts: 0
File comments: 27
Uploads: 0
More then 45 items

I have a total of 46 items in a set but only 45 are getting withdrawn. Even if it withdrawn 45 items and i click again to withdraw the last item it will not do it. Also happends with deposit.
Report comment to moderator  
Reply With Quote
Unread 12/17/19, 01:43 AM  
XL_Olsen
AddOn Author - Click to view AddOns

Forum posts: 0
File comments: 5
Uploads: 1
Eyo again Baertram and thank you so much for your feedback !

As for the multi-line, never thought of that something similar to what Dressing Room has I assume - That'd definitely be easy to add

I initially fiddled around a bit with the ShifterBox (for deposit/withdraw purposes) but figured the 2 buttons on the main UI would be simpler. Though I might actually use it to make it easier to add items to sets as you also suggested previously. Another thing I'd like added is an "Add currently equipped item to set X", because alot of ppl already have predefined sets in AlphaGear/Dressing Room etc., and then they could just add a whole bunch of sets easily without starting all over from scratch

I wouldn't know how to actually go about implementing drag&drop from "basic" ESO UI to my UI, but I definitely do like the idea of it - Especially since the next "big update" would be an easier way to add items
+ adding tooltips to all the buttons and having items in my UI list display as items are being displayed in the basic ESO UI inventory. Speaking of, you wouldn't know a good place to look for an easy guide/a way to get started with tooltips (Maybe an addon that implements very simple tooltips) ?


Originally Posted by Baertram
Many thanks for this great addon, again!
I'm using it to store my sets accross characters.

And therefor I'd like to request another "comment" multiline editfield upon creation/changing of a set.
Maybe a text editbox below the headline of your UI and above the + - buttons. It should be editable always as the set was created and selected in the UI.
One can write the purpose/character names e.g. into it and directly sees which characters it was made for.
Or can add other information like "use with chars abc for dungeons xyz".
This would be awesome.

And if you can manage to get it to work, maybe allow drag&drop items to your UI list to add/remove them from inventories. But this is just a nice 2 have
Last edited by XL_Olsen : 12/17/19 at 01:49 AM.
Report comment to moderator  
Reply With Quote
Unread 12/16/19, 03:33 AM  
Baertram
 
Baertram's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2623
File comments: 3035
Uploads: 57
Many thanks for this great addon, again!
I'm using it to store my sets accross characters.

And therefor I'd like to request another "comment" multiline editfield upon creation/changing of a set.
Maybe a text editbox below the headline of your UI and above the + - buttons. It should be editable always as the set was created and selected in the UI.
One can write the purpose/character names e.g. into it and directly sees which characters it was made for.
Or can add other information like "use with chars abc for dungeons xyz".
This would be awesome.

And if you can manage to get it to work, maybe allow drag&drop items to your UI list to add/remove them from inventories. But this is just a nice 2 have
Last edited by Baertram : 12/16/19 at 03:36 AM.
Report comment to moderator  
Reply With Quote
Unread 10/24/19, 11:45 AM  
Baertram
 
Baertram's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2623
File comments: 3035
Uploads: 57
You could also use the LibAddonMenu-2.0 LAM library to create a settings panel for the overview of your sets in banks and handling them. It already provides standard controls and you can alsoa dd customd efined controls to the settings menu.
This library here is nice as it provides a listbox with 2 sides where you can drag&drop or move/add items to. It maybe good to e.g. show the different banks / storage chests on one side and the sets defined in another one so you can drag&drop them from one to another etc.
https://www.esoui.com/downloads/info...hifterBox.html


Originally Posted by XL_Olsen
Originally Posted by Baertram
This looks very prommissing, thanks!
Any chance you can add multi language support for the context menu?

You can have a look at pChat, there is an easy way to support multiple language "files" dynamically.
Just define in your addon's txt file an entry like
Code:
/lang/lang_base.lua  #Contains all the strings in EN e.g.
/lang/lang_$(language).lua  # Contains the translated strings in file lang_de.lua, or lang_fr.lua or lang_jp.lua etc.
See here for the possible variables in teh manifest txt file: https://wiki.esoui.com/Addon_manifes...able_Expansion
The constant $(language) will be replaced with the 2 character client language text, e.g. de, en, fr.
If the file does not exists it will be just skipped. You can also define an empty en.lua e.g. so it will be found but nothing is loaded. The base strings should ALWAYS be loaded with e.g. english so having a base file or alwaysLoaded file as fallback is a best practice.

Then check the pChat language folder files how to lpoad the base strings and then how to load the other strings in other language files. Define your own constants like SI_XLGB_CONTEXTMENU_ADD etc.

And in your addon replace the static english texts with GetString(SI_XLGB_CONTEXTMENU_ADD) and the game will handle the correct translations from the files for you.

For texts containing values (e.g. d("[XLGB] Item " .. itemLink .. " is already in " .. gearSetName) ) you can use string.format like this:
Define a string constant SI_XLGB_PREFIX = "[XLGB] ". This will be reused for all your leading prefix texts.
Define a string constant SI_XLGB_ALREADY_IN_SET = "Item %s is already in %s"

Lua Code:
  1. d(GetString(SI_XLGB_PREFIX) .. d(string.format(GetString(SI_XLGB_ALREADY_IN_SET), itemLink , gearSetName)


German translations:
--> Ideas:
As bank and storage chest messages are quite similar:
You could even use a placeholder for "bank" or "storage" or "chest" in your messages and define texts where you can use string.format
to dynamically replace the placeholder with "storage chest" or "bank" then.


-----Strings-----
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1st line English
2nd line German

... English
... German

and so on...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Code:
--Error mesages
d("[XLGB_ERROR] GearSetNumber is invalid. Got:", gearSetNumber)
d("[XLGB_FEHLER] GearSetNummmer ist ungültig: ", gearSetNumber)

d("[XLGB_ERROR] Enter a name for the set.")
d("[XLGB_FEHLER] Bitte gib einen Namen für das Set ein.")

d("[XLGB_ERROR] A set named ".. gearSetName .." does already exist! Set names should be unique.")
d("[XLGB_FEHLER] Ein Set mit Namen ".. gearSetName .." existiert bereits! Set Namen müssen eindeutig sein.")

d("[XLGB_ERROR] Trying to move " .. numberOfItemsToMove/#itemsToMove.. "items into a bag with " .. #availableBagSpaces/numberOfAvailableSpaces .." empty slots.")
d("[XLGB_FEHLER] Versuche " .. numberOfItemsToMove/#itemsToMove.. " Gegenstände in einen Beutel mit " .. #availableBagSpaces/numberOfAvailableSpaces .." freien Plätzen zu verschieben.")

d("[XLGB_ERROR] Bank is not open, abort!")
d("[XLGB_FEHLER] Bank ist nicht geöffnet, Abbruch!")

d("[XLGB_ERROR] Cannot assign set to storage. Trying to assign " .. #itemsNotAlreadyAssigned .. " items when only " .. storageBag.slotsLeft .. " are open for assignment.")
d("[XLGB_FEHLER] Kann Set nicht der Lagertruhe zuweisen. Versuche insgesamt " .. #itemsNotAlreadyAssigned .. " Gegenstände zuzuweisen, wobei nur " .. storageBag.slotsLeft .. " übrig sind für die Zuweisung.")

d("[XLGB_ERROR] House storage chest not open, abort!")
d("[XLGB_FEHLER] Haus Lagertruhe nicht geöffnet, Abbruch!")

d("[XLGB_ERROR] Gearset already assigned to this storage chest.")
d("[XLGB_FEHLER] Gearset ist bereits dieser Lagertruhe zugewiesen.")

d("[XLGB_ERROR] Set \'" .. gearSet.name .. "\' is already not assigned to this chest.")
d("[XLGB_FEHLER] Set \'" .. gearSet.name .. "\' ist noch nicht dieser Truhe zugewiesen.")

d("[XLGB_ERROR] On item update: Couldn't reassign set \'".. gearSetAfter.name .."\' to storageBag with ID: " .. storageBagID)
d("[XLGB_FEHLER] Bei Gegenstandsaktualisierung: Konnte das Set \'".. gearSetAfter.name .."\' nicht der Lagertruhe mit ID: " .. storageBagID .. " zuweisen.")


--Texts chat output etc.
d(Item " .. itemLink .. " is already in " .. gearSetName)
d(Gegenstand " .. itemLink .. " ist bereits in " .. gearSetName)

d("[XLGB] Assigned \'" .. gearSet.name .. "\' to chest.")
d("[XLGB] \'" .. gearSet.name .. "\' wurde Truhe zugewiesen.")

d("[XLGB] Depositing " .. gearSet.name)
d("[XLGB] Einlagerung " .. gearSet.name)

d("[XLGB] Set \'" .. gearSet.name .. "\' deposited!")
d("[XLGB] Set \'" .. gearSet.name .. "\' eingelagert!")

d("[XLGB] Withdrawing " .. gearSet.name)
d("[XLGB] Auslagerung " .. gearSet.name)

d("[XLGB] Set \'" .. gearSet.name .. "\' withdrawn!")
d("[XLGB] Set \'" .. gearSet.name .. "\' ausgelagert!")

d("[XLGB] Set \'" .. gearSet.name .. "\' is no longer assigned to this chest.")
d("[XLGB] Set \'" .. gearSet.name .. "\' ist nicht länger dieser Lagertruhe zugewiesen.")

d("[XLGB] Depositing assigned items from sets: ", storageBag.assignedSets)
d("[XLGB] Lagere zugewiesene Gegenstände des Sets ein: ", storageBag.assignedSets)

d("[XLGB] Assigned items deposited!")
d("[XLGB] Zugewiesene Gegenstände eingelagert!")

d("[XLGB] Withdrawing assigned items from sets", storageBag.assignedSets )   -->Here is missing the <space>: behind sets, or you should remove the : behind the sets: of "Depositing assigned items from sets: "
d("[XLGB] Lagere zugewiesene Gegenstände des Sets aus: ", storageBag.assignedSets )

d("[XLGB] Assigned items withdrawn!")
d("[XLGB] Zugewiesene Gegenstände ausgelagert!")

d("[XLGB] Cleared storage chest assigned sets.")
d("[XLGB] Zugeweisung der Sets zur Lagertruhe wurden aufgehoben.")

d("[XLGB] Chest contains the following assigned sets:")
d("[XLGB] Truhe beinhält die folgenden zugewiesenen Sets:")

d("[XLGB] Total sets: " .. #storageBag.assignedSets/totalGearSets)
d("[XLGB] Anzahl Sets: " .. #storageBag.assignedSets/totalGearSets)

d("[XLGB] Total items: " .. #storageBag.assignedItems .. " out of " .. storageBag.size)
d("[XLGB] Anzahl Gegenstände: " .. #storageBag.assignedItems .. " von " .. storageBag.size)

d("[XLGB] Created new set: " .. gearSetName)
d("[XLGB] Neues Set erstellt: " .. gearSetName)

d("[XLGB] Removed set: " .. gearSet.name)
d("[XLGB] Set entfernt: " .. gearSet.name)

d("[XLGB] Added item " .. itemLink .. " to " .. gearSet.name)
d("[XLGB] Gegenstand " .. itemLink .. " zu " .. gearSet.name .. " hinzugefügt")

d("[XLGB] Removed item " .. itemLink .. " from " .. gearSetName)
d("[XLGB] Gegenstand " .. itemLink .. " aus " .. gearSetName .. " entfernt")

d("Set " .. i .. " = " .. gearSet.name)
d("Set " .. i .. " = " .. gearSet.name)

d("Set \'" .. gearSet.name .. "\' contains the following items:")
d("Set \'" .. gearSet.name .. "\' beinhält die folgenden Gegenstände:")

d("[XLGB] Total items = " .. #gearSet.items)
d("[XLGB] Anzahl Gegenstände = " .. #gearSet.items)

--Context menu entries
self.ADD_ITEM_TO_GEARSET = "XLGB addItem"
self.ADD_ITEM_TO_GEARSET = "XLGB Hinzufügen"

self.REMOVE_ITEM_FROM_GEARSET = "XLGB removeItem"
self.REMOVE_ITEM_FROM_GEARSET = "XLGB Entfernen"

--Keybinds
name = "Deposit Assigned",
name = "Zugewiesene Einlagern",

name = "Withdraw Assigned",
name = "Zugewiesene Auslagern",

"Deposit Gear Set <number 1 to 9>"
"Lagere Gear Set <number 1 to 9> ein"

"Withdraw Gear Set <number 1 to 9>"
"Lagere Gear Set <number 1 to 9> aus"

--Slash commands
d("\'/xlgb_sets\': Prints out saved sets to chat.")
d("\'/xlgb_sets\': Chat Ausgabe gespeicherter Sets.")

d("\'/xlgb_items setNumber\': Prints out set #(setNumber)s items to chat.")
d("\'/xlgb_items setNumber\': Chat Ausgabe der Gegenstände des Sets #(setNummer).")

d("\'/xlgb_addset setName\': Creates a new set named (setName).")
d("\'/xlgb_addset setName\': Erstellt ein neues Set mit Namen (setName).")

d("\'/xlgb_removeset setNumber\': Removes set #(setNumber).")
d("\'/xlgb_removeset setNumber\': Entfernt Set #(setNummer).")

d("\'/xlgb_deposit setNumber\': Deposit all items from set #(setNumber) into the bank.")
d("\'/xlgb_deposit setNumber\': Einlagern aller Gegenstände des Sets #(setNummer) in die Bank.")

d("\'/xlgb_withdraw setNumber\': Withdraw all items from set #(setNumber) into the player inventory.")
d("\'/xlgb_withdraw setNumber\': Auslagern aller Gegenstände des Sets #(setNummer) in das Inventar.")

d("\'/xlgb_assign setNumber\': Assigns set #(setNumber) to opened chest.")
d("\'/xlgb_assign setNumber\': Weist Set #(setNummer) der geöffneten Truhe zu.")

d("\'/xlgb_unassign setNumber\': Unassigns set #(setNumber) from opened chest.")
d("\'/xlgb_unassign setNumber\': Hebt Zuweisung des Sets #(setNummmer) zur geöffneten Truhe auf.")

d("\'/xlgb_clearassigned\': Clears the list of sets assigned to opened chest.")
d("\'/xlgb_clearassigned\': Leert die Liste der zugewiesenen Sets der geöffneten Truhe.")

d("\'/xlgb_assignedsets\': Prints out the sets assigned to opened chest.")
d("\'/xlgb_assignedsets\': Chat Ausgabe der Truhen zugewiesenen Sets.")

d("\'/xlgb_debug\': Toggles debug mode. (Note: quite verbose)")
d("\'/xlgb_debug\': Debug Modus umschalten. (Notiz: sehr wortreich)")
Hey Baertram!
Thank you for your feedback!
For sure I will look into adding multi-lang support, didn't think I'd get noticed this quick, so didn't think it'd be needed !
I'm also working on a UI module to give a better overview of saved sets and items, similar to e.g. Dressing Room (Distinguish between sets) or Inventory Insight (the way the items are listed), but I ran into problems here - Would be nice to have something other than the slash_commands but I guess they'll work while the addon is in its infant stages.
Again - Thanks for the tips, translation and how to approach multi-lang support, it's appreciated!
Report comment to moderator  
Reply With Quote
Unread 10/17/19, 12:10 PM  
XL_Olsen
AddOn Author - Click to view AddOns

Forum posts: 0
File comments: 5
Uploads: 1
Originally Posted by Baertram
This looks very prommissing, thanks!
Any chance you can add multi language support for the context menu?

You can have a look at pChat, there is an easy way to support multiple language "files" dynamically.
Just define in your addon's txt file an entry like
Code:
/lang/lang_base.lua  #Contains all the strings in EN e.g.
/lang/lang_$(language).lua  # Contains the translated strings in file lang_de.lua, or lang_fr.lua or lang_jp.lua etc.
See here for the possible variables in teh manifest txt file: https://wiki.esoui.com/Addon_manifes...able_Expansion
The constant $(language) will be replaced with the 2 character client language text, e.g. de, en, fr.
If the file does not exists it will be just skipped. You can also define an empty en.lua e.g. so it will be found but nothing is loaded. The base strings should ALWAYS be loaded with e.g. english so having a base file or alwaysLoaded file as fallback is a best practice.

Then check the pChat language folder files how to lpoad the base strings and then how to load the other strings in other language files. Define your own constants like SI_XLGB_CONTEXTMENU_ADD etc.

And in your addon replace the static english texts with GetString(SI_XLGB_CONTEXTMENU_ADD) and the game will handle the correct translations from the files for you.

For texts containing values (e.g. d("[XLGB] Item " .. itemLink .. " is already in " .. gearSetName) ) you can use string.format like this:
Define a string constant SI_XLGB_PREFIX = "[XLGB] ". This will be reused for all your leading prefix texts.
Define a string constant SI_XLGB_ALREADY_IN_SET = "Item %s is already in %s"

Lua Code:
  1. d(GetString(SI_XLGB_PREFIX) .. d(string.format(GetString(SI_XLGB_ALREADY_IN_SET), itemLink , gearSetName)


German translations:
--> Ideas:
As bank and storage chest messages are quite similar:
You could even use a placeholder for "bank" or "storage" or "chest" in your messages and define texts where you can use string.format
to dynamically replace the placeholder with "storage chest" or "bank" then.


-----Strings-----
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1st line English
2nd line German

... English
... German

and so on...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Code:
--Error mesages
d("[XLGB_ERROR] GearSetNumber is invalid. Got:", gearSetNumber)
d("[XLGB_FEHLER] GearSetNummmer ist ungültig: ", gearSetNumber)

d("[XLGB_ERROR] Enter a name for the set.")
d("[XLGB_FEHLER] Bitte gib einen Namen für das Set ein.")

d("[XLGB_ERROR] A set named ".. gearSetName .." does already exist! Set names should be unique.")
d("[XLGB_FEHLER] Ein Set mit Namen ".. gearSetName .." existiert bereits! Set Namen müssen eindeutig sein.")

d("[XLGB_ERROR] Trying to move " .. numberOfItemsToMove/#itemsToMove.. "items into a bag with " .. #availableBagSpaces/numberOfAvailableSpaces .." empty slots.")
d("[XLGB_FEHLER] Versuche " .. numberOfItemsToMove/#itemsToMove.. " Gegenstände in einen Beutel mit " .. #availableBagSpaces/numberOfAvailableSpaces .." freien Plätzen zu verschieben.")

d("[XLGB_ERROR] Bank is not open, abort!")
d("[XLGB_FEHLER] Bank ist nicht geöffnet, Abbruch!")

d("[XLGB_ERROR] Cannot assign set to storage. Trying to assign " .. #itemsNotAlreadyAssigned .. " items when only " .. storageBag.slotsLeft .. " are open for assignment.")
d("[XLGB_FEHLER] Kann Set nicht der Lagertruhe zuweisen. Versuche insgesamt " .. #itemsNotAlreadyAssigned .. " Gegenstände zuzuweisen, wobei nur " .. storageBag.slotsLeft .. " übrig sind für die Zuweisung.")

d("[XLGB_ERROR] House storage chest not open, abort!")
d("[XLGB_FEHLER] Haus Lagertruhe nicht geöffnet, Abbruch!")

d("[XLGB_ERROR] Gearset already assigned to this storage chest.")
d("[XLGB_FEHLER] Gearset ist bereits dieser Lagertruhe zugewiesen.")

d("[XLGB_ERROR] Set \'" .. gearSet.name .. "\' is already not assigned to this chest.")
d("[XLGB_FEHLER] Set \'" .. gearSet.name .. "\' ist noch nicht dieser Truhe zugewiesen.")

d("[XLGB_ERROR] On item update: Couldn't reassign set \'".. gearSetAfter.name .."\' to storageBag with ID: " .. storageBagID)
d("[XLGB_FEHLER] Bei Gegenstandsaktualisierung: Konnte das Set \'".. gearSetAfter.name .."\' nicht der Lagertruhe mit ID: " .. storageBagID .. " zuweisen.")


--Texts chat output etc.
d(Item " .. itemLink .. " is already in " .. gearSetName)
d(Gegenstand " .. itemLink .. " ist bereits in " .. gearSetName)

d("[XLGB] Assigned \'" .. gearSet.name .. "\' to chest.")
d("[XLGB] \'" .. gearSet.name .. "\' wurde Truhe zugewiesen.")

d("[XLGB] Depositing " .. gearSet.name)
d("[XLGB] Einlagerung " .. gearSet.name)

d("[XLGB] Set \'" .. gearSet.name .. "\' deposited!")
d("[XLGB] Set \'" .. gearSet.name .. "\' eingelagert!")

d("[XLGB] Withdrawing " .. gearSet.name)
d("[XLGB] Auslagerung " .. gearSet.name)

d("[XLGB] Set \'" .. gearSet.name .. "\' withdrawn!")
d("[XLGB] Set \'" .. gearSet.name .. "\' ausgelagert!")

d("[XLGB] Set \'" .. gearSet.name .. "\' is no longer assigned to this chest.")
d("[XLGB] Set \'" .. gearSet.name .. "\' ist nicht länger dieser Lagertruhe zugewiesen.")

d("[XLGB] Depositing assigned items from sets: ", storageBag.assignedSets)
d("[XLGB] Lagere zugewiesene Gegenstände des Sets ein: ", storageBag.assignedSets)

d("[XLGB] Assigned items deposited!")
d("[XLGB] Zugewiesene Gegenstände eingelagert!")

d("[XLGB] Withdrawing assigned items from sets", storageBag.assignedSets )   -->Here is missing the <space>: behind sets, or you should remove the : behind the sets: of "Depositing assigned items from sets: "
d("[XLGB] Lagere zugewiesene Gegenstände des Sets aus: ", storageBag.assignedSets )

d("[XLGB] Assigned items withdrawn!")
d("[XLGB] Zugewiesene Gegenstände ausgelagert!")

d("[XLGB] Cleared storage chest assigned sets.")
d("[XLGB] Zugeweisung der Sets zur Lagertruhe wurden aufgehoben.")

d("[XLGB] Chest contains the following assigned sets:")
d("[XLGB] Truhe beinhält die folgenden zugewiesenen Sets:")

d("[XLGB] Total sets: " .. #storageBag.assignedSets/totalGearSets)
d("[XLGB] Anzahl Sets: " .. #storageBag.assignedSets/totalGearSets)

d("[XLGB] Total items: " .. #storageBag.assignedItems .. " out of " .. storageBag.size)
d("[XLGB] Anzahl Gegenstände: " .. #storageBag.assignedItems .. " von " .. storageBag.size)

d("[XLGB] Created new set: " .. gearSetName)
d("[XLGB] Neues Set erstellt: " .. gearSetName)

d("[XLGB] Removed set: " .. gearSet.name)
d("[XLGB] Set entfernt: " .. gearSet.name)

d("[XLGB] Added item " .. itemLink .. " to " .. gearSet.name)
d("[XLGB] Gegenstand " .. itemLink .. " zu " .. gearSet.name .. " hinzugefügt")

d("[XLGB] Removed item " .. itemLink .. " from " .. gearSetName)
d("[XLGB] Gegenstand " .. itemLink .. " aus " .. gearSetName .. " entfernt")

d("Set " .. i .. " = " .. gearSet.name)
d("Set " .. i .. " = " .. gearSet.name)

d("Set \'" .. gearSet.name .. "\' contains the following items:")
d("Set \'" .. gearSet.name .. "\' beinhält die folgenden Gegenstände:")

d("[XLGB] Total items = " .. #gearSet.items)
d("[XLGB] Anzahl Gegenstände = " .. #gearSet.items)

--Context menu entries
self.ADD_ITEM_TO_GEARSET = "XLGB addItem"
self.ADD_ITEM_TO_GEARSET = "XLGB Hinzufügen"

self.REMOVE_ITEM_FROM_GEARSET = "XLGB removeItem"
self.REMOVE_ITEM_FROM_GEARSET = "XLGB Entfernen"

--Keybinds
name = "Deposit Assigned",
name = "Zugewiesene Einlagern",

name = "Withdraw Assigned",
name = "Zugewiesene Auslagern",

"Deposit Gear Set <number 1 to 9>"
"Lagere Gear Set <number 1 to 9> ein"

"Withdraw Gear Set <number 1 to 9>"
"Lagere Gear Set <number 1 to 9> aus"

--Slash commands
d("\'/xlgb_sets\': Prints out saved sets to chat.")
d("\'/xlgb_sets\': Chat Ausgabe gespeicherter Sets.")

d("\'/xlgb_items setNumber\': Prints out set #(setNumber)s items to chat.")
d("\'/xlgb_items setNumber\': Chat Ausgabe der Gegenstände des Sets #(setNummer).")

d("\'/xlgb_addset setName\': Creates a new set named (setName).")
d("\'/xlgb_addset setName\': Erstellt ein neues Set mit Namen (setName).")

d("\'/xlgb_removeset setNumber\': Removes set #(setNumber).")
d("\'/xlgb_removeset setNumber\': Entfernt Set #(setNummer).")

d("\'/xlgb_deposit setNumber\': Deposit all items from set #(setNumber) into the bank.")
d("\'/xlgb_deposit setNumber\': Einlagern aller Gegenstände des Sets #(setNummer) in die Bank.")

d("\'/xlgb_withdraw setNumber\': Withdraw all items from set #(setNumber) into the player inventory.")
d("\'/xlgb_withdraw setNumber\': Auslagern aller Gegenstände des Sets #(setNummer) in das Inventar.")

d("\'/xlgb_assign setNumber\': Assigns set #(setNumber) to opened chest.")
d("\'/xlgb_assign setNumber\': Weist Set #(setNummer) der geöffneten Truhe zu.")

d("\'/xlgb_unassign setNumber\': Unassigns set #(setNumber) from opened chest.")
d("\'/xlgb_unassign setNumber\': Hebt Zuweisung des Sets #(setNummmer) zur geöffneten Truhe auf.")

d("\'/xlgb_clearassigned\': Clears the list of sets assigned to opened chest.")
d("\'/xlgb_clearassigned\': Leert die Liste der zugewiesenen Sets der geöffneten Truhe.")

d("\'/xlgb_assignedsets\': Prints out the sets assigned to opened chest.")
d("\'/xlgb_assignedsets\': Chat Ausgabe der Truhen zugewiesenen Sets.")

d("\'/xlgb_debug\': Toggles debug mode. (Note: quite verbose)")
d("\'/xlgb_debug\': Debug Modus umschalten. (Notiz: sehr wortreich)")
Hey Baertram!
Thank you for your feedback!
For sure I will look into adding multi-lang support, didn't think I'd get noticed this quick, so didn't think it'd be needed !
I'm also working on a UI module to give a better overview of saved sets and items, similar to e.g. Dressing Room (Distinguish between sets) or Inventory Insight (the way the items are listed), but I ran into problems here - Would be nice to have something other than the slash_commands but I guess they'll work while the addon is in its infant stages.
Again - Thanks for the tips, translation and how to approach multi-lang support, it's appreciated!
Report comment to moderator  
Reply With Quote
Unread 10/17/19, 06:06 AM  
Baertram
 
Baertram's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2623
File comments: 3035
Uploads: 57
This looks very prommissing, thanks!
Any chance you can add multi language support for the context menu?

You can have a look at pChat, there is an easy way to support multiple language "files" dynamically.
Just define in your addon's txt file an entry like
Code:
/lang/lang_base.lua  #Contains all the strings in EN e.g.
/lang/lang_$(language).lua  # Contains the translated strings in file lang_de.lua, or lang_fr.lua or lang_jp.lua etc.
See here for the possible variables in teh manifest txt file: https://wiki.esoui.com/Addon_manifes...able_Expansion
The constant $(language) will be replaced with the 2 character client language text, e.g. de, en, fr.
If the file does not exists it will be just skipped. You can also define an empty en.lua e.g. so it will be found but nothing is loaded. The base strings should ALWAYS be loaded with e.g. english so having a base file or alwaysLoaded file as fallback is a best practice.

Then check the pChat language folder files how to lpoad the base strings and then how to load the other strings in other language files. Define your own constants like SI_XLGB_CONTEXTMENU_ADD etc.

And in your addon replace the static english texts with GetString(SI_XLGB_CONTEXTMENU_ADD) and the game will handle the correct translations from the files for you.

For texts containing values (e.g. d("[XLGB] Item " .. itemLink .. " is already in " .. gearSetName) ) you can use string.format like this:
Define a string constant SI_XLGB_PREFIX = "[XLGB] ". This will be reused for all your leading prefix texts.
Define a string constant SI_XLGB_ALREADY_IN_SET = "Item %s is already in %s"

Lua Code:
  1. d(GetString(SI_XLGB_PREFIX) .. d(string.format(GetString(SI_XLGB_ALREADY_IN_SET), itemLink , gearSetName)


German translations:
--> Ideas:
As bank and storage chest messages are quite similar:
You could even use a placeholder for "bank" or "storage" or "chest" in your messages and define texts where you can use string.format
to dynamically replace the placeholder with "storage chest" or "bank" then.


-----Strings-----
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1st line English
2nd line German

... English
... German

and so on...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Code:
--Error mesages
d("[XLGB_ERROR] GearSetNumber is invalid. Got:", gearSetNumber)
d("[XLGB_FEHLER] GearSetNummmer ist ungültig: ", gearSetNumber)

d("[XLGB_ERROR] Enter a name for the set.")
d("[XLGB_FEHLER] Bitte gib einen Namen für das Set ein.")

d("[XLGB_ERROR] A set named ".. gearSetName .." does already exist! Set names should be unique.")
d("[XLGB_FEHLER] Ein Set mit Namen ".. gearSetName .." existiert bereits! Set Namen müssen eindeutig sein.")

d("[XLGB_ERROR] Trying to move " .. numberOfItemsToMove/#itemsToMove.. "items into a bag with " .. #availableBagSpaces/numberOfAvailableSpaces .." empty slots.")
d("[XLGB_FEHLER] Versuche " .. numberOfItemsToMove/#itemsToMove.. " Gegenstände in einen Beutel mit " .. #availableBagSpaces/numberOfAvailableSpaces .." freien Plätzen zu verschieben.")

d("[XLGB_ERROR] Bank is not open, abort!")
d("[XLGB_FEHLER] Bank ist nicht geöffnet, Abbruch!")

d("[XLGB_ERROR] Cannot assign set to storage. Trying to assign " .. #itemsNotAlreadyAssigned .. " items when only " .. storageBag.slotsLeft .. " are open for assignment.")
d("[XLGB_FEHLER] Kann Set nicht der Lagertruhe zuweisen. Versuche insgesamt " .. #itemsNotAlreadyAssigned .. " Gegenstände zuzuweisen, wobei nur " .. storageBag.slotsLeft .. " übrig sind für die Zuweisung.")

d("[XLGB_ERROR] House storage chest not open, abort!")
d("[XLGB_FEHLER] Haus Lagertruhe nicht geöffnet, Abbruch!")

d("[XLGB_ERROR] Gearset already assigned to this storage chest.")
d("[XLGB_FEHLER] Gearset ist bereits dieser Lagertruhe zugewiesen.")

d("[XLGB_ERROR] Set \'" .. gearSet.name .. "\' is already not assigned to this chest.")
d("[XLGB_FEHLER] Set \'" .. gearSet.name .. "\' ist noch nicht dieser Truhe zugewiesen.")

d("[XLGB_ERROR] On item update: Couldn't reassign set \'".. gearSetAfter.name .."\' to storageBag with ID: " .. storageBagID)
d("[XLGB_FEHLER] Bei Gegenstandsaktualisierung: Konnte das Set \'".. gearSetAfter.name .."\' nicht der Lagertruhe mit ID: " .. storageBagID .. " zuweisen.")


--Texts chat output etc.
d(Item " .. itemLink .. " is already in " .. gearSetName)
d(Gegenstand " .. itemLink .. " ist bereits in " .. gearSetName)

d("[XLGB] Assigned \'" .. gearSet.name .. "\' to chest.")
d("[XLGB] \'" .. gearSet.name .. "\' wurde Truhe zugewiesen.")

d("[XLGB] Depositing " .. gearSet.name)
d("[XLGB] Einlagerung " .. gearSet.name)

d("[XLGB] Set \'" .. gearSet.name .. "\' deposited!")
d("[XLGB] Set \'" .. gearSet.name .. "\' eingelagert!")

d("[XLGB] Withdrawing " .. gearSet.name)
d("[XLGB] Auslagerung " .. gearSet.name)

d("[XLGB] Set \'" .. gearSet.name .. "\' withdrawn!")
d("[XLGB] Set \'" .. gearSet.name .. "\' ausgelagert!")

d("[XLGB] Set \'" .. gearSet.name .. "\' is no longer assigned to this chest.")
d("[XLGB] Set \'" .. gearSet.name .. "\' ist nicht länger dieser Lagertruhe zugewiesen.")

d("[XLGB] Depositing assigned items from sets: ", storageBag.assignedSets)
d("[XLGB] Lagere zugewiesene Gegenstände des Sets ein: ", storageBag.assignedSets)

d("[XLGB] Assigned items deposited!")
d("[XLGB] Zugewiesene Gegenstände eingelagert!")

d("[XLGB] Withdrawing assigned items from sets", storageBag.assignedSets )   -->Here is missing the <space>: behind sets, or you should remove the : behind the sets: of "Depositing assigned items from sets: "
d("[XLGB] Lagere zugewiesene Gegenstände des Sets aus: ", storageBag.assignedSets )

d("[XLGB] Assigned items withdrawn!")
d("[XLGB] Zugewiesene Gegenstände ausgelagert!")

d("[XLGB] Cleared storage chest assigned sets.")
d("[XLGB] Zugeweisung der Sets zur Lagertruhe wurden aufgehoben.")

d("[XLGB] Chest contains the following assigned sets:")
d("[XLGB] Truhe beinhält die folgenden zugewiesenen Sets:")

d("[XLGB] Total sets: " .. #storageBag.assignedSets/totalGearSets)
d("[XLGB] Anzahl Sets: " .. #storageBag.assignedSets/totalGearSets)

d("[XLGB] Total items: " .. #storageBag.assignedItems .. " out of " .. storageBag.size)
d("[XLGB] Anzahl Gegenstände: " .. #storageBag.assignedItems .. " von " .. storageBag.size)

d("[XLGB] Created new set: " .. gearSetName)
d("[XLGB] Neues Set erstellt: " .. gearSetName)

d("[XLGB] Removed set: " .. gearSet.name)
d("[XLGB] Set entfernt: " .. gearSet.name)

d("[XLGB] Added item " .. itemLink .. " to " .. gearSet.name)
d("[XLGB] Gegenstand " .. itemLink .. " zu " .. gearSet.name .. " hinzugefügt")

d("[XLGB] Removed item " .. itemLink .. " from " .. gearSetName)
d("[XLGB] Gegenstand " .. itemLink .. " aus " .. gearSetName .. " entfernt")

d("Set " .. i .. " = " .. gearSet.name)
d("Set " .. i .. " = " .. gearSet.name)

d("Set \'" .. gearSet.name .. "\' contains the following items:")
d("Set \'" .. gearSet.name .. "\' beinhält die folgenden Gegenstände:")

d("[XLGB] Total items = " .. #gearSet.items)
d("[XLGB] Anzahl Gegenstände = " .. #gearSet.items)

--Context menu entries
self.ADD_ITEM_TO_GEARSET = "XLGB addItem"
self.ADD_ITEM_TO_GEARSET = "XLGB Hinzufügen"

self.REMOVE_ITEM_FROM_GEARSET = "XLGB removeItem"
self.REMOVE_ITEM_FROM_GEARSET = "XLGB Entfernen"

--Keybinds
name = "Deposit Assigned",
name = "Zugewiesene Einlagern",

name = "Withdraw Assigned",
name = "Zugewiesene Auslagern",

"Deposit Gear Set <number 1 to 9>"
"Lagere Gear Set <number 1 to 9> ein"

"Withdraw Gear Set <number 1 to 9>"
"Lagere Gear Set <number 1 to 9> aus"

--Slash commands
d("\'/xlgb_sets\': Prints out saved sets to chat.")
d("\'/xlgb_sets\': Chat Ausgabe gespeicherter Sets.")

d("\'/xlgb_items setNumber\': Prints out set #(setNumber)s items to chat.")
d("\'/xlgb_items setNumber\': Chat Ausgabe der Gegenstände des Sets #(setNummer).")

d("\'/xlgb_addset setName\': Creates a new set named (setName).")
d("\'/xlgb_addset setName\': Erstellt ein neues Set mit Namen (setName).")

d("\'/xlgb_removeset setNumber\': Removes set #(setNumber).")
d("\'/xlgb_removeset setNumber\': Entfernt Set #(setNummer).")

d("\'/xlgb_deposit setNumber\': Deposit all items from set #(setNumber) into the bank.")
d("\'/xlgb_deposit setNumber\': Einlagern aller Gegenstände des Sets #(setNummer) in die Bank.")

d("\'/xlgb_withdraw setNumber\': Withdraw all items from set #(setNumber) into the player inventory.")
d("\'/xlgb_withdraw setNumber\': Auslagern aller Gegenstände des Sets #(setNummer) in das Inventar.")

d("\'/xlgb_assign setNumber\': Assigns set #(setNumber) to opened chest.")
d("\'/xlgb_assign setNumber\': Weist Set #(setNummer) der geöffneten Truhe zu.")

d("\'/xlgb_unassign setNumber\': Unassigns set #(setNumber) from opened chest.")
d("\'/xlgb_unassign setNumber\': Hebt Zuweisung des Sets #(setNummmer) zur geöffneten Truhe auf.")

d("\'/xlgb_clearassigned\': Clears the list of sets assigned to opened chest.")
d("\'/xlgb_clearassigned\': Leert die Liste der zugewiesenen Sets der geöffneten Truhe.")

d("\'/xlgb_assignedsets\': Prints out the sets assigned to opened chest.")
d("\'/xlgb_assignedsets\': Chat Ausgabe der Truhen zugewiesenen Sets.")

d("\'/xlgb_debug\': Toggles debug mode. (Note: quite verbose)")
d("\'/xlgb_debug\': Debug Modus umschalten. (Notiz: sehr wortreich)")
Last edited by Baertram : 10/17/19 at 07:10 AM.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: