1726 lines
62 KiB
Scheme
Executable File
1726 lines
62 KiB
Scheme
Executable File
//- commands headers -//
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
|
|
//- script headers -//
|
|
USING "commands_script.sch"
|
|
|
|
//- public headers -//
|
|
USING "friends_public.sch"
|
|
|
|
//- private headers -//
|
|
USING "comms_control_public.sch"
|
|
USING "friends_private.sch"
|
|
|
|
//- project specific headers -//
|
|
#if NOT USE_SP_DLC
|
|
USING "vector_id_data_gta5.sch"
|
|
USING "code_control_data_gta5.sch"
|
|
#endif
|
|
|
|
#if USE_CLF_DLC
|
|
USING "vector_id_data_CLF.sch"
|
|
USING "code_control_data_CLF.sch"
|
|
#endif
|
|
|
|
#if USE_NRM_DLC
|
|
USING "vector_id_data_NRM.sch"
|
|
USING "code_control_data_NRM.sch"
|
|
#endif
|
|
#IF IS_DEBUG_BUILD
|
|
//- debug headers -//
|
|
USING "script_debug.sch"
|
|
USING "shared_debug.sch"
|
|
#ENDIF
|
|
|
|
///private header for friends dialogue utils
|
|
/// sam.hackett@rockstarleeds.com
|
|
///
|
|
|
|
// *******************************************************************************************
|
|
// FRIEND CONVERSATION ENUMS
|
|
// *******************************************************************************************
|
|
|
|
ENUM enumFriendAudioBlock
|
|
FAB_phone = 0,
|
|
FAB_activity,
|
|
FAB_chat
|
|
ENDENUM
|
|
|
|
|
|
ENUM enumFriendPhonePhrase
|
|
|
|
// Outgoing call
|
|
FPP_OUTGOING_GREET1, // Outgoing - greet - a+b
|
|
FPP_OUTGOING_GREET2,
|
|
FPP_OUTGOING_GREET2_MEETINGMICHAEL,
|
|
FPP_OUTGOING_GREET2_MEETINGFRANKLIN,
|
|
FPP_OUTGOING_GREET2_MEETINGTREVOR,
|
|
FPP_OUTGOING_GREET2_MEETINGLAMAR,
|
|
FPP_OUTGOING_YES1_OK, // Outgoing - yes - c+d
|
|
FPP_OUTGOING_YES1_IRATE,
|
|
FPP_OUTGOING_YES1_VERYIRATE,
|
|
FPP_OUTGOING_YES1_FIRSTTIME,
|
|
FPP_OUTGOING_YES1_LIKELOW,
|
|
FPP_OUTGOING_YES1_BUSY,
|
|
FPP_OUTGOING_YES1_COMETOYOU,
|
|
FPP_OUTGOING_YES2_OK,
|
|
FPP_OUTGOING_YES2_COMETOYOU,
|
|
FPP_OUTGOING_NO1_OK, // Outgoing - no - c+d
|
|
FPP_OUTGOING_NO1_RECENTFACE,
|
|
FPP_OUTGOING_NO1_RECENTPHONE,
|
|
FPP_OUTGOING_NO1_BLOCKED,
|
|
FPP_OUTGOING_NO2,
|
|
|
|
|
|
// Backup
|
|
FPP_BACKUP,
|
|
FPP_BACKUP_DOCKS_2,
|
|
FPP_BACKUP_RURAL,
|
|
FPP_BACKUP_AGENCY,
|
|
FPP_BACKUP_FINALE_A,
|
|
FPP_BACKUP_FINALE_B,
|
|
FPP_BACKUP_FBI_1,
|
|
FPP_BACKUP_FBI_2,
|
|
FPP_BACKUP_FBI_4,
|
|
FPP_BACKUP_FBI_5,
|
|
|
|
|
|
// General
|
|
FPP_CANCEL1, //PLAYER phones to cancel hanging out
|
|
FPP_CANCEL2_HILIKE, //PLAYER phones to cancel hanging out - Friend replies, LIKE stat is HIGH B
|
|
FPP_CANCEL2_MEDLIKE, //PLAYER phones to cancel hanging out - Friend replies, LIKE stat is MEDIUM
|
|
FPP_CANCEL2_LOWLIKE, //PLAYER phones to cancel hanging out - Friend replies, LIKE stat is LOW
|
|
FPP_CANCEL2_FIRSTTIME, //PLAYER phones to cancel hanging out for the first time, FRIEND explains it's fine to inform the player it's acceptable
|
|
|
|
|
|
// Lay low (if Michael/Trevor killed in finale, Lamar will not go out in the day)
|
|
FPP_LAYLOW1,
|
|
FPP_LAYLOW2,
|
|
FPP_LAYLOW3,
|
|
|
|
|
|
MAX_FRIEND_PHONE_PHRASE,
|
|
NO_FRIEND_PHONE_PHRASE
|
|
ENDENUM
|
|
|
|
|
|
ENUM enumFriendActivityPhrase
|
|
FAP_PICKUP_OK = 0, // Pickup is triggered
|
|
FAP_PICKUP_LATE,
|
|
FAP_PICKUP_NOCAR,
|
|
FAP_PICKUP_FULLCAR,
|
|
FAP_PICKUP_ODDCAR,
|
|
FAP_PICKUP_YOUDRIVE,
|
|
|
|
FAP_GREET_OK, // Friend has got in car with player
|
|
FAP_GREET_IRATE,
|
|
FAP_GREET_VIRATE,
|
|
FAP_GREET_PLURAL,
|
|
FAP_GREET_YOUDRIVE,
|
|
|
|
FAP_AMBIENT_HELLO_OK, // Player meets friend ambiently in world, friend says hello
|
|
FAP_AMBIENT_HELLO_RECENT,
|
|
FAP_AMBIENT_HELLO_IRATE,
|
|
|
|
FAP_AMBIENT_BLOCKED_MISSION, // Player meets friend ambiently in world, friend is blocked from hangout
|
|
FAP_AMBIENT_BLOCKED_OK,
|
|
|
|
FAP_AMBIENT_OFFER_QUESTION, // Player meets friend ambiently in world, friend asks to hangout
|
|
FAP_AMBIENT_OFFER_YES1,
|
|
FAP_AMBIENT_OFFER_YES2,
|
|
FAP_AMBIENT_OFFER_NO1,
|
|
|
|
FAP_AMBIENT_GOODBYE_OK, // Player meets friend ambiently in world, friend says goodbye
|
|
FAP_AMBIENT_GOODBYE_IRATE,
|
|
|
|
FAP_AMBIENT_STALK_1, // Player meets friend ambiently in world, player follows friend
|
|
FAP_AMBIENT_STALK_2,
|
|
FAP_AMBIENT_STALK_3,
|
|
// FAP_AMBIENT_STALK_4,
|
|
FAP_AMBIENT_STALK_4_1,
|
|
FAP_AMBIENT_STALK_4_2,
|
|
FAP_AMBIENT_STALK_4_3,
|
|
FAP_AMBIENT_STALK_4_4,
|
|
|
|
FAP_AMBIENT_STALK_FT,
|
|
|
|
FAP_AMBIENT_TRAILER_1, // Player meets trevor ambiently at his safehouse
|
|
FAP_AMBIENT_TRAILER_1r,
|
|
FAP_AMBIENT_TRAILER_2,
|
|
FAP_AMBIENT_TRAILER_3,
|
|
FAP_AMBIENT_TRAILER_4,
|
|
|
|
FAP_AMBIENT_POO_1a, // Player meets trevor ambiently at his safehouse, he is on the toilet
|
|
FAP_AMBIENT_POO_1b,
|
|
FAP_AMBIENT_POO_1c,
|
|
FAP_AMBIENT_POO_2,
|
|
|
|
// FAC_SUGGEST_TENNIS, // Suggestions for places to visit
|
|
// FAC_SUGGEST_GOLF,
|
|
// FAC_SUGGEST_DARTS,
|
|
// FAC_SUGGEST_STRIPCLUB,
|
|
// FAC_SUGGEST_CINEMA,
|
|
// FAC_SUGGEST_BAR,
|
|
|
|
FAP_VERY_DRUNK, //Too drunk to speak
|
|
FAP_SATISFIED, //Happy to go home if player wants
|
|
FAP_DONE, //Have to go home now
|
|
|
|
// FAC_LEAVE_TENNIS_WON, //Leaving Tennis - PLAYER won
|
|
// FAC_LEAVE_TENNIS_LOST, //Leaving Tennis - PLAYER lost
|
|
// FAC_LEAVE_TENNIS_TIED, //Leaving Tennis - overall the games were tied
|
|
// FAC_LEAVE_TENNIS_QUIT, //Leaving Tennis - Game abandoned
|
|
// FAC_LEAVE_TENNIS_DRUNK, //Leaving Tennis - player drunk
|
|
// FAC_LEAVE_BASKETBALL_WON, //Leaving Basketball - PLAYER won
|
|
// FAC_LEAVE_BASKETBALL_LOST, //Leaving Basketball - PLAYER lost
|
|
// FAC_LEAVE_BASKETBALL_QUIT, //Leaving Basketball - Game abandoned
|
|
// FAC_LEAVE_BASKETBALL_DRUNK, //Leaving Basketball - player drunk
|
|
// FAC_LEAVE_GOLF_WON, //Leaving Golf - PLAYER won
|
|
// FAC_LEAVE_GOLF_LOST, //Leaving Golf - PLAYER lost
|
|
// FAC_LEAVE_GOLF_TIED, //Leaving Golf - overall the games were tied
|
|
// FAC_LEAVE_GOLF_DRUNK, //Leaving Golf - player drunk
|
|
// FAC_LEAVE_GOLF_QUIT, //Leaving Golf - Game abandoned
|
|
// FAC_LEAVE_POOL_WON, //Leaving Pool - PLAYER won
|
|
// FAC_LEAVE_POOL_LOST, //Leaving Pool - PLAYER lost
|
|
// FAC_LEAVE_POOL_QUIT, //Leaving Pool - Game abandoned
|
|
// FAC_LEAVE_POOL_DRUNK, //Leaving Pool - player drunk
|
|
// FAC_LEAVE_AIRHOCKEY_WON, //Leaving Air Hockey - PLAYER won
|
|
// FAC_LEAVE_AIRHOCKEY_LOST, //Leaving Air Hockey - PLAYER lost
|
|
// FAC_LEAVE_AIRHOCKEY_TIED, //Leaving Air Hockey - overall the games were tied
|
|
// FAC_LEAVE_AIRHOCKEY_QUIT, //Leaving Air Hockey - Game abandoned
|
|
// FAC_LEAVE_AIRHOCKEY_DRUNK, //Leaving Air Hockey - player drunk
|
|
// FAC_LEAVE_ARMWRESTLE_WON, //Leaving Arm Wrestling - PLAYER won
|
|
// FAC_LEAVE_ARMWRESTLE_LOST, //Leaving Arm Wrestling - PLAYER lost
|
|
// FAC_LEAVE_ARMWRESTLE_TIED, //Leaving Arm Wrestling - overall the games were tied
|
|
// FAC_LEAVE_ARMWRESTLE_QUIT, //Leaving Arm Wrestling - Game abandoned
|
|
// FAC_LEAVE_ARMWRESTLE_DRUNK, //Leaving Arm Wrestling - player drunk
|
|
// FAC_LEAVE_DARTS_WON, //Leaving Darts - PLAYER won
|
|
// FAC_LEAVE_DARTS_LOST, //Leaving Darts - PLAYER lost
|
|
// FAC_LEAVE_DARTS_TIED, //Leaving Darts - overall the games were tied
|
|
// FAC_LEAVE_DARTS_QUIT, //Leaving Darts - Game abandoned
|
|
// FAC_LEAVE_DARTS_DRUNK, //Leaving Darts - player drunk
|
|
// FAC_LEAVE_STRIPCLUB_WON, //Leaving Strip Club - PLAYER won
|
|
// FAC_LEAVE_STRIPCLUB_QUIT, //Leaving Strip Club - Game abandoned
|
|
// FAC_LEAVE_STRIPCLUB_DRUNK, //Leaving Strip Club - player drunk
|
|
// FAC_LEAVE_CINEMA_WON, //Leaving Cinema - PLAYER won
|
|
// FAC_LEAVE_CINEMA_QUIT, //Leaving Cinema - Game abandoned
|
|
// FAC_LEAVE_CINEMA_DRUNK, //Leaving Cinema - player drunk
|
|
// FAC_LEAVE_FOOD_WON, //Leaving Food - PLAYER won
|
|
// FAC_LEAVE_FOOD_QUIT, //Leaving Food- Game abandoned
|
|
// FAC_LEAVE_FOOD_DRUNK, //Leaving Food - player drunk
|
|
|
|
FAP_MISSIONZONE_STORY, //Driving near mission - Player says he might do story mission
|
|
FAP_MISSIONZONE_SQUAD, //Driving near mission - Player says he might do prep mission
|
|
FAP_MISSIONZONE_DRUNK, //Driving near mission - Player says he might do mission (drunk)
|
|
FAP_MISSIONZONE_CANCEL, //Driving near misison - Player says he'll go back later
|
|
FAP_MISSIONZONE_CANCEL_DRUNK, //Driving near misison - Player says he'll go back later (drunk)
|
|
|
|
FAP_REJECTION_TIMEOUT, //Soldier rejected as squad mission timed out
|
|
FAP_REJECTION_OK, //Friend rejected for mission
|
|
FAP_REJECTION_CRAZY, //Friend rejected for mission - which started violently
|
|
FAP_REJECTION_STUCK, //Friend rejected for mission - but stuck in car
|
|
|
|
FAP_SQUAD_START, //Battle buddy joined prep mission
|
|
FAP_SQUAD_PASSED, //Battle buddy completed prep mission
|
|
|
|
FAP_COMMENT_HAIRCUT, //Player changed haircut, friend comments on it
|
|
FAP_COMMENT_CLOTHES, //Player changed clothes, friend comments on it
|
|
FAP_COMMENT_TATTOO, //Player changed tattoo, friend comments on it
|
|
|
|
FAP_COMMENT_MELTDOWN, //Just for Franklin-Michael - Michael tells Franklin how he really liked seeing his film
|
|
|
|
FAP_COMMENT_CARDAMAGE, //Player changed tattoo, friend comments on it
|
|
FAP_COMMENT_PEDDAMAGE, //Player changed tattoo, friend comments on it
|
|
|
|
FAP_DROPOFF_OPENER, //Dropping PLAYER off - Player has returned Friend
|
|
FAP_DROPOFF_OPENER_DRUNK, //Dropping PLAYER off - Player has returned Friend drunk
|
|
FAP_DROPOFF_OPENER_PLURAL, //Dropping PLAYER off - Player has returned several Friends
|
|
|
|
FAP_DROPOFF_OK, //Dropping PLAYER off - Friend is happy
|
|
FAP_DROPOFF_IRATE, //Dropping PLAYER off - Friend is irate
|
|
FAP_DROPOFF_VERY_IRATE, //Dropping PLAYER off - Friend is very irate
|
|
FAP_DROPOFF_DRUNK, //Dropping PLAYER off - Friend is drunk
|
|
FAP_DROPOFF_GOTCAR, //Dropping PLAYER off - Player has friends car
|
|
|
|
FAP_DEATH, //The other friend has died
|
|
|
|
MAX_FRIEND_ACTIVITY_PHRASES,
|
|
NO_FRIEND_ACTIVITY_PHRASE
|
|
ENDENUM
|
|
|
|
|
|
ENUM enumFriendTextMessage
|
|
FTM_FRIEND_LOST = 0,
|
|
FTM_FRIEND_STOOD_UP,
|
|
FTM_FRIEND_HOSPITAL,
|
|
FTM_PLAYER_DIED,
|
|
FTM_PLAYER_BUSTED,
|
|
|
|
MAX_FRIEND_TEXT_MESSAGES,
|
|
NO_FRIEND_TEXT_MESSAGE
|
|
ENDENUM
|
|
|
|
|
|
// *******************************************************************************************
|
|
// CONVERSATION ENUM LABEL debug functions
|
|
// *******************************************************************************************
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
FUNC STRING GetLabel_enumFriendAudioBlock(enumFriendAudioBlock eAudioBlock)
|
|
SWITCH eAudioBlock
|
|
CASE FAB_phone RETURN "FAB_phone" BREAK
|
|
CASE FAB_activity RETURN "FAB_activity" BREAK
|
|
CASE FAB_chat RETURN "FAB_chat" BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN "<InvalidAudioBlock>"
|
|
ENDFUNC
|
|
|
|
FUNC STRING GetLabel_enumFriendPhonePhrase(enumFriendPhonePhrase thisFriendPhoneConv)
|
|
SWITCH thisFriendPhoneConv
|
|
CASE FPP_OUTGOING_GREET1 RETURN "FPP_OUTGOING_GREET1" BREAK
|
|
CASE FPP_OUTGOING_GREET2 RETURN "FPP_OUTGOING_GREET2" BREAK
|
|
CASE FPP_OUTGOING_GREET2_MEETINGMICHAEL RETURN "FPP_OUTGOING_GREET2_MEETINGMICHAEL" BREAK
|
|
CASE FPP_OUTGOING_GREET2_MEETINGFRANKLIN RETURN "FPP_OUTGOING_GREET2_MEETINGFRANKLIN" BREAK
|
|
CASE FPP_OUTGOING_GREET2_MEETINGTREVOR RETURN "FPP_OUTGOING_GREET2_MEETINGTREVOR" BREAK
|
|
CASE FPP_OUTGOING_GREET2_MEETINGLAMAR RETURN "FPP_OUTGOING_GREET2_MEETINGLAMAR" BREAK
|
|
CASE FPP_OUTGOING_YES1_OK RETURN "FPP_OUTGOING_YES1_OK" BREAK
|
|
CASE FPP_OUTGOING_YES1_IRATE RETURN "FPP_OUTGOING_YES1_IRATE" BREAK
|
|
CASE FPP_OUTGOING_YES1_VERYIRATE RETURN "FPP_OUTGOING_YES1_VERYIRATE" BREAK
|
|
CASE FPP_OUTGOING_YES1_FIRSTTIME RETURN "FPP_OUTGOING_YES1_FIRSTTIME" BREAK
|
|
CASE FPP_OUTGOING_YES1_LIKELOW RETURN "FPP_OUTGOING_YES1_LIKELOW" BREAK
|
|
CASE FPP_OUTGOING_YES1_BUSY RETURN "FPP_OUTGOING_YES1_BUSY" BREAK
|
|
CASE FPP_OUTGOING_YES1_COMETOYOU RETURN "FPP_OUTGOING_YES1_COMETOYOU" BREAK
|
|
CASE FPP_OUTGOING_YES2_OK RETURN "FPP_OUTGOING_YES2_OK" BREAK
|
|
CASE FPP_OUTGOING_YES2_COMETOYOU RETURN "FPP_OUTGOING_YES2_COMETOYOU" BREAK
|
|
CASE FPP_OUTGOING_NO1_OK RETURN "FPP_OUTGOING_NO1_OK" BREAK
|
|
CASE FPP_OUTGOING_NO1_RECENTFACE RETURN "FPP_OUTGOING_NO1_RECENTFACE" BREAK
|
|
CASE FPP_OUTGOING_NO1_RECENTPHONE RETURN "FPP_OUTGOING_NO1_RECENTPHONE" BREAK
|
|
CASE FPP_OUTGOING_NO1_BLOCKED RETURN "FPP_OUTGOING_NO1_BLOCKED" BREAK
|
|
CASE FPP_OUTGOING_NO2 RETURN "FPP_OUTGOING_NO2" BREAK
|
|
|
|
CASE FPP_BACKUP RETURN "FPP_BACKUP" BREAK
|
|
CASE FPP_BACKUP_DOCKS_2 RETURN "FPP_BACKUP_DOCKS_2" BREAK
|
|
CASE FPP_BACKUP_RURAL RETURN "FPP_BACKUP_RURAL" BREAK
|
|
CASE FPP_BACKUP_AGENCY RETURN "FPP_BACKUP_AGENCY" BREAK
|
|
CASE FPP_BACKUP_FINALE_A RETURN "FPP_BACKUP_FINALE_A" BREAK
|
|
CASE FPP_BACKUP_FINALE_B RETURN "FPP_BACKUP_FINALE_B" BREAK
|
|
CASE FPP_BACKUP_FBI_1 RETURN "FPP_BACKUP_FBI_1" BREAK
|
|
CASE FPP_BACKUP_FBI_2 RETURN "FPP_BACKUP_FBI_2" BREAK
|
|
CASE FPP_BACKUP_FBI_4 RETURN "FPP_BACKUP_FBI_4" BREAK
|
|
CASE FPP_BACKUP_FBI_5 RETURN "FPP_BACKUP_FBI_5" BREAK
|
|
|
|
CASE FPP_CANCEL1 RETURN "FPP_CANCEL1" BREAK
|
|
CASE FPP_CANCEL2_HILIKE RETURN "FPP_CANCEL2_HILIKE" BREAK
|
|
CASE FPP_CANCEL2_MEDLIKE RETURN "FPP_CANCEL2_MEDLIKE" BREAK
|
|
CASE FPP_CANCEL2_LOWLIKE RETURN "FPP_CANCEL2_LOWLIKE" BREAK
|
|
CASE FPP_CANCEL2_FIRSTTIME RETURN "FPP_CANCEL2_FIRSTTIME" BREAK
|
|
|
|
CASE FPP_LAYLOW1 RETURN "FPP_LAYLOW1" BREAK
|
|
CASE FPP_LAYLOW2 RETURN "FPP_LAYLOW2" BREAK
|
|
CASE FPP_LAYLOW3 RETURN "FPP_LAYLOW3" BREAK
|
|
|
|
CASE MAX_FRIEND_PHONE_PHRASE
|
|
RETURN "MAX_FRIEND_PHONE_PHRASE"
|
|
BREAK
|
|
CASE NO_FRIEND_PHONE_PHRASE
|
|
RETURN "NO_FRIEND_PHONE_PHRASE"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN "invalid thisFriendPhoneConv"
|
|
ENDFUNC
|
|
|
|
FUNC STRING GetLabel_enumFriendActivityPhrase(enumFriendActivityPhrase thisFriendActivityConv)
|
|
SWITCH thisFriendActivityConv
|
|
CASE FAP_PICKUP_OK RETURN "FAP_PICKUP_OK" BREAK
|
|
CASE FAP_PICKUP_LATE RETURN "FAP_PICKUP_LATE" BREAK
|
|
CASE FAP_PICKUP_NOCAR RETURN "FAP_PICKUP_NOCAR" BREAK
|
|
CASE FAP_PICKUP_FULLCAR RETURN "FAP_PICKUP_FULLCAR" BREAK
|
|
CASE FAP_PICKUP_ODDCAR RETURN "FAP_PICKUP_ODDCAR" BREAK
|
|
CASE FAP_PICKUP_YOUDRIVE RETURN "FAP_PICKUP_YOUDRIVE" BREAK
|
|
|
|
CASE FAP_GREET_OK RETURN "FAP_GREET_OK" BREAK
|
|
CASE FAP_GREET_IRATE RETURN "FAP_GREET_IRATE" BREAK
|
|
CASE FAP_GREET_VIRATE RETURN "FAP_GREET_VIRATE" BREAK
|
|
CASE FAP_GREET_PLURAL RETURN "FAP_GREET_PLURAL" BREAK
|
|
CASE FAP_GREET_YOUDRIVE RETURN "FAP_GREET_YOUDRIVE" BREAK
|
|
|
|
CASE FAP_AMBIENT_HELLO_OK RETURN "FAP_AMBIENT_HELLO_OK" BREAK
|
|
CASE FAP_AMBIENT_HELLO_RECENT RETURN "FAP_AMBIENT_HELLO_RECENT" BREAK
|
|
CASE FAP_AMBIENT_HELLO_IRATE RETURN "FAP_AMBIENT_HELLO_IRATE" BREAK
|
|
|
|
CASE FAP_AMBIENT_BLOCKED_MISSION RETURN "FAP_AMBIENT_BLOCKED_MISSION" BREAK
|
|
CASE FAP_AMBIENT_BLOCKED_OK RETURN "FAP_AMBIENT_BLOCKED_OK" BREAK
|
|
|
|
CASE FAP_AMBIENT_OFFER_QUESTION RETURN "FAP_AMBIENT_OFFER_QUESTION" BREAK
|
|
CASE FAP_AMBIENT_OFFER_YES1 RETURN "FAP_AMBIENT_OFFER_YES1" BREAK
|
|
CASE FAP_AMBIENT_OFFER_YES2 RETURN "FAP_AMBIENT_OFFER_YES2" BREAK
|
|
CASE FAP_AMBIENT_OFFER_NO1 RETURN "FAP_AMBIENT_OFFER_NO1" BREAK
|
|
|
|
CASE FAP_AMBIENT_GOODBYE_OK RETURN "FAP_AMBIENT_GOODBYE_OK" BREAK
|
|
CASE FAP_AMBIENT_GOODBYE_IRATE RETURN "FAP_AMBIENT_GOODBYE_IRATE" BREAK
|
|
|
|
CASE FAP_AMBIENT_STALK_1 RETURN "FAP_AMBIENT_STALK_1" BREAK
|
|
CASE FAP_AMBIENT_STALK_2 RETURN "FAP_AMBIENT_STALK_2" BREAK
|
|
CASE FAP_AMBIENT_STALK_3 RETURN "FAP_AMBIENT_STALK_3" BREAK
|
|
// CASE FAP_AMBIENT_STALK_4 RETURN "FAP_AMBIENT_STALK_4" BREAK
|
|
CASE FAP_AMBIENT_STALK_4_1 RETURN "FAP_AMBIENT_STALK_4_1" BREAK
|
|
CASE FAP_AMBIENT_STALK_4_2 RETURN "FAP_AMBIENT_STALK_4_2" BREAK
|
|
CASE FAP_AMBIENT_STALK_4_3 RETURN "FAP_AMBIENT_STALK_4_3" BREAK
|
|
CASE FAP_AMBIENT_STALK_4_4 RETURN "FAP_AMBIENT_STALK_4_4" BREAK
|
|
|
|
CASE FAP_AMBIENT_STALK_FT RETURN "FAP_AMBIENT_STALK_FT" BREAK
|
|
|
|
CASE FAP_AMBIENT_TRAILER_1 RETURN "FAP_AMBIENT_TRAILER_1" BREAK
|
|
CASE FAP_AMBIENT_TRAILER_1r RETURN "FAP_AMBIENT_TRAILER_1r" BREAK
|
|
CASE FAP_AMBIENT_TRAILER_2 RETURN "FAP_AMBIENT_TRAILER_2" BREAK
|
|
CASE FAP_AMBIENT_TRAILER_3 RETURN "FAP_AMBIENT_TRAILER_3" BREAK
|
|
CASE FAP_AMBIENT_TRAILER_4 RETURN "FAP_AMBIENT_TRAILER_4" BREAK
|
|
|
|
CASE FAP_AMBIENT_POO_1a RETURN "FAP_AMBIENT_POO_1a" BREAK
|
|
CASE FAP_AMBIENT_POO_1b RETURN "FAP_AMBIENT_POO_1b" BREAK
|
|
CASE FAP_AMBIENT_POO_1c RETURN "FAP_AMBIENT_POO_1c" BREAK
|
|
CASE FAP_AMBIENT_POO_2 RETURN "FAP_AMBIENT_POO_2" BREAK
|
|
|
|
// CASE FAC_SUGGEST_TENNIS RETURN "FAC_SUGGEST_TENNIS" BREAK
|
|
// CASE FAC_SUGGEST_GOLF RETURN "FAC_SUGGEST_GOLF" BREAK
|
|
// CASE FAC_SUGGEST_DARTS RETURN "FAC_SUGGEST_DARTS" BREAK
|
|
// CASE FAC_SUGGEST_STRIPCLUB RETURN "FAC_SUGGEST_STRIPCLUB" BREAK
|
|
// CASE FAC_SUGGEST_CINEMA RETURN "FAC_SUGGEST_CINEMA" BREAK
|
|
// CASE FAC_SUGGEST_BAR RETURN "FAC_SUGGEST_BAR" BREAK
|
|
|
|
CASE FAP_VERY_DRUNK RETURN "FAP_VERY_DRUNK" BREAK
|
|
CASE FAP_SATISFIED RETURN "FAP_SATISFIED" BREAK
|
|
CASE FAP_DONE RETURN "FAP_DONE" BREAK
|
|
|
|
// CASE FAC_LEAVE_TENNIS_WON RETURN "FAC_LEAVE_TENNIS_WON" BREAK
|
|
// CASE FAC_LEAVE_TENNIS_LOST RETURN "FAC_LEAVE_TENNIS_LOST" BREAK
|
|
// CASE FAC_LEAVE_TENNIS_TIED RETURN "FAC_LEAVE_TENNIS_TIED" BREAK
|
|
// CASE FAC_LEAVE_TENNIS_QUIT RETURN "FAC_LEAVE_TENNIS_QUIT" BREAK
|
|
// CASE FAC_LEAVE_TENNIS_DRUNK RETURN "FAC_LEAVE_TENNIS_DRUNK" BREAK
|
|
// CASE FAC_LEAVE_GOLF_WON RETURN "FAC_LEAVE_GOLF_WON" BREAK
|
|
// CASE FAC_LEAVE_GOLF_LOST RETURN "FAC_LEAVE_GOLF_LOST" BREAK
|
|
// CASE FAC_LEAVE_GOLF_TIED RETURN "FAC_LEAVE_GOLF_TIED" BREAK
|
|
// CASE FAC_LEAVE_GOLF_DRUNK RETURN "FAC_LEAVE_GOLF_DRUNK" BREAK
|
|
// CASE FAC_LEAVE_GOLF_QUIT RETURN "FAC_LEAVE_GOLF_QUIT" BREAK
|
|
// CASE FAC_LEAVE_DARTS_WON RETURN "FAC_LEAVE_DARTS_WON" BREAK
|
|
// CASE FAC_LEAVE_DARTS_LOST RETURN "FAC_LEAVE_DARTS_LOST" BREAK
|
|
// CASE FAC_LEAVE_DARTS_TIED RETURN "FAC_LEAVE_DARTS_TIED" BREAK
|
|
// CASE FAC_LEAVE_DARTS_QUIT RETURN "FAC_LEAVE_DARTS_QUIT" BREAK
|
|
// CASE FAC_LEAVE_DARTS_DRUNK RETURN "FAC_LEAVE_DARTS_DRUNK" BREAK
|
|
// CASE FAC_LEAVE_STRIPCLUB_WON RETURN "FAC_LEAVE_STRIPCLUB_WON" BREAK
|
|
// CASE FAC_LEAVE_STRIPCLUB_QUIT RETURN "FAC_LEAVE_STRIPCLUB_QUIT" BREAK
|
|
// CASE FAC_LEAVE_STRIPCLUB_DRUNK RETURN "FAC_LEAVE_STRIPCLUB_DRUNK" BREAK
|
|
// CASE FAC_LEAVE_CINEMA_WON RETURN "FAC_LEAVE_CINEMA_WON" BREAK
|
|
// CASE FAC_LEAVE_CINEMA_QUIT RETURN "FAC_LEAVE_CINEMA_QUIT" BREAK
|
|
// CASE FAC_LEAVE_CINEMA_DRUNK RETURN "FAC_LEAVE_CINEMA_DRUNK" BREAK
|
|
|
|
CASE FAP_MISSIONZONE_STORY RETURN "FAP_MISSIONZONE_STORY" BREAK
|
|
CASE FAP_MISSIONZONE_SQUAD RETURN "FAP_MISSIONZONE_SQUAD" BREAK
|
|
CASE FAP_MISSIONZONE_DRUNK RETURN "FAP_MISSIONZONE_DRUNK" BREAK
|
|
CASE FAP_MISSIONZONE_CANCEL RETURN "FAP_MISSIONZONE_CANCEL" BREAK
|
|
CASE FAP_MISSIONZONE_CANCEL_DRUNK RETURN "FAP_MISSIONZONE_CANCEL_DRUNK" BREAK
|
|
|
|
CASE FAP_REJECTION_TIMEOUT RETURN "FAP_REJECTION_TIMEOUT" BREAK
|
|
CASE FAP_REJECTION_OK RETURN "FAP_REJECTION_OK" BREAK
|
|
CASE FAP_REJECTION_CRAZY RETURN "FAP_REJECTION_CRAZY" BREAK
|
|
CASE FAP_REJECTION_STUCK RETURN "FAP_REJECTION_STUCK" BREAK
|
|
|
|
CASE FAP_SQUAD_START RETURN "FAP_SQUAD_START" BREAK
|
|
CASE FAP_SQUAD_PASSED RETURN "FAP_SQUAD_PASSED" BREAK
|
|
|
|
CASE FAP_COMMENT_HAIRCUT RETURN "FAP_COMMENT_HAIRCUT" BREAK
|
|
CASE FAP_COMMENT_CLOTHES RETURN "FAP_COMMENT_CLOTHES" BREAK
|
|
CASE FAP_COMMENT_TATTOO RETURN "FAP_COMMENT_TATTOO" BREAK
|
|
|
|
CASE FAP_COMMENT_MELTDOWN RETURN "FAP_COMMENT_MELTDOWN" BREAK
|
|
|
|
CASE FAP_COMMENT_CARDAMAGE RETURN "FAP_COMMENT_CARDAMAGE" BREAK
|
|
CASE FAP_COMMENT_PEDDAMAGE RETURN "FAP_COMMENT_PEDDAMAGE" BREAK
|
|
|
|
CASE FAP_DROPOFF_OPENER RETURN "FAP_DROPOFF_OPENER" BREAK
|
|
CASE FAP_DROPOFF_OPENER_DRUNK RETURN "FAP_DROPOFF_OPENER_DRUNK" BREAK
|
|
CASE FAP_DROPOFF_OPENER_PLURAL RETURN "FAP_DROPOFF_OPENER_PLURAL" BREAK
|
|
|
|
CASE FAP_DROPOFF_OK RETURN "FAP_DROPOFF_OK" BREAK
|
|
CASE FAP_DROPOFF_IRATE RETURN "FAP_DROPOFF_IRATE" BREAK
|
|
CASE FAP_DROPOFF_VERY_IRATE RETURN "FAP_DROPOFF_VERY_IRATE" BREAK
|
|
CASE FAP_DROPOFF_DRUNK RETURN "FAP_DROPOFF_DRUNK" BREAK
|
|
CASE FAP_DROPOFF_GOTCAR RETURN "FAP_DROPOFF_GOTCAR" BREAK
|
|
|
|
CASE FAP_DEATH RETURN "FAP_DEATH" BREAK
|
|
|
|
CASE MAX_FRIEND_ACTIVITY_PHRASES
|
|
RETURN "MAX_FRIEND_ACTIVITY_PHRASES"
|
|
BREAK
|
|
CASE NO_FRIEND_ACTIVITY_PHRASE
|
|
RETURN "NO_FRIEND_ACTIVITY_PHRASE"
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN "invalid thisFriendActivityConv"
|
|
ENDFUNC
|
|
|
|
FUNC STRING GetLabel_enumFriendTextMessage(enumFriendTextMessage thisFriendTextMessage)
|
|
SWITCH thisFriendTextMessage
|
|
CASE FTM_FRIEND_LOST RETURN "FTM_FRIEND_LOST" BREAK
|
|
CASE FTM_FRIEND_STOOD_UP RETURN "FTM_FRIEND_STOOD_UP" BREAK
|
|
CASE FTM_FRIEND_HOSPITAL RETURN "FTM_FRIEND_HOSPITAL" BREAK
|
|
CASE FTM_PLAYER_DIED RETURN "FTM_PLAYER_DIED" BREAK
|
|
CASE FTM_PLAYER_BUSTED RETURN "FTM_PLAYER_BUSTED" BREAK
|
|
|
|
CASE MAX_FRIEND_TEXT_MESSAGES
|
|
RETURN "MAX_FRIEND_TEXT_MESSAGES"
|
|
BREAK
|
|
CASE NO_FRIEND_TEXT_MESSAGE
|
|
RETURN "NO_FRIEND_TEXT_MESSAGE"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN "invalid thisFriendTextMessage"
|
|
ENDFUNC
|
|
|
|
#ENDIF
|
|
|
|
// *******************************************************************************************
|
|
// GENERAL DIALOGUE UTILS
|
|
// *******************************************************************************************
|
|
|
|
FUNC STRING PRIVATE_GetFriendCode(enumFriend eFriend)
|
|
SWITCH eFriend
|
|
CASE FR_MICHAEL
|
|
RETURN "M"
|
|
BREAK
|
|
CASE FR_FRANKLIN
|
|
RETURN "F"
|
|
BREAK
|
|
CASE FR_TREVOR
|
|
RETURN "T"
|
|
BREAK
|
|
CASE FR_LAMAR
|
|
RETURN "L"
|
|
BREAK
|
|
CASE FR_JIMMY
|
|
RETURN "J"
|
|
BREAK
|
|
CASE FR_AMANDA
|
|
RETURN "A"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
CPRINTLN(DEBUG_FRIENDS, "PRIVATE_GetFriendCode() Bad friend ID ", GetLabel_enumFriend(eFriend))
|
|
SCRIPT_ASSERT("Invalid friend ID")
|
|
RETURN "X"
|
|
ENDFUNC
|
|
|
|
FUNC STRING PRIVATE_Get_SpeakerLabel_From_Char(enumCharacterList friendCharID)
|
|
SWITCH friendCharID
|
|
CASE CHAR_MICHAEL
|
|
RETURN "MICHAEL"
|
|
BREAK
|
|
CASE CHAR_FRANKLIN
|
|
RETURN "FRANKLIN"
|
|
BREAK
|
|
CASE CHAR_TREVOR
|
|
RETURN "TREVOR"
|
|
BREAK
|
|
CASE CHAR_LAMAR
|
|
RETURN "LAMAR"
|
|
BREAK
|
|
CASE CHAR_JIMMY
|
|
RETURN "JIMMY"
|
|
BREAK
|
|
CASE CHAR_AMANDA
|
|
RETURN "AMANDA"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
CPRINTLN(DEBUG_FRIENDS, "PRIVATE_Get_SpeakerLabel_From_Char() Bad friend ID ", GetLabel_enumCharacterList(friendCharID))
|
|
SCRIPT_ASSERT("invalid friendCharID in PRIVATE_Get_SpeakerLabel_From_Char()")
|
|
RETURN "invalid"
|
|
ENDFUNC
|
|
|
|
FUNC INT PRIVATE_Get_SpeakerID_From_Char(enumCharacterList friendCharID)
|
|
SWITCH friendCharID
|
|
CASE CHAR_MICHAEL
|
|
RETURN 0
|
|
BREAK
|
|
CASE CHAR_FRANKLIN
|
|
RETURN 1
|
|
BREAK
|
|
CASE CHAR_TREVOR
|
|
RETURN 2
|
|
BREAK
|
|
CASE CHAR_LAMAR
|
|
RETURN 3
|
|
BREAK
|
|
CASE CHAR_JIMMY
|
|
RETURN 4
|
|
BREAK
|
|
CASE CHAR_AMANDA
|
|
RETURN 5
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
CPRINTLN(DEBUG_FRIENDS, "PRIVATE_Get_SpeakerID_From_Char() Bad friend ID ", GetLabel_enumCharacterList(friendCharID))
|
|
SCRIPT_ASSERT("invalid friendCharID in PRIVATE_Get_SpeakerID_From_Char()")
|
|
RETURN 9
|
|
ENDFUNC
|
|
FUNC CC_TextPart PRIVATE_GetFriendTextMsgContextID(enumFriendTextMessage eFriendTextMessage, int iVariation)
|
|
if iVariation = 0 or iVariation = 1
|
|
switch eFriendTextMessage
|
|
CASE FTM_FRIEND_LOST
|
|
if iVariation = 0
|
|
RETURN TPART_FRND_SIT_LOSTA
|
|
else
|
|
RETURN TPART_FRND_SIT_LOSTB
|
|
endif
|
|
BREAK
|
|
CASE FTM_FRIEND_STOOD_UP
|
|
if iVariation = 0
|
|
RETURN TPART_FRND_SIT_LATEA
|
|
else
|
|
RETURN TPART_FRND_SIT_LATEB
|
|
endif
|
|
BREAK
|
|
CASE FTM_FRIEND_HOSPITAL
|
|
if iVariation = 0
|
|
RETURN TPART_FRND_SIT_HOSPA
|
|
else
|
|
RETURN TPART_FRND_SIT_HOSPB
|
|
endif
|
|
BREAK
|
|
CASE FTM_PLAYER_DIED
|
|
if iVariation = 0
|
|
RETURN TPART_FRND_SIT_DIEDA
|
|
else
|
|
RETURN TPART_FRND_SIT_DIEDB
|
|
endif
|
|
BREAK
|
|
CASE FTM_PLAYER_BUSTED
|
|
if iVariation = 0
|
|
RETURN TPART_FRND_SIT_BUSTA
|
|
else
|
|
RETURN TPART_FRND_SIT_BUSTB
|
|
endif
|
|
BREAK
|
|
endswitch
|
|
endif
|
|
|
|
CPRINTLN(DEBUG_FRIENDS, "PRIVATE_GetFriendTextMsgContextID() Bad friend context, eMsg = ", ENUM_TO_INT(eFriendTextMessage), ", iVar = ", iVariation)
|
|
SCRIPT_ASSERT("invalid enumFriendTextMessage in PRIVATE_GetFriendTextMsgContextID()")
|
|
RETURN TPART_FRND_SIT_BUSTA
|
|
ENDFUNC
|
|
PROC ADD_FRIEND_CHAR_FOR_DIALOGUE(structPedsForConversation& sPedForConv, enumCharacterList eFriendChar, PED_INDEX hPed = NULL, BOOL bVerbose = TRUE)
|
|
|
|
TEXT_LABEL tLabel = PRIVATE_Get_SpeakerLabel_From_Char(eFriendChar)
|
|
INT iID = PRIVATE_Get_SpeakerID_From_Char(eFriendChar)
|
|
|
|
IF bVerbose
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL tChar = GetLabel_enumCharacterList(eFriendChar)
|
|
CPRINTLN(DEBUG_FRIENDS, "ADD_FRIEND_FOR_CHAR_DIALOGUE(", tChar, ") = speaker: ", tLabel, " (", iID, ")")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ADD_PED_FOR_DIALOGUE(sPedForConv, iID, hPed, tLabel)
|
|
ENDPROC
|
|
|
|
// *******************************************************************************************
|
|
// Get block name / root stub
|
|
// *******************************************************************************************
|
|
|
|
FUNC TEXT_LABEL PRIVATE_FriendDialogue_GetAudioCode(enumFriend ePlayer, enumFriend eFriendA, enumFriend eFriendB, enumFriendAudioBlock eBlock)
|
|
|
|
TEXT_LABEL tBase = "F"
|
|
|
|
IF eBlock = FAB_phone
|
|
tBase += "p"
|
|
tBase += PRIVATE_GetFriendCode(ePlayer)
|
|
tBase += PRIVATE_GetFriendCode(eFriendA)
|
|
|
|
ELIF eBlock = FAB_activity
|
|
tBase += "a"
|
|
tBase += PRIVATE_GetFriendCode(ePlayer)
|
|
tBase += PRIVATE_GetFriendCode(eFriendA)
|
|
|
|
ELIF eBlock = FAB_chat
|
|
tBase += "c"
|
|
|
|
IF ENUM_TO_INT(eFriendB) < ENUM_TO_INT(eFriendA)
|
|
enumFriend temp = eFriendA
|
|
eFriendA = eFriendB
|
|
eFriendB = temp
|
|
ENDIF
|
|
|
|
IF ENUM_TO_INT(eFriendA) < ENUM_TO_INT(ePlayer)
|
|
enumFriend temp = ePlayer
|
|
ePlayer = eFriendA
|
|
eFriendA = temp
|
|
ENDIF
|
|
|
|
IF ENUM_TO_INT(eFriendB) < ENUM_TO_INT(eFriendA)
|
|
enumFriend temp = eFriendA
|
|
eFriendA = eFriendB
|
|
eFriendB = temp
|
|
ENDIF
|
|
|
|
tBase += PRIVATE_GetFriendCode(ePlayer)
|
|
tBase += PRIVATE_GetFriendCode(eFriendA)
|
|
IF eFriendB <> NO_FRIEND
|
|
tBase += PRIVATE_GetFriendCode(eFriendB)
|
|
ENDIF
|
|
|
|
ELSE
|
|
tBase += "x"
|
|
tBase += PRIVATE_GetFriendCode(ePlayer)
|
|
tBase += PRIVATE_GetFriendCode(eFriendA)
|
|
IF eFriendB <> NO_FRIEND
|
|
tBase += PRIVATE_GetFriendCode(eFriendB)
|
|
ENDIF
|
|
SCRIPT_ASSERT("PRIVATE_Friend_GetAudioBlock() - Unknown audio block type")
|
|
ENDIF
|
|
|
|
RETURN tBase
|
|
|
|
ENDFUNC
|
|
|
|
// *******************************************************************************************
|
|
// Get dialogue phrases
|
|
// *******************************************************************************************
|
|
|
|
FUNC BOOL PRIVATE_FriendDialogue_GetAnswerphonePhrase(enumFriend eFriend, TEXT_LABEL& tBlock, TEXT_LABEL& tRoot)
|
|
|
|
tBlock = "ANAUD"
|
|
|
|
SWITCH eFriend
|
|
CASE FR_MICHAEL
|
|
tRoot = "MIC_APH1"
|
|
BREAK
|
|
CASE FR_FRANKLIN
|
|
tRoot = "ARI_APH1"
|
|
BREAK
|
|
CASE FR_TREVOR
|
|
tRoot = "TRE_APH1"
|
|
BREAK
|
|
CASE FR_LAMAR
|
|
tRoot = "LAM_APH1"
|
|
BREAK
|
|
CASE FR_JIMMY
|
|
tRoot = "JIM_APH1"
|
|
BREAK
|
|
CASE FR_AMANDA
|
|
tRoot = "AMA_APH1"
|
|
BREAK
|
|
|
|
DEFAULT
|
|
tRoot = "XXX_APH1"
|
|
#IF IS_DEBUG_BUILD
|
|
tRoot = GetLabel_enumFriend(eFriend)
|
|
SCRIPT_ASSERT("PRIVATE_FriendDialogue_GetAnswerphonePhrase() - invalid eBuddy")
|
|
#ENDIF
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
//-- Phone phrases
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
FUNC BOOL Private_GetFriendPhonePhrase(enumCharacterList ePlayerChar, enumCharacterList eFriendChar, enumFriendPhonePhrase ePhrase, TEXT_LABEL& tBlock, TEXT_LABEL& tRoot)
|
|
|
|
// Get friend IDs
|
|
enumFriend ePlayer = GET_FRIEND_FROM_CHAR(ePlayerChar)
|
|
enumFriend eFriend = GET_FRIEND_FROM_CHAR(eFriendChar)
|
|
IF ePlayer = NO_FRIEND
|
|
OR eFriend = NO_FRIEND
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// Get block and root stub
|
|
tRoot = PRIVATE_FriendDialogue_GetAudioCode(ePlayer, eFriend, NO_FRIEND, FAB_phone)
|
|
tBlock = tRoot
|
|
tBlock += "AU"
|
|
|
|
// Get specific part of root label
|
|
tRoot += "_"
|
|
|
|
SWITCH ePhrase
|
|
CASE FPP_OUTGOING_GREET1 tRoot += "G1" BREAK
|
|
CASE FPP_OUTGOING_GREET2 tRoot += "G2" BREAK
|
|
CASE FPP_OUTGOING_GREET2_MEETINGMICHAEL tRoot += "G2_mm" BREAK
|
|
CASE FPP_OUTGOING_GREET2_MEETINGFRANKLIN tRoot += "G2_mf" BREAK
|
|
CASE FPP_OUTGOING_GREET2_MEETINGTREVOR tRoot += "G2_mt" BREAK
|
|
CASE FPP_OUTGOING_GREET2_MEETINGLAMAR tRoot += "G2_ml" BREAK
|
|
CASE FPP_OUTGOING_YES1_OK tRoot += "Y1_ok" BREAK
|
|
CASE FPP_OUTGOING_YES1_IRATE tRoot += "Y1_ir" BREAK
|
|
CASE FPP_OUTGOING_YES1_VERYIRATE tRoot += "Y1_vi" BREAK
|
|
CASE FPP_OUTGOING_YES1_FIRSTTIME tRoot += "Y1_fs" BREAK
|
|
CASE FPP_OUTGOING_YES1_LIKELOW tRoot += "Y1_lo" BREAK
|
|
CASE FPP_OUTGOING_YES1_BUSY tRoot += "Y1_bs" BREAK
|
|
CASE FPP_OUTGOING_YES1_COMETOYOU tRoot += "Y1_cm" BREAK
|
|
CASE FPP_OUTGOING_YES2_OK tRoot += "Y2_ok" BREAK
|
|
CASE FPP_OUTGOING_YES2_COMETOYOU tRoot += "Y2_cm" BREAK
|
|
CASE FPP_OUTGOING_NO1_OK tRoot += "N1_ok" BREAK
|
|
CASE FPP_OUTGOING_NO1_RECENTFACE tRoot += "N1_fc" BREAK
|
|
CASE FPP_OUTGOING_NO1_RECENTPHONE tRoot += "N1_ph" BREAK
|
|
CASE FPP_OUTGOING_NO1_BLOCKED tRoot += "N1_bl" BREAK
|
|
CASE FPP_OUTGOING_NO2 tRoot += "N2" BREAK
|
|
|
|
CASE FPP_BACKUP tRoot += "B1" BREAK
|
|
CASE FPP_BACKUP_DOCKS_2 tRoot += "B1_d2" BREAK
|
|
CASE FPP_BACKUP_RURAL tRoot += "B1_r" BREAK
|
|
CASE FPP_BACKUP_AGENCY tRoot += "B1_a" BREAK
|
|
CASE FPP_BACKUP_FINALE_A tRoot += "B1_b1" BREAK
|
|
CASE FPP_BACKUP_FINALE_B tRoot += "B1_b2" BREAK
|
|
CASE FPP_BACKUP_FBI_1 tRoot += "B1_f1" BREAK
|
|
CASE FPP_BACKUP_FBI_2 tRoot += "B1_f2" BREAK
|
|
CASE FPP_BACKUP_FBI_4 tRoot += "B1_f4" BREAK
|
|
CASE FPP_BACKUP_FBI_5 tRoot += "B1_f5" BREAK
|
|
|
|
CASE FPP_CANCEL1 tRoot += "Cncl" BREAK
|
|
CASE FPP_CANCEL2_HILIKE tRoot += "CnclH" BREAK
|
|
CASE FPP_CANCEL2_MEDLIKE tRoot += "CnclM" BREAK
|
|
CASE FPP_CANCEL2_LOWLIKE tRoot += "CnclL" BREAK
|
|
CASE FPP_CANCEL2_FIRSTTIME tRoot += "CnclF" BREAK
|
|
|
|
CASE FPP_LAYLOW1 tRoot += "Lay1" BREAK
|
|
CASE FPP_LAYLOW2 tRoot += "Lay2" BREAK
|
|
CASE FPP_LAYLOW3 tRoot += "Lay3" BREAK
|
|
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
tRoot += ENUM_TO_INT(ePhrase)
|
|
SCRIPT_ASSERT("Private_GetFriendPhonePhrase() - invalid ePhrase")
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
//-- Activity phrases
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
FUNC BOOL Private_GetFriendActivityPhrase(enumCharacterList ePlayerChar, enumCharacterList eFriendChar, enumFriendActivityPhrase eActivityPhrase, TEXT_LABEL& tBlock, TEXT_LABEL& tRoot)
|
|
|
|
// Get friend IDs
|
|
enumFriend ePlayer = GET_FRIEND_FROM_CHAR(ePlayerChar)
|
|
enumFriend eFriend = GET_FRIEND_FROM_CHAR(eFriendChar)
|
|
IF ePlayer = NO_FRIEND
|
|
OR eFriend = NO_FRIEND
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// Get block and root stub
|
|
tRoot = PRIVATE_FriendDialogue_GetAudioCode(ePlayer, eFriend, NO_FRIEND, FAB_activity)
|
|
tBlock = tRoot
|
|
tBlock += "AU"
|
|
|
|
// Get specific part of root label
|
|
tRoot += "_"
|
|
|
|
SWITCH eActivityPhrase
|
|
CASE FAP_PICKUP_OK tRoot += "PkOk" BREAK
|
|
CASE FAP_PICKUP_LATE tRoot += "PkLt" BREAK
|
|
CASE FAP_PICKUP_NOCAR tRoot += "PkFt" BREAK
|
|
CASE FAP_PICKUP_FULLCAR tRoot += "PkFul" BREAK
|
|
CASE FAP_PICKUP_ODDCAR tRoot += "PkOdd" BREAK
|
|
CASE FAP_PICKUP_YOUDRIVE tRoot += "PkUDr" BREAK
|
|
|
|
CASE FAP_GREET_OK tRoot += "GrOk" BREAK
|
|
CASE FAP_GREET_IRATE tRoot += "GrIr" BREAK
|
|
CASE FAP_GREET_VIRATE tRoot += "GrVi" BREAK
|
|
CASE FAP_GREET_PLURAL tRoot += "GrPl" BREAK
|
|
CASE FAP_GREET_YOUDRIVE tRoot += "GrUDr" BREAK
|
|
|
|
CASE FAP_AMBIENT_HELLO_OK tRoot += "AmbH_ok" BREAK
|
|
CASE FAP_AMBIENT_HELLO_RECENT tRoot += "AmbH_rc" BREAK
|
|
CASE FAP_AMBIENT_HELLO_IRATE tRoot += "AmbH_ir" BREAK
|
|
|
|
CASE FAP_AMBIENT_BLOCKED_MISSION tRoot += "AmbB_mi" BREAK
|
|
CASE FAP_AMBIENT_BLOCKED_OK tRoot += "AmbB_ok" BREAK
|
|
|
|
CASE FAP_AMBIENT_OFFER_QUESTION tRoot += "AmbO_qu" BREAK
|
|
CASE FAP_AMBIENT_OFFER_YES1 tRoot += "AmbO_Y1" BREAK
|
|
CASE FAP_AMBIENT_OFFER_YES2 tRoot += "AmbO_Y2" BREAK
|
|
CASE FAP_AMBIENT_OFFER_NO1 tRoot += "AmbO_N1" BREAK
|
|
|
|
CASE FAP_AMBIENT_GOODBYE_OK tRoot += "AmbG_ok" BREAK
|
|
CASE FAP_AMBIENT_GOODBYE_IRATE tRoot += "AmbG_ir" BREAK
|
|
|
|
CASE FAP_AMBIENT_STALK_1 tRoot += "AmbS1" BREAK
|
|
CASE FAP_AMBIENT_STALK_2 tRoot += "AmbS2" BREAK
|
|
CASE FAP_AMBIENT_STALK_3 tRoot += "AmbS3" BREAK
|
|
// CASE FAP_AMBIENT_STALK_4 tRoot += "AmbS4" BREAK
|
|
CASE FAP_AMBIENT_STALK_4_1 tRoot += "AmbS4_1" BREAK
|
|
CASE FAP_AMBIENT_STALK_4_2 tRoot += "AmbS4_2" BREAK
|
|
CASE FAP_AMBIENT_STALK_4_3 tRoot += "AmbS4_3" BREAK
|
|
CASE FAP_AMBIENT_STALK_4_4 tRoot += "AmbS4_4" BREAK
|
|
|
|
CASE FAP_AMBIENT_STALK_FT tRoot += "AmbS_ft" BREAK
|
|
|
|
CASE FAP_AMBIENT_TRAILER_1 tRoot += "AmbT1" BREAK
|
|
CASE FAP_AMBIENT_TRAILER_1r tRoot += "AmbT1_r" BREAK
|
|
CASE FAP_AMBIENT_TRAILER_2 tRoot += "AmbT2" BREAK
|
|
CASE FAP_AMBIENT_TRAILER_3 tRoot += "AmbT3" BREAK
|
|
CASE FAP_AMBIENT_TRAILER_4 tRoot += "AmbT4" BREAK
|
|
|
|
CASE FAP_AMBIENT_POO_1a tRoot += "AmbP1a" BREAK
|
|
CASE FAP_AMBIENT_POO_1b tRoot += "AmbP1b" BREAK
|
|
CASE FAP_AMBIENT_POO_1c tRoot += "AmbP1c" BREAK
|
|
CASE FAP_AMBIENT_POO_2 tRoot += "AmbP2" BREAK
|
|
|
|
CASE FAP_VERY_DRUNK tRoot += "VDrunk" BREAK
|
|
CASE FAP_SATISFIED tRoot += "Satis" BREAK
|
|
CASE FAP_DONE tRoot += "Done" BREAK
|
|
|
|
CASE FAP_MISSIONZONE_STORY tRoot += "ZnStory" BREAK
|
|
CASE FAP_MISSIONZONE_SQUAD tRoot += "ZnSquad" BREAK
|
|
CASE FAP_MISSIONZONE_DRUNK tRoot += "ZnDrunk" BREAK
|
|
CASE FAP_MISSIONZONE_CANCEL tRoot += "ZnCncl" BREAK
|
|
CASE FAP_MISSIONZONE_CANCEL_DRUNK tRoot += "ZnCnclD" BREAK
|
|
|
|
CASE FAP_REJECTION_TIMEOUT tRoot += "RjTime" BREAK
|
|
CASE FAP_REJECTION_OK tRoot += "RjOk" BREAK
|
|
CASE FAP_REJECTION_CRAZY tRoot += "RjCrazy" BREAK
|
|
CASE FAP_REJECTION_STUCK tRoot += "RjStuck" BREAK
|
|
|
|
CASE FAP_SQUAD_START tRoot += "SqStart" BREAK
|
|
CASE FAP_SQUAD_PASSED tRoot += "SqPass" BREAK
|
|
|
|
CASE FAP_COMMENT_HAIRCUT tRoot += "NewH" BREAK
|
|
CASE FAP_COMMENT_CLOTHES tRoot += "NewC" BREAK
|
|
CASE FAP_COMMENT_TATTOO tRoot += "NewT" BREAK
|
|
|
|
CASE FAP_COMMENT_MELTDOWN tRoot += "CinMlt" BREAK
|
|
|
|
CASE FAP_COMMENT_CARDAMAGE tRoot += "CarDam" BREAK
|
|
CASE FAP_COMMENT_PEDDAMAGE tRoot += "PedDam" BREAK
|
|
|
|
CASE FAP_DROPOFF_OPENER tRoot += "DrpOp" BREAK
|
|
CASE FAP_DROPOFF_OPENER_DRUNK tRoot += "DrpOpDr" BREAK
|
|
CASE FAP_DROPOFF_OPENER_PLURAL tRoot += "DrpOpPl" BREAK
|
|
|
|
CASE FAP_DROPOFF_OK tRoot += "DrpA" BREAK
|
|
CASE FAP_DROPOFF_IRATE tRoot += "DrpB" BREAK
|
|
CASE FAP_DROPOFF_VERY_IRATE tRoot += "DrpC" BREAK
|
|
CASE FAP_DROPOFF_DRUNK tRoot += "DrpDr" BREAK
|
|
CASE FAP_DROPOFF_GOTCAR tRoot += "DrpCar" BREAK
|
|
|
|
CASE FAP_DEATH tRoot += "Death" BREAK
|
|
|
|
DEFAULT
|
|
IF eActivityPhrase <> NO_FRIEND_ACTIVITY_PHRASE
|
|
#IF IS_DEBUG_BUILD
|
|
tRoot += "_"
|
|
tRoot += ENUM_TO_INT(eActivityPhrase)
|
|
|
|
SCRIPT_ASSERT("Private_GetFriendActivityPhrase() - invalid eActivityPhrase")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL Private_GetFriendActivitySuggestion(enumCharacterList ePlayerChar, enumCharacterList eFriendChar, enumActivityLocation eLoc, TEXT_LABEL& tBlock, TEXT_LABEL& tRoot)
|
|
|
|
// Get friend IDs
|
|
enumFriend ePlayer = GET_FRIEND_FROM_CHAR(ePlayerChar)
|
|
enumFriend eFriend = GET_FRIEND_FROM_CHAR(eFriendChar)
|
|
IF ePlayer = NO_FRIEND
|
|
OR eFriend = NO_FRIEND
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// Get block and root stub
|
|
tRoot = PRIVATE_FriendDialogue_GetAudioCode(ePlayer, eFriend, NO_FRIEND, FAB_activity)
|
|
tBlock = tRoot
|
|
tBlock += "AU"
|
|
|
|
// Get activity type part of root label
|
|
tRoot += "_Sg"
|
|
|
|
SWITCH(g_ActivityLocations[eLoc].type)
|
|
CASE ATYPE_cinema tRoot += "Cin" BREAK
|
|
|
|
CASE ATYPE_golf tRoot += "Glf" BREAK
|
|
CASE ATYPE_stripclub tRoot += "Str" BREAK
|
|
CASE ATYPE_tennis tRoot += "Tns" BREAK
|
|
CASE ATYPE_darts tRoot += "Drt" BREAK
|
|
CASE ATYPE_bar tRoot += "Bar" BREAK
|
|
|
|
DEFAULT
|
|
tRoot += "BAD"
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL Private_GetFriendActivityResult(enumCharacterList ePlayerChar, enumCharacterList eFriendChar,
|
|
enumActivityLocation activityLoc, enumActivityResult activityResult, BOOL bIsDrunk,
|
|
TEXT_LABEL& tBlock, TEXT_LABEL& tRoot)
|
|
|
|
// Get friend IDs
|
|
enumFriend ePlayer = GET_FRIEND_FROM_CHAR(ePlayerChar)
|
|
enumFriend eFriend = GET_FRIEND_FROM_CHAR(eFriendChar)
|
|
IF ePlayer = NO_FRIEND
|
|
OR eFriend = NO_FRIEND
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// Get block and root stub
|
|
tRoot = PRIVATE_FriendDialogue_GetAudioCode(ePlayer, eFriend, NO_FRIEND, FAB_activity)
|
|
tBlock = tRoot
|
|
tBlock += "AU"
|
|
|
|
// Get activity type part of root label
|
|
enumActivityType activityType = g_ActivityLocations[activityLoc].type
|
|
tRoot += "_"
|
|
|
|
SWITCH(activityType)
|
|
CASE ATYPE_cinema tRoot += "Cin" BREAK
|
|
CASE ATYPE_bar tRoot += "Bar" BREAK
|
|
|
|
CASE ATYPE_golf tRoot += "Glf" BREAK
|
|
CASE ATYPE_stripclub tRoot += "Str" BREAK
|
|
CASE ATYPE_tennis tRoot += "Tns" BREAK
|
|
CASE ATYPE_darts tRoot += "Drt" BREAK
|
|
|
|
DEFAULT
|
|
tRoot += "BAD"
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Get activity result part of root label
|
|
IF bIsDrunk AND (activityType != ATYPE_golf AND activityType != ATYPE_tennis)
|
|
tRoot += "Dr"
|
|
ELSE
|
|
SWITCH(activityResult)
|
|
CASE AR_playerWon tRoot += "Wn" BREAK
|
|
CASE AR_buddyA_won tRoot += "Ls" BREAK
|
|
CASE AR_buddyB_won tRoot += "Ls" BREAK
|
|
CASE AR_playerDraw tRoot += "Ti" BREAK
|
|
CASE AR_playerQuit tRoot += "Qt" BREAK
|
|
|
|
DEFAULT
|
|
tRoot += "XX"
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
//-- Chat conversations
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
//FUNC BOOL Private_GetFriendChatData(structFriendChatData& chatData, enumCharacterList ePlayerChar, enumCharacterList eFriendCharA, enumCharacterList eFriendCharB)
|
|
//
|
|
// IF eFriendB = NO_FRIEND
|
|
// // Get conversation state (single hangout)
|
|
// enumFriendConnection eConnection = GET_CONNECTION_FROM_FRIENDS(ePlayer, eFriendA)
|
|
// IF eConnection >= MAX_FRIEND_CONNECTIONS
|
|
// SCRIPT_ASSERT("Private_GetFriendChat(): No connection between player/friendA")
|
|
// RETURN FALSE
|
|
// ENDIF
|
|
//
|
|
// chatData = g_SavedGlobals.sFriendsData.g_FriendConnectData[eConnection].chatData
|
|
//
|
|
// ELSE
|
|
// // Get conversation state (multiple hangout)
|
|
// enumFriendGroup eGroup = GET_GROUP_FROM_FRIENDS(ePlayer, eFriendA, eFriendB)
|
|
// IF eGroup >= MAX_FRIEND_GROUPS
|
|
// SCRIPT_ASSERT("Private_GetFriendChat(): No connection between player/friendA/friendB")
|
|
// RETURN FALSE
|
|
// ENDIF
|
|
//
|
|
// chatData = g_SavedGlobals.sFriendsData.g_FriendGroupData[eGroup].chatData
|
|
// ENDIF
|
|
//
|
|
// RETURN TRUE
|
|
//
|
|
//ENDFUNC
|
|
|
|
FUNC BOOL Private_GetFriendChatIndex(structFriendChatData& chatData, enumFriendChatType eType, INT& iBank, INT &iIndex, INT iAllowedConditionsBitset)
|
|
|
|
REPEAT CONST_iFriendChatMaxBanks iBank
|
|
|
|
INT iFullCount=0, iMiniCount=0, iDrunkCount=0
|
|
INT iFullTotal=0, iMiniTotal=0, iDrunkTotal=0
|
|
enumFriendChatCondition eBankCondition = FCHAT_ConditionNever
|
|
|
|
// Is this bank allowed?
|
|
Private_GetFriendChatBankCondition(chatData.banks[iBank], eBankCondition)
|
|
IF IS_BIT_SET(iAllowedConditionsBitset, ENUM_TO_INT(eBankCondition))
|
|
|
|
// Get bank data
|
|
Private_GetFriendChatBankCounts(chatData.banks[iBank], iFullCount, iMiniCount, iDrunkCount)
|
|
Private_GetFriendChatBankTotals(chatData.banks[iBank], iFullTotal, iMiniTotal, iDrunkTotal)
|
|
|
|
// Does the bank have any of the required chat type?
|
|
IF eType = FCHAT_TypeFull
|
|
IF iFullCount < iFullTotal
|
|
iIndex = iFullCount
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
ELIF eType = FCHAT_TypeMini
|
|
IF iMiniCount < iMiniTotal
|
|
iIndex = iMiniCount
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
ELIF eType = FCHAT_TypeDrunk
|
|
IF iDrunkCount < iDrunkTotal
|
|
iIndex = iDrunkCount
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDREPEAT
|
|
|
|
iBank = 0
|
|
iIndex = 0
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC Private_IncrementFriendChatIndex(structFriendChatData& chatData, enumFriendChatType eType, INT iBank)
|
|
|
|
INT iFullCount=0, iMiniCount=0, iDrunkCount=0
|
|
INT iFullTotal=0, iMiniTotal=0, iDrunkTotal=0
|
|
enumFriendChatCondition eBankCondition = FCHAT_ConditionNever
|
|
|
|
// Get data
|
|
Private_GetFriendChatBankCounts(chatData.banks[iBank], iFullCount, iMiniCount, iDrunkCount)
|
|
Private_GetFriendChatBankTotals(chatData.banks[iBank], iFullTotal, iMiniTotal, iDrunkTotal)
|
|
Private_GetFriendChatBankCondition(chatData.banks[iBank], eBankCondition)
|
|
|
|
// Increment relevant counter
|
|
IF eType = FCHAT_TypeFull
|
|
iFullCount++
|
|
IF iFullCount > iFullTotal
|
|
iFullCount = iFullTotal
|
|
ENDIF
|
|
|
|
ELIF eType = FCHAT_TypeMini
|
|
iMiniCount++
|
|
IF iMiniCount > iMiniTotal
|
|
iMiniCount = iMiniTotal
|
|
ENDIF
|
|
|
|
ELIF eType = FCHAT_TypeDrunk
|
|
iDrunkCount++
|
|
IF iDrunkCount > iDrunkTotal
|
|
iDrunkCount = iDrunkTotal
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Store data again
|
|
CPRINTLN(DEBUG_FRIENDS, "Private_IncrementFriendChatIndex(", iFullCount, ", ", iMiniCount, ", ", iDrunkCount, ", - ", iFullTotal, ", ", iMiniTotal, ", ", iDrunkTotal, ")")
|
|
Private_SetFriendChatBankData(chatData.banks[iBank],
|
|
iFullCount, iMiniCount, iDrunkCount,
|
|
iFullTotal, iMiniTotal, iDrunkTotal,
|
|
eBankCondition)
|
|
|
|
ENDPROC
|
|
|
|
|
|
FUNC BOOL Private_GetFriendChat(enumCharacterList ePlayerChar, enumCharacterList eFriendAChar, enumCharacterList eFriendBChar, enumFriendChatType eChatType, INT iConditions, TEXT_LABEL& tBlock, TEXT_LABEL& tRoot, BOOL bIncrement = FALSE)
|
|
|
|
// Get friend IDs
|
|
enumFriend ePlayer = GET_FRIEND_FROM_CHAR(ePlayerChar)
|
|
enumFriend eFriendA = GET_FRIEND_FROM_CHAR(eFriendAChar)
|
|
enumFriend eFriendB = GET_FRIEND_FROM_CHAR(eFriendBChar)
|
|
IF ePlayer = NO_FRIEND
|
|
OR eFriendA = NO_FRIEND
|
|
OR (eFriendB = NO_FRIEND AND eFriendBChar <> NO_CHARACTER)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
//-- Get bank and index from 2:1 or 1:1 chat data
|
|
INT iChatBank, iChatIndex
|
|
|
|
IF eFriendB = NO_FRIEND
|
|
// Get conversation state (single hangout)
|
|
enumFriendConnection eConnection = GET_CONNECTION_FROM_FRIENDS(ePlayer, eFriendA)
|
|
IF eConnection >= MAX_FRIEND_CONNECTIONS
|
|
SCRIPT_ASSERT("Private_GetFriendChat(): No connection between player/friendA")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF ePlayerChar = CHAR_FRANKLIN
|
|
AND eFriendAChar = CHAR_LAMAR
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
AND GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_RESPAWNED_AFTER_FINALE)
|
|
#endif
|
|
#endif
|
|
AND eChatType = FCHAT_TypeMini
|
|
|
|
// Special case: Franklin/Lamar end of game chat banks, stored in global data
|
|
IF Private_GetFriendChatIndex(g_SavedGlobals.sFriendsData.g_FranklinLamarEndChat, eChatType, iChatBank, iChatIndex, iConditions)
|
|
IF bIncrement
|
|
Private_IncrementFriendChatIndex(g_SavedGlobals.sFriendsData.g_FranklinLamarEndChat, eChatType, iChatBank)
|
|
ENDIF
|
|
iChatBank += 6
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
// Normal 1:1 chat banks, stored in connections
|
|
IF Private_GetFriendChatIndex(g_SavedGlobals.sFriendsData.g_FriendConnectData[eConnection].chatData, eChatType, iChatBank, iChatIndex, iConditions)
|
|
IF bIncrement
|
|
Private_IncrementFriendChatIndex(g_SavedGlobals.sFriendsData.g_FriendConnectData[eConnection].chatData, eChatType, iChatBank)
|
|
ENDIF
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
// Get conversation state (multiple hangout)
|
|
enumFriendGroup eGroup = GET_GROUP_FROM_FRIENDS(ePlayer, eFriendA, eFriendB)
|
|
IF eGroup >= MAX_FRIEND_GROUPS
|
|
SCRIPT_ASSERT("Private_GetFriendChat(): No connection between player/friendA/friendB")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// Normal 3-way chat banks, stored in groups
|
|
IF Private_GetFriendChatIndex(g_SavedGlobals.sFriendsData.g_FriendGroupData[eGroup].chatData, eChatType, iChatBank, iChatIndex, iConditions)
|
|
IF bIncrement
|
|
Private_IncrementFriendChatIndex(g_SavedGlobals.sFriendsData.g_FriendGroupData[eGroup].chatData, eChatType, iChatBank)
|
|
ENDIF
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
//-- Build root...
|
|
tRoot = PRIVATE_FriendDialogue_GetAudioCode(ePlayer, eFriendA, eFriendB, FAB_chat)
|
|
tBlock = tRoot
|
|
tBlock += "AU"
|
|
tRoot += "_"
|
|
|
|
// Bank code
|
|
IF iChatBank = 0 tRoot += "A"
|
|
ELIF iChatBank = 1 tRoot += "B"
|
|
ELIF iChatBank = 2 tRoot += "C"
|
|
ELIF iChatBank = 3 tRoot += "D"
|
|
ELIF iChatBank = 4 tRoot += "E"
|
|
ELIF iChatBank = 5 tRoot += "F"
|
|
// (extended Franklin/Lamar special banks)
|
|
ELIF iChatBank = 6 tRoot += "G"
|
|
ELIF iChatBank = 7 tRoot += "H"
|
|
ELIF iChatBank = 8 tRoot += "I"
|
|
ELIF iChatBank = 9 tRoot += "J"
|
|
ELIF iChatBank = 10 tRoot += "K"
|
|
ELIF iChatBank = 11 tRoot += "L"
|
|
ELSE
|
|
tRoot += "X"
|
|
CPRINTLN(DEBUG_FRIENDS, "Private_GetFriendChat(): Unknown chat data bank", iChatBank)
|
|
SCRIPT_ASSERT("Private_GetFriendChat(): Unknown chat data bank")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// Type code
|
|
IF eChatType = FCHAT_TypeFull tRoot += "F"
|
|
ELIF eChatType = FCHAT_TypeMini tRoot += "M"
|
|
ELIF eChatType = FCHAT_TypeDrunk tRoot += "D"
|
|
ELSE
|
|
tRoot += "X"
|
|
CPRINTLN(DEBUG_FRIENDS, "Private_GetFriendChat(): Unknown chat type", eChatType)
|
|
SCRIPT_ASSERT("Private_GetFriendChat(): Unknown chat type")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// Index
|
|
tRoot += iChatIndex
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
//-- Ambient conversations
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
FUNC BOOL Private_GetAmbFriendChat(enumCharacterList ePlayerChar, enumCharacterList eFriendChar, INT iIndex, TEXT_LABEL& tBlock, TEXT_LABEL& tRoot)
|
|
|
|
// Get friend IDs
|
|
enumFriend ePlayer = GET_FRIEND_FROM_CHAR(ePlayerChar)
|
|
enumFriend eFriend = GET_FRIEND_FROM_CHAR(eFriendChar)
|
|
IF ePlayer = NO_FRIEND
|
|
OR eFriend = NO_FRIEND
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// Get block and root stub
|
|
tRoot = PRIVATE_FriendDialogue_GetAudioCode(ePlayer, eFriend, NO_FRIEND, FAB_chat)
|
|
tBlock = tRoot
|
|
tBlock += "AU"
|
|
|
|
// Get specific part of root label
|
|
tRoot += "_Amb"
|
|
tRoot += iIndex
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
//-- Text messages
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
CONST_INT CONST_iMaxFriendTextVariations 2
|
|
|
|
FUNC BOOL Private_GetFriendTextMessageLabel(enumFriend eSender, enumFriendTextMessage eTxtMsg, INT iVariation, TEXT_LABEL& r_tLabel)
|
|
|
|
IF eTxtMsg >= MAX_FRIEND_TEXT_MESSAGES
|
|
CPRINTLN(DEBUG_FRIENDS, "Private_GetFriendTextMessageLabel() - Invalid text message ID: ", GetLabel_enumFriendTextMessage(eTxtMsg))
|
|
SCRIPT_ASSERT("Private_GetFriendTextMessageLabel() - Invalid text message ID")
|
|
ELSE
|
|
IF iVariation >= CONST_iMaxFriendTextVariations
|
|
OR iVariation < -1
|
|
SCRIPT_ASSERT("Private_GetFriendTextMessageLabel() - iVariation out of range, setting to random variation")
|
|
iVariation = -1
|
|
ENDIF
|
|
|
|
//-- Get text message code
|
|
TEXT_LABEL str = "FTX_"
|
|
str += PRIVATE_GetFriendCode(eSender)
|
|
str += "_"
|
|
|
|
SWITCH eTxtMsg
|
|
CASE FTM_FRIEND_LOST str += "LOST" BREAK
|
|
CASE FTM_FRIEND_STOOD_UP str += "LATE" BREAK
|
|
CASE FTM_FRIEND_HOSPITAL str += "HOSP" BREAK
|
|
CASE FTM_PLAYER_DIED str += "PDIED" BREAK
|
|
CASE FTM_PLAYER_BUSTED str += "PBUST" BREAK
|
|
|
|
DEFAULT
|
|
str += "X"
|
|
str += ENUM_TO_INT(eTxtMsg)
|
|
SCRIPT_ASSERT("Private_GetFriendTextMessageLabel() - Invalid eFriendTextMessage")
|
|
r_tLabel = str
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
//-- Choose variation
|
|
TEXT_LABEL tVariationLabels[CONST_iMaxFriendTextVariations]
|
|
tVariationLabels[0] = str tVariationLabels[0] += "a"
|
|
tVariationLabels[1] = str tVariationLabels[1] += "b"
|
|
|
|
IF iVariation = -1
|
|
enumCharacterList eSenderChar = GET_CHAR_FROM_FRIEND(eSender)
|
|
|
|
// Try to chose a message that hasn't been used yet
|
|
IF CHECK_FOR_MESSAGE_PRESENCE_IN_CHARACTER_MESSAGE_LIST(tVariationLabels[0], eSenderChar)
|
|
iVariation = 1
|
|
|
|
ELIF CHECK_FOR_MESSAGE_PRESENCE_IN_CHARACTER_MESSAGE_LIST(tVariationLabels[1], eSenderChar)
|
|
iVariation = 0
|
|
|
|
ELSE
|
|
iVariation = GET_RANDOM_INT_IN_RANGE(0, CONST_iMaxFriendTextVariations)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
r_tLabel = tVariationLabels[iVariation]
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL Private_GetFriendTextMessageParts(enumFriend eSender, enumFriendTextMessage eTxtMsg, INT iVariation, CC_TextPart& r_eSenderPart, CC_TextPart& r_eContextPart) //(enumFriend eSender, enumFriendTextMessage eFriendTextMessage,INT iBitsetPlayerTo, INT iVariation = -1,INT iThisFriendInitialDelay = 10000,CC_CommunicationType eCommunicationType = CT_FRIEND,CC_CodeID eCID = CID_BLANK)
|
|
|
|
IF eTxtMsg >= MAX_FRIEND_TEXT_MESSAGES
|
|
CPRINTLN(DEBUG_FRIENDS, "Private_GetFriendTextMessageParts() - Invalid text message ID: ", GetLabel_enumFriendTextMessage(eTxtMsg))
|
|
SCRIPT_ASSERT("Private_GetFriendTextMessageParts() - Invalid text message ID")
|
|
ELSE
|
|
IF iVariation >= CONST_iMaxFriendTextVariations
|
|
OR iVariation < -1
|
|
SCRIPT_ASSERT("Private_GetFriendTextMessageParts() - iVariation out of range, setting to random variation")
|
|
iVariation = -1
|
|
ENDIF
|
|
|
|
//-- Get sender part ID
|
|
SWITCH eSender
|
|
CASE FR_MICHAEL r_eSenderPart = TPART_FRND_MIKE BREAK
|
|
CASE FR_FRANKLIN r_eSenderPart = TPART_FRND_FRANK BREAK
|
|
CASE FR_TREVOR r_eSenderPart = TPART_FRND_TREVOR BREAK
|
|
CASE FR_LAMAR r_eSenderPart = TPART_FRND_LAMAR BREAK
|
|
CASE FR_JIMMY r_eSenderPart = TPART_FRND_JIMMY BREAK
|
|
CASE FR_AMANDA r_eSenderPart = TPART_FRND_AMANDA BREAK
|
|
ENDSWITCH
|
|
|
|
//-- Choose variation
|
|
IF iVariation = -1
|
|
TEXT_LABEL tVariationLabels[CONST_iMaxFriendTextVariations]
|
|
IF Private_GetFriendTextMessageLabel(eSender, eTxtMsg, 0, tVariationLabels[0])
|
|
AND Private_GetFriendTextMessageLabel(eSender, eTxtMsg, 1, tVariationLabels[1])
|
|
|
|
enumCharacterList eSenderChar = GET_CHAR_FROM_FRIEND(eSender)
|
|
|
|
// Try to chose a message that hasn't been used yet
|
|
IF CHECK_FOR_MESSAGE_PRESENCE_IN_CHARACTER_MESSAGE_LIST(tVariationLabels[0], eSenderChar)
|
|
iVariation = 1
|
|
|
|
ELIF CHECK_FOR_MESSAGE_PRESENCE_IN_CHARACTER_MESSAGE_LIST(tVariationLabels[1], eSenderChar)
|
|
iVariation = 0
|
|
|
|
ELSE
|
|
iVariation = GET_RANDOM_INT_IN_RANGE(0, CONST_iMaxFriendTextVariations)
|
|
ENDIF
|
|
|
|
ELSE
|
|
iVariation = GET_RANDOM_INT_IN_RANGE(0, CONST_iMaxFriendTextVariations)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//-- Get context part ID
|
|
r_eContextPart = PRIVATE_GetFriendTextMsgContextID(eTxtMsg, iVariation)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
// *******************************************************************************************
|
|
// SEND TEXT MESSAGE
|
|
// *******************************************************************************************
|
|
|
|
// Really sorry I've butchered this one Sam. -BenR
|
|
// All text data has been moved to be local to the comms controller to save on memory useage.
|
|
// This was the only place I couldn't make it work due to the composite text message strings you are using.
|
|
// I plan to add support for composite text message IDs to the comms controller but for now your text messages aren't being queued.
|
|
FUNC BOOL REGISTERED_FRIEND_TEXT_MESSAGE_TO_PLAYER(enumCharacterList ePlayerChar, enumCharacterList eBuddyChar, enumFriendTextMessage eFriendTextMessage, BOOL bSendImmediately = FALSE, CC_CodeID eCID = CID_BLANK, CC_CommID eCommID = TEXT_FRIEND, VectorID eRestrictedArea = VID_BLANK)
|
|
|
|
CC_CommunicationType eCommunicationType = CT_FRIEND
|
|
enumFriend eFriendFrom = GET_FRIEND_FROM_CHAR(eBuddyChar)
|
|
INT iBitsetPlayerTo = GET_PLAYER_PED_BIT(ePlayerChar)
|
|
INT iThisFriendInitialDelay = 10000
|
|
|
|
IF bSendImmediately = FALSE
|
|
|
|
// Add message to comms queue
|
|
CC_TextPart eSenderPart, eContextPart
|
|
IF Private_GetFriendTextMessageParts(eFriendFrom, eFriendTextMessage, -1, eSenderPart, eContextPart)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 tPlayer = GetLabel_enumCharacterList(ePlayerChar)
|
|
TEXT_LABEL_63 tBuddy = GetLabel_enumCharacterList(eBuddyChar)
|
|
TEXT_LABEL_63 tTextMessage = GetLabel_enumFriendTextMessage(eFriendTextMessage)
|
|
TEXT_LABEL_31 tCommID = GET_COMM_ID_TEXT_MESSAGE_DEBUG_STRING(eCommID)
|
|
TEXT_LABEL_31 tSenderPart = GET_TEXT_PART_DEBUG_STRING(eSenderPart)
|
|
TEXT_LABEL_31 tContextPart = GET_TEXT_PART_DEBUG_STRING(eContextPart)
|
|
CPRINTLN(DEBUG_FRIENDS, "REGISTERED_FRIEND_TEXT_MESSAGE_TO_PLAYER(", tPlayer, ", ", tBuddy, ", ", tTextMessage, ", bSendImmediately=FALSE, ", ENUM_TO_INT(eCID), ", ", tCommID, ") // = ", tSenderPart, "/", tContextPart)
|
|
#ENDIF
|
|
|
|
IF eCommID = COMM_NONE
|
|
SCRIPT_ASSERT("REGISTERED_FRIEND_TEXT_MESSAGE_TO_PLAYER() - Can't use eCommID = COMM_NONE, if sending in queue")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
INT iSettings = 0
|
|
IF eCommID = TEXT_FRIEND_GRIEF_MICHAEL
|
|
OR eCommID = TEXT_FRIEND_GRIEF_FRANKLIN
|
|
OR eCommID = TEXT_FRIEND_GRIEF_TREVOR
|
|
OR eCommID = TEXT_FRIEND_GRIEF_LAMAR
|
|
OR eCommID = TEXT_FRIEND_GRIEF_JIMMY
|
|
OR eCommID = TEXT_FRIEND_GRIEF_AMANDA
|
|
iSettings = COMM_FLAG_TXTMSG_NO_SILENT
|
|
ENDIF
|
|
|
|
FLOW_CHECK_IDS eFlowCheck = FLOW_CHECK_NONE
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
IF eCommID = TEXT_FRIEND_GRIEF_MICHAEL eFlowCheck = FLOW_CHECK_TEXT_FRIEND_MICHAEL
|
|
ELIF eCommID = TEXT_FRIEND_GRIEF_FRANKLIN eFlowCheck = FLOW_CHECK_TEXT_FRIEND_FRANKLIN
|
|
ELIF eCommID = TEXT_FRIEND_GRIEF_TREVOR eFlowCheck = FLOW_CHECK_TEXT_FRIEND_TREVOR
|
|
ELIF eCommID = TEXT_FRIEND_GRIEF_LAMAR eFlowCheck = FLOW_CHECK_TEXT_FRIEND_LAMAR
|
|
ELIF eCommID = TEXT_FRIEND_GRIEF_JIMMY eFlowCheck = FLOW_CHECK_TEXT_FRIEND_JIMMY
|
|
ELIF eCommID = TEXT_FRIEND_GRIEF_AMANDA eFlowCheck = FLOW_CHECK_TEXT_FRIEND_AMANDA
|
|
ENDIF
|
|
#ENDIF
|
|
#ENDIF
|
|
|
|
IF REGISTER_COMPOSITE_TEXT_MESSAGE_FROM_CHARACTER_TO_PLAYER(eCommID,
|
|
eSenderPart,
|
|
eContextPart,
|
|
eCommunicationType,
|
|
iBitsetPlayerTo,
|
|
eBuddyChar,
|
|
iThisFriendInitialDelay,
|
|
DEFAULT, eRestrictedArea, eCID, eFlowCheck, iSettings)
|
|
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
// Send message now
|
|
TEXT_LABEL tTextLabel
|
|
IF Private_GetFriendTextMessageLabel(eFriendFrom, eFriendTextMessage, -1, tTextLabel)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 tPlayer = GetLabel_enumCharacterList(ePlayerChar)
|
|
TEXT_LABEL_63 tBuddy = GetLabel_enumCharacterList(eBuddyChar)
|
|
TEXT_LABEL_63 tTextMessage = GetLabel_enumFriendTextMessage(eFriendTextMessage)
|
|
CPRINTLN(DEBUG_FRIENDS, "REGISTERED_FRIEND_TEXT_MESSAGE_TO_PLAYER(", tPlayer, ", ", tBuddy, ", ", tTextMessage, ", bSendImmediately=TRUE, ", ENUM_TO_INT(eCID), ") // = ", tTextLabel)
|
|
#ENDIF
|
|
|
|
IF SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(eBuddyChar, tTextLabel, TXTMSG_UNLOCKED)
|
|
#if USE_CLF_DLC
|
|
IF eCID <> CID_BLANK
|
|
SWITCH eCID
|
|
CASE CID_CLF_HOSPITAL_CHARGE_RH Execute_CLF_Hospital_Charge_RH() BREAK
|
|
CASE CID_CLF_HOSPITAL_CHARGE_SC Execute_CLF_Hospital_Charge_SC() BREAK
|
|
CASE CID_CLF_HOSPITAL_CHARGE_DT Execute_CLF_Hospital_Charge_DT() BREAK
|
|
CASE CID_CLF_HOSPITAL_CHARGE_SS Execute_CLF_Hospital_Charge_SS() BREAK
|
|
CASE CID_CLF_HOSPITAL_CHARGE_PB Execute_CLF_Hospital_Charge_PB() BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
#endif
|
|
#if USE_NRM_DLC
|
|
IF eCID <> CID_BLANK
|
|
// SWITCH eCID
|
|
// CASE CID_HOSPITAL_CHARGE_RH Execute_Hospital_Charge_RH() BREAK
|
|
// CASE CID_HOSPITAL_CHARGE_SC Execute_Hospital_Charge_SC() BREAK
|
|
// CASE CID_HOSPITAL_CHARGE_DT Execute_Hospital_Charge_DT() BREAK
|
|
// CASE CID_HOSPITAL_CHARGE_SS Execute_Hospital_Charge_SS() BREAK
|
|
// CASE CID_HOSPITAL_CHARGE_PB Execute_Hospital_Charge_PB() BREAK
|
|
// ENDSWITCH
|
|
ENDIF
|
|
#endif
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
IF eCID <> CID_BLANK
|
|
SWITCH eCID
|
|
CASE CID_HOSPITAL_CHARGE_RH Execute_Hospital_Charge_RH() BREAK
|
|
CASE CID_HOSPITAL_CHARGE_SC Execute_Hospital_Charge_SC() BREAK
|
|
CASE CID_HOSPITAL_CHARGE_DT Execute_Hospital_Charge_DT() BREAK
|
|
CASE CID_HOSPITAL_CHARGE_SS Execute_Hospital_Charge_SS() BREAK
|
|
CASE CID_HOSPITAL_CHARGE_PB Execute_Hospital_Charge_PB() BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
#endif
|
|
#endif
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
|
|
// *******************************************************************************************
|
|
// MISSION START COMMENTS
|
|
// *******************************************************************************************
|
|
|
|
FUNC BOOL PRIVATE_FriendDialogue_GetRawAudio(enumCharacterList eFriendChar, enumFriendActivityPhrase ePhrase, TEXT_LABEL& tAudio)
|
|
|
|
SWITCH (ePhrase)
|
|
CASE FAP_REJECTION_OK
|
|
SWITCH(eFriendChar)
|
|
CASE CHAR_MICHAEL tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_FRANKLIN tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_TREVOR tAudio = "FaFM_CAAA" RETURN TRUE
|
|
|
|
CASE CHAR_LAMAR tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_JIMMY tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_AMANDA tAudio = "FaFM_CAAA" RETURN TRUE
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE FAP_REJECTION_CRAZY
|
|
SWITCH(eFriendChar)
|
|
CASE CHAR_MICHAEL tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_FRANKLIN tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_TREVOR tAudio = "FaFM_CAAA" RETURN TRUE
|
|
|
|
CASE CHAR_LAMAR tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_JIMMY tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_AMANDA tAudio = "FaFM_CAAA" RETURN TRUE
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE FAP_SQUAD_START
|
|
SWITCH(eFriendChar)
|
|
CASE CHAR_MICHAEL tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_FRANKLIN tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_TREVOR tAudio = "FaFM_CAAA" RETURN TRUE
|
|
|
|
CASE CHAR_LAMAR tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_JIMMY tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_AMANDA tAudio = "FaFM_CAAA" RETURN TRUE
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE FAP_SQUAD_PASSED
|
|
SWITCH(eFriendChar)
|
|
CASE CHAR_MICHAEL tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_FRANKLIN tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_TREVOR tAudio = "FaFM_CAAA" RETURN TRUE
|
|
|
|
CASE CHAR_LAMAR tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_JIMMY tAudio = "FaFM_CAAA" RETURN TRUE
|
|
CASE CHAR_AMANDA tAudio = "FaFM_CAAA" RETURN TRUE
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
DEFAULT
|
|
// Didn't find phrase
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 tChar
|
|
TEXT_LABEL_63 tPhrase
|
|
tChar = GetLabel_enumCharacterList(eFriendChar)
|
|
tPhrase = GetLabel_enumFriendActivityPhrase(ePhrase)
|
|
CPRINTLN(DEBUG_FRIENDS, "PRIVATE_FriendDialogue_GetRawAudio(", tChar, ", ", tPhrase, ") - Phrase not supported")
|
|
SCRIPT_ASSERT("PRIVATE_FriendDialogue_GetRawAudio() - Phrase not supported")
|
|
#ENDIF
|
|
tAudio = "FaFM_BVAA"
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Found phrase but not char
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 tChar = GetLabel_enumCharacterList(eFriendChar)
|
|
TEXT_LABEL_63 tPhrase = GetLabel_enumFriendActivityPhrase(ePhrase)
|
|
CPRINTLN(DEBUG_FRIENDS, "PRIVATE_FriendDialogue_GetRawAudio(", tChar, ", ", tPhrase, ") - Char not supported for this phrase")
|
|
SCRIPT_ASSERT("PRIVATE_FriendDialogue_GetRawAudio() - Char not supported for this phrase")
|
|
#ENDIF
|
|
tAudio = "FaFM_BVAA"
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
|
|
// *******************************************************************************************
|
|
// PLAY ANSWER PHONE MESSAGE
|
|
// *******************************************************************************************
|
|
|
|
FUNC BOOL PRIVATE_Friend_DoAnswerPhone(structPedsForConversation& convPeds, enumCharacterList eFriendCharID)
|
|
|
|
// Setup the conversation participants
|
|
ADD_PED_FOR_DIALOGUE(convPeds, 1, NULL, PRIVATE_Get_SpeakerLabel_From_Char(eFriendCharID))
|
|
|
|
// Get dialogue block and lines
|
|
BOOL bForcePhone = FALSE
|
|
TEXT_LABEL tAudioBlock
|
|
TEXT_LABEL tAudioRoot
|
|
|
|
PRIVATE_FriendDialogue_GetAnswerphonePhrase(GET_FRIEND_FROM_CHAR(eFriendCharID), tAudioBlock, tAudioRoot)
|
|
|
|
IF PLAYER_CALL_CHAR_CELLPHONE(convPeds, eFriendCharID, tAudioBlock, tAudioRoot, CONV_PRIORITY_NON_CRITICAL_CALL, bForcePhone)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
|
|
// *******************************************************************************************
|
|
// ACTIVITY CANCEL CALL
|
|
// *******************************************************************************************
|
|
|
|
FUNC BOOL PRIVATE_Friend_GetCancelConvReply(INT iCurrentLikes, enumFriendPhonePhrase& replyPartA, enumFriendPhonePhrase &replyPartB)
|
|
|
|
// select CANCEL conv
|
|
replyPartA = FPP_CANCEL1
|
|
|
|
// IF NOT g_SavedGlobals.sFriendsData.g_bCalledToCancelOnce // TODO: Make the first time cancel dialogue work
|
|
// replyPartB = FPP_CANCEL2_FIRSTTIME
|
|
// ELSE
|
|
IF iCurrentLikes > 70
|
|
replyPartB = FPP_CANCEL2_HILIKE
|
|
ELIF iCurrentLikes > 45
|
|
replyPartB = FPP_CANCEL2_MEDLIKE
|
|
ELSE
|
|
replyPartB = FPP_CANCEL2_LOWLIKE
|
|
ENDIF
|
|
// ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Friend_DoCancelConv(structPedsForConversation& convPeds, enumCharacterList ePlayerCharID, enumCharacterList eFriendCharID)
|
|
|
|
// Get appropriate cancel phrases
|
|
enumFriendPhonePhrase eCancelPhraseA
|
|
enumFriendPhonePhrase eCancelPhraseB
|
|
|
|
PRIVATE_Friend_GetCancelConvReply(GET_FRIEND_LIKE(ePlayerCharID, eFriendCharID), eCancelPhraseA, eCancelPhraseB)
|
|
|
|
// Get block and root for dialogue
|
|
TEXT_LABEL tBlock
|
|
TEXT_LABEL tRootA
|
|
TEXT_LABEL tRootB
|
|
|
|
Private_GetFriendPhonePhrase(ePlayerCharID, eFriendCharID, eCancelPhraseA, tBlock, tRootA)
|
|
Private_GetFriendPhonePhrase(ePlayerCharID, eFriendCharID, eCancelPhraseB, tBlock, tRootB)
|
|
|
|
CPRINTLN(DEBUG_FRIENDS, "PRIVATE_Friend_DoCancelConv(): dialogue roots: ", tRootA, ", ", tRootB)
|
|
|
|
ADD_FRIEND_CHAR_FOR_DIALOGUE(convPeds, ePlayerCharID, PLAYER_PED_ID())
|
|
ADD_FRIEND_CHAR_FOR_DIALOGUE(convPeds, eFriendCharID)
|
|
|
|
IF PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_2_LINES(convPeds, eFriendCharID, tBlock, // TODO: This doesn't work with the first time cancel (because it's not got variations?)
|
|
tRootA, tRootA,
|
|
tRootB, tRootB,
|
|
CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT)
|
|
|
|
IF (eCancelPhraseB = FPP_CANCEL2_FIRSTTIME)
|
|
g_SavedGlobals.sFriendsData.g_bCalledToCancelOnce = TRUE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|