195 lines
7.4 KiB
Scheme
Executable File
195 lines
7.4 KiB
Scheme
Executable File
|
|
USING "friends_public.sch"
|
|
|
|
///public interface for friend activity scripts
|
|
/// alwyn.roberts@rockstarnorth.com
|
|
///
|
|
|
|
// *******************************************************************************************
|
|
// FRIEND INITIALISATION PUBLIC ACCESSORS AND MUTATORS
|
|
// *******************************************************************************************
|
|
|
|
FUNC BOOL canStartActivity(enumActivityLocation eLoc)
|
|
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY)
|
|
AND NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY_WITH_MG)
|
|
// CPRINTLN(DEBUG_FRIENDS, "canStartActivity(", GetLabel_enumActivityLocation(eLoc), ") - activity not launched")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_PED_INJURED(FRIEND_A_PED_ID())
|
|
// CPRINTLN(DEBUG_FRIENDS, "canStartActivity(", GetLabel_enumActivityLocation(eLoc), ") - friend A ped injured")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_GROUP_MEMBER(FRIEND_A_PED_ID(), PLAYER_GROUP_ID())
|
|
// CPRINTLN(DEBUG_FRIENDS, "canStartActivity(", GetLabel_enumActivityLocation(eLoc), ") - friend A ped not in players group")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(FRIEND_B_PED_ID())
|
|
IF NOT IS_PED_GROUP_MEMBER(FRIEND_B_PED_ID(), PLAYER_GROUP_ID())
|
|
// CPRINTLN(DEBUG_FRIENDS, "canStartActivity(", GetLabel_enumActivityLocation(eLoc), ") - friend B ped exists but is not in players group")
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_STATIC_BLIP_CURRENTLY_VISIBLE(g_ActivityLocations[eLoc].sprite)
|
|
// CPRINTLN(DEBUG_FRIENDS, "canStartActivity(", GetLabel_enumActivityLocation(eLoc), ") - activity blip not enabled")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL hasActivityStarted(enumActivityLocation eLoc)
|
|
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY)
|
|
AND NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY_WITH_MG)
|
|
// CPRINTLN(DEBUG_FRIENDS, "canStartActivity(", GetLabel_enumActivityLocation(eLoc), ") - activity not launched")
|
|
ELSE
|
|
IF eLoc <> NO_ACTIVITY_LOCATION
|
|
AND eLoc = g_eCurrentActivityLoc
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL hasAnyActivityStarted()
|
|
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY)
|
|
AND NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY_WITH_MG)
|
|
// CPRINTLN(DEBUG_FRIENDS, "canStartActivity(", GetLabel_enumActivityLocation(eLoc), ") - activity not launched")
|
|
ELSE
|
|
IF g_eCurrentActivityLoc < MAX_ACTIVITY_LOCATIONS
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
///
|
|
/// PARAMS:
|
|
/// thisActivityLocation -
|
|
PROC startActivity(enumActivityLocation thisActivityLocation, BOOL bPedsMustBeInGroup = TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY)
|
|
AND NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY_WITH_MG)
|
|
CPRINTLN(DEBUG_FRIENDS, "startActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - activity session not launched")
|
|
|
|
SCRIPT_ASSERT("Cannot start a friend activity - activity session not launched")
|
|
ELSE
|
|
CPRINTLN(DEBUG_FRIENDS, "startActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ")")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF IS_PED_INJURED(FRIEND_A_PED_ID())
|
|
SCRIPT_ASSERT("Cannot start a friend activity - friend A is injured/doesn't exist")
|
|
EXIT
|
|
ENDIF
|
|
IF bPedsMustBeInGroup
|
|
IF NOT IS_PED_GROUP_MEMBER(FRIEND_A_PED_ID(), PLAYER_GROUP_ID())
|
|
SCRIPT_ASSERT("Cannot start a friend activity - friend A isnt in players group")
|
|
EXIT
|
|
ENDIF
|
|
IF NOT IS_PED_INJURED(FRIEND_B_PED_ID())
|
|
IF NOT IS_PED_GROUP_MEMBER(FRIEND_B_PED_ID(), PLAYER_GROUP_ID())
|
|
SCRIPT_ASSERT("Cannot start a friend activity - friend B exists but is not in players group")
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (g_eCurrentActivityLoc = NO_ACTIVITY_LOCATION)
|
|
g_ePreviousActivityResult = NO_ACTIVITY_RESULT
|
|
g_eCurrentActivityLoc = thisActivityLocation
|
|
|
|
ELSE
|
|
SCRIPT_ASSERT("startActivity() - invalid thisActivityLocation")
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
///
|
|
/// PARAMS:
|
|
/// thisActivityLocation -
|
|
PROC finishActivity(enumActivityLocation thisActivityLocation, enumActivityResult thisActivityResult)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
// Ensure in friend hangout mode
|
|
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY)
|
|
AND NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY_WITH_MG)
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - activity not launched??")
|
|
|
|
SCRIPT_ASSERT("cannot finish a friend activity if activity not launched!")
|
|
ELSE
|
|
// Ensure friend A (if exists) has been returned to players group
|
|
IF NOT IS_PED_INJURED(FRIEND_A_PED_ID())
|
|
IF NOT IS_PED_GROUP_MEMBER(FRIEND_A_PED_ID(), PLAYER_GROUP_ID())
|
|
SCRIPT_ASSERT("finishActivity() - Friend A not returned to players group at end of minigame")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Ensure friend B (if exists) has been returned to players group
|
|
IF NOT IS_PED_INJURED(FRIEND_B_PED_ID())
|
|
IF NOT IS_PED_GROUP_MEMBER(FRIEND_B_PED_ID(), PLAYER_GROUP_ID())
|
|
SCRIPT_ASSERT("finishActivity() - Friend B not returned to players group at end of minigame")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Report finish result
|
|
SWITCH thisActivityResult
|
|
CASE AR_playerWon
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - player won!")
|
|
BREAK
|
|
CASE AR_playerDraw
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - player draw!")
|
|
BREAK
|
|
CASE AR_buddyA_won
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - player lost to friend A!")
|
|
BREAK
|
|
CASE AR_buddyB_won
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - player lost to friend B!")
|
|
BREAK
|
|
CASE AR_playerQuit
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - player quit!")
|
|
BREAK
|
|
|
|
CASE AR_buddyA_attacked
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - buddy A attacked")
|
|
BREAK
|
|
CASE AR_buddyB_attacked
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - buddy B attacked")
|
|
BREAK
|
|
CASE AR_buddyAll_attacked
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - buddy (all) attacked")
|
|
BREAK
|
|
CASE AR_buddy_injured
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - buddy injured??")
|
|
BREAK
|
|
CASE AR_deatharrest
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - player deatharrest??")
|
|
BREAK
|
|
|
|
DEFAULT
|
|
CPRINTLN(DEBUG_FRIENDS, "finishActivity(", GetLabel_enumActivityLocation(thisActivityLocation), ") - returns DEFAULT? use a valid enumActivityResult please")
|
|
SCRIPT_ASSERT("minigame script returns DEFAULT?")
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF (g_eCurrentActivityLoc = thisActivityLocation)
|
|
g_ePreviousActivityLoc = g_eCurrentActivityLoc
|
|
g_ePreviousActivityResult = thisActivityResult
|
|
|
|
g_eCurrentActivityLoc = NO_ACTIVITY_LOCATION
|
|
ELSE
|
|
SCRIPT_ASSERT("invalid thisActivityLocation in finishActivity()")
|
|
ENDIF
|
|
|
|
ENDPROC
|