goal.py (8320B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\dailygoals\client\goal.py 2 import gametime 3 from localization import GetByMessageID, GetByLabel 4 from carbon.common.script.util.format import DateToBlue 5 import eveformat 6 import evetypes 7 from fsdBuiltData.common.iconIDs import GetIconFile 8 from goals.client.contributionMethods import get_contribution_method 9 from dailygoals.client.const import DailyGoalCategory, RewardType, ICON_BY_REWARD_TYPE, REWARD_SORT_ORDER, TRACK_SIZE, SPECIFIC_ITEM_TYPE_TEXT, OVER_WRITE_ITEM_ICON, REWARD_TYPE_TO_TYPE_ID 10 from dailygoals.client.utils import find_skill_icon_from_amount, find_type_id_from_amount 11 from omega.client.clone_grade_svc import get_clone_grade_svc 12 13 class DailyGoal(object): 14 15 def __init__(self, goal_id): 16 self._goal_id = goal_id 17 self._category = DailyGoalCategory.CATEGORY_UNSPECIFIED 18 self._name_id = None 19 self._description_id = None 20 self._help_text_id = None 21 self._target_progress = None 22 self._current_progress = None 23 self._assigner_id = None 24 self._assignee_id = None 25 self._contribution_method = None 26 self._career_path = None 27 self._active_after = None 28 self._active_until = None 29 self._has_earnings = False 30 self._rewards = [] 31 self._is_omega = False 32 self._omega_restricted_earnings = False 33 self._paid_completion = False 34 self._has_set_data = False 35 self._fetching = False 36 37 def set_data(self, data): 38 self._category = data.get('category', DailyGoalCategory.CATEGORY_UNSPECIFIED) 39 self._name_id = data.get('name_id', None) 40 self._description_id = data.get('desc_id', None) 41 self._help_text_id = data.get('help_text_id', None) 42 self._target_progress = data.get('target', None) 43 self._current_progress = data.get('progress', None) 44 self._assigner_id = data.get('assigner_id', None) 45 self._assignee_id = data.get('assignee_organization_id', None) 46 self._contribution_method = get_contribution_method(data.get('contribution_method_id', None), data.get('contribution_fields', None)) 47 self._career_path = data.get('career_id', None) 48 self._active_after = data.get('active_after', None) 49 self._active_until = data.get('active_until', None) 50 self._is_omega = data.get('is_omega', False) 51 self.rewards = data.get('rewards', []) 52 self._has_earnings = data.get('has_earnings') 53 self._omega_restricted_earnings = data.get('omega_restricted_earnings', self._is_omega) 54 self._paid_completion = data.get('paid_completion', False) 55 self._has_set_data = True 56 57 def has_data(self): 58 return self._has_set_data 59 60 @property 61 def fetching(self): 62 return self._fetching 63 64 @fetching.setter 65 def fetching(self, value): 66 self._fetching = value 67 68 @property 69 def rewards(self): 70 return self._rewards 71 72 @rewards.setter 73 def rewards(self, reward_dict_list): 74 result = [] 75 for reward_info in reward_dict_list: 76 if reward_info.get('reward_type') not in RewardType: 77 continue 78 reward = DailyGoalReward(**reward_info) 79 result.append(reward) 80 81 self._rewards = sorted(result, key=lambda reward: REWARD_SORT_ORDER.get(reward.reward_type)) 82 83 @property 84 def is_omega_restricted(self): 85 return self._is_omega 86 87 @property 88 def is_last_milestone(self): 89 return self.get_target_progress() == TRACK_SIZE 90 91 def mark_as_redeemed(self): 92 self._has_earnings = False 93 94 def get_id(self): 95 return self._goal_id 96 97 def get_category(self): 98 return self._category 99 100 def get_due_datetime(self): 101 if self._active_until: 102 return self._active_until 103 104 def get_name(self): 105 return GetByMessageID(self._name_id) 106 107 def get_description(self): 108 return GetByMessageID(self._description_id) 109 110 def get_help_text(self): 111 return GetByMessageID(self._help_text_id) 112 113 def get_target_progress(self): 114 return self._target_progress 115 116 def get_current_progress(self): 117 if self._paid_completion: 118 return self._target_progress 119 return self._current_progress 120 121 def get_contribution_method(self): 122 return self._contribution_method 123 124 def set_current_progress(self, progress): 125 self._current_progress = progress 126 if self.is_completed(): 127 self._has_earnings = True 128 self._omega_restricted_earnings = self._is_omega and not get_clone_grade_svc().is_omega_with_grace_period() 129 130 def is_completed(self): 131 return self._current_progress == self._target_progress or self._paid_completion 132 133 def paid_completion(self): 134 return self._paid_completion 135 136 def set_paid_completion(self, is_paid): 137 self._paid_completion = is_paid 138 139 def get_assigner_id(self): 140 return self._assigner_id 141 142 def get_career_path(self): 143 return self._career_path 144 145 def has_unclaimed_rewards(self): 146 return bool(self.rewards) and self._has_earnings and self.is_completed() 147 148 def get_claimable_rewards(self): 149 if self.has_unclaimed_rewards(): 150 return self.rewards 151 else: 152 return [] 153 154 def are_rewards_omega_restricted(self): 155 return self._omega_restricted_earnings 156 157 @property 158 def expiration_time(self): 159 return DateToBlue(self.get_due_datetime()) 160 161 @property 162 def is_expired(self): 163 return self.expiration_time < gametime.GetWallclockTime() 164 165 166 class DailyGoalReward(object): 167 168 def __init__(self, reward_type, amount, asset_id = None, item_type_id = None, **kwargs): 169 self._reward_type = reward_type 170 self._amount = amount 171 self._asset_id = asset_id 172 self._item_type_id = item_type_id 173 174 @property 175 def reward_type(self): 176 return self._reward_type 177 178 @property 179 def total_amount(self): 180 return self._amount 181 182 @property 183 def claimable_amount(self): 184 return self._amount 185 186 @property 187 def item_type_id(self): 188 return self._item_type_id 189 190 @property 191 def asset_id(self): 192 return self._asset_id 193 194 @property 195 def icon(self): 196 if self.reward_type == RewardType.SKILL_POINTS: 197 return find_skill_icon_from_amount(self._amount) 198 if self.reward_type == RewardType.ITEM: 199 if self._item_type_id in OVER_WRITE_ITEM_ICON: 200 return OVER_WRITE_ITEM_ICON[self._item_type_id] 201 return GetIconFile(evetypes.GetIconID(self._item_type_id)) 202 return ICON_BY_REWARD_TYPE.get(self._reward_type, None) 203 204 @property 205 def amount_text(self): 206 if self.reward_type == RewardType.ITEM: 207 if self._item_type_id in SPECIFIC_ITEM_TYPE_TEXT: 208 return GetByMessageID(SPECIFIC_ITEM_TYPE_TEXT[self._item_type_id]) 209 return GetByMessageID(evetypes.GetNameID(self._item_type_id)) 210 return eveformat.number(self._amount) 211 212 @property 213 def type_id(self): 214 if self.reward_type == RewardType.ITEM: 215 return self.item_type_id 216 if self.reward_type == RewardType.SKILL_POINTS: 217 return find_type_id_from_amount(self._amount) 218 if self.reward_type in REWARD_TYPE_TO_TYPE_ID: 219 return REWARD_TYPE_TO_TYPE_ID[self.reward_type] 220 raise TypeError('Unable to find reward type id for reward type %s', self.reward_type) 221 222 @property 223 def name(self): 224 if self.reward_type == RewardType.ITEM: 225 return GetByMessageID(evetypes.GetNameID(self._item_type_id)) 226 if self.reward_type == RewardType.ISK: 227 return eveformat.isk(self._amount) 228 if self.reward_type == RewardType.PLEX: 229 return eveformat.plex(self._amount) 230 if self.reward_type == RewardType.LOYALTY_POINTS: 231 return GetByLabel('UI/Wallet/WalletWindow/EvermarkAmount', everMarkAmount=self._amount) 232 if self.reward_type == RewardType.SKILL_POINTS: 233 return GetByMessageID(evetypes.GetNameID(self.type_id)) 234 235 def on_click(self): 236 if self.reward_type == RewardType.SKILL_POINTS: 237 return 238 sm.GetService('info').ShowInfo(self.type_id)