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

4119 lines
175 KiB
XML
Executable File

USING "globals.sch"
USING "player_ped_public.sch"
USING "email_generated_functions.sch"
USING "finance_modifiers_public.sch"
#IF IS_DEBUG_BUILD
USING "flow_mission_data_public.sch"
#ENDIF
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : email_public.sc
// AUTHOR : Ak
// DESCRIPTION : Public email system setting and information retrieval functions
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
FUNC TEXT_LABEL_63 RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(INT indice)
CPRINTLN(DEBUG_EMAIL,"RETRIEVE_EMAIL_STRING_TAG_BY_INDICE : ",indice)
IF(indice > -1)
TEXT_LABEL_63 s
s = "EMSTR_"
s += indice
CPRINTLN(DEBUG_EMAIL,"---",s)
RETURN s//TEXT_LABEL_LAUNDERER(s)
ENDIF
CPRINTLN(DEBUG_EMAIL,"Failed!")
TEXT_LABEL_63 fail = "FAIL"
RETURN fail
ENDFUNC
FUNC BOOL PROPERTY_EMAIL_CALLBACK(SCALEFORM_INDEX sf,INT threadRegistrationID, INT logIndex, EMAIL_MESSAGE_ENUMS mailEnum)
BOOL bUpdated = FALSE
//new example of how to make extended email overrides
//as before return false if you're not going to override it
INT placeholder = threadRegistrationID
placeholder = logIndex
placeholder = placeholder
INT iSlot = 0
CPRINTLN(DEBUG_EMAIL,"APP EMAIL VIEW - SCRIPT: Clearing slots")
BEGIN_SCALEFORM_MOVIE_METHOD(sf,"SET_DATA_SLOT_EMPTY")
END_SCALEFORM_MOVIE_METHOD()
TEXT_LABEL_63 title = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[mailEnum].iTitleTag)
TEXT_LABEL_63 body
SWITCH mailEnum
CASE PROPMAN_TO_MIKE
body = "PROPR_INCEMAIL1"
BREAK
CASE PROPMAN_TO_FRANK
body = "PROPR_INCEMAIL3"
BREAK
CASE PROPMAN_TO_TREV
body = "PROPR_INCEMAIL2"
BREAK
ENDSWITCH
//do the first mail
CPRINTLN(DEBUG_EMAIL,"APP EMAIL VIEW - SCRIPT: Main part of email")
BEGIN_SCALEFORM_MOVIE_METHOD(sf, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_ADDRESS_TAG(g_AllEmails[mailEnum].eTo))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_ADDRESS_TAG(g_AllEmails[mailEnum].eFrom))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(title)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(body) //override this to whatever you like
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_SIGNOFF_TAG(g_AllEmails[mailEnum].eFrom))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
END_SCALEFORM_MOVIE_METHOD()
++iSlot
//pass as many damn strings to the email as you like (can't vouch for memory) in the following form
INT i
REPEAT COUNT_OF(PROPERTY_ENUM) i
PROPERTY_ENUM thisProperty = INT_TO_ENUM(PROPERTY_ENUM, i)
BOOL bAdd = FALSE
SWITCH mailEnum
CASE PROPMAN_TO_MIKE
IF g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner = CHAR_MICHAEL
CPRINTLN(DEBUG_EMAIL,"adding mike")
bAdd = TRUE
ENDIF
BREAK
CASE PROPMAN_TO_FRANK
IF g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner = CHAR_FRANKLIN
CPRINTLN(DEBUG_EMAIL,"adding frank")
bAdd = TRUE
ENDIF
BREAK
CASE PROPMAN_TO_TREV
IF g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].charOwner = CHAR_TREVOR
CPRINTLN(DEBUG_EMAIL,"adding trev")
bAdd = TRUE
ENDIF
BREAK
ENDSWITCH
IF bAdd
STRING sPropertyString
SWITCH thisProperty
CASE PROPERTY_TOWING_IMPOUND
sPropertyString = "ACCNA_TOWING"
BREAK
CASE PROPERTY_TAXI_LOT
sPropertyString = "ACCNA_TAXI_LOT"
BREAK
CASE PROPERTY_ARMS_TRAFFICKING
sPropertyString = "ACCNA_ARMS"
BREAK
CASE PROPERTY_SONAR_COLLECTIONS
sPropertyString = "ACCNA_SONAR"
BREAK
CASE PROPERTY_CAR_MOD_SHOP
sPropertyString = "ACCNA_CARMOD"
BREAK
CASE PROPERTY_CINEMA_VINEWOOD
sPropertyString = "ACCNA_VCINEMA"
BREAK
CASE PROPERTY_CINEMA_DOWNTOWN
sPropertyString = "ACCNA_DCINEMA"
BREAK
CASE PROPERTY_CINEMA_MORNINGWOOD
sPropertyString = "ACCNA_MCINEMA"
BREAK
CASE PROPERTY_GOLF_CLUB
sPropertyString = "ACCNA_GOLF"
BREAK
CASE PROPERTY_CAR_SCRAP_YARD
sPropertyString = "ACCNA_CSCRAP"
BREAK
CASE PROPERTY_WEED_SHOP
sPropertyString = "ACCNA_SMOKE"
BREAK
CASE PROPERTY_BAR_TEQUILALA
sPropertyString = "ACCNA_TEQUILA"
BREAK
CASE PROPERTY_BAR_PITCHERS
sPropertyString = "ACCNA_PITCHERS"
BREAK
CASE PROPERTY_BAR_HEN_HOUSE
sPropertyString = "ACCNA_HEN"
BREAK
CASE PROPERTY_BAR_HOOKIES
sPropertyString = "ACCNA_HOOKIES"
BREAK
CASE PROPERTY_STRIP_CLUB
sPropertyString = "ACCNA_STRP"
BREAK
ENDSWITCH
CPRINTLN(DEBUG_EMAIL,"APP EMAIL VIEW - SCRIP: extra string slot ", iSlot)
BEGIN_SCALEFORM_MOVIE_METHOD(sf, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot)
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("PROPR_INCEMAIL4")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(sPropertyString)
ADD_TEXT_COMPONENT_INTEGER(g_savedGlobals.sPropertyData.propertyOwnershipData[thisProperty].iLastIncome)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
++iSlot
bUpdated = TRUE
ENDIF
ENDREPEAT
RETURN bUpdated
/*
IF iOutputCount > 0
bUpdated = TRUE
STRING sEmail
SWITCH iOutputCount
CASE 1
sEmail = "PROPR_INCEMAIL1"
BREAK
CASE 2
sEmail = "PROPR_INCEMAIL2"
BREAK
CASE 3
sEmail = "PROPR_INCEMAIL3"
BREAK
CASE 4
sEmail = "PROPR_INCEMAIL4"
BREAK
CASE 5
sEmail = "PROPR_INCEMAIL5"
BREAK
ENDSWITCH
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sEmail)
REPEAT iOutputCount i
PRINTSTRING("add output") printnl()
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(sOutputString[i])
ADD_TEXT_COMPONENT_INTEGER(iOutputInt[i])
ENDREPEAT
END_TEXT_COMMAND_SCALEFORM_STRING()
ENDIF
RETURN bUpdated // return false if you didn't update the content
*/
ENDFUNC
/*
BLANK = 1
SELECT = 2
PAGES = 3
BACK = 4
CALL = 5
HANGUP = 6
DAY = 7
WEEK = 8
KEYPAD = 9
OPEN = 10
REPLY = 11
DELETE = 12
YES = 13
NO = 14
SORT = 15
WEBSITE = 16
POLICE = 17
AMBULANCE = 18
FIRE = 19
PAGES2 = 20 (for second homemenu view)
*/
//SET_SOFT_KEYS_COLOUR(1, 77, 151, 4);
//SET_SOFT_KEYS_COLOUR(2, 197, 147, 0);
//SET_SOFT_KEYS_COLOUR(3, 166, 4, 0)
PROC CONFIGURE_EMAIL_SOFT_KEY_BACK(BOOL show)
INT r,g,b,a
IF IS_XBOX360_VERSION()
OR IS_XBOX_PLATFORM()
GET_HUD_COLOUR (HUD_COLOUR_RED, r, g, b, a )
ELSE
GET_HUD_COLOUR (HUD_COLOUR_RED, r, g, b, a )
ENDIF
//Swapped over PC build to use 360 colouring in Cellphone_flashhand.sc 28.11.13 - this carries across all apps automatically unless the change it themselves.
/* Andrew - I've commented this out. Don't think you need it and it can screw up the Japanese build. ST
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_SOFT_KEYS_COLOUR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(BADGER_NEG)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(r)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(g)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(b)
END_SCALEFORM_MOVIE_METHOD()
*/
IF show
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_SOFT_KEYS")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(BADGER_NEG)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(4)
END_SCALEFORM_MOVIE_METHOD()
ELSE
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_SOFT_KEYS")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(BADGER_NEG)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(4)
END_SCALEFORM_MOVIE_METHOD()
ENDIF
ENDPROC
PROC CONFIGURE_EMAIL_SOFT_KEY_LINK(BOOL show)
INT r,g,b,a
IF IS_XBOX360_VERSION()
OR IS_XBOX_PLATFORM()
GET_HUD_COLOUR (HUD_COLOUR_BLUE, r, g, b, a )
ELSE
GET_HUD_COLOUR (HUD_COLOUR_PINKLIGHT, r, g, b, a ) //Andrew - changed this to pinklight. ST
ENDIF
//Andrew - this one should be okay. Swapped over PC build to use 360 colouring in Cellphone_flashhand.sc 28.11.13. Removed set_soft_keys_colour block.
/*
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_SOFT_KEYS_COLOUR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(BADGER_OTHER)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(r)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(g)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(b)
END_SCALEFORM_MOVIE_METHOD()
*/
IF show
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_SOFT_KEYS")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(BADGER_OTHER)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(16)
END_SCALEFORM_MOVIE_METHOD()
ELSE
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_SOFT_KEYS")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(BADGER_OTHER)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(16)
END_SCALEFORM_MOVIE_METHOD()
ENDIF
ENDPROC
PROC CONFIGURE_EMAIL_SOFT_KEY_SELECT(BOOL show)
INT r,g,b,a
IF IS_XBOX360_VERSION()
OR IS_XBOX_PLATFORM()
GET_HUD_COLOUR (HUD_COLOUR_GREEN, r, g, b, a )
ELSE
GET_HUD_COLOUR (HUD_COLOUR_BLUE, r, g, b, a ) //should be blue
ENDIF
//Swapped over PC build to use 360 colouring in Cellphone_flashhand.sc 28.11.13 - this carries across all apps automatically unless the change it themselves.
/* Andrew - I've commented this out. Don't think you need it and it can screw up the Japanese build. ST
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_SOFT_KEYS_COLOUR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(BADGER_POS)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(r)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(g)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(b)
END_SCALEFORM_MOVIE_METHOD()
*/
IF show
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_SOFT_KEYS")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(BADGER_POS)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
END_SCALEFORM_MOVIE_METHOD()
ELSE
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_SOFT_KEYS")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(BADGER_POS)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
END_SCALEFORM_MOVIE_METHOD()
ENDIF
ENDPROC
CONST_INT EMAIL_OVERRIDE_SUBSTRING_MAX 10 // 5 - CC
PROC UPDATE_EMAILS_READ_FOR_CURRENT_PLAYER(INT by)
CPRINTLN(DEBUG_EMAIL,"Old unread email totals are: ")
CPRINTLN(DEBUG_EMAIL,"g_iUnreadEmailsSP0 ",g_iUnreadEmailsSP0)
CPRINTLN(DEBUG_EMAIL,"g_iUnreadEmailsSP1 ",g_iUnreadEmailsSP1)
CPRINTLN(DEBUG_EMAIL,"g_iUnreadEmailsSP2 ",g_iUnreadEmailsSP2)
CPRINTLN(DEBUG_EMAIL,"Total unread mails to change by ",by)
SWITCH GET_CURRENT_PLAYER_PED_ENUM()
CASE CHAR_MICHAEL
g_iUnreadEmailsSP0 += by
IF g_iUnreadEmailsSP0 < 0
g_iUnreadEmailsSP0 = 0
ENDIF
BREAK
CASE CHAR_TREVOR
g_iUnreadEmailsSP2 += by
IF g_iUnreadEmailsSP2 < 0
g_iUnreadEmailsSP2 = 0
ENDIF
BREAK
CASE CHAR_FRANKLIN
g_iUnreadEmailsSP1 += by
IF g_iUnreadEmailsSP1 < 0
g_iUnreadEmailsSP1 = 0
ENDIF
BREAK
DEFAULT
CPRINTLN(DEBUG_EMAIL,"UPDATE_EMAILS_READ_FOR_CURRENT_PLAYER: invalid enum ID was : ", GET_CURRENT_PLAYER_PED_ENUM())
SCRIPT_ASSERT("UPDATE_EMAILS_READ_FOR_CURRENT_PLAYER called on unrecognised ped!")
BREAK
ENDSWITCH
CPRINTLN(DEBUG_EMAIL,"New unread email totals are: ")
CPRINTLN(DEBUG_EMAIL,"g_iUnreadEmailsSP0 ",g_iUnreadEmailsSP0)
CPRINTLN(DEBUG_EMAIL,"g_iUnreadEmailsSP1 ",g_iUnreadEmailsSP1)
CPRINTLN(DEBUG_EMAIL,"g_iUnreadEmailsSP2 ",g_iUnreadEmailsSP2)
ENDPROC
PROC SET_EMAIL_BRANDING_ARGS_FROM_INDEX( INT index, EMAILER_ENUMS from)
EMAIL_MESSAGE_ENUMS e = INT_TO_ENUM(EMAIL_MESSAGE_ENUMS, index)
SWITCH e
/*
CASE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("bla")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE)
BREAK
*/
CASE EMAIL_HELIPAD_MIKE
CASE EMAIL_HANGAR_MIKE
CASE EMAIL_HELIPAD_FRANK
CASE EMAIL_HELIPAD_TREV
CASE EMAIL_HANGAR_FRANK
CASE EMAIL_HANGAR_TREV
CASE EMAIL_PLANE_MIKE
CASE EMAIL_PLANE_FRANK
CASE EMAIL_PLANE_TREVOR
SCALEFORM_MOVIE_METHOD_ADD_PARAM_TEXTURE_NAME_STRING("EmailAds_Elitas_Travel")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
EXIT
CASE EMAIL_BOAT_MIKE
CASE EMAIL_BOAT_FRANK
CASE EMAIL_BOAT_TREVOR
CASE EMAIL_MARINA_FRANK
CASE EMAIL_MARINA_TREV
CASE EMAIL_MARINA_MIKE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_TEXTURE_NAME_STRING("EmailAds_Dock_Tease")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
EXIT
CASE EMAIL_MILITARY_MIKE
CASE EMAIL_MILITARY_FRANK
CASE EMAIL_MILITARY_TREVOR
SCALEFORM_MOVIE_METHOD_ADD_PARAM_TEXTURE_NAME_STRING("EmailAds_Warstock")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
EXIT
CASE EMAIL_CAR_FRANKLIN
CASE EMAIL_CAR_MIKE
CASE EMAIL_CAR_TREVOR
SCALEFORM_MOVIE_METHOD_ADD_PARAM_TEXTURE_NAME_STRING("EmailAds_Legendary_Motorsport")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
EXIT
ENDSWITCH
/*
EmailAds_Appropriate_Associates.png
EmailAds_Bawsaq.png
EmailAds_Beseecher.png
EmailAds_Bleeter.png
EmailAds_CashForDeadDreams.png
EmailAds_CCCKings.png
EmailAds_Classic_Vinewood.png
EmailAds_Elitas_Travel.png (updated)
EmailAds_Fame_Or_Shame.png
EmailAds_Fruit.png
EmailAds_Himplants.png
EmailAds_Jock_Cranley.png
EmailAds_Lifeinvader.png
EmailAds_LS_Customs.png (updated)
EmailAds_LS_Freegans.png
EmailAds_Manopause_Adventures.png
EmailAds_Prop14.png
EmailAds_Toilet_Cleaner.png
//EmailAds_HushSmush
//EmailAds_I_Will_Survive_It_All
//EmailAds_LS_Customs
//EmailAds_My_Divine_Within
//EmailAds_Sue_Murry
*/
SWITCH from
CASE EMAILER_MILITARY_SITE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_TEXTURE_NAME_STRING("EmailAds_Warstock")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
EXIT
//CASE EMAILER_
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Appropriate_Associates")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE EMAILER_
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Bawsaq")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE EMAILER_
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Beseecher")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE EMAILER_
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Bleeter")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE EMAILER_C
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_CashForDeadDreams")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE EMAILER_
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_CCCKings")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Classic_Vinewood")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE EMAILER_
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Fame_Or_Shame")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Fruit")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Himplants")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Jock_Cranley")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE EMAILER_
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Lifeinvader")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
CASE EMAILER_LSC
SCALEFORM_MOVIE_METHOD_ADD_PARAM_TEXTURE_NAME_STRING("EmailAds_LS_Customs")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
EXIT
CASE EMAILER_TOURIST_BOARD // - CC
SCALEFORM_MOVIE_METHOD_ADD_PARAM_TEXTURE_NAME_STRING("EmailAds_LS_Tourist_Info")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
EXIT
//CASE
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_LS_Freegans")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Manopause_Adventures")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Prop14")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
//CASE
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EmailAds_Toilet_Cleaner")
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
// EXIT
ENDSWITCH
/*
CULTINITIAL = 0,
CULT1 = 1,
CULT2 = 2,
CULT3 = 3,
CULT4 = 4,
CULT5 = 5,
CULTFINALE = 6,
CULTDONATE500 = 7,
CULTDONATE5000 = 8,
CULTBUYROBES = 9,
EMAIL_ORDER_PLACED = 10,
EMAIL_ORDER_DELIVERED = 11,
EMAIL_ORDER_REMINDER = 17,
EMAIL_CAR_FRANKLIN = 32,
EMAIL_CAR_MIKE = 33,
EMAIL_CAR_TREVOR = 34,
EMAIL_MILITARY_MIKE = 35,
EMAIL_MILITARY_FRANK = 36,
EMAIL_MILITARY_TREVOR = 37,
EMAIL_BOAT_MIKE = 38,
EMAIL_BOAT_FRANK = 39,
EMAIL_BOAT_TREVOR = 40,
EMAIL_PLANE_MIKE = 41,
EMAIL_PLANE_FRANK = 42,
EMAIL_PLANE_TREVOR = 43,
EMAIL_HELIPAD_MIKE = 56,
EMAIL_MARINA_MIKE = 57,
EMAIL_HANGAR_MIKE = 58,
EMAIL_HELIPAD_FRANK = 59,
EMAIL_HELIPAD_TREV = 60,
EMAIL_MARINA_FRANK = 61,
EMAIL_MARINA_TREV = 62,
EMAIL_HANGAR_FRANK = 63,
EMAIL_HANGAR_TREV = 64,
PROPMAN_TO_MIKE = 73,
PROPMAN_TO_FRANK = 74,
PROPMAN_TO_TREV = 75,
EMAIL_BAIL_BONDS_INFO1 = 76,
EMAIL_BAIL_BONDS_INFO2 = 77,
EMAIL_BAIL_BONDS_INFO3 = 78,
EMAIL_BAIL_BONDS_INFO4 = 79,
EMAIL_BAIL_BONDS_FINAL = 80,
EMAIL_BAIL_BONS_REMINDER_1 = 81,
EMAIL_BAIL_BONS_REMINDER_2 = 82,
EMAIL_BAIL_BONS_REMINDER_3 = 83,
EMAIL_BAIL_BONS_REMINDER_4 = 84
*/
//param 8 = String - Advert or branding TXD/Texure (both share same name, so only one string required) (256x64)
//param 9 = Boolean - Advert/branding at top of email (true) or advert at bottom of email (false)
ENDPROC
/*
FUNC TEXT_LABEL_63 RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(INT indice)
PRINTSTRING("RETRIEVE_EMAIL_STRING_TAG_BY_INDICE : ")
PRINTINT(indice)
PRINTNL()
IF(indice > -1)
TEXT_LABEL_63 s
s = "EMSTR_"
s += indice
PRINTSTRING(s)
PRINTNL()
RETURN s//TEXT_LABEL_LAUNDERER(s)
ENDIF
PRINTSTRING("Failed!")
PRINTNL()
TEXT_LABEL_63 fail = "FAIL"
RETURN fail
ENDFUNC
FUNC STRING RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(INT indice)
STRING s = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE_REAL(indice)
PRINTSTRING("Return check : ")
PRINTSTRING(s)
PRINTNL()
RETURN s
ENDFUNC
*/
FUNC BOOL CAN_A_THREAD_MAIL_FIRE_A_RESPONSE(EMAILER_ENUMS mailer,INT inbox_index)
IF NOT (ENUM_TO_INT(mailer) < TOTAL_INBOXES)
CPRINTLN(debug_email,"Email thread participant doesn't have an inbox, skipping snapshot\n")
RETURN FALSE
ENDIF
INT maillogindex = g_Inboxes[mailer].EmailsLogIndex[inbox_index]
INT mailthreadindex = g_Inboxes[mailer].ThreadIndex[inbox_index]
CDEBUG1LN(debug_email,"CAN_A_THREAD_MAIL_FIRE_A_RESPONSE: Found log/thread indices",maillogindex,",",mailthreadindex)
CDEBUG1LN(debug_email,"Active/ended:",g_AllEmailThreads[mailthreadindex].bActive,"/",g_AllEmailThreads[mailthreadindex].bEnded)
IF NOT (g_AllEmailThreads[mailthreadindex].bActive AND NOT g_AllEmailThreads[mailthreadindex].bEnded)
//thread is ended or inactive
RETURN FALSE
ENDIF
CDEBUG1LN(debug_email,"CAN_A_THREAD_MAIL_FIRE_A_RESPONSE: Thread still active")
IF NOT (maillogindex = (g_AllEmailThreads[mailthreadindex].iMailsInLog-1))//not the last mail
RETURN FALSE
ENDIF
CDEBUG1LN(debug_email,"CAN_A_THREAD_MAIL_FIRE_A_RESPONSE: index not already last in thread")
INT findmail = g_AllEmailThreads[mailthreadindex].ThreadEmailLog[g_AllEmailThreads[mailthreadindex].iMailsInLog-1]
CDEBUG1LN(debug_email,"CAN_A_THREAD_MAIL_FIRE_A_RESPONSE: Found mail ",findmail," with no. of responses: ",g_AllEmails[findmail].iResponses)
IF g_AllEmails[findmail].iResponses > 0
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC FILL_SCALEFORM_RESPONSES_FOR_EMAIL(SCALEFORM_INDEX sf, enumCharacterList character,INT selectedUIIndex)
//TODO move this data into the charsheet later
INT index = -1
SWITCH character
CASE CHAR_MICHAEL
index = ENUM_TO_INT(EMAILER_MICHAEL_DE_SANTO)
BREAK
CASE CHAR_FRANKLIN
index = ENUM_TO_INT(EMAILER_FRANKLIN) //this will get changed later
BREAK
CASE CHAR_TREVOR
index = ENUM_TO_INT(EMAILER_TREVOR_PHILIPS)
BREAK
ENDSWITCH
IF index = -1
EXIT
ENDIF
//g_bEmailSystemPaused = TRUE//pause the email system until we're out of the selected mail
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(sf,"SET_DATA_SLOT",
8,//param 1 = View state enum
TO_FLOAT(0),//param 2 = Slot number
1,// param 3 = Icon type 0 = unread, 1 = read, 2 = needs reply
2,//param 4 = Boolean - Has attachment icon
-1,//skipped
"BSCO_BRT_S",//param 5 = String - Senders email address
"BSCO_MAI_S"//param 6 = String - Subject
)
*/
//find the mail in the inbox selected
//because I flipped the indices for ordering reasons
//find the baseline zero mail
INT baselinemail = g_Inboxes[index].iTotalMails-1-selectedUIindex
WHILE baselinemail >= MAX_INBOX_LOGGED_MAILS_THREADS
baselinemail -= MAX_INBOX_LOGGED_MAILS_THREADS
ENDWHILE
CPRINTLN(DEBUG_EMAIL,"Baseline ",baselinemail," selected by scaleform ", selectedUIindex)
INT invval = baselinemail
IF NOT g_Inboxes[index].IsDynamic[invval]
INT threadindex = g_Inboxes[index].ThreadIndex[invval]
INT emaillogindex = g_Inboxes[index].EmailsLogIndex[invval]
INT firstmail = g_AllEmailThreads[threadindex].ThreadEmailLog[emaillogindex]
//now use the responses to fill out the list
IF (g_AllEmails[firstmail].iResponses = 0)
SCRIPT_ASSERT("FILL_SCALEFORM_RESPONSES_FOR_EMAIL: Attempting to populate scaleform response list for an email with no responses!")
EXIT
ENDIF
CPRINTLN(DEBUG_EMAIL,"Email has responses: ",g_AllEmails[firstmail].iResponses)
INT i = 0
//g_Inboxes[index].iTotalMails // use MAX_INBOX_LOGGED_MAILS_THREADS if greater
/*
BEGIN_SCALEFORM_MOVIE_METHOD(sf,"SET_DATA_SLOT_EMPTY")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(21)
END_SCALEFORM_MOVIE_METHOD()
*/
INT iresp = g_AllEmails[firstmail].iResponses
IF iresp > 1
iresp = 1
ENDIF
REPEAT iresp i
CPRINTLN(DEBUG_EMAIL,"populating responses!\n")
//RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[firstmail].Responses[i].iResponseNameTag)
INT maaail = g_AllEmails[firstmail].Responses[i].iResponseMail
TEXT_LABEL_63 send = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[maaail].iContentTag)
CPRINTLN(DEBUG_EMAIL,"<EMAIL PUBLIC> RESPONsE STRING: ",send)
//TEXT_LABEL subject = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[firstmail].Responses[i].iResponseNameTag)
/*
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(sf,"SET_DATA_SLOT",
21,//param 1 = View state enum
TO_FLOAT(i),//param 2 = Slot number
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM ,//skipped
send//param 5 = String - Senders email address
// subject//param 6 = String - Subject
) */
/*
BEGIN_SCALEFORM_MOVIE_METHOD(sf,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(21)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(send)
END_SCALEFORM_MOVIE_METHOD()
*/
// TEXT_LABEL_63 title = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[maaail].iTitleTag)
TEXT_LABEL_63 body = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[maaail].iContentTag)
CPRINTLN(DEBUG_EMAIL,"<EMAIL PUBLIC> BODY STRING: ",body)
BEGIN_SCALEFORM_MOVIE_METHOD(sf,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")/*GET_EMAILER_ADDRESS_TAG(g_AllEmails[maaail].eTo)*/
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")//GET_EMAILER_ADDRESS_TAG(g_AllEmails[maaail].eFrom))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("EM_RESPONSE_NEW")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(body)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_SIGNOFF_TAG(g_AllEmails[maaail].eFrom))
SET_EMAIL_BRANDING_ARGS_FROM_INDEX(maaail,g_AllEmails[maaail].eFrom)
END_SCALEFORM_MOVIE_METHOD()
ENDREPEAT
ELSE
SCRIPT_ASSERT("Dynamic email replies unimplemented.")
ENDIF
ENDPROC
FUNC INT EMAILS_IN_INBOX(enumCharacterList character)
INT index = -1
SWITCH character
CASE CHAR_MICHAEL
index = ENUM_TO_INT(EMAILER_MICHAEL_DE_SANTO)
BREAK
CASE CHAR_FRANKLIN
index = ENUM_TO_INT(EMAILER_FRANKLIN) //this will get changed later
BREAK
CASE CHAR_TREVOR
index = ENUM_TO_INT(EMAILER_TREVOR_PHILIPS)
BREAK
ENDSWITCH
RETURN g_Inboxes[index].iTotalMails
ENDFUNC
PROC BLOCKING_PREP_TEXTURE_FOR_SCALEFORM_MOVIE_EMAIL(enumCharacterList character,INT selectedUIindex)
INT index = -1
SWITCH character
CASE CHAR_MICHAEL
index = ENUM_TO_INT(EMAILER_MICHAEL_DE_SANTO)
BREAK
CASE CHAR_FRANKLIN
index = ENUM_TO_INT(EMAILER_FRANKLIN) //this will get changed later
BREAK
CASE CHAR_TREVOR
index = ENUM_TO_INT(EMAILER_TREVOR_PHILIPS)
BREAK
ENDSWITCH
IF index = -1
EXIT
ENDIF
//find the mail in the inbox selected
//because I flipped the indices for ordering reasons
//find the baseline zero mail
/*
INT baselinemail = g_Inboxes[index].iTotalMails-1
WHILE baselinemail > MAX_INBOX_LOGGED_MAILS_THREADS
baselinemail -= MAX_INBOX_LOGGED_MAILS_THREADS
ENDWHILE
//find the inverted value of selectedUIindex
INT invval = baselinemail - selectedUIindex
CPRINTLN(DEBUG_EMAIL,"Baseline ",baselinemail," selected by scaleform ", selectedUIindex)
WHILE invval >= MAX_INBOX_LOGGED_MAILS_THREADS
invval -= MAX_INBOX_LOGGED_MAILS_THREADS
ENDWHILE
*/
//count nth back from the latest
INT baselinemail = g_Inboxes[index].iTotalMails-1-selectedUIindex
WHILE baselinemail >= MAX_INBOX_LOGGED_MAILS_THREADS
baselinemail -= MAX_INBOX_LOGGED_MAILS_THREADS
ENDWHILE
CPRINTLN(DEBUG_EMAIL,"Baseline ",baselinemail," selected by scaleform ", selectedUIindex)
INT invval = baselinemail
CPRINTLN(DEBUG_EMAIL,"Startat: ",invval)
INT threadindex = g_Inboxes[index].ThreadIndex[invval]
INT emaillogindex = g_Inboxes[index].EmailsLogIndex[invval]
INT firstmail = -1
BOOL bIsDynamic = g_Inboxes[index].IsDynamic[invval]
IF NOT bIsDynamic
firstmail = g_AllEmailThreads[threadindex].ThreadEmailLog[emaillogindex]
ELSE
INT tind = -1
INT j = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS j
IF g_DynamicEmailThreadBuffers[j].registrationID = threadindex
tind = j
ENDIF
ENDREPEAT
IF tind = -1
CPRINTLN(DEBUG_EMAIL,"BLOCKING_PREP_TEXTURE_FOR_SCALEFORM_MOVIE_EMAIL: Dynamic thread ID not found in buffer\n")
EXIT
ENDIF
//emaillogindex
firstmail = ENUM_TO_INT(g_DynamicEmailThreadBuffers[tind].emails[emaillogindex].sourceEmail)
ENDIF
IF NOT GET_DOES_EMAIL_HAVE_ATTACHMENT_TEXTURE(firstmail)
CPRINTLN(DEBUG_EMAIL,"Email has no attachement texture")
EXIT
ENDIF
IF(g_iEmailWithLoadedTextureIndex != -1)
CPRINTLN(DEBUG_EMAIL,"Releasing old attachement texture")
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED(GET_EMAIL_ATTACHMENT_TEXTURE_DICTIONARY_NAME(g_iEmailWithLoadedTextureIndex))
ENDIF
g_iEmailWithLoadedTextureIndex = firstmail
CPRINTLN(DEBUG_EMAIL,"Attempting to load texture dictionary (",GET_EMAIL_ATTACHMENT_TEXTURE_DICTIONARY_NAME(firstmail),") for email")
REQUEST_STREAMED_TEXTURE_DICT(GET_EMAIL_ATTACHMENT_TEXTURE_DICTIONARY_NAME(firstmail))
WHILE NOT HAS_STREAMED_TEXTURE_DICT_LOADED(GET_EMAIL_ATTACHMENT_TEXTURE_DICTIONARY_NAME(firstmail))
CPRINTLN(DEBUG_EMAIL,"Waiting for email (",firstmail ,") texture dictionary(",GET_EMAIL_ATTACHMENT_TEXTURE_DICTIONARY_NAME(firstmail),") to finish loading")
WAIT(100)
ENDWHILE
ENDPROC
FUNC INT GET_THREAD_AND_EMAIL_INDICES_FROM_INBOX(INT inboxIndex, INT selectedUIindex, INT &threadindex, INT &emaillogindex, BOOL &bRespondedTo)
//find the mail in the inbox selected
//because I flipped the indices for ordering reasons
//find the baseline zero mail
INT baselinemail = g_Inboxes[inboxIndex].iTotalMails-1-selectedUIindex
WHILE baselinemail >= MAX_INBOX_LOGGED_MAILS_THREADS
baselinemail -= MAX_INBOX_LOGGED_MAILS_THREADS
ENDWHILE
CPRINTLN(DEBUG_EMAIL,"Baseline ",baselinemail," selected by scaleform ", selectedUIindex)
INT invval = baselinemail
CPRINTLN(DEBUG_EMAIL,"GET_THREAD_AND_EMAIL_INDICES_FROM_INBOX : Startat: ",invval)
threadindex = g_Inboxes[inboxIndex].ThreadIndex[invval]
emaillogindex = g_Inboxes[inboxIndex].EmailsLogIndex[invval]
bRespondedTo = g_Inboxes[inboxIndex].HasFiredResponse[invval]
CPRINTLN(DEBUG_EMAIL,"GET_THREAD_AND_EMAIL_INDICES_FROM_INBOX : Thread and email value looked up : ",threadindex," ",emaillogindex)
RETURN invval
ENDFUNC
FUNC BOOL DOES_INBOX_MAIL_HAVE_URL(enumCharacterList character, INT selectedUIindex)
CPRINTLN(DEBUG_EMAIL,"DOES_INBOX_MAIL_HAVE_URL : uiIndex " ,selectedUIindex)
INT index = -1
SWITCH character
CASE CHAR_MICHAEL
index = ENUM_TO_INT(EMAILER_MICHAEL_DE_SANTO)
BREAK
CASE CHAR_FRANKLIN
index = ENUM_TO_INT(EMAILER_FRANKLIN) //this will get changed later
BREAK
CASE CHAR_TREVOR
index = ENUM_TO_INT(EMAILER_TREVOR_PHILIPS)
BREAK
ENDSWITCH
IF index = -1
CPRINTLN(DEBUG_EMAIL,"DOES_INBOX_MAIL_HAVE_URL : no, invalid char index")
RETURN FALSE
ENDIF
INT threadindex, emaillogindex
BOOL bResponded
INT invval = GET_THREAD_AND_EMAIL_INDICES_FROM_INBOX(index, selectedUIindex, threadindex, emaillogindex,bResponded)
bResponded = bResponded
INT firstmail = -1
BOOL bIsDynamic = g_Inboxes[index].IsDynamic[invval]
IF NOT bIsDynamic
firstmail = g_AllEmailThreads[threadindex].ThreadEmailLog[emaillogindex]
ELSE
INT tind = -1
INT j = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS j
IF g_DynamicEmailThreadBuffers[j].registrationID = threadindex
tind = j
ENDIF
ENDREPEAT
firstmail = ENUM_TO_INT(g_DynamicEmailThreadBuffers[tind].emails[emaillogindex].sourceEmail)
ENDIF
RETURN GET_DOES_EMAIL_HAVE_URL(firstmail)
ENDFUNC
FUNC STRING GET_EMAIL_IN_INBOX_URL(enumCharacterList character, INT selectedUIindex)
CPRINTLN(DEBUG_EMAIL,"GET_EMAIL_IN_INBOX_URL : uiIndex " ,selectedUIindex)
INT index = -1
SWITCH character
CASE CHAR_MICHAEL
index = ENUM_TO_INT(EMAILER_MICHAEL_DE_SANTO)
BREAK
CASE CHAR_FRANKLIN
index = ENUM_TO_INT(EMAILER_FRANKLIN) //this will get changed later
BREAK
CASE CHAR_TREVOR
index = ENUM_TO_INT(EMAILER_TREVOR_PHILIPS)
BREAK
ENDSWITCH
IF index = -1
CPRINTLN(DEBUG_EMAIL,"GET_EMAIL_IN_INBOX_URL : no, invalid char index")
RETURN ""
ENDIF
BOOL bResponded
INT threadindex, emaillogindex
INT invval = GET_THREAD_AND_EMAIL_INDICES_FROM_INBOX(index, selectedUIindex, threadindex, emaillogindex,bResponded)
bResponded = bResponded
INT firstmail = -1
BOOL bIsDynamic = g_Inboxes[index].IsDynamic[invval]
IF NOT bIsDynamic
firstmail = g_AllEmailThreads[threadindex].ThreadEmailLog[emaillogindex]
ELSE
INT tind = -1
INT j = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS j
IF g_DynamicEmailThreadBuffers[j].registrationID = threadindex
tind = j
ENDIF
ENDREPEAT
firstmail = ENUM_TO_INT(g_DynamicEmailThreadBuffers[tind].emails[emaillogindex].sourceEmail)
ENDIF
RETURN GET_EMAIL_URL_STRING(firstmail)
ENDFUNC
FUNC EMAILER_ENUMS GET_CORRECT_EMAIL_TO_FIELD(enumCharacterList CurrentChar, EMAILER_ENUMS emailTo)
IF emailTo = EMAILER_MICHAEL_DE_SANTO
IF CurrentChar = CHAR_FRANKLIN
RETURN EMAILER_FRANKLIN
ELIF CurrentChar = CHAR_TREVOR
RETURN EMAILER_TREVOR_PHILIPS
ENDIF
ENDIF
RETURN emailTO
ENDFUNC
PROC FILL_SCALEFORM_EMAIL_IN_INBOX_FOR_PED(SCALEFORM_INDEX sf, enumCharacterList character,INT selectedUIindex)
BEGIN_SCALEFORM_MOVIE_METHOD(sf,"SET_DATA_SLOT_EMPTY")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9)
END_SCALEFORM_MOVIE_METHOD()
CPRINTLN(DEBUG_EMAIL,"Attempting to fill out inbox mail: ",selectedUIindex)
//TODO move this data into the charsheet later
INT index = -1
SWITCH character
CASE CHAR_MICHAEL
index = ENUM_TO_INT(EMAILER_MICHAEL_DE_SANTO)
BREAK
CASE CHAR_FRANKLIN
index = ENUM_TO_INT(EMAILER_FRANKLIN) //this will get changed later
BREAK
CASE CHAR_TREVOR
index = ENUM_TO_INT(EMAILER_TREVOR_PHILIPS)
BREAK
ENDSWITCH
IF index = -1
EXIT
ENDIF
//g_bEmailSystemPaused = TRUE//pause because we're in the email
/*
To create an individual Email
Emails are threaded and displayed in a scrolling html text field
SET_DATA_SLOT
* param 1 = View state enum
* param 2 = Slot number
* param 3 = String - To address
* param 4 = String - From address
* param 5 = String - Subject title
* param 6 = String - Message body
* param 7 = String - Sign off
SET_DATA_SLOT(9, 0, "TO: player_1@gtav.com", "FROM: frnkln69@eyefind.info", "Be there at 5.30 sharp", “Cheers
Franklin”)
SET_DATA_SLOT(9, 1, "TO: frnkln69@eyefind.info", "FROM: player_1@gtav.com", "Ok, See you tomorrow, what time?", “player_1”)
DISPLAY_VIEW(9)
*/
/*
//find the mail in the inbox selected
//because I flipped the indices for ordering reasons
//find the baseline zero mail
INT baselinemail = g_Inboxes[index].iTotalMails-1-selectedUIindex
WHILE baselinemail >= MAX_INBOX_LOGGED_MAILS_THREADS
baselinemail -= MAX_INBOX_LOGGED_MAILS_THREADS
ENDWHILE
CPRINTLN(DEBUG_EMAIL,"Baseline ",baselinemail," selected by scaleform ", selectedUIindex)
INT invval = baselinemail
PRINTSTRING("Startat: ")
PRINTINT(invval)
PRINTNL()
INT threadindex = g_Inboxes[index].ThreadIndex[invval]
INT emaillogindex = g_Inboxes[index].EmailsLogIndex[invval]
PRINTSTRING("Thread and email value looked up : ")
PRINTINT(threadindex)
PRINTSTRING(" ")
PRINTINT(emaillogindex)
PRINTNL()
*/
BOOL bResponded
INT threadindex, emaillogindex
INT invval = GET_THREAD_AND_EMAIL_INDICES_FROM_INBOX(index, selectedUIindex, threadindex, emaillogindex,bResponded)
BOOL bIsDynamic = g_Inboxes[index].IsDynamic[invval]
//its been viewed! hooray
IF NOT g_Inboxes[index].HasBeenViewed[invval]
UPDATE_EMAILS_READ_FOR_CURRENT_PLAYER(-1)
ENDIF
g_Inboxes[index].HasBeenViewed[invval] = TRUE
///REMOVE THIS
// g_Inboxes[index].bDelete[invval] = TRUE
//REMOVE THIS
IF NOT bIsDynamic
INT firstmail = g_AllEmailThreads[threadindex].ThreadEmailLog[emaillogindex]
//check if the email has picture content
CPRINTLN(DEBUG_EMAIL,"Uploading contents for g_AllEmails index: ",firstmail)
//GET_EMAILER_ADDRESS_TAG//GET_EMAILER_NAME_TAG//GET_EMAILER_SIGNOFF_TAG
//find the thread
TEXT_LABEL_63 title = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[firstmail].iTitleTag)
TEXT_LABEL_63 body = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[firstmail].iContentTag)
/*
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(sf,"SET_DATA_SLOT",
9,//* param 1 = View state enum
TO_FLOAT(0),//* param 2 = Slot number
INVALID_SCALEFORM_PARAM ,
INVALID_SCALEFORM_PARAM ,
INVALID_SCALEFORM_PARAM ,
GET_EMAILER_ADDRESS_TAG(g_AllEmails[firstmail].eTo),//* param 3 = String - To address
GET_EMAILER_ADDRESS_TAG(g_AllEmails[firstmail].eFrom),//* param 4 = String - From address
title,//* param 5 = String - Subject title
body,//* param 6 = String - Message body
GET_EMAILER_SIGNOFF_TAG(g_AllEmails[firstmail].eFrom)//* param 7 = String - Sign off
) */
BEGIN_SCALEFORM_MOVIE_METHOD(sf,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_ADDRESS_TAG(g_AllEmails[firstmail].eTo))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_ADDRESS_TAG(g_AllEmails[firstmail].eFrom))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(title)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(body)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_SIGNOFF_TAG(g_AllEmails[firstmail].eFrom))
SET_EMAIL_BRANDING_ARGS_FROM_INDEX(firstmail,g_AllEmails[firstmail].eFrom)
END_SCALEFORM_MOVIE_METHOD()
//hide select if no responses
IF g_AllEmails[firstmail].iResponses = 0
CONFIGURE_EMAIL_SOFT_KEY_SELECT(FALSE)
ELSE
//If responded of the thread has alread ended
IF bResponded OR NOT CAN_A_THREAD_MAIL_FIRE_A_RESPONSE(INT_TO_ENUM(EMAILER_ENUMS,index),invval)
CONFIGURE_EMAIL_SOFT_KEY_SELECT(FALSE)
ELSE
CONFIGURE_EMAIL_SOFT_KEY_SELECT(TRUE)
ENDIF
ENDIF
// read in all the previous thread mails
CPRINTLN(DEBUG_EMAIL,"Mails in log: ",g_AllEmailThreads[threadindex].iMailsInLog)
IF g_AllEmailThreads[threadindex].iMailsInLog > 1
//start at emaillogindex and count down to zero
//g_AllEmailThreads[threadindex].iMailsInLog //the added mails
//
INT times = emaillogindex
INT countback = emaillogindex-1
INT i = 0
REPEAT times i
CPRINTLN(DEBUG_EMAIL,"Previous response : ",i)
firstmail = g_AllEmailThreads[threadindex].ThreadEmailLog[countback]
title = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[firstmail].iTitleTag)
body = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[firstmail].iContentTag)
//Set the correct emailee address based on playing character
EMAILER_ENUMS emailTo = GET_CORRECT_EMAIL_TO_FIELD(character, g_AllEmails[firstmail].eTo)
/*
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(sf,"SET_DATA_SLOT",
9,//* param 1 = View state enum
TO_FLOAT(i+1),//* param 2 = Slot number
INVALID_SCALEFORM_PARAM ,
INVALID_SCALEFORM_PARAM ,
INVALID_SCALEFORM_PARAM ,
GET_EMAILER_ADDRESS_TAG(g_AllEmails[firstmail].eTo),//* param 3 = String - To address
GET_EMAILER_ADDRESS_TAG(g_AllEmails[firstmail].eFrom),//* param 4 = String - From address
title,//* param 5 = String - Subject title
body,//* param 6 = String - Message body
GET_EMAILER_SIGNOFF_TAG(g_AllEmails[firstmail].eFrom)//* param 7 = String - Sign off
) */
BEGIN_SCALEFORM_MOVIE_METHOD(sf,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i+1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_ADDRESS_TAG(emailTo))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_ADDRESS_TAG(g_AllEmails[firstmail].eFrom))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(title)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(body)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_SIGNOFF_TAG(g_AllEmails[firstmail].eFrom))
SET_EMAIL_BRANDING_ARGS_FROM_INDEX(firstmail,g_AllEmails[firstmail].eFrom)
END_SCALEFORM_MOVIE_METHOD()
CPRINTLN(DEBUG_EMAIL,"Countback : ",countback)
CPRINTLN(DEBUG_EMAIL,"Mail : ",firstmail)
countback--
ENDREPEAT
ENDIF
ELSE//dynamic email
INT tind = -1
INT j = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS j
IF g_DynamicEmailThreadBuffers[j].registrationID = threadindex
tind = j
ENDIF
ENDREPEAT
IF tind = -1
CPRINTLN(DEBUG_EMAIL,"FILL_SCALEFORM_EMAIL_IN_INBOX_FOR_PED: Dynamic thread ID not found in buffer\n")
EXIT
ELSE
//emaillogindex
INT gmail = ENUM_TO_INT(g_DynamicEmailThreadBuffers[tind].emails[emaillogindex].sourceEmail)
EMAIL_MESSAGE_ENUMS gmailEnum = g_DynamicEmailThreadBuffers[tind].emails[emaillogindex].sourceEmail
TEXT_LABEL_63 title = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[gmail].iTitleTag)
TEXT_LABEL_63 body = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[gmail].iContentTag)
IF g_DynamicEmailThreadBuffers[tind].emails[emaillogindex].bOverrideContent
body = g_DynamicEmailThreadBuffers[tind].emails[emaillogindex].content
CPRINTLN(DEBUG_EMAIL,"FILL_SCALEFORM_EMAIL_IN_INBOX_FOR_PED: override content\n")
ELSE
CPRINTLN(DEBUG_EMAIL,"FILL_SCALEFORM_EMAIL_IN_INBOX_FOR_PED: Not override content\n")
ENDIF
IF g_AllEmails[gmail].iResponses = 0
CONFIGURE_EMAIL_SOFT_KEY_SELECT(FALSE)
ELSE
IF bResponded
CONFIGURE_EMAIL_SOFT_KEY_SELECT(FALSE)
ELSE
CONFIGURE_EMAIL_SOFT_KEY_SELECT(TRUE)
ENDIF
ENDIF
BOOL bAlreadyDoneContent = FALSE
bAlreadyDoneContent = PROPERTY_EMAIL_CALLBACK(sf, g_DynamicEmailThreadBuffers[tind].registrationID, emaillogindex , gmailEnum)
IF !bAlreadyDoneContent
BEGIN_SCALEFORM_MOVIE_METHOD(sf, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_ADDRESS_TAG(g_AllEmails[gmail].eTo))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_ADDRESS_TAG(g_AllEmails[gmail].eFrom))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(title)
//IF !bAlreadyDoneContent
IF g_DynamicEmailThreadBuffers[tind].emails[emaillogindex].iOverrideAdditional > 0
CPRINTLN(DEBUG_EMAIL,"FILL_SCALEFORM_EMAIL_IN_INBOX_FOR_PED: substrng : " , body)
BEGIN_TEXT_COMMAND_SCALEFORM_STRING(body)
INT rep = 0
REPEAT g_DynamicEmailThreadBuffers[tind].emails[emaillogindex].iOverrideAdditional rep
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_DynamicEmailThreadBuffers[tind].emails[emaillogindex].additional[rep])
ENDREPEAT
END_TEXT_COMMAND_SCALEFORM_STRING()
ELSE
//no substrings
CPRINTLN(DEBUG_EMAIL,"FILL_SCALEFORM_EMAIL_IN_INBOX_FOR_PED: no substrings\n")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(body)
ENDIF
//ENDIF
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_SIGNOFF_TAG(g_AllEmails[gmail].eFrom))
SET_EMAIL_BRANDING_ARGS_FROM_INDEX(gmail,g_AllEmails[gmail].eFrom) // ADDING THE ABILITY TO HAVE AN EMAIL AD BANNER IN A DYNAMIC EMAIL - CC
END_SCALEFORM_MOVIE_METHOD()
CPRINTLN(DEBUG_EMAIL,"FILL_SCALEFORM_EMAIL_IN_INBOX_FOR_PED: override upload complete\n")
ENDIF
//ENDIF
ENDIF
ENDIF
ENDPROC
FUNC STRING GET_TXD_STRING_FROM_EMAILER(EMAILER_ENUMS fromchar, BOOL &foundTxtDict)
foundTxtDict = TRUE
SWITCH fromchar
CASE EMAILER_MICHAEL_DE_SANTO
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_MICHAEL].picture)
CASE EMAILER_FRANKLIN
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_FRANKLIN].picture)
CASE EMAILER_TREVOR_PHILIPS
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_TREVOR].picture)
CASE EMAILER_LESTER
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_LESTER].picture)
CASE MARNIE_CULT
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_MARNIE].picture)
CASE EMAILER_MAUDE
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_MAUDE].picture)
CASE EMAILER_JIMMY_DE_SANTO
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_JIMMY].picture)
CASE EMAILER_AMMUNATION
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_AMMUNATION].picture)
CASE EMAILER_TOURIST_BOARD
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_LS_TOURIST_BOARD].picture)
CASE EMAILER_LSC
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_LS_CUSTOMS].picture)
CASE EMAILER_EVENTS_RACE
RETURN "CHAR_CARSITE2"
CASE EMAILER_DOCK_TEASE
RETURN "CHAR_BOATSITE"
CASE EMAILER_BANK_MAZE
RETURN "CHAR_BANK_MAZE"
CASE EMAILER_BANK_FLEECA
RETURN "CHAR_BANK_FLEECA"
CASE EMAILER_BANK_BOL
RETURN "CHAR_BANK_BOL"
CASE EMAILER_PROPERTY_MANAGEMENT
RETURN "CHAR_MINOTAUR"
CASE EMAILER_TRACEY_DE_SANTO
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_TRACEY].picture)
CASE EMAILER_DAVE_NORTON
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_DAVE].picture)
CASE EMAILER_AMANDA_DE_SANTA
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_AMANDA].picture)
CASE EMAILER_NERVOUS_RON
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_RON].picture)
CASE EMAILER_TANISHA_MARKS
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_TANISHA].picture)
CASE EMAILER_DENISE
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_DENISE].picture)
CASE EMAILER_LAMAR_DAVIES
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_LAMAR].picture)
CASE EMAILER_PATRICA_MADRAZZO
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PATRICIA].picture)
CASE EMAILER_SAEEDAKADAM
//Steve T. Saeeda's enum entry is only used here so I'm reusing her for something else, so have a hardcoded reference to her picture label instead:
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION("CELL_E_381")
CASE EMAILER_NIGEL
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_NIGEL].picture)
CASE EMAILER_CULT_STORE
RETURN "CHAR_EPSILON"
CASE EMAILER_MILITARY_SITE
RETURN "CHAR_MILSITE"
CASE EMAILER_CAR_SITE
RETURN "CHAR_CARSITE"
CASE EMAILER_BOAT_SITE
RETURN "CHAR_BOATSITE"
CASE EMAILER_PLANE_SITE
RETURN "CHAR_PLANESITE"
CASE EMAILER_DR_FRIEDLANDER
RETURN "CHAR_DR_FRIEDLANDER"
CASE EMAILER_AUTO_SITE
RETURN "CHAR_CARSITE2"
CASE EMAILER_BIKE_SITE
RETURN "CHAR_BIKESITE"
CASE EMAILER_PRO_HOOKIES
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_BAR_HOOKIES].picture)
CASE EMAILER_PRO_TOWING
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_TOWING_IMPOUND].picture)
CASE EMAILER_PRO_TAXI
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_TAXI_LOT].picture)
CASE EMAILER_PRO_ARMS
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_ARMS_TRAFFICKING].picture)
CASE EMAILER_PRO_SONAR
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_SONAR_COLLECTIONS].picture)
CASE EMAILER_PRO_CAR_MOD
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_CAR_MOD_SHOP].picture)
CASE EMAILER_PRO_CIN_VINEWOOD
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_CINEMA_VINEWOOD].picture)
CASE EMAILER_PRO_CIN_DOWNTOWN
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_CINEMA_DOWNTOWN].picture)
CASE EMAILER_PRO_CIN_MORNINGWOOD
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_CINEMA_MORNINGWOOD].picture)
CASE EMAILER_PRO_GOLF_CLUB
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_GOLF_CLUB].picture)
CASE EMAILER_PRO_CAR_SCRAP
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_CAR_SCRAP_YARD].picture)
CASE EMAILER_PRO_WEED
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_WEED_SHOP].picture)
CASE EMAILER_PRO_TEQUILALA
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_BAR_TEQUILALA].picture)
CASE EMAILER_PRO_PITCHERS
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_BAR_PITCHERS].picture)
CASE EMAILER_PRO_HEN_HOUSE
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(g_sCharacterSheetAll[CHAR_PROPERTY_BAR_HEN_HOUSE].picture)
ENDSWITCH
foundTxtDict = FALSE
RETURN "ERROR!"
ENDFUNC
PROC EMAIL_FEED_ID_BUFFER_PURGE()
INT i = 0
REPEAT MAX_EMAIL_FEED_BUFFER_ENTRIES i
IF g_iEmailFeedBuffer[i] != -1
CPRINTLN(DEBUG_EMAIL,"EMAIL_FEED_ID_BUFFER_PURGE: removing index ",i, " with feed id ", g_iEmailFeedBuffer[i])
THEFEED_REMOVE_ITEM(g_iEmailFeedBuffer[i])
g_iEmailFeedBuffer[i] = -1
ENDIF
ENDREPEAT
g_iEmailfeedBufferCaret = 0
ENDPROC
PROC EMAIL_FEED_ID_BUFFER_PUSH(INT pedantry)
CPRINTLN(DEBUG_EMAIL,"EMAIL_FEED_ID_BUFFER_PUSH: logged feed ID : ", pedantry)
g_iEmailFeedBuffer[g_iEmailFeedBufferCaret] = pedantry
//Added by Steve T for d-pad up auto selection work.
g_Last_App_ActivatableType = ACT_APP_EMAIL
g_Last_App_ActivatableFeedID = pedantry
++g_iEmailFeedBufferCaret
IF g_iEmailFeedBufferCaret = MAX_EMAIL_FEED_BUFFER_ENTRIES
g_iEmailFeedBufferCaret = 0
ENDIF
ENDPROC
PROC FEEDIFY_EMAIL_MESSAGE( enumCharacterList forChar,
EMAILER_ENUMS fromchar,
EMAIL_MESSAGE_ENUMS mail,
STRING fstr,
STRING ss1 = NULL,
STRING ss2 = NULL,
STRING ss3 = NULL,
STRING ss4 = NULL,
STRING ss5 = NULL,
STRING ss6 = NULL, // - CC
STRING ss7 = NULL,
STRING ss8 = NULL,
STRING ss9 = NULL,
STRING ss10 = NULL) // - CC
CPRINTLN(DEBUG_EMAIL, "<EMAIL_FEED> Creating feed message for email.")
IF IS_CUTSCENE_PLAYING()
CPRINTLN(DEBUG_EMAIL, "<EMAIL_FEED> Failed. A cutscene was playing.")
EXIT
ENDIF
enumCharacterList currPlayer= GET_CURRENT_PLAYER_PED_ENUM()
BOOL bFoundTextureDictionary = FALSE
TEXT_LABEL_63 txdict = GET_TXD_STRING_FROM_EMAILER(fromchar, bFoundTextureDictionary)
IF currplayer = forChar
CPRINTLN(DEBUG_EMAIL, "<EMAIL_FEED> Player is the correct charater to receive feed.")
SWITCH mail
CASE PROPMAN_TO_MIKE
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Creating default feed post to Michael.")
BEGIN_TEXT_COMMAND_THEFEED_POST("PROPR_INCEMAIL1")
BREAK
CASE PROPMAN_TO_FRANK
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Creating default feed post to Franklin.")
BEGIN_TEXT_COMMAND_THEFEED_POST("PROPR_INCEMAIL3")
BREAK
CASE PROPMAN_TO_TREV
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> SCreating default feed post to Trevor.")
BEGIN_TEXT_COMMAND_THEFEED_POST("PROPR_INCEMAIL2")
BREAK
DEFAULT
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Starting feed post.")
BEGIN_TEXT_COMMAND_THEFEED_POST(fstr)
IF !IS_STRING_NULL_OR_EMPTY(ss1)
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Adding substring 1.")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss1)
ENDIF
IF !IS_STRING_NULL_OR_EMPTY(ss2)
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Adding substring 2.")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss2)
ENDIF
IF !IS_STRING_NULL_OR_EMPTY(ss3)
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Adding substring 3.")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss3)
ENDIF
IF !IS_STRING_NULL_OR_EMPTY(ss4)
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Adding substring 4.")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss4)
ENDIF
IF !IS_STRING_NULL_OR_EMPTY(ss5)
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Adding substring 5.")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss5)
ENDIF
IF !IS_STRING_NULL_OR_EMPTY(ss6)
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Adding substring 6.")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss6)
ENDIF
IF !IS_STRING_NULL_OR_EMPTY(ss7)
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Adding substring 7.")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss7)
ENDIF
IF !IS_STRING_NULL_OR_EMPTY(ss8)
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Adding substring 8.")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss8)
ENDIF
IF !IS_STRING_NULL_OR_EMPTY(ss9)
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Adding substring 9.")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss9)
ENDIF
IF !IS_STRING_NULL_OR_EMPTY(ss10)
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Adding substring 10.")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss10)
ENDIF
BREAK
ENDSWITCH
IF bFoundTextureDictionary
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Ending feed post with custom texture dictionary.")
EMAIL_FEED_ID_BUFFER_PUSH(END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT(txdict, txdict, FALSE, TEXT_ICON_EMAIL, GET_FILENAME_FOR_AUDIO_CONVERSATION(GET_EMAILER_NAME_TAG(fromchar))))
ELSE
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Ending feed post with default texture dictionary.")
EMAIL_FEED_ID_BUFFER_PUSH(END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT("CHAR_DEFAULT", "CHAR_DEFAULT", FALSE, TEXT_ICON_EMAIL, GET_FILENAME_FOR_AUDIO_CONVERSATION(GET_EMAILER_NAME_TAG(fromchar))))
ENDIF
SWITCH g_Cellphone.PhoneOwner
CASE CHAR_MICHAEL
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Playing Michael feed sound.")
g_Owner_Soundset = "Phone_SoundSet_Michael"
++g_iUnreadEmailsSP0
IF g_iUnreadEmailsSP0 > MAX_INBOX_LOGGED_MAILS_THREADS
g_iUnreadEmailsSP0 = MAX_INBOX_LOGGED_MAILS_THREADS
ENDIF
BREAK
CASE CHAR_TREVOR
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Playing Trevor feed sound.")
g_Owner_Soundset = "Phone_SoundSet_Trevor"
++g_iUnreadEmailsSP2
IF g_iUnreadEmailsSP2 > MAX_INBOX_LOGGED_MAILS_THREADS
g_iUnreadEmailsSP2 = MAX_INBOX_LOGGED_MAILS_THREADS
ENDIF
BREAK
CASE CHAR_FRANKLIN
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Playing Franklin feed sound.")
g_Owner_Soundset = "Phone_SoundSet_Franklin"
++g_iUnreadEmailsSP1
IF g_iUnreadEmailsSP1 > MAX_INBOX_LOGGED_MAILS_THREADS
g_iUnreadEmailsSP1 = MAX_INBOX_LOGGED_MAILS_THREADS
ENDIF
BREAK
DEFAULT
CDEBUG1LN(DEBUG_EMAIL, "<EMAIL_FEED> Playing default feed sound.")
g_Owner_Soundset = "Phone_SoundSet_Default"
BREAK
ENDSWITCH
PLAY_SOUND_FRONTEND (-1, "Notification", g_Owner_Soundset)
ELSE
CPRINTLN(DEBUG_EMAIL, "<EMAIL_FEED> Failed. Player was the wrong character.")
ENDIF
ENDPROC
/// PURPOSE:
/// log the current thread state as recived to the inbox of the given mailer
/// PARAMS:
///// mailer - the reciver or CC'd
/// thread_index -
PROC LOG_EMAIL_THREAD_SNAPSHOT_TO_INBOX(EMAILER_ENUMS mailer,INT thread_index, BOOL dynamic = FALSE, BOOL delayFeedification = FALSE, BOOL bNoFeedMessage = FALSE)
IF NOT (ENUM_TO_INT(mailer) < TOTAL_INBOXES)
CPRINTLN(DEBUG_EMAIL, "Email thread participant doesn't have an inbox, skipping snapshot.")
EXIT
ENDIF
INT indextostoreto = -1
EMAILER_ENUMS frommailer
EMAIL_MESSAGE_ENUMS mailenum
TEXT_LABEL_63 emcotag = "UNSET"
IF NOT dynamic
CPRINTLN(DEBUG_EMAIL, "Logging email thread to an inbox - Static version.")
INT iMailLogIndex = g_AllEmailThreads[thread_index].iMailsInLog-1
IF iMailLogIndex < 0
CPRINTLN(DEBUG_EMAIL, "Failed. Thread has no emails in log.")
EXIT
ENDIF
INT emailindex = g_AllEmailThreads[thread_index].ThreadEmailLog[iMailLogIndex]
mailenum = INT_TO_ENUM(EMAIL_MESSAGE_ENUMS,emailindex)
emcotag = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[emailindex].iContentTag)
CPRINTLN(DEBUG_EMAIL, "Static - emailindex ", emailindex ," : mailenum ", mailenum," : contag ", emcotag, ".")
IF g_AllEmails[emailindex].eFrom = mailer AND (NOT (g_AllEmails[emailindex].eTo = mailer))
CPRINTLN(DEBUG_EMAIL, "Email snapshot filtered.")
EXIT // this is an email sent by this emailer and not to themselves, don't put it in this inbox
ENDIF
frommailer = g_AllEmails[emailindex].eFrom
//remember to rollover when max index is hit
indextostoreto = g_Inboxes[mailer].iTotalMails
//
BOOL rollover = FALSE
WHILE indextostoreto >= MAX_INBOX_LOGGED_MAILS_THREADS
indextostoreto -= MAX_INBOX_LOGGED_MAILS_THREADS
rollover = TRUE
ENDWHILE
IF rollover
IF NOT g_Inboxes[mailer].HasBeenViewed[indextostoreto]
//If this is a reused index and has not been viewed, then decrement emails count
SWITCH mailer
CASE EMAILER_MICHAEL_DE_SANTO
g_iUnreadEmailsSP0--
IF g_iUnreadEmailsSP0 < 0
g_iUnreadEmailsSP0 = 0
ENDIF
BREAK
CASE EMAILER_FRANKLIN
g_iUnreadEmailsSP1--
IF g_iUnreadEmailsSP1 < 0
g_iUnreadEmailsSP1 = 0
ENDIF
BREAK
CASE EMAILER_TREVOR_PHILIPS
g_iUnreadEmailsSP2--
IF g_iUnreadEmailsSP2 < 0
g_iUnreadEmailsSP2 = 0
ENDIF
BREAK
ENDSWITCH
ENDIF
ENDIF
g_Inboxes[mailer].ThreadIndex[indextostoreto] = thread_index
g_Inboxes[mailer].EmailsLogIndex[indextostoreto] = (iMailLogIndex)
g_Inboxes[mailer].HasFiredResponse[indextostoreto] = FALSE
g_Inboxes[mailer].IsDynamic[indextostoreto] = FALSE
g_Inboxes[mailer].HasBeenViewed[indextostoreto] = FALSE
++g_Inboxes[mailer].iTotalMails
ELSE//Dynamic snapshot
CPRINTLN(DEBUG_EMAIL, "Logging email thread to an inbox - Dynamic version.")
//remember to rollover when max index is hit
indextostoreto = g_Inboxes[mailer].iTotalMails
BOOL rollover = FALSE
WHILE indextostoreto >= MAX_INBOX_LOGGED_MAILS_THREADS
indextostoreto -= MAX_INBOX_LOGGED_MAILS_THREADS
rollover = TRUE
ENDWHILE
IF rollover
IF NOT g_Inboxes[mailer].HasBeenViewed[indextostoreto]
//If this is a reused index and has not been viewed, then decrement emails count
SWITCH mailer
CASE EMAILER_MICHAEL_DE_SANTO
g_iUnreadEmailsSP0--
IF g_iUnreadEmailsSP0 < 0
g_iUnreadEmailsSP0 = 0
ENDIF
BREAK
CASE EMAILER_FRANKLIN
g_iUnreadEmailsSP1--
IF g_iUnreadEmailsSP1 < 0
g_iUnreadEmailsSP1 = 0
ENDIF
BREAK
CASE EMAILER_TREVOR_PHILIPS
g_iUnreadEmailsSP2--
IF g_iUnreadEmailsSP2 < 0
g_iUnreadEmailsSP2 = 0
ENDIF
BREAK
ENDSWITCH
ENDIF
ENDIF
//check that this thread is still in at least one of the dynamic buffers
INT dynamicFoundAt = -1
INT i = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS i
IF g_DynamicEmailThreadBuffers[i].registrationID = thread_index
AND g_DynamicEmailThreadBuffers[i].iProgress > 0
dynamicFoundAt = i
ENDIF
ENDREPEAT
//thread not valid anymore, cannot snapshot
IF dynamicFoundAt = -1
CPRINTLN(DEBUG_EMAIL, "Failed to find dynamic thread buffer. Dynamic snapshot failed.")
EXIT
ENDIF
CPRINTLN(DEBUG_EMAIL, "Attempting snapshot of dynamic thread ", dynamicFoundAt, " at inbox index ", ENUM_TO_INT(mailer), " with progress ", ENUM_TO_INT(g_DynamicEmailThreadBuffers[dynamicFoundAt].iProgress), ".")
//thread index now applies to g_DynamicEmailBuffers reg index
g_Inboxes[mailer].ThreadIndex[indextostoreto] = g_DynamicEmailThreadBuffers[dynamicFoundAt].registrationID
g_Inboxes[mailer].EmailsLogIndex[indextostoreto] = g_DynamicEmailThreadBuffers[dynamicFoundAt].iProgress-1
g_Inboxes[mailer].HasFiredResponse[indextostoreto] = FALSE
g_Inboxes[mailer].IsDynamic[indextostoreto] = TRUE
g_Inboxes[mailer].HasBeenViewed[indextostoreto] = FALSE
//also remember to set dynamic bool
++g_Inboxes[mailer].iTotalMails
INT s = g_Inboxes[mailer].EmailsLogIndex[indextostoreto]
EMAIL_MESSAGE_ENUMS fromail = g_DynamicEmailThreadBuffers[dynamicFoundAt].emails[s].sourceEmail
mailenum = fromail
frommailer = g_AllEmails[fromail].eFrom
IF g_DynamicEmailThreadBuffers[dynamicFoundAt].emails[g_DynamicEmailThreadBuffers[dynamicFoundAt].iProgress-1].bOverrideContent
emcotag = g_DynamicEmailThreadBuffers[dynamicFoundAt].emails[g_DynamicEmailThreadBuffers[dynamicFoundAt].iProgress-1].content
CDEBUG1LN(DEBUG_EMAIL, "Dynamic email content is overridden to: ", emcotag)
ELSE//otherwise its not a content override, use the raw mail content
//EMAIL_MESSAGE_ENUMS fromail = g_DynamicEmailThreadBuffers[dynamicFoundAt].emails[s].sourceEmail
emcotag = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[fromail].iContentTag)
CDEBUG1LN(DEBUG_EMAIL, "Dynamic email content is not overridden : ", emcotag)
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
//Don't add any messages to the feed during a gameflow launch. -BenR
IF NOT g_flowUnsaved.bUpdatingGameflow
#ENDIF
IF NOT bNoFeedMessage
CPRINTLN(DEBUG_EMAIL, "About to attempt feedification, viewed at index ", g_Inboxes[mailer].HasBeenViewed[indextostoreto]," at ",indextostoreto," with delay setting ", delayFeedification, ".")
IF (NOT g_Inboxes[mailer].HasBeenViewed[indextostoreto])
AND (NOT delayFeedification)
SWITCH mailer
CASE EMAILER_MICHAEL_DE_SANTO
FEEDIFY_EMAIL_MESSAGE(CHAR_MICHAEL, frommailer, mailenum, emcotag)//used to be frommailer GET_EMAILER_NAME_TAG(frommailer)
BREAK
CASE EMAILER_FRANKLIN
IF mailenum = WILDLIFE_INITIAL // CC
// SPECIAL CASE TO STOP ENTIRE INITIAL WILDLIFE PHOTOGRAPHY DYNAMIC EMAIL APPEARING IN FEED AND BRIEF MENU
FEEDIFY_EMAIL_MESSAGE(CHAR_FRANKLIN, frommailer, mailenum, "PW_FEED_EM_1")
ELSE
FEEDIFY_EMAIL_MESSAGE(CHAR_FRANKLIN, frommailer, mailenum, emcotag) //now is content tag
ENDIF
BREAK
CASE EMAILER_TREVOR_PHILIPS
FEEDIFY_EMAIL_MESSAGE(CHAR_TREVOR, frommailer, mailenum, emcotag)
BREAK
ENDSWITCH
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
ENDIF
#ENDIF
ENDPROC
FUNC BOOL ADD_MAIL_TO_THREAD_LOG(INT thread_index, INT email_index)
CPRINTLN(DEBUG_EMAIL, "Adding email to thread log. Thread index: " , thread_index, " Email index:", email_index ," Log index:", g_AllEmailThreads[thread_index].iMailsInLog, ".")
IF (g_AllEmailThreads[thread_index].iMailsInLog >= MAX_THREAD_LOG_LENGTH)
CPRINTLN(DEBUG_EMAIL, "Failed: No space left in thread email log!")
SCRIPT_ASSERT("No space left in thread email log!")
RETURN FALSE
ENDIF
g_AllEmailThreads[thread_index].ThreadEmailLog[g_AllEmailThreads[thread_index].iMailsInLog] = email_index
++g_AllEmailThreads[thread_index].iMailsInLog
RETURN TRUE
ENDFUNC
// Progress thread - automatically called after a thread delay finishes, or manually to override a block.
PROC PROGRESS_EMAIL_THREAD(INT thread_index, BOOL bNoFeedMessage = FALSE)
CPRINTLN(DEBUG_EMAIL, "Attempting to progress an email thread ", thread_index, ".")
//Is the thread over?
IF (NOT g_AllEmailThreads[thread_index].bActive) AND (NOT g_AllEmailThreads[thread_index].bEnded)
//Thread over or not started.
CPRINTLN(DEBUG_EMAIL, "Failed: Thread is over or not started.")
EXIT
ENDIF
//No more mails in the stack.
IF (g_AllEmailThreads[thread_index].iCurrentlyAt = g_AllEmailThreads[thread_index].iTotalThreadMails)
CPRINTLN(DEBUG_EMAIL, "Thread is out of mails on the stack, cannot update.")
INT iMailLogIndex = g_AllEmailThreads[thread_index].iMailsInLog-1
IF iMailLogIndex < 0
CPRINTLN(DEBUG_EMAIL, "Failed: Thread has no emails in log, something has gone badly wrong.")
EXIT
ENDIF
//Check for current response pending.
IF g_AllEmails[g_AllEmailThreads[thread_index].ThreadEmailLog[iMailLogIndex]].iResponses = 0
CPRINTLN(DEBUG_EMAIL, "Failed: Thread has no responses pending either, ending it.")
g_AllEmailThreads[thread_index].bEnded = TRUE
ENDIF
EXIT
ENDIF
//Thread has ended.
IF g_AllEmailThreads[thread_index].bEnded
CPRINTLN(DEBUG_EMAIL, "Failed: Thread has already ended.")
EXIT
ENDIF
INT nextemail = g_AllEmailThreads[thread_index].ThreadMails[g_AllEmailThreads[thread_index].iCurrentlyAt]
g_AllEmailThreads[thread_index].iCurrentlyAt++
//Add the next mail to the log and progress it.
CPRINTLN(DEBUG_EMAIL, "Progressing with ", thread_index," and ", nextemail, ".")
ADD_MAIL_TO_THREAD_LOG(thread_index,nextemail)
//Apply email effects/rules to the thread.
g_AllEmailThreads[thread_index].bBLockedUntilResponse = g_AllEmails[nextemail].bEmailBlocksThread
g_AllEmailThreads[thread_index].iDelay = g_AllEmails[nextemail].iDelay
INT totalparticipants = g_AllEmailThreads[thread_index].iParticipants
LOG_EMAIL_THREAD_SNAPSHOT_TO_INBOX(g_AllEmails[nextemail].eTo, thread_index, FALSE, FALSE, bNoFeedMessage)
INT i
REPEAT totalparticipants i
IF g_AllEmailThreads[thread_index].Participants[i] != g_AllEmails[nextemail].eFrom
AND g_AllEmailThreads[thread_index].Participants[i] != g_AllEmails[nextemail].eTo
CDEBUG1LN(DEBUG_EMAIL, "Logging participant ", i," with thread ", thread_index)
LOG_EMAIL_THREAD_SNAPSHOT_TO_INBOX( g_AllEmailThreads[thread_index].Participants[i],
thread_index,
FALSE,
FALSE,
bNoFeedMessage)
ENDIF
ENDREPEAT
//If no more mails in the stack.
IF g_AllEmailThreads[thread_index].iCurrentlyAt = g_AllEmailThreads[thread_index].iTotalThreadMails
//If no responses in current mail.
IF g_AllEmails[g_AllEmailThreads[thread_index].ThreadEmailLog[g_AllEmailThreads[thread_index].iMailsInLog-1]].iResponses = 0
//End the thread
CPRINTLN(DEBUG_EMAIL, "No more emails in the stack and no responses in the current mail. Ending email thread.")
g_AllEmailThreads[thread_index].bEnded = TRUE
EXIT
ENDIF
ENDIF
CPRINTLN(DEBUG_EMAIL, "Thread progression finished.")
ENDPROC
// Reset thread.
PROC RESET_EMAIL_THREAD_INT(INT thread_index)
CDEBUG1LN(DEBUG_EMAIL, "Resetting email thread ", thread_index, ".")
g_AllEmailThreads[thread_index].bActive = FALSE
g_AllEmailThreads[thread_index].iCurrentlyAt = 0
g_AllEmailThreads[thread_index].iMailsInLog = 0
g_AllEmailThreads[thread_index].bBLockedUntilResponse = FALSE
g_AllEmailThreads[thread_index].iDelay = 0
g_AllEmailThreads[thread_index].bEnded = FALSE
ENDPROC
// Start thread.
PROC BEGIN_EMAIL_THREAD_INT(INT thread_index, BOOL bNoFeedMessage = FALSE)
//Note: be careful when changing the reset conditions as possibility for recursion dwells here
g_bEmailSystemUpdated= TRUE
IF (NOT g_AllEmailThreads[thread_index].bActive) AND (NOT g_AllEmailThreads[thread_index].bEnded)
CPRINTLN(DEBUG_EMAIL, "Starting email thread ", thread_index, ".")
//activate it
g_AllEmailThreads[thread_index].bActive = TRUE
//prime the pump with the first email
PROGRESS_EMAIL_THREAD(thread_index,bNoFeedMessage)
ELSE
//thread is already active or ended, reset it then begin it
CPRINTLN(DEBUG_EMAIL, "Attempting to begin email thread that is active or already over, attempting reset.")
RESET_EMAIL_THREAD_INT(thread_index)
BEGIN_EMAIL_THREAD_INT(thread_index,bNoFeedMessage)
ENDIF
ENDPROC
//Stop or end a thread regardless of progress
PROC END_EMAIL_THREAD(INT thread_index,BOOL bNoFeedMessage = FALSE)
bNoFeedMessage = bNoFeedMessage
g_bEmailSystemUpdated = TRUE
IF (g_AllEmailThreads[thread_index].bActive) AND (NOT g_AllEmailThreads[thread_index].bEnded)
CPRINTLN(debug_email,"Ending email thread ",thread_index," at index ",g_AllEmailThreads[thread_index].iCurrentlyAt,"/",g_AllEmailThreads[thread_index].iTotalThreadMails-1)
//End it
g_AllEmailThreads[thread_index].bEnded = TRUE
g_AllEmailThreads[thread_index].bActive= FALSE
ELSE
CPRINTLN(debug_email,"Attempted to stop email thread that was not started or active, no changes made")
ENDIF
ENDPROC
// Fire thread response.
PROC FIRE_EMAIL_THREAD_RESPONSE(INT thread_index,INT response_index)
CPRINTLN(DEBUG_EMAIL, "Firing email thread response for thread ", thread_index, ".")
IF (NOT g_AllEmailThreads[thread_index].bActive) AND (NOT g_AllEmailThreads[thread_index].bEnded)
//thread is ended or inactive
EXIT
ENDIF
//is the response valid?
INT iMailLogIndex = g_AllEmailThreads[thread_index].iMailsInLog-1
IF iMailLogIndex < 0
CPRINTLN(DEBUG_EMAIL, "Thread has no emails in log. Cannot begin a thread with a response.")
SCRIPT_ASSERT("FIRE_EMAIL_THREAD_RESPONSE: Thread has no emails in log. Cannot begin a thread with a response.")
EXIT
ENDIF
INT findmail = g_AllEmailThreads[thread_index].ThreadEmailLog[iMailLogIndex]
IF NOT(response_index < g_AllEmails[findmail].iResponses)
//response index is not smaller than total responses! invalid fail
CPRINTLN(DEBUG_EMAIL, "Response index is not smaller than total responses in the thread. Failed to add response.")
SCRIPT_ASSERT("FIRE_EMAIL_THREAD_RESPONSE: Response index is not smaller than total responses in the thread. Failed to add response.")
EXIT
ENDIF
//find the response email's index
INT responsemail = g_AllEmails[findmail].Responses[response_index].iResponseMail
CPRINTLN(debug_email,"Find:",findmail,"Response/Index:",responsemail,"/",response_index)
CPRINTLN(debug_email,"Thread ",thread_index," at:",g_AllEmailThreads[thread_index].iCurrentlyAt,"/",g_AllEmailThreads[thread_index].iTotalThreadMails-1)
//is the response email the same as the next one in the thread? If so don't bother logging this
BOOL bForbidLog = FALSE
IF g_AllEmailThreads[thread_index].iCurrentlyAt < g_AllEmailThreads[thread_index].iTotalThreadMails-1
INT nextmail = g_AllEmailThreads[thread_index].ThreadMails[g_AllEmailThreads[thread_index].iCurrentlyAt]
CPRINTLN(debug_email,"Next:",nextmail)
IF responsemail = nextmail
bForbidLog = TRUE
ENDIF
ENDIF
IF NOT bForbidLog
IF responsemail > -1
//fire the email response into the thread log
ADD_MAIL_TO_THREAD_LOG(thread_index, responsemail)
//send the email/thread to the right inboxes
INT totalparticipants = g_AllEmailThreads[thread_index].iParticipants
//log the email and thread in the inbox of all participants apart from the sender //perhaps have an outbox for sender
INT i = 0
INT senderindex = ENUM_TO_INT(g_AllEmails[responsemail].eFrom)
REPEAT totalparticipants i
IF NOT (i = senderindex)
LOG_EMAIL_THREAD_SNAPSHOT_TO_INBOX(g_AllEmailThreads[thread_index].Participants[i],thread_index)
ELSE
//todo, place email in outbox
ENDIF
ENDREPEAT
ELSE
CPRINTLN(DEBUG_EMAIL, "Response doesn't log an email.")
ENDIF
#IF IS_DEBUG_BUILD
ELSE
CPRINTLN(DEBUG_EMAIL, "Logging of this response forbidden as it is the same email as the next in the thread")
#ENDIF
ENDIF
IF g_AllEmails[findmail].Responses[response_index].iResponseFiresThread > -1
BEGIN_EMAIL_THREAD_INT(g_AllEmails[findmail].Responses[response_index].iResponseFiresThread)
CPRINTLN(DEBUG_EMAIL, "Response kicking off thread with index: ", g_AllEmails[findmail].Responses[response_index].iResponseFiresThread,
" Email: ", findmail, " Response: ", response_index, ".")
#IF IS_DEBUG_BUILD
ELSE
CPRINTLN(DEBUG_EMAIL, "Response fires no thread. Thread: ", g_AllEmails[findmail].Responses[response_index].iResponseFiresThread,
" Email: ", findmail, " Response: ", response_index, ".")
#ENDIF
ENDIF
//Apply the response's special effects.
IF(g_AllEmails[findmail].Responses[response_index].bResponseEndsThread)
//The response ended the thread, kill it.
g_AllEmailThreads[thread_index].bEnded = TRUE
ELSE
//If the response did not end the thread then apply the email's special effects to the thread.
IF responsemail > -1
g_AllEmailThreads[thread_index].bBLockedUntilResponse = g_AllEmails[responsemail].bEmailBlocksThread
g_AllEmailThreads[thread_index].iDelay = g_AllEmails[responsemail].iDelay
ELSE
g_AllEmailThreads[thread_index].bBLockedUntilResponse = FALSE //Otherwise there was no email to add, unblock thread and let counter finish up.
ENDIF
ENDIF
IF g_AllEmailThreads[thread_index].iDelay < 30000
g_AllEmailThreads[thread_index].iDelay = 30000
ENDIF
ENDPROC
PROC RESET_EMAIL_THREAD(EMAIL_THREAD_ENUMS id)
RESET_EMAIL_THREAD_INT(ENUM_TO_INT(id))
ENDPROC
PROC BEGIN_EMAIL_THREAD(EMAIL_THREAD_ENUMS id,bool bNoFeedMessage = false)
BEGIN_EMAIL_THREAD_INT(ENUM_TO_INT(id),bNoFeedMessage)
ENDPROC
/// PURPOSE:
/// Jump the thread to the next instance of the specified email relative to it's current stage
/// PARAMS:
/// t - thread target
/// e - email to find
/// fromstart - if true then check from start rather than current point
/// index - instance of that email to find, 0 being the first
/// RETURNS:
/// True if the jump succeeded
/// False if the mail was not found
FUNC BOOL JUMP_EMAIL_THREAD_TO_STAGE(EMAIL_THREAD_ENUMS t, EMAIL_MESSAGE_ENUMS e,BOOL fromstart = FALSE, INT index = 0)
//Does the email exist past the thread's current point?
INT ifound = -1
INT icountdown = index
INT i = 0
INT startAt =0
IF NOT fromstart
startAt = g_AllEmailThreads[t].iCurrentlyAt
ENDIF
FOR i = startAt TO g_AllEmailThreads[t].iTotalThreadMails STEP 1
//icountdown
IF ifound = -1
IF g_AllEmailThreads[t].ThreadMails[i] = ENUM_TO_INT(e)//found a match
//g_AllEmailThreads[t]
IF icountdown = 0
ifound = i
ELSE
--icountdown
ENDIF
ENDIF
ENDIF
ENDFOR
//Check for currently at
IF ifound = -1
RETURN FALSE
ENDIF
//If so then loop and progress the thread until it's current email is that point
icountdown = index
BOOL done = FALSE
IF fromstart
RESET_EMAIL_THREAD(t)
BEGIN_EMAIL_THREAD(t)
ENDIF
WHILE NOT done
//TODO, this will need changing is response emails are re-enabled
IF g_AllEmailThreads[t].ThreadMails[g_AllEmailThreads[t].iCurrentlyAt] = ENUM_TO_INT(e)
IF icountdown = 0
done = TRUE
ELSE
--icountdown
PROGRESS_EMAIL_THREAD(ENUM_TO_INT(t))
ENDIF
ELSE
PROGRESS_EMAIL_THREAD(ENUM_TO_INT(t))
ENDIF
ENDWHILE
RETURN TRUE
ENDFUNC
FUNC INT GET_EMAIL_INDEX_FROM_MAILER_INBOX(EMAILER_ENUMS mailer,INT inbox_index)
INT maillogindex = g_Inboxes[mailer].EmailsLogIndex[inbox_index]
INT mailthreadindex = g_Inboxes[mailer].ThreadIndex[inbox_index]
RETURN g_AllEmailThreads[mailthreadindex].ThreadEmailLog[maillogindex]
ENDFUNC
//query for reply
FUNC BOOL DOES_EMAIL_HAVE_REPLIES(INT email_index)
IF g_AllEmails[email_index].iResponses > 0
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDFUNC
FUNC BOOL SCALEFORM_CHECK_FOR_RESPONSE_ALLOWED(enumCharacterList character,INT selectedUIindex)
INT index = -1
SWITCH character
CASE CHAR_MICHAEL
index = ENUM_TO_INT(EMAILER_MICHAEL_DE_SANTO)
BREAK
CASE CHAR_FRANKLIN
index = ENUM_TO_INT(EMAILER_FRANKLIN) //this will get changed later
BREAK
CASE CHAR_TREVOR
index = ENUM_TO_INT(EMAILER_TREVOR_PHILIPS)
BREAK
ENDSWITCH
IF index = -1
RETURN FALSE
ENDIF
//find the thread in the inbox selected
//because I flipped the indices for ordering reasons
//find the baseline zero mail
INT baselinemail = g_Inboxes[index].iTotalMails-1-selectedUIindex
WHILE baselinemail >= MAX_INBOX_LOGGED_MAILS_THREADS
baselinemail -= MAX_INBOX_LOGGED_MAILS_THREADS
ENDWHILE
CPRINTLN(DEBUG_EMAIL,"Baseline ",baselinemail," selected by scaleform ", selectedUIindex)
INT invval = baselinemail
IF NOT g_Inboxes[index].IsDynamic[invval]
INT threadindex = g_Inboxes[index].ThreadIndex[invval]
INT emaillogindex = g_Inboxes[index].EmailsLogIndex[invval]
INT firstmail = g_AllEmailThreads[threadindex].ThreadEmailLog[emaillogindex]
//does the email have responses?
IF (g_AllEmails[firstmail].iResponses = 0)
RETURN FALSE
ENDIF
//has it already fired a response?
IF g_Inboxes[index].HasFiredResponse[invval] = TRUE
RETURN FALSE
ENDIF
//Is it allowed to fire a response now?
IF NOT CAN_A_THREAD_MAIL_FIRE_A_RESPONSE(INT_TO_ENUM(EMAILER_ENUMS,index),invval)
RETURN FALSE
ENDIF
RETURN TRUE
ELSE
CPRINTLN(DEBUG_EMAIL,"SCALEFORM_CHECK_FOR_RESPONSE_ALLOWED: TODO: check dynamic email for response")
RETURN FALSE
ENDIF
ENDFUNC
PROC SCALEFORM_FIRE_RESPONSE(enumCharacterList character,INT selectedUIindex,INT selectedResponseIndex)
CPRINTLN(DEBUG_EMAIL,"\nSCALEFORM_FIRE_RESPONSE: Scaleform triggering response : ",selectedUIindex," ",selectedResponseIndex)
INT index = -1
SWITCH character
CASE CHAR_MICHAEL
index = ENUM_TO_INT(EMAILER_MICHAEL_DE_SANTO)
BREAK
CASE CHAR_FRANKLIN
index = ENUM_TO_INT(EMAILER_FRANKLIN)
BREAK
CASE CHAR_TREVOR
index = ENUM_TO_INT(EMAILER_TREVOR_PHILIPS)
BREAK
ENDSWITCH
IF index < -1
AND index > TOTAL_INBOXES
CPRINTLN(DEBUG_EMAIL,"SCALEFORM_FIRE_RESPONSE: outside of index range")
EXIT
ENDIF
//find the thread in the inbox selected
//because I flipped the indices for ordering reasons
//find the baseline zero mail
INT baselinemail = g_Inboxes[index].iTotalMails-1-selectedUIindex
WHILE baselinemail >= MAX_INBOX_LOGGED_MAILS_THREADS
baselinemail -= MAX_INBOX_LOGGED_MAILS_THREADS
ENDWHILE
CPRINTLN(DEBUG_EMAIL,"SCALEFORM_FIRE_RESPONSE: Baseline ",baselinemail," selected by scaleform ", selectedUIindex)
INT invval = baselinemail
INT threadindex = g_Inboxes[index].ThreadIndex[invval]
INT emaillogindex = g_Inboxes[index].EmailsLogIndex[invval]
IF emaillogindex < 0 OR threadindex < 0
OR (NOT (emaillogindex < MAX_THREAD_LOG_LENGTH))
OR (NOT (threadindex < TOTAL_EMAIL_THREADS_IN_GAME))
CPRINTLN(DEBUG_EMAIL,"SCALEFORM_FIRE_RESPONSE: Email or thread log index was invalid, caused by index ", index, " and invval of ", invval)
CPRINTLN(DEBUG_EMAIL,"Dumping entry info, tmails ", g_Inboxes[index].iTotalMails)
CPRINTLN(DEBUG_EMAIL," g_Inboxes[", index, " ].EmailsLogIndex[", invval,"] : ",g_Inboxes[index].EmailsLogIndex[invval])
CPRINTLN(DEBUG_EMAIL," g_Inboxes[", index, " ].ThreadIndex[", invval,"] : ",g_Inboxes[index].ThreadIndex[invval])
CPRINTLN(DEBUG_EMAIL," g_Inboxes[", index, " ].HasFiredResponse[", invval,"] : ",g_Inboxes[index].HasFiredResponse[invval])
CPRINTLN(DEBUG_EMAIL," g_Inboxes[", index, " ].PickedResponseIndex[", invval,"] : ",g_Inboxes[index].PickedResponseIndex[invval])
CPRINTLN(DEBUG_EMAIL," g_Inboxes[", index, " ].HasBeenViewed[", invval,"] : ",g_Inboxes[index].HasBeenViewed[invval])
CPRINTLN(DEBUG_EMAIL," g_Inboxes[", index, " ].IsDynamic[", invval,"] : ",g_Inboxes[index].IsDynamic[invval])
SCRIPT_ASSERT("Resultant email log index is invalid, please pass log of this issue to Default Levels.")
EXIT
ENDIF
INT firstmail = g_AllEmailThreads[threadindex].ThreadEmailLog[emaillogindex]
//now use the responses to fill out the list
IF (g_AllEmails[firstmail].iResponses = 0)
SCRIPT_ASSERT("SCALEFORM_FIRE_RESPONSE: Attempting to populate scaleform response list for an email with no responses!")
EXIT
ENDIF
g_Inboxes[index].HasFiredResponse[invval] = TRUE
g_Inboxes[index].PickedResponseIndex[invval] = selectedResponseIndex
//finally fire the right response
CPRINTLN(DEBUG_EMAIL,"SCALEFORM_FIRE_RESPONSE: Attempting to fire response from thread ",threadindex," with selected response ", selectedResponseIndex)
FIRE_EMAIL_THREAD_RESPONSE(threadindex,selectedResponseIndex)
ENDPROC
FUNC BOOL IS_STATIC_EMAIL_THREAD_ACTIVE(EMAIL_THREAD_ENUMS t)
RETURN g_AllEmailThreads[t].bActive
ENDFUNC
FUNC BOOL IS_STATIC_EMAIL_THREAD_ENDED(EMAIL_THREAD_ENUMS t)
RETURN g_AllEmailThreads[t].bEnded
ENDFUNC
FUNC BOOL IS_STATIC_EMAIL_THREAD_IN_PROGRESS(EMAIL_THREAD_ENUMS t)
IF (IS_STATIC_EMAIL_THREAD_ACTIVE(t))
AND (!IS_STATIC_EMAIL_THREAD_ENDED(t))
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/////////////////////////////////////////////////////////////////////////////
///
/// Dynamic email calls
//
//private-ish calls
FUNC INT GET_DYNAMIC_EMAIL_THREAD_BUFFER_INDEX(DYNAMIC_EMAIL_THREAD_NAMES target)
//look through the buffers for target
INT i = 0
INT ipotentialID = -1
INT ipotentialIndex = -1
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS i
IF g_DynamicEmailThreadBuffers[i].belongsTo = target
//IF g_DynamicEmailThreadBuffers[i].bBufferCritical
IF g_DynamicEmailThreadBuffers[i].registrationID > ipotentialIndex
ipotentialIndex = g_DynamicEmailThreadBuffers[i].registrationID
ipotentialID = i
ENDIF
//ENDIF
ENDIF
ENDREPEAT
IF ipotentialID != -1 AND ipotentialIndex != -1
CPRINTLN(DEBUG_EMAIL,"GET_DYNAMIC_EMAIL_THREAD_BUFFER_INDEX: index found ",ipotentialIndex," ID: ",ipotentialID)
RETURN ipotentialID
ENDIF
//
CPRINTLN(DEBUG_EMAIL,"GET_DYNAMIC_EMAIL_THREAD_BUFFER_INDEX: Index not found")
RETURN -1
ENDFUNC
FUNC INT ASSIGN_BUFFER_TO_DYNAMIC_EMAIL_THREAD(DYNAMIC_EMAIL_THREAD_NAMES target, BOOL bNoCrit = FALSE)
//is this already in the buffer?
INT index = GET_DYNAMIC_EMAIL_THREAD_BUFFER_INDEX(target)
IF index > -1
IF (g_DynamicEmailThreadBuffers[index].iProgress < DYNAMIC_EMAIL_THREAD_MAX_LENGTH)
CPRINTLN(DEBUG_EMAIL,"ASSIGN_BUFFER_TO_DYNAMIC_EMAIL_THREAD: Found valid index ", index)
RETURN index
ENDIF
ENDIF
//attempt to assign a buffer
//check for situation where all buffers are logged as critical
//or full
//assert
INT i = 0
BOOL noneCriticalFound = FALSE
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS i
IF g_DynamicEmailThreadBuffers[i].bBufferCritical = FALSE
noneCriticalFound = TRUE
ENDIF
ENDREPEAT
IF NOT noneCriticalFound
CPRINTLN(DEBUG_EMAIL,"ASSIGN_BUFFER_TO_DYNAMIC_EMAIL_THREAD: Cannot assign thread, all buffers are critical")
SCRIPT_ASSERT("ASSIGN_BUFFER_TO_DYNAMIC_EMAIL_THREAD: Buffers are all set to critical!")
RETURN -1
ENDIF
//otherwise pick the oldest none critical buffer
BOOL first = TRUE
i = 0
INT itarget = -1
INT ivalue = -1
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS i
IF g_DynamicEmailThreadBuffers[i].bBufferCritical = FALSE
IF first
itarget = i
ivalue = g_DynamicEmailThreadBuffers[i].registrationID
first = FALSE
ELSE
IF ivalue > g_DynamicEmailThreadBuffers[i].registrationID
itarget = i
ivalue = g_DynamicEmailThreadBuffers[i].registrationID
ENDIF
ENDIF
ENDIF
ENDREPEAT
IF g_DynamicEmailThreadBuffers[itarget].iProgress > 0
CPRINTLN(DEBUG_EMAIL,"Targeted dynamic email index (",itarget,") has progress (",g_DynamicEmailThreadBuffers[itarget].iProgress,"), purging unread before claiming")
//need to check for unread emails in this thread so can decrement the read counter
i = 0
REPEAT g_DynamicEmailThreadBuffers[itarget].iProgress i
//itarget
//g_DynamicEmailThreadBuffers[itarget].emails[i]
INT ibox = 0
REPEAT TOTAL_INBOXES ibox
INT imaimax = g_Inboxes[ibox].iTotalMails
IF imaimax > MAX_INBOX_LOGGED_MAILS_THREADS
imaimax = MAX_INBOX_LOGGED_MAILS_THREADS
ENDIF
INT imai = 0
REPEAT imaimax imai
IF g_Inboxes[ibox].IsDynamic[imai]
IF NOT g_Inboxes[ibox].HasBeenViewed[imai]
IF g_Inboxes[ibox].ThreadIndex[imai] = g_DynamicEmailThreadBuffers[itarget].registrationID
IF g_Inboxes[ibox].EmailsLogIndex[imai] = i
SWITCH ibox
CASE 0
--g_iUnreadEmailsSP0
//PRINTLN("Reducing dynamic g_iUnreadEmailsSP0")
BREAK
CASE 1
--g_iUnreadEmailsSP1
//PRINTLN("Reducing dynamic g_iUnreadEmailsSP1")
BREAK
CASE 2
--g_iUnreadEmailsSP2
//PRINTLN("Reducing dynamic g_iUnreadEmailsSP2")
BREAK
ENDSWITCH
ENDIF
ENDIF
ENDIF
ENDIF
ENDREPEAT
ENDREPEAT
ENDREPEAT
ENDIF
g_DynamicEmailThreadBuffers[itarget].belongsTo = target
g_DynamicEmailThreadBuffers[itarget].iParticipants = 0
IF !bNoCrit
g_DynamicEmailThreadBuffers[itarget].bBufferCritical = TRUE
ENDIF
++g_savedGlobals.sEmailData.g_PendingEmailIDGenerator
IF g_savedGlobals.sEmailData.g_PendingEmailIDGenerator =0
g_savedGlobals.sEmailData.g_PendingEmailIDGenerator = 1
ENDIF
g_DynamicEmailThreadBuffers[itarget].registrationID = g_savedGlobals.sEmailData.g_PendingEmailIDGenerator
g_DynamicEmailThreadBuffers[itarget].iProgress = 0
CPRINTLN(DEBUG_EMAIL,"ASSIGN_BUFFER_TO_DYNAMIC_EMAIL_THREAD: Assigned ", itarget)
RETURN itarget
ENDFUNC
//dynamic email pending system calls
/// PURPOSE:
///
/// PARAMS:
/// target - the dynamic thread to prime
/// emailID - the email to prime
/// inGameHoursBeforeTrigger - the number of in game hours before this email should be triggered
/// RETURNS:
/// Value != 0 if successfully primed, this is the PENDING_EMAIL_ID used in other
/// pending email calls
FUNC INT PRIME_EMAIL_FOR_FIRING_INTO_DYNAMIC_THREAD_IN_HOURS(DYNAMIC_EMAIL_THREAD_NAMES target,
EMAIL_MESSAGE_ENUMS emailID,
int inGameHoursBeforeTrigger)
IF inGameHoursBeforeTrigger < 1
RETURN 0
ENDIF
IF g_iDynamicEmailsPending = MAX_DYNAMIC_EMAILS_PENDING
RETURN 0
ENDIF
INT iThreadID = 0
INT i = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS i
IF g_DynamicEmailThreadBuffers[i].belongsTo = target
IF g_DynamicEmailThreadBuffers[i].registrationID > 0
iThreadID = g_DynamicEmailThreadBuffers[i].registrationID
ENDIF
ENDIF
ENDREPEAT
IF iThreadID = 0
RETURN 0//thread not active
ENDIF
REPEAT MAX_DYNAMIC_EMAILS_PENDING i
IF g_DynamicEmailsPending[i].RegIDOfTarget = 0
g_DynamicEmailsPending[i].RegIDOfTarget = iThreadID
g_DynamicEmailsPending[i].eTargetThread = target
g_DynamicEmailsPending[i].eEmailID = emailID
g_DynamicEmailsPending[i].iInGameHoursBeforeTrigger = inGameHoursBeforeTrigger
++g_savedGlobals.sEmailData.g_PendingEmailIDGenerator
IF g_savedGlobals.sEmailData.g_PendingEmailIDGenerator =0
g_savedGlobals.sEmailData.g_PendingEmailIDGenerator = 1
ENDIF
g_DynamicEmailsPending[i].iOverrideAdditional = 0
g_DynamicEmailsPending[i].iPendingIndex = ( g_savedGlobals.sEmailData.g_PendingEmailIDGenerator )
g_DynamicEmailsPending[i].bNotSent = TRUE
CPRINTLN(DEBUG_EMAIL,"PRIME_EMAIL_FOR_FIRING_INTO_DYNAMIC_THREAD_IN_HOURS: primed index ", i," with thread id ", iThreadID)
++g_iDynamicEmailsPending
RETURN g_DynamicEmailsPending[i].iPendingIndex
ENDIF
ENDREPEAT
//fail no space
RETURN 0
ENDFUNC
/// PURPOSE:
///
/// PARAMS:
/// target - The thread to check for
/// emailID - The email to check for
/// RETURNS:
/// TRUE if the countdown is still happening on the email
/// note if this returns false the email will have been sent UNLESS the thread buffer was released before it was sent
FUNC BOOL IS_DYNAMIC_EMAIL_PENDING(DYNAMIC_EMAIL_THREAD_NAMES target, EMAIL_MESSAGE_ENUMS emailID,INT PENDING_EMAIL_ID = -1)
IF g_iDynamicEmailsPending < 1
RETURN FALSE
ENDIF
INT i = 0
REPEAT MAX_DYNAMIC_EMAILS_PENDING i
IF g_DynamicEmailsPending[i].RegIDOfTarget != 0
IF g_DynamicEmailsPending[i].eTargetThread = target
AND g_DynamicEmailsPending[i].eEmailID = emailID
AND g_DynamicEmailsPending[i].iInGameHoursBeforeTrigger > 0
IF PENDING_EMAIL_ID = -1
RETURN TRUE
ELSE
ENDIF
ENDIF
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL OVERRIDE_CONTENT_FOR_PENDING_DYNAMIC_EMAIL(INT PENDING_EMAIL_ID,DYNAMIC_EMAIL_THREAD_NAMES thread,EMAIL_MESSAGE_ENUMS emailID, STRING override)
CPRINTLN(DEBUG_EMAIL,"OVERRIDE_CONTENT_FOR_PENDING_DYNAMIC_EMAIL fired for thread: ", thread, " and email message :", emailID, "with string '", override, "'")
//start from the end of the list
INT iCd = MAX_DYNAMIC_EMAILS_PENDING - 1
INT i = 0
REPEAT MAX_DYNAMIC_EMAILS_PENDING i
IF g_DynamicEmailsPending[iCd].RegIDOfTarget != 0
IF g_DynamicEmailsPending[iCd].eTargetThread = thread
AND g_DynamicEmailsPending[iCd].eEmailID = emailID
IF PENDING_EMAIL_ID = g_DynamicEmailsPending[iCd].iPendingIndex
g_DynamicEmailsPending[iCd].bOverrideContent = TRUE
g_DynamicEmailsPending[iCd].content = override
ENDIF
RETURN TRUE
ENDIF
ENDIF
--iCd
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL ADD_CONTENT_FOR_FOR_PENDING_DYNAMIC_EMAIL_SUBSTRING(INT PENDING_EMAIL_ID,DYNAMIC_EMAIL_THREAD_NAMES thread,EMAIL_MESSAGE_ENUMS emailID, STRING override)
INT iCd = MAX_DYNAMIC_EMAILS_PENDING - 1
INT i = 0
REPEAT MAX_DYNAMIC_EMAILS_PENDING i
IF g_DynamicEmailsPending[iCd].RegIDOfTarget != 0
IF g_DynamicEmailsPending[iCd].eTargetThread = thread
AND g_DynamicEmailsPending[iCd].eEmailID = emailID
IF g_DynamicEmailsPending[iCd].iPendingIndex = PENDING_EMAIL_ID
IF g_DynamicEmailsPending[iCd].iOverrideAdditional < 4
g_DynamicEmailsPending[iCd].additional[g_DynamicEmailsPending[iCd].iOverrideAdditional] = override
++g_DynamicEmailsPending[iCd].iOverrideAdditional
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
--iCd
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL FIRE_EMAIL_INTO_DYNAMIC_THREAD(DYNAMIC_EMAIL_THREAD_NAMES target,
EMAIL_MESSAGE_ENUMS emailID,
BOOL bAboutToOverrideContent = TRUE)
//g_DynamicEmailBuffers
//is this thread currently active in any buffer?
//if not then try to make it so
//if impossible to make it so return false and assert
CPRINTLN(DEBUG_EMAIL,"FIRE_EMAIL_INTO_DYNAMIC_THREAD: about to override content - ", bAboutToOverrideContent)
INT index = ASSIGN_BUFFER_TO_DYNAMIC_EMAIL_THREAD(target, TRUE)
IF (index = -1)
CPRINTLN(DEBUG_EMAIL,"FIRE_EMAIL_INTO_DYNAMIC_THREAD: No thread assigned")
RETURN FALSE
ENDIF
IF g_DynamicEmailThreadBuffers[index].iProgress = DYNAMIC_EMAIL_THREAD_MAX_LENGTH
SCRIPT_ASSERT("FIRE_EMAIL_INTO_DYNAMIC_THREAD dynamic buffer is full, this should have been caught by ASSIGN_BUFFER_TO_DYNAMIC_EMAIL_THREAD, dumping this email")
RETURN FALSE
ENDIF
//now the thread is active attempt to add the given email to it
g_DynamicEmailThreadBuffers[index].belongsTo = target
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress].sourceEmail = emailID
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress].bOverrideContent = FALSE
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress].iOverrideAdditional = 0
//g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress].bHasContentCallback= g_bDyanmicEmailContentOverridePending
//IF g_bDyanmicEmailContentOverridePending
// g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress].contentCallback = g_nextDynamicCallbackHandle
// g_bDyanmicEmailContentOverridePending = FALSE
//ENDIF
g_DynamicEmailThreadBuffers[index].iProgress++
CPRINTLN(DEBUG_EMAIL,"Dynamic thread updated progress : ",index," : ",g_DynamicEmailThreadBuffers[index].iProgress-1, " participants ",g_DynamicEmailThreadBuffers[index].iParticipants,"/",MAX_DYNAMIC_EMAIL_THREAD_PARTICIPANTS)
//add the from and to of the email to the paticipant ID if they're not in it and participants is not greater than max
INT i = 0
INT foundIndex = -1
REPEAT g_DynamicEmailThreadBuffers[index].iParticipants i
IF foundIndex = -1
IF g_DynamicEmailThreadBuffers[index].Participants[i] = g_AllEmails[emailID].eTo
foundIndex = i
ENDIF
ENDIF
ENDREPEAT
IF foundindex = -1
IF g_DynamicEmailThreadBuffers[index].iParticipants = MAX_DYNAMIC_EMAIL_THREAD_PARTICIPANTS
SCRIPT_ASSERT("Dynamic email thread already has max participants and tried to add 1 more!")
RETURN FALSE
ELSE
//add new and increment
g_DynamicEmailThreadBuffers[index].Participants[g_DynamicEmailThreadBuffers[index].iParticipants] = g_AllEmails[emailID].eTo
g_DynamicEmailThreadBuffers[index].iParticipants++
ENDIF
ENDIF
i = 0
foundIndex = -1
REPEAT g_DynamicEmailThreadBuffers[index].iParticipants i
IF foundIndex = -1
IF g_DynamicEmailThreadBuffers[index].Participants[i] = g_AllEmails[emailID].eFrom
foundIndex = i
ENDIF
ENDIF
ENDREPEAT
IF foundindex = -1
IF g_DynamicEmailThreadBuffers[index].iParticipants = MAX_DYNAMIC_EMAIL_THREAD_PARTICIPANTS
SCRIPT_ASSERT("Dynamic email thread already has max participants and tried to add 1 more!")
RETURN FALSE
ELSE
//add new and increment
g_DynamicEmailThreadBuffers[index].Participants[g_DynamicEmailThreadBuffers[index].iParticipants] = g_AllEmails[emailID].eFrom
g_DynamicEmailThreadBuffers[index].iParticipants++
ENDIF
ENDIF
//now update the mailers and participant inboxes
i = 0
REPEAT g_DynamicEmailThreadBuffers[index].iParticipants i
INT pint = ENUM_TO_INT(g_DynamicEmailThreadBuffers[index].Participants[i])
IF pint < TOTAL_INBOXES // has an inbox
//g_Inboxes[pint] - inbox to update
LOG_EMAIL_THREAD_SNAPSHOT_TO_INBOX(g_DynamicEmailThreadBuffers[index].Participants[i],
g_DynamicEmailThreadBuffers[index].registrationID,
TRUE,
bAboutToOverrideContent)
ENDIF
ENDREPEAT
RETURN TRUE
ENDFUNC
PROC PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD(DYNAMIC_EMAIL_THREAD_NAMES thread)
CDEBUG2LN(DEBUG_EMAIL, "Pushing a feed notification from dynamic thread ", ENUM_TO_INT(thread), ".")
INT index = GET_DYNAMIC_EMAIL_THREAD_BUFFER_INDEX(thread)
IF (index = -1)
CDEBUG2LN(DEBUG_EMAIL, "Feedification failed due to null thread index.")
SCRIPT_ASSERT("PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD: Feedification failed due to null thread index.")
EXIT
ENDIF
IF g_DynamicEmailThreadBuffers[index].iProgress = 0
CDEBUG2LN(DEBUG_EMAIL, "Feedification failed due to no thread progress.")
SCRIPT_ASSERT("PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD: Feedification failed due to no thread progress.")
EXIT
ENDIF
EMAIL_MESSAGE_ENUMS em = g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].sourceEmail
INT i = g_DynamicEmailThreadBuffers[index].iProgress-1
TEXT_LABEL body
IF NOT g_DynamicEmailThreadBuffers[index].emails[i].bOverrideContent
//PRINTLN("PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD: Dynamic email content not overidden, cannot feedify")
//EXIT
INT gmail = ENUM_TO_INT(g_DynamicEmailThreadBuffers[index].emails[i].sourceEmail)
body = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[gmail].iContentTag)
ELSE
body = g_DynamicEmailThreadBuffers[index].emails[i].content
ENDIF
IF thread = DYNAMIC_THREAD_WILDLIFE_PHOTOGRAPHY // - CC
STRING str_FeedBody
SWITCH em
CASE WILDLIFE_INITIAL
str_FeedBody = "PW_FEED_EM_1"
CPRINTLN(DEBUG_COLLECTIBLES_PHOTOGRAPHY_WILDLIFE, "Email Public: PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD() - CHECK 1 - Updated Initial Feed Email Body")
BREAK
CASE WILDLIFE_FINAL
str_FeedBody = "PW_FEED_EM_3"
CPRINTLN(DEBUG_COLLECTIBLES_PHOTOGRAPHY_WILDLIFE, "Email Public: PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD() - CHECK 2 - Updated Final Feed Email Body")
BREAK
DEFAULT
str_FeedBody = "PW_FEED_EM_2"
CPRINTLN(DEBUG_COLLECTIBLES_PHOTOGRAPHY_WILDLIFE, "Email Public: PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD() - CHECK 3 - Updated Update Feed Email Body")
BREAK
ENDSWITCH
FEEDIFY_EMAIL_MESSAGE(CHAR_FRANKLIN, g_AllEmails[em].eFrom, em, str_FeedBody)
ELSE
CPRINTLN(DEBUG_COLLECTIBLES_PHOTOGRAPHY_WILDLIFE, "Email Public: PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD() - CHECK 4 - Normal Feed Email Body")
SWITCH g_AllEmails[em].eTo
CASE EMAILER_MICHAEL_DE_SANTO
FEEDIFY_EMAIL_MESSAGE(CHAR_MICHAEL, g_AllEmails[em].eFrom, em, body,
g_DynamicEmailThreadBuffers[index].emails[i].additional[0],
g_DynamicEmailThreadBuffers[index].emails[i].additional[1],
g_DynamicEmailThreadBuffers[index].emails[i].additional[2],
g_DynamicEmailThreadBuffers[index].emails[i].additional[3],
g_DynamicEmailThreadBuffers[index].emails[i].additional[4],
g_DynamicEmailThreadBuffers[index].emails[i].additional[5], // - CC
g_DynamicEmailThreadBuffers[index].emails[i].additional[6],
g_DynamicEmailThreadBuffers[index].emails[i].additional[7],
g_DynamicEmailThreadBuffers[index].emails[i].additional[8],
g_DynamicEmailThreadBuffers[index].emails[i].additional[9]) // - CC
BREAK
CASE EMAILER_FRANKLIN
FEEDIFY_EMAIL_MESSAGE(CHAR_FRANKLIN, g_AllEmails[em].eFrom, em, body,
g_DynamicEmailThreadBuffers[index].emails[i].additional[0],
g_DynamicEmailThreadBuffers[index].emails[i].additional[1],
g_DynamicEmailThreadBuffers[index].emails[i].additional[2],
g_DynamicEmailThreadBuffers[index].emails[i].additional[3],
g_DynamicEmailThreadBuffers[index].emails[i].additional[4],
g_DynamicEmailThreadBuffers[index].emails[i].additional[5], // - CC
g_DynamicEmailThreadBuffers[index].emails[i].additional[6],
g_DynamicEmailThreadBuffers[index].emails[i].additional[7],
g_DynamicEmailThreadBuffers[index].emails[i].additional[8],
g_DynamicEmailThreadBuffers[index].emails[i].additional[9]) // - CC
BREAK
CASE EMAILER_TREVOR_PHILIPS
FEEDIFY_EMAIL_MESSAGE(CHAR_TREVOR, g_AllEmails[em].eFrom, em, body,
g_DynamicEmailThreadBuffers[index].emails[i].additional[0],
g_DynamicEmailThreadBuffers[index].emails[i].additional[1],
g_DynamicEmailThreadBuffers[index].emails[i].additional[2],
g_DynamicEmailThreadBuffers[index].emails[i].additional[3],
g_DynamicEmailThreadBuffers[index].emails[i].additional[4],
g_DynamicEmailThreadBuffers[index].emails[i].additional[5], // - CC
g_DynamicEmailThreadBuffers[index].emails[i].additional[6],
g_DynamicEmailThreadBuffers[index].emails[i].additional[7],
g_DynamicEmailThreadBuffers[index].emails[i].additional[8],
g_DynamicEmailThreadBuffers[index].emails[i].additional[9]) // - CC
BREAK
ENDSWITCH
ENDIF
ENDPROC
//override content for thread
PROC OVERRIDE_CONTENT_FOR_DYNAMIC_THREAD(DYNAMIC_EMAIL_THREAD_NAMES thread, STRING override, BOOL noSubstrings = TRUE)
CDEBUG1LN(DEBUG_EMAIL, "Overriding thread ", ENUM_TO_INT(thread),
" with dynamic content: ", override,
". No substrings? ", PICK_STRING(noSubstrings, "TRUE", "FALSE"), ".")
INT index = GET_DYNAMIC_EMAIL_THREAD_BUFFER_INDEX(thread)
IF (index = -1)
CDEBUG1LN(DEBUG_EMAIL, "Override failed due to null thread index.")
SCRIPT_ASSERT("OVERRIDE_CONTENT_FOR_DYNAMIC_THREAD: Override failed due to null thread index.")
EXIT
ENDIF
IF g_DynamicEmailThreadBuffers[index].iProgress = 0
CDEBUG1LN(DEBUG_EMAIL, "Override failed due to no thread progress.")
SCRIPT_ASSERT("OVERRIDE_CONTENT_FOR_DYNAMIC_THREAD: Override failed due to no thread progress.")
EXIT
ENDIF
CDEBUG1LN(DEBUG_EMAIL, "Overriding thread at buffer index ", index,
". Buffer progress is ", g_DynamicEmailThreadBuffers[index].iProgress-1, ".")
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].bOverrideContent = TRUE
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].content = override
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].iOverrideAdditional = 0
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].additional[0] = ""
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].additional[1] = ""
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].additional[2] = ""
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].additional[3] = ""
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].additional[4] = ""
IF noSubstrings
PUSH_FEEDIFICATION_OF_DYNAMIC_THREAD(thread)
ENDIF
ENDPROC
//override content substring
PROC ADD_CONTENT_FOR_DYNAMIC_THREAD_SUBSTRING(DYNAMIC_EMAIL_THREAD_NAMES thread, STRING override)
CDEBUG1LN(DEBUG_EMAIL, "Adding content for dynamic thread ", ENUM_TO_INT(thread),"'s substring. Override string: ", override, ".")
INT index = GET_DYNAMIC_EMAIL_THREAD_BUFFER_INDEX(thread)
IF (index = -1)
CDEBUG1LN(DEBUG_EMAIL, "Adding content failed due to null thread index.")
SCRIPT_ASSERT("ADD_CONTENT_FOR_DYNAMIC_THREAD_SUBSTRING: Adding content failed due to null thread index.")
EXIT
ENDIF
IF g_DynamicEmailThreadBuffers[index].iProgress = 0
CDEBUG1LN(DEBUG_EMAIL, "Adding content failed due to no thread progress.")
SCRIPT_ASSERT("ADD_CONTENT_FOR_DYNAMIC_THREAD_SUBSTRING: Adding content failed due to no thread progress.")
EXIT
ENDIF
IF g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].iOverrideAdditional = EMAIL_OVERRIDE_SUBSTRING_MAX
CDEBUG1LN(DEBUG_EMAIL, "Adding content failed due to too many content override requests for this buffer.")
SCRIPT_ASSERT("ADD_CONTENT_FOR_DYNAMIC_THREAD_SUBSTRING: Adding content failed due to too many content override requests for this buffer.")
EXIT
ENDIF
CDEBUG1LN(DEBUG_EMAIL, "Adding content at buffer index ", index,
". Buffer progress is ", g_DynamicEmailThreadBuffers[index].iProgress-1, ".")
int at = g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].iOverrideAdditional
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].iOverrideAdditional++
g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].additional[at] = override
ENDPROC
PROC RELEASE_DYNAMIC_THREAD_HOLD_ON_BUFFER(DYNAMIC_EMAIL_THREAD_NAMES thread)
CDEBUG1LN(DEBUG_EMAIL, "Attempting to release dynamic thread", ENUM_TO_INT(thread), "'s hold on its buffer.")
IF thread = DYNAMIC_THREAD_BAIL_BONDS // 1510703
//If not before final bailbond complete
IF NOT IS_BIT_SET(g_savedGlobals.sBailBondData.iLauncherBitFlags, (ENUM_TO_INT(MAX_BAILBOND_IDS) -1))
CDEBUG1LN(DEBUG_EMAIL, "Preventing dynamic buffer release for DYNAMIC_THREAD_BAIL_BONDS due to the chain not being finished yet.")
EXIT
ENDIF
ENDIF
//Is the thread currently in a buffer?
INT index = GET_DYNAMIC_EMAIL_THREAD_BUFFER_INDEX(thread)
IF index = -1
CDEBUG1LN(DEBUG_EMAIL, "Failed to release buffer as the buffer index is null.")
EXIT
ENDIF
g_DynamicEmailThreadBuffers[index].bBufferCritical = FALSE // Buffer priority is lowered but its not purged until a new thread.
CDEBUG1LN(DEBUG_EMAIL, "Buffer released sucessfully.")
ENDPROC
PROC MAKE_INBOX_CONTIGUOUS( enumCharacterList character)
INT index = -1
SWITCH character
CASE CHAR_MICHAEL
index = ENUM_TO_INT(EMAILER_MICHAEL_DE_SANTO)
BREAK
CASE CHAR_FRANKLIN
index = ENUM_TO_INT(EMAILER_FRANKLIN)
BREAK
CASE CHAR_TREVOR
index = ENUM_TO_INT(EMAILER_TREVOR_PHILIPS)
BREAK
ENDSWITCH
IF index = -1
EXIT
ENDIF
IF g_Inboxes[index].iTotalMails < 1
CPRINTLN(DEBUG_EMAIL,"MAKE_INBOX_CONTIGUOUS: no mails to show")
EXIT
ENDIF
INT startat = g_Inboxes[index].iTotalMails-1
//
WHILE startat >= MAX_INBOX_LOGGED_MAILS_THREADS
startat -= MAX_INBOX_LOGGED_MAILS_THREADS
ENDWHILE
INT reach = g_Inboxes[index].iTotalMails
IF reach > MAX_INBOX_LOGGED_MAILS_THREADS
reach = MAX_INBOX_LOGGED_MAILS_THREADS
ENDIF
IF startat < 0 OR startat > MAX_INBOX_LOGGED_MAILS_THREADS-1
SCRIPT_ASSERT("Invalid startat value for inbox")
EXIT
ENDIF
CPRINTLN(DEBUG_EMAIL,"MAKE_INBOX_CONTIGUOUS: total mails ",g_Inboxes[index].iTotalMails)
INT endat = startat - (reach-1)
CPRINTLN(DEBUG_EMAIL,"MAKE_INBOX_CONTIGUOUS: endat pre ",endat)
IF endat < 0
endat = MAX_INBOX_LOGGED_MAILS_THREADS + endat
ENDIF
EMAIL_INBOX newInbox //make a new contiguous list in here
CPRINTLN(DEBUG_EMAIL,"MAKE_INBOX_CONTIGUOUS: startat ",startat)
CPRINTLN(DEBUG_EMAIL,"MAKE_INBOX_CONTIGUOUS: reach ",reach)
CPRINTLN(DEBUG_EMAIL,"MAKE_INBOX_CONTIGUOUS: endat ",endat)
INT i
REPEAT reach i
BOOL bValid = true
IF g_Inboxes[index].bDelete[endat]
bValid = FALSE
ENDIF
IF g_Inboxes[index].IsDynamic[endat]
INT tid = g_Inboxes[index].ThreadIndex[endat]
//use tid to find dynamic thread index
INT tind = -1
INT j = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS j
IF g_DynamicEmailThreadBuffers[j].registrationID = tid
tind = j
ENDIF
ENDREPEAT
IF tind = -1
bValid = FALSE
ENDIF
ENDIF
IF bValid //copy to new
INT ito = newInbox.iTotalMails
newInbox.EmailsLogIndex[ito] = g_Inboxes[index].EmailsLogIndex[endat]
newInbox.ThreadIndex[ito] = g_Inboxes[index].ThreadIndex[endat]
newInbox.HasFiredResponse[ito] = g_Inboxes[index].HasFiredResponse[endat]
newInbox.PickedResponseIndex[ito] = g_Inboxes[index].PickedResponseIndex[endat]
newInbox.HasBeenViewed[ito] = g_Inboxes[index].HasBeenViewed[endat]
newInbox.IsDynamic[ito] = g_Inboxes[index].IsDynamic[endat]
++newInbox.iTotalMails
ENDIF
++endat
IF endat = MAX_INBOX_LOGGED_MAILS_THREADS
endat = 0
ENDIF
ENDREPEAT
g_Inboxes[index].iTotalMails = newInbox.iTotalMails
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS i
g_Inboxes[index].bDelete[i] = FALSE
g_Inboxes[index].EmailsLogIndex[i] = newInbox.EmailsLogIndex[i]
g_Inboxes[index].ThreadIndex[i] = newInbox.ThreadIndex[i]
g_Inboxes[index].HasFiredResponse[i] = newInbox.HasFiredResponse[i]
g_Inboxes[index].PickedResponseIndex[i] = newInbox.PickedResponseIndex[i]
g_Inboxes[index].HasBeenViewed[i] = newInbox.HasBeenViewed[i]
g_Inboxes[index].IsDynamic[i] = newInbox.IsDynamic[i]
ENDREPEAT
ENDPROC
////////////Old methods that use the new dynamic thread stuff
FUNC INT FILL_SCALEFORM_INBOX_FOR_PED(SCALEFORM_INDEX sf, enumCharacterList character)
MAKE_INBOX_CONTIGUOUS(character)//avoids the dynamic email gap glitch
//TODO move this data into the charsheet later
INT index = -1
SWITCH character
CASE CHAR_MICHAEL
index = ENUM_TO_INT(EMAILER_MICHAEL_DE_SANTO)
BREAK
CASE CHAR_FRANKLIN
index = ENUM_TO_INT(EMAILER_FRANKLIN)
BREAK
CASE CHAR_TREVOR
index = ENUM_TO_INT(EMAILER_TREVOR_PHILIPS)
BREAK
ENDSWITCH
IF index = -1
RETURN 0
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(sf,"SET_DATA_SLOT_EMPTY")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(8)
END_SCALEFORM_MOVIE_METHOD()
CPRINTLN(DEBUG_EMAIL,"Total mails in inbox: ",g_Inboxes[index].iTotalMails)
IF g_Inboxes[index].iTotalMails < 1
//PRINTLN("")
RETURN 0
ENDIF
INT startat = g_Inboxes[index].iTotalMails-1
WHILE startat >= MAX_INBOX_LOGGED_MAILS_THREADS
startat -= MAX_INBOX_LOGGED_MAILS_THREADS
ENDWHILE
INT reach = g_Inboxes[index].iTotalMails
IF reach > MAX_INBOX_LOGGED_MAILS_THREADS
reach = MAX_INBOX_LOGGED_MAILS_THREADS
ENDIF
IF startat < 0 OR startat > MAX_INBOX_LOGGED_MAILS_THREADS-1
SCRIPT_ASSERT("Invalid startat value for inbox")
RETURN 0
ENDIF
INT i = 0
REPEAT reach i
CPRINTLN(DEBUG_EMAIL,"Startat: ",startat)
IF NOT g_Inboxes[index].IsDynamic[startat]
INT threadindex = g_Inboxes[index].ThreadIndex[startat]
INT logindex = g_Inboxes[index].EmailsLogIndex[startat]
CPRINTLN(DEBUG_EMAIL,"Thread and email value looked up : ",threadindex," ",logindex)
INT emailindex = g_AllEmailThreads[threadindex].ThreadEmailLog[logindex]
CPRINTLN(DEBUG_EMAIL,"Writing an entry to inbox for g_AllEmails index: ",emailindex)
INT iconint = 0 // deault to unread
IF g_Inboxes[index].HasBeenViewed[startat]
iconint = 1 //has been read
ENDIF
IF iconint = 1 //if open, see if needs to upgrade to no respo
IF g_AllEmails[emailindex].iResponses > 0
IF g_Inboxes[index].HasFiredResponse[startat] = FALSE
iconint = 2 //expects a response!!
ENDIF
ENDIF
ENDIF
TEXT_LABEL subject = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[emailindex].iTitleTag)
BEGIN_SCALEFORM_MOVIE_METHOD(sf,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(8)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iconint)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_ADDRESS_TAG(g_AllEmails[emailindex].eFrom))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(subject)
END_SCALEFORM_MOVIE_METHOD()
ELSE
//its a dynamic thread/email, finding the email is a little different
//SCRIPT_ASSERT("Dynamic email needs to be displayed here")
INT tid = g_Inboxes[index].ThreadIndex[startat]
//use tid to find dynamic thread index
INT tind = -1
INT j = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS j
IF g_DynamicEmailThreadBuffers[j].registrationID = tid
tind = j
ENDIF
ENDREPEAT
IF tind = -1
CPRINTLN(DEBUG_EMAIL,"FILL_SCALEFORM_INBOX_FOR_PED: Dynamic thread ID not found in buffer\n")
SCRIPT_ASSERT("FILL_SCALEFORM_INBOX_FOR_PED: Dynamic thread ID not found in buffer")
RETURN 1
ELSE
INT eind = g_Inboxes[index].EmailsLogIndex[startat]
//BOOL viewed = g_Inboxes[index].HasBeenViewed[startat]
INT iconint = 0 // deault to unread
IF g_Inboxes[index].HasBeenViewed[startat]
iconint = 1 //has been read
ENDIF
EMAIL_MESSAGE_ENUMS smail = g_DynamicEmailThreadBuffers[tind].emails[eind].sourceEmail
IF iconint = 1
IF g_AllEmails[smail].iResponses > 0
IF g_Inboxes[index].HasFiredResponse[startat] = FALSE
iconint = 2 //expects a response!!
ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 subject = RETRIEVE_EMAIL_STRING_TAG_BY_INDICE(g_AllEmails[smail].iTitleTag)
BEGIN_SCALEFORM_MOVIE_METHOD(sf,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(8)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iconint)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_EMAILER_ADDRESS_TAG(g_AllEmails[smail].eFrom))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(subject)
END_SCALEFORM_MOVIE_METHOD()
CPRINTLN(DEBUG_EMAIL,"DYNAMIC: thread ID ",tid," buffer id ",tind," email ind ",eind," email global enumind ",ENUM_TO_INT(smail))
ENDIF
ENDIF
startat--
IF startat < 0
startat = MAX_INBOX_LOGGED_MAILS_THREADS-1
ENDIF
ENDREPEAT
RETURN reach
ENDFUNC
////////////////////////////////////////////
///
/// Global saving calls
///
///
///
///
///
///////////////////////
PROC SAVE_EMAIL_SYSTEM_STATE()
//SCRIPT_ASSERT("SAVE_EMAIL_SYSTEM_STATE")
//fill out g_savedGlobals.sEmailData
//EmailSavedInbox InboxSnapshots[TOTAL_INBOXES]
//g_savedGlobals.sEmailData.InboxSnapshots[]
INT i = 0
REPEAT TOTAL_INBOXES i
#if USE_CLF_DLC
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxTotalMailsIn = g_Inboxes[i].iTotalMails
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE <clf>: Saved inbox with ",g_Inboxes[i].iTotalMails ," total mails")
INT j = 0
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS j
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxEmailLogIndices[j] = g_Inboxes[i].EmailsLogIndex[j]
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxThreadIndex[j] = g_Inboxes[i].ThreadIndex[j]
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxHasFiredResponses[j] = g_Inboxes[i].HasFiredResponse[j]
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxPickedResponseIndices[j] = g_Inboxes[i].PickedResponseIndex[j]
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxHasBeenViewed[j] = g_Inboxes[i].HasBeenViewed[j]
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxIsDynamic[j] = g_Inboxes[i].IsDynamic[j]
ENDREPEAT
#endif
#if USE_NRM_DLC
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxTotalMailsIn = g_Inboxes[i].iTotalMails
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE <clf>: Saved inbox with ",g_Inboxes[i].iTotalMails ," total mails")
INT j = 0
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS j
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxEmailLogIndices[j] = g_Inboxes[i].EmailsLogIndex[j]
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxThreadIndex[j] = g_Inboxes[i].ThreadIndex[j]
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxHasFiredResponses[j] = g_Inboxes[i].HasFiredResponse[j]
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxPickedResponseIndices[j] = g_Inboxes[i].PickedResponseIndex[j]
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxHasBeenViewed[j] = g_Inboxes[i].HasBeenViewed[j]
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxIsDynamic[j] = g_Inboxes[i].IsDynamic[j]
ENDREPEAT
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
g_savedGlobals.sEmailData.InboxSnapshots[i].InboxTotalMailsIn = g_Inboxes[i].iTotalMails
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: Saved inbox with ",g_Inboxes[i].iTotalMails ," total mails")
INT j = 0
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS j
g_savedGlobals.sEmailData.InboxSnapshots[i].InboxEmailLogIndices[j] = g_Inboxes[i].EmailsLogIndex[j]
g_savedGlobals.sEmailData.InboxSnapshots[i].InboxThreadIndex[j] = g_Inboxes[i].ThreadIndex[j]
g_savedGlobals.sEmailData.InboxSnapshots[i].InboxHasFiredResponses[j] = g_Inboxes[i].HasFiredResponse[j]
g_savedGlobals.sEmailData.InboxSnapshots[i].InboxPickedResponseIndices[j] = g_Inboxes[i].PickedResponseIndex[j]
g_savedGlobals.sEmailData.InboxSnapshots[i].InboxHasBeenViewed[j] = g_Inboxes[i].HasBeenViewed[j]
g_savedGlobals.sEmailData.InboxSnapshots[i].InboxIsDynamic[j] = g_Inboxes[i].IsDynamic[j]
ENDREPEAT
#endif
#endif
ENDREPEAT
//active dynamic thread states
//EmailSavedDynamicThread DynamicThreadBufferSnapshots[DYNAMIC_EMAIL_THREAD_BUFFERS]
i = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS i
//g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i]
#if USE_CLF_DLC
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].BelongsTo = g_DynamicEmailThreadBuffers[i].belongsTo
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].AssignedID = g_DynamicEmailThreadBuffers[i].registrationID
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].isCritical = g_DynamicEmailThreadBuffers[i].bBufferCritical
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].iParticipants = g_DynamicEmailThreadBuffers[i].iParticipants
INT j = 0
REPEAT MAX_DYNAMIC_EMAIL_THREAD_PARTICIPANTS j
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].participantIDs[j] = g_DynamicEmailThreadBuffers[i].Participants[j]
ENDREPEAT
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].iProgress = g_DynamicEmailThreadBuffers[i].iProgress
j = 0
REPEAT DYNAMIC_EMAIL_THREAD_MAX_LENGTH j
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].sourceEmail = g_DynamicEmailThreadBuffers[i].emails[j].sourceEmail
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].bOverrideContent = g_DynamicEmailThreadBuffers[i].emails[j].bOverrideContent
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].content = g_DynamicEmailThreadBuffers[i].emails[j].content
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].iOverrideAdditional = g_DynamicEmailThreadBuffers[i].emails[j].iOverrideAdditional
INT k = 0
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS k // ADDED BY CC
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].additional[k] = g_DynamicEmailThreadBuffers[i].emails[j].additional[k]
ENDREPEAT
ENDREPEAT
#endif
#if USE_NRM_DLC
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].BelongsTo = g_DynamicEmailThreadBuffers[i].belongsTo
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].AssignedID = g_DynamicEmailThreadBuffers[i].registrationID
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].isCritical = g_DynamicEmailThreadBuffers[i].bBufferCritical
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].iParticipants = g_DynamicEmailThreadBuffers[i].iParticipants
INT j = 0
REPEAT MAX_DYNAMIC_EMAIL_THREAD_PARTICIPANTS j
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].participantIDs[j] = g_DynamicEmailThreadBuffers[i].Participants[j]
ENDREPEAT
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].iProgress = g_DynamicEmailThreadBuffers[i].iProgress
j = 0
REPEAT DYNAMIC_EMAIL_THREAD_MAX_LENGTH j
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].sourceEmail = g_DynamicEmailThreadBuffers[i].emails[j].sourceEmail
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].bOverrideContent = g_DynamicEmailThreadBuffers[i].emails[j].bOverrideContent
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].content = g_DynamicEmailThreadBuffers[i].emails[j].content
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].iOverrideAdditional = g_DynamicEmailThreadBuffers[i].emails[j].iOverrideAdditional
INT k = 0
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS k // ADDED BY CC
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].additional[k] = g_DynamicEmailThreadBuffers[i].emails[j].additional[k]
ENDREPEAT
ENDREPEAT
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].BelongsTo = g_DynamicEmailThreadBuffers[i].belongsTo
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].AssignedID = g_DynamicEmailThreadBuffers[i].registrationID
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].isCritical = g_DynamicEmailThreadBuffers[i].bBufferCritical
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].iParticipants = g_DynamicEmailThreadBuffers[i].iParticipants
INT j = 0
REPEAT MAX_DYNAMIC_EMAIL_THREAD_PARTICIPANTS j
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].participantIDs[j] = g_DynamicEmailThreadBuffers[i].Participants[j]
ENDREPEAT
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].iProgress = g_DynamicEmailThreadBuffers[i].iProgress
j = 0
REPEAT DYNAMIC_EMAIL_THREAD_MAX_LENGTH j
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].sourceEmail = g_DynamicEmailThreadBuffers[i].emails[j].sourceEmail
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].bOverrideContent = g_DynamicEmailThreadBuffers[i].emails[j].bOverrideContent
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].content = g_DynamicEmailThreadBuffers[i].emails[j].content
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].iOverrideAdditional = g_DynamicEmailThreadBuffers[i].emails[j].iOverrideAdditional
INT k = 0
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS k // ADDED BY CC
g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].additional[k] = g_DynamicEmailThreadBuffers[i].emails[j].additional[k]
ENDREPEAT
ENDREPEAT
#endif
#endif
ENDREPEAT
//static thread progress states TOTAL_EMAIL_THREADS_IN_GAME
//EmailSavedStaticThread StaticThreadSnapshots[TOTAL_EMAIL_THREADS_IN_GAME]
i = 0
REPEAT TOTAL_EMAIL_THREADS_IN_GAME i
#if USE_CLF_DLC
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].active = g_AllEmailThreads[i].bActive
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].ended = g_AllEmailThreads[i].bEnded
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].blockedForResponse = g_AllEmailThreads[i].bBLockedUntilResponse
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].iCurrentlyAt = g_AllEmailThreads[i].iCurrentlyAt
INT j
CPRINTLN(DEBUG_EMAIL,"DebugMailLogDump <clf>: on save ", i, " - mails in log ",g_AllEmailThreads[i].iMailsInLog)
REPEAT MAX_THREAD_LOG_LENGTH j
IF j < g_AllEmailThreads[i].iMailsInLog
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] = g_AllEmailThreads[i].ThreadEmailLog[j]+1
ELSE
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] = -1
ENDIF
PRINTINT(g_AllEmailThreads[i].ThreadEmailLog[j])
PRINTSTRING(":")
ENDREPEAT
PRINTNL()
#endif
#if USE_NRM_DLC
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].active = g_AllEmailThreads[i].bActive
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].ended = g_AllEmailThreads[i].bEnded
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].blockedForResponse = g_AllEmailThreads[i].bBLockedUntilResponse
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].iCurrentlyAt = g_AllEmailThreads[i].iCurrentlyAt
INT j
CPRINTLN(DEBUG_EMAIL,"DebugMailLogDump <clf>: on save ", i, " - mails in log ",g_AllEmailThreads[i].iMailsInLog)
REPEAT MAX_THREAD_LOG_LENGTH j
IF j < g_AllEmailThreads[i].iMailsInLog
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] = g_AllEmailThreads[i].ThreadEmailLog[j]+1
ELSE
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] = -1
ENDIF
PRINTINT(g_AllEmailThreads[i].ThreadEmailLog[j])
PRINTSTRING(":")
ENDREPEAT
PRINTNL()
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
g_savedGlobals.sEmailData.StaticThreadSnapshots[i].active = g_AllEmailThreads[i].bActive
g_savedGlobals.sEmailData.StaticThreadSnapshots[i].ended = g_AllEmailThreads[i].bEnded
g_savedGlobals.sEmailData.StaticThreadSnapshots[i].blockedForResponse = g_AllEmailThreads[i].bBLockedUntilResponse
g_savedGlobals.sEmailData.StaticThreadSnapshots[i].iCurrentlyAt = g_AllEmailThreads[i].iCurrentlyAt
INT j
CPRINTLN(DEBUG_EMAIL,"DebugMailLogDump: on save ", i, " - mails in log ",g_AllEmailThreads[i].iMailsInLog)
REPEAT MAX_THREAD_LOG_LENGTH j
IF j < g_AllEmailThreads[i].iMailsInLog
g_savedGlobals.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] = g_AllEmailThreads[i].ThreadEmailLog[j]+1
ELSE
g_savedGlobals.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] = -1
ENDIF
PRINTINT(g_AllEmailThreads[i].ThreadEmailLog[j])
PRINTSTRING(":")
ENDREPEAT
PRINTNL()
#endif
#endif
ENDREPEAT
//DYNAMIC_THREAD_EMAIL_PENDING DynamicPendingMails[DYNAMIC_THREAD_EMAIL_PENDING]
//DYNAMIC_THREAD_EMAIL_PENDING g_DynamicEmailsPending[MAX_DYNAMIC_EMAILS_PENDING]
i = 0
REPEAT MAX_DYNAMIC_EMAILS_PENDING i
#if USE_CLF_DLC
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].eTargetThread = g_DynamicEmailsPending[i].eTargetThread
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].eEmailID = g_DynamicEmailsPending[i].eEmailID
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].iInGameHoursBeforeTrigger = g_DynamicEmailsPending[i].iInGameHoursBeforeTrigger
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].bOverrideContent = g_DynamicEmailsPending[i].bOverrideContent
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].content = g_DynamicEmailsPending[i].content
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].iOverrideAdditional = g_DynamicEmailsPending[i].iOverrideAdditional
INT j = 0
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS j // ADDED BY CC
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].additional[j] = g_DynamicEmailsPending[i].additional[j]
ENDREPEAT
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].RegIDOfTarget = g_DynamicEmailsPending[i].RegIDOfTarget
#endif
#if USE_NRM_DLC
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].eTargetThread = g_DynamicEmailsPending[i].eTargetThread
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].eEmailID = g_DynamicEmailsPending[i].eEmailID
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].iInGameHoursBeforeTrigger = g_DynamicEmailsPending[i].iInGameHoursBeforeTrigger
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].bOverrideContent = g_DynamicEmailsPending[i].bOverrideContent
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].content = g_DynamicEmailsPending[i].content
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].iOverrideAdditional = g_DynamicEmailsPending[i].iOverrideAdditional
INT j = 0
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS j // ADDED BY CC
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].additional[j] = g_DynamicEmailsPending[i].additional[j]
ENDREPEAT
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].RegIDOfTarget = g_DynamicEmailsPending[i].RegIDOfTarget
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
g_savedGlobals.sEmailData.DynamicPendingMails[i].eTargetThread = g_DynamicEmailsPending[i].eTargetThread
g_savedGlobals.sEmailData.DynamicPendingMails[i].eEmailID = g_DynamicEmailsPending[i].eEmailID
g_savedGlobals.sEmailData.DynamicPendingMails[i].iInGameHoursBeforeTrigger = g_DynamicEmailsPending[i].iInGameHoursBeforeTrigger
g_savedGlobals.sEmailData.DynamicPendingMails[i].bOverrideContent = g_DynamicEmailsPending[i].bOverrideContent
g_savedGlobals.sEmailData.DynamicPendingMails[i].content = g_DynamicEmailsPending[i].content
g_savedGlobals.sEmailData.DynamicPendingMails[i].iOverrideAdditional = g_DynamicEmailsPending[i].iOverrideAdditional
INT j = 0
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS j // ADDED BY CC
g_savedGlobals.sEmailData.DynamicPendingMails[i].additional[j] = g_DynamicEmailsPending[i].additional[j]
ENDREPEAT
g_savedGlobals.sEmailData.DynamicPendingMails[i].RegIDOfTarget = g_DynamicEmailsPending[i].RegIDOfTarget
#endif
#endif
ENDREPEAT
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: set to save ",g_iDynamicEmailsPending, " pending dynamic mails.")
#IF IS_DEBUG_BUILD
INT dbg = 0
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: Dumping inbox state")
REPEAT TOTAL_INBOXES dbg
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: Inbox ",g_Inboxes[dbg].iTotalMails," inbox state on save:")
INT dbj = 0
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS dbj
CPRINTLN(DEBUG_EMAIL,"MAILSTATE:",dbj,":",
g_Inboxes[dbg].EmailsLogIndex[dbj],":",
g_Inboxes[dbg].ThreadIndex[dbj],":",
g_Inboxes[dbg].HasFiredResponse[dbj],":",
g_Inboxes[dbg].PickedResponseIndex[dbj],":",
g_Inboxes[dbg].HasBeenViewed[dbj],":",g_Inboxes[dbg].IsDynamic[dbj])
ENDREPEAT
ENDREPEAT
#ENDIF
ENDPROC
PROC SAVE_EMAIL_SYSTEM_STATE_CLF()
//SCRIPT_ASSERT("SAVE_EMAIL_SYSTEM_STATE")
//fill out g_savedGlobals.sEmailData
//EmailSavedInbox InboxSnapshots[TOTAL_INBOXES]
//g_savedGlobals.sEmailData.InboxSnapshots[]
INT i = 0
REPEAT TOTAL_INBOXES i
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxTotalMailsIn = g_Inboxes[i].iTotalMails
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: Saved inbox with ",g_Inboxes[i].iTotalMails ," total mails")
INT j = 0
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS j
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxEmailLogIndices[j] = g_Inboxes[i].EmailsLogIndex[j]
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxThreadIndex[j] = g_Inboxes[i].ThreadIndex[j]
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxHasFiredResponses[j] = g_Inboxes[i].HasFiredResponse[j]
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxPickedResponseIndices[j] = g_Inboxes[i].PickedResponseIndex[j]
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxHasBeenViewed[j] = g_Inboxes[i].HasBeenViewed[j]
g_savedGlobalsClifford.sEmailData.InboxSnapshots[i].InboxIsDynamic[j] = g_Inboxes[i].IsDynamic[j]
ENDREPEAT
ENDREPEAT
i = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS i
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].BelongsTo = g_DynamicEmailThreadBuffers[i].belongsTo
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].AssignedID = g_DynamicEmailThreadBuffers[i].registrationID
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].isCritical = g_DynamicEmailThreadBuffers[i].bBufferCritical
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].iParticipants = g_DynamicEmailThreadBuffers[i].iParticipants
INT j = 0
REPEAT MAX_DYNAMIC_EMAIL_THREAD_PARTICIPANTS j
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].participantIDs[j] = g_DynamicEmailThreadBuffers[i].Participants[j]
ENDREPEAT
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].iProgress = g_DynamicEmailThreadBuffers[i].iProgress
j = 0
REPEAT DYNAMIC_EMAIL_THREAD_MAX_LENGTH j
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].sourceEmail = g_DynamicEmailThreadBuffers[i].emails[j].sourceEmail
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].bOverrideContent = g_DynamicEmailThreadBuffers[i].emails[j].bOverrideContent
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].content = g_DynamicEmailThreadBuffers[i].emails[j].content
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].iOverrideAdditional = g_DynamicEmailThreadBuffers[i].emails[j].iOverrideAdditional
INT k = 0
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS k // ADDED BY CC
g_savedGlobalsClifford.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].additional[k] = g_DynamicEmailThreadBuffers[i].emails[j].additional[k]
ENDREPEAT
ENDREPEAT
ENDREPEAT
i = 0
REPEAT TOTAL_EMAIL_THREADS_IN_GAME i
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].active = g_AllEmailThreads[i].bActive
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].ended = g_AllEmailThreads[i].bEnded
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].blockedForResponse = g_AllEmailThreads[i].bBLockedUntilResponse
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].iCurrentlyAt = g_AllEmailThreads[i].iCurrentlyAt
INT j
CPRINTLN(DEBUG_EMAIL,"DebugMailLogDump: on save ", i, " - mails in log ",g_AllEmailThreads[i].iMailsInLog)
REPEAT MAX_THREAD_LOG_LENGTH j
IF j < g_AllEmailThreads[i].iMailsInLog
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] = g_AllEmailThreads[i].ThreadEmailLog[j]+1
ELSE
g_savedGlobalsClifford.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] = -1
ENDIF
PRINTINT(g_AllEmailThreads[i].ThreadEmailLog[j])
PRINTSTRING(":")
ENDREPEAT
PRINTNL()
ENDREPEAT
i = 0
REPEAT MAX_DYNAMIC_EMAILS_PENDING i
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].eTargetThread = g_DynamicEmailsPending[i].eTargetThread
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].eEmailID = g_DynamicEmailsPending[i].eEmailID
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].iInGameHoursBeforeTrigger = g_DynamicEmailsPending[i].iInGameHoursBeforeTrigger
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].bOverrideContent = g_DynamicEmailsPending[i].bOverrideContent
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].content = g_DynamicEmailsPending[i].content
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].iOverrideAdditional = g_DynamicEmailsPending[i].iOverrideAdditional
INT j = 0
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS j // ADDED BY CC
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].additional[j] = g_DynamicEmailsPending[i].additional[j]
ENDREPEAT
g_savedGlobalsClifford.sEmailData.DynamicPendingMails[i].RegIDOfTarget = g_DynamicEmailsPending[i].RegIDOfTarget
ENDREPEAT
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: set to save ",g_iDynamicEmailsPending, " pending dynamic mails.")
#IF IS_DEBUG_BUILD
INT dbg = 0
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: Dumping inbox state")
REPEAT TOTAL_INBOXES dbg
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: Inbox ",g_Inboxes[dbg].iTotalMails," inbox state on save:")
INT dbj = 0
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS dbj
CPRINTLN(DEBUG_EMAIL,"MAILSTATE:",dbj,":",
g_Inboxes[dbg].EmailsLogIndex[dbj],":",
g_Inboxes[dbg].ThreadIndex[dbj],":",
g_Inboxes[dbg].HasFiredResponse[dbj],":",
g_Inboxes[dbg].PickedResponseIndex[dbj],":",
g_Inboxes[dbg].HasBeenViewed[dbj],":",g_Inboxes[dbg].IsDynamic[dbj])
ENDREPEAT
ENDREPEAT
#ENDIF
ENDPROC
PROC SAVE_EMAIL_SYSTEM_STATE_NRM()
//SCRIPT_ASSERT("SAVE_EMAIL_SYSTEM_STATE")
//fill out g_savedGlobals.sEmailData
//EmailSavedInbox InboxSnapshots[TOTAL_INBOXES]
//g_savedGlobals.sEmailData.InboxSnapshots[]
INT i = 0
REPEAT TOTAL_INBOXES i
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxTotalMailsIn = g_Inboxes[i].iTotalMails
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: Saved inbox with ",g_Inboxes[i].iTotalMails ," total mails")
INT j = 0
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS j
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxEmailLogIndices[j] = g_Inboxes[i].EmailsLogIndex[j]
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxThreadIndex[j] = g_Inboxes[i].ThreadIndex[j]
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxHasFiredResponses[j] = g_Inboxes[i].HasFiredResponse[j]
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxPickedResponseIndices[j] = g_Inboxes[i].PickedResponseIndex[j]
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxHasBeenViewed[j] = g_Inboxes[i].HasBeenViewed[j]
g_savedGlobalsnorman.sEmailData.InboxSnapshots[i].InboxIsDynamic[j] = g_Inboxes[i].IsDynamic[j]
ENDREPEAT
ENDREPEAT
i = 0
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS i
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].BelongsTo = g_DynamicEmailThreadBuffers[i].belongsTo
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].AssignedID = g_DynamicEmailThreadBuffers[i].registrationID
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].isCritical = g_DynamicEmailThreadBuffers[i].bBufferCritical
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].iParticipants = g_DynamicEmailThreadBuffers[i].iParticipants
INT j = 0
REPEAT MAX_DYNAMIC_EMAIL_THREAD_PARTICIPANTS j
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].participantIDs[j] = g_DynamicEmailThreadBuffers[i].Participants[j]
ENDREPEAT
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].iProgress = g_DynamicEmailThreadBuffers[i].iProgress
j = 0
REPEAT DYNAMIC_EMAIL_THREAD_MAX_LENGTH j
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].sourceEmail = g_DynamicEmailThreadBuffers[i].emails[j].sourceEmail
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].bOverrideContent = g_DynamicEmailThreadBuffers[i].emails[j].bOverrideContent
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].content = g_DynamicEmailThreadBuffers[i].emails[j].content
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].iOverrideAdditional = g_DynamicEmailThreadBuffers[i].emails[j].iOverrideAdditional
INT k = 0
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS k // ADDED BY CC
g_savedGlobalsnorman.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].additional[k] = g_DynamicEmailThreadBuffers[i].emails[j].additional[k]
ENDREPEAT
ENDREPEAT
ENDREPEAT
i = 0
REPEAT TOTAL_EMAIL_THREADS_IN_GAME i
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].active = g_AllEmailThreads[i].bActive
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].ended = g_AllEmailThreads[i].bEnded
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].blockedForResponse = g_AllEmailThreads[i].bBLockedUntilResponse
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].iCurrentlyAt = g_AllEmailThreads[i].iCurrentlyAt
INT j
CPRINTLN(DEBUG_EMAIL,"DebugMailLogDump: on save ", i, " - mails in log ",g_AllEmailThreads[i].iMailsInLog)
REPEAT MAX_THREAD_LOG_LENGTH j
IF j < g_AllEmailThreads[i].iMailsInLog
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] = g_AllEmailThreads[i].ThreadEmailLog[j]+1
ELSE
g_savedGlobalsnorman.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] = -1
ENDIF
PRINTINT(g_AllEmailThreads[i].ThreadEmailLog[j])
PRINTSTRING(":")
ENDREPEAT
PRINTNL()
ENDREPEAT
i = 0
REPEAT MAX_DYNAMIC_EMAILS_PENDING i
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].eTargetThread = g_DynamicEmailsPending[i].eTargetThread
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].eEmailID = g_DynamicEmailsPending[i].eEmailID
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].iInGameHoursBeforeTrigger = g_DynamicEmailsPending[i].iInGameHoursBeforeTrigger
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].bOverrideContent = g_DynamicEmailsPending[i].bOverrideContent
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].content = g_DynamicEmailsPending[i].content
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].iOverrideAdditional = g_DynamicEmailsPending[i].iOverrideAdditional
INT j = 0
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS j // ADDED BY CC
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].additional[j] = g_DynamicEmailsPending[i].additional[j]
ENDREPEAT
g_savedGlobalsnorman.sEmailData.DynamicPendingMails[i].RegIDOfTarget = g_DynamicEmailsPending[i].RegIDOfTarget
ENDREPEAT
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: set to save ",g_iDynamicEmailsPending, " pending dynamic mails.")
#IF IS_DEBUG_BUILD
INT dbg = 0
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: Dumping inbox state")
REPEAT TOTAL_INBOXES dbg
CPRINTLN(DEBUG_EMAIL,"SAVE_EMAIL_SYSTEM_STATE: Inbox ",g_Inboxes[dbg].iTotalMails," inbox state on save:")
INT dbj = 0
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS dbj
CPRINTLN(DEBUG_EMAIL,"MAILSTATE:",dbj,":",
g_Inboxes[dbg].EmailsLogIndex[dbj],":",
g_Inboxes[dbg].ThreadIndex[dbj],":",
g_Inboxes[dbg].HasFiredResponse[dbj],":",
g_Inboxes[dbg].PickedResponseIndex[dbj],":",
g_Inboxes[dbg].HasBeenViewed[dbj],":",g_Inboxes[dbg].IsDynamic[dbj])
ENDREPEAT
ENDREPEAT
#ENDIF
ENDPROC
/// PURPOSE:
/// Resets the email system and content to inital values
PROC INITIALISE_EMAIL_SYSTEM()
INT i = 0
REPEAT MAX_EMAIL_FEED_BUFFER_ENTRIES i
IF g_iEmailFeedBuffer[i] != -1
g_iEmailFeedBuffer[i] = -1
ENDIF
ENDREPEAT
g_iUnreadEmailsSP0 = 0
g_iUnreadEmailsSP1 = 0
g_iUnreadEmailsSP2 = 0
REPEAT TOTAL_EMAIL_THREADS_IN_GAME i
g_AllEmailThreads[i].iCurrentlyAt = 0
g_AllEmailThreads[i].iMailsInLog = 0
g_AllEmailThreads[i].bActive = FALSE
ENDREPEAT
REPEAT TOTAL_EMAILS_IN_GAME i
//g_AllEmails[i].iResponses = 0
g_AllEmails[i].bEmailBlocksThread = FALSE
ENDREPEAT
REPEAT TOTAL_INBOXES i
g_Inboxes[i].iTotalMails = 0
ENDREPEAT
//////////////////////////
INITIALISE_EMAIL_SYSTEM_CONTENT()
ENDPROC
PROC LOAD_EMAIL_SYSTEM_STATE()
CPRINTLN(DEBUG_EMAIL, "Restoring email system state from saved globals.")
INT i, j, k
REPEAT TOTAL_INBOXES i
g_Inboxes[i].iTotalMails = g_savedGlobals.sEmailData.InboxSnapshots[i].InboxTotalMailsIn
CDEBUG1LN(DEBUG_EMAIL, "Loading inbox ", i, " with ", g_Inboxes[i].iTotalMails ," total mails.")
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS j
CDEBUG2LN(DEBUG_EMAIL, "Restoring logged mail thread ", j, ".")
g_Inboxes[i].EmailsLogIndex[j] = g_savedGlobals.sEmailData.InboxSnapshots[i].InboxEmailLogIndices[j]
g_Inboxes[i].ThreadIndex[j] = g_savedGlobals.sEmailData.InboxSnapshots[i].InboxThreadIndex[j]
g_Inboxes[i].HasFiredResponse[j] = g_savedGlobals.sEmailData.InboxSnapshots[i].InboxHasFiredResponses[j]
g_Inboxes[i].PickedResponseIndex[j] = g_savedGlobals.sEmailData.InboxSnapshots[i].InboxPickedResponseIndices[j]
g_Inboxes[i].HasBeenViewed[j] = g_savedGlobals.sEmailData.InboxSnapshots[i].InboxHasBeenViewed[j]
g_Inboxes[i].IsDynamic[j] = g_savedGlobals.sEmailData.InboxSnapshots[i].InboxIsDynamic[j]
CDEBUG3LN(DEBUG_EMAIL, "<LOGGED-THREAD> Log index: ", g_Inboxes[i].EmailsLogIndex[j])
CDEBUG3LN(DEBUG_EMAIL, "<LOGGED-THREAD> Thread index: ", g_Inboxes[i].ThreadIndex[j])
CDEBUG3LN(DEBUG_EMAIL, "<LOGGED-THREAD> Has fired response: ", PICK_STRING(g_Inboxes[i].HasFiredResponse[j], "TRUE", "FALSE"))
CDEBUG3LN(DEBUG_EMAIL, "<LOGGED-THREAD> Picked response index: ", g_Inboxes[i].PickedResponseIndex[j])
CDEBUG3LN(DEBUG_EMAIL, "<LOGGED-THREAD> Has been viewed: ", PICK_STRING(g_Inboxes[i].HasBeenViewed[j], "TRUE", "FALSE"))
CDEBUG3LN(DEBUG_EMAIL, "<LOGGED-THREAD> Is Dynamic: ", PICK_STRING(g_Inboxes[i].IsDynamic[j], "TRUE", "FALSE"))
ENDREPEAT
ENDREPEAT
REPEAT DYNAMIC_EMAIL_THREAD_BUFFERS i
CDEBUG1LN(DEBUG_EMAIL, "Loading dynamic email thread ", i, ".")
g_DynamicEmailThreadBuffers[i].belongsTo = g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].BelongsTo
g_DynamicEmailThreadBuffers[i].bBufferCritical = g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].isCritical
g_DynamicEmailThreadBuffers[i].iParticipants = g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].iParticipants
g_DynamicEmailThreadBuffers[i].registrationID = g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].AssignedID
g_DynamicEmailThreadBuffers[i].iProgress = g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].iProgress
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-THREAD> Belongs to: ", ENUM_TO_INT(g_DynamicEmailThreadBuffers[i].belongsTo))
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-THREAD> Buffer critical: ", PICK_STRING(g_DynamicEmailThreadBuffers[i].bBufferCritical, "TRUE", "FALSE"))
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-THREAD> Registration ID: ", g_DynamicEmailThreadBuffers[i].registrationID)
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-THREAD> Progress: ", g_DynamicEmailThreadBuffers[i].iProgress)
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-THREAD> Participants: ", g_DynamicEmailThreadBuffers[i].iParticipants)
REPEAT MAX_DYNAMIC_EMAIL_THREAD_PARTICIPANTS j
g_DynamicEmailThreadBuffers[i].Participants[j]= g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].participantIDs[j]
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-THREAD> Participant ", j, ": ", ENUM_TO_INT(g_DynamicEmailThreadBuffers[i].Participants[j]), ".")
ENDREPEAT
REPEAT DYNAMIC_EMAIL_THREAD_MAX_LENGTH j
CDEBUG2LN(DEBUG_EMAIL, "Loading thread buffer ", j, ".")
g_DynamicEmailThreadBuffers[i].emails[j].sourceEmail = g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].sourceEmail
g_DynamicEmailThreadBuffers[i].emails[j].bOverrideContent = g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].bOverrideContent
g_DynamicEmailThreadBuffers[i].emails[j].content = g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].content
g_DynamicEmailThreadBuffers[i].emails[j].iOverrideAdditional = g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].iOverrideAdditional
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-BUFFER> Source email: ", ENUM_TO_INT(g_DynamicEmailThreadBuffers[i].emails[j].sourceEmail))
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-BUFFER> Override content: ", PICK_STRING(g_DynamicEmailThreadBuffers[i].emails[j].bOverrideContent, "TRUE", "FALSE"))
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-BUFFER> Content: ", g_DynamicEmailThreadBuffers[i].emails[j].content)
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-BUFFER> Override additional: ", g_DynamicEmailThreadBuffers[i].emails[j].iOverrideAdditional)
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS k // ADDED BY CC
g_DynamicEmailThreadBuffers[i].emails[j].additional[k] = g_savedGlobals.sEmailData.DynamicThreadBufferSnapshots[i].DynamicEmailData[j].additional[k]
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-BUFFER> Additional ", k, ": ", g_DynamicEmailThreadBuffers[i].emails[j].additional[k])
ENDREPEAT
ENDREPEAT
ENDREPEAT
REPEAT TOTAL_EMAIL_THREADS_IN_GAME i
CDEBUG1LN(DEBUG_EMAIL, "Loading global email thread data ", i, ".")
g_AllEmailThreads[i].bActive = g_savedGlobals.sEmailData.StaticThreadSnapshots[i].active
g_AllEmailThreads[i].bEnded = g_savedGlobals.sEmailData.StaticThreadSnapshots[i].ended
g_AllEmailThreads[i].bBLockedUntilResponse = g_savedGlobals.sEmailData.StaticThreadSnapshots[i].blockedForResponse
g_AllEmailThreads[i].iCurrentlyAt = g_savedGlobals.sEmailData.StaticThreadSnapshots[i].iCurrentlyAt
CDEBUG3LN(DEBUG_EMAIL, "<GLOBAL-THREAD> Active: ", PICK_STRING(g_AllEmailThreads[i].bActive, "TRUE", "FALSE"))
CDEBUG3LN(DEBUG_EMAIL, "<GLOBAL-THREAD> Ended: ", PICK_STRING(g_AllEmailThreads[i].bEnded, "TRUE", "FALSE"))
CDEBUG3LN(DEBUG_EMAIL, "<GLOBAL-THREAD> Blocked until response: ", PICK_STRING(g_AllEmailThreads[i].bBLockedUntilResponse, "TRUE", "FALSE"))
CDEBUG3LN(DEBUG_EMAIL, "<GLOBAL-THREAD> Currently at: ", g_AllEmailThreads[i].iCurrentlyAt)
REPEAT MAX_THREAD_LOG_LENGTH j
IF g_savedGlobals.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] > 0
CDEBUG3LN(DEBUG_EMAIL, "<GLOBAL-THREAD> Found data in log index ", j, ": ", g_AllEmailThreads[i].ThreadEmailLog[j])
g_AllEmailThreads[i].ThreadEmailLog[j] = g_savedGlobals.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j]-1
++g_AllEmailThreads[i].iMailsInLog
ENDIF
ENDREPEAT
ENDREPEAT
g_iDynamicEmailsPending = 0
REPEAT MAX_DYNAMIC_EMAILS_PENDING i
CDEBUG1LN(DEBUG_EMAIL, "Loading dynamic email pending ", i, ".")
g_DynamicEmailsPending[i].eTargetThread = g_savedGlobals.sEmailData.DynamicPendingMails[i].eTargetThread
g_DynamicEmailsPending[i].eEmailID = g_savedGlobals.sEmailData.DynamicPendingMails[i].eEmailID
g_DynamicEmailsPending[i].iInGameHoursBeforeTrigger = g_savedGlobals.sEmailData.DynamicPendingMails[i].iInGameHoursBeforeTrigger
g_DynamicEmailsPending[i].bOverrideContent = g_savedGlobals.sEmailData.DynamicPendingMails[i].bOverrideContent
g_DynamicEmailsPending[i].content = g_savedGlobals.sEmailData.DynamicPendingMails[i].content
g_DynamicEmailsPending[i].iOverrideAdditional = g_savedGlobals.sEmailData.DynamicPendingMails[i].iOverrideAdditional
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-PENDING> Target thread: ", ENUM_TO_INT(g_DynamicEmailsPending[i].eTargetThread))
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-PENDING> Email ID: ", ENUM_TO_INT(g_DynamicEmailsPending[i].eEmailID))
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-PENDING> In game hours before trigger: ", g_DynamicEmailsPending[i].iInGameHoursBeforeTrigger)
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-PENDING> Override content: ", PICK_STRING(g_DynamicEmailsPending[i].bOverrideContent, "TRUE", "FALSE"))
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-PENDING> Content: ", g_DynamicEmailsPending[i].content)
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-PENDING> Override additional: ", g_DynamicEmailsPending[i].iOverrideAdditional)
REPEAT MAX_DYNAMIC_EMAIL_SUBSTRINGS j // ADDED BY CC
g_DynamicEmailsPending[i].additional[j] = g_savedGlobals.sEmailData.DynamicPendingMails[i].additional[j]
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-PENDING> Additional ", j, ": ", g_DynamicEmailsPending[i].additional[j])
ENDREPEAT
g_DynamicEmailsPending[i].RegIDOfTarget = g_savedGlobals.sEmailData.DynamicPendingMails[i].RegIDOfTarget
IF g_DynamicEmailsPending[i].RegIDOfTarget != 0
++g_iDynamicEmailsPending
ENDIF
CDEBUG3LN(DEBUG_EMAIL, "<DYNAMIC-PENDING> Registration ID of target: ", g_DynamicEmailsPending[i].RegIDOfTarget)
ENDREPEAT
CDEBUG1LN(DEBUG_EMAIL, "Loaded ", g_iDynamicEmailsPending, " pending dynamic mails.")
ENDPROC
#IF IS_DEBUG_BUILD
PROC DEBUG_SET_STATIC_EMAIL_THREAD_TO_READ(EMAIL_THREAD_ENUMS paramThread)
INT iInboxIndex
INT iThreadIndex
REPEAT TOTAL_INBOXES iInboxIndex
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS iThreadIndex
IF NOT g_Inboxes[iInboxIndex].IsDynamic[iThreadIndex]
IF g_Inboxes[iInboxIndex].ThreadIndex[iThreadIndex] = ENUM_TO_INT(paramThread)
g_Inboxes[iInboxIndex].HasBeenViewed[iThreadIndex] = TRUE
CPRINTLN(DEBUG_EMAIL, "Script ", GET_THIS_SCRIPT_NAME(), " set email thread ", ENUM_TO_INT(paramThread), " as having been read.")
ENDIF
ENDIF
ENDREPEAT
ENDREPEAT
ENDPROC
#ENDIF
FUNC BOOL HAS_CURRENT_MAIL_IN_STATIC_THREAD_BEEN_READ_BY_ANY_RECIEVER(EMAIL_THREAD_ENUMS paramThread)
INT iInboxIndex
INT iThreadIndex
REPEAT TOTAL_INBOXES iInboxIndex
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS iThreadIndex
IF NOT g_Inboxes[iInboxIndex].IsDynamic[iThreadIndex]
IF g_Inboxes[iInboxIndex].ThreadIndex[iThreadIndex] = ENUM_TO_INT(paramThread)
IF g_Inboxes[iInboxIndex].HasBeenViewed[iThreadIndex] = TRUE
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDREPEAT
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL HAS_DYNAMIC_EMAIL_BEEN_READ_BY_PRIMARY_TARGET(DYNAMIC_EMAIL_THREAD_NAMES thread,
EMAIL_MESSAGE_ENUMS message,
INT iNth = 0)
INT index = GET_DYNAMIC_EMAIL_THREAD_BUFFER_INDEX(thread)
IF index = -1
RETURN FALSE
ENDIF
INT toTarg = ENUM_TO_INT(g_AllEmails[message].eTo)
IF toTarg >= TOTAL_INBOXES
RETURN FALSE
ENDIF
INT iProgressSeek = -1
INT i = 0
INT target = iNth
REPEAT g_DynamicEmailThreadBuffers[index].iProgress i
IF g_DynamicEmailThreadBuffers[index].emails[i].sourceEmail = message
IF target = 0
iProgressSeek = i
ELSE
--target
ENDIF
ENDIF
ENDREPEAT
IF iProgressSeek = -1
RETURN FALSE
ENDIF
//that is dynamic
i = 0
REPEAT MAX_INBOX_LOGGED_MAILS_THREADS i
IF g_Inboxes[toTarg].IsDynamic[i]
AND g_Inboxes[toTarg].ThreadIndex[i] = g_DynamicEmailThreadBuffers[index].registrationID
AND g_Inboxes[toTarg].EmailsLogIndex[i] = iProgressSeek
//found the bugger, hooray
RETURN g_Inboxes[toTarg].HasBeenViewed[i]
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
//check for response picked from thread
FUNC BOOL HAS_LAST_EMAIL_IN_DYNAMIC_THREAD_BEEN_READ(DYNAMIC_EMAIL_THREAD_NAMES thread)
//is the selected thread in the buffer?
//if not then false
INT index = GET_DYNAMIC_EMAIL_THREAD_BUFFER_INDEX(thread)
IF index = -1
RETURN FALSE
ENDIF
//has the last email in the selected thread been responded to?
IF g_DynamicEmailThreadBuffers[index].iProgress = 0
RETURN FALSE
ENDIF
//find the target
//target email
EMAIL_MESSAGE_ENUMS emailID = g_DynamicEmailThreadBuffers[index].emails[g_DynamicEmailThreadBuffers[index].iProgress-1].sourceEmail
//target emailer
RETURN HAS_DYNAMIC_EMAIL_BEEN_READ_BY_PRIMARY_TARGET(thread, emailID)
ENDFUNC