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

476 lines
13 KiB
Python
Executable File

//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_script.sch"
USING "mission_stat_public.sch"
/// Support script that displays mid mission mission stat alerts
// http://rsgediwiki1/wiki/index.php/Scaleform_Mission_Target_Complete
SCALEFORM_INDEX mov = NULL
FUNC BOOL CHECK_TRACKED_STAT_FOR_SUCCESS(INT index)
IF g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[index].target].less_than_threshold = true
RETURN FALSE//no mid mission tracking for less than threshold stats, because they would trigger immediatly
ENDIF
IF g_MissionStatTrackingArray[index].successshown
RETURN FALSE
ENDIF
SWITCH g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[index].target].type
CASE MISSION_STAT_TYPE_SINGLE_ENTITY_SPEED_THRESHOLD
IF FLOOR(g_MissionStatTrackingArray[index].fvalue) >= g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[index].target].success_threshold
RETURN TRUE
ENDIF
RETURN FALSE
CASE MISSION_STAT_TYPE_ACTION_CAM_USE
CASE MISSION_STAT_TYPE_UNIQUE_BOOL
CASE MISSION_STAT_TYPE_SINGLE_ENTITY_DAMAGE_THRESHOLD
CASE MISSION_STAT_TYPE_HEADSHOTS
CASE MISSION_STAT_TYPE_FRACTION
CASE MISSION_STAT_TYPE_PURE_COUNT
CASE MISSION_STAT_TYPE_PURE_COUNT_PERCENTAGE
CASE MISSION_STAT_TYPE_FINANCE_TABLE
CASE MISSION_STAT_TYPE_FINANCE_DIRECT
CASE MISSION_STAT_TYPE_PURE_COUNT_DISTANCE
IF g_MissionStatTrackingArray[index].ivalue >= g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[index].target].success_threshold
RETURN TRUE
ENDIF
RETURN FALSE
CASE MISSION_STAT_TYPE_WINDOWED_TIMER
IF g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[index].target].less_than_threshold
//less than success
IF g_bMissionStatTimeWindowClosedForGood
IF g_MissionStatTrackingArray[index].ivalue <= g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[index].target].success_threshold
RETURN TRUE
ENDIF
ENDIF
ELSE
//normal greater than success
IF g_MissionStatTrackingArray[index].ivalue >= g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[index].target].success_threshold
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
DEFAULT
RETURN FALSE
ENDSWITCH
RETURN FALSE
ENDFUNC
PROC UPLOAD_DATA_FOR_SUCCEEDED_TRACKED_STAT(INT index)
//upload the success string for the given entry in g_MissionStatTrackingArray
//use raw current value for now
//INT i = index
//i = i
SWITCH g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[index].target].type
//SET_DATA_SLOT(0, 2, "Sharpshooter", "Rank");
CASE MISSION_STAT_TYPE_TOTALTIME
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
"",
MISSION_TIME_STAT_NAME(g_MissionStatTrackingArray[index].target))
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(MISSION_TIME_STAT_NAME(g_MissionStatTrackingArray[index].target))
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MISSION_STAT_TYPE_ACTION_CAM_USE
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
"",
ACTION_CAM_STAT_NAMES(g_MissionStatTrackingArray[index].target))
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(ACTION_CAM_STAT_NAMES(g_MissionStatTrackingArray[index].target))
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MISSION_STAT_TYPE_UNIQUE_BOOL
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
"",
UNIQUE_BOOLEAN_STAT_NAMES(g_MissionStatTrackingArray[index].target))
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(UNIQUE_BOOLEAN_STAT_NAMES(g_MissionStatTrackingArray[index].target))
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MISSION_STAT_TYPE_WINDOWED_TIMER
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
"",
TIME_WINDOW_STAT_NAMES(g_MissionStatTrackingArray[index].target))
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(TIME_WINDOW_STAT_NAMES(g_MissionStatTrackingArray[index].target))
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MISSION_STAT_TYPE_SINGLE_ENTITY_SPEED_THRESHOLD
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
"",
SINGLE_ENTITY_SPEED_STRING())
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(SINGLE_ENTITY_SPEED_STRING())
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MISSION_STAT_TYPE_SINGLE_ENTITY_DAMAGE_THRESHOLD
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
INVALID_SCALEFORM_PARAM,
"",
SINGLE_ENTITY_DAMAGE_STAT_NAMES(g_MissionStatTrackingArray[index].target))
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(SINGLE_ENTITY_DAMAGE_STAT_NAMES(g_MissionStatTrackingArray[index].target))
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MISSION_STAT_TYPE_HEADSHOTS
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,INVALID_SCALEFORM_PARAM,INVALID_SCALEFORM_PARAM,
"",
HEADSHOT_DAMAGE_STAT_NAMES(g_MissionStatTrackingArray[index].target))
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(HEADSHOT_DAMAGE_STAT_NAMES(g_MissionStatTrackingArray[index].target))
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MISSION_STAT_TYPE_FRACTION
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,INVALID_SCALEFORM_PARAM,INVALID_SCALEFORM_PARAM,
"",
FRACTION_STAT_NAMES(g_MissionStatTrackingArray[index].target))
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(FRACTION_STAT_NAMES(g_MissionStatTrackingArray[index].target))
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MISSION_STAT_TYPE_ACCURACY
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,INVALID_SCALEFORM_PARAM,INVALID_SCALEFORM_PARAM,
"",
"ACCUMIS")
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("ACCUMIS")
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MISSION_STAT_TYPE_PURE_COUNT
CASE MISSION_STAT_TYPE_PURE_COUNT_PERCENTAGE
CASE MISSION_STAT_TYPE_BULLETS_FIRED
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,INVALID_SCALEFORM_PARAM,INVALID_SCALEFORM_PARAM,
"",
PURE_COUNT_STAT_NAMES(g_MissionStatTrackingArray[index].target))
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(PURE_COUNT_STAT_NAMES(g_MissionStatTrackingArray[index].target))
END_SCALEFORM_MOVIE_METHOD()
BREAK
CASE MISSION_STAT_TYPE_FINANCE_DIRECT
CASE MISSION_STAT_TYPE_FINANCE_TABLE
/*
CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING(mov,"SET_DATA_SLOT",
1,
2,
INVALID_SCALEFORM_PARAM,INVALID_SCALEFORM_PARAM,INVALID_SCALEFORM_PARAM,
"",
DOLLAR_STAT_NAMES(g_MissionStatTrackingArray[index].target))
*/
BEGIN_SCALEFORM_MOVIE_METHOD(mov,"SET_DATA_SLOT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("")
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(DOLLAR_STAT_NAMES(g_MissionStatTrackingArray[index].target))
END_SCALEFORM_MOVIE_METHOD()
BREAK
DEFAULT
SCRIPT_ASSERT("mission_stat_alerter: Unimplemented stat type!")
ENDSWITCH
ENDPROC
SCRIPT
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP|FORCE_CLEANUP_FLAG_MAGDEMO)
TERMINATE_THIS_THREAD()
ENDIF
/* this feature is disabled for now as per bug 274883
WHILE TRUE //is currently fired and forgotten
//PRINTSTRING("Mission stat alerter running!\n")
IF g_iMissionStatsBeingTracked > 0
//check the list for succeeded metrics and display them if this is the case
INT i = 0
BOOL bLoaded = FALSE
REPEAT g_iMissionStatsBeingTracked i
BOOL bSuccess = FALSE
//g_MissionStatTrackingArray
//has already been displayed?
//check for success
bSuccess = CHECK_TRACKED_STAT_FOR_SUCCESS(i)
IF (NOT g_MissionStatTrackingArray[i].successshown) AND bSuccess
//check for success
//start showing this success
//load the UI
//mission_target_complete
BOOL doLoad = FALSE
IF mov = NULL
doLoad = TRUE
ELSE
IF(NOT HAS_SCALEFORM_MOVIE_LOADED(mov))
doLoad = TRUE
ENDIF
ENDIF
IF doLoad
mov = REQUEST_SCALEFORM_MOVIE("mission_target_complete")
REQUEST_ADDITIONAL_TEXT("MISHSTA", MINIGAME_TEXT_SLOT)
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED()
WAIT(0)
ENDWHILE
WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(mov))
PRINTSTRING("mission_target_complete.gfx loading\n")
WAIT(0)
ENDWHILE
bLoaded = TRUE
ENDIF
//upload data
UPLOAD_DATA_FOR_SUCCEEDED_TRACKED_STAT(i)
//show metric for however long
CALL_SCALEFORM_MOVIE_METHOD(mov,"SHOW")
BOOL bDisplaying = TRUE
SETTIMERA(0)
INT timertracker = 0
WHILE bDisplaying
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
DRAW_SCALEFORM_MOVIE(mov, 0.155,0.115,0.1875 ,0.0569 ,255,255,255,0)
timertracker += TIMERA()
SETTIMERA(0)
IF timertracker > 8000
bDisplaying = FALSE
ENDIF
ELSE
SETTIMERA(0)
ENDIF
WAIT(0)
ENDWHILE
g_MissionStatTrackingArray[i].successshown = TRUE
//delay before next
WAIT(2000)
ENDIF
ENDREPEAT
//release UI
IF bLoaded
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov)
ENDIF
ELSE
//no stats to track, sleeeep
WAIT(9999)
ENDIF
WAIT(0)
IF g_bInMultiplayer
TERMINATE_THIS_THREAD()
ENDIF
ENDWHILE
*/
ENDSCRIPT