def calc_discovery_chance(self, accurate = True, extra_factor = 1): # Get the default settings for this base type. detect_chance = self.detect_chance.copy() # Adjust by the current suspicion levels ... for group in detect_chance: suspicion = g.pl.groups[group].suspicion detect_chance[group] *= 10000 + suspicion detect_chance[group] /= 10000 # ... and further adjust based on technology ... for group in detect_chance: discover_bonus = g.pl.groups[group].discover_bonus detect_chance[group] *= discover_bonus detect_chance[group] /= 10000 # ... and the given factor. for group in detect_chance: detect_chance[group] = int(detect_chance[group] * extra_factor) # Lastly, if we're told to be inaccurate, adjust the values to their # nearest percent. if not accurate: for group in detect_chance: detect_chance[group] = g.nearest_percent(detect_chance[group]) return detect_chance
def get_detect_info(detect_chance): detect_template = _("Detection chance:") + "\n" chances = [] for group in g.pl.groups.itervalues(): detect_template += group.name + u":\xA0%s\n" chances.append(detect_chance.get(group.type.id, 0)) if g.pl.display_discover == "full": return detect_template % tuple(g.to_percent(c) for c in chances) elif g.pl.display_discover == "partial": return detect_template % tuple(g.to_percent(g.nearest_percent(c, 25)) for c in chances) else: return detect_template % tuple(g.danger_level_to_detect_str(detect_chance_to_danger_level(c)) for c in chances)
def get_detect_chance(self, accurate = True): # Get the base chance from the universal function. detect_chance = calc_base_discovery_chance(self.type.id) for group in g.pl.groups: detect_chance.setdefault(group, 0) # Factor in the suspicion adjustments for this particular base ... for group, suspicion in self.suspicion.iteritems(): detect_chance[group] *= 10000 + suspicion detect_chance[group] /= 10000 # ... any reactors built ... if self.extra_items[0] and self.extra_items[0].done: item_qual = self.extra_items[0].item_qual for group in detect_chance: detect_chance[group] *= 10000 - item_qual detect_chance[group] /= 10000 # ... and any security systems built ... if self.extra_items[2] and self.extra_items[2].done: item_qual = self.extra_items[2].item_qual for group in detect_chance: detect_chance[group] *= 10000 - item_qual detect_chance[group] /= 10000 # ... and its location ... if self.location: multiplier = self.location.discovery_bonus() for group in detect_chance: detect_chance[group] *= multiplier detect_chance[group] /= 100 # ... and its power state. if self.done and self.power_state == "sleep": for group in detect_chance: detect_chance[group] /= 2 # Lastly, if we're not returning the accurate values, adjust # to the nearest percent. if not accurate: for group in detect_chance: detect_chance[group] = g.nearest_percent(detect_chance[group]) return detect_chance
def get_detect_info(detect_chance): detect_template = _("Detection chance:") + "\n" + \ _("NEWS") + u":\xA0%s\n" + \ _("SCIENCE") + u":\xA0%s\n" + \ _("COVERT") + u":\xA0%s\n" + \ _("PUBLIC") + u":\xA0%s" chances = (detect_chance.get("news", 0), detect_chance.get("science", 0), detect_chance.get("covert", 0), detect_chance.get("public", 0)) if g.pl.display_discover == "full": return detect_template % tuple(g.to_percent(c) for c in chances) elif g.pl.display_discover == "partial": return detect_template % tuple(g.to_percent(g.nearest_percent(c, 25)) for c in chances) else: return detect_template % tuple(g.danger_level_to_detect_str(detect_chance_to_danger_level(c)) for c in chances)