def _getConditions(self, svrEvents):
        modifiers = defaultdict(list)
        for m in self.event.getModifiers():
            fmtResult = m.format(self.event)
            if fmtResult is not None:
                if isinstance(fmtResult, types.DictType):
                    for fDType, fData in fmtResult.iteritems():
                        modifiers[fDType].extend(fData)

                else:
                    modifiers[m.getType()].extend(fmtResult)

        result = []
        if len(modifiers[ACTION_MODIFIER_TYPE.DISCOUNT]):
            result.append(
                formatters.packTopLevelContainer(
                    i18n.makeString(QUESTS.DETAILS_MODIFIERS_TITLE_DISCOUNT),
                    subBlocks=modifiers[ACTION_MODIFIER_TYPE.DISCOUNT]))
        availabilityModifiers = modifiers.get(
            ACTION_MODIFIER_TYPE.AVAILABILITY, [])
        if len(availabilityModifiers):
            result.append(
                formatters.packTopLevelContainer(
                    i18n.makeString(
                        QUESTS.DETAILS_MODIFIERS_TITLE_AVAILABILITY),
                    subBlocks=availabilityModifiers))
        if len(modifiers[ACTION_MODIFIER_TYPE.RENT]):
            result.append(
                formatters.packTopLevelContainer(
                    i18n.makeString(QUESTS.DETAILS_MODIFIERS_TITLE_DISCOUNT),
                    subBlocks=modifiers[ACTION_MODIFIER_TYPE.RENT]))
        for fmtData in modifiers[ACTION_MODIFIER_TYPE.SELLING]:
            result.append(fmtData)

        return formatters.todict(result)
 def _getConditions(self, svrEvents):
     subBlocks = []
     bonus = self.event.bonusCond
     battlesLeft, battlesCount, inrow = None, None, False
     battles = bonus.getConditions().find('battles')
     if battles is not None:
         battlesCount = battles._getTotalValue()
         if not self.event.isCompleted() and bonus.getGroupByValue() is None:
             progress = battles.getProgressPerGroup()
             if None in progress:
                 curProg, totalProg, _, _ = progress[None]
                 battlesLeft = totalProg - curProg
     bonusFmtConds = bonus.format(svrEvents, event=self.event)
     if len(bonusFmtConds):
         subBlocks.extend(formatters.indexing(bonusFmtConds))
     postBattleFmtConds = self.event.postBattleCond.format(svrEvents, event=self.event)
     if len(postBattleFmtConds):
         if len(bonusFmtConds):
             subBlocks.append(formatters.packSeparator(label=i18n.makeString('#quests:details/conditions/postBattle/separator')))
         subBlocks.extend(formatters.indexing(postBattleFmtConds))
     if bonus.isDaily():
         resetHourOffset = (time_utils.ONE_DAY - self._getDailyProgressResetTimeOffset()) / 3600
         if resetHourOffset >= 0:
             subBlocks.append(formatters.packTextBlock(label=formatters.formatYellow('#quests:details/conditions/postBattle/dailyReset') % {'time': time.strftime(i18n.makeString('#quests:details/conditions/postBattle/dailyReset/timeFmt'), time_utils.getTimeStructInLocal(time_utils.getTimeTodayForUTC(hour=resetHourOffset)))}))
     result = []
     if len(subBlocks) or battlesCount:
         if not self.event.isGuiDisabled():
             result.append(formatters.packConditionsBlock(battlesCount, battlesLeft, bonus.isInRow(), conditions=subBlocks))
         else:
             result.append(formatters.packConditionsBlock(conditions=subBlocks))
     if bonus.getGroupByValue() is not None and not self.event.isGuiDisabled():
         progressesFmt = bonus.formatGroupByProgresses(svrEvents, self.event)
         if len(progressesFmt):
             result.append(formatters.packTopLevelContainer(i18n.makeString('#quests:details/conditions/groupBy/%s' % bonus.getGroupByValue()), subBlocks=progressesFmt, isResizable=len(progressesFmt) > 5))
     return formatters.todict(result)
Beispiel #3
0
 def format(self, svrEvents, event=None):
     conds = self.getConditions()
     if not conds.isEmpty():
         return formatters.packTopLevelContainer(
             subBlocks=conds._formatSubBlocks(svrEvents, event))
     else:
         return None
Beispiel #4
0
 def format(self, svrEvents, event=None):
     conds = self.getConditions()
     if conds.isEmpty():
         subBlocks = [
             formatters.packTextBlock(
                 i18n.makeString(
                     '#quests:details/requirements/vehicle/any'))
         ]
     else:
         subBlocks = conds._formatSubBlocks(svrEvents, event)
     title, note = i18n.makeString(
         '#quests:details/tasks/requirements/vehicleLabel'), ''
     if conds:
         vehDescr = conds.find('vehicleDescr')
         if vehDescr is not None:
             note = makeHtmlString(
                 'html_templates:lobby/quests', 'vehicleDescrLabel', {
                     'count': len(self.getSuitableVehicles()),
                     'total': len(vehDescr.getVehiclesList())
                 })
     if len(subBlocks):
         return formatters.packTopLevelContainer(title=title,
                                                 note=note,
                                                 subBlocks=subBlocks)
     else:
         return
 def _packConditions(self, svrEvents):
     subBlocks = []
     bonus = self.event.bonusCond
     battlesLeft, battlesCount, inrow = None, None, False
     battles = bonus.getConditions().find('battles')
     if battles is not None:
         battlesCount = battles._getTotalValue()
         if not self.event.isCompleted() and bonus.getGroupByValue() is None:
             progress = battles.getProgressPerGroup()
             if None in progress:
                 curProg, totalProg, _, _ = progress[None]
                 battlesLeft = totalProg - curProg
     bonusFmtConds = bonus.format(svrEvents, event=self.event)
     if len(bonusFmtConds):
         subBlocks.extend(formatters.indexing(bonusFmtConds))
     postBattleFmtConds = self.event.postBattleCond.format(svrEvents, event=self.event)
     if len(postBattleFmtConds):
         if len(bonusFmtConds):
             subBlocks.append(formatters.packSeparator(label=i18n.makeString('#quests:details/conditions/postBattle/separator')))
         subBlocks.extend(formatters.indexing(postBattleFmtConds))
     if bonus.isDaily():
         resetHourOffset = (time_utils.ONE_DAY - self._getDailyProgressResetTimeOffset()) / 3600
         if resetHourOffset >= 0:
             subBlocks.append(formatters.packTextBlock(label=formatters.formatYellow('#quests:details/conditions/postBattle/dailyReset') % {'time': time.strftime(i18n.makeString('#quests:details/conditions/postBattle/dailyReset/timeFmt'), time_utils.getTimeStructInLocal(time_utils.getTimeTodayForUTC(hour=resetHourOffset)))}))
     result = []
     if len(subBlocks) or battlesCount:
         if not self.event.isGuiDisabled():
             result.append(formatters.packConditionsBlock(battlesCount, battlesLeft, bonus.isInRow(), conditions=subBlocks))
         else:
             result.append(formatters.packConditionsBlock(conditions=subBlocks))
     if bonus.getGroupByValue() is not None and not self.event.isGuiDisabled():
         progressesFmt = bonus.formatGroupByProgresses(svrEvents, self.event)
         if len(progressesFmt):
             result.append(formatters.packTopLevelContainer(i18n.makeString('#quests:details/conditions/groupBy/%s' % bonus.getGroupByValue()), subBlocks=progressesFmt, isResizable=len(progressesFmt) > 5))
     return result
Beispiel #6
0
    def _getConditions(self, svrEvents):
        modifiers = defaultdict(list)
        for m in self.event.getModifiers():
            fmtData = m.format(self.event)
            if fmtData is not None:
                modifiers[m.getType()].extend(fmtData)

        result = []
        if len(modifiers[ACTION_MODIFIER_TYPE.DISCOUNT]):
            result.append(formatters.packTopLevelContainer(i18n.makeString(QUESTS.DETAILS_MODIFIERS_TITLE_DISCOUNT), subBlocks=modifiers[ACTION_MODIFIER_TYPE.DISCOUNT]))
        if len(modifiers[ACTION_MODIFIER_TYPE.RENT]):
            result.append(formatters.packTopLevelContainer(i18n.makeString(QUESTS.DETAILS_MODIFIERS_TITLE_DISCOUNT), subBlocks=modifiers[ACTION_MODIFIER_TYPE.RENT]))
        for fmtData in modifiers[ACTION_MODIFIER_TYPE.SELLING]:
            result.append(fmtData)

        return formatters.todict(result)
Beispiel #7
0
    def format(self, event = None):
        vehs = []
        discounts = {}
        for v, value in sorted(self.parse().iteritems(), key=operator.itemgetter(0)):
            discounts[v] = self._getDiscountParams(v, value)
            vehs.append(v)

        return [formatters.packTopLevelContainer(QUESTS.DETAILS_MODIFIERS_TITLE_SELLING, subBlocks=[formatters.packVehiclesBlock(formatters.makeUniqueTableID(event, self.getName()), formatters.VEH_ACTION_HEADER, vehs=_prepareVehData(vehs, discounts), disableChecker=lambda veh: not veh.isInInventory, showInHangarCB=True, isShowInHangarCBChecked=True)])]
Beispiel #8
0
 def format(self, svrEvents, event=None):
     subBlocks = self.getConditions()._formatSubBlocks(svrEvents, event)
     if len(subBlocks):
         return formatters.packTopLevelContainer(title=i18n.makeString(
             '#quests:details/tasks/requirements/accountLabel'),
                                                 subBlocks=subBlocks)
     else:
         return None
 def getDetails(self, svrEvents):
     infoList = []
     conditions = [formatters.todict(formatters.packQuestDetailsSeparator(0, 0, 5, 10))]
     conditions.extend(self._getTopConditions(svrEvents))
     conditions.append(formatters.todict(formatters.packQuestDetailsSeparator(0, 0, 10, 5)))
     conditions.extend(self._getConditions(svrEvents))
     conditionsContainer = formatters.todict(formatters.packMotiveContainer(title=i18n.makeString('#quests:quests/conditions'), subBlocks=conditions))
     infoList.append(conditionsContainer)
     requirementContainer = formatters.todict(formatters.packTopLevelContainer(title=i18n.makeString('#quests:quests/requirements'), subBlocks=[formatters.packTextBlock(formatters.formatGray(self.event.getRequirementsStr()))]))
     infoList.append(requirementContainer)
     infoList.append(formatters.todict(formatters.packQuestDetailsSeparator(0, 0, 5, 0)))
     tpsContainer = formatters.todict(formatters.packTopLevelContainer(title=i18n.makeString('#quests:QuestTaskDetailsView/description'), subBlocks=[formatters.packTextBlock(formatters.formatGray(self.event.getTips()))]))
     infoList.append(tpsContainer)
     return {'image': RES_ICONS.MAPS_ICONS_HANGARTUTORIAL_GOALSQUEST,
      'title': text_styles.highTitle(self.event.getUserName()),
      'infoList': infoList,
      'awards': self._getBonuses(svrEvents, useIconFormat=False)}
Beispiel #10
0
 def getDetails(self, svrEvents):
     infoList = []
     conditions = [formatters.todict(formatters.packQuestDetailsSeparator(0, 0, 5, 10))]
     conditions.extend(self._getTopConditions(svrEvents))
     conditions.append(formatters.todict(formatters.packQuestDetailsSeparator(0, 0, 10, 5)))
     conditions.extend(self._getConditions(svrEvents))
     conditionsContainer = formatters.todict(formatters.packMotiveContainer(title=i18n.makeString('#quests:quests/conditions'), subBlocks=conditions))
     infoList.append(conditionsContainer)
     requirementContainer = formatters.todict(formatters.packTopLevelContainer(title=i18n.makeString('#quests:quests/requirements'), subBlocks=[formatters.packTextBlock(formatters.formatGray(self.event.getRequirementsStr()))]))
     infoList.append(requirementContainer)
     infoList.append(formatters.todict(formatters.packQuestDetailsSeparator(0, 0, 5, 0)))
     tpsContainer = formatters.todict(formatters.packTopLevelContainer(title=i18n.makeString('#quests:QuestTaskDetailsView/description'), subBlocks=[formatters.packTextBlock(formatters.formatGray(self.event.getTips()))]))
     infoList.append(tpsContainer)
     return {'image': RES_ICONS.MAPS_ICONS_HANGARTUTORIAL_GOALSQUEST,
      'title': text_styles.highTitle(self.event.getUserName()),
      'infoList': infoList,
      'awards': self._getBonuses(svrEvents, useIconFormat=False)}
Beispiel #11
0
 def _packConditions(self, svrEvents):
     subBlocks = []
     bonus = self.event.bonusCond
     battlesLeft, battlesCount, inrow = None, None, False
     battles = bonus.getConditions().find('battles')
     if battles is not None:
         battlesCount = battles.getTotalValue()
         if not self.event.isCompleted(
         ) and bonus.getGroupByValue() is None:
             progress = battles.getProgressPerGroup()
             if None in progress:
                 curProg, totalProg, _, _ = progress[None]
                 battlesLeft = totalProg - curProg
     bonusFmtConds = bonusCondFormatter.format(bonus, self.event)
     if len(bonusFmtConds):
         subBlocks.extend(formatters.indexing(bonusFmtConds))
     postBattleFmtConds = postBattleConditionFormatter.format(
         self.event.postBattleCond, self.event)
     if len(postBattleFmtConds):
         if len(bonusFmtConds):
             subBlocks.append(
                 formatters.packSeparator(label=i18n.makeString(
                     '#quests:details/conditions/postBattle/separator')))
         subBlocks.extend(formatters.indexing(postBattleFmtConds))
     resetLabel = self._getDailyResetStatus(
         '#quests:details/conditions/postBattle/dailyReset',
         formatters.formatYellow)
     if resetLabel:
         subBlocks.append(formatters.packTextBlock(label=resetLabel))
     result = []
     if len(subBlocks) or battlesCount:
         if not self.event.isGuiDisabled():
             result.append(
                 formatters.packConditionsBlock(battlesCount,
                                                battlesLeft,
                                                bonus.isInRow(),
                                                conditions=subBlocks))
         else:
             result.append(
                 formatters.packConditionsBlock(conditions=subBlocks))
     if bonus.getGroupByValue(
     ) is not None and not self.event.isGuiDisabled():
         progressesFmt = bonusCondFormatter.formatGroupByProgresses(
             bonus, self.event)
         if len(progressesFmt):
             result.append(
                 formatters.packTopLevelContainer(
                     i18n.makeString(
                         '#quests:details/conditions/groupBy/%s' %
                         bonus.getGroupByValue()),
                     subBlocks=progressesFmt,
                     isResizable=len(progressesFmt) > 5))
     return result
Beispiel #12
0
    def _getConditions(self, svrEvents):
        modifiers = defaultdict(list)
        for m in self.event.getModifiers():
            fmtResult = m.format(self.event)
            if fmtResult is not None:
                if isinstance(fmtResult, types.DictType):
                    for fDType, fData in fmtResult.iteritems():
                        modifiers[fDType].extend(fData)

                else:
                    modifiers[m.getType()].extend(fmtResult)

        result = []
        if len(modifiers[ACTION_MODIFIER_TYPE.DISCOUNT]):
            result.append(
                formatters.packTopLevelContainer(
                    i18n.makeString(QUESTS.DETAILS_MODIFIERS_TITLE_DISCOUNT),
                    subBlocks=modifiers[ACTION_MODIFIER_TYPE.DISCOUNT],
                )
            )
        availabilityModifiers = modifiers.get(ACTION_MODIFIER_TYPE.AVAILABILITY, [])
        if len(availabilityModifiers):
            result.append(
                formatters.packTopLevelContainer(
                    i18n.makeString(QUESTS.DETAILS_MODIFIERS_TITLE_AVAILABILITY), subBlocks=availabilityModifiers
                )
            )
        if len(modifiers[ACTION_MODIFIER_TYPE.RENT]):
            result.append(
                formatters.packTopLevelContainer(
                    i18n.makeString(QUESTS.DETAILS_MODIFIERS_TITLE_DISCOUNT),
                    subBlocks=modifiers[ACTION_MODIFIER_TYPE.RENT],
                )
            )
        for fmtData in modifiers[ACTION_MODIFIER_TYPE.SELLING]:
            result.append(fmtData)

        return formatters.todict(result)
Beispiel #13
0
 def format(self, svrEvents, event = None):
     conds = self.getConditions()
     if conds.isEmpty():
         subBlocks = [formatters.packTextBlock(i18n.makeString('#quests:details/requirements/vehicle/any'))]
     else:
         subBlocks = conds._formatSubBlocks(svrEvents, event)
     title, note = i18n.makeString('#quests:details/tasks/requirements/vehicleLabel'), ''
     if conds:
         vehDescr = conds.find('vehicleDescr')
         if vehDescr is not None:
             note = makeHtmlString('html_templates:lobby/quests', 'vehicleDescrLabel', {'count': len(self.getSuitableVehicles()),
              'total': len(vehDescr.getVehiclesList())})
     if len(subBlocks):
         return formatters.packTopLevelContainer(title=title, note=note, subBlocks=subBlocks)
     else:
         return
Beispiel #14
0
    def format(self, event=None):
        vehs = []
        discounts = {}
        for v, value in sorted(self.parse().iteritems(),
                               key=operator.itemgetter(0)):
            discounts[v] = self._getDiscountParams(v, value)
            vehs.append(v)

        return [
            formatters.packTopLevelContainer(
                QUESTS.DETAILS_MODIFIERS_TITLE_SELLING,
                subBlocks=[
                    formatters.packVehiclesBlock(
                        formatters.makeUniqueTableID(event, self.getName()),
                        formatters.VEH_ACTION_HEADER,
                        vehs=_prepareVehData(vehs, discounts),
                        disableChecker=lambda veh: not veh.isInInventory,
                        showInHangarCB=True,
                        isShowInHangarCBChecked=True)
                ])
        ]
Beispiel #15
0
 def format(self, svrEvents, event = None):
     conds = self.getConditions()
     if not conds.isEmpty():
         return formatters.packTopLevelContainer(subBlocks=conds._formatSubBlocks(svrEvents, event))
     else:
         return None
Beispiel #16
0
 def format(self, svrEvents, event = None):
     subBlocks = self.getConditions()._formatSubBlocks(svrEvents, event)
     if len(subBlocks):
         return formatters.packTopLevelContainer(title=i18n.makeString('#quests:details/tasks/requirements/accountLabel'), subBlocks=subBlocks)
     else:
         return None