157 lines
5.6 KiB
Scheme
Executable File
157 lines
5.6 KiB
Scheme
Executable File
|
|
//////////////////////////////////////////////////////////////////////
|
|
/* shrink_phone.sch */
|
|
/* Author: DJ Jones, Yomal Perera */
|
|
/* Functionality for shrink phone sessions. */
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
// Script entry point.
|
|
SCRIPT
|
|
INT iCurrentLine
|
|
BOOL bBroke, bPlayBrokeConversation, bReachedDecision
|
|
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS | FORCE_CLEANUP_FLAG_REPEAT_PLAY)
|
|
MISSION_FLOW_MISSION_FORCE_CLEANUP()
|
|
SHRINK_PHONE_CLEANUP()
|
|
ENDIF
|
|
|
|
thisSession = SHRINK_GET_CURRENT_MISSION_SESSION()
|
|
SHRINK_GET_SESSION_PROPERTIES(sessionProperties, thisSession)
|
|
|
|
// See if we have enough money.
|
|
bBroke = GET_ACCOUNT_BALANCE(BANK_ACCOUNT_MICHAEL) < SHRINK_GET_SESSION_FEE(thisSession)
|
|
|
|
// Main loop.
|
|
WHILE TRUE
|
|
WAIT(0)
|
|
|
|
// Check debug commands.
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)
|
|
MISSION_FLOW_MISSION_FAILED()
|
|
SHRINK_PHONE_CLEANUP()
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
// Shrink state machine.
|
|
SWITCH phoneState
|
|
// Perform init.
|
|
CASE SHRINKPHONESTATE_INIT
|
|
IF bBroke
|
|
IF SHRINK_PHONE_INIT_BROKE(convPeds, sRoots, sSpecifics, iLineCounter)
|
|
POINT_STRINGS_AT_TEXT_LABEL_15(sRootStrings, sRoots, iLineCounter)
|
|
POINT_STRINGS_AT_TEXT_LABEL_15(sSpecificStrings, sSpecifics, iLineCounter)
|
|
bPlayBrokeConversation = TRUE
|
|
ENDIF
|
|
ELSE
|
|
SHRINK_PHONE_INIT(convPeds, sRoots, sSpecifics, iLineCounter, sYesRoots, sYesSpecifics, iYesLineCounter,
|
|
sNoRoots, sNoSpecifics, iNoLineCounter, sessionProperties, thisSession)
|
|
|
|
g_iShrinkBrokeConvTimestamp = 0
|
|
|
|
POINT_STRINGS_AT_TEXT_LABEL_15(sRootStrings, sRoots, iLineCounter)
|
|
POINT_STRINGS_AT_TEXT_LABEL_15(sSpecificStrings, sSpecifics, iLineCounter)
|
|
POINT_STRINGS_AT_TEXT_LABEL_15(sYesRootStrings, sYesRoots, iYesLineCounter)
|
|
POINT_STRINGS_AT_TEXT_LABEL_15(sYesSpecificStrings, sYesSpecifics, iYesLineCounter)
|
|
POINT_STRINGS_AT_TEXT_LABEL_15(sNoRootStrings, sNoRoots, iNoLineCounter)
|
|
POINT_STRINGS_AT_TEXT_LABEL_15(sNoSpecificStrings, sNoSpecifics, iNoLineCounter)
|
|
|
|
bReachedDecision = FALSE
|
|
ENDIF
|
|
|
|
phoneState = SHRINKPHONESTATE_START_CONV
|
|
BREAK
|
|
|
|
// Start the phone conversation.
|
|
CASE SHRINKPHONESTATE_START_CONV
|
|
IF bBroke
|
|
IF bPlayBrokeConversation
|
|
PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_N_LINES(iLineCounter, convPeds, CHAR_DR_FRIEDLANDER, "DrfAud", sRootStrings, sSpecificStrings, CONV_PRIORITY_VERY_HIGH, TRUE, DISPLAY_SUBTITLES, DO_ADD_TO_BRIEF_SCREEN, FALSE)
|
|
phoneState = SHRINKPHONESTATE_CONV
|
|
ELSE
|
|
phoneState = SHRINKPHONESTATE_BUSY
|
|
ENDIF
|
|
ELIF PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_N_LINES_REQUIRES_RESPONSE(iLineCounter, convPeds, CHAR_DR_FRIEDLANDER, "DrfAud", sRootStrings, sSpecificStrings, "SHRINK_CELL_Q", CONV_PRIORITY_VERY_HIGH, TRUE, DISPLAY_SUBTITLES, DO_ADD_TO_BRIEF_SCREEN, FALSE)
|
|
SET_UP_MULTIPART_WITH_N_LINES_YES_NO_BRANCHES(iYesLineCounter, iNoLineCounter, sYesRootStrings, sYesSpecificStrings, sNoRootStrings, sNoSpecificStrings)
|
|
phoneState = SHRINKPHONESTATE_CONV
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Wait for the conversation to end (voicemail/busy signal).
|
|
CASE SHRINKPHONESTATE_BUSY
|
|
IF NOT CAN_PHONE_BE_SEEN_ON_SCREEN()
|
|
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
PRINT_HELP("SHRINK_BROKE")
|
|
phoneState = SHRINKPHONESTATE_FAIL
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Wait for the phone conversation to end.
|
|
CASE SHRINKPHONESTATE_CONV
|
|
IF GET_CURRENT_SCRIPTED_CONVERSATION_LINE() > iCurrentLine
|
|
iCurrentLine = GET_CURRENT_SCRIPTED_CONVERSATION_LINE()
|
|
ENDIF
|
|
|
|
IF IS_CELLPHONE_CALL_WITH_REPLIES_WAITING_ON_USER_INPUT()
|
|
START_TIMER_NOW(timerReply)
|
|
bReachedDecision = TRUE
|
|
iCurrentLine = -1
|
|
IF TIMER_DO_ONCE_WHEN_READY(timerReply, 30.0)
|
|
FORCE_NEGATIVE_RESPONSE_TO_CALL_WITH_REPLIES (TRUE)
|
|
// ELSE
|
|
// IF NOT IS_TIMER_STARTED(timerReplyPrompt)
|
|
// START_TIMER_NOW(timerReplyPrompt)
|
|
// ELIF GET_TIMER_IN_SECONDS(timerReplyPrompt) > 10.5
|
|
// Trigger prompt line here
|
|
// RESTART_TIMER_NOW(timerReplyPrompt)
|
|
// ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PED_JUMPING_OUT_OF_VEHICLE(PLAYER_PED_ID())
|
|
OR IS_ENTITY_IN_WATER(PLAYER_PED_ID())
|
|
HANG_UP_AND_PUT_AWAY_PHONE()
|
|
ENDIF
|
|
|
|
//PRINTLN("Current shrink line ", iCurrentLine)
|
|
|
|
IF HAS_CELLPHONE_CALL_FINISHED()
|
|
IF (NOT bBroke)
|
|
AND bReachedDecision
|
|
AND ((SHRINK_GET_CURRENT_MISSION_SESSION() = SHRINKSESSION_PHONE_NEGATIVITY AND iCurrentLine >= 8)
|
|
OR (SHRINK_GET_CURRENT_MISSION_SESSION() = SHRINKSESSION_PHONE_FUCKED_UP AND iCurrentLine >= 10))
|
|
phoneState = SHRINKPHONESTATE_PASS
|
|
ELSE
|
|
IF bBroke
|
|
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
PRINT_HELP("SHRINK_BROKE")
|
|
ENDIF
|
|
phoneState = SHRINKPHONESTATE_FAIL
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Call completed successfully or was interrupted late.
|
|
CASE SHRINKPHONESTATE_PASS
|
|
DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_SHRINK, SHRINK_GET_SESSION_FEE(thisSession))
|
|
MISSION_FLOW_MISSION_PASSED()
|
|
SHRINK_PHONE_CLEANUP()
|
|
BREAK
|
|
|
|
// Call was interrupted too early, or we were broke.
|
|
CASE SHRINKPHONESTATE_FAIL
|
|
IF (NOT bBroke) OR (NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("SHRINK_BROKE"))
|
|
MISSION_FLOW_MISSION_FAILED()
|
|
SHRINK_PHONE_CLEANUP()
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDWHILE
|
|
ENDSCRIPT
|