Exemple #1
0
    def getPersonalDetailsIterator(self, result):
        totalSortable = {}
        totalBases = []
        playerTeam = self.__personal.avatar.team
        playerDBID = self.__personal.avatar.accountDBID
        getVehicleInfo = self.__vehicles.getVehicleInfo
        getBotInfo = self.__common.getBotInfo
        getPlayerInfo = self.__players.getPlayerInfo
        makePlayerInfo = self.__players.makePlayerInfo
        getItemByCD = self.itemsCache.items.getItemByCD
        for _, vData in self.__personal.getVehicleCDsIterator(result):
            details = vData.get('details', {})
            enemies = []
            for (vehicleID, _), data in details.iteritems():
                vehicleInfo = getVehicleInfo(vehicleID)
                intCD = None
                if not vehicleInfo.intCD and not vehicleInfo.accountDBID:
                    if getBotInfo(vehicleID) is not None:
                        intCD = vehicleID
                else:
                    intCD = vehicleInfo.intCD
                if vehicleInfo.accountDBID == playerDBID or vehicleInfo.team == playerTeam:
                    continue
                if vehicleInfo.accountDBID:
                    playerInfo = weakref.proxy(
                        getPlayerInfo(vehicleInfo.accountDBID))
                else:
                    botInfo = getBotInfo(vehicleID)
                    botName = botInfo.realName if botInfo else ''
                    playerInfo = makePlayerInfo(realName=botName,
                                                fakeName=botName)
                vehicle = getItemByCD(intCD) if intCD else None
                sortable = VehicleDetailedInfo.makeForEnemy(
                    vehicleID, vehicle, playerInfo, data,
                    vehicleInfo.deathReason, vehicleInfo.isTeamKiller)
                if not sortable.haveInteractionDetails():
                    continue
                if (vehicleID, intCD) not in totalSortable:
                    totalSortable[vehicleID, intCD] = VehicleSummarizeInfo(
                        vehicleID, playerInfo)
                totalSortable[vehicleID, intCD].addVehicleInfo(sortable)
                enemies.append(sortable)

            bases = TeamBasesInfo(vData.get('capturePoints', 0),
                                  vData.get('droppedCapturePoints', 0))
            totalBases.append(bases)
            yield ((bases, ), sorted(enemies,
                                     key=sort_keys.VehicleInfoSortKey))

        yield (totalBases,
               sorted(totalSortable.itervalues(),
                      key=sort_keys.VehicleInfoSortKey))
        return
Exemple #2
0
    def getPersonalVehiclesInfo(self, result):
        player = weakref.proxy(self.getPlayerInfo())
        info = VehicleSummarizeInfo(0, player)
        getItemByCD = self.itemsCache.items.getItemByCD
        for intCD, records in self.__personal.getVehicleCDsIterator(result):
            critsRecords = []
            if 'details' in records:
                playerTeam = self.__personal.avatar.team
                playerDBID = self.__personal.avatar.accountDBID
                getVehicleInfo = self.__vehicles.getVehicleInfo
                details = records['details']
                for (vehicleID, _), data in details.iteritems():
                    vehicleInfo = getVehicleInfo(vehicleID)
                    if vehicleInfo.accountDBID != playerDBID and vehicleInfo.team != playerTeam:
                        critsRecords.append(data['crits'])

            info.addVehicleInfo(
                VehicleDetailedInfo.makeForVehicle(0,
                                                   getItemByCD(intCD),
                                                   player,
                                                   records,
                                                   critsRecords=critsRecords))

        info.addAvatarInfo(weakref.proxy(self.getAvatarInfo()))
        return info
Exemple #3
0
    def getPersonalDetailsIterator(self, result):
        """Gets generator to iterate details for each personal vehicle.
        Note: the last item is containing summarize information.
        :param result: dict containing results['personal'].
        :return: generator.
        """
        totalSortable = {}
        totalBases = []
        playerTeam = self.__personal.avatar.team
        playerDBID = self.__personal.avatar.accountDBID
        getVehicleInfo = self.__vehicles.getVehicleInfo
        getBotInfo = self.__common.getBotInfo
        getPlayerInfo = self.__players.getPlayerInfo
        makePlayerInfo = self.__players.makePlayerInfo
        getItemByCD = self.itemsCache.items.getItemByCD
        for _, vData in self.__personal.getVehicleCDsIterator(result):
            details = vData.get('details', {})
            enemies = []
            for (vehicleID, _), data in details.iteritems():
                vehicleInfo = getVehicleInfo(vehicleID)
                if not vehicleInfo.intCD:
                    intCD = getBotInfo(vehicleID).intCD
                else:
                    intCD = vehicleInfo.intCD
                if vehicleInfo.accountDBID == playerDBID or vehicleInfo.team == playerTeam:
                    continue
                if vehicleInfo.accountDBID:
                    playerInfo = weakref.proxy(
                        getPlayerInfo(vehicleInfo.accountDBID))
                else:
                    playerInfo = makePlayerInfo(
                        name=getBotInfo(vehicleID).name)
                sortable = VehicleDetailedInfo.makeForEnemy(
                    vehicleID, getItemByCD(intCD), playerInfo, data,
                    vehicleInfo.deathReason)
                if not sortable.haveInteractionDetails():
                    continue
                if (vehicleID, intCD) not in totalSortable:
                    totalSortable[vehicleID, intCD] = VehicleSummarizeInfo(
                        vehicleID, playerInfo)
                totalSortable[vehicleID, intCD].addVehicleInfo(sortable)
                enemies.append(sortable)

            bases = TeamBasesInfo(vData.get('capturePoints', 0),
                                  vData.get('droppedCapturePoints', 0))
            totalBases.append(bases)
            yield ((bases, ), sorted(enemies,
                                     key=sort_keys.VehicleInfoSortKey))

        yield (totalBases,
               sorted(totalSortable.itervalues(),
                      key=sort_keys.VehicleInfoSortKey))