1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-02-01 19:25:12 +01:00

Use uint16_t for marketing probability

This commit is contained in:
Ted John
2019-02-19 15:42:31 +00:00
parent dfa0c528c2
commit 440511afc5
3 changed files with 9 additions and 6 deletions

View File

@@ -30,20 +30,20 @@ const money16 AdvertisingCampaignPricePerWeek[] = {
MONEY(200, 00), // RIDE
};
static constexpr const int32_t AdvertisingCampaignGuestGenerationProbabilities[] = {
static constexpr const uint16_t AdvertisingCampaignGuestGenerationProbabilities[] = {
400, 300, 200, 200, 250, 200,
};
std::vector<MarketingCampaign> gMarketingCampaigns;
int32_t marketing_get_campaign_guest_generation_probability(int32_t campaignType)
uint16_t marketing_get_campaign_guest_generation_probability(int32_t campaignType)
{
auto campaign = marketing_get_campaign(campaignType);
if (campaign == nullptr)
return 0;
// Lower probability of guest generation if price was already low
int32_t probability = AdvertisingCampaignGuestGenerationProbabilities[campaign->Type];
auto probability = AdvertisingCampaignGuestGenerationProbabilities[campaign->Type];
switch (campaign->Type)
{
case ADVERTISING_CAMPAIGN_PARK_ENTRY_FREE:
@@ -57,7 +57,7 @@ int32_t marketing_get_campaign_guest_generation_probability(int32_t campaignType
case ADVERTISING_CAMPAIGN_RIDE_FREE:
{
auto ride = get_ride(campaign->RideId);
if (ride->price < MONEY(0, 30))
if (ride == nullptr || ride->price < MONEY(0, 30))
probability /= 8;
break;
}

View File

@@ -59,7 +59,7 @@ namespace MarketingCampaignFlags
extern const money16 AdvertisingCampaignPricePerWeek[ADVERTISING_CAMPAIGN_COUNT];
extern std::vector<MarketingCampaign> gMarketingCampaigns;
int32_t marketing_get_campaign_guest_generation_probability(int32_t campaign);
uint16_t marketing_get_campaign_guest_generation_probability(int32_t campaign);
void marketing_update();
void marketing_set_guest_campaign(rct_peep* peep, int32_t campaign);
bool marketing_is_campaign_type_applicable(int32_t campaignType);

View File

@@ -39,6 +39,7 @@
#include "Surface.h"
#include <algorithm>
#include <limits>
using namespace OpenRCT2;
@@ -966,7 +967,9 @@ void Park::GenerateGuests()
for (const auto& campaign : gMarketingCampaigns)
{
// Random chance of guest generation
if ((int32_t)scenario_rand_max(0xFFFF) < marketing_get_campaign_guest_generation_probability(campaign.Type))
auto probability = marketing_get_campaign_guest_generation_probability(campaign.Type);
auto random = scenario_rand_max(std::numeric_limits<uint16_t>::max());
if (random < probability)
{
GenerateGuestFromCampaign(campaign.Type);
}