def hasResources(obj,blueID): blues = Blueprints.blueprintList() blue = blues.getBlueprint(blueID) req = blue.getRequiredResources() for i in range(len(req)): if obj.inv.findItemAmount(req[i][0])< req[i][1]: return False return True
def hasResources(obj, blueID): blues = Blueprints.blueprintList() blue = blues.getBlueprint(blueID) req = blue.getRequiredResources() for i in range(len(req)): if obj.inv.findItemAmount(req[i][0]) < req[i][1]: return False return True
def builder(obj,null): if obj.AIPlaceGoals == [] and obj.mustBuild != None and obj.yVel ==0: if obj.mustBuild != None: lowest = obj.world.topFilledRow(obj.column,1) blues = Blueprints.blueprintList() blue = blues.getBlueprint(obj.mustBuild) for i in range(blue.width): if obj.world.topFilledRow(obj.column + i,1) > lowest:#lower rows have higher row values lowest = obj.world.topFilledRow(obj.column + i,1) setBluePrint(obj,obj.mustBuild,(obj.column,lowest)) obj.currentBuildingProject = obj.mustBuild obj.mustBuild = None obj.buildStage = 1 obj.toBreak = [] for i in range(len(obj.AIPlaceGoals)): obj.toBreak.append((obj.AIPlaceGoals[i][1],obj.AIPlaceGoals[i][0])) else: if obj.AIPlaceGoals != []: if obj.buildStage == 1: if obj.toBreak != []: if obj.world.tiles[obj.toBreak[0][0]][obj.toBreak[0][1]][1] != None and obj.world.tiles[obj.toBreak[0][0]][obj.toBreak[0][1]][1].canBreak == True: obj.selectedSlot = obj.inv.findEmpty() obj.activateHeldItem((obj.toBreak[0][0]*32,obj.toBreak[0][1]*32,1),radCheck = False) else: if obj.world.tiles[obj.toBreak[0][0]][obj.toBreak[0][1]][0] != None and obj.world.tiles[obj.toBreak[0][0]][obj.toBreak[0][1]][0].canBreak == True: obj.selectedSlot = obj.inv.findEmpty() obj.activateHeldItem((obj.toBreak[0][0]*32,obj.toBreak[0][1]*32,1),radCheck = False, breakBack = True) else: del(obj.toBreak[0]) else: if hasResources(obj,obj.currentBuildingProject) == True: obj.buildStage = 2 if obj.buildStage == 2: if obj.inv.findItemAmount(obj.AIPlaceGoals[0][3]) > 0: obj.selectedSlot = obj.inv.findItem(obj.AIPlaceGoals[0][3]) if obj.activateHeldItem((obj.AIPlaceGoals[0][1]*32,obj.AIPlaceGoals[0][0]*32,1),radCheck=False) == True: del(obj.AIPlaceGoals[0]) else: obj.selectedSlot = obj.inv.findEmpty() obj.activateHeldItem((obj.AIPlaceGoals[0][1]*32,obj.AIPlaceGoals[0][0]*32,1),radCheck =False) else: obj.speak("I'm missing an item."+str(obj.AIPlaceGoals[0][3])) else: obj.buildStage = 0 if obj.town != None: obj.town.buildings.append(obj.currentBuildingProject) obj.currentbuildingProject = None
def main(self): for i in range(len(self.citizens)): if self.citizens[i].villageRole == 'Lumberjack': if self.citizens[i].toGive == None: self.citizens[i].AI = AI.lumberJack if self.citizens[i].toGive == None: if self.citizens[i].inv.findItemAmount(6) >= 80: closeCraft = self.findClosestVillager((self.citizens[i].column,self.citizens[i].row),'Crafter') if closeCraft != None: self.citizens[i].AI = AI.give self.citizens[i].AIGoal = closeCraft self.citizens[i].toGive = 6 elif self.citizens[i].villageRole == 'Builder': if self.citizens[i].toTake == (None,None): self.citizens[i].AI = AI.builder if len(self.mustBuild) > 0: if self.citizens[i].currentBuildingProject == None: self.citizens[i].mustBuild = self.mustBuild[0] del(self.mustBuild[0]) if self.citizens[i].currentBuildingProject != None: if AI.hasResources(self.citizens[i],self.citizens[i].currentBuildingProject) == False: if self.citizens[i].requiredResources == []: blues = Blueprints.blueprintList() blue = blues.getBlueprint(self.citizens[i].currentBuildingProject) req = blue.getRequiredResources() for r in range(len(req)): if self.citizens[i].inv.findItemAmount(req[r][0]) < req[r][1]: self.citizens[i].requiredResources.append((req[r][0],req[r][1] - self.citizens[i].inv.findItemAmount(req[r][0]))) else: if self.citizens[i].toTake == (None,None): chests = self.storage for l in range(len(chests)): if len(self.citizens[i].requiredResources) > 0: if chests[l].inv.findItemAmount(self.citizens[i].requiredResources[0][0]) >= self.citizens[i].requiredResources[0][1]: self.citizens[i].toTake = (self.citizens[i].requiredResources[0][0],self.citizens[i].requiredResources[0][1]) self.citizens[i].AIGoal = chests[l] self.citizens[i].AI = AI.take del(self.citizens[i].requiredResources[0]) break elif self.citizens[i].villageRole == 'Crafter': if self.citizens[i].inv.findItemAmount(6) >= 80: self.citizens[i].crafting.craftItem(8,20) self.citizens[i].crafting.craftItem(9,1) self.citizens[i].crafting.craftItem(10,1) self.transferToNearestChest(self.citizens[i],8,40) self.transferToNearestChest(self.citizens[i],9,1) self.transferToNearestChest(self.citizens[i],10,1) self.transferToNearestChest(self.citizens[i],6,20)
def main(self): for i in range(len(self.citizens)): if self.citizens[i].villageRole == 'Lumberjack': if self.citizens[i].toGive == None: self.citizens[i].AI = AI.lumberJack if self.citizens[i].toGive == None: if self.citizens[i].inv.findItemAmount(6) >= 80: closeCraft = self.findClosestVillager( (self.citizens[i].column, self.citizens[i].row), 'Crafter') if closeCraft != None: self.citizens[i].AI = AI.give self.citizens[i].AIGoal = closeCraft self.citizens[i].toGive = 6 elif self.citizens[i].villageRole == 'Builder': if self.citizens[i].toTake == (None, None): self.citizens[i].AI = AI.builder if len(self.mustBuild) > 0: if self.citizens[i].currentBuildingProject == None: self.citizens[i].mustBuild = self.mustBuild[0] del (self.mustBuild[0]) if self.citizens[i].currentBuildingProject != None: if AI.hasResources( self.citizens[i], self.citizens[i].currentBuildingProject) == False: if self.citizens[i].requiredResources == []: blues = Blueprints.blueprintList() blue = blues.getBlueprint( self.citizens[i].currentBuildingProject) req = blue.getRequiredResources() for r in range(len(req)): if self.citizens[i].inv.findItemAmount( req[r][0]) < req[r][1]: self.citizens[i].requiredResources.append( (req[r][0], req[r][1] - self.citizens[i].inv.findItemAmount( req[r][0]))) else: if self.citizens[i].toTake == (None, None): chests = self.storage for l in range(len(chests)): if len(self.citizens[i].requiredResources ) > 0: if chests[l].inv.findItemAmount( self.citizens[i]. requiredResources[0] [0]) >= self.citizens[ i].requiredResources[0][1]: self.citizens[i].toTake = ( self.citizens[i]. requiredResources[0][0], self.citizens[i]. requiredResources[0][1]) self.citizens[i].AIGoal = chests[l] self.citizens[i].AI = AI.take del (self.citizens[i]. requiredResources[0]) break elif self.citizens[i].villageRole == 'Crafter': if self.citizens[i].inv.findItemAmount(6) >= 80: self.citizens[i].crafting.craftItem(8, 20) self.citizens[i].crafting.craftItem(9, 1) self.citizens[i].crafting.craftItem(10, 1) self.transferToNearestChest(self.citizens[i], 8, 40) self.transferToNearestChest(self.citizens[i], 9, 1) self.transferToNearestChest(self.citizens[i], 10, 1) self.transferToNearestChest(self.citizens[i], 6, 20)
def setBluePrint(obj, blueID, colRow): blues = Blueprints.blueprintList() blue = blues.getBlueprint(blueID) obj.AIPlaceGoals = blue.getRel(colRow)
def builder(obj, null): if obj.AIPlaceGoals == [] and obj.mustBuild != None and obj.yVel == 0: if obj.mustBuild != None: lowest = obj.world.topFilledRow(obj.column, 1) blues = Blueprints.blueprintList() blue = blues.getBlueprint(obj.mustBuild) for i in range(blue.width): if obj.world.topFilledRow( obj.column + i, 1) > lowest: #lower rows have higher row values lowest = obj.world.topFilledRow(obj.column + i, 1) setBluePrint(obj, obj.mustBuild, (obj.column, lowest)) obj.currentBuildingProject = obj.mustBuild obj.mustBuild = None obj.buildStage = 1 obj.toBreak = [] for i in range(len(obj.AIPlaceGoals)): obj.toBreak.append( (obj.AIPlaceGoals[i][1], obj.AIPlaceGoals[i][0])) else: if obj.AIPlaceGoals != []: if obj.buildStage == 1: if obj.toBreak != []: if obj.world.tiles[obj.toBreak[0][0]][obj.toBreak[0][1]][ 1] != None and obj.world.tiles[obj.toBreak[0][0]][ obj.toBreak[0][1]][1].canBreak == True: obj.selectedSlot = obj.inv.findEmpty() obj.activateHeldItem((obj.toBreak[0][0] * 32, obj.toBreak[0][1] * 32, 1), radCheck=False) else: if obj.world.tiles[obj.toBreak[0][0]][obj.toBreak[0][ 1]][0] != None and obj.world.tiles[ obj.toBreak[0][0]][ obj.toBreak[0][1]][0].canBreak == True: obj.selectedSlot = obj.inv.findEmpty() obj.activateHeldItem((obj.toBreak[0][0] * 32, obj.toBreak[0][1] * 32, 1), radCheck=False, breakBack=True) else: del (obj.toBreak[0]) else: if hasResources(obj, obj.currentBuildingProject) == True: obj.buildStage = 2 if obj.buildStage == 2: if obj.inv.findItemAmount(obj.AIPlaceGoals[0][3]) > 0: obj.selectedSlot = obj.inv.findItem(obj.AIPlaceGoals[0][3]) if obj.activateHeldItem((obj.AIPlaceGoals[0][1] * 32, obj.AIPlaceGoals[0][0] * 32, 1), radCheck=False) == True: del (obj.AIPlaceGoals[0]) else: obj.selectedSlot = obj.inv.findEmpty() obj.activateHeldItem((obj.AIPlaceGoals[0][1] * 32, obj.AIPlaceGoals[0][0] * 32, 1), radCheck=False) else: obj.speak("I'm missing an item." + str(obj.AIPlaceGoals[0][3])) else: obj.buildStage = 0 if obj.town != None: obj.town.buildings.append(obj.currentBuildingProject) obj.currentbuildingProject = None
def setBluePrint(obj,blueID,colRow): blues = Blueprints.blueprintList() blue = blues.getBlueprint(blueID) obj.AIPlaceGoals = blue.getRel(colRow)