Exemplo n.º 1
0
 def _name_and_create_adoptee_gen(self, timeline):
     adopted_sim_info = self.get_participant(ParticipantType.PickedSim)
     last_name = SimSpawner.get_family_name_for_gender(self.sim.account, self.sim.last_name, adopted_sim_info.is_female)
     result = yield self._do_renames_gen(timeline, (adopted_sim_info,), additional_tokens=(last_name,))
     if not result:
         return result
     adopted_sim_info = self.get_participant(ParticipantType.PickedSim)
     parent_a = self.sim.sim_info
     parent_b = services.sim_info_manager().get(parent_a.spouse_sim_id)
     adopted_sim_info.relationship_tracker._clear_relationships()
     for relation in FamilyRelationshipIndex:
         relation_id = adopted_sim_info.get_relation(relation)
         relation_info = services.sim_info_manager().get(relation_id)
         if relation_info is not None:
             adopted_sim_info.genealogy.remove_family_link(relation)
             family_relation = relation_info.genealogy.get_family_relationship_bit(adopted_sim_info.sim_id)
             relation_info.genealogy.clear_family_relation(family_relation)
             relation_info.relationship_tracker.destroy_relationship(adopted_sim_info.sim_id)
         adopted_sim_info.genealogy.clear_family_relation(relation)
     if adopted_sim_info.household is not parent_a.household:
         adopted_sim_info.household.remove_sim_info(adopted_sim_info)
     PregnancyTracker.initialize_sim_info(adopted_sim_info, parent_a, parent_b)
     adopted_sim_info.trait_tracker.remove_trait(self.adoption_trait)
     if adopted_sim_info.age == Age.BABY:
         adopted_sim_info.set_zone_on_spawn()
         create_and_place_baby(adopted_sim_info, ignore_daycare=True)
     else:
         SimSpawner.spawn_sim(adopted_sim_info, sim_position=self.sim.position)
     return True
Exemplo n.º 2
0
 def create_offspring_data(self):
     r = random.Random()
     r.seed(self._seed)
     offspring_count = pop_weighted(
         [(p.weight *
           p.modifiers.get_multiplier(SingleSimResolver(self._sim_info)),
           p.size) for p in self.MULTIPLE_OFFSPRING_CHANCES],
         random=r)
     offspring_count = min(self._sim_info.household.free_slot_count + 1,
                           offspring_count)
     self._offspring_data = []
     for offspring_index in range(offspring_count):
         if offspring_index and r.random(
         ) < self.MONOZYGOTIC_OFFSPRING_CHANCE:
             gender = self._offspring_data[offspring_index - 1].gender
             genetics = self._offspring_data[offspring_index - 1].genetics
         else:
             gender = Gender.MALE if r.random() < 0.5 else Gender.FEMALE
             genetics = r.randint(1, MAX_UINT32)
         last_name = SimSpawner.get_family_name_for_gender(
             self._sim_info.account, self._sim_info.last_name,
             gender == Gender.FEMALE)
         traits = self._select_traits_for_offspring(gender)
         self._offspring_data.append(
             PregnancyOffspringData(gender,
                                    genetics,
                                    last_name=last_name,
                                    traits=traits))
Exemplo n.º 3
0
 def _name_and_create_adoptee_gen(self, timeline):
     adopted_sim_info = self.get_participant(ParticipantType.PickedSim)
     last_name = SimSpawner.get_family_name_for_gender(
         self.sim.account, self.sim.last_name, adopted_sim_info.is_female)
     result = yield self._do_renames_gen(timeline, (adopted_sim_info, ),
                                         additional_tokens=(last_name, ))
     if not result:
         return result
     adopted_sim_info = self.get_participant(ParticipantType.PickedSim)
     parent_a = self.sim.sim_info
     parent_b = services.sim_info_manager().get(parent_a.spouse_sim_id)
     adopted_sim_info.relationship_tracker._clear_relationships()
     for relation in FamilyRelationshipIndex:
         relation_id = adopted_sim_info.get_relation(relation)
         relation_info = services.sim_info_manager().get(relation_id)
         if relation_info is not None:
             adopted_sim_info.genealogy.remove_family_link(relation)
             family_relation = relation_info.genealogy.get_family_relationship_bit(
                 adopted_sim_info.sim_id)
             relation_info.genealogy.clear_family_relation(family_relation)
             relation_info.relationship_tracker.destroy_relationship(
                 adopted_sim_info.sim_id)
         adopted_sim_info.genealogy.clear_family_relation(relation)
     if adopted_sim_info.household is not parent_a.household:
         adopted_sim_info.household.remove_sim_info(adopted_sim_info)
     PregnancyTracker.initialize_sim_info(adopted_sim_info, parent_a,
                                          parent_b)
     adopted_sim_info.trait_tracker.remove_trait(self.adoption_trait)
     if adopted_sim_info.age == Age.BABY:
         adopted_sim_info.set_zone_on_spawn()
         create_and_place_baby(adopted_sim_info, ignore_daycare=True)
     else:
         SimSpawner.spawn_sim(adopted_sim_info,
                              sim_position=self.sim.position)
     return True
Exemplo n.º 4
0
 def create_offspring_data(self):
     r = random.Random()
     r.seed(self._seed)
     offspring_count = pop_weighted([(p.weight*p.modifiers.get_multiplier(SingleSimResolver(self._sim_info)), p.size) for p in self.MULTIPLE_OFFSPRING_CHANCES], random=r)
     offspring_count = min(self._sim_info.household.free_slot_count + 1, offspring_count)
     self._offspring_data = []
     for offspring_index in range(offspring_count):
         if offspring_index and r.random() < self.MONOZYGOTIC_OFFSPRING_CHANCE:
             gender = self._offspring_data[offspring_index - 1].gender
             genetics = self._offspring_data[offspring_index - 1].genetics
         else:
             gender = Gender.MALE if r.random() < 0.5 else Gender.FEMALE
             genetics = r.randint(1, MAX_UINT32)
         last_name = SimSpawner.get_family_name_for_gender(self._sim_info.account, self._sim_info.last_name, gender == Gender.FEMALE)
         traits = self._select_traits_for_offspring(gender)
         self._offspring_data.append(PregnancyOffspringData(gender, genetics, last_name=last_name, traits=traits))
Exemplo n.º 5
0
def debug_create_baby(actor_sim, position, gender, routing_surface=None):
    baby = None
    try:
        actor_sim_info = actor_sim.sim_info
        account = actor_sim.sim_info.account
        sim_creator = SimCreator(
            gender=gender,
            age=Age.BABY,
            first_name=SimSpawner.get_random_first_name(
                account, gender == Gender.FEMALE),
            last_name=SimSpawner.get_family_name_for_gender(
                account, actor_sim.last_name, gender == Gender.FEMALE))
        (sim_info_list, _) = SimSpawner.create_sim_infos(
            (sim_creator, ),
            household=actor_sim_info.household,
            account=account,
            zone_id=actor_sim_info.zone_id,
            creation_source='cheat: debug_create_baby')
        sim_info = sim_info_list[0]
        baby_def = Baby.get_default_baby_def()
        baby = create_object(baby_def, sim_info.sim_id)
        baby.set_sim_info(sim_info)
        fgl_context = placement.FindGoodLocationContext(
            starting_position=position,
            object_id=baby.id,
            search_flags=placement.FGLSearchFlagsDefault,
            object_footprints=(baby.get_footprint(), ))
        (trans, orient) = placement.find_good_location(fgl_context)
        if trans is not None:
            baby.location = sims4.math.Location(
                sims4.math.Transform(trans, orient), routing_surface)
        client = services.client_manager().get_client_by_household_id(
            sim_info.household_id)
        while client is not None:
            client.selectable_sims.add_selectable_sim_info(sim_info)
    except Exception as e:
        logger.exception('Create baby fail', e)
        if actor_sim_info.household.sim_in_household(sim_info.sim_id):
            actor_sim_info.household.remove_sim_info(sim_info)
        client = services.client_manager().get_client_by_household_id(
            sim_info.household_id)
        if client is not None:
            client.selectable_sims.remove_selectable_sim_info(sim_info)
        while baby is not None:
            baby.destroy(source=actor_sim, cause='Create baby fail')
Exemplo n.º 6
0
def debug_create_baby(actor_sim, position, gender, routing_surface=None):
    baby = None
    try:
        actor_sim_info = actor_sim.sim_info
        account = actor_sim.sim_info.account
        sim_creator = SimCreator(gender=gender, age=Age.BABY, first_name=SimSpawner.get_random_first_name(account, gender == Gender.FEMALE), last_name=SimSpawner.get_family_name_for_gender(account, actor_sim.last_name, gender == Gender.FEMALE))
        (sim_info_list, _) = SimSpawner.create_sim_infos((sim_creator,), household=actor_sim_info.household, account=account, zone_id=actor_sim_info.zone_id, creation_source='cheat: debug_create_baby')
        sim_info = sim_info_list[0]
        baby_def = Baby.get_default_baby_def()
        baby = create_object(baby_def, sim_info.sim_id)
        baby.set_sim_info(sim_info)
        fgl_context = placement.FindGoodLocationContext(starting_position=position, object_id=baby.id, search_flags=placement.FGLSearchFlagsDefault, object_footprints=(baby.get_footprint(),))
        (trans, orient) = placement.find_good_location(fgl_context)
        if trans is not None:
            baby.location = sims4.math.Location(sims4.math.Transform(trans, orient), routing_surface)
        client = services.client_manager().get_client_by_household_id(sim_info.household_id)
        while client is not None:
            client.selectable_sims.add_selectable_sim_info(sim_info)
    except Exception as e:
        logger.exception('Create baby fail', e)
        if actor_sim_info.household.sim_in_household(sim_info.sim_id):
            actor_sim_info.household.remove_sim_info(sim_info)
        client = services.client_manager().get_client_by_household_id(sim_info.household_id)
        if client is not None:
            client.selectable_sims.remove_selectable_sim_info(sim_info)
        while baby is not None:
            baby.destroy(source=actor_sim, cause='Create baby fail')