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
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): 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
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
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
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
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
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
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 __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
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