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

reward.py (8999B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\agentinteraction\reward.py
      2 import gametime
      3 from characterdata.npccharacter import NpcCharacter
      4 from eve.common.script.sys.idCheckers import IsCharacter
      5 from eve.common.script.util.eveFormat import FmtISK
      6 from eveexceptions.const import UE_TYPEIDANDQUANTITY
      7 from inventorycommon.const import typeCredits, typeLoyaltyPoints, typeLoyaltyPointsHeraldry, typeResearch, typePyerite, type1MNCivilianAfterburnerBlueprint
      8 from localization import GetByLabel
      9 from localization.formatters import FormatGenericList
     10 
     11 class RewardType:
     12     GRANTED = 'granted'
     13     NORMAL = 'normal'
     14     BONUS = 'bonus'
     15     COLLATERAL = 'collateral'
     16 
     17 
     18 class Reward(object):
     19 
     20     def __init__(self, reward_type, type_id, quantity, extra = None, time_bonus_min = None, mission_accepted_time = None, alpha_quantity = None, omega_quantity = None):
     21         self.reward_type = reward_type
     22         self.type_id = type_id
     23         self.extra = extra or {}
     24         self.time_bonus_min = time_bonus_min
     25         self.mission_accepted_time = mission_accepted_time
     26         self.quantity = quantity
     27         self.alpha_quantity = alpha_quantity
     28         self.omega_quantity = omega_quantity
     29 
     30     def get_text(self, use_omega_quantity = False, use_short_version = True):
     31         if self._is_isk():
     32             return self._get_isk_text()
     33         if self._is_loyalty_points():
     34             return self._get_loyalty_points_text(use_omega_quantity, use_short_version)
     35         if self._is_research_points():
     36             return self._get_research_points_text()
     37         if self._is_mission_referral():
     38             npc_character = NpcCharacter(self.type_id)
     39             name = npc_character.get_name() if npc_character else ''
     40             return name
     41         return self._get_type_and_quantity_text()
     42 
     43     def get_hint(self, use_omega_quantity = False):
     44         return self.get_text_details(use_omega_quantity)
     45 
     46     def get_omega_vs_alpha_ratio(self):
     47         alpha_quantity = self.alpha_quantity or self.quantity
     48         omega_quantity = self.omega_quantity or self.quantity
     49         if not alpha_quantity or not omega_quantity or alpha_quantity == omega_quantity:
     50             return None
     51         return float(omega_quantity) / float(alpha_quantity)
     52 
     53     def get_text_details(self, use_omega_quantity = False):
     54         if self._is_mission_referral():
     55             return self._get_mission_referral_text()
     56         if self.extra is not None:
     57             if self._is_blueprint():
     58                 return self._get_blueprint_text()
     59             if self._is_item():
     60                 return self._get_item_text()
     61         return self.get_text(use_omega_quantity, use_short_version=False)
     62 
     63     def is_blueprint_copy(self):
     64         blueprint_info = self.get_blueprint_info()
     65         if not blueprint_info:
     66             return False
     67         is_copy = blueprint_info.get('copy', 0)
     68         return bool(is_copy)
     69 
     70     def get_color(self):
     71         if self.reward_type == RewardType.BONUS:
     72             return (0.6, 0.6, 0.6, 1.0)
     73         if self._is_isk():
     74             return (0.58, 0.42, 0.93, 1.0)
     75         if self._is_loyalty_points() or self._is_research_points():
     76             return (1.0, 0.72, 0.27, 1.0)
     77         return (0.6, 0.6, 0.6, 1.0)
     78 
     79     def is_normal_type(self):
     80         if self._is_isk() or self._is_research_points() or self._is_mission_referral():
     81             return False
     82         return True
     83 
     84     def _is_isk(self):
     85         return self.type_id == typeCredits
     86 
     87     def _is_loyalty_points(self):
     88         return self.type_id in [typeLoyaltyPoints, typeLoyaltyPointsHeraldry]
     89 
     90     def _is_research_points(self):
     91         return self.type_id == typeResearch
     92 
     93     def _is_mission_referral(self):
     94         return IsCharacter(self.type_id)
     95 
     96     def _is_blueprint(self):
     97         return bool(self.get_blueprint_info())
     98 
     99     def _is_item(self):
    100         return bool(self.extra.get('specificItemID', 0))
    101 
    102     def _get_isk_text(self):
    103         return FmtISK(self.quantity)
    104 
    105     def _get_loyalty_points_text(self, use_omega_quantity = False, use_short_version = False):
    106         quantity = self.omega_quantity if use_omega_quantity else self.quantity
    107         if use_short_version:
    108             if self.type_id == typeLoyaltyPointsHeraldry:
    109                 return GetByLabel('UI/Common/NumEverMarksShort', quantity=quantity)
    110             return GetByLabel('UI/Agents/StandardMission/NumLoyaltyPointsShort', lpAmount=quantity)
    111         elif self.type_id == typeLoyaltyPointsHeraldry:
    112             return self._get_type_and_quantity_text()
    113         else:
    114             return GetByLabel('UI/Agents/StandardMission/NumLoyaltyPoints', lpAmount=quantity)
    115 
    116     def _get_research_points_text(self):
    117         return GetByLabel('UI/Agents/StandardMission/NumResearchPoints', rpAmount=self.quantity)
    118 
    119     def _get_mission_referral_text(self):
    120         return GetByLabel('UI/Agents/StandardMission/MissionReferral', agentID=self.type_id)
    121 
    122     def _get_type_and_quantity_text(self):
    123         return cfg.FormatConvert(UE_TYPEIDANDQUANTITY, self.type_id, self.quantity)
    124 
    125     def _get_item_text(self):
    126         properties = [GetByLabel('UI/Agents/Items/SpecificItems')]
    127         return GetByLabel('UI/Agents/Items/NumItemsAndProperties', itemAndQuantity=self._get_type_and_quantity_text(), propertyList=FormatGenericList(properties))
    128 
    129     def _get_blueprint_text(self):
    130         item_id = self.extra.get('specificItemID', 0)
    131         properties = []
    132         if item_id:
    133             properties.append(GetByLabel('UI/Agents/Items/SpecificItems'))
    134         runs_remaining = self.get_runs_remaining()
    135         if runs_remaining > 1:
    136             properties.append(GetByLabel('UI/Agents/Items/BlueprintInfoMultirun', runsRemaining=runs_remaining))
    137         elif runs_remaining == 1:
    138             properties.append(GetByLabel('UI/Agents/Items/BlueprintInfoSingleRun'))
    139         is_copy = self.is_blueprint_copy()
    140         if is_copy:
    141             properties.append(GetByLabel('UI/Agents/Items/BlueprintInfoCopy'))
    142         else:
    143             properties.append(GetByLabel('UI/Agents/Items/BlueprintInfoOriginal'))
    144         material_level = self.get_material_level()
    145         if material_level:
    146             properties.append(GetByLabel('UI/Agents/Items/BlueprintInfoMaterialLevel', materialLevel=material_level))
    147         productivity_level = self.get_productivity_level()
    148         if productivity_level:
    149             properties.append(GetByLabel('UI/Agents/Items/ProductivityLevel', productivityLevel=productivity_level))
    150         return GetByLabel('UI/Agents/Items/NumItemsAndProperties', itemAndQuantity=self._get_type_and_quantity_text(), propertyList=FormatGenericList(properties))
    151 
    152     def get_productivity_level(self):
    153         blueprint_info = self.get_blueprint_info()
    154         if not blueprint_info:
    155             return 0
    156         productivity_level = blueprint_info.get('productivityLevel', 0)
    157         return productivity_level
    158 
    159     def get_material_level(self):
    160         blueprint_info = self.get_blueprint_info()
    161         if not blueprint_info:
    162             return 0
    163         material_level = blueprint_info.get('materialLevel', 0)
    164         return material_level
    165 
    166     def get_runs_remaining(self):
    167         if not self.is_blueprint_copy():
    168             return 0
    169         blueprint_info = self.get_blueprint_info()
    170         runs_remaining = blueprint_info.get('licensedProductionRunsRemaining', 0)
    171         return runs_remaining
    172 
    173     def get_blueprint_info(self):
    174         blueprint_info = self.extra.get('blueprintInfo', None)
    175         return blueprint_info
    176 
    177     def get_bonus_expiry_time(self):
    178         if not self.mission_accepted_time:
    179             return None
    180         if not self.time_bonus_min:
    181             return None
    182         bonus_expiry_timestamp = self.mission_accepted_time + self.time_bonus_min * gametime.MIN
    183         return bonus_expiry_timestamp
    184 
    185     def get_time_bonus(self):
    186         if not self.time_bonus_min:
    187             return None
    188         return self.time_bonus_min * gametime.MIN
    189 
    190     def get_bonus_progress(self):
    191         if not self.mission_accepted_time:
    192             return None
    193         if not self.time_bonus_min:
    194             return None
    195         expiry_time = self.get_bonus_expiry_time()
    196         bonus_time_sec = self.time_bonus_min * 60
    197         sec_until_expiry = max(expiry_time - gametime.GetWallclockTime(), 0) / gametime.SEC
    198         progress = float(bonus_time_sec - sec_until_expiry) / bonus_time_sec
    199         return progress
    200 
    201 
    202 def get_test_rewards():
    203     rewards = [Reward(RewardType.NORMAL, typeCredits, quantity=100000000),
    204      Reward(RewardType.NORMAL, typeLoyaltyPoints, quantity=100000000),
    205      Reward(RewardType.NORMAL, typeResearch, quantity=100000000),
    206      Reward(RewardType.NORMAL, typePyerite, quantity=2000),
    207      Reward(RewardType.NORMAL, type1MNCivilianAfterburnerBlueprint, quantity=1, extra={'blueprintInfo': {'copy': True,
    208                         'licensedProductionRunsRemaining': 1,
    209                         'materialLevel': 5,
    210                         'productivityLevel': 3.5}})]
    211     return rewards