Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
 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)
Beispiel #5
0
 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)
Beispiel #6
0
def setBluePrint(obj, blueID, colRow):
    blues = Blueprints.blueprintList()
    blue = blues.getBlueprint(blueID)
    obj.AIPlaceGoals = blue.getRel(colRow)
Beispiel #7
0
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
Beispiel #8
0
def setBluePrint(obj,blueID,colRow):
    blues = Blueprints.blueprintList()
    blue = blues.getBlueprint(blueID)
    obj.AIPlaceGoals = blue.getRel(colRow)