invention.py (2673B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\industry\activities\invention.py 2 import industry 3 import operator 4 from industry.activities.skill_probability_helper import SkillProbabilityHelper 5 from functools import reduce 6 7 class Invention(industry.Activity): 8 REQUIRES_COPY = True 9 MAX_RUNS = 500 10 11 def job_modifiers(self, job): 12 modifiers = [] 13 base = self.base_probability() 14 modifiers.append(industry.ProbabilityModifier(base, reference=industry.Reference.BLUEPRINT)) 15 amount = 1.0 + sum([ job.skills.get(skill.typeID, 0) * self.skill_probability(skill.typeID) for skill in self.skills ]) 16 modifiers.append(industry.ProbabilityModifier(amount, reference=industry.Reference.SKILLS)) 17 return modifiers 18 19 def base_probability(self): 20 base = industry.mean([ product.probability or 1.0 for product in self.products ]) 21 return base 22 23 def skill_probability(self, typeID): 24 return SkillProbabilityHelper.get_probability_from_type_id(typeID) 25 26 def job_cost(self, job): 27 if job.product: 28 return job.prices.get(job.product.typeID, 0) * industry.COST_PERCENTAGE * float(job.runs) 29 else: 30 return 0 31 32 def job_max_runs(self, job): 33 return min(job.blueprint.runsRemaining, industry.Activity.job_max_runs(self, job)) 34 35 def job_probability(self, job): 36 modifiers = [ modifier.amount for modifier in job.all_modifiers if isinstance(modifier, industry.ProbabilityModifier) ] 37 return max(min(reduce(operator.mul, modifiers, 1), 1.0), 0.0) 38 39 def job_output_products(self, job): 40 output = [] 41 modifiers = job.output_modifiers 42 materialEfficiency = int(sum([ modifier.amount * 100.0 for modifier in modifiers if isinstance(modifier, industry.MaterialModifier) ])) 43 timeEfficiency = int(sum([ modifier.amount * 100.0 for modifier in modifiers if isinstance(modifier, industry.TimeModifier) ])) 44 maxRuns = sum([ modifier.amount for modifier in modifiers if isinstance(modifier, industry.MaxRunsModifier) ]) 45 for product in self.products: 46 output.append(industry.Blueprint(original=False, blueprintTypeID=product.typeID, runsRemaining=int(round(product.quantity + maxRuns)), materialEfficiency=industry.INVENTION_MATERIAL_EFFICIENCY + materialEfficiency, timeEfficiency=industry.INVENTION_TIME_EFFICIENCY + timeEfficiency, quantity=job.successfulRuns)) 47 48 return output 49 50 def job_output_extras(self, job): 51 blueprint = job.blueprint.copy() 52 blueprint.runsRemaining = max(blueprint.runsRemaining - job.runs, 0) 53 return [blueprint]