def get_random()

in rtfm/dynamics/item/weapon/base_weapon.py [0:0]


    def get_random(cls, p_prefix=0.5, p_suffix=0.5, p_erosion=0.3):
        candidate_classes = [c for c in cls.get_all_subclasses(cls) if not c.__name__.startswith('Base')]
        C = random.choice(candidate_classes)
        inst = C()
        candidate_modifier_classes = [c for c in cls.get_all_subclasses(O.BaseWeaponModifier) if not c.__name__.startswith('Base')]
        candidate_suffix_classes = [c for c in candidate_modifier_classes if issubclass(c, O.BaseSuffixModifier)]
        candidate_prefix_classes = [c for c in candidate_modifier_classes if issubclass(c, O.BasePrefixModifier)]

        if inst.material.erosion and random.random() < p_erosion:
            erosion_base = random.choice(list(inst.material.erosion))
            candidate_erosion_classes = cls.get_all_subclasses(erosion_base)
            erosion = random.choice(candidate_erosion_classes)
            inst.add_erosion(erosion)

        if random.random() < p_suffix:
            suffix = random.choice(candidate_suffix_classes)
            inst.add_suffix(suffix)

        for i in range(cls.max_prefix):
            if random.random() < p_prefix:
                prefix = random.choice(candidate_prefix_classes)
                inst.add_prefix(prefix)
        return inst