As I mentioned - probably above in this thread - handles are no item handles but 'slot handles' or better 'handles of objects that occupy one slot in a container'.
That is the reason why the query GetItemHandleForItemTemplateInInventory() (or similar ;-) does not return a tuple but a single entry for a stack of items.
Since weapons and armor are not stackable, crafting them for sale is real poison in the whole handle problem context.
Sorry to ask again: so we speak of 'handles of objects that occupy one slot in a
certain container/character inventory' and not of 'handles of objects that occupy one slot in
any container or character inventory'? So is the handle for a stack of objects or a slot with objects? And: is a new handle created when I move a stack of objects to another character inventory or container?
Though for some reason I thought there already was a trader DB somewhere, which is why I thought generic flavor NPCS like those around the docks might not regenerate based on time/level. I'd look at what calls GenTradeItems and see which _Trader's get passed.
It seems Osiris iterates all characters when the goal _NPC_Stats is initiated and starts a process to add them to DB_Trader if certain conditions are fulfilled:
PROC
CreateDefaultTradeStats((CHARACTER)_Npc)
AND
NOT DB_NoInitialTrade(_Npc)
AND
NOT DB_EvilDude(_Npc)
AND
CharacterIsTagged(_Npc, "Animal", 0)
THEN
DB_Trader(_Npc);
It doesn't except trading NPCs from trade item generation.
Side note: pickpocket requests also start the GenTradeItems process.