Example #1
0
def packTankman(tankman, isCountPermanentSkills=True):
    def vehicleIcon(vDescr, subtype=""):
        return _ICONS_MASK % {"type": "vehicle", "subtype": subtype, "unicName": vDescr.name.replace(":", "-")}

    nativeVehicleData = {
        "typeCompDescr": tankman.vehicleNativeDescr.type.compactDescr,
        "userName": Vehicle.getShortUserName(tankman.vehicleNativeDescr.type),
        "icon": vehicleIcon(tankman.vehicleNativeDescr),
        "iconContour": vehicleIcon(tankman.vehicleNativeDescr, "contour/"),
    }
    currentVehicleData = None
    if tankman.isInTank:
        currentVehicleData = {
            "inventoryID": tankman.vehicleInvID,
            "typeCompDescr": tankman.vehicleDescr.type.compactDescr,
            "userName": Vehicle.getShortUserName(tankman.vehicleDescr.type),
            "icon": vehicleIcon(tankman.vehicleDescr),
            "iconContour": vehicleIcon(tankman.vehicleDescr, "contour/"),
        }
    skills = []
    tManFreeSkillsNum = tankman.descriptor.freeSkillsNumber
    startSkillNumber = 0 if isCountPermanentSkills else tManFreeSkillsNum
    tManSkills = tankman.skills
    for i in range(startSkillNumber, len(tManSkills)):
        skills.append(packTankmanSkill(tManSkills[i], isPermanent=True if i < tManFreeSkillsNum else False))

    return {
        "strCD": cPickle.dumps(tankman.strCD),
        "inventoryID": tankman.invID,
        "nationID": tankman.nationID,
        "firstUserName": tankman.firstUserName,
        "lastUserName": tankman.lastUserName,
        "roleName": tankman.descriptor.role,
        "rankUserName": tankman.rankUserName,
        "roleUserName": tankman.roleUserName,
        "skills": skills,
        "efficiencyRoleLevel": tankman.efficiencyRoleLevel,
        "realRoleLevel": tankman.realRoleLevel,
        "roleLevel": tankman.roleLevel,
        "icon": {
            "big": Tankman.getBigIconPath(tankman.nationID, tankman.descriptor.iconID),
            "small": Tankman.getSmallIconPath(tankman.nationID, tankman.descriptor.iconID),
            "barracks": Tankman.getBarracksIconPath(tankman.nationID, tankman.descriptor.iconID),
        },
        "iconRole": {
            "big": Tankman.getRoleBigIconPath(tankman.descriptor.role),
            "medium": Tankman.getRoleMediumIconPath(tankman.descriptor.role),
            "small": Tankman.getRoleSmallIconPath(tankman.descriptor.role),
        },
        "iconRank": {
            "big": Tankman.getRankBigIconPath(tankman.nationID, tankman.descriptor.rankID),
            "small": Tankman.getRankSmallIconPath(tankman.nationID, tankman.descriptor.rankID),
        },
        "isInTank": tankman.isInTank,
        "newSkillsCount": tankman.newSkillCount,
        "nativeVehicle": nativeVehicleData,
        "currentVehicle": currentVehicleData,
    }
def _packTankmanData(tankman, itemsCache=None):
    tankmanVehicle = itemsCache.items.getItemByCD(
        tankman.vehicleNativeDescr.type.compactDescr)
    if tankman.isInTank:
        vehicle = itemsCache.items.getVehicle(tankman.vehicleInvID)
        if vehicle is None:
            _logger.error('Cannot find vehicle for tankman: %r %r %r %r %r',
                          tankman, tankman.descriptor.role,
                          tankman.vehicle.name, tankman.firstname,
                          tankman.lastname)
            return
        vehicleID = vehicle.invID
        slot = tankman.vehicleSlotIdx
        isLocked, msg = _getTankmanLockMessage(vehicle)
        actionBtnEnabled = not isLocked
        isInCurrentTank = g_currentVehicle.isPresent(
        ) and tankmanVehicle.invID == g_currentVehicle.invID
        isInSelfVehicle = vehicle.shortUserName == tankmanVehicle.shortUserName
        isInSelfVehicleType = vehicle.type == tankmanVehicle.type
    else:
        isLocked, msg = False, ''
        actionBtnEnabled = True
        isInCurrentTank = False
        vehicleID = None
        slot = None
        isInSelfVehicle = True
        isInSelfVehicleType = True
    data = {
        'firstName': tankman.firstUserName,
        'lastName': tankman.lastUserName,
        'rank': tankman.rankUserName,
        'specializationLevel': tankman.realRoleLevel[0],
        'role': tankman.roleUserName,
        'vehicleType': tankmanVehicle.shortUserName,
        'iconFile': tankman.icon,
        'rankIconFile': tankman.iconRank,
        'roleIconFile': Tankman.getRoleBigIconPath(tankman.descriptor.role),
        'contourIconFile': tankmanVehicle.iconContour,
        'tankmanID': tankman.invID,
        'nationID': tankman.nationID,
        'typeID': tankmanVehicle.innationID,
        'roleType': tankman.descriptor.role,
        'tankType': tankmanVehicle.type,
        'inTank': tankman.isInTank,
        'compact': str(tankman.invID),
        'lastSkillLevel': tankman.descriptor.lastSkillLevel,
        'actionBtnEnabled': actionBtnEnabled,
        'inCurrentTank': isInCurrentTank,
        'vehicleID': vehicleID,
        'slot': slot,
        'locked': isLocked,
        'lockMessage': msg,
        'isInSelfVehicleClass': isInSelfVehicleType,
        'isInSelfVehicleType': isInSelfVehicle,
        'notRecruited': False
    }
    return data
def _packTankmanData(tankman, itemsCache=None, lobbyContext=None):
    tankmanVehicle = itemsCache.items.getItemByCD(
        tankman.vehicleNativeDescr.type.compactDescr)
    if tankman.isInTank:
        vehicle = itemsCache.items.getVehicle(tankman.vehicleInvID)
        vehicleID = vehicle.invID
        slot = tankman.vehicleSlotIdx
        isLocked, msg = _getTankmanLockMessage(vehicle)
        actionBtnEnabled = not isLocked
        isInCurrentTank = g_currentVehicle.isPresent(
        ) and tankmanVehicle.invID == g_currentVehicle.invID
        isInSelfVehicle = vehicle.shortUserName == tankmanVehicle.shortUserName
        isInSelfVehicleType = vehicle.type == tankmanVehicle.type
    else:
        isLocked, msg = False, ''
        actionBtnEnabled = True
        isInCurrentTank = False
        vehicleID = None
        slot = None
        isInSelfVehicle = True
        isInSelfVehicleType = True
    data = {
        'fullName': tankman.fullUserName,
        'rank': tankman.rankUserName,
        'specializationLevel': tankman.realRoleLevel[0],
        'role': tankman.roleUserName,
        'vehicleType': tankmanVehicle.shortUserName,
        'iconFile': tankman.icon,
        'rankIconFile': tankman.iconRank,
        'roleIconFile': Tankman.getRoleBigIconPath(tankman.descriptor.role),
        'contourIconFile': tankmanVehicle.iconContour,
        'tankmanID': tankman.invID,
        'nationID': tankman.nationID,
        'typeID': tankmanVehicle.innationID,
        'roleType': tankman.descriptor.role,
        'tankType': tankmanVehicle.type,
        'inTank': tankman.isInTank,
        'compact': str(tankman.invID),
        'lastSkillLevel': tankman.descriptor.lastSkillLevel,
        'actionBtnEnabled': actionBtnEnabled,
        'inCurrentTank': isInCurrentTank,
        'vehicleID': vehicleID,
        'slot': slot,
        'locked': isLocked,
        'lockMessage': msg,
        'isInSelfVehicleClass': isInSelfVehicleType,
        'isInSelfVehicleType': isInSelfVehicle,
        'notRecruited': False
    }
    if tankman.skinID != NO_CREW_SKIN_ID and lobbyContext.getServerSettings(
    ).isCrewSkinsEnabled():
        skinItem = itemsCache.items.getCrewSkin(tankman.skinID)
        iconFile = getCrewSkinIconSmallWithoutPath(skinItem.getIconID())
        data['iconFile'] = iconFile
        data['fullName'] = localizedFullName(skinItem)
    return data
Example #4
0
def packTankman(tankman, isCountPermanentSkills = True):

    def vehicleIcon(vDescr, subtype = ''):
        return _ICONS_MASK % {'type': 'vehicle',
         'subtype': subtype,
         'unicName': vDescr.name.replace(':', '-')}

    nativeVehicleData = {'typeCompDescr': tankman.vehicleNativeDescr.type.compactDescr,
     'userName': Vehicle.getShortUserName(tankman.vehicleNativeDescr.type),
     'icon': vehicleIcon(tankman.vehicleNativeDescr),
     'iconContour': vehicleIcon(tankman.vehicleNativeDescr, 'contour/')}
    currentVehicleData = None
    if tankman.isInTank:
        currentVehicleData = {'inventoryID': tankman.vehicleInvID,
         'typeCompDescr': tankman.vehicleDescr.type.compactDescr,
         'userName': Vehicle.getShortUserName(tankman.vehicleDescr.type),
         'icon': vehicleIcon(tankman.vehicleDescr),
         'iconContour': vehicleIcon(tankman.vehicleDescr, 'contour/')}
    skills = []
    tManFreeSkillsNum = tankman.descriptor.freeSkillsNumber
    startSkillNumber = 0 if isCountPermanentSkills else tManFreeSkillsNum
    tManSkills = tankman.skills
    for i in range(startSkillNumber, len(tManSkills)):
        skills.append(packTankmanSkill(tManSkills[i], isPermanent=True if i < tManFreeSkillsNum else False))

    return {'strCD': cPickle.dumps(tankman.strCD),
     'inventoryID': tankman.invID,
     'nationID': tankman.nationID,
     'firstUserName': tankman.firstUserName,
     'lastUserName': tankman.lastUserName,
     'roleName': tankman.descriptor.role,
     'rankUserName': tankman.rankUserName,
     'roleUserName': tankman.roleUserName,
     'skills': skills,
     'efficiencyRoleLevel': tankman.efficiencyRoleLevel,
     'realRoleLevel': tankman.realRoleLevel,
     'roleLevel': tankman.roleLevel,
     'icon': {'big': Tankman.getBigIconPath(tankman.nationID, tankman.descriptor.iconID),
              'small': Tankman.getSmallIconPath(tankman.nationID, tankman.descriptor.iconID),
              'barracks': Tankman.getBarracksIconPath(tankman.nationID, tankman.descriptor.iconID)},
     'iconRole': {'big': Tankman.getRoleBigIconPath(tankman.descriptor.role),
                  'medium': Tankman.getRoleMediumIconPath(tankman.descriptor.role),
                  'small': Tankman.getRoleSmallIconPath(tankman.descriptor.role)},
     'iconRank': {'big': Tankman.getRankBigIconPath(tankman.nationID, tankman.descriptor.rankID),
                  'small': Tankman.getRankSmallIconPath(tankman.nationID, tankman.descriptor.rankID)},
     'isInTank': tankman.isInTank,
     'newSkillsCount': tankman.newSkillCount,
     'nativeVehicle': nativeVehicleData,
     'currentVehicle': currentVehicleData}
Example #5
0
def _packTankmanData(tankman):
    tankmanVehicle = g_itemsCache.items.getItemByCD(tankman.vehicleNativeDescr.type.compactDescr)
    if tankman.isInTank:
        vehicle = g_itemsCache.items.getVehicle(tankman.vehicleInvID)
        if vehicle is None:
            LOG_ERROR('Cannot find vehicle for tankman: ', tankman, tankman.descriptor.role, tankman.vehicle.name, tankman.firstname, tankman.lastname)
            return
        vehicleID = vehicle.invID
        slot = tankman.vehicleSlotIdx
        isLocked, msg = _getTankmanLockMessage(vehicle)
        actionBtnEnabled = not isLocked
        isInCurrentTank = g_currentVehicle.isPresent() and tankmanVehicle.invID == g_currentVehicle.invID
        isInSelfVehicle = vehicle.shortUserName == tankmanVehicle.shortUserName
        isInSelfVehicleType = vehicle.type == tankmanVehicle.type
    else:
        isLocked, msg = False, ''
        actionBtnEnabled = True
        isInCurrentTank = False
        vehicleID = None
        slot = None
        isInSelfVehicle = True
        isInSelfVehicleType = True
    data = {'firstName': tankman.firstUserName,
     'lastName': tankman.lastUserName,
     'rank': tankman.rankUserName,
     'specializationLevel': tankman.realRoleLevel[0],
     'role': tankman.roleUserName,
     'vehicleType': tankmanVehicle.shortUserName,
     'iconFile': tankman.icon,
     'rankIconFile': tankman.iconRank,
     'roleIconFile': Tankman.getRoleBigIconPath(tankman.descriptor.role),
     'contourIconFile': tankmanVehicle.iconContour,
     'tankmanID': tankman.invID,
     'nationID': tankman.nationID,
     'typeID': tankmanVehicle.innationID,
     'roleType': tankman.descriptor.role,
     'tankType': tankmanVehicle.type,
     'inTank': tankman.isInTank,
     'compact': str(tankman.invID),
     'lastSkillLevel': tankman.descriptor.lastSkillLevel,
     'actionBtnEnabled': actionBtnEnabled,
     'inCurrentTank': isInCurrentTank,
     'vehicleID': vehicleID,
     'slot': slot,
     'locked': isLocked,
     'lockMessage': msg,
     'isInSelfVehicleClass': isInSelfVehicleType,
     'isInSelfVehicleType': isInSelfVehicle}
    return data
Example #6
0
def packTankman(tankman, isCountPermanentSkills = True):

    def vehicleIcon(vDescr, subtype = ''):
        return _ICONS_MASK % {'type': 'vehicle',
         'subtype': subtype,
         'unicName': vDescr.name.replace(':', '-')}

    nativeVehicleData = {'typeCompDescr': tankman.vehicleNativeDescr.type.compactDescr,
     'userName': tankman.vehicleNativeDescr.type.shortUserString,
     'icon': vehicleIcon(tankman.vehicleNativeDescr),
     'iconContour': vehicleIcon(tankman.vehicleNativeDescr, 'contour/')}
    currentVehicleData = None
    if tankman.isInTank:
        currentVehicleData = {'inventoryID': tankman.vehicleInvID,
         'typeCompDescr': tankman.vehicleDescr.type.compactDescr,
         'userName': tankman.vehicleDescr.type.shortUserString,
         'icon': vehicleIcon(tankman.vehicleDescr),
         'iconContour': vehicleIcon(tankman.vehicleDescr, 'contour/')}
    skills = []
    for skill in tankman.skills:
        if not (skill.name == 'brotherhood' and tankman.descriptor.isFemale and not isCountPermanentSkills):
            skills.append(packTankmanSkill(skill))

    return {'strCD': cPickle.dumps(tankman.strCD),
     'inventoryID': tankman.invID,
     'nationID': tankman.nationID,
     'firstUserName': tankman.firstUserName,
     'lastUserName': tankman.lastUserName,
     'roleName': tankman.descriptor.role,
     'rankUserName': tankman.rankUserName,
     'roleUserName': tankman.roleUserName,
     'skills': skills,
     'efficiencyRoleLevel': tankman.efficiencyRoleLevel,
     'realRoleLevel': tankman.realRoleLevel,
     'roleLevel': tankman.roleLevel,
     'icon': {'big': Tankman.getBigIconPath(tankman.nationID, tankman.descriptor.iconID),
              'small': Tankman.getSmallIconPath(tankman.nationID, tankman.descriptor.iconID),
              'barracks': Tankman.getBarracksIconPath(tankman.nationID, tankman.descriptor.iconID)},
     'iconRole': {'big': Tankman.getRoleBigIconPath(tankman.descriptor.role),
                  'medium': Tankman.getRoleMediumIconPath(tankman.descriptor.role),
                  'small': Tankman.getRoleSmallIconPath(tankman.descriptor.role)},
     'iconRank': {'big': Tankman.getRankBigIconPath(tankman.nationID, tankman.descriptor.rankID),
                  'small': Tankman.getRankSmallIconPath(tankman.nationID, tankman.descriptor.rankID)},
     'isInTank': tankman.isInTank,
     'newSkillsCount': tankman.newSkillCount,
     'nativeVehicle': nativeVehicleData,
     'currentVehicle': currentVehicleData}
def _packNotRecruitedTankman(recruitInfo):
    expiryTime = recruitInfo.getExpiryTime()
    recruitBeforeStr = _ms(MENU.BARRACKS_NOTRECRUITEDACTIVATEBEFORE,
                           date=expiryTime) if expiryTime else ''
    availableRoles = recruitInfo.getRoles()
    roleType = availableRoles[0] if len(availableRoles) == 1 else ''
    result = {
        'firstName': i18n.convert(recruitInfo.getFirstName()),
        'lastName': i18n.convert(recruitInfo.getLastName()),
        'rank': recruitBeforeStr,
        'specializationLevel': recruitInfo.getRoleLevel(),
        'role': text_styles.counter(recruitInfo.getLabel()),
        'vehicleType': '',
        'iconFile': recruitInfo.getBarracksIcon(),
        'roleIconFile':
        Tankman.getRoleBigIconPath(roleType) if roleType else '',
        'rankIconFile': '',
        'contourIconFile': '',
        'tankmanID': -1,
        'nationID': -1,
        'typeID': -1,
        'roleType': roleType,
        'tankType': '',
        'inTank': False,
        'compact': '',
        'lastSkillLevel': recruitInfo.getLastSkillLevel(),
        'actionBtnEnabled': True,
        'inCurrentTank': False,
        'vehicleID': None,
        'slot': None,
        'locked': False,
        'lockMessage': '',
        'isInSelfVehicleClass': True,
        'isInSelfVehicleType': True,
        'notRecruited': True,
        'isRankNameVisible': True,
        'recoveryPeriodText': None,
        'actionBtnLabel': MENU.BARRACKS_BTNRECRUITNOTRECRUITED,
        'actionBtnTooltip': TOOLTIPS.BARRACKS_TANKMEN_RECRUIT,
        'skills': [],
        'isSkillsVisible': False,
        'recruitID': str(recruitInfo.getRecruitID())
    }
    return result
Example #8
0
    def updateTankmen(self):
        Waiting.show('updateTankmen')
        if g_currentVehicle.isPresent():
            tankmen = g_itemsCache.items.getTankmen()
            vehicle = g_currentVehicle.item
            commander_bonus = vehicle.bonuses['commander']
            roles = []
            lessMastered = 0
            tankmenDescrs = dict(vehicle.crew)
            for slotIdx, tman in vehicle.crew:
                if slotIdx > 0 and tman is not None and (tankmenDescrs[lessMastered] is None or compareMastery(tankmenDescrs[lessMastered].descriptor, tman.descriptor) > 0):
                    lessMastered = slotIdx
                role = vehicle.descriptor.type.crewRoles[slotIdx][0]
                roles.append({'tankmanID': tman.invID if tman is not None else None,
                 'roleType': role,
                 'role': convert(getSkillsConfig()[role]['userString']),
                 'roleIcon': Tankman.getRoleBigIconPath(role),
                 'nationID': vehicle.nationID,
                 'typeID': vehicle.innationID,
                 'slot': slotIdx,
                 'vehicleType': vehicle.shortUserName,
                 'tankType': vehicle.type,
                 'vehicleElite': vehicle.isPremium or vehicle.isPremiumIGR,
                 'roles': list(vehicle.descriptor.type.crewRoles[slotIdx])})

            tankmenData = []
            for tankman in tankmen.itervalues():
                if tankman.isInTank and tankman.vehicleInvID != vehicle.invID:
                    continue
                tankmanVehicle = g_itemsCache.items.getItemByCD(tankman.vehicleNativeDescr.type.compactDescr)
                bonus_role_level = commander_bonus if tankman.descriptor.role != 'commander' else 0.0
                skills_count = len(list(ACTIVE_SKILLS))
                skillsList = []
                for skill in tankman.skills:
                    skillsList.append({'tankmanID': tankman.invID,
                     'id': str(tankman.skills.index(skill)),
                     'name': skill.userName,
                     'desc': skill.description,
                     'icon': skill.icon,
                     'level': skill.level,
                     'active': skill.isEnable and skill.isActive})

                newSkillsCount, lastNewSkillLvl = tankman.newSkillCount
                if newSkillsCount > 0:
                    skillsList.append({'buy': True,
                     'tankmanID': tankman.invID,
                     'level': lastNewSkillLvl})
                tankmanData = {'firstName': tankman.firstUserName,
                 'lastName': tankman.lastUserName,
                 'rank': tankman.rankUserName,
                 'specializationLevel': tankman.realRoleLevel[0],
                 'role': tankman.roleUserName,
                 'vehicleType': tankmanVehicle.shortUserName,
                 'iconFile': tankman.icon,
                 'rankIconFile': tankman.iconRank,
                 'roleIconFile': Tankman.getRoleBigIconPath(tankman.descriptor.role),
                 'contourIconFile': tankmanVehicle.iconContour,
                 'tankmanID': tankman.invID,
                 'nationID': tankman.nationID,
                 'typeID': tankmanVehicle.innationID,
                 'inTank': tankman.isInTank,
                 'roleType': tankman.descriptor.role,
                 'tankType': tankmanVehicle.type,
                 'efficiencyLevel': tankman.efficiencyRoleLevel,
                 'bonus': bonus_role_level,
                 'lastSkillLevel': tankman.descriptor.lastSkillLevel,
                 'isLessMastered': vehicle.crewIndices.get(tankman.invID) == lessMastered and vehicle.isXPToTman,
                 'compact': tankman.strCD,
                 'availableSkillsCount': skills_count,
                 'skills': skillsList}
                tankmenData.append(tankmanData)

            self.as_tankmenResponseS({'roles': roles,
             'tankmen': tankmenData})
            dogName = ''
            if 'dog' in g_itemsCache.items.getItemByCD(g_currentVehicle.item.intCD).tags:
                dogName = MENU.HANGAR_CREW_RODY_DOG_NAME
            self.as_dogResponseS(dogName)
        Waiting.hide('updateTankmen')
        return
Example #9
0
    def __updateTankmen(self, *args):
        tankmen = g_itemsCache.items.getTankmen().values()
        slots = g_itemsCache.items.stats.tankmenBerthsCount
        berths = g_itemsCache.items.stats.tankmenBerthsCount
        berthPrice = g_itemsCache.items.shop.getTankmanBerthPrice(berths)
        defaultBerthPrice = g_itemsCache.items.shop.defaults.getTankmanBerthPrice(berths)
        tankmenList = list()
        tankmenInBarracks = 0
        tankmenInSlots = 0
        action = None
        if berthPrice[0] != defaultBerthPrice[0]:
            action = {'type': ACTION_TOOLTIPS_TYPE.ECONOMICS,
             'key': 'berthsPrices',
             'isBuying': True,
             'state': (None, ACTION_TOOLTIPS_STATE.DISCOUNT),
             'newPrice': (0, berthPrice[0]),
             'oldPrice': (0, defaultBerthPrice[0])}
        tankmenList.append({'buy': True,
         'price': BigWorld.wg_getGoldFormat(berthPrice[0]),
         'actionPriceData': action,
         'count': berthPrice[1]})
        for tankman in sorted(tankmen, TankmenComparator(g_itemsCache.items.getVehicle)):
            if not tankman.isInTank:
                tankmenInBarracks += 1
            slot, vehicleID, vehicleInnationID, vehicle = (None, None, None, None)
            if tankman.isInTank:
                vehicle = g_itemsCache.items.getVehicle(tankman.vehicleInvID)
                vehicleID = vehicle.invID
                vehicleInnationID = vehicle.innationID
                if vehicle is None:
                    LOG_ERROR('Cannot find vehicle for tankman: ', tankman, tankman.descriptor.role, tankman.vehicle.name, tankman.firstname, tankman.lastname)
                    continue
                slot = tankman.vehicleSlotIdx
            if self.filter['nation'] != -1 and tankman.nationID != self.filter['nation'] or self.filter['role'] != 'None' and tankman.descriptor.role != self.filter['role'] or self.filter['tankType'] != 'None' and tankman.vehicleNativeType != self.filter['tankType'] or self.filter['location'] == 'tanks' and tankman.isInTank != True or self.filter['location'] == 'barracks' and tankman.isInTank == True or self.filter['nationID'] is not None and (self.filter['location'] != str(vehicleInnationID) or self.filter['nationID'] != str(tankman.nationID)):
                continue
            isLocked, msg = self.getTankmanLockMessage(vehicle) if tankman.isInTank else (False, '')
            tankmanVehicle = g_itemsCache.items.getItemByCD(tankman.vehicleNativeDescr.type.compactDescr)
            isInCurrentTank = tankmanVehicle.invID == g_currentVehicle.invID if tankman.isInTank and g_currentVehicle.isPresent() else False
            tankmenList.append({'firstname': tankman.firstUserName,
             'lastname': tankman.lastUserName,
             'rank': tankman.rankUserName,
             'specializationLevel': tankman.realRoleLevel[0],
             'role': tankman.roleUserName,
             'vehicleType': tankmanVehicle.shortUserName,
             'iconFile': tankman.icon,
             'rankIconFile': tankman.iconRank,
             'roleIconFile': Tankman.getRoleBigIconPath(tankman.descriptor.role),
             'contourIconFile': tankmanVehicle.iconContour,
             'tankmanID': tankman.invID,
             'nationID': tankman.nationID,
             'typeID': tankmanVehicle.innationID,
             'slot': slot,
             'roleType': tankman.descriptor.role,
             'tankType': tankmanVehicle.type,
             'inTank': tankman.isInTank,
             'inCurrentTank': isInCurrentTank,
             'vehicleID': vehicleID,
             'compact': str(tankman.invID),
             'locked': isLocked,
             'lockMessage': msg,
             'vehicleBroken': vehicle.repairCost > 0 if tankman.isInTank else None,
             'isInSelfVehicleClass': vehicle.type == tankmanVehicle.type if tankman.isInTank else True,
             'isInSelfVehicleType': vehicle.shortUserName == tankmanVehicle.shortUserName if tankman.isInTank else True})

        tankmenInSlots = len(tankmenList) - 1
        if tankmenInBarracks < slots:
            tankmenList.insert(1, {'empty': True,
             'freePlaces': slots - tankmenInBarracks})
        self.as_setTankmenS(len(tankmen), tankmenInSlots, slots, tankmenInBarracks, tankmenList)
        return
Example #10
0
    def updateTankmen(self):
        Waiting.show('updateTankmen')
        if g_currentVehicle.isPresent():
            tankmen = g_itemsCache.items.getTankmen()
            vehicle = g_currentVehicle.item
            commander_bonus = vehicle.bonuses['commander']
            roles = []
            lessMastered = 0
            tankmenDescrs = dict(vehicle.crew)
            for slotIdx, tman in vehicle.crew:
                if slotIdx > 0 and tman is not None and (
                        tankmenDescrs[lessMastered] is None or
                        compareMastery(tankmenDescrs[lessMastered].descriptor,
                                       tman.descriptor) > 0):
                    lessMastered = slotIdx
                role = vehicle.descriptor.type.crewRoles[slotIdx][0]
                roles.append({
                    'tankmanID':
                    tman.invID if tman is not None else None,
                    'roleType':
                    role,
                    'role':
                    convert(getSkillsConfig()[role]['userString']),
                    'roleIcon':
                    Tankman.getRoleBigIconPath(role),
                    'nationID':
                    vehicle.nationID,
                    'typeID':
                    vehicle.innationID,
                    'slot':
                    slotIdx,
                    'vehicleType':
                    vehicle.shortUserName,
                    'tankType':
                    vehicle.type,
                    'vehicleElite':
                    vehicle.isPremium or vehicle.isPremiumIGR,
                    'roles':
                    list(vehicle.descriptor.type.crewRoles[slotIdx])
                })

            tankmenData = []
            for tankman in tankmen.itervalues():
                if tankman.isInTank and tankman.vehicleInvID != vehicle.invID:
                    continue
                tankmanVehicle = g_itemsCache.items.getItemByCD(
                    tankman.vehicleNativeDescr.type.compactDescr)
                bonus_role_level = commander_bonus if tankman.descriptor.role != 'commander' else 0.0
                skills_count = len(list(ACTIVE_SKILLS))
                skillsList = []
                for skill in tankman.skills:
                    skillsList.append({
                        'tankmanID':
                        tankman.invID,
                        'id':
                        str(tankman.skills.index(skill)),
                        'name':
                        skill.userName,
                        'desc':
                        skill.description,
                        'icon':
                        skill.icon,
                        'level':
                        skill.level,
                        'active':
                        skill.isEnable and skill.isActive
                    })

                newSkillsCount, lastNewSkillLvl = tankman.newSkillCount
                if newSkillsCount > 0:
                    skillsList.append({
                        'buy': True,
                        'buyCount': newSkillsCount - 1,
                        'tankmanID': tankman.invID,
                        'level': lastNewSkillLvl
                    })
                tankmanData = {
                    'firstName':
                    tankman.firstUserName,
                    'lastName':
                    tankman.lastUserName,
                    'rank':
                    tankman.rankUserName,
                    'specializationLevel':
                    tankman.realRoleLevel[0],
                    'role':
                    tankman.roleUserName,
                    'vehicleType':
                    tankmanVehicle.shortUserName,
                    'iconFile':
                    tankman.icon,
                    'rankIconFile':
                    tankman.iconRank,
                    'roleIconFile':
                    Tankman.getRoleBigIconPath(tankman.descriptor.role),
                    'contourIconFile':
                    tankmanVehicle.iconContour,
                    'tankmanID':
                    tankman.invID,
                    'nationID':
                    tankman.nationID,
                    'typeID':
                    tankmanVehicle.innationID,
                    'inTank':
                    tankman.isInTank,
                    'roleType':
                    tankman.descriptor.role,
                    'tankType':
                    tankmanVehicle.type,
                    'efficiencyLevel':
                    tankman.efficiencyRoleLevel,
                    'bonus':
                    bonus_role_level,
                    'lastSkillLevel':
                    tankman.descriptor.lastSkillLevel,
                    'isLessMastered':
                    vehicle.crewIndices.get(tankman.invID) == lessMastered
                    and vehicle.isXPToTman,
                    'compact':
                    tankman.strCD,
                    'availableSkillsCount':
                    skills_count,
                    'skills':
                    skillsList
                }
                tankmenData.append(tankmanData)

            self.as_tankmenResponseS({'roles': roles, 'tankmen': tankmenData})
            dogName = ''
            if 'dog' in g_itemsCache.items.getItemByCD(
                    g_currentVehicle.item.intCD).tags:
                dogName = MENU.HANGAR_CREW_RODY_DOG_NAME
            self.as_dogResponseS(dogName)
        Waiting.hide('updateTankmen')
        return
    def updateTankmen(self, diff=None):
        Waiting.show('updateTankmen')
        if g_currentVehicle.isPresent():
            vehicle = g_currentVehicle.item
            allTankmen = self.itemsCache.items.getTankmen()
            commander_bonus = vehicle.bonuses['commander']
            roles = []
            lessMastered = 0
            tankmenDescrs = dict(vehicle.crew)
            skillsConfig = getSkillsConfig()
            for slotIdx, tman in vehicle.crew:
                if slotIdx > 0 and tman is not None and (
                        tankmenDescrs[lessMastered] is None or
                        compareMastery(tankmenDescrs[lessMastered].descriptor,
                                       tman.descriptor) > 0):
                    lessMastered = slotIdx
                role = vehicle.descriptor.type.crewRoles[slotIdx][0]
                roles.append({
                    'tankmanID':
                    tman.invID if tman is not None else None,
                    'roleType':
                    role,
                    'role':
                    convert(skillsConfig.getSkill(role).userString),
                    'roleIcon':
                    Tankman.getRoleBigIconPath(role),
                    'nationID':
                    vehicle.nationID,
                    'typeID':
                    vehicle.innationID,
                    'slot':
                    slotIdx,
                    'vehicleType':
                    vehicle.shortUserName,
                    'tankType':
                    vehicle.type,
                    'vehicleElite':
                    vehicle.isPremium or vehicle.isPremiumIGR,
                    'roles':
                    list(vehicle.descriptor.type.crewRoles[slotIdx])
                })

            tankmenData = []
            for tankman in allTankmen.itervalues():
                if tankman.isInTank and tankman.vehicleInvID != vehicle.invID:
                    continue
                tankmanVehicle = self.itemsCache.items.getItemByCD(
                    tankman.vehicleNativeDescr.type.compactDescr)
                bonus_role_level = commander_bonus if tankman.descriptor.role != 'commander' else 0.0
                skills_count = skillsConfig.getNumberOfActiveSkills()
                skillsList = []
                for skill in tankman.skills:
                    skillsList.append({
                        'tankmanID':
                        tankman.invID,
                        'id':
                        str(tankman.skills.index(skill)),
                        'name':
                        skill.userName,
                        'desc':
                        skill.description,
                        'icon':
                        skill.icon,
                        'level':
                        skill.level,
                        'active':
                        skill.isEnable and skill.isActive
                    })

                newSkillsCount, lastNewSkillLvl = tankman.newSkillCount
                if newSkillsCount > 0:
                    skillsList.append({
                        'buy': True,
                        'buyCount': newSkillsCount - 1,
                        'tankmanID': tankman.invID,
                        'level': lastNewSkillLvl
                    })
                tankmanData = {
                    'fullName':
                    tankman.fullUserName,
                    'lastName':
                    tankman.lastUserName or tankman.firstUserName,
                    'rank':
                    tankman.rankUserName,
                    'specializationLevel':
                    tankman.realRoleLevel[0],
                    'role':
                    tankman.roleUserName,
                    'vehicleType':
                    tankmanVehicle.shortUserName,
                    'iconFile':
                    tankman.icon,
                    'rankIconFile':
                    tankman.iconRank,
                    'roleIconFile':
                    Tankman.getRoleBigIconPath(tankman.descriptor.role),
                    'contourIconFile':
                    tankmanVehicle.iconContour,
                    'tankmanID':
                    tankman.invID,
                    'nationID':
                    tankman.nationID,
                    'typeID':
                    tankmanVehicle.innationID,
                    'inTank':
                    tankman.isInTank,
                    'roleType':
                    tankman.descriptor.role,
                    'tankType':
                    tankmanVehicle.type,
                    'efficiencyLevel':
                    tankman.efficiencyRoleLevel,
                    'bonus':
                    bonus_role_level,
                    'lastSkillLevel':
                    tankman.descriptor.lastSkillLevel,
                    'isLessMastered':
                    vehicle.crewIndices.get(tankman.invID) == lessMastered
                    and vehicle.isXPToTman,
                    'compact':
                    tankman.strCD,
                    'availableSkillsCount':
                    skills_count,
                    'skills':
                    skillsList
                }
                self.__updateTankmanDataByCrewSkin(tankman, tankmanData)
                tankmenData.append(tankmanData)

            self.as_tankmenResponseS({
                'showRecruit': self._showRecruit,
                'roles': roles,
                'tankmen': tankmenData
            })
            dogName = ''
            if 'dog' in self.itemsCache.items.getItemByCD(
                    g_currentVehicle.item.intCD).tags:
                dogName = backport.text(
                    R.strings.menu.hangar.crew.rody.dog.dyn(
                        vehicle.nationName).name())
            self.as_dogResponseS(dogName)
            tooltipId = TOOLTIPS.HANGAR_CREW_RUDY_DOG + vehicle.nationName
            self.as_setDogTooltipS(tooltipId)
        Waiting.hide('updateTankmen')
        return
Example #12
0
    def __updateTankmen(self, *args):
        tankmen = g_itemsCache.items.getTankmen().values()
        slots = g_itemsCache.items.stats.tankmenBerthsCount
        berths = g_itemsCache.items.stats.tankmenBerthsCount
        berthPrice = g_itemsCache.items.shop.getTankmanBerthPrice(berths)
        defaultBerthPrice = g_itemsCache.items.shop.defaults.getTankmanBerthPrice(berths)
        tankmenList = list()
        tankmenInBarracks = 0
        tankmenInSlots = 0
        action = None
        if berthPrice[0] != defaultBerthPrice[0]:
            action = {
                "type": ACTION_TOOLTIPS_TYPE.ECONOMICS,
                "key": "berthsPrices",
                "isBuying": True,
                "state": (None, ACTION_TOOLTIPS_STATE.DISCOUNT),
                "newPrice": (0, berthPrice[0]),
                "oldPrice": (0, defaultBerthPrice[0]),
            }
        tankmenList.append(
            {
                "buy": True,
                "price": BigWorld.wg_getGoldFormat(berthPrice[0]),
                "actionPriceData": action,
                "count": berthPrice[1],
            }
        )
        for tankman in sorted(tankmen, TankmenComparator(g_itemsCache.items.getVehicle)):
            if not tankman.isInTank:
                tankmenInBarracks += 1
            slot, vehicleID, vehicleInnationID, vehicle = (None, None, None, None)
            if tankman.isInTank:
                vehicle = g_itemsCache.items.getVehicle(tankman.vehicleInvID)
                vehicleID = vehicle.invID
                vehicleInnationID = vehicle.innationID
                if vehicle is None:
                    LOG_ERROR(
                        "Cannot find vehicle for tankman: ",
                        tankman,
                        tankman.descriptor.role,
                        tankman.vehicle.name,
                        tankman.firstname,
                        tankman.lastname,
                    )
                    continue
                slot = tankman.vehicleSlotIdx
            if (
                self.filter["nation"] != -1
                and tankman.nationID != self.filter["nation"]
                or self.filter["role"] != "None"
                and tankman.descriptor.role != self.filter["role"]
                or self.filter["tankType"] != "None"
                and tankman.vehicleNativeType != self.filter["tankType"]
                or self.filter["location"] == "tanks"
                and tankman.isInTank != True
                or self.filter["location"] == "barracks"
                and tankman.isInTank == True
                or self.filter["nationID"] is not None
                and (
                    self.filter["location"] != str(vehicleInnationID)
                    or self.filter["nationID"] != str(tankman.nationID)
                )
            ):
                continue
            isLocked, msg = self.getTankmanLockMessage(vehicle) if tankman.isInTank else (False, "")
            tankmanVehicle = g_itemsCache.items.getItemByCD(tankman.vehicleNativeDescr.type.compactDescr)
            isInCurrentTank = (
                tankmanVehicle.invID == g_currentVehicle.invID
                if tankman.isInTank and g_currentVehicle.isPresent()
                else False
            )
            tankmenList.append(
                {
                    "firstname": tankman.firstUserName,
                    "lastname": tankman.lastUserName,
                    "rank": tankman.rankUserName,
                    "specializationLevel": tankman.realRoleLevel[0],
                    "role": tankman.roleUserName,
                    "vehicleType": tankmanVehicle.shortUserName,
                    "iconFile": tankman.icon,
                    "rankIconFile": tankman.iconRank,
                    "roleIconFile": Tankman.getRoleBigIconPath(tankman.descriptor.role),
                    "contourIconFile": tankmanVehicle.iconContour,
                    "tankmanID": tankman.invID,
                    "nationID": tankman.nationID,
                    "typeID": tankmanVehicle.innationID,
                    "slot": slot,
                    "roleType": tankman.descriptor.role,
                    "tankType": tankmanVehicle.type,
                    "inTank": tankman.isInTank,
                    "inCurrentTank": isInCurrentTank,
                    "vehicleID": vehicleID,
                    "compact": str(tankman.invID),
                    "locked": isLocked,
                    "lockMessage": msg,
                    "vehicleBroken": vehicle.repairCost > 0 if tankman.isInTank else None,
                    "isInSelfVehicleClass": vehicle.type == tankmanVehicle.type if tankman.isInTank else True,
                    "isInSelfVehicleType": vehicle.shortUserName == tankmanVehicle.shortUserName
                    if tankman.isInTank
                    else True,
                }
            )

        tankmenInSlots = len(tankmenList) - 1
        if tankmenInBarracks < slots:
            tankmenList.insert(1, {"empty": True, "freePlaces": slots - tankmenInBarracks})
        self.as_setTankmenS(len(tankmen), tankmenInSlots, slots, tankmenInBarracks, tankmenList)
        return
Example #13
0
def packTankman(tankman, isCountPermanentSkills=True):
    def vehicleIcon(vDescr, subtype=''):
        return _ICONS_MASK % {
            'type': 'vehicle',
            'subtype': subtype,
            'unicName': vDescr.name.replace(':', '-')
        }

    nativeVehicleData = {
        'typeCompDescr': tankman.vehicleNativeDescr.type.compactDescr,
        'userName': Vehicle.getShortUserName(tankman.vehicleNativeDescr.type),
        'icon': vehicleIcon(tankman.vehicleNativeDescr),
        'iconContour': vehicleIcon(tankman.vehicleNativeDescr, 'contour/')
    }
    currentVehicleData = None
    if tankman.isInTank:
        currentVehicleData = {
            'inventoryID': tankman.vehicleInvID,
            'typeCompDescr': tankman.vehicleDescr.type.compactDescr,
            'userName': Vehicle.getShortUserName(tankman.vehicleDescr.type),
            'icon': vehicleIcon(tankman.vehicleDescr),
            'iconContour': vehicleIcon(tankman.vehicleDescr, 'contour/')
        }
    skills = []
    tManFreeSkillsNum = tankman.descriptor.freeSkillsNumber
    startSkillNumber = 0 if isCountPermanentSkills else tManFreeSkillsNum
    tManSkills = tankman.skills
    for i in range(startSkillNumber, len(tManSkills)):
        skills.append(
            packTankmanSkill(
                tManSkills[i],
                isPermanent=True if i < tManFreeSkillsNum else False))

    return {
        'strCD': cPickle.dumps(tankman.strCD),
        'inventoryID': tankman.invID,
        'nationID': tankman.nationID,
        'firstUserName': tankman.firstUserName,
        'lastUserName': tankman.lastUserName,
        'roleName': tankman.descriptor.role,
        'rankUserName': tankman.rankUserName,
        'roleUserName': tankman.roleUserName,
        'skills': skills,
        'efficiencyRoleLevel': tankman.efficiencyRoleLevel,
        'realRoleLevel': tankman.realRoleLevel,
        'roleLevel': tankman.roleLevel,
        'icon': {
            'big':
            Tankman.getBigIconPath(tankman.nationID,
                                   tankman.descriptor.iconID),
            'small':
            Tankman.getSmallIconPath(tankman.nationID,
                                     tankman.descriptor.iconID),
            'barracks':
            Tankman.getBarracksIconPath(tankman.nationID,
                                        tankman.descriptor.iconID)
        },
        'iconRole': {
            'big': Tankman.getRoleBigIconPath(tankman.descriptor.role),
            'medium': Tankman.getRoleMediumIconPath(tankman.descriptor.role),
            'small': Tankman.getRoleSmallIconPath(tankman.descriptor.role)
        },
        'iconRank': {
            'big':
            Tankman.getRankBigIconPath(tankman.nationID,
                                       tankman.descriptor.rankID),
            'small':
            Tankman.getRankSmallIconPath(tankman.nationID,
                                         tankman.descriptor.rankID)
        },
        'isInTank': tankman.isInTank,
        'newSkillsCount': tankman.newSkillCount,
        'nativeVehicle': nativeVehicleData,
        'currentVehicle': currentVehicleData
    }
Example #14
0
    def __updateTankmen(self, *args):
        tankmen = g_itemsCache.items.getTankmen().values()
        slots = g_itemsCache.items.stats.tankmenBerthsCount
        berths = g_itemsCache.items.stats.tankmenBerthsCount
        berthPrice = g_itemsCache.items.shop.getTankmanBerthPrice(berths)
        defaultBerthPrice = g_itemsCache.items.shop.defaults.getTankmanBerthPrice(berths)
        tankmenList = list()
        tankmenInBarracks = 0
        action = None
        if berthPrice[0] != defaultBerthPrice[0]:
            action = packActionTooltipData(ACTION_TOOLTIPS_TYPE.ECONOMICS, 'berthsPrices', True, Money(gold=berthPrice[0]), Money(gold=defaultBerthPrice[0]))
        gold = g_itemsCache.items.stats.money.gold
        enoughGold = True
        if berthPrice[0] > gold:
            enoughGold = False
        tankmenList.append({'buy': True,
         'price': BigWorld.wg_getGoldFormat(berthPrice[0]),
         'enoughGold': enoughGold,
         'actionPriceData': action,
         'count': berthPrice[1]})
        for tankman in sorted(tankmen, TankmenComparator(g_itemsCache.items.getVehicle)):
            if not tankman.isInTank:
                tankmenInBarracks += 1
            slot, vehicleID, vehicleInnationID, vehicle = (None, None, None, None)
            if tankman.isInTank:
                vehicle = g_itemsCache.items.getVehicle(tankman.vehicleInvID)
                vehicleID = vehicle.invID
                vehicleInnationID = vehicle.innationID
                if vehicle is None:
                    LOG_ERROR('Cannot find vehicle for tankman: ', tankman, tankman.descriptor.role, tankman.vehicle.name, tankman.firstname, tankman.lastname)
                    continue
                slot = tankman.vehicleSlotIdx
            if self.filter['nation'] != -1 and tankman.nationID != self.filter['nation'] or self.filter['role'] != 'None' and tankman.descriptor.role != self.filter['role'] or self.filter['tankType'] != 'None' and tankman.vehicleNativeType != self.filter['tankType'] or self.filter['location'] == 'tanks' and tankman.isInTank is not True or self.filter['location'] == 'barracks' and tankman.isInTank is True or self.filter['nationID'] is not None and (self.filter['location'] != str(vehicleInnationID) or self.filter['nationID'] != str(tankman.nationID)):
                continue
            isLocked, msg = self.getTankmanLockMessage(vehicle) if tankman.isInTank else (False, '')
            tankmanVehicle = g_itemsCache.items.getItemByCD(tankman.vehicleNativeDescr.type.compactDescr)
            isInCurrentTank = tankmanVehicle.invID == g_currentVehicle.invID if tankman.isInTank and g_currentVehicle.isPresent() else False
            tankmenList.append({'firstname': tankman.firstUserName,
             'lastname': tankman.lastUserName,
             'rank': tankman.rankUserName,
             'specializationLevel': tankman.realRoleLevel[0],
             'role': tankman.roleUserName,
             'vehicleType': tankmanVehicle.shortUserName,
             'iconFile': tankman.icon,
             'rankIconFile': tankman.iconRank,
             'roleIconFile': Tankman.getRoleBigIconPath(tankman.descriptor.role),
             'contourIconFile': tankmanVehicle.iconContour,
             'tankmanID': tankman.invID,
             'nationID': tankman.nationID,
             'typeID': tankmanVehicle.innationID,
             'slot': slot,
             'roleType': tankman.descriptor.role,
             'tankType': tankmanVehicle.type,
             'inTank': tankman.isInTank,
             'inCurrentTank': isInCurrentTank,
             'vehicleID': vehicleID,
             'compact': str(tankman.invID),
             'locked': isLocked,
             'lockMessage': msg,
             'vehicleBroken': vehicle.repairCost > 0 if tankman.isInTank else None,
             'isInSelfVehicleClass': vehicle.type == tankmanVehicle.type if tankman.isInTank else True,
             'isInSelfVehicleType': vehicle.shortUserName == tankmanVehicle.shortUserName if tankman.isInTank else True})

        tankmenInSlots = len(tankmenList) - 1
        if tankmenInBarracks < slots:
            tankmenList.insert(1, {'empty': True,
             'freePlaces': slots - tankmenInBarracks})
        self.as_setTankmenS(len(tankmen), tankmenInSlots, slots, tankmenInBarracks, tankmenList)
        return
Example #15
0
    def updateTankmen(self):
        Waiting.show("updateTankmen")
        if g_currentVehicle.isPresent():
            tankmen = g_itemsCache.items.getTankmen()
            vehicle = g_currentVehicle.item
            commander_bonus = vehicle.bonuses["commander"]
            roles = []
            lessMastered = 0
            tankmenDescrs = dict(vehicle.crew)
            for slotIdx, tman in vehicle.crew:
                if (
                    slotIdx > 0
                    and tman is not None
                    and (
                        tankmenDescrs[lessMastered] is None
                        or compareMastery(tankmenDescrs[lessMastered].descriptor, tman.descriptor) > 0
                    )
                ):
                    lessMastered = slotIdx
                role = vehicle.descriptor.type.crewRoles[slotIdx][0]
                roles.append(
                    {
                        "tankmanID": tman.invID if tman is not None else None,
                        "roleType": role,
                        "role": convert(getSkillsConfig()[role]["userString"]),
                        "roleIcon": Tankman.getRoleBigIconPath(role),
                        "nationID": vehicle.nationID,
                        "typeID": vehicle.innationID,
                        "slot": slotIdx,
                        "vehicleType": vehicle.shortUserName,
                        "tankType": vehicle.type,
                        "vehicleElite": vehicle.isPremium or vehicle.isPremiumIGR,
                        "roles": list(vehicle.descriptor.type.crewRoles[slotIdx]),
                    }
                )

            tankmenData = []
            for tankman in tankmen.itervalues():
                if tankman.isInTank and tankman.vehicleInvID != vehicle.invID:
                    continue
                tankmanVehicle = g_itemsCache.items.getItemByCD(tankman.vehicleNativeDescr.type.compactDescr)
                bonus_role_level = commander_bonus if tankman.descriptor.role != "commander" else 0.0
                skills_count = len(list(ACTIVE_SKILLS))
                skillsList = []
                for skill in tankman.skills:
                    skillsList.append(
                        {
                            "tankmanID": tankman.invID,
                            "id": str(tankman.skills.index(skill)),
                            "name": skill.userName,
                            "desc": skill.description,
                            "icon": skill.icon,
                            "level": skill.level,
                            "active": skill.isEnable and skill.isActive,
                        }
                    )

                newSkillsCount, lastNewSkillLvl = tankman.newSkillCount
                if newSkillsCount > 0:
                    skillsList.append({"buy": True, "tankmanID": tankman.invID, "level": lastNewSkillLvl})
                tankmanData = {
                    "firstName": tankman.firstUserName,
                    "lastName": tankman.lastUserName,
                    "rank": tankman.rankUserName,
                    "specializationLevel": tankman.realRoleLevel[0],
                    "role": tankman.roleUserName,
                    "vehicleType": tankmanVehicle.shortUserName,
                    "iconFile": tankman.icon,
                    "rankIconFile": tankman.iconRank,
                    "roleIconFile": Tankman.getRoleBigIconPath(tankman.descriptor.role),
                    "contourIconFile": tankmanVehicle.iconContour,
                    "tankmanID": tankman.invID,
                    "nationID": tankman.nationID,
                    "typeID": tankmanVehicle.innationID,
                    "inTank": tankman.isInTank,
                    "roleType": tankman.descriptor.role,
                    "tankType": tankmanVehicle.type,
                    "efficiencyLevel": tankman.efficiencyRoleLevel,
                    "bonus": bonus_role_level,
                    "lastSkillLevel": tankman.descriptor.lastSkillLevel,
                    "isLessMastered": vehicle.crewIndices.get(tankman.invID) == lessMastered and vehicle.isXPToTman,
                    "compact": tankman.strCD,
                    "availableSkillsCount": skills_count,
                    "skills": skillsList,
                }
                tankmenData.append(tankmanData)

            self.as_tankmenResponseS({"roles": roles, "tankmen": tankmenData})
            dogName = ""
            if "dog" in g_itemsCache.items.getItemByCD(g_currentVehicle.item.intCD).tags:
                dogName = MENU.HANGAR_CREW_RODY_DOG_NAME
            self.as_dogResponseS(dogName)
        Waiting.hide("updateTankmen")
        return