Add method to VaultSlots to easily add items to vaults
This commit is contained in:
@@ -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 = [
|
||||
{
|
||||
|
Reference in New Issue
Block a user