def get_test_result(self, sim, cls): unavailable_items = Counter() unavailable_item_description = {} for item in self.ingredients: item_count = sim.inventory_component.get_item_quantity_by_definition( item.ingredient) if item_count < item.quantity: unavailable_items[ item.ingredient] += item.quantity - item_count unavailable_item_description[ item.ingredient] = item.missing_ingredient_additional_text if unavailable_items: tooltip = LocalizationHelperTuning.get_bulleted_list( ItemCost.UNAVAILABLE_TOOLTIP_HEADER(sim), *tuple( LocalizationHelperTuning.get_object_count( count, ingredientDef, detail_text=unavailable_item_description[ingredientDef] ) for (ingredientDef, count) in unavailable_items.items())) return event_testing.results.TestResult( False, "Sim doesn't have the required items in inventory.", tooltip=lambda *_, **__: tooltip) return TestResult.TRUE
def _apply_to_subject_and_target(self, subject, target, resolver): if subject.is_npc: return obj_counter = Counter() if self._object_rewards.spawn_type == ObjectRewardsTuning.SPAWNER_REWARD: participant = resolver.get_participant( self._object_rewards.spawner_participant) if participant is not None: weighted_data = participant.interaction_spawner_data() if weighted_data is not None: self._create_object_rewards(weighted_data, obj_counter, resolver) elif self._object_rewards.spawn_type == ObjectRewardsTuning.TUNABLE_REWARD: for _ in range(self._object_rewards.quantity): weight_pairs = [(data.weight, data.reward) for data in self._object_rewards.reward_objects ] self._create_object_rewards(weight_pairs, obj_counter, resolver) if obj_counter and self._notification is not None: obj_names = [ LocalizationHelperTuning.get_object_count(count, obj) for (obj, count) in obj_counter.items() ] dialog = self._notification(subject, resolver=resolver) dialog.show_dialog( additional_tokens=(LocalizationHelperTuning.get_bulleted_list( None, *obj_names), )) return True
def _apply_to_subject_and_target (self, subject, target, resolver, placement_override_func = None, post_object_create_func = None): if subject.is_npc: return obj_counter = Counter() quantity = self._object_rewards.quantity quantity += self._object_rewards.tested_bonus_quantity.get_modified_value(resolver) for _ in range(int(quantity)): weight_pairs = [(data.weight, (data.reward, data.states_on_reward_object, data.quantity)) for data in self._object_rewards.reward_objects] self._create_object_rewards(weight_pairs, obj_counter, resolver, subject = subject, placement_override_func = placement_override_func, post_object_create_func = post_object_create_func) if obj_counter and self._notification is not None: obj_names = [LocalizationHelperTuning.get_object_count(count, obj) for (obj, count) in obj_counter.items()] dialog = self._notification(subject, resolver = resolver) dialog.show_dialog(additional_tokens = (LocalizationHelperTuning.get_bulleted_list(None, *obj_names),)) return True
def get_interaction_tooltip(self, tooltip=None, sim=None): if self.ingredients: item_tooltip = LocalizationHelperTuning.get_bulleted_list( ItemCost.AVAILABLE_TOOLTIP_HEADER(sim), *tuple( LocalizationHelperTuning.get_object_count( ingredient.quantity, ingredient.ingredient, detail_text=ingredient. missing_ingredient_additional_text) for ingredient in self.ingredients)) if tooltip is None: return item_tooltip else: return LocalizationHelperTuning.get_new_line_separated_strings( tooltip, item_tooltip) return tooltip