Add method to VaultSlots to easily add items to vaults

This commit is contained in:
Trever Fischer
2012-11-17 16:06:13 -05:00
parent 0060443619
commit 4b9b53e9da

View File

@@ -20,6 +20,45 @@ class VaultSlot(models.Model):
def __unicode__(self):
return "%s.%s: %s %s"%(self.player, self.position, self.quantity, self.item)
@classmethod
def getEmptySlots(cls, player):
return cls.objects.filter(player=player, item=None)
@classmethod
def addToInventory(cls, player, item, quantity):
neededQuantity = quantity
stackTotal = item.metadata['stack']
slots = cls.findAvailableSlots(player, item, quantity)
for s in slots:
assert(neededQuantity >= 0)
if neededQuantity == 0:
break
if s.item is None:
s.item = item
s.quantity = 0
availableCapacity = min(stackTotal-s.quantity, neededQuantity)
s.quantity = min(stackTotal, neededQuantity)
neededQuantity -= availableCapacity
print "Used", availableCapacity, "in", s, "need", neededQuantity
s.save()
assert(neededQuantity == 0)
@classmethod
def findAvailableSlots(cls, player, item, quantity):
stackTotal = item.metadata['stack']
neededQuantity = quantity
slots = []
for slot in cls.objects.filter(player=player, item=item,
quantity__lt=stackTotal):
neededQuantity -= stackTotal-slot.quantity
slots.append(slot)
for slot in cls.objects.filter(player=player, item=None):
neededQuantity -= stackTotal
slots.append(slot)
if neededQuantity > 0:
raise VaultError, "Insufficient available slots."
return slots
def send_vault_delete(sender, instance, *args, **kwargs):
slots = [
{