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

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)