diff --git a/home/charper/Downloads/TradeSkillMaster_Mailing/Modules/Groups.lua b/Modules/Groups.lua index 8349174..8ba64d5 100644 --- a/home/charper/Downloads/TradeSkillMaster_Mailing/Modules/Groups.lua +++ b/Modules/Groups.lua @@ -84,32 +84,37 @@ function private:StartSending() for itemString in pairs(data.items) do local numAvailable = (inventoryItems[itemString] or 0) - operation.keepQty if numAvailable > 0 then - local quantity, reserveQty = 0, 0 - if operation.maxQtyEnabled then - if not operation.restock then - quantity = min(numAvailable, operation.maxQty) - else - local targetQty = private:GetTargetQuantity(operation.target, itemString, operation.restockGBank) - if TSMAPI:IsPlayer(operation.target) and targetQty <= operation.maxQty then - quantity = numAvailable - else - quantity = min(numAvailable, operation.maxQty - targetQty) - end - if TSMAPI:IsPlayer(operation.target) then - -- if using restock and target == player ensure that subsequent operations don't take reserved bag inventory - reserveQty = numAvailable - (targetQty - operation.maxQty) - end - end - else - quantity = numAvailable - end - if quantity > 0 then - inventoryItems[itemString] = inventoryItems[itemString] - quantity - targets[operation.target] = targets[operation.target] or {} - targets[operation.target][itemString] = quantity - elseif reserveQty > 0 then -- some of the bag inventory is reserved so make unavailable for next operation - inventoryItems[itemString] = inventoryItems[itemString] - reserveQty - end + local quantity,reserveQty = 0, 0 + local operationTargets , targetCount = private:GetOperationTargetInformation(operation.target) + for _ , targetPlayer in pairs(operationTargets) do + targets[targetPlayer] = {targetPlayer} + if operation.maxQtyEnabled then + if not operation.restock then + quantity = min(numAvailable, operation.maxQty) + else + local targetQty = private:GetTargetQuantity(targetPlayer, itemString, operation.restockGBank) + if TSMAPI:IsPlayer(targetPlayer) and targetQty <= operation.maxQty then + quantity = numAvailable + else + quantity = min(numAvailable, operation.maxQty - targetQty) + end + if TSMAPI:IsPlayer(targetPlayer) then + -- if using restock and target == player ensure that subsequent operations don't take reserved bag inventory + reserveQty = numAvailable - (targetQty - operation.maxQty) + end + end + if reserveQty > 0 then -- some of the bag inventory is reserved so make unavailable for next operation + inventoryItems[itemString] = inventoryItems[itemString] - reserveQty + else + inventoryItems[itemString] = inventoryItems[itemString] - quantity + targets[targetPlayer][itemString] = quantity + + end + else + inventoryItems[itemString] = inventoryItems[itemString] - (numAvailable/targetCount) + targets[targetPlayer][itemString] = math.floor(numAvailable/targetCount) + end + end else -- as available quantity was used up by this operation make sure its not available for any subsequent operations inventoryItems[itemString] = nil end @@ -128,6 +133,15 @@ function private:StartSending() private:SendNextTarget() end +function private:GetOperationTargetInformation(target) + local targets = {strsplit(',',target)} + local count = 0 + for _ in pairs(targets) do + count = count + 1 + end + return targets,count +end + function private:GetTargetQuantity(player, itemString, includeGBank) local num = 0 num = num + ((TSMAPI:ModuleAPI("ItemTracker", "playerbags", player, true) or {})[itemString] or 0)