def get_retail_objects(_connection=None): automation_output = sims4.commands.AutomationOutput(_connection) automation_output('GetRetailObjects; Status:Begin') for obj in RetailUtils.get_all_retail_objects(): automation_output('GetRetailObjects; Status:Data, ObjId:{}'.format( obj.id)) automation_output('GetRetailObjects; Status:End')
def _try_find_object_and_push_buy_affordance(self): (min_price, max_price) = self.owner._get_min_max_price_range() found_object = None objects_in_price_range = [] other_potential_objects = [] for found_object in RetailUtils.all_retail_objects_gen( allow_sold=False): if found_object.in_use and not found_object.in_use_by( self.owner._customer): continue sell_price = found_object.retail_component.get_sell_price() if min_price <= sell_price <= max_price: objects_in_price_range.append(found_object) else: other_potential_objects.append(found_object) random.shuffle(objects_in_price_range) for price_range_object in objects_in_price_range: (_, result) = self._test_execute_buy_affordance(price_range_object) if result: return (price_range_object, result) random.shuffle(other_potential_objects) num_objects_tested = 0 for potential_object in other_potential_objects: if num_objects_tested >= _BuyState.MAX_BUY_OBJECT_TESTS: logger.warn( 'Retail Customer {} hit MAX_BUY_OBJECT_TESTS when looking for an object to buy.', owner='rmccord') return (None, False) (_, result) = self._test_execute_buy_affordance(potential_object) if result: return (potential_object, result) num_objects_tested += 1 return (None, False)
def has_any_object_for_sale(self): for retail_obj in RetailUtils.all_retail_objects_gen( allow_not_for_sale=True): if retail_obj.retail_component.is_for_sale: return True if retail_obj.is_in_inventory(): return True return False
def _open_household_owned_npc_store(self): should_open = False for retail_obj in RetailUtils.all_retail_objects_gen( allow_not_for_sale=True): self._adjust_commodities_if_necessary(retail_obj) if not should_open: if not retail_obj.retail_component.is_not_for_sale: should_open = True self.set_open(should_open)
def _do_behavior(self): customer = self.interaction.get_participant(self.customer) if customer is None: logger.error('Got a None customer trying to run a RetailCustomerAction element.') return False situation = RetailUtils.get_retail_customer_situation_from_sim(customer) if situation is None: logger.warn("Trying to run a customer action on a sim that isn't running a retail situation.") return False for action in self.actions: action.apply_action(customer, situation)
def on_zone_load(self): super().on_zone_load() for obj in RetailUtils.get_all_retail_objects(): self._fixup_placard_if_necessary(obj) if services.current_zone_id() != self._zone_id: return tracker = services.active_lot().commodity_tracker advertising_commodities = RetailTuning.ADVERTISING_COMMODITY_MAP.values( ) for advertising_commodity in advertising_commodities: commodity = tracker.get_statistic(advertising_commodity) if commodity is not None: commodity.decay_enabled = True
def get_median_item_value(self): values = [ obj.retail_component.get_retail_value() for obj in RetailUtils.all_retail_objects_gen() ] if not values: return 0 values.sort() count = len(values) midpoint = count // 2 if count % 2: return values[midpoint] return (values[midpoint] + values[midpoint - 1]) / 2
def _open_pure_npc_store(self, is_premade): has_retail_obj = False for retail_obj in RetailUtils.all_retail_objects_gen( allow_not_for_sale=True): self._adjust_commodities_if_necessary(retail_obj) obj_retail_component = retail_obj.retail_component if obj_retail_component.is_for_sale or retail_obj.is_in_inventory( ): has_retail_obj = True else: if is_premade: set_for_sale = retail_obj.has_tag( self.NPC_STORE_FOR_SALE_TAG) else: set_for_sale = obj_retail_component.is_sold if set_for_sale: obj_retail_component.set_for_sale() has_retail_obj = True if retail_obj.has_tag(self.NPC_STORE_MANNEQUIN_TAG): self._set_up_mannequin_during_open(retail_obj) has_retail_obj = True self.set_open(has_retail_obj)
def get_curb_appeal(self): total_curb_appeal = sum( obj.retail_component.get_current_curb_appeal() for obj in RetailUtils.get_all_retail_objects()) return total_curb_appeal + self._get_lot_advertising_commodity_sum()
def update_retail_objects_commodities(self): for retail_obj in RetailUtils.all_retail_objects_gen(allow_sold=False): retail_obj.update_component_commodity_flags()
def toggle_for_sale_vfx(self): self._for_sale_vfx_toggle_value = not self._for_sale_vfx_toggle_value for item in RetailUtils.all_retail_objects_gen( allow_sold=False, include_inventories=False): self._update_for_sale_vfx_for_object( item, self._for_sale_vfx_toggle_value)