Mercurial > wow > inventory
comparison Modules/Queue.lua @ 146:ebe6f90c4bb9
Fixed IM crafting so the bonus queue isn?t reset after an item is created.
author | Zerotorescue |
---|---|
date | Thu, 20 Jan 2011 00:15:09 +0100 |
parents | 6a52272a0e5a |
children | 4e5d8033ed5f |
comparison
equal
deleted
inserted
replaced
145:6a52272a0e5a | 146:ebe6f90c4bb9 |
---|---|
316 function mod:SpellCastComplete(_, unit, _, _, _, spellId) | 316 function mod:SpellCastComplete(_, unit, _, _, _, spellId) |
317 -- Sadly the item isn't put in our inventory yet so we don't know how many were made. | 317 -- Sadly the item isn't put in our inventory yet so we don't know how many were made. |
318 -- Because of that we assume the average amount was made, this isn't really the best solution, but it's pretty-est - for now. | 318 -- Because of that we assume the average amount was made, this isn't really the best solution, but it's pretty-est - for now. |
319 | 319 |
320 if unit == "player" and currentQueueItem and spellId == currentQueueItem.craft.spellId then | 320 if unit == "player" and currentQueueItem and spellId == currentQueueItem.craft.spellId then |
321 -- Make sure the old amount is accurate, this won't be updated by the spell we just finished, that item hasn't been received yet | |
322 currentQueueItem.amount = mod:GetRestockAmount(currentQueueItem.itemId, currentQueueItem.groupName); | |
323 | |
324 -- Decrease amount remaining by one quantity | 321 -- Decrease amount remaining by one quantity |
325 currentQueueItem.amount = ( currentQueueItem.amount - currentQueueItem.craft.quantity ); | 322 currentQueueItem.amount = ( currentQueueItem.amount - currentQueueItem.craft.quantity ); |
326 | 323 |
327 if currentQueueItem.amount < 1 then | 324 if currentQueueItem.amount < 1 then |
328 -- We finished crafting this item | 325 -- We finished crafting this item |
456 addon:Debug("This group (%s) has no items.", groupName); | 453 addon:Debug("This group (%s) has no items.", groupName); |
457 return; | 454 return; |
458 end | 455 end |
459 | 456 |
460 -- Retrieve group settings | 457 -- Retrieve group settings |
458 local restockTarget = addon:GetOptionByKey(groupName, "restockTarget"); | |
459 local bonusQueue = addon:GetOptionByKey(groupName, "bonusQueue"); | |
461 local minCraftingQueue = floor( addon:GetOptionByKey(groupName, "minCraftingQueue") * addon:GetOptionByKey(groupName, "restockTarget") ); -- If the minCraftingQueue is 5% and restockTarget is 60, this will result in 3 | 460 local minCraftingQueue = floor( addon:GetOptionByKey(groupName, "minCraftingQueue") * addon:GetOptionByKey(groupName, "restockTarget") ); -- If the minCraftingQueue is 5% and restockTarget is 60, this will result in 3 |
462 local priceThreshold = addon:GetOptionByKey(groupName, "priceThreshold"); | 461 local priceThreshold = addon:GetOptionByKey(groupName, "priceThreshold"); |
463 | 462 |
464 for itemId, count in pairs(addon.db.profile.groups[groupName].items) do | 463 for itemId, count in pairs(addon.db.profile.groups[groupName].items) do |
465 if craftables[itemId] then | 464 if craftables[itemId] then |
466 local amount, bonus = self:GetRestockAmount(itemId, groupName); | 465 local currentStock = addon:GetItemCount(itemId, groupName); |
467 | 466 |
468 if amount and amount >= minCraftingQueue then | 467 if currentStock >= 0 then |
469 -- If we are queuing at least one AND more than the minimum amount, then proceed | 468 -- Current stock will be -1 when no itemcount addon was found |
470 | 469 |
471 -- Auction value settings | 470 -- Calculate the amount to be queued |
472 local value = (priceThreshold ~= 0 and addon:GetAuctionValue(IdToItemLink(itemId), groupName)); | 471 local amount = ( restockTarget - currentStock ); |
473 | 472 local bonus = 0; |
474 if priceThreshold == 0 or value == -1 or value >= priceThreshold then | 473 |
475 -- If no price threshold is set or the auction value is equal to or larger than the price threshold, then proceed | 474 if currentStock == 0 and bonusQueue > 0 then |
476 | 475 -- If we have none left and the bonus queue is enabled, modify the amount to be queued |
477 self:Queue(itemId, amount, bonus, craftables[itemId], groupName); | 476 |
477 bonus = floor( ( amount * ( bonusQueue ) ) + .5 ); -- round | |
478 | |
479 -- Update amount | |
480 amount = (amount + bonus); | |
481 end | |
482 | |
483 if amount >= minCraftingQueue then | |
484 -- If we are queuing at least one AND more than the minimum amount, then proceed | |
485 | |
486 -- Get auction value when it is relevant | |
487 local value = (priceThreshold ~= 0 and addon:GetAuctionValue(IdToItemLink(itemId), groupName)); | |
488 | |
489 if priceThreshold == 0 or value == -1 or value >= priceThreshold then | |
490 -- If no price threshold is set or the auction value is equal to or larger than the price threshold, then proceed | |
491 | |
492 self:Queue(itemId, amount, bonus, craftables[itemId], groupName); | |
493 else | |
494 self:Skip(itemId, skipReasons.LOW_VALUE); | |
495 --addon:Debug("%s is valued at %s while %s is needed", IdToItemLink(itemId), tostring(value), tostring(priceThreshold)); | |
496 end | |
478 else | 497 else |
479 self:Skip(itemId, skipReasons.LOW_VALUE); | 498 if amount <= 0 then |
480 --addon:Debug("%s is valued at %s while %s is needed", IdToItemLink(itemId), tostring(value), tostring(priceThreshold)); | 499 -- less than 0 = (over)capped |
500 self:Skip(itemId, skipReasons.CAPPED); | |
501 else | |
502 -- more than 0 = below min crafting queue | |
503 self:Skip(itemId, skipReasons.MIN_CRAFTING_QUEUE); | |
504 end | |
481 end | 505 end |
482 else | 506 else |
483 if not amount then | 507 -- No item count addon |
484 -- nil = no item count addon | 508 self:Skip(itemId, skipReasons.NO_ITEMCOUNT_ADDON); |
485 self:Skip(itemId, skipReasons.NO_ITEMCOUNT_ADDON); | 509 addon:Print("No usable itemcount addon found."); |
486 addon:Print("No usable itemcount addon found."); | 510 return; |
487 return; | |
488 elseif amount <= 0 then | |
489 -- less than 0 = (over)capped | |
490 self:Skip(itemId, skipReasons.CAPPED); | |
491 else | |
492 -- more than 0 = below min crafting queue | |
493 self:Skip(itemId, skipReasons.MIN_CRAFTING_QUEUE); | |
494 end | |
495 end | 511 end |
496 else | 512 else |
497 self:Skip(itemId, skipReasons.NOT_CRAFTABLE); | 513 self:Skip(itemId, skipReasons.NOT_CRAFTABLE); |
498 end | 514 end |
499 end | |
500 end | |
501 | |
502 function mod:GetRestockAmount(itemId, groupName) | |
503 local currentStock = addon:GetItemCount(itemId, groupName); | |
504 | |
505 if currentStock >= 0 then | |
506 -- Current stock will be -1 when no itemcount addon was found | |
507 | |
508 local restockTarget = addon:GetOptionByKey(groupName, "restockTarget"); | |
509 local bonusQueue = addon:GetOptionByKey(groupName, "bonusQueue"); | |
510 | |
511 -- Calculate the amount to be queued | |
512 local amount = ( restockTarget - currentStock ); | |
513 local bonus = 0; | |
514 | |
515 if currentStock == 0 and bonusQueue > 0 then | |
516 -- If we have none left and the bonus queue is enabled, modify the amount to be queued | |
517 | |
518 bonus = floor( ( amount * ( bonusQueue ) ) + .5 ); -- round | |
519 | |
520 -- Update amount | |
521 amount = (amount + bonus); | |
522 end | |
523 | |
524 return amount, bonus; | |
525 else | |
526 return; | |
527 end | 515 end |
528 end | 516 end |
529 | 517 |
530 function mod:Queue(itemId, amount, bonus, craft, groupName) | 518 function mod:Queue(itemId, amount, bonus, craft, groupName) |
531 tinsert(queue, { | 519 tinsert(queue, { |