Пример #1
0
 def run_off_lot_simulation(self):
     if self.should_show_no_way_to_make_money_notification():
         return
     if self._last_off_lot_update is None:
         return
     if not self.tuning_data.off_lot_star_rating_increase_per_hour_curve:
         return
     hours_since_last_sim = self._update_off_lot_time_and_get_delta()
     star_rating = self.get_star_rating()
     value_change = 0
     if sims4.random.random_chance(self.tuning_data.off_lot_chance_of_star_rating_increase):
         value_change = self.tuning_data.off_lot_star_rating_increase_per_hour_curve.get(star_rating)
         if business_handlers.business_archiver.enabled:
             business_handlers.archive_business_event('OffLot', None, 'business with star rating: {} using increase mapping with value change of: {}'.format(star_rating, value_change))
     else:
         value_change = self.tuning_data.off_lot_star_rating_decay_per_hour_curve.get(star_rating)
         perk_tuning = self.tuning_data.off_lot_star_rating_decay_multiplier_perk
         perk_unlocked = False
         if perk_tuning is not None:
             bucks_tracker = services.active_household().bucks_tracker
             if bucks_tracker.is_perk_unlocked(perk_tuning.perk):
                 value_change *= perk_tuning.decay_multiplier
                 perk_unlocked = True
         if business_handlers.business_archiver.enabled:
             if perk_unlocked:
                 event_description = 'business with star rating: {} using decay mapping with value change of: {} after multiplier applied :{}'.format(star_rating, value_change, perk_tuning.decay_multiplier)
             else:
                 event_description = 'business with star rating: {} using decay mapping with value change of: {}'.format(star_rating, value_change)
             business_handlers.archive_business_event('OffLot', None, event_description)
     value_change *= hours_since_last_sim
     self._adjust_star_rating_value(value_change, send_update_message=False)
     self._adjust_profit(hours_since_last_sim)
     self._send_review_update_message()
     self.send_daily_profit_and_cost_update()
Пример #2
0
 def remove_customer(self, sim_info, review_business=True):
     if sim_info.sim_id not in self._customers:
         return
     self._customers[sim_info.sim_id].on_remove()
     customer_data = self._customers.pop(sim_info.sim_id)
     if business_handlers.business_archiver.enabled:
         business_handlers.archive_business_event('Customer', None, 'Customer removed reviewed_business:{}'.format(review_business), sim_id=sim_info.sim_id)
     if review_business:
         self._session_customers_served += 1
         self._lifetime_customers_served += 1
         self._business_manager.process_customer_rating(sim_info, customer_data.get_star_rating(), customer_data.buff_bucket_totals)
         self._send_daily_customers_served_update()
Пример #3
0
 def _set_star_rating(self, new_star_rating_value, buff_data):
     sim = services.sim_info_manager().get(self._sim_id).get_sim_instance()
     if sim is None:
         logger.error(
             "Trying to set a customer's star rating but the sim isn't instanced. {}",
             self._sim_id)
         return
     buff_bucket = buff_data.buff_bucket
     old_star_rating_value = self.get_star_rating_stat_value()
     old_star_rating = self.get_star_rating()
     self.set_star_rating_stat_value(new_star_rating_value)
     new_star_rating = self.get_star_rating()
     bucket_data = self._business_manager.tuning_data.customer_star_rating_buff_bucket_data.get(
         buff_bucket)
     is_positive = buff_data.buff_bucket_delta > 0
     vfx_to_play = None
     if is_positive:
         if self._business_manager.tuning_data.customer_star_rating_vfx_increase_arrow is not None:
             self._business_manager.tuning_data.customer_star_rating_vfx_increase_arrow(
                 sim).start_one_shot()
         vfx_to_play = bucket_data.positive_bucket_vfx
     else:
         if self._business_manager.tuning_data.customer_star_rating_vfx_decrease_arrow is not None:
             self._business_manager.tuning_data.customer_star_rating_vfx_decrease_arrow(
                 sim).start_one_shot()
         vfx_to_play = bucket_data.negative_bucket_vfx
     if vfx_to_play is not None:
         vfx_to_play(sim).start_one_shot()
     if business_handlers.business_archiver.enabled:
         if vfx_to_play is not None:
             business_handlers.archive_business_event(
                 'Customer', sim,
                 'Star rating value change: old_value:{} new_value:{} - playing effect: {}'
                 .format(old_star_rating_value, new_star_rating_value,
                         vfx_to_play.effect_name))
         else:
             business_handlers.archive_business_event(
                 'Customer', sim,
                 'No Star rating value change: current_value:{}'.format(
                     new_star_rating_value))
     if old_star_rating != new_star_rating:
         self._trigger_star_vfx_change()
     self._send_customer_review_event_message(buff_bucket,
                                              is_positive=is_positive)
Пример #4
0
 def _on_buff_added(self, buff_type, sim_id):
     for (
             buff, buff_data
     ) in self._business_manager.tuning_data.customer_star_rating_buff_data.items(
     ):
         if buff_type is buff.buff_type:
             buff_bucket = buff_data.buff_bucket
             if business_handlers.business_archiver.enabled:
                 business_handlers.archive_business_event(
                     'Customer',
                     None,
                     'Buff Added:{} bucket:{}'.format(
                         buff_type, buff_bucket),
                     sim_id=sim_id)
             self._buff_bucket_totals[
                 buff_bucket] += buff_data.buff_bucket_delta
             if buff_data.update_star_rating_on_add:
                 self._last_rating_change_buff_id = buff.guid64
                 self._update_star_rating(buff_data)
             return
Пример #5
0
 def _calculate_star_rating_from_buff_bucket_totals(self):
     if not self._buff_bucket_totals:
         return self._business_manager.tuning_data.default_customer_star_rating
     actual_bucket_total = 0
     for bucket_type in self._business_manager.tuning_data.customer_star_rating_buff_bucket_data:
         actual_bucket_total += self._business_manager.get_interpolated_buff_bucket_value(
             bucket_type, self._buff_bucket_totals[bucket_type])
     if business_handlers.business_archiver.enabled:
         sim_info = services.sim_info_manager().get(self._sim_id)
         business_handlers.archive_business_event(
             'Customer', sim_info,
             'Calculating Star Rating: Bucket Total:{}'.format(
                 actual_bucket_total))
     return sims4.math.clamp(
         self._business_manager.tuning_data.min_and_max_star_rating.
         lower_bound,
         self._business_manager.tuning_data.
         customer_star_buff_bucket_to_rating_curve.get(actual_bucket_total),
         self._business_manager.tuning_data.min_and_max_star_rating.
         upper_bound)
Пример #6
0
 def _trigger_star_vfx_change(self, from_init=False):
     sim_info = services.sim_info_manager().get(self._sim_id)
     if sim_info is None:
         logger.error(
             'Trying to trigger vfx on a customer with no sim info. Customer ID = {}',
             self._sim_id)
         return
     sim = sim_info.get_sim_instance()
     if sim is None:
         return
     tuning_data = self._business_manager.tuning_data
     star_rating = self.get_star_rating()
     is_critic = tuning_data.critic is not None and sim.has_trait(
         tuning_data.critic.critic_trait)
     if is_critic:
         vfx_mapping = tuning_data.critic.critic_star_rating_vfx_mapping
         if from_init:
             self._critic_banner_vfx_handle = tuning_data.critic.critic_banner_vfx(
                 sim)
             self._critic_banner_vfx_handle.start()
     else:
         vfx_mapping = tuning_data.customer_star_rating_vfx_mapping
     star_rating_vfx_tuning = vfx_mapping.get(star_rating)
     if from_init:
         star_vfx = star_rating_vfx_tuning.initial_vfx
     else:
         star_vfx = star_rating_vfx_tuning.rating_change_vfx
     self._stop_star_rating_vfx()
     self._star_rating_vfx_handle = star_vfx(sim)
     self._star_rating_vfx_handle.start()
     if business_handlers.business_archiver.enabled:
         business_handlers.archive_business_event(
             'Customer', sim,
             'Star rating change - playing effect: {} , from init: {}'.
             format(star_vfx.effect_name, from_init))
     if tuning_data.customer_max_star_rating_vfx is not None and star_rating == tuning_data.min_and_max_star_rating.upper_bound:
         max_star_vfx = tuning_data.customer_max_star_rating_vfx(sim)
         max_star_vfx.start()