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