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