Files
gtav-src/script/dev_ng/singleplayer/include/globals/finance_globals.sch
T
2025-09-29 00:52:08 +02:00

801 lines
25 KiB
XML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
USING "finance_enums.sch"
USING "charsheet_global_definitions.sch"
USING "finance_generated_header.sch"
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : finance_globals.sch
// AUTHOR : Ak
// DESCRIPTION : The global data for the player's accounts and the stock market
//
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
INT g_iForceStockLogUpdate = 0
BOOL g_bBrowserStockPriceSynchInProgress
INT g_iBrowserStockTimeLastSynch = -1
// *****************************************************************************************
// ********************************Account management data**********************************
// *****************************************************************************************
//Account balances/logs
ENUM BANK_ACCOUNT_ACTION_TYPE
BAA_DEBIT,
BAA_CREDIT
ENDENUM
//anything that can credit or debit an account should be here
ENUM BANK_ACCOUNT_ACTION_SOURCE_BAAC// TODO, move out to finance enums
// Default/basic actions.
BAAC_DEFAULT_DEBUG,
BAAC_UNLOGGED_SMALL_ACTION,
BAAC_BROKERAGE_PAYMENT,
// Characters that can pay others
BAAC_MICHAEL,
// Company actions.
BAAC_CLUCKING_BELL,
BAAC_WHIZZ_PHONE,
BAAC_MADAM_CHONGS,
BAAC_DS_CLOTHING,
BAAC_LOS_SANTOS_HOSPITAL,
BAAC_CRAPKIA,
BAAC_VINE_CLEAN,
BAAC_CANDYSUXX,
BAAC_VINEWOOD_BEAUTY,
BAAC_AMMUNATION,
BAAC_BAHAMAMAMAS,
BAAC_BAY_BAR,
BAAC_BIKER_BAR,
BAAC_HIMEN_BAR,
BAAC_MOJITOS_BAR,
BAAC_SHENANIGANS_BAR,
BAAC_SINGLETONS_BAR,
// Service actions.
BAAC_TAXI,
BAAC_DRUG_TRAFFICKING,
BAAC_CAR_REPO,
BAAC_SHRINK,
BAAC_STRIP_CLUB,
BAAC_HUNTING,
BAAC_SHOOTING_RANGE,
BAAC_RACES,
// Other/misc actions.
BAAC_EPSILON_SITE_DONATION,
BAAC_EPSILON_ROBES_DONATION,
// Mission actions.
BAAC_SIMEON,
BAAC_LESTER,
BAAC_AMANDA,
BAAC_JIMMY,
BAAC_TRACEY,
BAAC_OSCAR,
BAAC_ABIGAIL,
BAAC_RE_BURIAL,
BAAC_MRSPOKE, // Family 2 - Bike rental
BAAC_LOS_SANTOS_GOLF_CLUB,
// Hairdo shops
BAAC_HAIRDO_SHOP_01_BH, // Salon - Rockford Hills
BAAC_HAIRDO_SHOP_02_SC, // Barbers - South Los Santos
BAAC_HAIRDO_SHOP_03_V, // Barbers - Vespucci
BAAC_HAIRDO_SHOP_04_SS, // Barbers - Sandy Shores
BAAC_HAIRDO_SHOP_05_MP, // Barbers - Mirror Park
BAAC_HAIRDO_SHOP_06_HW, // Barbers - Vinewood
BAAC_HAIRDO_SHOP_07_PB, // Barbers - Paleto Bay
// Clothes shops
BAAC_CLOTHES_SHOP_L_01_SC, // Clothes Low - South Los Santos
BAAC_CLOTHES_SHOP_L_02_GS, // Clothes Low - Grapeseed
BAAC_CLOTHES_SHOP_L_03_DT, // Clothes Low - Downtown
BAAC_CLOTHES_SHOP_L_04_CS, // Clothes Low - Countryside
BAAC_CLOTHES_SHOP_L_05_GSD, // Clothes Low - Grande Senora Desert
BAAC_CLOTHES_SHOP_L_06_VC, // Clothes Low - Vespucci Canals
BAAC_CLOTHES_SHOP_L_07_PB, // Clothes Low - Paleto Bay
BAAC_CLOTHES_SHOP_M_01_SM, // Clothes Mid - Del Perro
BAAC_CLOTHES_SHOP_M_03_H, // Clothes Mid - Harmony
BAAC_CLOTHES_SHOP_M_04_HW, // Clothes Mid - Vinewood
BAAC_CLOTHES_SHOP_M_05_GOH, // Clothes Mid - Great Ocean Highway
BAAC_CLOTHES_SHOP_H_01_BH, // Clothes High - Rockford Hills
BAAC_CLOTHES_SHOP_H_02_B, // Clothes High - Burton
BAAC_CLOTHES_SHOP_H_03_MW, // Clothes High - Morningwood
BAAC_CLOTHES_SHOP_A_01_VB, // Clothes Ambient - Vespucci Movie Masks
// Tattoos shops
BAAC_TATTOO_PARLOUR_01_HW, // Tattoo - Vinewood
BAAC_TATTOO_PARLOUR_02_SS, // Tattoo - Sandy Shores
BAAC_TATTOO_PARLOUR_03_PB, // Tattoo - Paleto Bay
BAAC_TATTOO_PARLOUR_04_VC, // Tattoo - Vespucci Canals
BAAC_TATTOO_PARLOUR_05_ELS, // Tattoo - East Los Santos
BAAC_TATTOO_PARLOUR_06_GOH, // Tattoo - Great Ocean Highway
// Gun shops
BAAC_GUN_SHOP_01_DT, // Weapons - Downtown
BAAC_GUN_SHOP_02_SS, // Weapons - Sandy Shores
BAAC_GUN_SHOP_03_HW, // Weapons - Vinewood
BAAC_GUN_SHOP_04_ELS, // Weapons - East Los Santos
BAAC_GUN_SHOP_05_PB, // Weapons - Paleto Bay
BAAC_GUN_SHOP_06_LS, // Weapons - Little Seoul
BAAC_GUN_SHOP_07_MW, // Weapons - Morningwood
BAAC_GUN_SHOP_08_CS, // Weapons - Countryside
BAAC_GUN_SHOP_09_GOH, // Weapons - Great Ocean Highway
BAAC_GUN_SHOP_10_VWH, // Weapons - Vinewood Hills
BAAC_GUN_SHOP_11_ID1, // Weapons - Cypress Flats
// Car mod shops
BAAC_CARMOD_SHOP_01_AP, // Car Mod - AMB1
BAAC_CARMOD_SHOP_05_ID2, // Car Mod - AMB2
BAAC_CARMOD_SHOP_06_BT1, // Car Mod - AMB3
BAAC_CARMOD_SHOP_07_CS1, // Car Mod - AMB4
BAAC_CARMOD_SHOP_08_CS6, // Car Mod - AMB5
// Vehicle websites
BAAC_MOTORSPORT_SITE,
BAAC_ARMY_SITE,
BAAC_PLANE_SITE,
BAAC_BOAT_SITE,
BAAC_BIKE_SITE,
BAAC_SUPERAUTO_SITE,
BAAC_LOWRIDER_SITE,
BAAC_ARENA_SITE,
// Other websites
BAAC_CONSITE, // www.iwillsurviveitall.com
BAAC_REALITY_MILL, // www.therealitymill.com
// Misc
BAAC_BAIL_BONDS,
BAAC_CASH_DEPOSIT,
BAAC_HEIST_OFFSHORE_ACCOUNT,
BAAC_SNACKS,
// Properties
BAAC_PROP_TOWING, // Towing Impound (Franklin)
BAAC_PROP_TAXI, // Taxi Lot (all)
BAAC_PROP_ARMS, // Arms Trafficking (Trevor)
BAAC_PROP_SONAR, // Sonar Collections (All)
BAAC_PROP_CARMOD, // Car Mod Shop (Franklin)
BAAC_PROP_VCINEMA, // Vinewood Cinema (Michael)
BAAC_PROP_DCINEMA, // Downtown Cinema (Michael)
BAAC_PROP_MCINEMA, // Morningwood Cinema (Michael)
BAAC_PROP_GOLF, // Golf club (All)
BAAC_PROP_CSCRAP, // Car Scrap Yard (Franklin)
BAAC_PROP_SMOKE, // Smoke on the Water Weed Shop (Franklin)
BAAC_PROP_BAR_TEQUILA, // Tequi-la-la Bar (All)
BAAC_PROP_BAR_PITCHERS, // Pitchers (All)
BAAC_PROP_BAR_HEN, // The Hen House (all)
BAAC_PROP_BAR_HOOKIES, // Hookies Bar (all)
BAAC_PROP_MARINA,
BAAC_PROP_HANGAR,
BAAC_PROP_HELIPAD,
BAAC_PROP_GARAGE,
// Police stations
BAAC_POLICE_STATION_VB, // Vespucci Beach
BAAC_POLICE_STATION_SC, // South Central
BAAC_POLICE_STATION_DT, // Downtown
BAAC_POLICE_STATION_RH, // Rockford Hills
BAAC_POLICE_STATION_SS, // Sandy Shores
BAAC_POLICE_STATION_PB, // Paleto Bay
BAAC_POLICE_STATION_HW, // Vinewood (#1289759)
// Hospitals
BAAC_HOSPITAL_RH, // Rockford Hills
BAAC_HOSPITAL_SC, // South Central
BAAC_HOSPITAL_DT, // Downtown
BAAC_HOSPITAL_SS, // Sandy Shores
BAAC_HOSPITAL_PB, // Paleto Bay
//MP
BAAC_DYNASTY_PROPERTY
,BAAC_CARMOD_SHOP_SUPERMOD // Car Mod - AMB6
ENDENUM
/// PURPOSE: used to store the current state of news to be displayed on Eye Find
ENUM EYEFIND_NEWS_STORY_STATE_ENUM
// SP mission unlocks
EYEFIND_NEWS_STORY_STATE_SP_PRO = 0, // Newsbreak1
EYEFIND_NEWS_STORY_STATE_SP_ARM2, // Newsbreak2
EYEFIND_NEWS_STORY_STATE_SP_ARM3, // Newsbreak3
EYEFIND_NEWS_STORY_STATE_SP_FAM1, // Newsbreak4
EYEFIND_NEWS_STORY_STATE_SP_FAM3, // Newsbreak5
EYEFIND_NEWS_STORY_STATE_SP_LAM1, // Newsbreak6
EYEFIND_NEWS_STORY_STATE_SP_LST1, // Newsbreak7
EYEFIND_NEWS_STORY_STATE_SP_H_JWL, // Newsbreak8
EYEFIND_NEWS_STORY_STATE_SP_TRE2, // Newsbreak9
EYEFIND_NEWS_STORY_STATE_SP_CHI1, // Newsbreak10
EYEFIND_NEWS_STORY_STATE_SP_CHI2, // Newsbreak11
EYEFIND_NEWS_STORY_STATE_SP_TRE3, // Newsbreak12
EYEFIND_NEWS_STORY_STATE_SP_FAM4, // Newsbreak13
EYEFIND_NEWS_STORY_STATE_SP_FIB2, // Newsbreak14
EYEFIND_NEWS_STORY_STATE_SP_FIB3, // Newsbreak15
EYEFIND_NEWS_STORY_STATE_SP_FRA1, // Newsbreak16
EYEFIND_NEWS_STORY_STATE_SP_FIB4, // Newsbreak17
EYEFIND_NEWS_STORY_STATE_SP_H_DOCK, // Newsbreak18
EYEFIND_NEWS_STORY_STATE_SP_CARS2, // Newsbreak19
EYEFIND_NEWS_STORY_STATE_SP_SOL1, // Newsbreak20
EYEFIND_NEWS_STORY_STATE_SP_MTN1, // Newsbreak21
EYEFIND_NEWS_STORY_STATE_SP_CARS3, // Newsbreak22
EYEFIND_NEWS_STORY_STATE_SP_EXL1, // Newsbreak23
EYEFIND_NEWS_STORY_STATE_SP_H_RB2A, // Newsbreak24
EYEFIND_NEWS_STORY_STATE_SP_EXL3, // Newsbreak25
EYEFIND_NEWS_STORY_STATE_SP_FIB5, // Newsbreak26
EYEFIND_NEWS_STORY_STATE_SP_MIC1, // Newsbreak27
EYEFIND_NEWS_STORY_STATE_SP_SOL2, // Newsbreak28
EYEFIND_NEWS_STORY_STATE_SP_FAM6, // Newsbreak29
EYEFIND_NEWS_STORY_STATE_SP_H_AG3A, // Newsbreak30
EYEFIND_NEWS_STORY_STATE_SP_MIC3, // Newsbreak31
EYEFIND_NEWS_STORY_STATE_SP_SOL3, // Newsbreak32
EYEFIND_NEWS_STORY_STATE_SP_MIC4, // Newsbreak33
EYEFIND_NEWS_STORY_STATE_SP_H_BS2A, // Newsbreak34
EYEFIND_NEWS_STORY_STATE_SP_FINALE, // Newsbreak35
// RC mission unlocks
EYEFIND_NEWS_STORY_STATE_RC_PAP1, // Newsbreak36
//EYEFIND_NEWS_STORY_STATE_RC_PAP2, // Newsbreak37 - no story
EYEFIND_NEWS_STORY_STATE_RC_PAP3A, // Newsbreak38
EYEFIND_NEWS_STORY_STATE_RC_PAP3B, // Newsbreak39
EYEFIND_NEWS_STORY_STATE_RC_DRF1, // Newsbreak40
EYEFIND_NEWS_STORY_STATE_RC_EPN8, // Newsbreak41
EYEFIND_NEWS_STORY_STATE_RC_NIG1A, // Newsbreak42
EYEFIND_NEWS_STORY_STATE_RC_NIG1B, // Newsbreak43
EYEFIND_NEWS_STORY_STATE_RC_NIG1C, // Newsbreak44
EYEFIND_NEWS_STORY_STATE_RC_NIG1D, // Newsbreak45
EYEFIND_NEWS_STORY_STATE_RC_NIG2, // Newsbreak46
EYEFIND_NEWS_STORY_STATE_RC_NIG3, // Newsbreak47
EYEFIND_NEWS_STORY_STATE_RC_EXT4, // Newsbreak48
// Assassination (now SP_)
EYEFIND_NEWS_STORY_STATE_SP_ASS1, // Newsbreak49
EYEFIND_NEWS_STORY_STATE_SP_ASS2, // Newsbreak50
EYEFIND_NEWS_STORY_STATE_SP_ASS3, // Newsbreak51
EYEFIND_NEWS_STORY_STATE_SP_ASS4, // Newsbreak52
EYEFIND_NEWS_STORY_STATE_SP_ASS5, // Newsbreak53
// Oddjobs - Air trafficking
EYEFIND_NEWS_STORY_STATE_O_ATA3, // Newsbreak54
//Shrink (now SP_
EYEFIND_NEWS_STORY_STATE_SP_SHK5, // Newsbreak55
EYEFIND_NEWS_STORY_STATE_O_CULT, // Newsbreak56
EYEFIND_NEWS_STORY_STATE_INVALID
ENDENUM
CONST_INT MAX_BANK_ACCOUNT_LOG_ENTRIES 11 // cut down to 11 last entries for each char to save memory
STRUCT BANK_ACCOUNT_LOG_ENTRY
BANK_ACCOUNT_ACTION_TYPE eType
BANK_ACCOUNT_ACTION_SOURCE_BAAC eBaacSource
INT iDegree
//checkpoint log for 1523081
BANK_ACCOUNT_ACTION_TYPE eTypeCheckpoint
BANK_ACCOUNT_ACTION_SOURCE_BAAC eBaacSourceCheckpoint
INT iDegreeCheckpoint
ENDSTRUCT
//each account must store a log of events too, not sure how to structure it yet...
STRUCT BANK_ACCOUNT_DATA
INT iBalance//current balance
ENDSTRUCT
STRUCT BANK_ACCOUNT_SAVED_LOG
INT iLogActions//the total number of actions processed
INT iLogIndexPoint//a rolling point showing the last index
BANK_ACCOUNT_LOG_ENTRY LogEntries[MAX_BANK_ACCOUNT_LOG_ENTRIES]
ENDSTRUCT
CONST_INT MAX_BANK_ACCOUNTS MAX_ACCOUNTS
//enumBankAccountName g_BankFocusAccount
BANK_ACCOUNT_DATA g_BankAccounts[MAX_BANK_ACCOUNTS]
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// *******************************Stock market management data******************************
// *****************************************************************************************
// rest of values are in the finance generated header
CONST_INT MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER 10
/* //now direct from savegame
STRUCT BAWSAQ_PORTFOLIO_ENTRY_STRUCT
BAWSAQ_COMPANIES company
FLOAT fMoneyInvested
INT iSharesOwned
ENDSTRUCT
*/
//these all need to be saved
//BAWSAQ_PORTFOLIO_ENTRY_STRUCT g_BS_Portfolios[BS_TR_TOTAL][MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
BOOL g_bStockMarketBrowserUpdateTick = FALSE
//car mod
BOOL g_bStockMarketCarModified = FALSE
MODEL_NAMES g_eStockMarketCarModified
BOOL g_bInATM = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 g_m_strFile = "stockSystem.log"
TEXT_LABEL_63 g_m_strPath = "X:/gta5/build/dev/"
BOOL g_b_financeLogFirstTick = TRUE
BOOL g_bFake_fire_and_forget_new_atm = FALSE
PROC DEBUG_STOCK_DUMP_HEADER_CHECK()
IF g_b_financeLogFirstTick
g_b_financeLogFirstTick = FALSE
IF g_b_financeLogFirstTick
g_b_financeLogFirstTick = FALSE
SAVE_NEWLINE_TO_NAMED_DEBUG_FILE(g_m_strPath, g_m_strFile)
SAVE_NEWLINE_TO_NAMED_DEBUG_FILE(g_m_strPath, g_m_strFile)
SAVE_STRING_TO_NAMED_DEBUG_FILE("---------------------------------------------------",g_m_strPath, g_m_strFile)
SAVE_NEWLINE_TO_NAMED_DEBUG_FILE(g_m_strPath, g_m_strFile)
STRING m_txtLogString = "[NEW STOCK LOG]\n"
SAVE_STRING_TO_NAMED_DEBUG_FILE(m_txtLogString, g_m_strPath, g_m_strFile)
ENDIF
ENDIF
ENDPROC
#ENDIF
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// Finance system saved data
CONST_INT MAX_SP_FINANCE_VALUE_STORAGE 42
CONST_INT MAX_SP_FINANCE_FILTERS 8
STRUCT FinancePortfolioBackup
INT MIKE_SHARES_COMPANY_INDEX[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER][2]
FLOAT MIKE_SHARES_INVESTED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER][2]
INT MIKE_SHARES_OWNED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER][2]
INT FRANKLIN_SHARES_COMPANY_INDEX[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER][2]
FLOAT FRANKLIN_SHARES_INVESTED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER][2]
INT FRANKLIN_SHARES_OWNED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER][2]
INT TREVOR_SHARES_COMPANY_INDEX[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER][2]
FLOAT TREVOR_SHARES_INVESTED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER][2]
INT TREVOR_SHARES_OWNED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER][2]
ENDSTRUCT
FinancePortfolioBackup g_sPortfolioSnapshot // used for maintaining consistant share values on retries
STRUCT FinanceDataSaved
//BAWSAQ_PORTFOLIO_ENTRY_STRUCT g_BS_Portfolios[BS_TR_TOTAL][MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
//BAWSAQ_COMPANIES company
//FLOAT fMoneyInvested
//INT iSharesOwned
INT MIKE_SHARES_COMPANY_INDEX[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
FLOAT MIKE_SHARES_INVESTED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
INT MIKE_SHARES_OWNED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
INT FRANKLIN_SHARES_COMPANY_INDEX[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
FLOAT FRANKLIN_SHARES_INVESTED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
INT FRANKLIN_SHARES_OWNED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
INT TREVOR_SHARES_COMPANY_INDEX[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
FLOAT TREVOR_SHARES_INVESTED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
INT TREVOR_SHARES_OWNED[MAX_BAWSAQ_PORTFOLIO_ENTRIES_PER_TRADER]
BOOL bFirstTimeTutorialSeen
BOOL bAtmFirstTimeFlowHelpShown
BOOL bInitialPriceGenerationPerformed
BOOL bShitSkipBool
//Stored single player prices
FLOAT SINGLE_PLAYER_SHARE_PRICE_DUMP[MAX_SP_FINANCE_VALUE_STORAGE]
FLOAT SINGLE_PLAYER_SHARE_MAX_DUMP[MAX_SP_FINANCE_VALUE_STORAGE]
FLOAT SINGLE_PLAYER_SHARE_MIN_DUMP[MAX_SP_FINANCE_VALUE_STORAGE]
//bank data
BOOL bFirstTimeBankInit
BANK_ACCOUNT_SAVED_LOG PLAYER_ACCOUNT_LOGS[MAX_BANK_ACCOUNTS]
INT iProfitLoss
INT iFiltersRegistered
BAWSAQ_COMPANIES FilteredBind[MAX_SP_FINANCE_FILTERS]
INT iFilterDurationRemaining[MAX_SP_FINANCE_FILTERS]
INT iFilterFlags[MAX_SP_FINANCE_FILTERS]
BOOL bBrowserTutorialSeen
INT iSaveCoupons
EYEFIND_NEWS_STORY_STATE_ENUM eCurrentEyeFindNewsStoryState
ENDSTRUCT
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// *************************************OFFLINE Stock News Ticker****************************
//Requirements:
//maintain a list of headlines - with some synonyms and variants?
//maintain a list of criteria for activation of those stories
//- price,modifiers,online (how to generalise? don't?)
//track fired stories and provide a "cool down" time during which they cannot trigger again
/*
CONST_INT MAX_BAWSAQ_NEWS_STORIES 8 //will be way more than this likely
CONST_INT MAX_BAWSAQ_NEWS_PRICE_TRIGGERS 4
CONST_INT MAX_BAWSAQ_NEWS_MODIFIER_TRIGGERS 4
//criteria for triggering a news event based on price change of a listing
//tracks the price and triggers the news story if the crieria specified by it's type is triggered
//types: - TODO make the enum table for these
ENUM BAWSAQ_NEWS_PRICE_TRIGGER_TYPE
BS_NM_PRICE_CRASH,//a stock halves it's value twice in a given timeframe
BS_NM_PRICE_BOOM,//a stock doubles it's value twice in a given timeframe
BS_NM_PRICE_RALLY//a stock halves it's value then rises to double it's value in a given timeframe
ENDENUM
ENUM BAWSAQ_NEWS_MODIFIER_TRIGGER_TYPE
//panics: triggered when a modifier increases for a number of times in a row
BS_NM_MODIFIER_RISE_PANIC,//eg. for kills "spate of lethal violence plagues city, etc etc"
BS_NM_MODIFIER_FALL_PANIC//eg. for gym visits falling "study shows population becoming lazier!"
ENDENUM
//TODO presentation delay! especially for kills/damage
STRUCT BAWSAQ_NEWS_PRICE_TRIGGER
//type - todo, enums
//listing price watched
INT iPriceIndexToWatch
INT iNewsStoryToTrigger
BAWSAQ_NEWS_PRICE_TRIGGER_TYPE myType
//stored pinned settings (used for watching price over a the duration of fTimeFrame)
FLOAT fTimeFrame
FLOAT fPinValue
FLOAT fPinnedAgo
FLOAT fHighPinValue
FLOAT fHighPinnedAgo
FLOAT fLowPinValue
FLOAT fLowPinnedAgo
ENDSTRUCT
//criteria for triggering a news event based on modifier change
//for both drastic sudden events, and slow trickles over time
//TODO, list these out
STRUCT BAWSAQ_NEWS_MODIFIER_TRIGGER
INT iModifierIndexToWatch
INT iNewsStoryToTrigger
//
BAWSAQ_NEWS_MODIFIER_TRIGGER_TYPE myType
//
INT iMovementAccumulated//used to count the number of consequtive increases or decreases
ENDSTRUCT
/// PURPOSE:
STRUCT BAWSAQ_NEWS_STORY
TEXT_LABEL sScrollingLable
//has it been triggered and is it ready to fire next query?
BOOL bPrimed
//is it on cooldown?
BOOL bOnCooldown
FLOAT fBeenOnCooldownFor
ENDSTRUCT
//triggers
BAWSAQ_NEWS_PRICE_TRIGGER g_BS_NewsPriceTrigger[MAX_BAWSAQ_NEWS_PRICE_TRIGGERS]
BAWSAQ_NEWS_MODIFIER_TRIGGER g_BS_NewsModifierTrigger[MAX_BAWSAQ_NEWS_MODIFIER_TRIGGERS]
//Stories
BAWSAQ_NEWS_STORY g_BS_NewsStories[MAX_BAWSAQ_NEWS_STORIES]
*/
///////////////////////////////////Redesign
///
///
/// Story queue or buffer sorted by recentness and relevance?
///
/// Story triggering score weights?
///
/// 3 varieties of story trigger
/// //price
/// //sustained rise
/// //sustained fall
/// //HF volitility
///
/// //modifier
/// //spike (killing spree -etc etc)
/// //dormancy (no activity in this modifier for a threshold time?)
///
/// //special
/// //plot related stories
///
///
///
/// ALSO
///
/// //market state summary string
/// //
///
/// //Stock tips string // do with another stack
/// //
///
///
///
///
///
//
//CONST_INT BS_NEWS_STORY_BUFFER_PER_CATERGORY 3
ENUM eSTOCK_STORY_CATEGORY
eSS_main,
eSS_city,
eSS_money,
eSS_tech,
eSS_Max_Categories
ENDENUM
STRUCT STOCK_MARKET_NEWS_STORY
eSTOCK_STORY_CATEGORY eCat
TEXT_LABEL tHeader
TEXT_LABEL tSummary
INT storyID //assigned automatically on creation
FLOAT freshness //a cooldown for stories that prevents them firing repeadedly
ENDSTRUCT
//triggers
ENUM eSTOCK_MARKET_NEWS_STORY_PRICE_TRIGGER_TYPE
PRICE_STORY_SUSTAINED_RISE,//sustained price increase over 10 ticks with end price greater than 50%+ of starting
PRICE_STORY_SUSTAINED_FALL,//sustained price fall over 10 ticks with end price lower than 50%- of starting
PRICE_STORY_RAPID_FLUCTUATION,//at least 5 price reversals in the last 10 ticks combined with at least a 20% price change on average, with finishing price within 20%+/- of start
TOTAL_MARKET_NEWS_STORY_PRICE_TRIGGER_TYPES
ENDENUM
ENUM eSTOCK_MARKET_NEWS_STORY_MODIFIER_TRIGGER_TYPE
MODIFIER_STORY_RATE_SPIKE_UP,//increase of 200% over less than 3 ticks followed by a drop of 100% or more over 3-5 ticks
MODIFIER_STORY_RATE_SPIKE_DOWN,//reverse of spike up
TOTAL_MARKET_NEWS_STORY_MODIFIER_TRIGGER_TYPES
ENDENUM
STRUCT STOCK_STORY_PRICE_TRIGGER // 1 : 1 with prices
STOCK_MARKET_NEWS_STORY s
eSTOCK_MARKET_NEWS_STORY_PRICE_TRIGGER_TYPE t
BAWSAQ_COMPANIES c
INT checkCooldown
ENDSTRUCT
STRUCT STOCK_STORY_MODIFIER_PRICE_TRIGGER // 1 : 1 with modifier
STOCK_MARKET_NEWS_STORY s
eSTOCK_MARKET_NEWS_STORY_MODIFIER_TRIGGER_TYPE t
BSMF_TYPES m
INT checkCooldown
ENDSTRUCT
CONST_INT PRICE_TRIGGER_STACK_TOTAL 150
CONST_INT MODIFIER_TRIGGER_STACK_TOTAL 20
INT g_iPRICE_CARET = 0
INT g_iMODIFIER_CARET = 0
INT g_iSTORY_ID_CARET = 1
STOCK_STORY_PRICE_TRIGGER g_BS_PriceTriggers[PRICE_TRIGGER_STACK_TOTAL]
STOCK_STORY_MODIFIER_PRICE_TRIGGER g_BS_ModifierTrigger[MODIFIER_TRIGGER_STACK_TOTAL]
//story stacks
CONST_INT BAWSAQ_STORIES_PER_CATEGORY 3
STOCK_MARKET_NEWS_STORY g_BS_NewsStack[eSS_Max_Categories][BAWSAQ_STORIES_PER_CATEGORY]
INT g_iStockSellAllQuote = 0
// Used to prevent the market from being seen until it is in a valid state.
BOOL g_bStockMarketInitialisationInProgress = TRUE // Still reading stats from server.
BOOL g_bInvalidOnlinePricesRead = TRUE // The server returned bad data that we can't work with.
BOOL g_bTickerPriceChange = TRUE
BOOL g_StockControllerRestoreValues = FALSE
BOOL g_bBSWebsiteNoSpaceTrigger = FALSE
BOOL g_bBSWebsiteTerminated = FALSE
//#IF IS_DEBUG_BUILD
//BOOL g_bStockMarketOnlineUploadDisabled = TRUE //disabled unless command line arg doUploadStockModifiers
//BOOL g_DEBUG_bStockStatDebugMode = FALSE // enabled by adding the command line
//#ENDIF
//when opening the browser to the online stock market
//it will redirect to LCN if the online market is not available 1015820
//BOOL g_bSingleShotLCNRedirect = FALSE// disabled again for 1339130
/*
• Hair on Hawick (or other hair/barber shop)-First cut free
• Ink Inc (or other in-game tattoo parlor)-First tattoo free
• Warstock-Cache-And-Carry.com -X% off first purchase
• LegendaryMotorSport.net - X% off first purchase
• ElitasTravel.com (private jets)-X% off
• Redwood Cigarettes well help you with your medical expenses
• Sprunk-Free can of Sprunk from vending machine
• Los Santos Customs-Free spray paint job
*/
ENUM COUPON_TYPE //related to the owned coupon bitset in the save game
COUPON_HAIRCUT,
COUPON_TATOO,
COUPON_MIL_SITE, //%
COUPON_CAR_SITE,
COUPON_PLANE_SITE,
COUPON_MEDICAL,
COUPON_SPRUNK,
COUPON_SPRAY,
COUPON_CAR_XMAS2017,
COUPON_CAR_XMAS2018,
COUPON_HELI_XMAS2018,
COUPON_CAR2_XMAS2018,
COUPON_CASINO_PLANE_SITE, //Elitas Travel
COUPON_CASINO_BOAT_SITE, //Dock Tease
COUPON_CASINO_CAR_SITE, //Legendary Motorsports
COUPON_CASINO_CAR_SITE2, //Southern San Andreas Super Autos
COUPON_CASINO_MIL_SITE, //Warstock Cache and Carry
COUPON_CASINO_BIKE_SITE, //Pedal and Metal
#IF FEATURE_GEN9_EXCLUSIVE
// HSW mod vouchers
COUPON_HSW_MOD1,
COUPON_HSW_MOD2,
COUPON_HSW_MOD3,
COUPON_HSW_MOD4,
COUPON_HSW_MOD5,
COUPON_HSW_MOD6,
COUPON_HSW_MOD7,
COUPON_HSW_MOD8,
COUPON_HSW_MOD9,
COUPON_HSW_MOD10,
COUPON_HSW_MOD11,
COUPON_HSW_MOD12,
COUPON_HSW_MOD13,
COUPON_HSW_MOD14,
COUPON_HSW_MOD15,
COUPON_HSW_MOD16,
COUPON_HSW_MOD17,
COUPON_HSW_MOD18,
COUPON_HSW_MOD19,
COUPON_HSW_MOD20,
// If you add more HSW MOD coupon update MAX_NUM_HSW_MOD_COUPON & g_sMPTunables.iHSW_MOD_COUPON_LIMIT
COUPON_HSW_UPGRADE, // HSW upgrade vouchers
COUPON_CAR_GEN9_MIGRATION,
#ENDIF
MAX_COUPONS
ENDENUM
#IF FEATURE_GEN9_EXCLUSIVE
CONST_INT MAX_NUM_HSW_MOD_COUPON 20
CONST_INT MAX_NUM_HSW_UPGRADE_COUPON 5
#ENDIF