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," 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," 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, " Creating feed message for email.") IF IS_CUTSCENE_PLAYING() CPRINTLN(DEBUG_EMAIL, " 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, " Player is the correct charater to receive feed.") SWITCH mail CASE PROPMAN_TO_MIKE CDEBUG1LN(DEBUG_EMAIL, " Creating default feed post to Michael.") BEGIN_TEXT_COMMAND_THEFEED_POST("PROPR_INCEMAIL1") BREAK CASE PROPMAN_TO_FRANK CDEBUG1LN(DEBUG_EMAIL, " Creating default feed post to Franklin.") BEGIN_TEXT_COMMAND_THEFEED_POST("PROPR_INCEMAIL3") BREAK CASE PROPMAN_TO_TREV CDEBUG1LN(DEBUG_EMAIL, " SCreating default feed post to Trevor.") BEGIN_TEXT_COMMAND_THEFEED_POST("PROPR_INCEMAIL2") BREAK DEFAULT CDEBUG1LN(DEBUG_EMAIL, " Starting feed post.") BEGIN_TEXT_COMMAND_THEFEED_POST(fstr) IF !IS_STRING_NULL_OR_EMPTY(ss1) CDEBUG1LN(DEBUG_EMAIL, " Adding substring 1.") ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss1) ENDIF IF !IS_STRING_NULL_OR_EMPTY(ss2) CDEBUG1LN(DEBUG_EMAIL, " Adding substring 2.") ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss2) ENDIF IF !IS_STRING_NULL_OR_EMPTY(ss3) CDEBUG1LN(DEBUG_EMAIL, " Adding substring 3.") ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss3) ENDIF IF !IS_STRING_NULL_OR_EMPTY(ss4) CDEBUG1LN(DEBUG_EMAIL, " Adding substring 4.") ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss4) ENDIF IF !IS_STRING_NULL_OR_EMPTY(ss5) CDEBUG1LN(DEBUG_EMAIL, " Adding substring 5.") ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss5) ENDIF IF !IS_STRING_NULL_OR_EMPTY(ss6) CDEBUG1LN(DEBUG_EMAIL, " Adding substring 6.") ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss6) ENDIF IF !IS_STRING_NULL_OR_EMPTY(ss7) CDEBUG1LN(DEBUG_EMAIL, " Adding substring 7.") ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss7) ENDIF IF !IS_STRING_NULL_OR_EMPTY(ss8) CDEBUG1LN(DEBUG_EMAIL, " Adding substring 8.") ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss8) ENDIF IF !IS_STRING_NULL_OR_EMPTY(ss9) CDEBUG1LN(DEBUG_EMAIL, " Adding substring 9.") ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss9) ENDIF IF !IS_STRING_NULL_OR_EMPTY(ss10) CDEBUG1LN(DEBUG_EMAIL, " Adding substring 10.") ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(ss10) ENDIF BREAK ENDSWITCH IF bFoundTextureDictionary CDEBUG1LN(DEBUG_EMAIL, " 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, " 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, " 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, " 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, " 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, " Playing default feed sound.") g_Owner_Soundset = "Phone_SoundSet_Default" BREAK ENDSWITCH PLAY_SOUND_FRONTEND (-1, "Notification", g_Owner_Soundset) ELSE CPRINTLN(DEBUG_EMAIL, " 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 : 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 : 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 : 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 : 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, " Log index: ", g_Inboxes[i].EmailsLogIndex[j]) CDEBUG3LN(DEBUG_EMAIL, " Thread index: ", g_Inboxes[i].ThreadIndex[j]) CDEBUG3LN(DEBUG_EMAIL, " Has fired response: ", PICK_STRING(g_Inboxes[i].HasFiredResponse[j], "TRUE", "FALSE")) CDEBUG3LN(DEBUG_EMAIL, " Picked response index: ", g_Inboxes[i].PickedResponseIndex[j]) CDEBUG3LN(DEBUG_EMAIL, " Has been viewed: ", PICK_STRING(g_Inboxes[i].HasBeenViewed[j], "TRUE", "FALSE")) CDEBUG3LN(DEBUG_EMAIL, " 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, " Belongs to: ", ENUM_TO_INT(g_DynamicEmailThreadBuffers[i].belongsTo)) CDEBUG3LN(DEBUG_EMAIL, " Buffer critical: ", PICK_STRING(g_DynamicEmailThreadBuffers[i].bBufferCritical, "TRUE", "FALSE")) CDEBUG3LN(DEBUG_EMAIL, " Registration ID: ", g_DynamicEmailThreadBuffers[i].registrationID) CDEBUG3LN(DEBUG_EMAIL, " Progress: ", g_DynamicEmailThreadBuffers[i].iProgress) CDEBUG3LN(DEBUG_EMAIL, " 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, " 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, " Source email: ", ENUM_TO_INT(g_DynamicEmailThreadBuffers[i].emails[j].sourceEmail)) CDEBUG3LN(DEBUG_EMAIL, " Override content: ", PICK_STRING(g_DynamicEmailThreadBuffers[i].emails[j].bOverrideContent, "TRUE", "FALSE")) CDEBUG3LN(DEBUG_EMAIL, " Content: ", g_DynamicEmailThreadBuffers[i].emails[j].content) CDEBUG3LN(DEBUG_EMAIL, " 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, " 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, " Active: ", PICK_STRING(g_AllEmailThreads[i].bActive, "TRUE", "FALSE")) CDEBUG3LN(DEBUG_EMAIL, " Ended: ", PICK_STRING(g_AllEmailThreads[i].bEnded, "TRUE", "FALSE")) CDEBUG3LN(DEBUG_EMAIL, " Blocked until response: ", PICK_STRING(g_AllEmailThreads[i].bBLockedUntilResponse, "TRUE", "FALSE")) CDEBUG3LN(DEBUG_EMAIL, " Currently at: ", g_AllEmailThreads[i].iCurrentlyAt) REPEAT MAX_THREAD_LOG_LENGTH j IF g_savedGlobals.sEmailData.StaticThreadSnapshots[i].ThreadEmailLog[j] > 0 CDEBUG3LN(DEBUG_EMAIL, " 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, " Target thread: ", ENUM_TO_INT(g_DynamicEmailsPending[i].eTargetThread)) CDEBUG3LN(DEBUG_EMAIL, " Email ID: ", ENUM_TO_INT(g_DynamicEmailsPending[i].eEmailID)) CDEBUG3LN(DEBUG_EMAIL, " In game hours before trigger: ", g_DynamicEmailsPending[i].iInGameHoursBeforeTrigger) CDEBUG3LN(DEBUG_EMAIL, " Override content: ", PICK_STRING(g_DynamicEmailsPending[i].bOverrideContent, "TRUE", "FALSE")) CDEBUG3LN(DEBUG_EMAIL, " Content: ", g_DynamicEmailsPending[i].content) CDEBUG3LN(DEBUG_EMAIL, " 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, " 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, " 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