Files
gtav-src/script/dev_ng/singleplayer/scripts/cellphone/appEmail.sc
T
2025-09-29 00:52:08 +02:00

947 lines
36 KiB
Python
Executable File

USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_script.sch"
USING "commands_pad.sch"
USING "cellphone_public.sch"
USING "cellphone_private.sch"
USING "cellphone_movement.sch"
USING "stack_sizes.sch"
USING "email_public.sch"
USING "selector_public.sch"
USING "website_public.sch"
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// SCRIPT NAME : appEmail.sc
// AUTHOR : Steve T
// DESCRIPTION : Placeholder Organiser or Email script, launched from phone
//
//
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//phone rotation stuff
VECTOR v_3dEmailOriginalPosition, v_3dEmailDesiredPosition
//Texture dictionary notes
// IF NOT HAS_STREAMED_TEXTURE_DICT_LOADED("SplashScreens")
// REQUEST_STREAMED_TEXTURE_DICT("SplashScreens") //MichaelTSplash
// ENDIF
// SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED("SplashScreens")
/*
PROC LOAD_TEXTURE_DICTIONARY_AND_BLOCK()
REQUEST_STREAMED_TEXTURE_DICT("placeholderattachment")//TODO, replace with emails
PRINTLN("Email system enter wait for attachement texture dictionaries load")
WHILE NOT HAS_STREAMED_TEXTURE_DICT_LOADED("placeholderattachment")
WAIT(10)
ENDWHILE
PRINTLN("Email system leaving wait for attachement texture dictionaries load")
ENDPROC
PROC RELEASE_TEXTURE_DICTIONARIES()
PRINTLN("Email system releasing attachement texture dictionaries")
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED("placeholderattachment")
ENDPROC
*/
//Replaced these with safety globals g_b_Rotate3dPhonePortrait and g_b_Rotate3dPhoneLandscape
//BOOL b_Rotate3dPhonePortrait = FALSE
//BOOL b_Rotate3dPhone = FALSE
SCALEFORM_RETURN_INDEX fudp
INT fudret = 0
PROC Cleanup_and_Terminate()
IF(g_iEmailWithLoadedTextureIndex != -1)
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED(GET_EMAIL_ATTACHMENT_TEXTURE_DICTIONARY_NAME(g_iEmailWithLoadedTextureIndex))
g_iEmailWithLoadedTextureIndex = -1
PRINTLN("Releasing old attachment texture")
ENDIF
g_bEmailSystemPaused = FALSE
//As this script is not checking CHECK_APPLICATION_EXIT() we need to have a failsafe that ensures the correct display state is selected and scaleform
//resets the display to the homescreen to avoid any timing issues. Pressing "Select" then "Back" in very quick succession for example.
IF g_Cellphone.PhoneDS > PDS_TAKEOUT //i.e don't run this if the phone has just been put into disabled or away state
g_Cellphone.PhoneDS = PDS_MAXIMUM
Update_Scaleform_VSE ()
ENDIF
//Play_Back_Beep()
//RELEASE_TEXTURE_DICTIONARIES()
TERMINATE_THIS_THREAD()
ENDPROC
PROC RotatePhoneToWidescreen()
FLOAT fComplete = MovePhoneToDestination( v_3dEmailOriginalPosition, v_3dEmailDesiredPosition, g_3dPhoneStartRotVec, <<-90, 0, 90.0>>, 350.0, FALSE)
// scale the phone up just a bit so that email is readable
// note that subtitles were already overlapping, so might as well go big (or go home)
IF g_IsMonochromeCheatActive = FALSE
IF IS_PC_VERSION()
IF NOT IsCurrentCamFirstPerson() //2184278 - Enlarging the phone in 800 x 600 seems to display the corner of the phone in 1st person.
SET_MOBILE_PHONE_SCALE(500 + 75*fComplete)
ENDIF
ELSE
SET_MOBILE_PHONE_SCALE(500 + 75*fComplete)
ENDIF
ENDIF
//MovePhoneToDestination should return 2.0 very quickly in First Person mode so the prop in hand should begin rotating to landscape on immediate launch of the app.
IF fComplete >= 1.0
CellphoneFirstPersonHorizontalModeToggle(TRUE)
g_b_Rotate3dPhoneLandscape = FALSE
s_iTimeStampStart = 0
ENDIF
ENDPROC
PROC RotatePhoneToPortrait_and_Exit()
FLOAT fComplete = MovePhoneToDestination( v_3dEmailDesiredPosition, v_3dEmailOriginalPosition, <<-90, 0, 90.0>>, g_3dPhoneStartRotVec, 350.0, FALSE)
// scale the phone down again.
IF g_IsMonochromeCheatActive = FALSE
SET_MOBILE_PHONE_SCALE(500 + 75*(1.0-fComplete))
ENDIF
//MovePhoneToDestination should return 2.0 very quickly in First Person mode so the prop in hand should begin rotating back on termination of the app.
IF fComplete >= 1.0
g_b_Rotate3dPhonePortrait = FALSE
//Embedded check in this for 2015070
CellphoneFirstPersonHorizontalModeToggle(FALSE)
Cleanup_and_Terminate()
s_iTimeStampStart = 0
ENDIF
ENDPROC
///Email system
enumCharacterList currPlayer
BOOL bActivated = FALSE
BOOL bViewSwitchedToEmail = FALSE
BOOL bUpdateRequired = FALSE
BOOL bResponseFiredSinceLastViewOfInbox = FALSE//
INT iSelectedEmail = -1
INT iSelectedResponse = -1
BOOL bPadCircle = FALSE
BOOL bPadCross = FALSE
BOOL bButtonUp = FALSE
BOOL bButtonDown = FALSE
BOOL bButtonLeft = FALSE
BOOL bButtonRight = FALSE
BOOL bURLPrimed = FALSE
STRING sURLlast = NULL
FLOAT fLastValidInboxIndexSelected = 0
BOOL bMovedAfterBack = TRUE // this is to cope with the fact scaleform returns are unreliable
PROC DO_GENERIC_DIRECTIONAL_INPUTS()
IF g_ShouldForceSelectionOfLatestAppItem
PRINTLN("appemail DO_GENERIC_DIRECTIONAL_INPUTS bailed due to autoselect")
iSelectedEmail = 0
fLastValidInboxIndexSelected = TO_FLOAT(iSelectedEmail)
//double check that there are actually emails to select
IF EMAILS_IN_INBOX(currPlayer) = 0
iSelectedEmail = -1
ENDIF
IF NOT (iSelectedEmail = -1)
g_Cellphone.PhoneDS = PDS_COMPLEXAPP
bUpdateRequired = TRUE
SETTIMERB(0)
Play_Select_Beep()
ENDIF
EXIT
ENDIF
IF IS_BROWSER_OPEN() //if the browser has been launched from the email link then ignore inputs
PRINTLN("appemail DO_GENERIC_DIRECTIONAL_INPUTS bailed due to net being visible")
EXIT
ENDIF
IF g_b_Rotate3dPhonePortrait
PRINTLN("appemail DO_GENERIC_DIRECTIONAL_INPUTS bailed due to phone rotating back to close")
EXIT
ENDIF
//PRINTLN("appemail DO_GENERIC_DIRECTIONAL_INPUTS checking inputs ")
//check for the directional buttons to feed the directly to scaleform
//check for the action buttons to interact with the menu
//,
//,
//,
//,
IF NOT (bButtonUp)
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_UP)
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_SCROLL_BACKWARD)
bButtonUp = TRUE
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_INPUT_EVENT")//up
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
END_SCALEFORM_MOVIE_METHOD()
PLAY_SOUND_FRONTEND (-1, "Menu_Navigate", g_Owner_Soundset)
SETTIMERA(0)
bMovedAfterBack = TRUE
ENDIF
ELSE //wait for release
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_UP)
OR IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_SCROLL_BACKWARD)
IF TIMERA() > 100 AND (iSelectedEmail != -1)
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_INPUT_EVENT")//up
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
END_SCALEFORM_MOVIE_METHOD()
//PLAY_SOUND_FRONTEND (-1, "Menu_Navigate", g_Owner_Soundset)
SETTIMERA(0)
bMovedAfterBack = TRUE
ENDIF
ELSE //NOT IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_UP)
bButtonUp = FALSE
ENDIF
ENDIF
IF NOT (bButtonDown)
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_DOWN)
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_SCROLL_FORWARD)
bButtonDown = TRUE
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_INPUT_EVENT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(3)
END_SCALEFORM_MOVIE_METHOD()
PLAY_SOUND_FRONTEND (-1, "Menu_Navigate", g_Owner_Soundset)
SETTIMERB(0)
bMovedAfterBack = TRUE
ENDIF
ELSE //wait for release
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_DOWN)
OR IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_SCROLL_FORWARD)
IF TIMERB() > 100 AND (iSelectedEmail != -1)
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_INPUT_EVENT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(3)
END_SCALEFORM_MOVIE_METHOD()
//PLAY_SOUND_FRONTEND (-1, "Menu_Navigate", g_Owner_Soundset)
SETTIMERB(0)
bMovedAfterBack = TRUE
ENDIF
ELSE //NOT IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_DOWN)
bButtonDown = FALSE
ENDIF
ENDIF
IF NOT (bButtonLeft)
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_LEFT)
bButtonLeft = TRUE
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_INPUT_EVENT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(4)
END_SCALEFORM_MOVIE_METHOD()
PLAY_SOUND_FRONTEND (-1, "Menu_Navigate", g_Owner_Soundset)
ENDIF
ELSE //wait for release
IF NOT IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_LEFT)
bButtonLeft = FALSE
ENDIF
ENDIF
IF NOT (bButtonRight)
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_RIGHT)
bButtonRight = TRUE
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"SET_INPUT_EVENT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
END_SCALEFORM_MOVIE_METHOD()
PLAY_SOUND_FRONTEND (-1, "Menu_Navigate", g_Owner_Soundset)
ENDIF
ELSE //wait for release
IF NOT IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_RIGHT)
bButtonRight = FALSE
ENDIF
ENDIF
//INPUT_FRONTEND_ACCEPT,
IF NOT bPadCross
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_SELECT) AND (TIMERB() > 100)
PRINTLN("appemail Cellphone input select")
//attempting to select a mail!
IF iSelectedEmail = -1
//iSelectedEmail = CALL_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"GET_CURRENT_SELECTION")
BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"GET_CURRENT_SELECTION")
fudp = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE ()
WHILE NOT IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(fudp)
PRINTLN("INITIAL SELECTION appemail spinning its wheels waiting for current selection")
//RENDER_BROWSER()
WAIT(0)
ENDWHILE
fudret = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(fudp)
iSelectedEmail = fudret
#if USE_TU_CHANGES
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintString("S_T Scaleform return value on selecting email is ")
cdPrintInt(fudret)
cdPrintnl()
cdPrintnl()
#endif
#endif
//double check that there are actually emails to select
IF EMAILS_IN_INBOX(currPlayer) = 0
iSelectedEmail = -1
ENDIF
IF NOT (iSelectedEmail = -1)
//EMAIL_LIST = 8
//EMAIL_VIEW = 9
IF bMovedAfterBack = TRUE
fLastValidInboxIndexSelected = TO_FLOAT(iSelectedEmail)
PRINTLN("Last valid email selected set to ", fLastValidInboxIndexSelected)
bMovedAfterBack = FALSE
ENDIF
g_Cellphone.PhoneDS = PDS_COMPLEXAPP
bUpdateRequired = TRUE
SETTIMERB(0)
Play_Select_Beep()
ENDIF
ELSE
//TODO go to picking a response! if the mail has one! Or if picking then pick response
IF iSelectedResponse = -1
IF SCALEFORM_CHECK_FOR_RESPONSE_ALLOWED(currPlayer,iSelectedEmail) AND (NOT bResponseFiredSinceLastViewOfInbox)
//go to response picking
iSelectedResponse = 0
bUpdateRequired = TRUE
SETTIMERB(0)
Play_Select_Beep()
ENDIF
ELSE
//response picked, fire it
// //iSelectedResponse = CALL_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"GET_CURRENT_SELECTION")
// BEGIN_SCALEFORM_MOVIE_METHOD(SF_MovieIndex,"GET_CURRENT_SELECTION")
// fudp = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE ()
// WHILE NOT IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(fudp)
// PRINTLN("THIS IS THE RESPONSE appemail spinning it's wheels waiting for current selection")
// //RENDER_BROWSER()
// WAIT(0)
// ENDWHILE
// fudret = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(fudp)
//
//Hard coding first responce as we never have any other responce other than RESPOND
iSelectedResponse = 0 //fudret
PRINTln("\nAppemail firing response: ",fudret,".\n")
SCALEFORM_FIRE_RESPONSE(currPlayer,iSelectedEmail,iSelectedResponse)
bResponseFiredSinceLastViewOfInbox = TRUE
//return to mail
iSelectedResponse = -1
bUpdateRequired = TRUE
Play_Select_Beep()
SETTIMERB(0)
ENDIF
ENDIF
bPadCross = TRUE
ENDIF
ELSE
//IF NOT IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT)
bPadCross = FALSE
// ENDIF
ENDIF
//,
//PAD_CIRCLE = 17,
//BOOL bPadCircle = FALSE
IF (TIMERB() > 100)
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_CANCEL)
PRINTLN("Appemail cancel button press detected")
BOOL backCancel = FALSE
IF bPadCircle = FALSE
IF NOT (iSelectedEmail = -1)
IF (iSelectedResponse = -1) //selected mail but no response picking in progress
//cancel back to inbox from mail
iSelectedEmail = ROUND(fLastValidInboxIndexSelected)
bURLPrimed = FALSE
SETTIMERB(0)
backCancel = TRUE
Play_Back_Beep()
ELSE
//canceling out of a response pick
SETTIMERB(0)
iSelectedResponse = -1
Play_Back_Beep()
ENDIF
bUpdateRequired = TRUE
ELSE
//no mail selected, exit if not already exiting
IF GET_FLOW_HELP_MESSAGE_STATUS("AM_H_FLINK") = FHS_QUEUED
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_FIRST_EMAIL_WITH_LINK)
ENDIF
IF GET_FLOW_HELP_MESSAGE_STATUS("AM_H_SCROLL") = FHS_QUEUED
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_FIRST_EMAIL_SCROLL)
ENDIF
IF g_b_Rotate3dPhoneLandscape = FALSE //Don't allow exit routine, if the phone is in the process of rotating to landscape.
AND NOT g_b_Rotate3dPhonePortrait
Play_Back_Beep()
g_b_Rotate3dPhonePortrait = TRUE //will cue rotate and exit routine from above...
g_bEmailSystemPaused = FALSE //Steve T note. Should be able to remove this...
ENDIF
ENDIF
bPadCircle = TRUE
ENDIF
IF backCancel
iSelectedEmail = -1
//g_Cellphone.PhoneDS = PDS_RUNNINGAPP //Steve T Note 2. This relates to the weirdness - we'd need to take this out.
ENDIF
ELSE
bPadCircle = FALSE
ENDIF
ENDIF
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL,INPUT_CELLPHONE_EXTRA_OPTION)
PRINTLN("appemail url button detected")
IF bURLPrimed
//SCRIPT_ASSERT("Email url triggered") //do webpage
//clear the help
// REMOVE_HELP_FROM_FLOW_QUEUE("AM_H_FLINK")
IF GET_FLOW_HELP_MESSAGE_STATUS("AM_H_FLINK") = FHS_QUEUED
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_FIRST_EMAIL_WITH_LINK)
ENDIF
IF GET_FLOW_HELP_MESSAGE_STATUS("AM_H_SCROLL") = FHS_QUEUED
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_FIRST_EMAIL_SCROLL)
ENDIF
//sURLlast
g_BrowserLinkToLaunch = sURLlast
//GO_TO_WEBSITE(g_BrowserLinkToLaunch)
START_BROWSER(SBSS_Launch_Link)
bURLPrimed = FALSE
Play_Select_Beep()
/*
g_b_Rotate3dPhonePortrait = TRUE //will cue rotate and exit routine from above...
b_Rotate3dPhoneX = TRUE
b_Rotate3dPhoneY = TRUE
b_Rotate3dPhoneZ = TRUE
g_bEmailSystemPaused = FALSE //Steve T note. Should be able to remove this...
*/
ENDIF
ENDIF
ENDPROC
SCRIPT
IF g_bInMultiplayer
//RELEASE_TEXTURE_DICTIONARIES()
TERMINATE_THIS_THREAD()
ENDIF
//Ensure this script persists during network game
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
currPlayer = GET_CURRENT_PLAYER_PED_ENUM()
REQUEST_ADDITIONAL_TEXT("email", PHONE_TEXT_SLOT)
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(PHONE_TEXT_SLOT)
WAIT(0)
ENDWHILE
/*
//SCRIPT_ASSERT("Email test")
//pending system test
ASSIGN_BUFFER_TO_DYNAMIC_EMAIL_THREAD(TEST_DYNAMIC_THREAD)
PRIME_EMAIL_FOR_FIRING_INTO_DYNAMIC_THREAD_IN_HOURS(TEST_DYNAMIC_THREAD, CULT3, 1)
OVERRIDE_CONTENT_FOR_PENDING_DYNAMIC_EMAIL(TEST_DYNAMIC_THREAD,CULT3, "EPS_BMAIL_G4")
ADD_CONTENT_FOR_FOR_PENDING_DYNAMIC_EMAIL_SUBSTRING(TEST_DYNAMIC_THREAD,CULT3, "EPS_BUYROBBTN")
ADD_CONTENT_FOR_FOR_PENDING_DYNAMIC_EMAIL_SUBSTRING(TEST_DYNAMIC_THREAD,CULT3, "EPS_BUYROBBTN")
ADD_CONTENT_FOR_FOR_PENDING_DYNAMIC_EMAIL_SUBSTRING(TEST_DYNAMIC_THREAD,CULT3, "EPS_BUYROBBTN")
ADD_CONTENT_FOR_FOR_PENDING_DYNAMIC_EMAIL_SUBSTRING(TEST_DYNAMIC_THREAD,CULT3, "EPS_BUYROBBTN")
*/
//Default these to be on the safe side...
g_b_Rotate3dPhonePortrait = FALSE
g_b_Rotate3dPhoneLandscape = FALSE
//Set up and cue initial rotation of the phone to landscape...
g_Cellphone.PhoneDS = PDS_COMPLEXAPP //We're using a "rotate" so the phone needs to be in COMPLEX_APP state to prevent cellphone_flashhand allowing a phone "put away"
//to run during the rotate back to portrait.
g_b_Rotate3dPhoneLandscape = TRUE
g_bEmailSystemPaused = TRUE
IF g_B_Scaleform_Movies_Loaded //the phone movie is loaded
CONFIGURE_EMAIL_SOFT_KEY_SELECT(FALSE)
CONFIGURE_EMAIL_SOFT_KEY_BACK(TRUE) //default back key to on
CONFIGURE_EMAIL_SOFT_KEY_LINK(FALSE)
ENDIF
SETTIMERB(0)
//LOAD_TEXTURE_DICTIONARY_AND_BLOCK()
//Added for A class bug #1550721 //Removed for 1998041
//GET_MOBILE_PHONE_POSITION (v_3dEmailOriginalPosition)
//Added for 1998041
//Prevents the phone from disappearing completely if the player started in 1st person, brought up Email, went to 3rd, then hit exit.
v_3dEmailOriginalPosition = g_This_Screen_3dPhoneEndVec[g_Chosen_Ratio]
v_3dEmailDesiredPosition = v_3dEmailOriginalPosition
// original value was -6. Text-readable size is -10.
v_3dEmailDesiredPosition.x -= 10.0 //Specifies the size of the left adjustment to make sure the entire body text is visible in landscape mode.
v_3dEmailDesiredPosition.y += 20.0 //Fixes TRC bombshell with new anims by making sure the landscape phone lies above any long or four line subtitles - in German!
WHILE TRUE
WAIT(0)
IF g_Cellphone.PhoneDS <> PDS_ONGOING_CALL //Leave this in, Andrew.
IF g_b_Rotate3dPhoneLandscape AND NOT g_b_Rotate3dPhonePortrait //make sure phone can't get stuck trying to rotate forwards and back.
RotatePhoneToWidescreen()
ELIF g_b_Rotate3dPhonePortrait
RotatePhoneToPortrait_and_Exit()
ENDIF
/* Andrew, I've left these here as examples of where your own organiser / email procs and functions should be called.
Draw_Camera_Zoom()
Check_For_Shutter_Press()
Process_Shutter_Delay()
*/
//call email update here
IF NOT bActivated
//perform first run action // attempt to get phone
bActivated = TRUE
ELSE
IF g_B_Scaleform_Movies_Loaded //the phone movie is loaded
//CONFIGURE_EMAIL_SOFT_KEY_SELECT(TRUE)
//update phone
IF NOT bViewSwitchedToEmail
//switch view to email
bViewSwitchedToEmail = TRUE
//call the update on the inbox here
FILL_SCALEFORM_INBOX_FOR_PED(SF_MovieIndex, currPlayer)
//EMAIL_LIST = 8
//EMAIL_VIEW = 9
#if USE_TU_CHANGES
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintString("S_T Filled inbox... ")
cdPrintnl()
cdPrintnl()
#endif
#endif
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_STRING(SF_MovieIndex,"SET_HEADER","EM_INBOX")
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"DISPLAY_VIEW",8)
ELSE
IF g_bEmailSystemUpdated
g_bEmailSystemUpdated = FALSE
bUpdateRequired = TRUE
ENDIF
//update view
IF bUpdateRequired
SETTIMERA(0)
SETTIMERB(0)
//add new data to the email/inbox
IF (iSelectedEmail = -1)//not picked an email to view yet
CPRINTLN(debug_email,"Not selected email")
IF bMovedAfterBack
bMovedAfterBack = FALSE
fLastValidInboxIndexSelected = 0.0
ENDIF
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"SET_DATA_SLOT_EMPTY",8)
INT mails = FILL_SCALEFORM_INBOX_FOR_PED(SF_MovieIndex, currPlayer)
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_STRING(SF_MovieIndex,"SET_HEADER","EM_INBOX")
bResponseFiredSinceLastViewOfInbox = FALSE
IF mails > 0
CONFIGURE_EMAIL_SOFT_KEY_SELECT(TRUE)
ELSE
CONFIGURE_EMAIL_SOFT_KEY_SELECT(FALSE)
ENDIF
CPRINTLN(debug_email,"mails: ",mails)
CONFIGURE_EMAIL_SOFT_KEY_BACK(TRUE)
CONFIGURE_EMAIL_SOFT_KEY_LINK(FALSE)
PRINTLN("Last valid inbox index selected ", fLastValidInboxIndexSelected)
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"DISPLAY_VIEW",8, fLastValidInboxIndexSelected)
ELSE //email is selected
CPRINTLN(debug_email,"Selected emails")
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"SET_DATA_SLOT_EMPTY",21)
WAIT(0)
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"DISPLAY_VIEW",21)
WAIT(0)
CONFIGURE_EMAIL_SOFT_KEY_BACK(TRUE)
EMAIL_FEED_ID_BUFFER_PURGE() //clear any on screen feed notifications for email
IF(iSelectedResponse = -1)//not in picking a response mode
CPRINTLN(debug_email,"Selected response: ",iselectedResponse)
BLOCKING_PREP_TEXTURE_FOR_SCALEFORM_MOVIE_EMAIL(currPlayer,iSelectedEmail)
FILL_SCALEFORM_EMAIL_IN_INBOX_FOR_PED(SF_MovieIndex,currPlayer,iSelectedEmail)
g_ShouldForceSelectionOfLatestAppItem = FALSE
bURLPrimed = DOES_INBOX_MAIL_HAVE_URL(currPlayer,iSelectedEmail)
IF bURLPrimed
CPRINTLN(debug_email,"URL Primed")
sURLlast = GET_EMAIL_IN_INBOX_URL(currPlayer,iSelectedEmail)
PRINTLN("Email attempting to trigger appEmail")
//do first time hyperlink help
IF NOT HAS_ONE_TIME_HELP_DISPLAYED(FHM_FIRST_EMAIL_WITH_LINK)
SWITCH GET_FLOW_HELP_MESSAGE_STATUS("AM_H_FLINK")
CASE FHS_EXPIRED
ADD_HELP_TO_FLOW_QUEUE("AM_H_FLINK", FHP_HIGH, 0, 1000)
BREAK
CASE FHS_DISPLAYED
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_FIRST_EMAIL_WITH_LINK)
BREAK
ENDSWITCH
//SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_FIRST_EMAIL_WITH_LINK)
ELSE
//2149152 for PC version to reinforce hyperlink help every session.
IF IS_PC_VERSION()
IF NOT IS_BIT_SET (BitSet_CellphoneTU, g_BSTU_MP_HYPERLINK_EMAIL_HELP)
SET_BIT (BitSet_CellphoneTU, g_BSTU_MP_HYPERLINK_EMAIL_HELP)
PRINT_HELP ("AM_H_FLINK")
#if IS_DEBUG_BUILD
cdPrintnl()
cdPrintstring("AppEmail - Displaying Hyperlink control message for the second and final time. Setting bit.")
cdPrintnl()
#endif
ENDIF
ENDIF
ENDIF
//TODO SOFTKEYS
CONFIGURE_EMAIL_SOFT_KEY_LINK(TRUE)
ELSE
//Steve T.
IF NOT HAS_ONE_TIME_HELP_DISPLAYED(FHM_FIRST_EMAIL_SCROLL)
SWITCH GET_FLOW_HELP_MESSAGE_STATUS("AM_H_SCROLL")
CASE FHS_EXPIRED
ADD_HELP_TO_FLOW_QUEUE("AM_H_SCROLL", FHP_HIGH, 0, 1000)
BREAK
CASE FHS_DISPLAYED
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_FIRST_EMAIL_SCROLL)
BREAK
ENDSWITCH
//SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_FIRST_EMAIL_SCROLL)
ENDIF
CONFIGURE_EMAIL_SOFT_KEY_LINK(FALSE)
ENDIF
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"DISPLAY_VIEW",9)
ELSE
CPRINTLN(debug_email,"picking response:",iSelectedEmail)
//in picking a response mode
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"SET_DATA_SLOT_EMPTY",21)
WAIT(0)
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"DISPLAY_VIEW",21)
WAIT(0)
//LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"SET_DATA_SLOT_EMPTY",21)
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"SET_DATA_SLOT_EMPTY",9)
FILL_SCALEFORM_RESPONSES_FOR_EMAIL(SF_MovieIndex,currPlayer,iSelectedEmail)
//LEGACY_SCALEFORM_MOVIE_METHOD_WITH_STRING(SF_MovieIndex,"SET_HEADER","EM_RESPONSE")
// LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"DISPLAY_VIEW",21)
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(SF_MovieIndex,"DISPLAY_VIEW",9)
ENDIF
ENDIF
bUpdateRequired = FALSE
ELSE
//check for update needing done
//do input
DO_GENERIC_DIRECTIONAL_INPUTS()
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT (currPlayer = GET_CURRENT_PLAYER_PED_ENUM())
//PANIC BAIL
g_bEmailSystemPaused = FALSE
SCRIPT_ASSERT("appEmail panic bailed due to player changing during use!")
#if IS_DEBUG_BUILD
PRINTSTRING ("appEmail exiting due to player character switch.")
PRINTNL ()
#endif
Cleanup_and_Terminate()
ENDIF
ENDIF
//Finally check for abnormal exit
IF CHECK_FOR_ABNORMAL_EXIT() //Leave this in, Andrew.
/* Legacy.
b_Rotate3dPhonePortrait = TRUE
b_Rotate3dPhoneX = TRUE
b_Rotate3dPhoneY = TRUE
b_Rotate3dPhoneZ = TRUE
g_bEmailSystemPaused = FALSE
WHILE b_Rotate3dPhonePortrait = TRUE
RotatePhoneToPortrait_and_Exit() //This will terminate the thread...
ENDWHILE
*/
#if IS_DEBUG_BUILD
PRINTSTRING ("appEmail exiting abnormally!")
PRINTNL ()
#endif
g_b_Rotate3dPhonePortrait = FALSE
g_b_Rotate3dPhoneLandscape = FALSE
g_bEmailSystemPaused = FALSE
//RELEASE_TEXTURE_DICTIONARIES()
//Embedded check in this for 2015070
CellphoneFirstPersonHorizontalModeToggle(FALSE)
TERMINATE_THIS_THREAD()
ENDIF
ENDWHILE
ENDSCRIPT