def change(self, vehInvID, section, isAlreadyPurchased): if self._newItemID is None: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_INSCRIPTION_NOT_SELECTED) self.onCustomizationChangeFailed(message) return if self._rentalPackageDP.selectedPackage is None: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_INSCRIPTION_DAYS_NOT_SELECTED) self.onCustomizationChangeFailed(message) return cost, isGold = self._itemsDP.getCost(self._newItemID) if cost < 0: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_INSCRIPTION_COST_NOT_FOUND) self.onCustomizationChangeFailed(message) return if isAlreadyPurchased: daysToWear = 0 cost = 0 elif CustomizationHelper.isItemInHangar(CUSTOMIZATION_ITEM_TYPE.INSCRIPTION, self._newItemID, self._nationID, self._itemsDP.position): hangarItem = CustomizationHelper.getItemFromHangar(CUSTOMIZATION_ITEM_TYPE.INSCRIPTION_TYPE, self._newItemID) daysToWear = 0 if hangarItem.get('isPermanent') else 7 else: daysToWear = self._rentalPackageDP.selectedPackage.get('periodDays') newIdToSend = 0 isNewInDefaultSetup = False isCurrIgr = self._itemsDP.isIGRItem(self._currentItemID) if isCurrIgr: isNewInDefaultSetup = CustomizationHelper.isIdInDefaultSetup(CUSTOMIZATION_ITEM_TYPE.INSCRIPTION, self._newItemID) if self._currentItemID is None or not isCurrIgr or isCurrIgr and not isNewInDefaultSetup or isCurrIgr and isNewInDefaultSetup and daysToWear > 0: newIdToSend = self._newItemID BigWorld.player().inventory.changeVehicleInscription(vehInvID, self.getRealPosition(), newIdToSend, daysToWear, 1, lambda resultID: self.__onChangeVehicleInscription(resultID, (cost, isGold)))
def __onDropVehicleInscription(self, resultID): if resultID < 0: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_INSCRIPTION_DROP_SERVER_ERROR) self.onCustomizationDropFailed(message) return else: newID = None newLifeCycle = None if gui.game_control.g_instance.igr.getRoomType() != IGR_TYPE.NONE: inscriptions = g_currentVehicle.item.descriptor.playerInscriptions inscr = inscriptions[self.getRealPosition()] if inscr[0] is not None: newID = inscr[0] newLifeCycle = (inscr[1], inscr[2]) hangarItem = CustomizationHelper.getItemFromHangar(CUSTOMIZATION_ITEM_TYPE.INSCRIPTION_TYPE, self._currentItemID, self._nationID) if hangarItem: intCD = g_currentVehicle.item.intCD vehicle = vehicles.getVehicleType(int(intCD)) message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_INSCRIPTION_STORED_SUCCESS, vehicle=vehicle.userString) else: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_INSCRIPTION_DROP_SUCCESS) self._currentItemID = newID self._currentLifeCycle = newLifeCycle self._itemsDP.currentItemID = newID self.updateVehicleCustomization(newID) self.onCustomizationDropSuccess(message) return
def __onDropVehicleEmblem(self, resultID): if resultID < 0: message = i18n.makeString( SYSTEM_MESSAGES.CUSTOMIZATION_EMBLEM_DROP_SERVER_ERROR) self.onCustomizationDropFailed(message) return else: newID = self.defaultPlayerEmblemID newLifeCycle = None if gui.game_control.g_instance.igr.getRoomType() != IGR_TYPE.NONE: emblems = g_currentVehicle.item.descriptor.playerEmblems emblem = emblems[self.getRealPosition()] if emblem[0] is not None: newID = emblem[0] newLifeCycle = (emblem[1], emblem[2]) hangarItem = CustomizationHelper.getItemFromHangar( CUSTOMIZATION_ITEM_TYPE.EMBLEM_TYPE, self._currentItemID, self._nationID) if hangarItem: intCD = g_currentVehicle.item.intCD vehicle = vehicles.getVehicleType(int(intCD)) message = i18n.makeString( SYSTEM_MESSAGES.CUSTOMIZATION_EMBLEM_STORED_SUCCESS, vehicle=vehicle.userString) else: message = i18n.makeString( SYSTEM_MESSAGES.CUSTOMIZATION_EMBLEM_DROP_SUCCESS) self._currentItemID = newID self._currentLifeCycle = newLifeCycle self._itemsDP.currentItemID = newID self.updateVehicleCustomization(newID) self.onCustomizationDropSuccess(message) self.onCurrentItemChange(self._name) return
def __onDropVehicleCamouflage(self, resultID, kind): if resultID < 0: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_DROP_SERVER_ERROR) self.onCustomizationDropFailed(message) return else: item = self.currentItemsByKind.get(kind) hangarItem = CustomizationHelper.getItemFromHangar(CUSTOMIZATION_ITEM_TYPE.CAMOUFLAGE_TYPE, item.get('id'), self._nationID) if hangarItem: intCD = g_currentVehicle.item.intCD vehicle = vehicles.getVehicleType(int(intCD)) message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_STORED_SUCCESS, vehicle=vehicle.userString) else: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_DROP_SUCCESS) if g_tankActiveCamouflage.has_key(g_currentVehicle.item.intCD): del g_tankActiveCamouflage[g_currentVehicle.item.intCD] newID = None newLifeCycle = None if gui.game_control.g_instance.igr.getRoomType() != IGR_TYPE.NONE: camouflages = g_currentVehicle.item.descriptor.camouflages camo = camouflages[kind] if camo[0] is not None: newID = camo[0] newLifeCycle = (camo[1], camo[2]) item['id'] = newID item['lifeCycle'] = newLifeCycle if CAMOUFLAGE_KINDS.get(self._itemsDP.currentGroup) == kind: self._itemsDP.currentItemID = newID self.onCustomizationDropSuccess(message) return
def change(self, vehInvID, section, isAlreadyPurchased): if self._newItemID is None: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_INSCRIPTION_NOT_SELECTED) self.onCustomizationChangeFailed(message) return elif self._rentalPackageDP.selectedPackage is None: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_INSCRIPTION_DAYS_NOT_SELECTED) self.onCustomizationChangeFailed(message) return else: cost, isGold = self._itemsDP.getCost(self._newItemID) if cost < 0: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_INSCRIPTION_COST_NOT_FOUND) self.onCustomizationChangeFailed(message) return if isAlreadyPurchased: daysToWear = 0 cost = 0 elif CustomizationHelper.isItemInHangar(CUSTOMIZATION_ITEM_TYPE.INSCRIPTION, self._newItemID, self._nationID, self._itemsDP.position): hangarItem = CustomizationHelper.getItemFromHangar(CUSTOMIZATION_ITEM_TYPE.INSCRIPTION_TYPE, self._newItemID, self._nationID, self._itemsDP.position) daysToWear = 0 if hangarItem.get('isPermanent') else 7 else: daysToWear = self._rentalPackageDP.selectedPackage.get('periodDays') newIdToSend = 0 isNewInDefaultSetup = False isCurrIgr = self._itemsDP.isIGRItem(self._currentItemID) if isCurrIgr: isNewInDefaultSetup = CustomizationHelper.isIdInDefaultSetup(CUSTOMIZATION_ITEM_TYPE.INSCRIPTION, self._newItemID) if self._currentItemID is None or not isCurrIgr or isCurrIgr and not isNewInDefaultSetup or isCurrIgr and isNewInDefaultSetup and daysToWear > 0: newIdToSend = self._newItemID BigWorld.player().inventory.changeVehicleInscription(vehInvID, self.getRealPosition(), newIdToSend, daysToWear, 1, lambda resultID: self.__onChangeVehicleInscription(resultID, (cost, isGold))) return
def __onDropVehicleCamouflage(self, resultID, kind): if resultID < 0: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_DROP_SERVER_ERROR) self.onCustomizationDropFailed(message) return item = self.currentItemsByKind.get(kind) hangarItem = CustomizationHelper.getItemFromHangar(CUSTOMIZATION_ITEM_TYPE.CAMOUFLAGE_TYPE, item.get('id'), self._nationID) if hangarItem: intCD = g_currentVehicle.item.intCD vehicle = vehicles.getVehicleType(int(intCD)) message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_STORED_SUCCESS, vehicle=vehicle.userString) else: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_DROP_SUCCESS) if g_tankActiveCamouflage.has_key(g_currentVehicle.item.intCD): del g_tankActiveCamouflage[g_currentVehicle.item.intCD] newID = None newLifeCycle = None if gui.game_control.g_instance.igr.getRoomType() != IGR_TYPE.NONE: camouflages = g_currentVehicle.item.descriptor.camouflages camo = camouflages[kind] if camo[0] is not None: newID = camo[0] newLifeCycle = (camo[1], camo[2]) item['id'] = newID item['lifeCycle'] = newLifeCycle if CAMOUFLAGE_KINDS.get(self._itemsDP.currentGroup) == kind: self._itemsDP.currentItemID = newID self.onCustomizationDropSuccess(message)
def change(self, vehInvID, section, isAlreadyPurchased): if self._rentalPackageDP.selectedPackage is None: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_DAYS_NOT_SELECTED) self.onCustomizationChangeFailed(message) return else: isNewItemFound = False for kind, item in self.currentItemsByKind.iteritems(): newItemID = item.get("newItemID", None) currItemId = item.get("id", None) if newItemID is None: continue elif not isNewItemFound: isNewItemFound = True price = self.getItemCost(newItemID, item.get("packageIdx")) cost = price.get("cost", 0) isGold = price.get("isGold", False) if cost < 0: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_COST_NOT_FOUND) self.onCustomizationChangeFailed(message) return localKind = kind if CustomizationHelper.isItemInHangar(CUSTOMIZATION_ITEM_TYPE.CAMOUFLAGE, newItemID, self._nationID): hangarItem = CustomizationHelper.getItemFromHangar( CUSTOMIZATION_ITEM_TYPE.CAMOUFLAGE_TYPE, newItemID, self._nationID ) daysToWear = 0 if hangarItem.get("isPermanent") else 7 else: daysToWear = self._rentalPackageDP.pyRequestItemAt(item.get("packageIdx")).get("periodDays") newIdToSend = 0 isNewInDefaultSetup = False isCurrIgr = self._itemsDP.isIGRItem(currItemId) if isCurrIgr: isNewInDefaultSetup = CustomizationHelper.isIdInDefaultSetup( CUSTOMIZATION_ITEM_TYPE.CAMOUFLAGE, newItemID ) if ( currItemId is None or not isCurrIgr or isCurrIgr and not isNewInDefaultSetup or isCurrIgr and isNewInDefaultSetup and daysToWear > 0 ): newIdToSend = newItemID BigWorld.player().inventory.changeVehicleCamouflage( vehInvID, localKind, newIdToSend, daysToWear, functools.partial(self.__onChangeVehicleCamouflage, (cost, isGold), localKind), ) if not isNewItemFound: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_NOT_SELECTED) self.onCustomizationChangeFailed(message) return
def change(self, vehInvID, section, isAlreadyPurchased): if self._rentalPackageDP.selectedPackage is None: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_DAYS_NOT_SELECTED) self.onCustomizationChangeFailed(message) return else: isNewItemFound = False for kind, item in self.currentItemsByKind.iteritems(): newItemID = item.get('newItemID', None) currItemId = item.get('id', None) if newItemID is None: continue elif not isNewItemFound: isNewItemFound = True price = self.getItemCost(newItemID, item.get('packageIdx')) cost = price.get('cost', 0) isGold = price.get('isGold', False) if cost < 0: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_COST_NOT_FOUND) self.onCustomizationChangeFailed(message) return localKind = kind if CustomizationHelper.isItemInHangar(CUSTOMIZATION_ITEM_TYPE.CAMOUFLAGE, newItemID, self._nationID): hangarItem = CustomizationHelper.getItemFromHangar(CUSTOMIZATION_ITEM_TYPE.CAMOUFLAGE_TYPE, newItemID, self._nationID) daysToWear = 0 if hangarItem.get('isPermanent') else 7 else: daysToWear = self._rentalPackageDP.pyRequestItemAt(item.get('packageIdx')).get('periodDays') newIdToSend = 0 isNewInDefaultSetup = False isCurrIgr = self._itemsDP.isIGRItem(currItemId) if isCurrIgr: isNewInDefaultSetup = CustomizationHelper.isIdInDefaultSetup(CUSTOMIZATION_ITEM_TYPE.CAMOUFLAGE, newItemID) if currItemId is None or not isCurrIgr or isCurrIgr and not isNewInDefaultSetup or isCurrIgr and isNewInDefaultSetup and daysToWear > 0: newIdToSend = newItemID BigWorld.player().inventory.changeVehicleCamouflage(vehInvID, localKind, newIdToSend, daysToWear, functools.partial(self.__onChangeVehicleCamouflage, (cost, isGold), localKind)) if not isNewItemFound: message = i18n.makeString(SYSTEM_MESSAGES.CUSTOMIZATION_CAMOUFLAGE_NOT_SELECTED) self.onCustomizationChangeFailed(message) return
def _constructCamouflage(self, cID, groups, camouflages, armorColor, lifeCycle = None, isCurrent = False, isInHangar = False, withoutCheck = True, currVehIntD = None): camouflageInfo = None camouflage = camouflages.get(cID, None) hiddenCamos = g_itemsCache.items.shop.getCamouflagesHiddens(self.nationID) if camouflage is not None and (withoutCheck or cID not in hiddenCamos or isInHangar or camouflage.get('igrType', 0) != constants.IGR_TYPE.NONE and cID not in hiddenCamos): denyCD = camouflage.get('deny') allowCD = camouflage.get('allow') if currVehIntD not in denyCD and (len(allowCD) == 0 or currVehIntD in allowCD) or currVehIntD is None: invisibilityFactor = camouflage.get('invisibilityFactor', 1) invisibilityPercent = int(round((invisibilityFactor - 1) * 100)) invisibilityLbl = gui.makeHtmlString('html_templates:lobby/customization', 'camouflage-hint', {'percents': invisibilityPercent}, sourceKey=self.__getKindById(camouflage.get('kind', 0))) price = self._makeCost(self._cost, self._vehPriceFactor, self._getPriceFactor(cID)) if not isInHangar else 0 defaultPrice = self._makeCost(self._defCost, self._defVehPriceFactor, self._getDefaultCamoPriceFactor(cID)) if not isInHangar else 0 action = None if price != defaultPrice: isPremium = self._isGold == 1 newPrice = (0, price) if isPremium else (price, 0) oldPrice = (0, defaultPrice) if isPremium else (defaultPrice, 0) state = (None, ACTION_TOOLTIPS_STATE.DISCOUNT) if isPremium else (ACTION_TOOLTIPS_STATE.DISCOUNT, None) key = 'camouflagePacket7Cost' if self._period == 0: key = 'camouflagePacketInfCost' elif self._period == 30: key = 'camouflagePacket30Cost' action = {'type': ACTION_TOOLTIPS_TYPE.CAMOUFLAGE, 'key': cPickle.dumps((currVehIntD, key)), 'isBuying': True, 'state': state, 'newPrice': newPrice, 'oldPrice': oldPrice} timeLeftStr = '' days = 0 isPermanent = False value = 0 timeLeft = 0 if self._isGold else self._period * 86400 if isInHangar: item = CustomizationHelper.getItemFromHangar(CUSTOMIZATION_ITEM_TYPE.CAMOUFLAGE_TYPE, cID, self.nationID) if item: isPermanent = item.get('isPermanent') value = item.get('quantity') timeLeft = value * 86400 if not item.get('isPermanent') else 0 timeLeftStr = CustomizationHelper.getTimeLeftText(timeLeft) if isCurrent: updatedDescr = CustomizationHelper.getUpdatedDescriptor(g_currentVehicle.item.descriptor) item = updatedDescr.camouflages[camouflage.get('kind', 0)] _, startTime, days = item if days: timeLeft = startTime + days * 86400 - time.time() timeLeftStr = CustomizationHelper.getTimeLeftText(timeLeft) camouflageInfo = {'id': cID, 'texturePath': self._makeSmallTextureUrl(camouflage.get('texture'), camouflage.get('colors', (0, 0, 0, 0)), armorColor, lifeCycle), 'description': self._makeDescription(groups, camouflage.get('groupName', ''), camouflage.get('description', '')), 'price': {'cost': price, 'isGold': self._isGold == 1}, 'action': action, 'isNew': self.isNewID(cID), 'invisibilityLbl': invisibilityLbl, 'igrType': camouflage.get('igrType', 0), 'current': isCurrent, 'isInHangar': isInHangar, 'timeLeftStr': timeLeftStr, 'type': CUSTOMIZATION_ITEM_TYPE.CAMOUFLAGE, 'nationId': self.nationID, 'isSpecialTooltip': True, 'timeLeftValue': timeLeft, 'isPermanent': isPermanent, 'value': value} return camouflageInfo
def _constructInscription(self, itemID, groups, inscriptions, isCurrent = False, isInHangar = False, withoutCheck = True): itemInfo = None inscription = inscriptions.get(itemID, None) priceFactors = g_itemsCache.items.shop.getInscriptionsGroupPriceFactors(self.nationID) defPriceFactors = g_itemsCache.items.shop.defaults.getInscriptionsGroupPriceFactors(self.nationID) hiddens = g_itemsCache.items.shop.getInscriptionsGroupHiddens(self.nationID) if inscription is not None: groupName, igrType, texture, bumpMap, inscriptionUserString, isFeatured = inscription[0:6] inscriptionIDs, groupUserString, igrType, allow, deny = groups.get(groupName) isNewItem = self.isNewID(itemID) if withoutCheck or isNewItem or isInHangar or groupName not in hiddens: price = self._makeCost(self._cost, self._vehPriceFactor, priceFactors.get(groupName)) if not isInHangar else 0 defaultPrice = self._makeCost(self._defCost, self._defVehPriceFactor, defPriceFactors.get(groupName, 1)) if not isInHangar else 0 action = None if price != defaultPrice: isPremium = self._isGold == 1 newPrice = (0, price) if isPremium else (price, 0) oldPrice = (0, defaultPrice) if isPremium else (defaultPrice, 0) state = (None, ACTION_TOOLTIPS_STATE.DISCOUNT) if isPremium else (ACTION_TOOLTIPS_STATE.DISCOUNT, None) key = 'inscriptionPacket7Cost' if self._period == 0: key = 'inscriptionPacketInfCost' elif self._period == 30: key = 'inscriptionPacket30Cost' action = {'type': ACTION_TOOLTIPS_TYPE.ECONOMICS, 'key': key, 'isBuying': True, 'state': state, 'newPrice': newPrice, 'oldPrice': oldPrice} timeLeftStr = '' days = 0 isPermanent = False value = 0 timeLeft = 0 if self._isGold else self._period * 86400 canUse = True if isInHangar: item = CustomizationHelper.getItemFromHangar(CUSTOMIZATION_ITEM_TYPE.INSCRIPTION_TYPE, itemID, self.nationID, self.position) if item: isPermanent = item.get('isPermanent') value = item.get('quantity') timeLeft = value * 86400 if not item.get('isPermanent') else 0 timeLeftStr = CustomizationHelper.getTimeLeftText(timeLeft) if not isPermanent: _, selectedInscriptions = VehicleCustomizationModel.getVehicleModel() for selectedInscription in selectedInscriptions: if selectedInscriptions.index(selectedInscription) != self.position and selectedInscription[0] == itemID: canUse = False if isCurrent: updatedDescr = CustomizationHelper.getUpdatedDescriptor(g_currentVehicle.item.descriptor) item = updatedDescr.playerInscriptions[self.position] _, startTime, days, _ = item if days: timeLeft = startTime + days * 86400 - time.time() timeLeftStr = CustomizationHelper.getTimeLeftText(timeLeft) itemInfo = {'id': itemID, 'texturePath': self._makeSmallTextureUrl(texture, None, None), 'description': self._makeDescription(groupUserString, inscriptionUserString), 'igrType': igrType, 'price': {'cost': price, 'isGold': days == 0 if isCurrent else self._isGold == 1}, 'action': action, 'current': isCurrent, 'position': self.position, 'isInHangar': isInHangar, 'isFeatured': isFeatured, 'isNew': isNewItem, 'timeLeftStr': timeLeftStr, 'type': CUSTOMIZATION_ITEM_TYPE.INSCRIPTION, 'nationId': self.nationID, 'isSpecialTooltip': True, 'timeLeftValue': timeLeft, 'isPermanent': isPermanent, 'value': value, 'canUse': canUse} return itemInfo