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 ¤tPage,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 ¤tPage) 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 ¤tPage) 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 ¤tPage, 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, " 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, " 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 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 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, " 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, " 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, " 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, " 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, " 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 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, " 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, " 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, " SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()") CLEANUP_ATM() TERMINATE_THIS_THREAD() ENDIF ELIF bRunningInMP IF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE() CPRINTLN(DEBUG_FINANCE, " 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, " 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, " not Get_Atm_Anim_Dict_Names()") ENDIF ELSE CPRINTLN(DEBUG_FINANCE, " player is dead [3]") ENDIF ELSE CPRINTLN(DEBUG_FINANCE, " player is dead [2]") ENDIF ELSE CPRINTLN(DEBUG_FINANCE, " player is dead or dying [1]") ENDIF ELSE CPRINTLN(DEBUG_FINANCE, " bSkipScenario = true and g_bInMultiplayer = false") ENDIF INT l = 0 CPRINTLN(DEBUG_FINANCE, " 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, " 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, " object out of brain activation range") invalidatmstate = TRUE ENDIF ELSE CPRINTLN(DEBUG_FINANCE, " object does not exist") invalidatmstate = TRUE ENDIF IF invalidatmstate bCheck = FALSE ENDIF ENDIF ENDIF ELSE //player dead reset tacular CPRINTLN(DEBUG_FINANCE, " 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