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

3312 lines
107 KiB
Python
Executable File

USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_hud.sch"
USING "script_player.sch"
USING "brains.sch"
USING "commands_pad.sch"
USING "website_private.sch"
USING "website_public.sch"
USING "heading_push_trigger_public.sch"
USING "context_control_public.sch"
USING "net_mission.sch"
USING "scriptsaves_procs.sch"
USING "script_misc.sch"
USING "net_transition_sessions.sch"
INT iHealthDeltaLast = 0
VECTOR atmAT
INT iATMSynchSceneStage = 0
INT iATMSynchSceneID
VECTOR vSynchSceneOffset3rd = <<0,-0.7,1>>, vSynchSceneOffset1st = <<0,-0.8,1>>
VECTOR vSynchSceneOrigin
TEXT_LABEL tPreviousIdleAnim
BOOL bTransactionHappened = FALSE
BOOL bCreatedBlinders = FALSE
BOOL bDisplayedBEHelp = FALSE
BOOL bRunningInMP = FALSE
BOOL bMouseMode = FALSE
FLOAT fMouseStartX = -1.0
FLOAT fMouseStartY = -1.0
#IF IS_DEBUG_BUILD
WIDGET_GROUP_ID d_wAtmWidget
BOOL d_bAtmTestAnims
#ENDIF
ENUM eATM_ANIM_SET
eAnimSet_enter = 0, // enter
eAnimSet_base, // base
eAnimSet_idle, // idle_a [3:idle_b, 4:idle_c, 5:idle_d]
eAnimSet_exit // exit
ENDENUM
STRUCT ServerBroadcastData
INT iSeats[NUM_NETWORK_PLAYERS]
INT iAssignedSeatBS
BOOL bSpawnedPeds
ENDSTRUCT
ServerBroadcastData serverBD
STRUCT PlayerBroadcastData
BOOL bWarpedInside
ENDSTRUCT
PlayerBroadcastData playerBD[NUM_NETWORK_PLAYERS]
FUNC BOOL Get_Atm_Anim_Dict_Names(eATM_ANIM_SET eAnimset, TEXT_LABEL_63 &tAtmAnimDict /*, TEXT_LABEL_63 &tAtmAnimClip*/ )
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
#IF IS_DEBUG_BUILD
AND NOT d_bAtmTestAnims
#ENDIF
tAtmAnimDict = ""
RETURN FALSE
ENDIF
IF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()
RETURN FALSE
ENDIF
MODEL_NAMES ePlayer_ped_model = GET_ENTITY_MODEL(PLAYER_PED_ID())
IF ePlayer_ped_model = MP_M_FREEMODE_01
SWITCH eAnimset
CASE eAnimSet_enter
#IF NOT IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@mp_atm@enter"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "anim@amb@prop_human_atm@interior@male@enter"
ENDIF
RETURN TRUE
#ENDIF
#IF IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@male@enter"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "mini@atmenter"
ENDIF
RETURN TRUE
#ENDIF
BREAK
CASE eAnimSet_base
#IF NOT IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@mp_atm@base"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "anim@amb@prop_human_atm@interior@male@base"
ENDIF
RETURN TRUE
#ENDIF
#IF IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@male@base"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "mini@atmbase"
ENDIF
RETURN TRUE
#ENDIF
BREAK
CASE eAnimSet_idle
#IF NOT IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@male@idle_a" RETURN TRUE
#ENDIF
#IF IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@male@idle_a"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "anim@amb@prop_human_atm@interior@male@idle_a"
ENDIF
RETURN TRUE
#ENDIF
BREAK
CASE eAnimSet_exit
#IF NOT IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@mp_atm@exit"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "anim@amb@prop_human_atm@interior@male@exit"
ENDIF
RETURN TRUE
#ENDIF
#IF IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@male@exit"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "mini@atmexit"
ENDIF
RETURN TRUE
#ENDIF
BREAK
ENDSWITCH
ELIF ePlayer_ped_model = MP_F_FREEMODE_01
SWITCH eAnimset
CASE eAnimSet_enter
#IF NOT IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@enter" RETURN TRUE
#ENDIF
#IF IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@enter"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@enter"
ENDIF
RETURN TRUE
#ENDIF
BREAK
CASE eAnimSet_base
#IF NOT IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@base" RETURN TRUE
#ENDIF
#IF IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@base"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@base"
ENDIF
RETURN TRUE
#ENDIF
BREAK
CASE eAnimSet_idle
#IF NOT IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@idle_a" RETURN TRUE
#ENDIF
#IF IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@idle_a"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@idle_a"
ENDIF
RETURN TRUE
#ENDIF
BREAK
CASE eAnimSet_exit
#IF NOT IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@mp_atm@exit"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@exit"
ENDIF
RETURN TRUE
#ENDIF
#IF IS_NEXTGEN_BUILD
tAtmAnimDict = "anim@amb@prop_human_atm@interior@female@exit"
IF NOT DOES_ANIM_DICT_EXIST(tAtmAnimDict)
tAtmAnimDict = "mini@atmexit"
ENDIF
RETURN TRUE
#ENDIF
BREAK
ENDSWITCH
ENDIF
tAtmAnimDict = ""
RETURN FALSE
ENDFUNC
#IF IS_DEBUG_BUILD
PROC SETUP_ATM_DEBUG_WIDGETS()
d_wAtmWidget = START_WIDGET_GROUP("Atm Trigger")
ADD_WIDGET_BOOL("d_bAtmTestAnims", d_bAtmTestAnims)
ADD_WIDGET_BOOL("g_bFake_fire_and_forget_new_atm", g_bFake_fire_and_forget_new_atm)
STOP_WIDGET_GROUP()
ENDPROC
PROC MAINTAIN_ATM_DEBUG_WIDGETS()
IF d_bAtmTestAnims
TEXT_LABEL_63 tAtmAnimDict
Get_Atm_Anim_Dict_Names(eAnimSet_enter, tAtmAnimDict)
SET_CURRENT_WIDGET_GROUP(d_wAtmWidget)
WIDGET_GROUP_ID d_wAtmSubwidget = START_WIDGET_GROUP("d_bAtmTestAnims")
ADD_WIDGET_VECTOR_SLIDER("vSynchSceneOffset3rd", vSynchSceneOffset3rd, -2.0, 2.0, 0.001)
ADD_WIDGET_VECTOR_SLIDER("vSynchSceneOffset1st", vSynchSceneOffset1st, -2.0, 2.0, 0.001)
STOP_WIDGET_GROUP()
CLEAR_CURRENT_WIDGET_GROUP(d_wAtmWidget)
WHILE d_bAtmTestAnims
WAIT(0)
ENDWHILE
IF IS_SYNCHRONIZED_SCENE_RUNNING(iATMSynchSceneID)
DETACH_SYNCHRONIZED_SCENE(iATMSynchSceneID)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
DELETE_WIDGET_GROUP(d_wAtmSubwidget)
ENDIF
ENDPROC
#ENDIF
FUNC INT DO_MP_TRANSACTION_LOG(SCALEFORM_INDEX si)
INT i = 2
/*
INT g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.iLogCaret
INT g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogValues[MP_TOTAL_ATM_LOG_ENTRIES]
TEXT_LABEL_23 g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogSourceNames[MP_TOTAL_ATM_LOG_ENTRIES]
MP_ATM_LOG_ACTION_TYPE g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogActionType[MP_TOTAL_ATM_LOG_ENTRIES]
*/
IF g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.iLogCaret > MP_TOTAL_ATM_LOG_ENTRIES-1
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.iLogCaret = 0
ENDIF
INT iStartAt = g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.iLogCaret-1
IF iStartAt < 0
iStartAt = MP_TOTAL_ATM_LOG_ENTRIES-1
ENDIF
INT iCoveredCountDown = MP_TOTAL_ATM_LOG_ENTRIES
INT doneTotal = 0
WHILE iCoveredCountDown > 0
CPRINTLN(DEBUG_FINANCE, "DO_MP_TRANSACTION_LOG: iStartAt = ",iStartAt, " value ", g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogValues[iStartAt])
IF g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogValues[iStartAt] > 0
AND INT_TO_ENUM(SPEND_CATEGORIES, g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[iStartAt]) != MONEY_SPENT_BETTING
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i)
++doneTotal
SWITCH g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogActionType[iStartAt]
CASE MALA_CASH_BOUGHT
CASE MALA_CASH_RECIEVED
CASE MALA_DEPOSIT
CASE MALA_REFUND
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
BREAK
CASE MALA_WITHDRAW
CASE MALA_CASH_SENT
CASE MALA_PURCHASE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
BREAK
ENDSWITCH
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogValues[iStartAt])
SPEND_CATEGORIES s
EARN_CATEGORIES e
SWITCH g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogActionType[iStartAt]
CASE MALA_WITHDRAW
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_PLCHLDR_WDR")
BREAK
CASE MALA_DEPOSIT
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_PLCHLDR_CAD")
BREAK
CASE MALA_CASH_RECIEVED
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("MPATM_PLCHLDR_CRF")
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogSourceNames[iStartAt])
END_TEXT_COMMAND_SCALEFORM_STRING()
BREAK
CASE MALA_CASH_SENT
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("MPATM_PLCHLDR_CST")
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogSourceNames[iStartAt])
END_TEXT_COMMAND_SCALEFORM_STRING()
BREAK
CASE MALA_CASH_BOUGHT
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_PLCHLDR_BRT")
BREAK
CASE MALA_PURCHASE
IF g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[iStartAt] != 0
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_STRING_FROM_HASH_KEY(g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[iStartAt]))
s = INT_TO_ENUM(SPEND_CATEGORIES, g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[iStartAt])
SWITCH s
CASE MONEY_SPENT_CONTACT_SERVICE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_CONTACT_SERVICE")
BREAK
CASE MONEY_SPENT_PROPERTY_UTIL
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_PROPERTY_UTIL")
BREAK
CASE MONEY_SPENT_JOB_ACTIVITY
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_JOB_ACTIVITY")
BREAK
CASE MONEY_SPENT_BETTING
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_BETTING")
BREAK
CASE MONEY_SPENT_STYLE_ENT
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_STYLE_ENT")
BREAK
CASE MONEY_SPENT_HEALTHCARE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_HEALTHCARE")
BREAK
CASE MONEY_SPENT_FROM_DEBUG
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_FROM_DEBUG")
BREAK
CASE MONEY_SPENT_DROPPED_STOLEN
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_DROPPED_STOLEN")
BREAK
CASE MONEY_SPENT_VEH_MAINTENANCE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_VEH_MAINTENANCE")
BREAK
CASE MONEY_SPENT_HOLDUPS
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_HOLDUPS")
BREAK
CASE MONEY_SPENT_PASSIVEMODE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_PASSIVEMODE")
BREAK
//CASE MONEY_SPENT_BANKINTEREST
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_SPENT_BANKINTEREST")
// BREAK
ENDSWITCH
ELSE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_PLCHLDR_PRCH")
ENDIF
BREAK
CASE MALA_REFUND
IF g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[iStartAt] != 0
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(GET_STRING_FROM_HASH_KEY(g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[iStartAt]))
e = INT_TO_ENUM(EARN_CATEGORIES,g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[iStartAt])
SWITCH e
CASE MONEY_EARN_JOBS
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_JOBS")
BREAK
CASE MONEY_EARN_SELLING_VEH
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_SELLING_VEH")
BREAK
CASE MONEY_EARN_BETTING
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_BETTING")
BREAK
CASE MONEY_EARN_GOOD_SPORT
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_GOOD_SPORT")
BREAK
CASE MONEY_EARN_PICKED_UP
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_PICKED_UP")
BREAK
CASE MONEY_EARN_SHARED
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_SHARED")
BREAK
CASE MONEY_EARN_JOBSHARED
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_JOBSHARED")
BREAK
CASE MONEY_EARN_ROCKSTAR_AWARD
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_ROCKSTAR_AWARD")
BREAK
CASE MONEY_EARN_REFUND
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_REFUND")
BREAK
CASE MONEY_EARN_FROM_JOB_BONUS
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_JOB_BONUS")
BREAK
CASE MONEY_EARN_FROM_HEIST_JOB
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MONEY_EARN_HEIST_JOB")
BREAK
ENDSWITCH
ELSE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_PLCHLDR_REF")
ENDIF
BREAK
ENDSWITCH
/*
[MPATM_PLCHLDR_CRF]
Cash Received from: ~a~
[MPATM_PLCHLDR_CST]
Cash Sent to: ~a~
[MPATM_PLCHLDR_CAD]
Cash Deposited
[MPATM_PLCHLDR_WDR]
Cash Withdrawn
*/
END_SCALEFORM_MOVIE_METHOD()
++i
ENDIF
--iStartAt
IF iStartAt = -1
iStartAt = MP_TOTAL_ATM_LOG_ENTRIES-1
ENDIF
--iCoveredCountDown
ENDWHILE
RETURN doneTotal
ENDFUNC
FUNC BOOL ATM_HEALTH_DELTA_FAILED()
PED_INDEX pi = PLAYER_PED_ID()
IF IS_ENTITY_DEAD(pi)
RETURN TRUE
ENDIF
IF iHealthDeltaLast = 0
iHealthDeltaLast = GET_ENTITY_HEALTH(pi)
RETURN FALSE
ENDIF
INT thelth = GET_ENTITY_HEALTH(pi)
IF iHealthDeltaLast != thelth
iHealthDeltaLast = thelth
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
BOOL shapeTestResult = FALSE
SHAPETEST_INDEX currentShapeTest = NULL
FUNC BOOL PLAYER_STOOD_ON_A_CAR()
//if not sure return false
IF currentShapeTest = NULL
//start test
VECTOR atpoint = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)
currentShapeTest = START_SHAPE_TEST_CAPSULE(atpoint, atpoint -<<0,0,3.0>>, 0.33, SCRIPT_INCLUDE_VEHICLE, PLAYER_PED_ID())
RETURN shapeTestResult
ELSE
//continue test
INT iHit = 0
VECTOR a
VECTOR b
ENTITY_INDEX thing
SHAPETEST_STATUS result = GET_SHAPE_TEST_RESULT(currentShapeTest,iHit,a,b,thing)
IF result = SHAPETEST_STATUS_RESULTS_READY//check for expired also
shapeTestResult = FALSE
IF iHit != 0
CPRINTLN(DEBUG_FINANCE, "Got shapetest result : ",iHit)
currentShapeTest = NULL
//was a car hit
IF IS_ENTITY_A_VEHICLE(thing)
AND NOT IS_ENTITY_A_GHOST(thing)
shapeTestResult = TRUE
ENDIF
ENDIF
RETURN shapeTestResult
ELSE
IF result = SHAPETEST_STATUS_NONEXISTENT
currentShapeTest = NULL
ENDIF
RETURN shapeTestResult
ENDIF
ENDIF
//if sure set shapeTestResult one way or another
RETURN FALSE
ENDFUNC
INT iRangeCheckGracePeriod = 0
FUNC BOOL SCREEN_TERMINATION_CONDITION_CHECKS(OBJECT_INDEX oAtm, BOOL bDoOutOfRange = TRUE)
IF NETWORK_IS_SESSION_ACTIVE()
IF NETWORK_SESSION_IS_AWAITING_INVITE_RESPONSE()
RETURN TRUE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(oAtm)
AND IS_ENTITY_AN_OBJECT(oAtm)
IF HAS_OBJECT_BEEN_BROKEN(oAtm)
RETURN TRUE
ENDIF
ENDIF
//IF IS_SYSTEM_UI_BEING_DISPLAYED()
// RETURN TRUE
//ENDIF
IF IS_SELECTOR_ONSCREEN(FALSE)
RETURN TRUE
ENDIF
IF bDoOutOfRange
AND iRangeCheckGracePeriod > 1000
IF NOT (IS_ENTITY_AT_COORD(PLAYER_PED_ID(),atmAT, << 1.5, 1.5, 1.5 >>, FALSE,TRUE, TM_ON_FOOT))
RETURN TRUE
ENDIF
ENDIF
IF (IS_PED_RAGDOLL(PLAYER_PED_ID()))
RETURN TRUE
ENDIF
PLAYER_INDEX pi = GET_PLAYER_INDEX()
IF NOT IS_PLAYER_PLAYING(pi)
RETURN TRUE
ENDIF
IF NOT IS_PLAYER_CONTROL_ON(pi)
RETURN TRUE
ENDIF
IF ATM_HEALTH_DELTA_FAILED()
RETURN TRUE
ENDIF
IF PLAYER_STOOD_ON_A_CAR()
CPRINTLN(DEBUG_FINANCE, "Atm detected car stand")
RETURN TRUE
ENDIF
IF g_bInMultiplayer
AND MP_FORCE_TERMINATE_INTERNET_ACTIVE()
PRINTLN("SCREEN_TERMINATION_CONDITION_CHECKS - MP force terminate internet active")
RETURN FALSE
ENDIF
IF NOT g_bInMultiplayer
AND SP_FORCE_TERMINATE_INTERNET_ACTIVE()
PRINTLN("SCREEN_TERMINATION_CONDITION_CHECKS - SP force terminate internet active")
RETURN FALSE
ENDIF
IF (g_bInMultiplayer) AND NETWORK_IS_GAME_IN_PROGRESS()
IF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()
CPRINTLN(DEBUG_FINANCE, "Atm - SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()")
RETURN TRUE
ENDIF
// #IF FEATURE_HEIST_PLANNING
// IF IS_THIS_TRANSITION_SESSION_PLAYER_ON_CALL()
// PRINTLN("Atm - IS_THIS_TRANSITION_SESSION_PLAYER_ON_CALL()")
// RETURN TRUE
// ENDIF
// #ENDIF
//do some checks to see if someone else is using the ATM in MP
INT i
REPEAT NUM_NETWORK_PLAYERS i
IF playerBD[i].bWarpedInside
AND PARTICIPANT_ID_TO_INT() != i
CPRINTLN(DEBUG_FINANCE, "Atm - playerBD[", i, "].bWarpedInside")
RETURN TRUE
ENDIF
ENDREPEAT
ENDIF
RETURN FALSE
ENDFUNC
INT iTerminationCooldown = 3000
FUNC BOOL SCREEN_TERMINATION_CONDITION(OBJECT_INDEX oAtm, BOOL bDoOutOfRange = TRUE)
IF iTerminationCooldown < 3000
CDEBUG1LN(DEBUG_FINANCE, "Atm SCREEN_TERMINATION_CONDITION: ", iTerminationCooldown)
RETURN TRUE
ENDIF
IF SCREEN_TERMINATION_CONDITION_CHECKS(oAtm,bDoOutOfRange)
iTerminationCooldown = 0
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
INT iCandidate = NO_CANDIDATE_ID
SCALEFORM_INDEX atmmov = NULL
SCALEFORM_INDEX atmbuttons
INT iPendingTransactionAmount = 0
BOOL bHeistFinaleBoardUnpinned = FALSE
BOOL bTriggered = FALSE
PROC CLEANUP_ATM()
CDEBUG1LN(DEBUG_FINANCE, " - atm_trigger - CLEANUP - Cleaning up the ATM.")
IF bTriggered
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
CPRINTLN(DEBUG_FINANCE, "Player atm scenario cancel out")
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())//1388194
IF (IS_PED_USING_ANY_SCENARIO(PLAYER_PED_ID()))
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(PLAYER_PED_ID())
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ENDIF
ENDIF
ENDIF
REMOVE_HELP_FROM_FLOW_QUEUE("ATM_1TM_TUT")
IF iCandidate != NO_CANDIDATE_ID
RELEASE_CONTEXT_INTENTION(iCandidate)
ENDIF
IF atmmov != NULL
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(atmmov)
ENDIF
MP_FORCE_TERMINATE_INTERNET_CLEAR()
SP_FORCE_TERMINATE_INTERNET_CLEAR()
g_bInAtm = FALSE//1649814
//Disable blinders if we created them
SET_MULTIHEAD_SAFE(FALSE,TRUE,bCreatedBlinders, TRUE)
IF bHeistFinaleBoardUnpinned
CDEBUG1LN(DEBUG_FINANCE, " - atm_trigger - CLEANUP - Re-pinning heist finale planning baord on cleanup of ATM.")
PIN_HEIST_BOARD_IN_MEMORY(HEIST_FINALE, TRUE)
bHeistFinaleBoardUnpinned = FALSE
ENDIF
ENDPROC
////////////////////////////////MP transaction log
PROC ATM_CONTROL_DISABLE()
SET_CLEAR_ON_CALL_HUD_THIS_FRAME()
IF (NOT IS_SYSTEM_UI_BEING_DISPLAYED())
AND (NOT IS_PAUSE_MENU_ACTIVE())
DISABLE_ALL_CONTROL_ACTIONS(PLAYER_CONTROL)
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_UP)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_DOWN)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_LEFT)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_RIGHT)
//DISABLE_ALL_CONTROL_ACTIONS(FRONTEND_CONTROL)4789992
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_X)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_Y)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT)
ENDIF
ENDPROC
PROC RENDER_ATM()
HIDE_HUD_AND_RADAR_THIS_FRAME()
HIDE_SCRIPTED_HUD_COMPONENT_THIS_FRAME(HUD_MP_RANK_BAR)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
ATM_CONTROL_DISABLE()
IF g_bInMultiplayer
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_CASH)//1544427
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_MP_MESSAGE)
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE)
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH)
ENDIF
#IF USE_TU_CHANGES
g_b_IsATMrenderingForTimers = TRUE
NET_NL()NET_PRINT("RENDER_ATM: g_b_IsATMrenderingForTimers")
#ENDIF
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_PAUSE)
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD)
DRAW_SCALEFORM_MOVIE_FULLSCREEN(atmmov,255,255,255,255)
REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME()
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
DISABLE_ALL_MP_HUD_THIS_FRAME()
WAIT(0)
ENDPROC
PROC CONFIGURE_ATM_BUTTONS(BOOL bScroll = FALSE, BOOL bAnalogueScroll = FALSE)
CPRINTLN(DEBUG_FINANCE, "CONFIGURE_ATM_BUTTONS: bScroll-",bScroll," bAnalogueScroll-",bAnalogueScroll)
BEGIN_SCALEFORM_MOVIE_METHOD(atmbuttons, "CLEAR_ALL")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(atmbuttons, "SET_CLEAR_SPACE")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(200)
END_SCALEFORM_MOVIE_METHOD()
// Clickable buttons for PC keyboard and mouse
IF IS_PC_VERSION()
BEGIN_SCALEFORM_MOVIE_METHOD(atmbuttons, "TOGGLE_MOUSE_BUTTONS")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
END_SCALEFORM_MOVIE_METHOD()
ENDIF
INT orderlol = 0 //1483746
IF g_bInMultiplayer
BEGIN_SCALEFORM_MOVIE_METHOD(atmbuttons, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(orderlol)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_SELECT")
IF IS_PC_VERSION()
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) // CLICKABLE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(INPUT_FRONTEND_ACCEPT))
ENDIF
END_SCALEFORM_MOVIE_METHOD()
++orderlol
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
bAnalogueScroll = FALSE
ENDIF
IF bScroll
BEGIN_SCALEFORM_MOVIE_METHOD(atmbuttons, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(orderlol)
IF bAnalogueScroll
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT_AXIS_Y))
ELSE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUTGROUP_FRONTEND_DPAD_UD))
ENDIF
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_NAV")
IF IS_PC_VERSION()
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE) // NON-CLICKABLE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(MAX_INPUTS))
ENDIF
END_SCALEFORM_MOVIE_METHOD()
++orderlol
ENDIF
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(atmbuttons, "SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(orderlol)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INSTRUCTIONAL_BUTTONS(GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_EXIT")
IF IS_PC_VERSION()
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) // CLICKABLE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(INPUT_FRONTEND_CANCEL))
ENDIF
END_SCALEFORM_MOVIE_METHOD()
++orderlol
BEGIN_SCALEFORM_MOVIE_METHOD(atmbuttons, "DRAW_INSTRUCTIONAL_BUTTONS")
END_SCALEFORM_MOVIE_METHOD()
ENDPROC
FUNC BOOL CONVERT_FM_TO_VC(OBJECT_INDEX oAtm, INT XDollars)
INT iRemaining
IF !NETWORK_CAN_SPEND_MONEY2(XDollars, FALSE, FALSE, FALSE, iRemaining)
RETURN FALSE
ENDIF
IF USE_SERVER_TRANSACTIONS()
IF NET_GAMESERVER_TRANSACTION_IN_PROGRESS()
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") error three (NET_GAMESERVER_TRANSACTION_IN_PROGRESS)")
RETURN FALSE
ENDIF
INT currentState, refreshSessionRequested
NET_GAMESERVER_GET_SESSION_STATE_AND_STATUS(currentState, refreshSessionRequested)
IF (INT_TO_ENUM(GAMESERVER_STATES, currentState) != GAMESERVER_READY)
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") error four (currentState[", currentState, "] != GAMESERVER_READY)")
RETURN FALSE
ENDIF
IF NET_GAMESERVER_TRANSFER_WALLET_TO_BANK(GET_MP_INT_PLAYER_STAT(MPPLY_LAST_MP_CHAR), XDollars)
NET_GAMESERVER_TRANSACTION_STATUS eNSTS
eNSTS = NET_GAMESERVER_TRANSFER_WALLET_TO_BANK_GET_STATUS()
WHILE (eNSTS = TRANSACTION_STATUS_PENDING)
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
eNSTS = NET_GAMESERVER_TRANSFER_WALLET_TO_BANK_GET_STATUS()
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") waiting")
RENDER_ATM()
ENDWHILE
IF eNSTS = TRANSACTION_STATUS_SUCCESSFULL
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") success!!!")
NET_GAMESERVER_TRANSFER_CASH_SET_TELEMETRY_NONCE_SEED()
//
ELSE
#IF IS_DEBUG_BUILD
SWITCH eNSTS
CASE TRANSACTION_STATUS_NONE
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") error two (TRANSACTION_STATUS_NONE != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
CASE TRANSACTION_STATUS_PENDING
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") error two (TRANSACTION_STATUS_PENDING != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
CASE TRANSACTION_STATUS_FAILED
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") error two (TRANSACTION_STATUS_FAILED != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
CASE TRANSACTION_STATUS_SUCCESSFULL
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") error two (TRANSACTION_STATUS_SUCCESSFULL != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
CASE TRANSACTION_STATUS_CANCELED
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") error two (TRANSACTION_STATUS_CANCELED != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
DEFAULT
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") error two (eNSTS_", eNSTS, " != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
ENDSWITCH
#ENDIF
RETURN FALSE
ENDIF
ELSE
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") error one (not NET_GAMESERVER_TRANSFER_BANK_TO_WALLET", GET_MP_INT_PLAYER_STAT(MPPLY_LAST_MP_CHAR), ", ", XDollars, "))")
RETURN FALSE
ENDIF
ELSE
CPRINTLN(DEBUG_FINANCE, "CONVERT_FM_TO_VC($",XDollars,") ignore NET_GAMESERVER_TRANSFER_WALLET_TO_BANK")
ENDIF
DEPOSIT_VC(XDollars)
IF (g_bInMultiplayer) AND NETWORK_IS_GAME_IN_PROGRESS()
INCREMENT_BY_MP_INT_CHARACTER_STAT(MP_STAT_ATM_BANK_BALANCE,1)
CPRINTLN(DEBUG_FINANCE, "[KW] INCREMENT_BY_MP_INT_CHARACTER_STAT(MP_STAT_ATM_BANK_BALANCE,1)")
ENDIF
bTransactionHappened = TRUE
RETURN TRUE
ENDFUNC
INT iLastTransactionID = -1
FUNC BOOL CONVERT_VC_TO_FM(OBJECT_INDEX oAtm, INT XDollars)
INT iOwned = NETWORK_GET_VC_BANK_BALANCE()
IF XDollars > iOwned
RETURN FALSE
ENDIF
IF USE_SERVER_TRANSACTIONS()
IF NET_GAMESERVER_TRANSACTION_IN_PROGRESS()
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") error three (NET_GAMESERVER_TRANSACTION_IN_PROGRESS)")
RETURN FALSE
ENDIF
INT currentState, refreshSessionRequested
NET_GAMESERVER_GET_SESSION_STATE_AND_STATUS(currentState, refreshSessionRequested)
IF (INT_TO_ENUM(GAMESERVER_STATES, currentState) != GAMESERVER_READY)
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") error four (currentState[", currentState, "] != GAMESERVER_READY)")
RETURN FALSE
ENDIF
IF NET_GAMESERVER_TRANSFER_BANK_TO_WALLET(GET_MP_INT_PLAYER_STAT(MPPLY_LAST_MP_CHAR), XDollars)
NET_GAMESERVER_TRANSACTION_STATUS eNSTS
eNSTS = NET_GAMESERVER_TRANSFER_BANK_TO_WALLET_GET_STATUS()
WHILE (eNSTS = TRANSACTION_STATUS_PENDING)
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
eNSTS = NET_GAMESERVER_TRANSFER_WALLET_TO_BANK_GET_STATUS()
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,"): waiting...")
RENDER_ATM()
ENDWHILE
IF eNSTS = TRANSACTION_STATUS_SUCCESSFULL
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") success!!!")
NET_GAMESERVER_TRANSFER_CASH_SET_TELEMETRY_NONCE_SEED()
//
ELSE
#IF IS_DEBUG_BUILD
SWITCH eNSTS
CASE TRANSACTION_STATUS_NONE
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") error two (TRANSACTION_STATUS_NONE != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
CASE TRANSACTION_STATUS_PENDING
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") error two (TRANSACTION_STATUS_PENDING != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
CASE TRANSACTION_STATUS_FAILED
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") error two (TRANSACTION_STATUS_FAILED != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
CASE TRANSACTION_STATUS_SUCCESSFULL
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") error two (TRANSACTION_STATUS_SUCCESSFULL != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
CASE TRANSACTION_STATUS_CANCELED
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") error two (TRANSACTION_STATUS_CANCELED != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
DEFAULT
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") error two (eNSTS_", eNSTS, " != TRANSACTION_STATUS_SUCCESSFULL)")
BREAK
ENDSWITCH
#ENDIF
RETURN FALSE
ENDIF
ELSE
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") error one (not NET_GAMESERVER_TRANSFER_BANK_TO_WALLET", GET_MP_INT_PLAYER_STAT(MPPLY_LAST_MP_CHAR), ", ", XDollars, "))")
RETURN FALSE
ENDIF
ELSE
CPRINTLN(DEBUG_FINANCE, "CONVERT_VC_TO_FM($",XDollars,") ignore NET_GAMESERVER_TRANSFER_BANK_TO_WALLET")
ENDIF
iLastTransactionID = WITHDRAW_VC( XDollars )
bTransactionHappened = TRUE
IF (g_bInMultiplayer) AND NETWORK_IS_GAME_IN_PROGRESS()
INCREMENT_BY_MP_INT_CHARACTER_STAT(MP_STAT_ATM_BANK_BALANCE,1)
CPRINTLN(DEBUG_FINANCE, "[KW] INCREMENT_BY_MP_INT_CHARACTER_STAT(MP_STAT_ATM_BANK_BALANCE,1) 2")
ENDIF
RETURN TRUE
ENDFUNC
ENUM TRANSTOTALMODE
TTM_WITHDRAW,
TTM_DEPOSIT
ENDENUM
FUNC INT GET_TRANSACTION_TOTAL_BY_INDEX(Int index, TRANSTOTALMODE tm)
INT dol = 0
IF tm = TTM_DEPOSIT
dol = NETWORK_GET_VC_WALLET_BALANCE()
ELSE
dol = NETWORK_GET_VC_BANK_BALANCE()
ENDIF
IF dol = 0
//zero dollars carried, invalid, set 1
RETURN 1
ENDIF
SWITCH index
CASE 0
IF 50 > dol
RETURN dol
ENDIF
RETURN 50
CASE 1
IF 500 > dol AND dol > 50
RETURN dol
ENDIF
RETURN 500
CASE 2
IF 2500 > dol AND dol > 500
RETURN dol
ENDIF
RETURN 2500
CASE 3
IF 10000 > dol AND dol > 2500
RETURN dol
ENDIF
RETURN 10000
CASE 4
IF 100000 > dol AND dol > 10000
RETURN dol
ENDIF
RETURN 100000
CASE 5
IF 10000000 > dol AND dol > 100000
RETURN dol
ENDIF
RETURN 10000000
ENDSWITCH
RETURN 0
ENDFUNC
FUNC BOOL DOES_PLAYER_HAVE_MORE_VC_BUCKS_THAN_MIN_ACTION()//implying withdraw
IF NETWORK_GET_VC_BANK_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(0,TTM_WITHDRAW)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL DOES_PLAYER_HAVE_MORE_FM_BUCKS_THAN_MIN_ACTION()//implying deposit
IF NETWORK_GET_VC_WALLET_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(0,TTM_DEPOSIT)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
ENUM MP_ATM_PAGE_ENUM
MPAPE_FIRST_CHOICE,
MPAPE_TRANSLOG,
//MPAPE_DEPOSIT,
MPAPE_DEPOSIT_ASK,
MPAPE_PICK_AMOUNT_DEPOSIT,
MPAPE_DEPOSIT_PEND,
MPAPE_CONFIRM_DEPOSIT,
//MPAP_WITHDRAW
MPAPE_WITHDRAW_ASK,
MPAPE_PICK_AMOUNT_WITHDRAW,
MPAPE_WITHDRAW_PEND,
MPAPE_CONFIRM_WITHDRAW,
MPAPE_ERROR_PAGE,
MPAPE_TRANSACTION_COMPLETE
ENDENUM
//////////
FUNC BOOL MP_CONFIRM_WITHDRAW_TRANSACTION(OBJECT_INDEX oAtm)
INT iTrans = iLastTransactionID
INT iTime = GET_GAME_TIMER() + 1000
WHILE (NOT HAS_VC_WITHDRAWAL_COMPLETED(iTrans))
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
CPRINTLN(DEBUG_FINANCE, "MP_CONFIRM_WITHDRAW_TRANSACTION: waiting")
RENDER_ATM()
//WAIT(0)
ENDWHILE
WHILE iTime > GET_GAME_TIMER()
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
CPRINTLN(DEBUG_FINANCE, "MP_CONFIRM_WITHDRAW_TRANSACTION: waiting")
RENDER_ATM()
//WAIT(0)
ENDWHILE
RETURN WAS_VC_WITHDRAWAL_SUCCESSFUL(iTrans)
ENDFUNC
#IF IS_DEBUG_BUILD
FUNC STRING DEBUG_GET_ATM_PAGE_NAME(MP_ATM_PAGE_ENUM currentPage)
SWITCH currentPage
CASE MPAPE_FIRST_CHOICE
RETURN "MPAPE_FIRST_CHOICE"
CASE MPAPE_TRANSLOG
RETURN "MPAPE_TRANSLOG"
CASE MPAPE_DEPOSIT_ASK
RETURN "MPAPE_DEPOSIT_ASK"
CASE MPAPE_PICK_AMOUNT_DEPOSIT
RETURN "MPAPE_PICK_AMOUNT_DEPOSIT"
CASE MPAPE_CONFIRM_DEPOSIT
RETURN "MPAPE_CONFIRM_DEPOSIT"
CASE MPAPE_WITHDRAW_ASK
RETURN "MPAPE_WITHDRAW_ASK"
CASE MPAPE_PICK_AMOUNT_WITHDRAW
RETURN "MPAPE_PICK_AMOUNT_WITHDRAW"
CASE MPAPE_CONFIRM_WITHDRAW
RETURN "MPAPE_CONFIRM_WITHDRAW"
CASE MPAPE_ERROR_PAGE
RETURN "MPAPE_ERROR_PAGE"
CASE MPAPE_TRANSACTION_COMPLETE
RETURN "MPAPE_TRANSACTION_COMPLETE"
ENDSWITCH
RETURN "!!DEBUG_GET_ATM_PAGE_NAME missing atm page name!!"
ENDFUNC
#ENDIF
//////////////////////////////////////
INT browserMpLastSelection = -1
BOOL bDoMpRefreshUpdate = FALSE
PROC GOTO_ATM_PAGE(MP_ATM_PAGE_ENUM &currentPage,MP_ATM_PAGE_ENUM toPage)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_FINANCE, "GOTO_ATM_PAGE : ",DEBUG_GET_ATM_PAGE_NAME( currentPage) , " -> ", DEBUG_GET_ATM_PAGE_NAME( toPage))
#ENDIF
bDoMpRefreshUpdate = TRUE
currentPage = toPage
ENDPROC
/*
FUNC BOOL DOES_PLAYER_HAVE_MORE_MONEY_THAN_MIN_WITHDRAW()
IF NETWORK_GET_VC_BANK_BALANCE() > GET_TRANSACTION_TOTAL_BY_INDEX(0)//min value
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
*/
PROC DO_MP_UPDATE_ATM(OBJECT_INDEX oAtm, SCALEFORM_INDEX si, MP_ATM_PAGE_ENUM &currentPage)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT_EMPTY")
END_SCALEFORM_MOVIE_METHOD()
CPRINTLN(DEBUG_FINANCE, "DO_MP_UPDATE_ATM: Triggered")
///INT i = 0
///
INT iTime = 0
BOOL bScroll = FALSE
BOOL bScrollAnalogue = FALSE
SWITCH currentPage
CASE MPAPE_FIRST_CHOICE //1 withdraw index //2 transaction log index
//choose a service
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_SER")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_DIDM")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_WITM")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(3)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_LOG")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MENU")
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MPAPE_TRANSLOG
//show the log
/*
DISPLAY_TRANSACTIONS
This replaces the previous transaction logs that used 'UPDATE_TEXT' to add data.
The first two slots are reserved for the header string and the back button, with log data starting at slot 2.
Other than the starting slotID being 2 instead of 4, everything else remains as before.
Log entries start from Slot ID 2.
You can add as many entries as you like, and the page will set it's height dynamically to match the number of entries.
Cash value must be a positive number.
Dollar symbols added automatically, as are the ".00" at the end.
Amounts automatically have a comma every three digits
Minus symbol added fornegative flag
CR and DB added to signify credit and debit
slotID 0 - String Header
slotID 1 - STRING button text ("back" button)
slotID 2 onwards - log data
Example data:
0, "Transactions Log"
1, "Back"
2, 0, 230000, "Somethingsomething"
3, 1, 2301000, "Somethingsomething"
Log data for each slot should have the following elements:
param 1 INT - slotID
param 2 INT - Transaction type (0 for debit, 1 for credit)
param 3 INT - Value (positive value. Negative values require param 2 to be zero)
param 4 String - Source of transaction
*/
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("MPATM_LOG")
//ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(GET_PLAYER_NAME(GET_PLAYER_INDEX()))
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_BACK")
END_SCALEFORM_MOVIE_METHOD()
IF DO_MP_TRANSACTION_LOG(si) > 13
bScroll = TRUE
bScrollAnalogue = TRUE
ENDIF
/*
//MPATM_PLCHLDR
REPEAT 30 i
DO_PLACEHOLDER_MP_TRANSACTION_LOG()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i + 2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_PLCHLDR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(101010101)
END_SCALEFORM_MOVIE_METHOD()
ENDREPEAT
*/
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_TRANSACTIONS")
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MPAPE_DEPOSIT_PEND
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_PEND")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
iTime = GET_GAME_TIMER() + 1000
WHILE iTime > GET_GAME_TIMER()
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
CPRINTLN(DEBUG_FINANCE, "MPAPE_DEPOSIT_PEND: waiting on gameTimer")
RENDER_ATM()
ENDWHILE
GOTO_ATM_PAGE(currentPage,MPAPE_TRANSACTION_COMPLETE)
BREAK
CASE MPAPE_WITHDRAW_PEND
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_PEND")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
IF MP_CONFIRM_WITHDRAW_TRANSACTION(oAtm)
CPRINTLN(DEBUG_FINANCE, "MPAPE_WITHDRAW_PEND: successfull transaction")
GOTO_ATM_PAGE(currentPage,MPAPE_TRANSACTION_COMPLETE)
ELSE
CPRINTLN(DEBUG_FINANCE, "MPAPE_WITHDRAW_PEND: error three (not MP_CONFIRM_WITHDRAW_TRANSACTION)")
GOTO_ATM_PAGE(currentPage,MPAPE_ERROR_PAGE)
ENDIF
BREAK
CASE MPAPE_DEPOSIT_ASK //1 yes //2 no
IF DOES_PLAYER_HAVE_MORE_FM_BUCKS_THAN_MIN_ACTION()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("MPATM_XDOL")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(NETWORK_GET_VC_BANK_BALANCE(),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MO_YES")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MO_NO")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
ELSE
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_NODO")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_BACK")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
ENDIF
BREAK
CASE MPAPE_WITHDRAW_ASK //1 yes //2 no
IF DOES_PLAYER_HAVE_MORE_VC_BUCKS_THAN_MIN_ACTION()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("MPATM_XDOL2")
//ADD_TEXT_COMPONENT_INTEGER(NETWORK_GET_VC_BANK_BALANCE())
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(NETWORK_GET_VC_BANK_BALANCE(),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MO_YES")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MO_NO")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
ELSE
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_NODO2")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_BACK")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
ENDIF
BREAK
CASE MPAPE_PICK_AMOUNT_DEPOSIT
IF NOT DOES_PLAYER_HAVE_MORE_FM_BUCKS_THAN_MIN_ACTION()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_NODO")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_BACK")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
ELSE
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_DITMT")
END_SCALEFORM_MOVIE_METHOD()
IF NETWORK_GET_VC_WALLET_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(0,TTM_DEPOSIT)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(0))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(0,TTM_DEPOSIT),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
IF NETWORK_GET_VC_WALLET_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(1,TTM_DEPOSIT)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(1))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(1,TTM_DEPOSIT),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
IF NETWORK_GET_VC_WALLET_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(2,TTM_DEPOSIT)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(3)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(2))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(2,TTM_DEPOSIT),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT") ///left button
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(4)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(4444)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_BACK")
END_SCALEFORM_MOVIE_METHOD()
IF NETWORK_GET_VC_WALLET_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(3,TTM_DEPOSIT)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(5)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(3))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(3,TTM_DEPOSIT),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
IF NETWORK_GET_VC_WALLET_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(4,TTM_DEPOSIT)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(6)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(4))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(4,TTM_DEPOSIT),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
IF NETWORK_GET_VC_WALLET_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(5,TTM_DEPOSIT)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(7)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(5))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(5,TTM_DEPOSIT),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
/*
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT") /// right button
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(8)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(8888)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_TLOG")
END_SCALEFORM_MOVIE_METHOD()
*/
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_CASH_OPTIONS")
END_SCALEFORM_MOVIE_METHOD()
ENDIF
BREAK
CASE MPAPE_CONFIRM_DEPOSIT
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_CONF")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iPendingTransactionAmount)
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("MPATM_CONF")
//ADD_TEXT_COMPONENT_INTEGER(iPendingTransactionAmount)
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(iPendingTransactionAmount,INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MO_YES")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MO_NO")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MPAPE_PICK_AMOUNT_WITHDRAW
IF NOT DOES_PLAYER_HAVE_MORE_VC_BUCKS_THAN_MIN_ACTION()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_NODO2")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_BACK")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
ELSE
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_WITMT")
END_SCALEFORM_MOVIE_METHOD()
IF NETWORK_GET_VC_BANK_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(0,TTM_WITHDRAW)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(0))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(0,TTM_WITHDRAW),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
IF NETWORK_GET_VC_BANK_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(1,TTM_WITHDRAW)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(1))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(1,TTM_WITHDRAW),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
IF NETWORK_GET_VC_BANK_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(2,TTM_WITHDRAW)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(3)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(2))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(2,TTM_WITHDRAW),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT") ///left button
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(4)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(4444)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_BACK")
END_SCALEFORM_MOVIE_METHOD()
IF NETWORK_GET_VC_BANK_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(3,TTM_WITHDRAW)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(5)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(3))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(3,TTM_WITHDRAW),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
IF NETWORK_GET_VC_BANK_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(4,TTM_WITHDRAW)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(6)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(4))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(4,TTM_WITHDRAW),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
IF NETWORK_GET_VC_BANK_BALANCE() >= GET_TRANSACTION_TOTAL_BY_INDEX(5,TTM_WITHDRAW)
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(7)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(GET_TRANSACTION_TOTAL_BY_INDEX(5))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("ESDOLLA")
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(GET_TRANSACTION_TOTAL_BY_INDEX(5,TTM_WITHDRAW),INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
ENDIF
/*
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT") /// right button
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(8)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(8888)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_TLOG")
END_SCALEFORM_MOVIE_METHOD()
*/
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_CASH_OPTIONS")
END_SCALEFORM_MOVIE_METHOD()
ENDIF
BREAK
CASE MPAPE_CONFIRM_WITHDRAW
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_CONF")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iPendingTransactionAmount)
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("MPATC_CONFW")
//ADD_TEXT_COMPONENT_INTEGER()
ADD_TEXT_COMPONENT_FORMATTED_INTEGER(iPendingTransactionAmount,INTEGER_FORMAT_COMMA_SEPARATORS)
END_TEXT_COMMAND_SCALEFORM_STRING()
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MO_YES")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MO_NO")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MPAPE_ERROR_PAGE
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_ERR")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_BACK")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MPAPE_TRANSACTION_COMPLETE
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_TRANCOM")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MPATM_BACK")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_MESSAGE")
END_SCALEFORM_MOVIE_METHOD()
BREAK
ENDSWITCH
CONFIGURE_ATM_BUTTONS(bScroll,bScrollAnalogue)
//DISPLAY_BALANCE
//_playerName:String, _balanceString:String, _balance:Number
// //MPATM_ACBA
BEGIN_SCALEFORM_MOVIE_METHOD(si,"DISPLAY_BALANCE")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(GET_PLAYER_NAME(GET_PLAYER_INDEX()))
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("MPATM_ACBA")
END_TEXT_COMMAND_SCALEFORM_STRING()
SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(NETWORK_GET_STRING_BANK_BALANCE()) //SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(NETWORK_GET_VC_BANK_BALANCE())
END_SCALEFORM_MOVIE_METHOD()
PRINTSTRING("update \"Balance $")PRINTINT(NETWORK_GET_VC_BANK_BALANCE())PRINTSTRING("\": ")PRINTSTRING(NETWORK_GET_STRING_BANK_BALANCE())PRINTNL()
ENDPROC
/// UPDATE_MOUSE_CURSOR()
/// To be called each frame
/// Make sure the call comes after adding all the scaleform buttons and elements, otherwise it seems to crash.
///
/// If the player is using mouse controls - Enable cursor and update it's position
/// If the player is using keyboard/pad controls - Disable the cursor
PROC UPDATE_MOUSE_CURSOR(SCALEFORM_INDEX movie)
IF IS_PC_VERSION()
// Detect if player is selecting items using the mouse cursor (ie not pad and not keyboard)
IF bMouseMode = FALSE
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
// If player moves mouse, show the cursor
IF fMouseStartX = -1.0
fMouseStartX = GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_X)
fMouseStartY = GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_Y)
ELSE
IF fMouseStartX != GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_X)
OR fMouseStartY != GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_Y)
BEGIN_SCALEFORM_MOVIE_METHOD(movie, "SHOW_CURSOR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)
END_SCALEFORM_MOVIE_METHOD()
bMouseMode = TRUE
ENDIF
ENDIF
ELSE
fMouseStartX = -1.0
ENDIF
ELSE
// If player uses non-mouse inputs, hide the cursor
IF NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP)
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN)
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT)
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT)
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
BEGIN_SCALEFORM_MOVIE_METHOD(movie, "SHOW_CURSOR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE)
END_SCALEFORM_MOVIE_METHOD()
fMouseStartX = -1.0
bMouseMode = FALSE
ENDIF
ENDIF
// If mouse cursor is being used, update it's screen position
IF bMouseMode
FLOAT fMouseX = GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_X)
FLOAT fMouseY = GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_CURSOR_Y)
IF fMouseX >= 0.0 AND fMouseX <= 1.0
AND fMouseY >= 0.0 AND fMouseY <= 1.0
BEGIN_SCALEFORM_MOVIE_METHOD(movie, "SET_MOUSE_INPUT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( fMouseX )
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( fMouseY )
END_SCALEFORM_MOVIE_METHOD()
ENDIF
ENDIF
ENDIF
ENDPROC
/// CLEAR_MOUSE_CURSOR()
/// Removes cursor
/// Call this when you finish, to make sure the cursor is removed
///
PROC CLEAR_MOUSE_CURSOR(SCALEFORM_INDEX movie)
IF bMouseMode
// Disable cursor
IF IS_PC_VERSION()
BEGIN_SCALEFORM_MOVIE_METHOD(movie, "SHOW_CURSOR")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(FALSE)
END_SCALEFORM_MOVIE_METHOD()
ENDIF
bMouseMode = FALSE
fMouseStartX = -1.0
ENDIF
ENDPROC
PROC MP_ONCLICK(OBJECT_INDEX oAtm, MP_ATM_PAGE_ENUM &currentPage)
CPRINTLN(DEBUG_FINANCE, "MP_ONCLICK: triggered")
BEGIN_SCALEFORM_MOVIE_METHOD(atmmov, "SET_INPUT_SELECT")
END_SCALEFORM_MOVIE_METHOD()
BEGIN_SCALEFORM_MOVIE_METHOD(atmmov, "GET_CURRENT_SELECTION")
SCALEFORM_RETURN_INDEX fudp = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE()
WHILE NOT IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(fudp)
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
RENDER_ATM()
CPRINTLN(DEBUG_FINANCE, "MP_ONCLICK: waiting for input")
//WAIT(0)
ENDWHILE
browserMpLastSelection = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(fudp)
SWITCH currentPage
CASE MPAPE_FIRST_CHOICE//1 withdraw index //2 transaction log index
//bDoMpRefreshUpdate = TRUE
//currentPage = MPAPE_TRANSLOG
//CPRINTLN(DEBUG_FINANCE, "MP_ONCLICK : MPAPE_FIRST_CHOICE -> MPAPE_TRANSLOG")
SWITCH browserMpLastSelection
CASE 2
GOTO_ATM_PAGE(currentPage,MPAPE_PICK_AMOUNT_DEPOSIT)//MPAPE_DEPOSIT_ASK)
BREAK
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_PICK_AMOUNT_WITHDRAW)//MPAPE_WITHDRAW_ASK)
BREAK
CASE 3
GOTO_ATM_PAGE(currentPage,MPAPE_TRANSLOG)//2
BREAK
ENDSWITCH
EXIT
CASE MPAPE_TRANSLOG
//MPAPE_TRANSLOG // 1 back // 2 transaction
SWITCH browserMpLastSelection
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//1
BREAK
CASE 2
GOTO_ATM_PAGE(currentPage,MPAPE_WITHDRAW_ASK)//2
BREAK
ENDSWITCH
EXIT
CASE MPAPE_DEPOSIT_ASK
//1 yes //2 no // if enough money// DOES_PLAYER_HAVE_MORE_MONEY_THAN_MIN_WITHDRAW
//1 back // if no money
IF DOES_PLAYER_HAVE_MORE_FM_BUCKS_THAN_MIN_ACTION()
SWITCH browserMpLastSelection
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_PICK_AMOUNT_DEPOSIT)//1
BREAK
CASE 2
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//2
BREAK
ENDSWITCH
ELSE
SWITCH browserMpLastSelection
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//1
BREAK
ENDSWITCH
ENDIF
EXIT
CASE MPAPE_WITHDRAW_ASK
//1 yes //2 no // if enough money// DOES_PLAYER_HAVE_MORE_MONEY_THAN_MIN_WITHDRAW
//1 back // if no money
IF DOES_PLAYER_HAVE_MORE_VC_BUCKS_THAN_MIN_ACTION()
SWITCH browserMpLastSelection
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_PICK_AMOUNT_WITHDRAW)//1
BREAK
CASE 2
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//2
BREAK
ENDSWITCH
ELSE
SWITCH browserMpLastSelection
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//1
BREAK
ENDSWITCH
ENDIF
EXIT
CASE MPAPE_PICK_AMOUNT_DEPOSIT
//MPAPE_PICK_AMOUNT
//1 2 3 // amountbuttons
//5 6 7 //
//4 //left button, back
//8 //right button, balance
IF NOT DOES_PLAYER_HAVE_MORE_FM_BUCKS_THAN_MIN_ACTION()
SWITCH browserMpLastSelection
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//1
BREAK
ENDSWITCH
ELSE
//iPendingTransactionAmount
SWITCH browserMpLastSelection
CASE 4
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//1
iPendingTransactionAmount = 0
BREAK
CASE 8
iPendingTransactionAmount = 0
GOTO_ATM_PAGE(currentPage,MPAPE_TRANSLOG)//1
BREAK
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_DEPOSIT)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(0,TTM_DEPOSIT)
BREAK
CASE 2
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_DEPOSIT)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(1,TTM_DEPOSIT)
BREAK
CASE 3
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_DEPOSIT)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(2,TTM_DEPOSIT)
BREAK
CASE 5
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_DEPOSIT)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(3,TTM_DEPOSIT)
BREAK
CASE 6
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_DEPOSIT)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(4,TTM_DEPOSIT)
BREAK
CASE 7
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_DEPOSIT)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(5,TTM_DEPOSIT)
BREAK
ENDSWITCH
ENDIF
EXIT
CASE MPAPE_PICK_AMOUNT_WITHDRAW
IF NOT DOES_PLAYER_HAVE_MORE_VC_BUCKS_THAN_MIN_ACTION()
SWITCH browserMpLastSelection
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//1
BREAK
ENDSWITCH
ELSE
SWITCH browserMpLastSelection
CASE 4
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//1
iPendingTransactionAmount = 0
BREAK
CASE 8
iPendingTransactionAmount = 0
GOTO_ATM_PAGE(currentPage,MPAPE_TRANSLOG)//1
BREAK
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_WITHDRAW)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(0,TTM_WITHDRAW)
BREAK
CASE 2
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_WITHDRAW)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(1,TTM_WITHDRAW)
BREAK
CASE 3
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_WITHDRAW)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(2,TTM_WITHDRAW)
BREAK
CASE 5
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_WITHDRAW)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(3,TTM_WITHDRAW)
BREAK
CASE 6
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_WITHDRAW)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(4,TTM_WITHDRAW)
BREAK
CASE 7
GOTO_ATM_PAGE(currentPage,MPAPE_CONFIRM_WITHDRAW)
iPendingTransactionAmount = GET_TRANSACTION_TOTAL_BY_INDEX(5,TTM_WITHDRAW)
BREAK
ENDSWITCH
ENDIF
EXIT
CASE MPAPE_CONFIRM_DEPOSIT
//// 1 yes // 2 no
SWITCH browserMpLastSelection
CASE 1
//perform the transaction
IF CONVERT_FM_TO_VC(oAtm,iPendingTransactionAmount)
GOTO_ATM_PAGE(currentPage,MPAPE_DEPOSIT_PEND)
ELSE
GOTO_ATM_PAGE(currentPage,MPAPE_ERROR_PAGE)
ENDIF
iPendingTransactionAmount = 0
BREAK
CASE 2
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//2
BREAK
ENDSWITCH
EXIT
CASE MPAPE_CONFIRM_WITHDRAW
//// 1 yes // 2 no
SWITCH browserMpLastSelection
CASE 1
//perform the transaction
IF CONVERT_VC_TO_FM(oAtm,iPendingTransactionAmount)
GOTO_ATM_PAGE(currentPage,MPAPE_WITHDRAW_PEND)
ELSE
GOTO_ATM_PAGE(currentPage,MPAPE_ERROR_PAGE)
ENDIF
iPendingTransactionAmount = 0
BREAK
CASE 2
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//2
BREAK
ENDSWITCH
EXIT
CASE MPAPE_ERROR_PAGE
SWITCH browserMpLastSelection
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//1
BREAK
ENDSWITCH
EXIT
CASE MPAPE_TRANSACTION_COMPLETE
SWITCH browserMpLastSelection
CASE 1
GOTO_ATM_PAGE(currentPage,MPAPE_FIRST_CHOICE)//1
BREAK
ENDSWITCH
EXIT
//set currentPage,bDoMpRefreshUpdate and exit
ENDSWITCH
ENDPROC
INT iPadLeftXLast = 0
INT iPadLeftYLast = 0
PROC DO_INPUTS(SCALEFORM_INDEX movin)
IF IS_SYSTEM_UI_BEING_DISPLAYED()
OR IS_PAUSE_MENU_ACTIVE()
CPRINTLN(DEBUG_FINANCE, "ATM not checking inputs due to IS_SYSTEM_UI_BEING_DISPLAYED or IS_PAUSE_MENU_ACTIVE")
EXIT
ENDIF
/*
SET_INPUT_EVENT
Use this method to pass Dpad input into the ATM, for menu navigation and scrolling
the transaction log one item at a time. (use SET_ANALOG_STICK_INPUT for smooth scrolling)
param 1 INT - direction enum
Direction enums:
8 = "UP"
9 = "DOWN"
10 = "LEFT"
11 = "RIGHT"
*/
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_PAUSE)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_UP)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_DOWN)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_LEFT)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_RIGHT)
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP)
BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(8)
END_SCALEFORM_MOVIE_METHOD()
//PLAY_SOUND_FRONTEND(-1, "PIN_BUTTON","ATM_SOUNDS")
ENDIF
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN)
BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9)
END_SCALEFORM_MOVIE_METHOD()
//PLAY_SOUND_FRONTEND(-1, "PIN_BUTTON","ATM_SOUNDS")
ENDIF
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT)
BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(10)
END_SCALEFORM_MOVIE_METHOD()
//PLAY_SOUND_FRONTEND(-1, "PIN_BUTTON","ATM_SOUNDS")
ENDIF
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT)
BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_INPUT_EVENT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(11)
END_SCALEFORM_MOVIE_METHOD()
//PLAY_SOUND_FRONTEND(-1, "PIN_BUTTON","ATM_SOUNDS")
ENDIF
IF !g_bInMultiplayer
EXIT
ENDIF
INT iPadLeftX
INT iPadLeftY
FLOAT delta
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_CURSOR_SCROLL_UP)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_CURSOR_SCROLL_DOWN)
delta = 1.0 +@ g_fWebCursorSensitivity
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN)
OR IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_DOWN)
iPadLeftY = -200
ENDIF
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP)
OR IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_UP)
iPadLeftY = 200
ENDIF
BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_ANALOG_STICK_INPUT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(TO_FLOAT(iPadLeftY) * delta)
END_SCALEFORM_MOVIE_METHOD()
ELSE
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_RIGHT_AXIS_X)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_RIGHT_AXIS_Y)
iPadLeftX = GET_CONTROL_VALUE(FRONTEND_CONTROL,INPUT_FRONTEND_RIGHT_AXIS_X) -128
iPadLeftY = GET_CONTROL_VALUE(FRONTEND_CONTROL,INPUT_FRONTEND_RIGHT_AXIS_Y) -128
//deadzone
IF ((iPadLeftX < 10) AND (iPadLeftX > -10))
iPadLeftX = 0
ENDIF
IF ((iPadLeftY < 10) AND (iPadLeftY > -10))
iPadLeftY = 0
ENDIF
delta = 1.0 +@ g_fWebCursorSensitivity
IF (NOT (iPadLeftXLast = iPadLeftX)) OR (NOT (iPadLeftYLast = iPadLeftY))
//CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER(movin, "SET_ANALOG_STICK_INPUT",1.0,TO_FLOAT(iPadLeftX)*g_fWebCursorSensitivity,TO_FLOAT(iPadLeftY)*g_fWebCursorSensitivity)
BEGIN_SCALEFORM_MOVIE_METHOD(movin, "SET_ANALOG_STICK_INPUT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.0)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(-(TO_FLOAT(iPadLeftX)) * delta)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(-(TO_FLOAT(iPadLeftY)) * delta)
END_SCALEFORM_MOVIE_METHOD()
iPadLeftXLast = iPadLeftX
iPadLeftYLast = iPadLeftY
ENDIF
ENDIF
ENDPROC
/*
MPPLY_STORE_MONEY_SPENT" //MPPLAYER - Real money player has spent in store"
MPPLY_STORE_MONEY_BOUGHT" Game Money player has bought in the store"
MPPLY_STORE_TOTAL_MONEY_BOUGHT" MPPLAYER - Total game money player has bought in store
Script Stats
MPPLY_BANK_ACCOUNT // virtual cash in players bank account.
MPPLY_STORE_BOUGHT_SCRIPT // (MPPLY_STORE_MONEY_BOUGHT - MPPLY_STORE_BOUGHT_SCRIPT )Script value player has transferred to in game cash
*/
PROC Control_Synch_Scene(OBJECT_INDEX oAtm)
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
EXIT
ENDIF
IF IS_PED_INJURED(PLAYER_PED_ID())
EXIT
ENDIF
TEXT_LABEL_63 tAtmEnterAnimDict,tAtmBaseAnimDict, tAtmIdleAnimDict, tAtmExitAnimDict
Get_Atm_Anim_Dict_Names(eAnimSet_enter, tAtmEnterAnimDict)
Get_Atm_Anim_Dict_Names(eAnimSet_base, tAtmBaseAnimDict)
Get_Atm_Anim_Dict_Names(eAnimSet_idle, tAtmIdleAnimDict)
Get_Atm_Anim_Dict_Names(eAnimSet_exit, tAtmExitAnimDict)
REQUEST_ANIM_DICT(tAtmExitAnimDict)
REQUEST_ANIM_DICT(tAtmEnterAnimDict)
INT iMaxIdleAnims = 3
IF GET_ENTITY_MODEL(PLAYER_PED_ID()) = MP_F_FREEMODE_01
iMaxIdleAnims = 3
ENDIF
INT iLocalATMSynchSceneID
SWITCH iATMSynchSceneStage
CASE 0
DRAW_DEBUG_TEXT("walk", GET_ENTITY_COORDS(PLAYER_PED_ID()), 064, 256, 064, 064)//////green
IF HAS_ANIM_DICT_LOADED(tAtmEnterAnimDict)
IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_GO_STRAIGHT_TO_COORD) = FINISHED_TASK
AND HAS_ANIM_DICT_LOADED(tAtmEnterAnimDict)
IF IS_SYNCHRONIZED_SCENE_RUNNING(iATMSynchSceneID)
DETACH_SYNCHRONIZED_SCENE(iATMSynchSceneID)
iATMSynchSceneID = -1
ENDIF
iATMSynchSceneID = NETWORK_CREATE_SYNCHRONISED_SCENE(vSynchSceneOrigin,
GET_ENTITY_ROTATION(oAtm),DEFAULT,FALSE,FALSE)
NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE(PLAYER_PED_ID(), iATMSynchSceneID,tAtmEnterAnimDict, "enter",
SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
NETWORK_START_SYNCHRONISED_SCENE(iATMSynchSceneID)
REMOVE_ANIM_DICT(tAtmEnterAnimDict)
iATMSynchSceneStage = 1
ENDIF
ENDIF
BREAK
CASE 1
DRAW_DEBUG_TEXT("enter", GET_ENTITY_COORDS(PLAYER_PED_ID()), 064, 256, 064, 064)//////green
REQUEST_ANIM_DICT(tAtmBaseAnimDict)
REQUEST_ANIM_DICT(tAtmIdleAnimDict)
iLocalATMSynchSceneID = NETWORK_GET_LOCAL_SCENE_FROM_NETWORK_ID(iATMSynchSceneID)
IF HAS_ANIM_DICT_LOADED(tAtmBaseAnimDict)
AND (NOT IS_SYNCHRONIZED_SCENE_RUNNING(iLocalATMSynchSceneID)
OR IS_SYNCHRONIZED_SCENE_RUNNING(iLocalATMSynchSceneID))
iATMSynchSceneID = NETWORK_CREATE_SYNCHRONISED_SCENE(vSynchSceneOrigin,
GET_ENTITY_ROTATION(oAtm),DEFAULT,FALSE,TRUE)
NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE(PLAYER_PED_ID(), iATMSynchSceneID,
tAtmBaseAnimDict, "base", SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
NETWORK_START_SYNCHRONISED_SCENE(iATMSynchSceneID)
CPRINTLN(DEBUG_FINANCE, "ATM - Control_Synch_Scene \"", tAtmBaseAnimDict, "\" - timeout of enter anim")
iATMSynchSceneStage = 2
ENDIF
BREAK
CASE 2
DRAW_DEBUG_TEXT("base", GET_ENTITY_COORDS(PLAYER_PED_ID()), 032, 032, 256, 128)//////blue
iLocalATMSynchSceneID = NETWORK_GET_LOCAL_SCENE_FROM_NETWORK_ID(iATMSynchSceneID)
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iATMSynchSceneID)
AND NOT IS_SYNCHRONIZED_SCENE_RUNNING(iLocalATMSynchSceneID)
iATMSynchSceneID = NETWORK_CREATE_SYNCHRONISED_SCENE(vSynchSceneOrigin,
GET_ENTITY_ROTATION(oAtm),DEFAULT,FALSE,TRUE)
iLocalATMSynchSceneID = NETWORK_GET_LOCAL_SCENE_FROM_NETWORK_ID(iATMSynchSceneID)
IF IS_SYNCHRONIZED_SCENE_RUNNING(iLocalATMSynchSceneID)
SET_SYNCHRONIZED_SCENE_PHASE(iLocalATMSynchSceneID, 0.0)
ENDIF
NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE(PLAYER_PED_ID(), iATMSynchSceneID,
tAtmBaseAnimDict, "base",SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
NETWORK_START_SYNCHRONISED_SCENE(iATMSynchSceneID)
CPRINTLN(DEBUG_FINANCE, "ATM - Control_Synch_Scene \"", tAtmBaseAnimDict, "\" - exit from base anim")
iATMSynchSceneStage = 2
EXIT
ENDIF
IF HAS_ANIM_DICT_LOADED(tAtmIdleAnimDict)
AND (NOT IS_SYNCHRONIZED_SCENE_RUNNING(iLocalATMSynchSceneID)
OR GET_SYNCHRONIZED_SCENE_PHASE(iLocalATMSynchSceneID) >= 0.99)
INT iRandom
iRandom = GET_RANDOM_INT_IN_RANGE(0,iMaxIdleAnims)
IF (ARE_STRINGS_EQUAL(tPreviousIdleAnim, "idle_a") AND (iRandom = 0))
OR (ARE_STRINGS_EQUAL(tPreviousIdleAnim, "idle_b") AND (iRandom = 1))
OR (ARE_STRINGS_EQUAL(tPreviousIdleAnim, "idle_c") AND (iRandom = 2))
OR (ARE_STRINGS_EQUAL(tPreviousIdleAnim, "idle_d") AND (iRandom = 3))
iRandom++
IF iRandom >= iMaxIdleAnims
iRandom = 0
ENDIF
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(iATMSynchSceneID)
DETACH_SYNCHRONIZED_SCENE(iATMSynchSceneID)
iATMSynchSceneID = -1
ENDIF
iATMSynchSceneID = NETWORK_CREATE_SYNCHRONISED_SCENE(vSynchSceneOrigin,
GET_ENTITY_ROTATION(oAtm),DEFAULT,FALSE,TRUE)
SWITCH iRandom
CASE 0
NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE(PLAYER_PED_ID(), iATMSynchSceneID,
tAtmIdleAnimDict, "idle_a", SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
NETWORK_START_SYNCHRONISED_SCENE(iATMSynchSceneID)
tPreviousIdleAnim = "idle_a"
CPRINTLN(DEBUG_FINANCE, "ATM - Control_Synch_Scene idle_a")
iATMSynchSceneStage = 3
BREAK
CASE 1
NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE(PLAYER_PED_ID(), iATMSynchSceneID,
tAtmIdleAnimDict, "idle_b",SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
NETWORK_START_SYNCHRONISED_SCENE(iATMSynchSceneID)
tPreviousIdleAnim = "idle_b"
CPRINTLN(DEBUG_FINANCE, "ATM - Control_Synch_Scene idle_b")
iATMSynchSceneStage = 3
BREAK
CASE 2
NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE(PLAYER_PED_ID(), iATMSynchSceneID,
tAtmIdleAnimDict, "idle_c",SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
NETWORK_START_SYNCHRONISED_SCENE(iATMSynchSceneID)
tPreviousIdleAnim = "idle_c"
CPRINTLN(DEBUG_FINANCE, "ATM - Control_Synch_Scene idle_c")
iATMSynchSceneStage = 3
BREAK
CASE 3
NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE(PLAYER_PED_ID(), iATMSynchSceneID,
tAtmIdleAnimDict, "idle_d",SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
NETWORK_START_SYNCHRONISED_SCENE(iATMSynchSceneID)
tPreviousIdleAnim = "idle_d"
CPRINTLN(DEBUG_FINANCE, "ATM - Control_Synch_Scene idle_d")
iATMSynchSceneStage = 3
BREAK
DEFAULT
tPreviousIdleAnim = "idle_XXX"
CPRINTLN(DEBUG_FINANCE, "ATM - Control_Synch_Scene idle_XXX_", iRandom)
SCRIPT_ASSERT("idle_XXX")
BREAK
ENDSWITCH
ENDIF
BREAK
CASE 3
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), tAtmIdleAnimDict, "idle_a", ANIM_SYNCED_SCENE)
DRAW_DEBUG_TEXT("idle_a", GET_ENTITY_COORDS(PLAYER_PED_ID()), 256, 064, 064, 064)//////red
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), tAtmIdleAnimDict, "idle_b", ANIM_SYNCED_SCENE)
DRAW_DEBUG_TEXT("idle_b", GET_ENTITY_COORDS(PLAYER_PED_ID()), 256, 064, 064, 064)//////red
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), tAtmIdleAnimDict, "idle_c", ANIM_SYNCED_SCENE)
DRAW_DEBUG_TEXT("idle_c", GET_ENTITY_COORDS(PLAYER_PED_ID()), 256, 064, 064, 064)//////red
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), tAtmIdleAnimDict, "idle_d", ANIM_SYNCED_SCENE)
DRAW_DEBUG_TEXT("idle_d", GET_ENTITY_COORDS(PLAYER_PED_ID()), 256, 064, 064, 064)//////red
ELSE
DRAW_DEBUG_TEXT("idle_XXX", GET_ENTITY_COORDS(PLAYER_PED_ID()), 256, 064, 064, 064)//////red
ENDIF
iLocalATMSynchSceneID = NETWORK_GET_LOCAL_SCENE_FROM_NETWORK_ID(iATMSynchSceneID)
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iATMSynchSceneID)
AND NOT IS_SYNCHRONIZED_SCENE_RUNNING(iLocalATMSynchSceneID)
IF IS_SYNCHRONIZED_SCENE_RUNNING(iATMSynchSceneID)
DETACH_SYNCHRONIZED_SCENE(iATMSynchSceneID)
iATMSynchSceneID = -1
ENDIF
iATMSynchSceneID = NETWORK_CREATE_SYNCHRONISED_SCENE(vSynchSceneOrigin,
GET_ENTITY_ROTATION(oAtm),DEFAULT,FALSE,TRUE)
iLocalATMSynchSceneID = NETWORK_GET_LOCAL_SCENE_FROM_NETWORK_ID(iATMSynchSceneID)
IF IS_SYNCHRONIZED_SCENE_RUNNING(iLocalATMSynchSceneID)
SET_SYNCHRONIZED_SCENE_PHASE(iLocalATMSynchSceneID, 0.0)
ENDIF
NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE(PLAYER_PED_ID(), iATMSynchSceneID,
tAtmBaseAnimDict, "base",SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
NETWORK_START_SYNCHRONISED_SCENE(iATMSynchSceneID)
CPRINTLN(DEBUG_FINANCE, "ATM - Control_Synch_Scene \"", tAtmBaseAnimDict, "\" - exit from idle anim")
iATMSynchSceneStage = 2
EXIT
ENDIF
IF HAS_ANIM_DICT_LOADED(tAtmBaseAnimDict)
AND (NOT IS_SYNCHRONIZED_SCENE_RUNNING(iLocalATMSynchSceneID)
OR GET_SYNCHRONIZED_SCENE_PHASE(iLocalATMSynchSceneID) >= 0.99)
IF IS_SYNCHRONIZED_SCENE_RUNNING(iATMSynchSceneID)
DETACH_SYNCHRONIZED_SCENE(iATMSynchSceneID)
iATMSynchSceneID = -1
ENDIF
iATMSynchSceneID = NETWORK_CREATE_SYNCHRONISED_SCENE(vSynchSceneOrigin,
GET_ENTITY_ROTATION(oAtm),DEFAULT,FALSE,TRUE)
NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE(PLAYER_PED_ID(), iATMSynchSceneID,
tAtmBaseAnimDict, "base",SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
NETWORK_START_SYNCHRONISED_SCENE(iATMSynchSceneID)
CPRINTLN(DEBUG_FINANCE, "ATM - Control_Synch_Scene \"", tAtmBaseAnimDict, "\" - timeout of idle anim")
iATMSynchSceneStage = 2
EXIT
ENDIF
BREAK
ENDSWITCH
ENDPROC
FUNC BOOL IS_ATM_POSITION_VERBOTEN(VECTOR v)
IF v.x = 129.697525
AND v.y = -1290.841797
AND v.z = 28.271421
RETURN TRUE
ENDIF
IF v.x = 130.579117
AND v.y = -1292.368774
AND v.z = 28.271421
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks if the ATM currently running the script is the one inside the strip club and in the middle aTM
/// PARAMS:
/// v - vector position
FUNC BOOL IS_MIDDLE_STRIP_CLUB_ATM(OBJECT_INDEX obj)
BOOL bIsThatTheAtm = IS_ENTITY_AT_COORD(obj, <<130.1504, -1291.6261, 28.2714>>, <<0.01, 0.01, 0.01>>)
CDEBUG3LN(DEBUG_FINANCE, " - atm_trigger - IS_MIDDLE_STRIP_CLUB_ATM - Returning: ", PICK_STRING(bIsThatTheAtm, "TRUE", "FALSE"))
RETURN bIsThatTheAtm
ENDFUNC
PROC FIRE_AND_FORGET_NEW_ATM(INT starttime, MP_ATM_PAGE_ENUM &currentPage, OBJECT_INDEX oAtm, BOOL skipScenario)
g_bInATM = TRUE
BOOL ScenarioTriggered = FALSE
atmmov = REQUEST_SCALEFORM_MOVIE("ATM")
atmbuttons = REQUEST_SCALEFORM_MOVIE_INSTANCE("INSTRUCTIONAL_BUTTONS")
IF IS_MIDDLE_STRIP_CLUB_ATM(oAtm)
IF HAS_HEIST_BOARD_LOADED(HEIST_FINALE)
CDEBUG1LN(DEBUG_FINANCE, " - atm_trigger - FIRE_AND_FORGET_NEW_ATM - Unpinning HEIST_FINALE board as IS_MIDDLE_STRIP_CLUB_ATM && HAS_HEIST_BOARD_LOADED(HEIST_FINALE).")
PIN_HEIST_BOARD_IN_MEMORY(HEIST_FINALE, FALSE)
bHeistFinaleBoardUnpinned = TRUE
ENDIF
ENDIF
INT itime = GET_GAME_TIMER()
INVALIDATE_IDLE_CAM()
WHILE NOT HAS_SCALEFORM_MOVIE_LOADED(atmmov)
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
WAIT(0)
ATM_CONTROL_DISABLE()
Control_Synch_Scene(oAtm)
ENDWHILE
WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(atmbuttons))
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
WAIT(0)
ATM_CONTROL_DISABLE()
Control_Synch_Scene(oAtm)
ENDWHILE
CONFIGURE_ATM_BUTTONS()
WHILE (GET_GAME_TIMER() - itime) < starttime
WAIT(0)
ATM_CONTROL_DISABLE()
Control_Synch_Scene(oAtm)
IF ATM_HEALTH_DELTA_FAILED()
EXIT// fail due to damage
ENDIF
ENDWHILE
INT spInputDelay = GET_GAME_TIMER() + 3500//inputIgnoreTimer
BOOL bAllowInput = FALSE
BOOL displaying = TRUE
BOOL bInitIsDone = FALSE
bDoMpRefreshUpdate = TRUE
iRangeCheckGracePeriod= 0
WHILE displaying
//IF IS_SYSTEM_UI_BEING_DISPLAYED()
//OR IS_PAUSE_MENU_ACTIVE()
//spin wheels
// WAIT(0)
//ENDIF
iRangeCheckGracePeriod += ROUND(0 +@ 1000)
RENDER_ATM()
// Display mouse cursor (only if mouse is the current input method)
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
SET_MOUSE_CURSOR_THIS_FRAME()
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
ENDIF
IF !g_bInMultiplayer
IF GET_GAME_TIMER() > spInputDelay
bAllowInput = TRUE
ENDIF
ELSE
IF spInputDelay > 0
IF GET_GAME_TIMER() > spInputDelay
bAllowInput= TRUE
spInputDelay = -1
ENDIF
ELSE
IF spInputDelay = -1
bAllowInput = TRUE
ENDIF
ENDIF
ENDIF
IF IS_SYSTEM_UI_BEING_DISPLAYED()
OR IS_PAUSE_MENU_ACTIVE()
bAllowInput = FALSE
CPRINTLN(DEBUG_FINANCE, "Atm input suppressed due to IS_SYSTEM_UI_BEING_DISPLAYED")
ENDIF
BOOL bTerminate = FALSE
IF SCREEN_TERMINATION_CONDITION(oAtm)
//g_bPauseCommsQueues - add a this frame variant of this
bTerminate = TRUE
ENDIF
IF bAllowInput
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL)
ENDIF
IF GET_GAME_TIMER() > spInputDelay
//SET_SCRIPT_GFX_ALIGN(UI_ALIGN_RIGHT, UI_ALIGN_BOTTOM)
DRAW_SCALEFORM_MOVIE_FULLSCREEN(atmbuttons,255,255,255,255)
RESET_SCRIPT_GFX_ALIGN()
ENDIF
//
SWITCH currentPage
CASE MPAPE_DEPOSIT_PEND
CASE MPAPE_WITHDRAW_PEND
bAllowInput = FALSE
BREAK
CASE MPAPE_TRANSACTION_COMPLETE
CASE MPAPE_ERROR_PAGE
bAllowInput = TRUE
BREAK
ENDSWITCH
IF bAllowInput
IF (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL)
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_CANCEL)
OR bTerminate)
AND bInitIsDone
PLAY_SOUND_FRONTEND(-1, "PIN_BUTTON","ATM_SOUNDS")
IF g_bInMultiplayer
SWITCH currentPage
CASE MPAPE_FIRST_CHOICE
displaying = FALSE
//Disable blinders on PC
bCreatedBlinders = SET_MULTIHEAD_SAFE(FALSE,TRUE,bCreatedBlinders, TRUE)
BREAK
CASE MPAPE_TRANSLOG
bDoMpRefreshUpdate = TRUE
currentPage = MPAPE_FIRST_CHOICE
BREAK
CASE MPAPE_DEPOSIT_ASK
bDoMpRefreshUpdate = TRUE
currentPage = MPAPE_FIRST_CHOICE
BREAK
CASE MPAPE_PICK_AMOUNT_DEPOSIT
bDoMpRefreshUpdate = TRUE
currentPage = MPAPE_FIRST_CHOICE
BREAK
CASE MPAPE_CONFIRM_DEPOSIT
bDoMpRefreshUpdate = TRUE
currentPage = MPAPE_FIRST_CHOICE
BREAK
CASE MPAPE_WITHDRAW_ASK
bDoMpRefreshUpdate = TRUE
currentPage = MPAPE_FIRST_CHOICE
BREAK
CASE MPAPE_PICK_AMOUNT_WITHDRAW
bDoMpRefreshUpdate = TRUE
currentPage = MPAPE_FIRST_CHOICE
BREAK
CASE MPAPE_CONFIRM_WITHDRAW
bDoMpRefreshUpdate = TRUE
currentPage = MPAPE_FIRST_CHOICE
BREAK
CASE MPAPE_ERROR_PAGE
bDoMpRefreshUpdate = TRUE
currentPage = MPAPE_FIRST_CHOICE
BREAK
CASE MPAPE_TRANSACTION_COMPLETE
bDoMpRefreshUpdate = TRUE
currentPage = MPAPE_FIRST_CHOICE
BREAK
ENDSWITCH
ELSE
//Disable blinders on PC
bCreatedBlinders = SET_MULTIHEAD_SAFE(FALSE,TRUE,bCreatedBlinders)
displaying = FALSE
ENDIF
ENDIF
ENDIF
IF !bInitIsDone
IF !g_bInMultiplayer
BEGIN_SCALEFORM_MOVIE_METHOD(atmmov,"SET_DATA_SLOT_EMPTY")
END_SCALEFORM_MOVIE_METHOD()
SF_ATM_BALANCE_PAGE(atmmov)
BEGIN_SCALEFORM_MOVIE_METHOD(atmmov,"UPDATE_TEXT")
END_SCALEFORM_MOVIE_METHOD()
ENDIF
bInitIsDone = TRUE
ENDIF
IF g_bInMultiplayer
IF bDoMpRefreshUpdate
WHILE bDoMpRefreshUpdate
bDoMpRefreshUpdate = FALSE
DO_MP_UPDATE_ATM(oAtm,atmmov,currentPage)
ENDWHILE
ENDIF
ENDIF
//WAIT(0)
// Draw mouse cursor in position on screen (or disable if using pad controls) [MP only, SP has no interaction]
IF g_bInMultiplayer
UPDATE_MOUSE_CURSOR(atmmov) // Added for b*1894604: "Can we have mouse support for the MP ATM UI"
ENDIF
IF bAllowInput
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT)
ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_CURSOR_ACCEPT)
IF g_bInMultiplayer
IF (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT))
OR (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CURSOR_ACCEPT) AND NOT IS_MOUSE_ROLLED_OVER_INSTRUCTIONAL_BUTTONS()) // Added for b*1894604: "Can we have mouse support for the MP ATM UI"
//IF inputIgnoreTimer < GET_GAME_TIMER()
MP_ONCLICK(oAtm, currentPage)
//PLAY_SOUND_FRONTEND(-1, "PIN_BUTTON","ATM_SOUNDS")
//ENDIF
ENDIF
//ELSE
//CPRINTLN(DEBUG_FINANCE, "FIRE_AND_FORGET_NEW_ATM: no input !g_bInMultiplayer")
ENDIF
DO_INPUTS(atmmov)
ENDIF
IF !ScenarioTriggered AND !g_bInMultiplayer AND !skipScenario
IF NOT IS_PED_DEAD_OR_DYING(PLAYER_PED_ID())
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
ENDIF
TASK_USE_NEAREST_SCENARIO_TO_COORD(PLAYER_PED_ID(),atmAT, 2.0, -1)
ScenarioTriggered = TRUE
ENDIF
Control_Synch_Scene(oAtm)
ENDWHILE
// Remove mouse cursor [MP only, SP has no interaction]
IF g_bInMultiplayer
CLEAR_MOUSE_CURSOR(atmmov) // Added for b*1894604: "Can we have mouse support for the MP ATM UI"
ENDIF
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(atmmov)
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(atmbuttons)
atmmov = NULL
atmbuttons = NULL
g_bInATM = FALSE
ENDPROC
/// PURPOSE: Do necessary pre game start ini
PROC PROCESS_PRE_GAME()
IF NETWORK_IS_GAME_IN_PROGRESS()
IF NOT NETWORK_TRY_TO_SET_THIS_SCRIPT_IS_NETWORK_SCRIPT(NUM_NETWORK_PLAYERS, FALSE)
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> NETWORK_TRY_TO_SET_THIS_SCRIPT_IS_NETWORK_SCRIPT failed. Maybe there is already an atm_trigger script at these coordinates")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
// This makes sure the net script is active, waits until it is.
HANDLE_NET_SCRIPT_INITIALISATION()
NETWORK_REGISTER_HOST_BROADCAST_VARIABLES(serverBD, SIZE_OF(serverBD))
NETWORK_REGISTER_PLAYER_BROADCAST_VARIABLES(playerBD, SIZE_OF(playerBD))
INT i
REPEAT NUM_NETWORK_PLAYERS i
serverBD.iSeats[i] = -1
ENDREPEAT
SET_THIS_SCRIPT_CAN_BE_PAUSED(FALSE)
// KGM: Wait for the first network broadcast before moving on - call this as the last instruction in pre-game
// (after Initialisation and Broadcast Variable Registration - Hosts can do this too)
IF NOT Wait_For_First_Network_Broadcast()
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> Failed to receive an initial network broadcast. Cleaning up.")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
CPRINTLN(DEBUG_FINANCE, "Atm: set started in MP game")
ELSE
IF HAS_FORCE_CLEANUP_OCCURRED()
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> Atm script force cleanuped")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
ENDIF
ENDPROC
SCRIPT (OBJECT_INDEX oAtm)
PROCESS_PRE_GAME()
IF g_BlipSystemPrologueMode
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> Atm reset for blip system prologue mode")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
//BH - preventing ATM during Cops and Crooks~
#IF FEATURE_FREEMODE_ARCADE
IF IS_FREEMODE_ARCADE()
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> terminated due to player being in Cops and Crooks")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
#ENDIF
//@RJP - 1307176 - preventing player from using ATM during Rampages
IF g_bIsOnRampage
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> terminated due to player being on RAMPAGE")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
MP_ATM_PAGE_ENUM currentMpPage = MPAPE_FIRST_CHOICE
//SEQUENCE_INDEX seq = NULL
IF NOT (DOES_ENTITY_EXIST(oAtm))
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> object passed to atm_trigger script doesn't exist. Terminating.")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
IF NOT (IS_ENTITY_AN_OBJECT(oAtm))
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> object passed to atm_trigger script isn't an object, is a",
PICK_STRING(IS_ENTITY_A_PED(oAtm), " ped", ""),
PICK_STRING(IS_ENTITY_A_VEHICLE(oAtm), " veh", ""),
" - int ", NATIVE_TO_INT(oAtm), ". Terminating.")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
INTERIOR_INSTANCE_INDEX iii =GET_INTERIOR_FROM_ENTITY(oAtm)
IF IS_ATM_POSITION_VERBOTEN(GET_ENTITY_COORDS(oAtm,TRUE))//1127454
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> on no trigger list, bailing")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
//BenR - #2015059 - Preventing player from using ATM as an animal.
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_ANIMAL)
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> Atm terminated due to player playing as an animal.")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
//START_SHAPE_TEST_LOS_PROBE
//and it is in //depot/gta5/script/dev/shared/include/native/commands_shapetest.sch
// PED_INDEX tmpArray[25]
BOOL bCheck = TRUE
//BOOL bButtonDelayer = FALSE
//set up the angular check
//HEADING_PUSH_TRIGGER_DATA pushData
//pushData.targetEntity = INT_TO_NATIVE ( ENTITY_INDEX, NATIVE_TO_INT (oAtm))
//pushData.fTriggerRange = 1.6
//pushData.fTriggerSpeedLimit = 1.0 //anything under medium walking speed
//pushData.fTriggerAngle = 40.0
//pushData.iTriggerTime = 1000 //1 second trigger
atmAT = GET_ENTITY_COORDS(oAtm,TRUE)
atmAT.z += 1.0
IF GET_FOLLOW_PED_CAM_VIEW_MODE() != CAM_VIEW_MODE_FIRST_PERSON
vSynchSceneOrigin = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(oAtm, vSynchSceneOffset3rd)
ELSE
vSynchSceneOrigin = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(oAtm, vSynchSceneOffset1st)
ENDIF
PRINTSTRING("vSynchSceneOrigin: ")
PRINTVECTOR(vSynchSceneOrigin)
PRINTNL()
FLOAT fSynchSceneOrigin_groundZ
IF GET_GROUND_Z_FOR_3D_COORD(vSynchSceneOrigin, fSynchSceneOrigin_groundZ)
#IF IS_DEBUG_BUILD
PRINTSTRING("fSynchSceneOrigin_groundZ: ")
PRINTFLOAT(fSynchSceneOrigin_groundZ)
PRINTSTRING(" //")
PRINTFLOAT(vSynchSceneOrigin.z - fSynchSceneOrigin_groundZ)
IF (ABSF(vSynchSceneOrigin.z - fSynchSceneOrigin_groundZ)-1.0) > 0.01
PRINTSTRING(": BIG DIFF!!!")
ENDIF
PRINTNL()
#ENDIF
vSynchSceneOrigin.z = fSynchSceneOrigin_groundZ + 1.0
ELSE
PRINTSTRING("fSynchSceneOrigin_groundZ: ZERO")
PRINTNL()
ENDIF
SETTIMERA(0)
//INT iDelta = 0
HINT_SCRIPT_AUDIO_BANK("ATM")
#IF IS_DEBUG_BUILD
SETUP_ATM_DEBUG_WIDGETS()
#ENDIF
//each frame check player range
WHILE bCheck
iTerminationCooldown += ROUND(0 +@ 1000)
BOOL contextThisFrame = FALSE
//CPRINTLN(DEBUG_FINANCE, "ATM script rolling")
//iDelta = TIMERA()
SETTIMERA(0)
//if the finance screen is not open
//FINH_ATMNEAR
/*
WHILE (NOT DOES_ENTITY_EXIST(oAtm))
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> world brain object doesn't exist, waiting until it does or this script is terminated due to range.")
//CLEANUP_ATM()
//TERMINATE_THIS_THREAD()
WAIT(2000)
ENDWHILE
*/
IF DOES_ENTITY_EXIST(oAtm)
AND IS_ENTITY_AN_OBJECT(oAtm)
IF HAS_OBJECT_BEEN_BROKEN(oAtm)
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> object is detected as being dead. Terminating brain script.")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
ENDIF
IF (g_bInMultiplayer) AND NETWORK_IS_GAME_IN_PROGRESS()
bRunningInMP = TRUE
IF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
ENDIF
ELIF bRunningInMP
IF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE() -2")
CLEANUP_ATM()
TERMINATE_THIS_THREAD()
bRunningInMP = FALSE
ENDIF
ENDIF
BOOL bSkipScenario = TRUE
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
AND (NOT (IS_ENTITY_DEAD(PLAYER_PED_ID())))
AND (NOT (IS_CUTSCENE_PLAYING()))
AND IS_PLAYER_PLAYING(GET_PLAYER_INDEX())
IF (GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = iii)
AND NOT IS_PED_JUMPING(PLAYER_PED_ID())
//check for tutorial display bAtmFirstTimeFlowHelpShown
//if off mission
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_OFF_MISSION)
IF NOT g_savedGlobals.sFinanceData.bAtmFirstTimeFlowHelpShown
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
IF g_bInMultiplayer
PRINT_HELP("ATM_1TM_TUT")
ELSE
IF NOT IS_FLOW_HELP_MESSAGE_QUEUED("ATM_1TM_TUT")
//ATM_1TM_TUT
ADD_HELP_TO_FLOW_QUEUE("ATM_1TM_TUT",FHP_HIGH)//priority kicked up to high to avoid delay issues
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("ATM_1TM_TUT")
g_savedGlobals.sFinanceData.bAtmFirstTimeFlowHelpShown = TRUE
ENDIF
ENDIF
//pushData.triggererEntity = INT_TO_NATIVE ( ENTITY_INDEX, NATIVE_TO_INT (PLAYER_PED_ID()))
//IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(),in_coords.vec_coord[0], << LOCATE_SIZE_ON_FOOT_ONLY, LOCATE_SIZE_ON_FOOT_ONLY, LOCATE_SIZE_ON_FOOT_ONLY >>, TRUE,TRUE, TM_ON_FOOT)
IF //IS_OBJECT_WITHIN_BRAIN_ACTIVATION_RANGE(oAtm)
(NOT IS_PED_USING_ANY_SCENARIO(PLAYER_PED_ID()))
AND (NOT IS_PED_RAGDOLL(PLAYER_PED_ID()))
AND (NOT IS_PHONE_ONSCREEN())
//AND (NOT HAS_OBJECT_BEEN_BROKEN(oAtm))
AND (IS_ENTITY_AT_COORD(PLAYER_PED_ID(),atmAT, << 1, 1, 1 >>, FALSE,TRUE, TM_ON_FOOT))
AND NOT IS_PED_IN_COVER(PLAYER_PED_ID())
AND (NOT (Is_Player_Timetable_Scene_In_Progress()))
AND (NOT SCREEN_TERMINATION_CONDITION(oAtm,FALSE))
AND (NOT IS_PLAYER_DRIVING_ANY_VEHICLE()) //vehicle check moved here to fix speed issues
AND (GET_ENTITY_SPEED(PLAYER_PED_ID()) < 4.0)
AND (GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) != FMMC_TYPE_GB_CASHING_OUT)
AND (NOT IS_THIS_ROCKSTAR_MISSION_NEW_VS_GUNSMITH(g_FMMC_STRUCT.iAdversaryModeType))
AND (NOT IS_THIS_ROCKSTAR_MISSION_NEW_VS_HARD_TARGET(g_FMMC_STRUCT.iAdversaryModeType))
AND (NOT IS_THIS_ROCKSTAR_MISSION_NEW_VS_HOSTILE_TAKEOVER(g_FMMC_STRUCT.iAdversaryModeType))
AND (NOT IS_BIT_SET(g_FMMC_STRUCT.iOptionsMenuBitSetEighteen, ciOPTIONSBS18_DISABLE_ATM_USE_IN_MISSIONS))
AND NOT IS_PLAYER_AN_ANIMAL(PLAYER_ID())
//this one causes some wierdness with the positioning
//AND DOES_SCENARIO_EXIST_IN_AREA(GET_ENTITY_COORDS(oAtm,TRUE), 5.0, TRUE)
//CPRINTLN(DEBUG_FINANCE, "ARRRGH")
IF DOES_SCENARIO_EXIST_IN_AREA( atmAT, 2.0, FALSE ) //added for 1318982
bSkipScenario = FALSE
ENDIF
BOOL SkipAmbient = FALSE
IF (IS_PLAYER_USING_BALLISTIC_EQUIPMENT(PLAYER_ID()))
bSkipScenario = TRUE
SkipAmbient = TRUE
IF NOT bDisplayedBEHelp
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
BEGIN_TEXT_COMMAND_DISPLAY_HELP("SHOP_JUGG_NONE")
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL("GB_COUT_ATM")
END_TEXT_COMMAND_DISPLAY_HELP(HELP_TEXT_SLOT_STANDARD, FALSE, FALSE)
CPRINTLN(DEBUG_FINANCE, "ATM suppressed due to wearing ballistic gear")
ENDIF
ENDIF
ENDIF
//check for peds nearby that are playing the ambient atm set
IF IS_SCENARIO_OCCUPIED(atmAT,2.0,TRUE)
SkipAmbient = TRUE
CPRINTLN(DEBUG_FINANCE, "Atm input suppressed due to IS_SCENARIO_OCCUPIED")
ENDIF
IF g_bInMultiplayer
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
SkipAmbient = TRUE
CPRINTLN(DEBUG_FINANCE, "Atm input suppressed due to NOT NETWORK_IS_GAME_IN_PROGRESS")
ENDIF
ENDIF
IF IS_PAUSE_MENU_ACTIVE()
SkipAmbient = TRUE
CPRINTLN(DEBUG_FINANCE, "Atm input suppressed due to IS_PAUSE_MENU_ACTIVE")
ENDIF
IF NOT SkipAmbient
IF iCandidate = NO_CANDIDATE_ID
REGISTER_CONTEXT_INTENTION(iCandidate,CP_HIGH_PRIORITY, "FINH_ATMNEAR")
ENDIF
contextThisFrame = TRUE
IF HAS_CONTEXT_BUTTON_TRIGGERED(iCandidate)
g_bSuppressContextHelpDuringHandling = TRUE
//attempt to push player into scenario
//DISABLE_ALL_CONTROL_ACTIONS()
//fire the ATM right away on approach now
CPRINTLN(DEBUG_FINANCE, "Atm triggering for entity complete" )
//SET_PLAYER_CONTROL(GET_PLAYER_INDEX(),FALSE)
//BOOL bInScenario = FALSE
//IF DOES_SCENARIO_EXIST_IN_AREA(GET_ENTITY_COORDS(oAtm,TRUE), 2.0, TRUE)
///CPRINTLN(DEBUG_FINANCE, "Atm scenario found, triggering player" )
WHILE NOT REQUEST_SCRIPT_AUDIO_BANK("ATM")
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
CPRINTLN(DEBUG_FINANCE, "Waiting for REQUEST_SCRIPT_AUDIO_BANK(ATM) to return true")
WAIT(0)
ENDWHILE
//CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
//OPEN_SEQUENCE_TASK(seq)
WAIT(100)
//TASK_SWAP_WEAPON(NULL,FALSE)
TEXT_LABEL_63 tAtmAnimDict = ""
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),WEAPONTYPE_UNARMED,TRUE)
IF Get_Atm_Anim_Dict_Names(eAnimSet_enter, tAtmAnimDict)
TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(),
vSynchSceneOrigin,
PEDMOVEBLENDRATIO_WALK, 5000, GET_ENTITY_HEADING(oAtm),
DEFAULT_NAVMESH_RADIUS)
iATMSynchSceneStage = 0
ENDIF
ENDIF
WAIT(100)
//CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
WAIT(100)
IF NOT IS_PED_DEAD_OR_DYING(PLAYER_PED_ID())// added for 1315250
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) // added for 1315250
//Set-up blinders on PC
bCreatedBlinders = SET_MULTIHEAD_SAFE(TRUE,TRUE, DEFAULT,TRUE)
bTriggered = TRUE
//CLOSE_SEQUENCE_TASK(seq)
//TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(),seq)
//bInScenario = TRUE
//ENDIF
//wait for the player to get into the damn scenario
/*//no waiting anymore due to 1331023
INT iTimeout = GET_GAME_TIMER() + 16000
WHILE (!IS_ENTITY_DEAD(PLAYER_PED_ID()))
AND (!IS_PED_RAGDOLL(PLAYER_PED_ID()))
AND (!IS_PED_USING_ANY_SCENARIO(PLAYER_PED_ID()))
AND (iTimeout > GET_GAME_TIMER())
//CPRINTLN(DEBUG_FINANCE, "Waiting for player to get into ATM scenario")
ATM_CONTROL_DISABLE()
WAIT(0)
IF (iTimeout < GET_GAME_TIMER())
SCRIPT_ASSERT("Player ped failed to get into atm scenario before timeout elapsed")
ENDIF
IF ATM_HEALTH_DELTA_FAILED()
iTimeout = 0
ENDIF
ENDWHILE
*/
IF g_bInMultiplayer
playerBD[PARTICIPANT_ID_TO_INT()].bWarpedInside = TRUE
SET_MULTIPLAYER_WALLET_CASH()
SET_MULTIPLAYER_BANK_CASH()
g_bAtmShowing = TRUE
ENDIF
//IF (iTimeout > GET_GAME_TIMER())
currentMpPage = MPAPE_FIRST_CHOICE
START_AUDIO_SCENE("ATM_PLAYER_SCENE")
#if IS_DEBUG_BUILD
IF NOT g_bFake_fire_and_forget_new_atm
#ENDIF
FIRE_AND_FORGET_NEW_ATM(0,currentMpPage,oAtm,bSkipScenario)
#if IS_DEBUG_BUILD
ELSE
WHILE NOT IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL)
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
Control_Synch_Scene(oAtm)
WAIT(0)
ENDWHILE
ENDIF
#ENDIF
STOP_AUDIO_SCENE("ATM_PLAYER_SCENE")
//ENDIF
IF g_bInMultiplayer
g_bAtmShowing = FALSE
REMOVE_MULTIPLAYER_WALLET_CASH()
REMOVE_MULTIPLAYER_BANK_CASH()
ENDIF
IF NOT bSkipScenario
OR g_bInMultiplayer
IF NOT IS_PED_DEAD_OR_DYING(PLAYER_PED_ID())
IF NOT bSkipScenario
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(PLAYER_PED_ID())
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
//WAIT(1000)
CPRINTLN(DEBUG_FINANCE, "<EXIT_ATM> Player scenario cancel out")
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())//1388194
IF (IS_PED_USING_ANY_SCENARIO(PLAYER_PED_ID()))
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(PLAYER_PED_ID())
IF NOT IS_PED_DEAD_OR_DYING(PLAYER_PED_ID())
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
//WAIT(1000)
ENDIF
IF Get_Atm_Anim_Dict_Names(eAnimSet_base, tAtmAnimDict)
REMOVE_ANIM_DICT(tAtmAnimDict)
ENDIF
IF Get_Atm_Anim_Dict_Names(eAnimSet_idle, tAtmAnimDict)
REMOVE_ANIM_DICT(tAtmAnimDict)
ENDIF
IF Get_Atm_Anim_Dict_Names(eAnimSet_exit, tAtmAnimDict)
IF IS_SYNCHRONIZED_SCENE_RUNNING(iATMSynchSceneID)
DETACH_SYNCHRONIZED_SCENE(iATMSynchSceneID)
iATMSynchSceneID = -1
ENDIF
iATMSynchSceneID = NETWORK_CREATE_SYNCHRONISED_SCENE(vSynchSceneOrigin, GET_ENTITY_ROTATION(oAtm), DEFAULT,
FALSE, // SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iATMSynchSceneID, TRUE)
FALSE) // SET_SYNCHRONIZED_SCENE_LOOPED(iATMSynchSceneID, FALSE)
NETWORK_ADD_PED_TO_SYNCHRONISED_SCENE(PLAYER_PED_ID(), iATMSynchSceneID,
tAtmAnimDict, "exit",
NORMAL_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
NETWORK_START_SYNCHRONISED_SCENE(iATMSynchSceneID)
REMOVE_ANIM_DICT(tAtmAnimDict)
ELSE
CPRINTLN(DEBUG_FINANCE, "<EXIT_ATM> not Get_Atm_Anim_Dict_Names()")
ENDIF
ELSE
CPRINTLN(DEBUG_FINANCE, "<EXIT_ATM> player is dead [3]")
ENDIF
ELSE
CPRINTLN(DEBUG_FINANCE, "<EXIT_ATM> player is dead [2]")
ENDIF
ELSE
CPRINTLN(DEBUG_FINANCE, "<EXIT_ATM> player is dead or dying [1]")
ENDIF
ELSE
CPRINTLN(DEBUG_FINANCE, "<EXIT_ATM> bSkipScenario = true and g_bInMultiplayer = false")
ENDIF
INT l = 0
CPRINTLN(DEBUG_FINANCE, "<EXIT_ATM> ATM started preventing punch on leaving ATM")
WHILE l < 1000
AND NOT SCREEN_TERMINATION_CONDITION_CHECKS(oAtm)
l += ROUND(0 +@1000)
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE)
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_CANCEL)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_LIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_HEAVY)
WAIT(0)
ENDWHILE
CPRINTLN(DEBUG_FINANCE, "<EXIT_ATM> ATM stopped preventing punch on leaving ATM")
IF g_bInMultiplayer
playerBD[PARTICIPANT_ID_TO_INT()].bWarpedInside = FALSE
ENDIF
bTriggered = FALSE
ENDIF
ENDIF
//PLAY_SOUND_FRONTEND(-1, "PIN_BUTTON","ATM_SOUNDS")
RELEASE_CONTEXT_INTENTION(iCandidate)
ENDIF
ELSE // otherwise wait a moment so we're not constantly checking for peds animating
RELEASE_CONTEXT_INTENTION(iCandidate)
CPRINTLN(DEBUG_FINANCE, "Atm skipped due to ped with ambient using detected.")
WAIT(250)
ENDIF
// #IF IS_DEBUG_BUILD
// ELSE
// //1318982
// SCRIPT_ASSERT("No scenario found in range of ATM.")
// #ENDIF
//ENDIF
ELSE//main
RELEASE_CONTEXT_INTENTION(iCandidate)
//if out of range then check if far enough away to finish this script
BOOL invalidatmstate = FALSE
IF DOES_ENTITY_EXIST(oAtm)
IF NOT IS_OBJECT_WITHIN_BRAIN_ACTIVATION_RANGE(oAtm)
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> object out of brain activation range")
invalidatmstate = TRUE
ENDIF
ELSE
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> object does not exist")
invalidatmstate = TRUE
ENDIF
IF invalidatmstate
bCheck = FALSE
ENDIF
ENDIF
ENDIF
ELSE
//player dead reset tacular
CPRINTLN(DEBUG_FINANCE, "<ATM_KILL> player dead reset tacular")
bCheck = FALSE
ENDIF
IF NOT contextThisFrame
IF iCandidate != NO_CANDIDATE_ID
RELEASE_CONTEXT_INTENTION(iCandidate)
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
MAINTAIN_ATM_DEBUG_WIDGETS()
#ENDIF
WAIT(0)
ENDWHILE
IF bTransactionHappened
//CPRINTLN(DEBUG_FINANCE, "ATM script attempting save, CAN_CALL_STAT_SAVE(STAT_SAVETYPE_END_ATM,FALSE)")
//IF CAN_CALL_STAT_SAVE(STAT_SAVETYPE_END_ATM,FALSE)
CPRINTLN(DEBUG_FINANCE, "ATM calling REQUEST_SAVE(STAT_SAVETYPE_END_ATM) ")
REQUEST_SAVE(SSR_REASON_FM_ATM, STAT_SAVETYPE_END_ATM)
//ENDIF
ENDIF
CPRINTLN(DEBUG_FINANCE, "ATM script bailed")
CLEANUP_ATM()
ENDSCRIPT