def _sortOffer(self, offer): categoryLimitChanges = [] stackLimitChanges = [] setAccumulators = [] stackables = [] locatable = [] accumulators = [] doIds = [] for i in offer: a = i[0] if InventoryId.isLimitChange(a): changing = InventoryId.getChangeCategoryOrType(a) if InventoryId.isCategory(changing): categoryLimitChanges.append(i) elif InventoryId.isStackable(changing): stackLimitChanges.append(i) elif InventoryId.isAccumulator(changing): setAccumulators.append(i) else: print '=============EXCEPTION1 RAISED: %s' % a raise Exception, 'undefined trade category' elif InventoryId.isStackable(a): stackables.append(i) elif isLocatable(a): locatable.append(i) elif InventoryId.isAccumulator(a): accumulators.append(i) elif InventoryId.isCategory(a): doIds.append(i) else: print '=============EXCEPTION2 RAISED: %s' % a raise Exception, 'undefined trade type' offer = categoryLimitChanges + stackLimitChanges + setAccumulators + stackables + locatable + accumulators + doIds
def check1(tradeItems, limitChanges, stacks, locatable, accumulators, doIds, giving): listType = type([]) possibleTypes = (type(1), type(1L), listType) for i in tradeItems: for v in i: itemType = type(v) if itemType not in possibleTypes: raise AITradeException, 'element is the wrong type' if v > 4294967295L: raise itemType != listType and AITradeException, 'element is larger than unsigned long' else: t = i[TypeIndex] if InventoryId.isLimitChange(t): a = limitChanges.setdefault(t, [t, 0]) a[1] += i[QuantityIndex] if a[1] > 65535L: raise AITradeException, 'element is larger than unsigned short' elif InventoryId.isStackable(t): a = stacks.setdefault(t, [t, 0]) a[1] += i[QuantityIndex] if a[1] > 65535L: raise AITradeException, 'element is larger than unsigned short' elif isLocatable(t): inv = simbase.air.doId2do.get(self.inventoryId) theInvItem = inv and InvItem(i) theInvItemType = theInvItem.getType() if giving: equippableInfo = inv.getItemRequirements( theInvItemType, self.giving) if equippableInfo == None or filter( lambda x: equippableInfo[x][1] == False, equippableInfo): if theInvItemType and theInvItemType not in self.unequippables: self.unequippables.append(theInvItemType) if isStackableType(theInvItem.getCat()): for currLocatable in locatable: prevInvItem = InvItem(currLocatable) if prevInvItem.compare(theInvItem, excludeLoc=True): adjustedInvItem = prevInvItem.adjustCount( theInvItem.getCount()) locatable.remove(currLocatable) i = list(adjustedInvItem) break else: raise AITradeException, 'inventory not present' locatable.append(i) elif InventoryId.isAccumulator(t): a = accumulators.setdefault(t, [t, 0]) a[1] += i[QuantityIndex] if a[1] > 4294967295L: raise AITradeException, 'element is larger than unsigned long' elif InventoryId.isDoId(t): doIds[i[DoIdIndex]] = i return
def _sortOffer(self, offer): categoryLimitChanges = [] stackLimitChanges = [] setAccumulators = [] stackables = [] locatable = [] accumulators = [] doIds = [] for i in offer: a = i[0] if InventoryId.isLimitChange(a): changing = InventoryId.getChangeCategoryOrType(a) if InventoryId.isCategory(changing): categoryLimitChanges.append(i) elif InventoryId.isStackable(changing): stackLimitChanges.append(i) elif InventoryId.isAccumulator(changing): setAccumulators.append(i) else: print "=============EXCEPTION1 RAISED: %s" % a raise Exception, "undefined trade category" InventoryId.isCategory(changing) if InventoryId.isStackable(a): stackables.append(i) continue if isLocatable(a): locatable.append(i) continue if InventoryId.isAccumulator(a): accumulators.append(i) continue if InventoryId.isCategory(a): doIds.append(i) continue print "=============EXCEPTION2 RAISED: %s" % a raise Exception, "undefined trade type" offer = ( categoryLimitChanges + stackLimitChanges + setAccumulators + stackables + locatable + accumulators + doIds )
def check1(tradeItems, limitChanges, stacks, locatable, accumulators, doIds, giving): listType = type([]) possibleTypes = (type(1), type(0x1L), listType) for i in tradeItems: for v in i: itemType = type(v) if itemType not in possibleTypes: raise AITradeException, "element is the wrong type" if v > 0xFFFFFFFFL and itemType != listType: raise AITradeException, "element is larger than unsigned long" continue else: t = i[TypeIndex] if InventoryId.isLimitChange(t): a = limitChanges.setdefault(t, [t, 0]) a[1] += i[QuantityIndex] if a[1] > 0xFFFFL: raise AITradeException, "element is larger than unsigned short" if InventoryId.isStackable(t): a = stacks.setdefault(t, [t, 0]) a[1] += i[QuantityIndex] if a[1] > 0xFFFFL: raise AITradeException, "element is larger than unsigned short" a[1] > 0xFFFFL if isLocatable(t): inv = simbase.air.doId2do.get(self.inventoryId) if inv: theInvItem = InvItem(i) theInvItemType = theInvItem.getType() if giving: equippableInfo = inv.getItemRequirements(theInvItemType, self.giving) if ( ( equippableInfo == None or filter(lambda x: equippableInfo[x][1] == False, equippableInfo) ) and theInvItemType and theInvItemType not in self.unequippables ): self.unequippables.append(theInvItemType) if isStackableType(theInvItem.getCat()): for currLocatable in locatable: prevInvItem = InvItem(currLocatable) if prevInvItem.compare(theInvItem, excludeLoc=True): adjustedInvItem = prevInvItem.adjustCount(theInvItem.getCount()) locatable.remove(currLocatable) i = list(adjustedInvItem) break continue else: raise AITradeException, "inventory not present" locatable.append(i) continue if InventoryId.isAccumulator(t): a = accumulators.setdefault(t, [t, 0]) a[1] += i[QuantityIndex] if a[1] > 0xFFFFFFFFL: raise AITradeException, "element is larger than unsigned long" a[1] > 0xFFFFFFFFL if InventoryId.isDoId(t): doIds[i[DoIdIndex]] = i continue