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

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]