NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

reward.py (5754B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\controller\reward.py
      2 import eveicon
      3 from achievement_system.client.api.error import GenericInternalServerError, ServiceUnavailableError
      4 from achievement_system.client.api.repository import get_repository as achievement_repository
      5 from achievement_system.client.model.definition.reward.attributes import IskRewardDefinitionAttributes, SpRewardDefinitionAttributes, ItemRewardDefinitionAttributes, TitleRewardDefinitionAttributes
      6 from achievement_system.client.model.definition.reward.type import RewardType
      7 from achievement_system.client.ui.window.const import REWARD_ICON_BY_TYPE
      8 from carbon.common.script.util.format import FmtAmt
      9 from cosmetics.client.character.title.api.error import DefinitionNotFoundError
     10 from cosmetics.client.character.title.api.repository import get_repository as title_repository
     11 from evelink.client import type_link
     12 from localization import GetByLabel
     13 
     14 class RewardData(object):
     15 
     16     def __init__(self, reward_type, is_granted, is_claimed, icon, text, hint = None):
     17         self.reward_type = reward_type
     18         self.icon = icon
     19         self.text = text
     20         self.hint = hint
     21         self.is_granted = is_granted
     22         self.is_claimed = is_claimed
     23 
     24     @property
     25     def is_item(self):
     26         return self.reward_type == RewardType.ITEM
     27 
     28     @property
     29     def is_title(self):
     30         return self.reward_type == RewardType.TITLE
     31 
     32     @property
     33     def is_sp(self):
     34         return self.reward_type == RewardType.SP
     35 
     36     @property
     37     def is_isk(self):
     38         return self.reward_type == RewardType.ISK
     39 
     40 
     41 class AchievementRewardController(object):
     42 
     43     def __init__(self, identifier, milestone_id, rewards):
     44         self.identifier = identifier
     45         self.attributes = self.identifier_attributes
     46         self.milestone_id = milestone_id
     47         self.rewards = rewards
     48 
     49     @property
     50     def identifier_attributes(self):
     51         return achievement_repository().definitions.get_achievement(self.identifier)
     52 
     53     @property
     54     def state(self):
     55         return achievement_repository().get_achievement_state(self.identifier)
     56 
     57     @property
     58     def name(self):
     59         return '%s - %s %s' % (self.attributes.name_message.get_localized_text(), GetByLabel('UI/Achievements/Window/Card/Milestone'), self.attributes.get_milestone_index(self.milestone_id) + 1)
     60 
     61     @property
     62     def icon(self):
     63         if self.attributes.icon_id:
     64             return eveicon.get(self.attributes.icon_id)
     65         else:
     66             return eveicon.get(self.contribution_attributes.icon_id)
     67 
     68     @property
     69     def contribution_attributes(self):
     70         contribution_id = self.attributes.contribution_method.identifier
     71         return achievement_repository().definitions.get_contribution_method(contribution_id)
     72 
     73     @property
     74     def is_milestone_reached(self):
     75         try:
     76             state = self.state
     77             if state is None:
     78                 return False
     79             return state.is_milestone_reached(self.milestone_id)
     80         except ServiceUnavailableError or GenericInternalServerError:
     81             return False
     82 
     83     @property
     84     def reward_data(self):
     85         result = []
     86         for reward_id in self.rewards:
     87             reward_attributes = self.get_reward_attributes(self.milestone_id, reward_id)
     88             if reward_attributes is None:
     89                 continue
     90             reward_type = reward_attributes.reward_type
     91             is_claimed = achievement_repository().is_reward_claimed_for_achievement_milestone(achievement_id=self.identifier, milestone_id=self.milestone_id, reward_id=reward_id)
     92             result.append(RewardData(reward_type=reward_type, is_granted=self.is_milestone_reached, is_claimed=is_claimed, icon=REWARD_ICON_BY_TYPE[reward_attributes.reward_type], text=self.get_reward_text(reward_attributes), hint=self.get_reward_hint(reward_attributes)))
     93 
     94         return result
     95 
     96     def get_reward_attributes(self, milestone_id, reward_id):
     97         for milestone_entry in self.attributes.milestones:
     98             if milestone_entry.identifier != milestone_id:
     99                 continue
    100             for reward_entry in milestone_entry.attributes.rewards:
    101                 if reward_entry.identifier != reward_id:
    102                     continue
    103                 return reward_entry.attributes
    104 
    105     def get_reward_text(self, reward_attributes):
    106         if isinstance(reward_attributes, IskRewardDefinitionAttributes):
    107             return FmtAmt(reward_attributes.amount)
    108         if isinstance(reward_attributes, SpRewardDefinitionAttributes):
    109             return FmtAmt(reward_attributes.amount)
    110         if isinstance(reward_attributes, ItemRewardDefinitionAttributes):
    111             return '%sx %s' % (reward_attributes.amount, type_link(reward_attributes.type_id))
    112         if isinstance(reward_attributes, TitleRewardDefinitionAttributes):
    113             try:
    114                 name = title_repository().definitions.get_title(reward_attributes.title_identifier).localized_name
    115                 return GetByLabel('UI/Achievements/Window/Rewards/TitleReward', name=name)
    116             except DefinitionNotFoundError:
    117                 return None
    118 
    119     def get_reward_hint(self, reward_attributes):
    120         return self.get_reward_text(reward_attributes)
    121 
    122 
    123 class CategoryRewardController(AchievementRewardController):
    124 
    125     @property
    126     def identifier_attributes(self):
    127         return achievement_repository().definitions.get_category(self.identifier)
    128 
    129     @property
    130     def state(self):
    131         return achievement_repository().get_category_state(self.identifier)
    132 
    133     @property
    134     def icon(self):
    135         if self.attributes.icon_id:
    136             return eveicon.get(self.attributes.icon_id)
    137         else:
    138             return None