6152 lines
218 KiB
Scheme
Executable File
6152 lines
218 KiB
Scheme
Executable File
///private header for family task control scripts
|
|
/// alwyn.roberts@rockstarnorth.com
|
|
///
|
|
|
|
USING "timer_public.sch"
|
|
USING "script_ped.sch"
|
|
USING "help_at_location.sch"
|
|
USING "context_control_public.sch"
|
|
|
|
USING "familyAnim_Private.sch"
|
|
|
|
USING "familyTask_animArray.sch"
|
|
USING "familyTask_animDialogue.sch"
|
|
|
|
|
|
// *******************************************************************************************
|
|
// FAMILY TASKS PRIVATE FUNCTIONS
|
|
// *******************************************************************************************
|
|
FUNC BOOL PRIVATE_Update_Family_Anim(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent)
|
|
|
|
TEXT_LABEL_63 tFamilyAnimDict
|
|
TEXT_LABEL_63 tFamilyAnimClip
|
|
|
|
ANIMATION_FLAGS eFamilyAnimFlag
|
|
enumFamilyAnimProgress eFamilyAnimProgress
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tFamilyAnimDict, tFamilyAnimClip, eFamilyAnimFlag, eFamilyAnimProgress)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
HUD_COLOURS animHudColour = HUD_COLOUR_PINK
|
|
#ENDIF
|
|
|
|
REQUEST_ANIM_DICT(tFamilyAnimDict)
|
|
IF NOT HAS_ANIM_DICT_LOADED(tFamilyAnimDict)
|
|
REQUEST_ANIM_DICT(tFamilyAnimDict)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("request: ")
|
|
str += ("\"")
|
|
str += (tFamilyAnimDict)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, animHudColour)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ELSE
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilyAnimDict, tFamilyAnimClip)
|
|
TASK_PLAY_ANIM(PedIndex, tFamilyAnimDict, tFamilyAnimClip,
|
|
NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,
|
|
eFamilyAnimFlag)
|
|
SET_FORCE_FOOTSTEP_UPDATE(PedIndex, TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("TASK_PLAY_ANIM \"")
|
|
// str += (tFamilyAnimDict)
|
|
// str += ("\", \"")
|
|
str += (tFamilyAnimClip)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, animHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("anim \"")
|
|
// str += (tFamilyAnimDict)
|
|
// str += ("\", \"")
|
|
str += (tFamilyAnimClip)
|
|
str += ("\" ")
|
|
str += GET_STRING_FROM_FLOAT(GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tFamilyAnimDict, tFamilyAnimClip))
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, animHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
FUNC BOOL PRIVATE_Update_Family_AnimAdvanced(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
VECTOR vFamilyScenePos, FLOAT fFamilySceneHead,
|
|
FLOAT blendInDelta = NORMAL_BLEND_IN,
|
|
FLOAT blendOutDelta = NORMAL_BLEND_OUT)
|
|
|
|
TEXT_LABEL_63 tFamilyAnimAdvancedDict
|
|
TEXT_LABEL_63 tFamilyAnimAdvancedClip
|
|
|
|
ANIMATION_FLAGS eFamilyAnimAdvancedFlag
|
|
enumFamilyAnimProgress eFamilyAnimAdvancedProgress
|
|
|
|
VECTOR vAnimAdvancedOffset
|
|
FLOAT fAnimAdvancedHead
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tFamilyAnimAdvancedDict, tFamilyAnimAdvancedClip, eFamilyAnimAdvancedFlag, eFamilyAnimAdvancedProgress)
|
|
AND PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vAnimAdvancedOffset, fAnimAdvancedHead)
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
HUD_COLOURS AnimAdvancedHudColour = HUD_COLOUR_PINK
|
|
#ENDIF
|
|
|
|
REQUEST_ANIM_DICT(tFamilyAnimAdvancedDict)
|
|
IF NOT HAS_ANIM_DICT_LOADED(tFamilyAnimAdvancedDict)
|
|
REQUEST_ANIM_DICT(tFamilyAnimAdvancedDict)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("request: ")
|
|
str += ("\"")
|
|
str += (tFamilyAnimAdvancedDict)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, AnimAdvancedHudColour)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ELSE
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilyAnimAdvancedDict, tFamilyAnimAdvancedClip)
|
|
|
|
IK_CONTROL_FLAGS ikFlags
|
|
PRIVATE_Get_FamilyMember_Anim_Ik_Control_Flags(eFamilyMember, eFamilyEvent, ikFlags)
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(eFamilyAnimAdvancedFlag, AF_USE_KINEMATIC_PHYSICS)
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
SET_PED_CAN_EVASIVE_DIVE(PedIndex, FALSE)
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedIndex, TRUE)
|
|
ENDIF
|
|
|
|
TASK_PLAY_ANIM_ADVANCED(PedIndex, tFamilyAnimAdvancedDict, tFamilyAnimAdvancedClip,
|
|
vFamilyScenePos+vAnimAdvancedOffset,
|
|
<<0,0,fFamilySceneHead+fAnimAdvancedHead>>,
|
|
blendInDelta, blendOutDelta, -1,
|
|
eFamilyAnimAdvancedFlag, 0, DEFAULT, ikFlags)
|
|
SET_FORCE_FOOTSTEP_UPDATE(PedIndex, TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("TASK_PLAY_AnimAdvanced \"")
|
|
str += (tFamilyAnimAdvancedClip)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, AnimAdvancedHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("AnimAdvanced \"")
|
|
str += (tFamilyAnimAdvancedClip)
|
|
str += ("\" ")
|
|
str += GET_STRING_FROM_FLOAT(GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tFamilyAnimAdvancedDict, tFamilyAnimAdvancedClip))
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, AnimAdvancedHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
FUNC BOOL PRIVATE_Update_Family_SynchScene(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
VECTOR vFamilyScenePos, FLOAT fFamilySceneHead,
|
|
INT &iScene, bool loop, bool holdLastFrame,
|
|
TEXT_LABEL_63 &tAnimDict, TEXT_LABEL_63 &tAnimClip,
|
|
FLOAT blendInDelta = NORMAL_BLEND_IN,
|
|
FLOAT blendOutDelta = NORMAL_BLEND_OUT)
|
|
TEXT_LABEL_63 tFamilySynchSceneDict
|
|
TEXT_LABEL_63 tFamilySynchSceneClip
|
|
|
|
ANIMATION_FLAGS eFamilySynchSceneFlag
|
|
enumFamilyAnimProgress eFamilySynchSceneProgress
|
|
|
|
VECTOR vSynchSceneOffset
|
|
FLOAT fSynchSceneHead
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tFamilySynchSceneDict, tFamilySynchSceneClip, eFamilySynchSceneFlag, eFamilySynchSceneProgress)
|
|
AND PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vSynchSceneOffset, fSynchSceneHead)
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
HUD_COLOURS SynchSceneHudColour = HUD_COLOUR_PINK
|
|
#ENDIF
|
|
|
|
REQUEST_ANIM_DICT(tFamilySynchSceneDict)
|
|
IF NOT HAS_ANIM_DICT_LOADED(tFamilySynchSceneDict)
|
|
REQUEST_ANIM_DICT(tFamilySynchSceneDict)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("request: ")
|
|
str += ("\"")
|
|
|
|
INT iFamilySynchSceneDictLength
|
|
iFamilySynchSceneDictLength = GET_LENGTH_OF_LITERAL_STRING(tFamilySynchSceneDict)
|
|
IF iFamilySynchSceneDictLength >= 10
|
|
str += GET_STRING_FROM_STRING(tFamilySynchSceneDict,
|
|
iFamilySynchSceneDictLength - 10,
|
|
iFamilySynchSceneDictLength)
|
|
ELSE
|
|
str += tFamilySynchSceneDict
|
|
ENDIF
|
|
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, SynchSceneHudColour)
|
|
#ENDIF
|
|
|
|
tAnimDict = ""
|
|
tAnimClip = ""
|
|
|
|
RETURN FALSE
|
|
ELSE
|
|
SYNCED_SCENE_PLAYBACK_FLAGS flags = SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT
|
|
RAGDOLL_BLOCKING_FLAGS ragdollFlags = RBF_PLAYER_IMPACT
|
|
FLOAT moverBlendInDelta = INSTANT_BLEND_IN
|
|
IK_CONTROL_FLAGS ikFlags = AIK_NONE
|
|
|
|
|
|
|
|
PRIVATE_Get_FamilyMember_Anim_Ik_Control_Flags(eFamilyMember, eFamilyEvent, ikFlags)
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
iScene = CREATE_SYNCHRONIZED_SCENE(vFamilyScenePos+vSynchSceneOffset, <<0,0,fFamilySceneHead+fSynchSceneHead>>)
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iScene, loop)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, holdLastFrame)
|
|
SET_SYNCHRONIZED_SCENE_RATE(iScene, 1.0)
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ragdollFlags, SYNCED_SCENE_USE_PHYSICS)
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
SET_PED_CAN_EVASIVE_DIVE(PedIndex, FALSE)
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedIndex, TRUE)
|
|
ENDIF
|
|
|
|
TASK_SYNCHRONIZED_SCENE(PedIndex, iScene,
|
|
tFamilySynchSceneDict, tFamilySynchSceneClip,
|
|
blendInDelta, blendOutDelta, flags, ragdollFlags, moverBlendInDelta, ikFlags)
|
|
SET_FORCE_FOOTSTEP_UPDATE(PedIndex, TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("creating SynchScene \"")
|
|
INT iFamilySynchSceneDictLength
|
|
iFamilySynchSceneDictLength = GET_LENGTH_OF_LITERAL_STRING(tFamilySynchSceneClip)
|
|
IF iFamilySynchSceneDictLength >= 10
|
|
str += GET_STRING_FROM_STRING(tFamilySynchSceneClip,
|
|
iFamilySynchSceneDictLength - 10,
|
|
iFamilySynchSceneDictLength)
|
|
ELSE
|
|
str += tFamilySynchSceneClip
|
|
ENDIF
|
|
str += ("\" ")
|
|
str += (iScene)
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, SynchSceneHudColour)
|
|
#ENDIF
|
|
|
|
tAnimDict = tFamilySynchSceneDict
|
|
tAnimClip = tFamilySynchSceneClip
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilySynchSceneDict, tFamilySynchSceneClip, ANIM_SYNCED_SCENE)
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ragdollFlags, SYNCED_SCENE_USE_PHYSICS)
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
SET_PED_CAN_EVASIVE_DIVE(PedIndex, FALSE)
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedIndex, TRUE)
|
|
ENDIF
|
|
|
|
TASK_SYNCHRONIZED_SCENE(PedIndex, iScene,
|
|
tFamilySynchSceneDict, tFamilySynchSceneClip,
|
|
blendInDelta, blendOutDelta, flags, ragdollFlags, moverBlendInDelta, ikFlags)
|
|
SET_FORCE_FOOTSTEP_UPDATE(PedIndex, TRUE)
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iScene, loop)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, holdLastFrame)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("tasking SynchScene \"")
|
|
|
|
INT iTaunterAnimOutLength
|
|
iTaunterAnimOutLength = GET_LENGTH_OF_LITERAL_STRING(tFamilySynchSceneDict)
|
|
|
|
IF iTaunterAnimOutLength >= 10
|
|
str += GET_STRING_FROM_STRING(tFamilySynchSceneDict,
|
|
iTaunterAnimOutLength - 10,
|
|
iTaunterAnimOutLength)
|
|
ELSE
|
|
str += tFamilySynchSceneDict
|
|
ENDIF
|
|
|
|
str += ("/")
|
|
iTaunterAnimOutLength = GET_LENGTH_OF_LITERAL_STRING(tFamilySynchSceneClip)
|
|
|
|
IF iTaunterAnimOutLength >= 15
|
|
str += GET_STRING_FROM_STRING(tFamilySynchSceneClip,
|
|
iTaunterAnimOutLength - 15,
|
|
iTaunterAnimOutLength)
|
|
ELSE
|
|
str += tFamilySynchSceneClip
|
|
ENDIF
|
|
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, SynchSceneHudColour)
|
|
#ENDIF
|
|
|
|
tAnimDict = tFamilySynchSceneDict
|
|
tAnimClip = tFamilySynchSceneClip
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("SynchScene \"")
|
|
str += (tFamilySynchSceneDict)
|
|
str += ("\" id:")
|
|
str += iScene
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, SynchSceneHudColour)
|
|
|
|
str = (tFamilySynchSceneClip)
|
|
str += (":")
|
|
str += GET_STRING_FROM_FLOAT(GET_SYNCHRONIZED_SCENE_PHASE(iScene))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, SynchSceneHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
tAnimDict = ""
|
|
tAnimClip = ""
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_SynchSceneMatch(PED_INDEX PedIndex, //enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
// VECTOR vFamilyScenePos, FLOAT fFamilySceneHead,
|
|
INT &iScene, TEXT_LABEL_63 tAnimDict, TEXT_LABEL_63 tAnimClip,
|
|
STRING sAnimTail, STRING sMatchTail)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
HUD_COLOURS SynchSceneHudColour = HUD_COLOUR_PINK
|
|
#ENDIF
|
|
|
|
REQUEST_ANIM_DICT(tAnimDict)
|
|
IF NOT HAS_ANIM_DICT_LOADED(tAnimDict)
|
|
REQUEST_ANIM_DICT(tAnimDict)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("request: ")
|
|
str += ("\"")
|
|
str += (tAnimDict)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, SynchSceneHudColour)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ELSE
|
|
FLOAT blendInDelta = NORMAL_BLEND_IN
|
|
FLOAT blendOutDelta = NORMAL_BLEND_OUT
|
|
SYNCED_SCENE_PLAYBACK_FLAGS flags = SYNCED_SCENE_USE_PHYSICS
|
|
RAGDOLL_BLOCKING_FLAGS ragdollFlags = RBF_PLAYER_IMPACT
|
|
FLOAT moverBlendInDelta = INSTANT_BLEND_IN
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("synch scene not running...")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, SynchSceneHudColour)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_STRING_NULL_OR_EMPTY(sAnimTail)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("sAnimTail is null or empty")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, SynchSceneHudColour)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
INT iMatchClip_length = GET_LENGTH_OF_LITERAL_STRING(tAnimClip)
|
|
INT iMatchTail_length = GET_LENGTH_OF_LITERAL_STRING(sAnimTail)
|
|
|
|
INT iMatchBody_length = iMatchClip_length - iMatchTail_length
|
|
TEXT_LABEL_63 tMatchBody = GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME(tAnimClip, 0, iMatchBody_length)
|
|
TEXT_LABEL_63 tMatchClip = tMatchBody
|
|
tMatchClip += sMatchTail
|
|
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(PedIndex, tAnimDict, tMatchClip, ANIM_SYNCED_SCENE)
|
|
OR GET_SYNCHRONIZED_SCENE_PHASE(iScene) <= 0.001
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ragdollFlags, SYNCED_SCENE_USE_PHYSICS)
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
SET_PED_CAN_EVASIVE_DIVE(PedIndex, FALSE)
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedIndex, TRUE)
|
|
ENDIF
|
|
|
|
TASK_SYNCHRONIZED_SCENE(PedIndex, iScene,
|
|
tAnimDict, tMatchClip,
|
|
blendInDelta, blendOutDelta, flags, ragdollFlags, moverBlendInDelta)
|
|
SET_FORCE_FOOTSTEP_UPDATE(PedIndex, TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("tasking SynchSceneMatch \"")
|
|
str += (tMatchClip)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, SynchSceneHudColour)
|
|
#ENDIF
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "matchup synch scene: \"", tAnimDict, "/", tAnimClip, "\", \"", sAnimTail, "\" - \"", tMatchBody, "\" + \"", sMatchTail, "\" = \"", tMatchClip, "\"")
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("SynchScene \"")
|
|
str += (tAnimDict)
|
|
str += ("\" id:")
|
|
str += iScene
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, SynchSceneHudColour)
|
|
|
|
str = (tMatchClip)
|
|
str += (":")
|
|
str += GET_STRING_FROM_FLOAT(GET_SYNCHRONIZED_SCENE_PHASE(iScene))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, SynchSceneHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Scenario(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent, INT &iScenarioCount)
|
|
|
|
TEXT_LABEL_63 tFamilyScenarioDictNULL
|
|
TEXT_LABEL_63 tFamilyScenarioClip
|
|
|
|
ANIMATION_FLAGS eFamilyScenarioFlag
|
|
enumFamilyAnimProgress eFamilyScenarioProgress
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tFamilyScenarioDictNULL, tFamilyScenarioClip, eFamilyScenarioFlag, eFamilyScenarioProgress)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
HUD_COLOURS scenarioHudColour = HUD_COLOUR_PINK
|
|
#ENDIF
|
|
|
|
IF NOT IS_SCENARIO_TYPE_ENABLED(tFamilyScenarioClip)
|
|
SET_SCENARIO_TYPE_ENABLED(tFamilyScenarioClip, TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("enable: ")
|
|
str += ("\"")
|
|
str += (tFamilyScenarioClip)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, scenarioHudColour)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ELSE
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_START_SCENARIO_IN_PLACE) <> PERFORMING_TASK)
|
|
|
|
IF (iScenarioCount > 0)
|
|
iScenarioCount = 0
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, FE_ANY_wander_family_event)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
TASK_START_SCENARIO_IN_PLACE(PedIndex, tFamilyScenarioClip)
|
|
iScenarioCount++
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(eFamilyScenarioFlag, AF_USE_KINEMATIC_PHYSICS)
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
SET_PED_CAN_EVASIVE_DIVE(PedIndex, FALSE)
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedIndex, TRUE)
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("TASK_START_SCENARIO_IN_PLACE \"")
|
|
// str += (tFamilyScenarioDict)
|
|
// str += ("\", \"")
|
|
str += (tFamilyScenarioClip)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, scenarioHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("scenario \"")
|
|
// str += (tFamilyScenarioDict)
|
|
// str += ("\", \"")
|
|
str += (tFamilyScenarioClip)
|
|
str += ("\" count:")
|
|
str += (iScenarioCount)
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, scenarioHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_ON_PHONE(PED_INDEX PedIndex) //, enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent)
|
|
|
|
// TEXT_LABEL_63 tFamilyON_PHONEDictNULL
|
|
// TEXT_LABEL_63 tFamilyON_PHONEClip
|
|
//
|
|
// ANIMATION_FLAGS eFamilyON_PHONEFlag
|
|
// enumFamilyAnimProgress eFamilyON_PHONEProgress
|
|
//
|
|
// IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
// tFamilyON_PHONEDictNULL, tFamilyON_PHONEClip, eFamilyON_PHONEFlag, eFamilyON_PHONEProgress)
|
|
//
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
HUD_COLOURS ON_PHONEHudColour = HUD_COLOUR_PINK
|
|
#ENDIF
|
|
//
|
|
// IF NOT IS_ON_PHONE_TYPE_ENABLED(tFamilyON_PHONEClip)
|
|
// SET_ON_PHONE_TYPE_ENABLED(tFamilyON_PHONEClip, TRUE)
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// str = ("enable: ")
|
|
// str += ("\"")
|
|
// str += (tFamilyON_PHONEClip)
|
|
// str += ("\"")
|
|
//
|
|
// DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, ON_PHONEHudColour)
|
|
// #ENDIF
|
|
//
|
|
// RETURN FALSE
|
|
// ELSE
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_USE_MOBILE_PHONE) <> PERFORMING_TASK)
|
|
TASK_USE_MOBILE_PHONE(PedIndex, TRUE)
|
|
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
SET_PED_CONFIG_FLAG(PedIndex, PCF_UseKinematicModeWhenStationary, TRUE)
|
|
|
|
SET_PED_CAN_EVASIVE_DIVE(PedIndex, FALSE)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedIndex, TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("TASK_USE_MOBILE_PHONE \"")
|
|
// str += (tFamilyON_PHONEDict)
|
|
// str += ("\", \"")
|
|
// str += (tFamilyON_PHONEClip)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, ON_PHONEHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("ON_PHONE \"")
|
|
// str += (tFamilyON_PHONEDict)
|
|
// str += ("\", \"")
|
|
// str += (tFamilyON_PHONEClip)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, ON_PHONEHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
// ENDIF
|
|
// ENDIF
|
|
//
|
|
// RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Is_Family_Member_Ready_For_Driving(PED_INDEX PedIndex,
|
|
enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
VEHICLE_INDEX vehicleIndex, AUTOMATIC_DOOR_ENUM eDoor,
|
|
VECTOR vFamilyScenePos, FLOAT fFamilySceneHead,
|
|
VEHICLE_SEAT seat = VS_DRIVER)
|
|
|
|
|
|
IF NOT IS_BIT_SET(g_sAutoDoorData[eDoor].settingsBitset, BIT_AUTODOOR_ALWAYS_OPEN)
|
|
FORCE_AUTOMATIC_DOOR_SLIDE_OPEN(eDoor, TRUE)
|
|
CLEAR_BIT(g_sAutoDoorData[ENUM_TO_INT(eDoor)].settingsBitset, BIT_AUTODOOR_OPEN_ON_WANTED)
|
|
RETURN FALSE
|
|
ELSE
|
|
|
|
ENDIF
|
|
|
|
//entering vehicle, must be ready for driving!
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_ENTER_VEHICLE) = PERFORMING_TASK)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF NOT IS_VEHICLE_SEAT_FREE(vehicleIndex, seat)
|
|
IF (GET_PED_IN_VEHICLE_SEAT(vehicleIndex, seat) <> PedIndex)
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (eFamilyMember = FM_MICHAEL_WIFE)
|
|
|
|
VECTOR vInitOffset
|
|
FLOAT fInitHead
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vInitOffset, fInitHead)
|
|
|
|
VECTOR VecCentre = vFamilyScenePos+vInitOffset
|
|
VECTOR VecOffset = <<0,0,0>>
|
|
VECTOR VecBounds = <<12,12,2>>
|
|
FLOAT fAngle = fFamilySceneHead+fInitHead
|
|
FLOAT fOffset = 9.0
|
|
|
|
|
|
IF eFamilyEvent = FE_M_WIFE_leaving_in_car
|
|
|
|
VecOffset = <<-0.4,-2.7,0.5>>
|
|
VecBounds = <<3.0,5.0,2.0>>+<<0.5,0.5,0>>
|
|
fOffset = 80.000
|
|
ENDIF
|
|
|
|
// START_WIDGET_GROUP("PRIVATE_Is_Family_Member_Ready_For_Driving")
|
|
// ADD_WIDGET_VECTOR_SLIDER("VecCentre", VecCentre, -4000.0, 4000.0, 0.0)
|
|
// ADD_WIDGET_VECTOR_SLIDER("VecOffset", VecOffset, -10.0, 10.0, 0.1)
|
|
// ADD_WIDGET_VECTOR_SLIDER("VecBounds", VecBounds, 0.0, 20.0, 0.5)
|
|
// ADD_WIDGET_FLOAT_SLIDER("fAngle", fAngle, 0.0, 360.0, 0.0)
|
|
// ADD_WIDGET_FLOAT_SLIDER("fOffset", fOffset, 0.0, 360.0, 1.0)
|
|
// STOP_WIDGET_GROUP()
|
|
//
|
|
// WHILE TRUE
|
|
// IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
// VecCentre+VecOffset, VecBounds, fAngle+fOffset)
|
|
//
|
|
// IF IS_KEYBOARD_KEY_JUST_RELEASED(KEY_C)
|
|
//
|
|
// SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_STRING_TO_DEBUG_FILE(" IF eFamilyEvent = FE_X_")SAVE_STRING_TO_DEBUG_FILE(Get_String_From_FamilyEvent(eFamilyEvent))SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_STRING_TO_DEBUG_FILE(" VecOffset = ")SAVE_VECTOR_TO_DEBUG_FILE(VecOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_STRING_TO_DEBUG_FILE(" VecBounds = ")SAVE_VECTOR_TO_DEBUG_FILE(VecBounds)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_STRING_TO_DEBUG_FILE(" fOffset = ")SAVE_FLOAT_TO_DEBUG_FILE(fOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
//
|
|
// ENDIF
|
|
//
|
|
// WAIT(0)
|
|
// ENDWHILE
|
|
|
|
//
|
|
IF NOT IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
VecCentre+VecOffset, VecBounds, fAngle+fOffset)
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ELIF ((eFamilyMember = FM_FRANKLIN_LAMAR) OR (eFamilyMember = FM_FRANKLIN_STRETCH))
|
|
RETURN TRUE
|
|
ELSE
|
|
|
|
|
|
IF eFamilyEvent = FE_M7_SON_coming_back_from_a_bike_ride
|
|
|
|
VECTOR vInitOffset
|
|
FLOAT fInitHead
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vInitOffset, fInitHead)
|
|
|
|
VECTOR VecCentre = vFamilyScenePos+vInitOffset
|
|
VECTOR VecOffset1 = <<30.0, 25.0, 6.9>>, VecOffset2 = <<5.0, 0.0, 0.0>>
|
|
VECTOR VecBounds1 = <<24.0, 30.0, 10.0>>, VecBounds2 = <<45.0,36.0,0.0>>
|
|
FLOAT fAngle = fFamilySceneHead+fInitHead
|
|
FLOAT fOffset = 6.0000
|
|
|
|
/* START_WIDGET_GROUP("PRIVATE_Is_Family_Member_Ready_For_Driving")
|
|
ADD_WIDGET_VECTOR_SLIDER("VecCentre", VecCentre, -4000.0, 4000.0, 0.0)
|
|
|
|
ADD_WIDGET_STRING("Locate 1")
|
|
ADD_WIDGET_VECTOR_SLIDER("VecOffset1", VecOffset1, -100.0, 100.0, 0.1)
|
|
ADD_WIDGET_VECTOR_SLIDER("VecBounds1", VecBounds1, 0.0, 50.0, 0.5)
|
|
|
|
ADD_WIDGET_STRING("Locate 2")
|
|
ADD_WIDGET_VECTOR_SLIDER("VecOffset2", VecOffset2, -100.0, 100.0, 0.1)
|
|
ADD_WIDGET_VECTOR_SLIDER("VecBounds2", VecBounds2, 0.0, 50.0, 0.5)
|
|
|
|
ADD_WIDGET_STRING("Angle")
|
|
ADD_WIDGET_FLOAT_SLIDER("fAngle", fAngle, 0.0, 360.0, 0.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("fOffset", fOffset, 0.0, 360.0, 1.0)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
WHILE TRUE
|
|
IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
VecCentre+VecOffset1, VecBounds1, fAngle+fOffset)
|
|
IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
VecCentre+VecOffset2, VecBounds2, fAngle+fOffset)
|
|
|
|
IF IS_KEYBOARD_KEY_JUST_RELEASED(KEY_C)
|
|
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" IF eFamilyEvent = FE_X_")SAVE_STRING_TO_DEBUG_FILE(Get_String_From_FamilyEvent(eFamilyEvent))SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" VecOffset1 = ")SAVE_VECTOR_TO_DEBUG_FILE(VecOffset1)SAVE_STRING_TO_DEBUG_FILE(", VecOffset2 = ")SAVE_VECTOR_TO_DEBUG_FILE(VecOffset2)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" VecBounds1 = ")SAVE_VECTOR_TO_DEBUG_FILE(VecBounds1)SAVE_STRING_TO_DEBUG_FILE(", VecBounds2 = ")SAVE_VECTOR_TO_DEBUG_FILE(VecBounds2)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(" fOffset = ")SAVE_FLOAT_TO_DEBUG_FILE(fOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE*/
|
|
|
|
//
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
VecCentre+VecOffset1, VecBounds1, fAngle+fOffset)
|
|
OR IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
VecCentre+VecOffset2, VecBounds2, fAngle+fOffset)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF NOT IS_ENTITY_ON_SCREEN(PedIndex)
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
|
|
//
|
|
FLOAT fDistFromPlayer = VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex))
|
|
IF fDistFromPlayer > (15.0*15.0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
FUNC BOOL PRIVATE_Is_Family_Member_Ready_For_DriveWander(PED_INDEX PedIndex, enumFamilyMember eFamilyMember,
|
|
VECTOR VehCoors, VECTOR ExitCoors,
|
|
TEXT_LABEL_31 &tRecordingName)
|
|
|
|
//already wandering, must be ready for a wander!
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_VEHICLE_DRIVE_WANDER) = PERFORMING_TASK)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
CONST_FLOAT fReachedExitRadius 2.0
|
|
FLOAT fExitMag, fExitRad
|
|
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE
|
|
fExitMag = VMAG(ExitCoors-VehCoors)
|
|
fExitRad = fExitMag-fReachedExitRadius
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(VehCoors, fExitRad, HUD_COLOUR_BLUELIGHT, 0.25)
|
|
DrawDebugFamilySphere(ExitCoors, fReachedExitRadius, HUD_COLOUR_RED, 1.0)
|
|
#ENDIF
|
|
|
|
IF VDIST2(VehCoors, GET_ENTITY_COORDS(PedIndex)) > ((fExitRad)*(fExitRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
tRecordingName = "family_m_wife_drive"
|
|
RETURN FALSE
|
|
BREAK
|
|
CASE FM_MICHAEL_DAUGHTER
|
|
fExitMag = VMAG(ExitCoors-VehCoors)
|
|
fExitRad = fExitMag-fReachedExitRadius
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(VehCoors, fExitRad, HUD_COLOUR_BLUELIGHT, 0.25)
|
|
DrawDebugFamilySphere(ExitCoors, fReachedExitRadius, HUD_COLOUR_RED, 1.0)
|
|
#ENDIF
|
|
|
|
IF VDIST2(VehCoors, GET_ENTITY_COORDS(PedIndex)) > ((fExitRad)*(fExitRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
tRecordingName = "family_m_daughter_drive"
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
FUNC BOOL PRIVATE_Update_Family_DrivingAway(PED_INDEX PedIndex, enumFamilyMember eFamilyMember,
|
|
VEHICLE_INDEX &vehicleIndex, enumFamilyMember eFamilyMembersVeh,
|
|
enumFamilyEvents eFamilyEvent, INT &iEnterVehStage,
|
|
VECTOR vFamilyScenePos, FLOAT fFamilySceneHead, INT &iScene,
|
|
AUTOMATIC_DOOR_ENUM eDoor,
|
|
|
|
STRING strTextBlock, STRING strBase, STRING strExit, TEXT_LABEL &tCreatedConvLabels[],
|
|
FLOAT fExitSpeechPhase,
|
|
structPedsForConversation &inSpeechStruct, structTimer &speechTimer,
|
|
STRING sDismissContext,
|
|
#IF USE_TU_CHANGES
|
|
INTERIOR_INSTANCE_INDEX &iInteriorForThisPlayer,
|
|
#ENDIF
|
|
PED_INDEX PassengerPedIndex = NULL)
|
|
|
|
enumConversationPriority enSpeechPriority = CONV_PRIORITY_AMBIENT_HIGH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CONST_INT iFamTextOffset 2
|
|
#ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vehicleIndex)
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
str = ("cant find ")
|
|
str += (Get_String_From_FamilyMember(eFamilyMembersVeh))
|
|
str += ("'s vehicle")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_PURE_WHITE)
|
|
#ENDIF
|
|
|
|
iEnterVehStage = 0
|
|
ELSE
|
|
//
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyLine(GET_ENTITY_COORDS(PedIndex, FALSE), GET_ENTITY_COORDS(vehicleIndex, FALSE), HUD_COLOUR_RED)
|
|
|
|
TEXT_LABEL_63 str
|
|
str = (Get_String_From_FamilyMember(eFamilyMember))
|
|
str += (", driving ")
|
|
str += (Get_String_From_FamilyMember(eFamilyMembersVeh))
|
|
str += ("'s vehicle")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleIndex)
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(PedIndex, vehicleIndex)
|
|
|
|
VEHICLE_SEAT eSeat = VS_DRIVER
|
|
FLOAT MoveSpeed = PEDMOVEBLENDRATIO_WALK
|
|
ENTER_EXIT_VEHICLE_FLAGS eFlags = ECF_RESUME_IF_INTERRUPTED
|
|
INT iTime = DEFAULT_TIME_NEVER_WARP //DEFAULT_TIME_BEFORE_WARP
|
|
|
|
TEXT_LABEL_63 tFamilyAnimDict = ""
|
|
TEXT_LABEL_63 tFamilyAnimLoopClip = "", tFamilyAnimExitClip = ""
|
|
|
|
ANIMATION_FLAGS eFamilyAnimFlag
|
|
enumFamilyAnimProgress eFamilyAnimProgress
|
|
|
|
CONST_INT iDRIVING_0_waitToEnter 0
|
|
|
|
// CONST_INT iDRIVING_1_exitAnim 1
|
|
CONST_INT iDRIVING_2_exitSynch 2
|
|
CONST_INT iDRIVING_4_exitDialogue 4
|
|
CONST_INT iDRIVING_5_exitAnim 5
|
|
CONST_INT iDRIVING_6_exitDialogue 6
|
|
|
|
CONST_INT iDRIVING_3_enterVeh 3
|
|
CONST_INT iDRIVING_33_enterVehDismiss 33
|
|
|
|
SWITCH iEnterVehStage
|
|
CASE iDRIVING_0_waitToEnter //idle anim while waiting for the player to approach
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("0. wait to enter, idle anim", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF NOT PRIVATE_Is_Family_Member_Ready_For_Driving(PedIndex, eFamilyMember, eFamilyEvent, vehicleIndex, eDoor, vFamilyScenePos, fFamilySceneHead, eSeat)
|
|
//
|
|
|
|
|
|
IF (eFamilyEvent = FE_M_WIFE_leaving_in_car)
|
|
TEXT_LABEL_63 tAnimDict, tAnimClip
|
|
IF PRIVATE_Update_Family_SynchScene(PedIndex, eFamilyMember, eFamilyEvent,
|
|
vFamilyScenePos, fFamilySceneHead,
|
|
iScene, TRUE, FALSE, tAnimDict, tAnimClip)
|
|
|
|
ENDIF
|
|
ELSE
|
|
IF PRIVATE_Update_Family_ON_PHONE(PedIndex)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
//
|
|
|
|
CLEAR_PED_TASKS(PedIndex)
|
|
|
|
FORCE_AUTOMATIC_DOOR_SLIDE_OPEN(eDoor, TRUE)
|
|
CLEAR_BIT(g_sAutoDoorData[ENUM_TO_INT(eDoor)].settingsBitset, BIT_AUTODOOR_OPEN_ON_WANTED)
|
|
|
|
IF (eFamilyEvent = FE_M_WIFE_leaving_in_car)
|
|
iEnterVehStage = iDRIVING_2_exitSynch
|
|
ELSE
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(strBase)
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, strBase,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
REQUEST_VEHICLE_ASSET(GET_ENTITY_MODEL(vehicleIndex))
|
|
iEnterVehStage = iDRIVING_3_enterVeh
|
|
ENDIF
|
|
ELSE
|
|
REQUEST_VEHICLE_ASSET(GET_ENTITY_MODEL(vehicleIndex))
|
|
iEnterVehStage = iDRIVING_3_enterVeh
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE iDRIVING_2_exitSynch //
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("2. start playing exit synch", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tFamilyAnimDict, tFamilyAnimLoopClip, eFamilyAnimFlag, eFamilyAnimProgress)
|
|
REQUEST_ANIM_DICT(tFamilyAnimDict)
|
|
IF HAS_ANIM_DICT_LOADED(tFamilyAnimDict)
|
|
//play "base" dialogue
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, strBase,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
|
|
IF (eFamilyEvent <> FE_M_WIFE_leaving_in_car)
|
|
tFamilyAnimExitClip = "exit"
|
|
ELSE
|
|
tFamilyAnimExitClip = "exit_demo"
|
|
ENDIF
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
VECTOR vSynchSceneOffset
|
|
FLOAT fSynchSceneHead
|
|
vSynchSceneOffset = <<0,0,0>>
|
|
fSynchSceneHead = 0
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vSynchSceneOffset, fSynchSceneHead)
|
|
iScene = CREATE_SYNCHRONIZED_SCENE(vFamilyScenePos+vSynchSceneOffset, <<0,0,fFamilySceneHead+fSynchSceneHead>>)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_SYNCHRONIZED_SCENE_PHASE(iScene, 0.0)
|
|
|
|
TASK_SYNCHRONIZED_SCENE(PedIndex, iScene,
|
|
tFamilyAnimDict, tFamilyAnimExitClip,
|
|
NORMAL_BLEND_IN, SLOW_BLEND_OUT,
|
|
SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_TAG_SYNC_OUT)
|
|
SET_FORCE_FOOTSTEP_UPDATE(PedIndex, TRUE)
|
|
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
iEnterVehStage = iDRIVING_4_exitDialogue
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE iDRIVING_4_exitDialogue //
|
|
#IF IS_DEBUG_BUILD
|
|
str = "4. exiting, starting dialogue \""
|
|
str += strExit
|
|
str += "\" "
|
|
str += GET_STRING_FROM_FLOAT(fExitSpeechPhase)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF IS_STRING_NULL_OR_EMPTY(strExit)
|
|
iEnterVehStage = iDRIVING_5_exitAnim
|
|
RETURN TRUE
|
|
ENDIF
|
|
IF (fExitSpeechPhase <= 0.0)
|
|
iEnterVehStage = iDRIVING_5_exitAnim
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tFamilyAnimDict, tFamilyAnimLoopClip, eFamilyAnimFlag, eFamilyAnimProgress)
|
|
|
|
IF (eFamilyEvent <> FE_M_WIFE_leaving_in_car)
|
|
tFamilyAnimExitClip = "exit"
|
|
ELSE
|
|
tFamilyAnimExitClip = "exit_demo"
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip)
|
|
//play "exit" dialogue
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, strExit,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels, "face")
|
|
iEnterVehStage = iDRIVING_6_exitDialogue
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE iDRIVING_6_exitDialogue //
|
|
#IF IS_DEBUG_BUILD
|
|
str = "6. exiting, wait for dialogue \""
|
|
str += strExit
|
|
str += "\" "
|
|
str += GET_STRING_FROM_FLOAT(fExitSpeechPhase)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF IS_STRING_NULL_OR_EMPTY(strExit)
|
|
iEnterVehStage = iDRIVING_5_exitAnim
|
|
RETURN TRUE
|
|
ENDIF
|
|
IF (fExitSpeechPhase <= 0.0)
|
|
iEnterVehStage = iDRIVING_5_exitAnim
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tFamilyAnimDict, tFamilyAnimLoopClip, eFamilyAnimFlag, eFamilyAnimProgress)
|
|
|
|
|
|
IF (eFamilyEvent <> FE_M_WIFE_leaving_in_car)
|
|
tFamilyAnimExitClip = "exit"
|
|
ELSE
|
|
tFamilyAnimExitClip = "exit_demo"
|
|
ENDIF
|
|
|
|
FLOAT fAnimClipCurrentTime
|
|
fAnimClipCurrentTime = -1
|
|
IF IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip, ANIM_SCRIPT)
|
|
fAnimClipCurrentTime = GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip)
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip, ANIM_SYNCED_SCENE)
|
|
fAnimClipCurrentTime = GET_SYNCHRONIZED_SCENE_PHASE(iScene)
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip)
|
|
fAnimClipCurrentTime = GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip)
|
|
ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = "\""
|
|
str += tFamilyAnimExitClip
|
|
str += "\": "
|
|
str += GET_STRING_FROM_FLOAT(fAnimClipCurrentTime)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
|
|
IF (fAnimClipCurrentTime >= 0)
|
|
IF fAnimClipCurrentTime >= fExitSpeechPhase
|
|
//unpause "exit" dialogue
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "TASK_PLAY_ANIM(\"", tFamilyAnimDict, "\", \"", "face", "\", AF_SECONDARY)")
|
|
#ENDIF
|
|
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
iEnterVehStage = iDRIVING_5_exitAnim
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE iDRIVING_5_exitAnim //
|
|
|
|
CONST_FLOAT fANIM_CLIP_MAX_TIME 0.88
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = "5. playing exit anim \""
|
|
str += strExit
|
|
str += "\" "
|
|
str += GET_STRING_FROM_FLOAT(fANIM_CLIP_MAX_TIME)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_GREENLIGHT)
|
|
#ENDIF
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tFamilyAnimDict, tFamilyAnimLoopClip, eFamilyAnimFlag, eFamilyAnimProgress)
|
|
|
|
IF (eFamilyEvent <> FE_M_WIFE_leaving_in_car)
|
|
tFamilyAnimExitClip = "exit"
|
|
ELSE
|
|
tFamilyAnimExitClip = "exit_demo"
|
|
ENDIF
|
|
|
|
FLOAT fAnimClipCurrentTime
|
|
fAnimClipCurrentTime = -1
|
|
IF IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip, ANIM_SCRIPT)
|
|
fAnimClipCurrentTime = GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip)
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip, ANIM_SYNCED_SCENE)
|
|
fAnimClipCurrentTime = GET_SYNCHRONIZED_SCENE_PHASE(iScene)
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip)
|
|
fAnimClipCurrentTime = GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tFamilyAnimDict, tFamilyAnimExitClip)
|
|
ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = "\""
|
|
str += tFamilyAnimExitClip
|
|
str += "\": "
|
|
str += GET_STRING_FROM_FLOAT(fAnimClipCurrentTime)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_GREENLIGHT)
|
|
#ENDIF
|
|
|
|
IF (fAnimClipCurrentTime >= 0)
|
|
|
|
IF fAnimClipCurrentTime >= fANIM_CLIP_MAX_TIME
|
|
FORCE_PED_MOTION_STATE(PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
CLEAR_PED_TASKS(PedIndex)
|
|
|
|
TASK_ENTER_VEHICLE(PedIndex, vehicleIndex, iTime, eSeat, MoveSpeed, eFlags)
|
|
|
|
FORCE_AUTOMATIC_DOOR_SLIDE_OPEN(eDoor, TRUE)
|
|
CLEAR_BIT(g_sAutoDoorData[ENUM_TO_INT(eDoor)].settingsBitset, BIT_AUTODOOR_OPEN_ON_WANTED)
|
|
|
|
REQUEST_VEHICLE_ASSET(GET_ENTITY_MODEL(vehicleIndex))
|
|
iEnterVehStage = iDRIVING_3_enterVeh
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
FORCE_PED_MOTION_STATE(PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
CLEAR_PED_TASKS(PedIndex)
|
|
|
|
IF IS_VEHICLE_SEAT_FREE(vehicleIndex, eSeat)
|
|
TASK_ENTER_VEHICLE(PedIndex, vehicleIndex, iTime, eSeat, MoveSpeed, eFlags)
|
|
ELSE
|
|
//
|
|
|
|
ENDIF
|
|
|
|
FORCE_AUTOMATIC_DOOR_SLIDE_OPEN(eDoor, TRUE)
|
|
CLEAR_BIT(g_sAutoDoorData[ENUM_TO_INT(eDoor)].settingsBitset, BIT_AUTODOOR_OPEN_ON_WANTED)
|
|
|
|
REQUEST_VEHICLE_ASSET(GET_ENTITY_MODEL(vehicleIndex))
|
|
iEnterVehStage = iDRIVING_3_enterVeh
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE iDRIVING_3_enterVeh //tasked to enter the vehicle
|
|
CASE iDRIVING_33_enterVehDismiss
|
|
|
|
IF NOT PRIVATE_Is_Family_Member_Ready_For_Driving(PedIndex, eFamilyMember, eFamilyEvent, vehicleIndex, eDoor, vFamilyScenePos, fFamilySceneHead, eSeat)
|
|
//
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("3. trying to enter vehicle!", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_GREEN)
|
|
#ENDIF
|
|
|
|
IF NOT IS_VEHICLE_SEAT_FREE(vehicleIndex, eSeat)
|
|
#IF IS_DEBUG_BUILD
|
|
IF iEnterVehStage = iDRIVING_3_enterVeh
|
|
DrawDebugFamilyTextWithOffset("3. entering vehicle (seat not free)", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_GREEN)
|
|
ELIF iEnterVehStage = iDRIVING_33_enterVehDismiss
|
|
DrawDebugFamilyTextWithOffset("33. entering vehicle (seat not free)", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_GREEN)
|
|
ELSE
|
|
DrawDebugFamilyTextWithOffset("XX. entering vehicle (seat not free)", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_GREEN)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_IN_AREA) <> PERFORMING_TASK)
|
|
AND (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_STANDARD) <> PERFORMING_TASK)
|
|
// TASK_WANDER_IN_AREA(PedIndex, GET_ENTITY_COORDS(vehicleIndex), VDIST(GET_ENTITY_COORDS(vehicleIndex), vFamilyScenePos))
|
|
TASK_WANDER_STANDARD(PedIndex)
|
|
ENDIF
|
|
|
|
IF (iEnterVehStage = iDRIVING_3_enterVeh)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sDismissContext)
|
|
IF (VDIST(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), GET_ENTITY_COORDS(PedIndex, FALSE)) < 5)
|
|
AND NOT (IS_ANY_SPEECH_PLAYING(PLAYER_PED_ID()) OR IS_ANY_SPEECH_PLAYING(PedIndex) OR IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() OR IS_CALLING_ANY_CONTACT())
|
|
|
|
STRING VoiceName
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE VoiceName = "AMANDA_NORMAL" BREAK
|
|
CASE FM_MICHAEL_SON VoiceName = "JIMMY_NORMAL" BREAK
|
|
CASE FM_MICHAEL_DAUGHTER VoiceName = "TRACY_NORMAL" BREAK
|
|
ENDSWITCH
|
|
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(PedIndex, sDismissContext, VoiceName)
|
|
iEnterVehStage = iDRIVING_33_enterVehDismiss
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SAVE_STRING_TO_DEBUG_FILE("sDismissContext - two")SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF NOT IS_VEHICLE_SEAT_FREE(vehicleIndex, eSeat)
|
|
#IF IS_DEBUG_BUILD
|
|
IF iEnterVehStage = iDRIVING_3_enterVeh
|
|
DrawDebugFamilyTextWithOffset("3. entering vehicle (seat not free)", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_GREEN)
|
|
ELIF iEnterVehStage = iDRIVING_33_enterVehDismiss
|
|
DrawDebugFamilyTextWithOffset("33. entering vehicle (seat not free)", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_GREEN)
|
|
ELSE
|
|
DrawDebugFamilyTextWithOffset("33. entering vehicle (seat not free)", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_GREEN)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF GET_PED_IN_VEHICLE_SEAT(vehicleIndex, eSeat) != PedIndex
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_IN_AREA) <> PERFORMING_TASK)
|
|
AND (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_STANDARD) <> PERFORMING_TASK)
|
|
// TASK_WANDER_IN_AREA(PedIndex, GET_ENTITY_COORDS(vehicleIndex), VDIST(GET_ENTITY_COORDS(vehicleIndex), vFamilyScenePos))
|
|
TASK_WANDER_STANDARD(PedIndex)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (iEnterVehStage = iDRIVING_3_enterVeh)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sDismissContext)
|
|
IF (VDIST(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), GET_ENTITY_COORDS(PedIndex, FALSE)) < 5)
|
|
AND NOT (IS_ANY_SPEECH_PLAYING(PLAYER_PED_ID()) OR IS_ANY_SPEECH_PLAYING(PedIndex) OR IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() OR IS_CALLING_ANY_CONTACT())
|
|
|
|
STRING VoiceName
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE VoiceName = "AMANDA_NORMAL" BREAK
|
|
CASE FM_MICHAEL_SON VoiceName = "JIMMY_NORMAL" BREAK
|
|
CASE FM_MICHAEL_DAUGHTER VoiceName = "TRACY_NORMAL" BREAK
|
|
ENDSWITCH
|
|
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(PedIndex, sDismissContext, VoiceName)
|
|
iEnterVehStage = iDRIVING_33_enterVehDismiss
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SAVE_STRING_TO_DEBUG_FILE("sDismissContext - two")SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
CPRINTLN(DEBUG_FAMILY, "sDismissContext - two")
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(vehicleIndex), GET_ENTITY_COORDS(PedIndex)) > (50*50)
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("3. entering vehicle (too far, navmesh)", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_GREEN)
|
|
#ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> PERFORMING_TASK)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, GET_ENTITY_COORDS(vehicleIndex), PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK)
|
|
|
|
IF NOT HAS_VEHICLE_ASSET_LOADED(GET_ENTITY_MODEL(vehicleIndex))
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_DrivingAway(family_ped[", Get_String_From_FamilyMember(eFamilyMember), "] enter assets havent loaded... ", Get_String_From_FamilyMember(eFamilyMembersVeh), "'s vehicle) ", Get_String_From_FamilyEvent(eFamilyEvent))
|
|
#ENDIF
|
|
ELSE
|
|
TASK_ENTER_VEHICLE(PedIndex, vehicleIndex, iTime, eSeat, MoveSpeed, eFlags)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG3LN(DEBUG_FAMILY, "PRIVATE_Update_Family_DrivingAway(family_ped[", Get_String_From_FamilyMember(eFamilyMember), "] entering ", Get_String_From_FamilyMember(eFamilyMembersVeh), "'s vehicle) ", Get_String_From_FamilyEvent(eFamilyEvent))
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("3. entering vehicle", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF GET_PED_CONFIG_FLAG(pedIndex, PCF_OpenDoorArmIK)
|
|
SET_PED_RESET_FLAG(pedIndex, PRF_SearchForClosestDoor, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PassengerPedIndex)
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(PassengerPedIndex, vehicleIndex)
|
|
IF (GET_SCRIPT_TASK_STATUS(PassengerPedIndex, SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK)
|
|
TASK_ENTER_VEHICLE(PassengerPedIndex, vehicleIndex, iTime, VS_ANY_PASSENGER, MoveSpeed, eFlags)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
BREAK
|
|
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "invalid iEnterVehStage ", iEnterVehStage, " for ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Update_Family_DrivingAway(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
CASSERTLN(DEBUG_FAMILY, "invalid iEnterVehStage ", iEnterVehStage, " for ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Update_Family_DrivingAway(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ELSE
|
|
iEnterVehStage = 0
|
|
|
|
FLOAT CruiseSpeed = 20
|
|
DRIVINGMODE Mode = DRIVINGMODE_STOPFORCARS
|
|
VECTOR VehCoors = << -825.7757, 177.2016, 71.9871 >>
|
|
VECTOR VecExitCoors = << -844.4757, 156.9072, 67.0048 >> //<< -849.4479, 158.3810, 65.6464 >>
|
|
|
|
TEXT_LABEL_31 tRecordingName
|
|
IF NOT PRIVATE_Is_Family_Member_Ready_For_DriveWander(PedIndex, eFamilyMembersVeh,
|
|
VehCoors, VecExitCoors,
|
|
tRecordingName)
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF IS_VALID_INTERIOR(iInteriorForThisPlayer)
|
|
AND IS_INTERIOR_READY(iInteriorForThisPlayer)
|
|
IF NOT IS_ENTITY_ON_SCREEN(vehicleIndex)
|
|
SET_ENTITY_COORDS(vehicleIndex, VehCoors)
|
|
SET_ENTITY_HEADING(vehicleIndex, GET_HEADING_FROM_VECTOR_2D(VecExitCoors.x-VehCoors.x, VecExitCoors.y-VehCoors.y))
|
|
|
|
CWARNINGLN(DEBUG_FAMILY, "bug #1766708 - move driver because the player is inside and cant see them")
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF IS_STRING_NULL_OR_EMPTY(tRecordingName)
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD) <> PERFORMING_TASK)
|
|
|
|
DRIVINGSTYLE Style = DRIVINGSTYLE_ACCURATE
|
|
FLOAT TargetRadius = 3.0
|
|
FLOAT StraightLineDist = -1.0
|
|
|
|
TASK_VEHICLE_DRIVE_TO_COORD(PedIndex, vehicleIndex,
|
|
VecExitCoors, CruiseSpeed * 0.5,
|
|
Style, DUMMY_MODEL_FOR_SCRIPT,
|
|
DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS,
|
|
TargetRadius, StraightLineDist)
|
|
|
|
IF (eDoor <> AUTODOOR_MAX)
|
|
IF NOT IS_PED_REGISTERED_TO_ACTIVATE_AUTOMATIC_DOOR(eDoor, PedIndex)
|
|
REGISTER_PED_TO_ACTIVATE_AUTOMATIC_DOOR(eDoor, PedIndex)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG3LN(DEBUG_FAMILY, "PRIVATE_Update_Family_DrivingAway(family_ped[", Get_String_From_FamilyMember(eFamilyMember), "] is in ", Get_String_From_FamilyMember(eFamilyMembersVeh), "'s vehicle, task to drive to coord) ", Get_String_From_FamilyEvent(eFamilyEvent))
|
|
#ENDIF
|
|
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("in vehicle... drive to coord", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING) <> PERFORMING_TASK)
|
|
|
|
REQUEST_WAYPOINT_RECORDING(tRecordingName)
|
|
IF GET_IS_WAYPOINT_RECORDING_LOADED(tRecordingName)
|
|
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "DOOR_SYSTEM_GET_OPEN_RATIO(g_sAutoDoorData[ENUM_TO_INT(eDoor)].doorID): ", DOOR_SYSTEM_GET_OPEN_RATIO(g_sAutoDoorData[ENUM_TO_INT(eDoor)].doorID))
|
|
|
|
IF (eDoor <> AUTODOOR_MAX)
|
|
FORCE_AUTOMATIC_DOOR_SLIDE_OPEN(eDoor, TRUE)
|
|
CLEAR_BIT(g_sAutoDoorData[ENUM_TO_INT(eDoor)].settingsBitset, BIT_AUTODOOR_OPEN_ON_WANTED)
|
|
|
|
IF NOT IS_PED_REGISTERED_TO_ACTIVATE_AUTOMATIC_DOOR(eDoor, PedIndex)
|
|
REGISTER_PED_TO_ACTIVATE_AUTOMATIC_DOOR(eDoor, PedIndex)
|
|
ENDIF
|
|
|
|
IF DOOR_SYSTEM_GET_OPEN_RATIO(g_sAutoDoorData[ENUM_TO_INT(eDoor)].doorID) > -1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
INT iStartingProgress
|
|
iStartingProgress = 0
|
|
|
|
IF VDIST(GET_ENTITY_COORDS(PedIndex), <<-827.1387, 176.3679, 69.9464>>) > 2.5
|
|
iStartingProgress = 8
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SAVE_STRING_TO_DEBUG_FILE("dist: ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(VDIST(GET_ENTITY_COORDS(PedIndex), <<-827.1387, 176.3679, 69.9464>>))
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
#ENDIF
|
|
|
|
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(PedIndex, vehicleIndex,
|
|
tRecordingName, Mode, iStartingProgress, //
|
|
EWAYPOINT_VEHICLES_USE_AI_SLOWDOWN) //EWAYPOINT_FOLLOW_FLAGS iFlags = EWAYPOINT_DEFAULT)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG3LN(DEBUG_FAMILY, "PRIVATE_Update_Family_DrivingAway(family_ped[", Get_String_From_FamilyMember(eFamilyMember), "] is in ", Get_String_From_FamilyMember(eFamilyMembersVeh), "'s vehicle, task to waypoint) ", Get_String_From_FamilyEvent(eFamilyEvent))
|
|
#ENDIF
|
|
ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("in vehicle... follow waypoint", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
BOOL bPassengerNotInVeh
|
|
bPassengerNotInVeh = FALSE
|
|
IF NOT IS_PED_INJURED(PassengerPedIndex)
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(PassengerPedIndex, vehicleIndex)
|
|
bPassengerNotInVeh = TRUE
|
|
IF (GET_SCRIPT_TASK_STATUS(PassengerPedIndex, SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK)
|
|
TASK_ENTER_VEHICLE(PassengerPedIndex, vehicleIndex, DEFAULT_TIME_NEVER_WARP, VS_ANY_PASSENGER, PEDMOVEBLENDRATIO_WALK, ECF_RESUME_IF_INTERRUPTED)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PED_IN_VEHICLE(PedIndex, vehicleIndex, FALSE)
|
|
IF bPassengerNotInVeh
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_VEHICLE_TEMP_ACTION) <> PERFORMING_TASK)
|
|
TASK_VEHICLE_TEMP_ACTION(PedIndex, vehicleIndex, TEMPACT_BRAKE, 500)
|
|
|
|
// IF (eDoor <> AUTODOOR_MAX)
|
|
// IF NOT IS_PED_REGISTERED_TO_ACTIVATE_AUTOMATIC_DOOR(eDoor, PedIndex)
|
|
// REGISTER_PED_TO_ACTIVATE_AUTOMATIC_DOOR(eDoor, PedIndex)
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG3LN(DEBUG_FAMILY, "PRIVATE_Update_Family_DrivingAway(family_ped[", Get_String_From_FamilyMember(eFamilyMember), "] is in ", Get_String_From_FamilyMember(eFamilyMembersVeh), "'s vehicle, task to break) ", Get_String_From_FamilyEvent(eFamilyEvent))
|
|
#ENDIF
|
|
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("in vehicle... drive break", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_VEHICLE_DRIVE_WANDER) <> PERFORMING_TASK)
|
|
TASK_VEHICLE_DRIVE_WANDER(PedIndex, vehicleIndex, CruiseSpeed, Mode)
|
|
|
|
IF (eDoor <> AUTODOOR_MAX)
|
|
IF NOT IS_PED_REGISTERED_TO_ACTIVATE_AUTOMATIC_DOOR(eDoor, PedIndex)
|
|
REGISTER_PED_TO_ACTIVATE_AUTOMATIC_DOOR(eDoor, PedIndex)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CDEBUG3LN(DEBUG_FAMILY, "PRIVATE_Update_Family_DrivingAway(family_ped[", Get_String_From_FamilyMember(eFamilyMember), "] is in ", Get_String_From_FamilyMember(eFamilyMembersVeh), "'s vehicle, task to WANDER) ", Get_String_From_FamilyEvent(eFamilyEvent))
|
|
#ENDIF
|
|
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("in vehicle... drive wander", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("vehicle NOT DRIVABLE", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sDismissContext)
|
|
STRING VoiceName
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE VoiceName = "AMANDA_NORMAL" BREAK
|
|
CASE FM_MICHAEL_SON VoiceName = "JIMMY_NORMAL" BREAK
|
|
CASE FM_MICHAEL_DAUGHTER VoiceName = "TRACY_NORMAL" BREAK
|
|
ENDSWITCH
|
|
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(PedIndex, sDismissContext, VoiceName)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SAVE_STRING_TO_DEBUG_FILE("sDismissContext - two")SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
CPRINTLN(DEBUG_FAMILY, "sDismissContext - two")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
iEnterVehStage = 0
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, FE_ANY_wander_family_event)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
FUNC BOOL PRIVATE_Update_Family_DrivingHome(PED_INDEX PedIndex, enumFamilyMember eFamilyMember,
|
|
VEHICLE_INDEX &vehicleIndex, enumFamilyMember eFamilyMembersVeh,
|
|
enumFamilyEvents eFamilyEvent, INT &iEnterVehStage,
|
|
VECTOR vFamilyScenePos, FLOAT fFamilySceneHead, VECTOR VecExitCoors,
|
|
AUTOMATIC_DOOR_ENUM eDoor, enumFamilyEvents eDesiredFamilyEvent,
|
|
|
|
STRING strTextBlock, STRING strBase, TEXT_LABEL &tCreatedConvLabels[],
|
|
structPedsForConversation &inSpeechStruct, structTimer &speechTimer)
|
|
|
|
enumConversationPriority enSpeechPriority = CONV_PRIORITY_AMBIENT_HIGH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CONST_INT iFamTextOffset 2
|
|
#ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vehicleIndex)
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
str = ("cant find ")
|
|
str += (Get_String_From_FamilyMember(eFamilyMembersVeh))
|
|
str += ("'s vehicle")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_PURE_WHITE)
|
|
#ENDIF
|
|
|
|
eFamilyMembersVeh = eFamilyMembersVeh
|
|
iEnterVehStage = 0
|
|
ELSE
|
|
//
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyLine(GET_ENTITY_COORDS(PedIndex, FALSE), GET_ENTITY_COORDS(vehicleIndex, FALSE), HUD_COLOUR_RED)
|
|
|
|
TEXT_LABEL_63 str
|
|
str = (Get_String_From_FamilyMember(eFamilyMember))
|
|
str += (", driving ")
|
|
str += (Get_String_From_FamilyMember(eFamilyMembersVeh))
|
|
str += ("'s vehicle")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleIndex)
|
|
|
|
VEHICLE_SEAT eSeat = VS_DRIVER
|
|
FLOAT MoveSpeed = PEDMOVEBLENDRATIO_WALK
|
|
ENTER_EXIT_VEHICLE_FLAGS eFlags = ECF_RESUME_IF_INTERRUPTED
|
|
INT iTime = DEFAULT_TIME_NEVER_WARP //DEFAULT_TIME_BEFORE_WARP
|
|
|
|
CONST_INT iDRIVING_0_waitToEnter 0
|
|
CONST_INT iDRIVING_1_waitToEnter 1
|
|
|
|
SWITCH iEnterVehStage
|
|
CASE iDRIVING_0_waitToEnter
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("0. waitToEnter", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
|
|
IF NOT PRIVATE_Is_Family_Member_Ready_For_Driving(PedIndex, eFamilyMember, eFamilyEvent, vehicleIndex, eDoor, vFamilyScenePos, fFamilySceneHead, VS_DRIVER)
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("NOT PRIVATE_Is_Family_Member_Ready_For_Driving", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
FLOAT fExitCoorsDist2
|
|
fExitCoorsDist2 = VDIST2(GET_ENTITY_COORDS(PedIndex, FALSE), VecExitCoors)
|
|
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(PedIndex, vehicleIndex)
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("NOT IS_PED_SITTING_IN_VEHICLE", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF NOT IS_ENTITY_ON_SCREEN(PedIndex)
|
|
SET_PED_INTO_VEHICLE(PedIndex, vehicleIndex, eSeat)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK)
|
|
TASK_ENTER_VEHICLE(PedIndex, vehicleIndex, iTime, eSeat, MoveSpeed, eFlags)
|
|
ENDIF
|
|
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("IS_PED_SITTING_IN_VEHICLE", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_RED)
|
|
|
|
str =("dist: ")
|
|
str +=GET_STRING_FROM_FLOAT(SQRT(fExitCoorsDist2))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+3, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF (eDoor <> AUTODOOR_MAX)
|
|
IF NOT IS_PED_REGISTERED_TO_ACTIVATE_AUTOMATIC_DOOR(eDoor, PedIndex)
|
|
REGISTER_PED_TO_ACTIVATE_AUTOMATIC_DOOR(eDoor, PedIndex)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD) <> PERFORMING_TASK)
|
|
|
|
FLOAT CruiseSpeed
|
|
DRIVINGMODE Mode
|
|
CruiseSpeed = 7.5
|
|
Mode = DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS
|
|
|
|
DRIVINGSTYLE Style
|
|
FLOAT TargetRadius, StraightLineDist
|
|
Style = DRIVINGSTYLE_ACCURATE
|
|
TargetRadius = 3.0
|
|
StraightLineDist = -1.0
|
|
|
|
TASK_VEHICLE_DRIVE_TO_COORD(PedIndex, vehicleIndex,
|
|
VecExitCoors, CruiseSpeed,
|
|
Style, DUMMY_MODEL_FOR_SCRIPT, Mode,
|
|
TargetRadius, StraightLineDist)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF fExitCoorsDist2 <= (5*5)
|
|
TASK_LEAVE_VEHICLE(PedIndex, vehicleIndex)
|
|
iEnterVehStage = iDRIVING_1_waitToEnter
|
|
ENDIF
|
|
BREAK
|
|
CASE iDRIVING_1_waitToEnter
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("1. waitToEnter", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, strBase,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, eDesiredFamilyEvent)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "invalid iEnterVehStage ", iEnterVehStage, " for ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Update_Family_DrivingAway(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
CASSERTLN(DEBUG_FAMILY, "invalid iEnterVehStage ", iEnterVehStage, " for ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Update_Family_DrivingAway(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
|
|
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("vehicle NOT DRIVABLE", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_IN_AREA) <> PERFORMING_TASK)
|
|
AND (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_STANDARD) <> PERFORMING_TASK)
|
|
// TASK_WANDER_IN_AREA(PedIndex, GET_ENTITY_COORDS(vehicleIndex), VDIST(GET_ENTITY_COORDS(vehicleIndex), vFamilyScenePos))
|
|
TASK_WANDER_STANDARD(PedIndex)
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Get_Family_Walking_Offsets(enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
VECTOR &vWalkOffsets[], FLOAT &fWalkOffsets[])
|
|
|
|
vWalkOffsets[0] = <<0,0,0>>
|
|
|
|
SWITCH eFamilyEvent
|
|
CASE FE_M_DAUGHTER_walks_to_room_music
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_DAUGHTER
|
|
fWalkOffsets[0] = 0.0
|
|
vWalkOffsets[1] = <<-4.5000, 9.6000, -1.2000>> fWalkOffsets[1] = 0.0
|
|
vWalkOffsets[2] = <<-6.3000, 7.8000, -4.5000>> fWalkOffsets[2] = 0.0
|
|
vWalkOffsets[3] = <<-0.5000, 0.2000, -3.8000>> fWalkOffsets[3] = 0.0
|
|
vWalkOffsets[4] = <<-0.9000, 12.9000, -4.1000>> fWalkOffsets[4] = 0.0
|
|
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE FE_M2_MEXMAID_cleans_booze_pot_other
|
|
CASE FE_M7_MEXMAID_cleans_booze_pot_other
|
|
vWalkOffsets[0] = <<-6.3800, -3.7100, 1.0000>> fWalkOffsets[0] = 82.5000
|
|
vWalkOffsets[1] = <<-1.8580, -4.6230, 1.1920>> fWalkOffsets[1] = 162.0000
|
|
vWalkOffsets[2] = <<-8.3066, -15.8344, 1.1816>> fWalkOffsets[2] = 162.0000
|
|
vWalkOffsets[3] = <<-15.2080, -4.1770, 0.5000>> fWalkOffsets[3] = 71.3000
|
|
vWalkOffsets[4] = <<-7.4216, -9.6486, 5.1000>> fWalkOffsets[4] = -110.7000
|
|
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "invalid eFamilyMember ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Get_Family_Walking_Offsets(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
CASSERTLN(DEBUG_FAMILY, "invalid eFamilyMember ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Get_Family_Walking_Offsets(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Get_Family_Walking_AnimSet(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
INT iWalkingStage,
|
|
TEXT_LABEL_63 &tCleaningEnter_animDict, TEXT_LABEL_63 &tCleaningEnter_animClip,
|
|
TEXT_LABEL_63 &tCleaningBase_animDict, TEXT_LABEL_63 &tCleaningBase_animClip,
|
|
TEXT_LABEL_63 &tCleaningExit_animDict, TEXT_LABEL_63 &tCleaningExit_animClip,
|
|
ANIMATION_FLAGS &eCleaning_animFlag)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(PedIndex)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
SWITCH eFamilyEvent
|
|
CASE FE_M2_MEXMAID_cleans_booze_pot_other
|
|
CASE FE_M7_MEXMAID_cleans_booze_pot_other
|
|
|
|
SWITCH iWalkingStage
|
|
CASE 0
|
|
tCleaningEnter_animDict = "TIMETABLE@MAID@CLEANING_SURFACE_1@" tCleaningEnter_animClip = "IG_9_ENTER"
|
|
tCleaningBase_animDict = "TIMETABLE@MAID@CLEANING_SURFACE_1@" tCleaningBase_animClip = "IG_9_BASE"
|
|
tCleaningExit_animDict = "TIMETABLE@MAID@CLEANING_SURFACE_1@" tCleaningExit_animClip = "IG_9_EXIT"
|
|
// tCleaningEnter_animDict = "TIMETABLE@MAID@CLEANING_SURFACE_1@" tCleaningEnter_animClip = "IG_9_IDLE_A"
|
|
// tCleaningEnter_animDict = "TIMETABLE@MAID@CLEANING_SURFACE_1@" tCleaningEnter_animClip = "IG_9_IDLE_B"
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
Draw_Family_Member_Cleaning_Debug_Surface_Plane(PedIndex, 0.8, 0.15-0.02, HUD_COLOUR_BLUELIGHT)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
BREAK
|
|
|
|
CASE 1
|
|
CASE 2
|
|
CASE 3
|
|
CASE 4
|
|
TEXT_LABEL_63 tCleaning_animDict, tCleaning_animClip
|
|
enumFamilyAnimProgress eFamilyAnimProgress
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tCleaning_animDict, tCleaning_animClip, eCleaning_animFlag, eFamilyAnimProgress)
|
|
tCleaningEnter_animDict = tCleaning_animDict tCleaningEnter_animDict += "ENTER"
|
|
tCleaningEnter_animClip = tCleaning_animClip tCleaningEnter_animClip += "enter"
|
|
|
|
tCleaningBase_animDict = tCleaning_animDict tCleaningBase_animDict += "BASE"
|
|
tCleaningBase_animClip = tCleaning_animClip tCleaningBase_animClip += "base"
|
|
|
|
tCleaningExit_animDict = tCleaning_animDict tCleaningExit_animDict += "EXIT"
|
|
tCleaningExit_animClip = tCleaning_animClip tCleaningExit_animClip += "exit"
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
Draw_Family_Member_Cleaning_Debug_Window_Plane(PedIndex, 0.8, fDebugWindowPlaneOffset, fDebugWindowPlaneDiff, HUD_COLOUR_BLUELIGHT)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "invalid eFamilyMember ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Get_Family_Walking_Offsets(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
CASSERTLN(DEBUG_FAMILY, "invalid eFamilyMember ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Get_Family_Walking_Offsets(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Walking(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
VECTOR vSequencePos, FLOAT fSequenceHead, INT &iWalkingStage)
|
|
|
|
VECTOR vWalkOffset
|
|
FLOAT fWalkHead
|
|
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vWalkOffset, fWalkHead)
|
|
VECTOR vWalk_offsets[5]
|
|
FLOAT fWalk_offsets[5]
|
|
|
|
IF PRIVATE_Get_Family_Walking_Offsets(eFamilyMember, eFamilyEvent, vWalk_offsets, fWalk_offsets)
|
|
|
|
VECTOR vWalk_Pos_x = vSequencePos+vWalkOffset
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
HUD_COLOURS eColour = HUD_COLOUR_PURE_WHITE
|
|
FLOAT fAlphaMult = 1.0
|
|
|
|
INT iWalk
|
|
REPEAT COUNT_OF(vWalk_offsets) iWalk
|
|
INT iNextWalk = iWalk+1
|
|
IF iNextWalk >= COUNT_OF(vWalk_offsets)
|
|
iNextWalk = 0
|
|
ENDIF
|
|
|
|
str =("vWalk_offsets[")
|
|
str +=(iWalk)
|
|
str +=("]")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, vWalk_Pos_x+vWalk_offsets[iWalk], 0, eColour, fAlphaMult)
|
|
DrawDebugFamilyLine(vWalk_Pos_x+vWalk_offsets[iWalk], vWalk_Pos_x+vWalk_offsets[iNextWalk], eColour, fAlphaMult)
|
|
ENDREPEAT
|
|
|
|
str =("iWalkingStage: ")
|
|
str +=(iWalkingStage)
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, eColour)
|
|
|
|
str =("dist: ")
|
|
str +=GET_STRING_FROM_FLOAT(VDIST(GET_ENTITY_COORDS(PedIndex),vWalk_Pos_x+vWalk_offsets[iWalkingStage]))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, eColour)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PedIndex),vWalk_Pos_x+vWalk_offsets[iWalkingStage]) >= (1.0*1.0)
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(vWalk_Pos_x+vWalk_offsets[iWalkingStage], 1.0, eColour, 0.15)
|
|
#ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> PERFORMING_TASK)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, vWalk_Pos_x+vWalk_offsets[iWalkingStage], PEDMOVE_WALK)
|
|
ENDIF
|
|
ELSE
|
|
CLEAR_PED_TASKS(PedIndex)
|
|
|
|
iWalkingStage++
|
|
IF iWalkingStage >= COUNT_OF(vWalk_offsets)
|
|
iWalkingStage = 0
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
fSequenceHead = fSequenceHead
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_GoToCoordCleaning(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
VECTOR vSequencePos, FLOAT fSequenceHead, INT &iScene,
|
|
OBJECT_INDEX &cleaning_prop, MODEL_NAMES eCleaningPropModel, MODEL_NAMES &eStoredCleaningPropModel, PED_BONETAG eCleaningPropAttachBonetag,
|
|
INT &iCleaningStage, INT &iCleaningCount,
|
|
BOOL bMovePeds)
|
|
|
|
VECTOR vCleanOffset
|
|
FLOAT fCleanHead
|
|
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vCleanOffset, fCleanHead)
|
|
VECTOR vClean_offsets[5]
|
|
FLOAT fClean_offsets[5]
|
|
|
|
IF PRIVATE_Get_Family_Walking_Offsets(eFamilyMember, eFamilyEvent, vClean_offsets, fClean_offsets)
|
|
|
|
INT Time = DEFAULT_TIME_BEFORE_WARP //DEFAULT_TIME_NEVER_WARP //
|
|
FLOAT Radius = 0.01 //0.15 //DEFAULT_NAVMESH_RADIUS
|
|
ENAV_SCRIPT_FLAGS NavFlags = ENAV_DONT_ADJUST_TARGET_POSITION
|
|
|
|
VECTOR vClean_Pos_x = vSequencePos+vCleanOffset
|
|
FLOAT fClean_Head_x = fSequenceHead+fCleanHead
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bMovePeds
|
|
|
|
TEXT_LABEL_63 tCleaningEnter_animDict, tCleaningEnter_animClip
|
|
TEXT_LABEL_63 tCleaningBase_animDict, tCleaningBase_animClip
|
|
TEXT_LABEL_63 tCleaningExit_animDict, tCleaningExit_animClip
|
|
ANIMATION_FLAGS eCleaning_animFlag
|
|
|
|
FLOAT fCleaningPhase = 0.0
|
|
|
|
INT iWidget
|
|
TEXT_LABEL_63 tWidget
|
|
START_WIDGET_GROUP("PRIVATE_Update_Family_GoToCoordCleaning")
|
|
ADD_WIDGET_BOOL("bMovePeds", bMovePeds)
|
|
ADD_WIDGET_INT_SLIDER("iCleaningCount", iCleaningCount, 0, COUNT_OF(vClean_offsets)-1, 1)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("fCleaningPhase", fCleaningPhase, 0, 1, 0.001)
|
|
|
|
REPEAT COUNT_OF(vClean_offsets) iWidget
|
|
|
|
IF PRIVATE_Get_Family_Walking_AnimSet(PedIndex, eFamilyMember, eFamilyEvent,
|
|
iWidget,
|
|
tCleaningEnter_animDict, tCleaningEnter_animClip,
|
|
tCleaningBase_animDict, tCleaningBase_animClip,
|
|
tCleaningExit_animDict, tCleaningExit_animClip,
|
|
eCleaning_animFlag)
|
|
ENDIF
|
|
|
|
tWidget ="["
|
|
tWidget += iWidget
|
|
tWidget +="] \""
|
|
tWidget += GET_STRING_FROM_STRING(tCleaningBase_animDict,
|
|
GET_LENGTH_OF_LITERAL_STRING("TIMETABLE@"),
|
|
GET_LENGTH_OF_LITERAL_STRING(tCleaningBase_animDict))
|
|
tWidget +="\""
|
|
|
|
START_WIDGET_GROUP(tWidget)
|
|
ADD_WIDGET_FLOAT_SLIDER("vClean_offsets x", vClean_offsets[iWidget].x, vClean_offsets[iWidget].x-5.0, vClean_offsets[iWidget].x+5.0, 0.01)
|
|
ADD_WIDGET_FLOAT_SLIDER("vClean_offsets y", vClean_offsets[iWidget].y, vClean_offsets[iWidget].y-5.0, vClean_offsets[iWidget].y+5.0, 0.01)
|
|
ADD_WIDGET_FLOAT_SLIDER("vClean_offsets z", vClean_offsets[iWidget].z, vClean_offsets[iWidget].z-2.0, vClean_offsets[iWidget].z+2.0, 0.01)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("fClean_offsets", fClean_offsets[iWidget], -180, 180, 0.1)
|
|
STOP_WIDGET_GROUP()
|
|
ENDREPEAT
|
|
|
|
STOP_WIDGET_GROUP()
|
|
WHILE bMovePeds
|
|
|
|
IF IS_PED_INJURED(PedIndex)
|
|
bMovePeds = FALSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
SET_ENTITY_COORDS(PedIndex, vClean_Pos_x+vClean_offsets[iCleaningCount]+<<0,0,-1>>)
|
|
SET_ENTITY_HEADING(PedIndex, fClean_Head_x+fClean_offsets[iCleaningCount])
|
|
|
|
IF PRIVATE_Get_Family_Walking_AnimSet(PedIndex, eFamilyMember, eFamilyEvent,
|
|
iCleaningCount,
|
|
tCleaningEnter_animDict, tCleaningEnter_animClip,
|
|
tCleaningBase_animDict, tCleaningBase_animClip,
|
|
tCleaningExit_animDict, tCleaningExit_animClip,
|
|
eCleaning_animFlag)
|
|
|
|
REQUEST_ANIM_DICT(tCleaningEnter_animDict)
|
|
IF HAS_ANIM_DICT_LOADED(tCleaningEnter_animDict)
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(PedIndex, tCleaningEnter_animDict, tCleaningEnter_animClip)
|
|
IF ARE_STRINGS_EQUAL( "TIMETABLE@MAID@CLEANING_SURFACE_1@", tCleaningEnter_animDict)
|
|
TASK_PLAY_ANIM_ADVANCED(PedIndex, tCleaningEnter_animDict, tCleaningEnter_animClip,
|
|
vClean_Pos_x+vClean_offsets[iCleaningCount], <<0,0,fClean_Head_x+fClean_offsets[iCleaningCount]>>,
|
|
NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, eCleaning_animFlag, 0.0,
|
|
EULER_YXZ, AIK_NONE)
|
|
ELSE
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
iScene = CREATE_SYNCHRONIZED_SCENE(vClean_Pos_x+vClean_offsets[iCleaningCount], <<0,0,fClean_Head_x+fClean_offsets[iCleaningCount]>>)
|
|
ENDIF
|
|
TASK_SYNCHRONIZED_SCENE(PedIndex, iScene,
|
|
tCleaningEnter_animDict, tCleaningEnter_animClip,
|
|
INSTANT_BLEND_IN, INSTANT_BLEND_OUT,
|
|
SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_TAG_SYNC_OUT)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
VECTOR vFaceOffset
|
|
vFaceOffset = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vClean_Pos_x+vClean_offsets[iCleaningCount], fClean_Head_x+fClean_offsets[iCleaningCount], <<0,1,0>>)
|
|
DrawDebugFamilyLine(vClean_Pos_x+vClean_offsets[iCleaningCount], vFaceOffset, HUD_COLOUR_RED, 1.0)
|
|
DrawDebugFamilySphere(vFaceOffset, 0.05, HUD_COLOUR_RED, 1.0)
|
|
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PedIndex, <<0,-1.5,-1>>))
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
iScene = CREATE_SYNCHRONIZED_SCENE(vClean_Pos_x+vClean_offsets[iCleaningCount], <<0,0,fClean_Head_x+fClean_offsets[iCleaningCount]>>)
|
|
ELSE
|
|
SET_SYNCHRONIZED_SCENE_ORIGIN(iScene, vClean_Pos_x+vClean_offsets[iCleaningCount], <<0,0,fClean_Head_x+fClean_offsets[iCleaningCount]>>)
|
|
SET_SYNCHRONIZED_SCENE_PHASE(iScene, fCleaningPhase)
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
REPEAT COUNT_OF(vClean_offsets) iWidget
|
|
SAVE_STRING_TO_DEBUG_FILE(" vWalkOffsets[")
|
|
SAVE_INT_TO_DEBUG_FILE(iWidget)
|
|
SAVE_STRING_TO_DEBUG_FILE("] = ")
|
|
SAVE_VECTOR_TO_DEBUG_FILE(vClean_offsets[iWidget])
|
|
SAVE_STRING_TO_DEBUG_FILE(" fWalkOffsets[")
|
|
SAVE_INT_TO_DEBUG_FILE(iWidget)
|
|
SAVE_STRING_TO_DEBUG_FILE("] = ")
|
|
SAVE_FLOAT_TO_DEBUG_FILE(fClean_offsets[iWidget])
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
ENDREPEAT
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
iCleaningStage = 0
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
HUD_COLOURS eColour = HUD_COLOUR_PURE_WHITE
|
|
FLOAT fAlphaMult = 1.0
|
|
|
|
INT iClean
|
|
REPEAT COUNT_OF(vClean_offsets) iClean
|
|
INT iNextClean = iClean+1
|
|
IF iNextClean >= COUNT_OF(vClean_offsets)
|
|
iNextClean = 0
|
|
ENDIF
|
|
|
|
IF (iClean = iCleaningCount)
|
|
eColour = HUD_COLOUR_RED
|
|
ENDIF
|
|
|
|
str =("vClean_offsets[")
|
|
str +=(iClean)
|
|
str +=("]")
|
|
DrawDebugFamilyTextWithOffset(str, vClean_Pos_x+vClean_offsets[iClean], 0, eColour, fAlphaMult)
|
|
|
|
FLOAT fPlayerCoord_groundZ = 0.0
|
|
FLOAT fAnimPos_heightDiff
|
|
|
|
str = " height: "
|
|
IF GET_GROUND_Z_FOR_3D_COORD(vClean_Pos_x+vClean_offsets[iClean] ,fPlayerCoord_groundZ)
|
|
fAnimPos_heightDiff = ((vClean_Pos_x.z+vClean_offsets[iClean].z) - 1.0) - fPlayerCoord_groundZ
|
|
|
|
str += GET_STRING_FROM_FLOAT(fAnimPos_heightDiff)
|
|
DrawDebugFamilyTextWithOffset(str, vClean_Pos_x+vClean_offsets[iClean], 1, eColour, fAlphaMult)
|
|
ELSE
|
|
fAnimPos_heightDiff = ((vClean_Pos_x.z+vClean_offsets[iClean].z) - 1.0) - fPlayerCoord_groundZ
|
|
|
|
str += GET_STRING_FROM_FLOAT(fAnimPos_heightDiff)
|
|
DrawDebugFamilyTextWithOffset(str, vClean_Pos_x+vClean_offsets[iClean], 1, eColour, fAlphaMult)
|
|
ENDIF
|
|
|
|
IF (iClean = iCleaningCount)
|
|
VECTOR vFaceOffset
|
|
vFaceOffset = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vClean_Pos_x+vClean_offsets[iClean], fClean_Head_x+fClean_offsets[iClean], <<0,1,0>>)
|
|
DrawDebugFamilyLine(vClean_Pos_x+vClean_offsets[iClean], vFaceOffset, eColour, fAlphaMult)
|
|
DrawDebugFamilySphere(vFaceOffset, 0.05, eColour, fAlphaMult)
|
|
ENDIF
|
|
|
|
|
|
eColour = HUD_COLOUR_PURE_WHITE
|
|
DrawDebugFamilyLine(vClean_Pos_x+vClean_offsets[iClean], vClean_Pos_x+vClean_offsets[iNextClean], eColour, fAlphaMult)
|
|
|
|
|
|
ENDREPEAT
|
|
|
|
str =("iCleaningStage: ")
|
|
str +=(iCleaningStage)
|
|
str +=(", Count: ")
|
|
str +=(iCleaningCount)
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, eColour)
|
|
#ENDIF
|
|
|
|
TEXT_LABEL_63 tCleaningEnter_animDict, tCleaningEnter_animClip
|
|
TEXT_LABEL_63 tCleaningBase_animDict, tCleaningBase_animClip
|
|
TEXT_LABEL_63 tCleaningExit_animDict, tCleaningExit_animClip
|
|
ANIMATION_FLAGS eCleaning_animFlag
|
|
|
|
IF PRIVATE_Get_Family_Walking_AnimSet(PedIndex, eFamilyMember, eFamilyEvent,
|
|
iCleaningCount,
|
|
tCleaningEnter_animDict, tCleaningEnter_animClip,
|
|
tCleaningBase_animDict, tCleaningBase_animClip,
|
|
tCleaningExit_animDict, tCleaningExit_animClip,
|
|
eCleaning_animFlag)
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(eCleaning_animFlag, AF_LOOPING)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(eCleaning_animFlag, AF_LOOPING)
|
|
ELSE
|
|
//
|
|
ENDIF
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(eCleaning_animFlag, AF_USE_KINEMATIC_PHYSICS)
|
|
|
|
ELSE
|
|
SET_BITMASK_ENUM_AS_ENUM(eCleaning_animFlag, AF_USE_KINEMATIC_PHYSICS)
|
|
ENDIF
|
|
|
|
CONST_INT iCLEANING_0_start 0
|
|
CONST_INT iCLEANING_1_wait 1
|
|
CONST_INT iCLEANING_2_find 2
|
|
CONST_INT iCLEANING_3_enter 3
|
|
CONST_INT iCLEANING_4_base 4
|
|
CONST_INT iCLEANING_5_exit 5
|
|
|
|
SWITCH iCleaningStage
|
|
CASE iCLEANING_0_start
|
|
#IF IS_DEBUG_BUILD
|
|
str =("dist_0_start: ")
|
|
str +=GET_STRING_FROM_FLOAT(VDIST(GET_ENTITY_COORDS(PedIndex),vClean_Pos_x+vClean_offsets[iCleaningCount]))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, eColour)
|
|
#ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(cleaning_prop)
|
|
DELETE_OBJECT(cleaning_prop)
|
|
eStoredCleaningPropModel = DUMMY_MODEL_FOR_SCRIPT
|
|
ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PedIndex),vClean_Pos_x+vClean_offsets[iCleaningCount]) >= (1.0*1.0)
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(vClean_Pos_x+vClean_offsets[iCleaningCount], 1.0, eColour, 0.15)
|
|
#ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK)
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> PERFORMING_TASK)
|
|
|
|
NAVDATA sNavdata
|
|
sNavdata.m_fSlideToCoordHeading = fClean_Head_x+fClean_offsets[iCleaningCount]
|
|
|
|
|
|
SEQUENCE_INDEX siseq
|
|
OPEN_SEQUENCE_TASK(siseq)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD_ADVANCED(NULL, vClean_Pos_x+vClean_offsets[iCleaningCount], PEDMOVE_WALK,
|
|
Time, Radius, NavFlags, sNavdata,
|
|
fClean_Head_x+fClean_offsets[iCleaningCount])
|
|
CLOSE_SEQUENCE_TASK(siseq)
|
|
TASK_PERFORM_SEQUENCE(PedIndex, siseq)
|
|
CLEAR_SEQUENCE_TASK(siseq)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
REQUEST_MODEL(eCleaningPropModel)
|
|
REQUEST_ANIM_DICT(tCleaningEnter_animDict)
|
|
REQUEST_ANIM_DICT(tCleaningBase_animDict)
|
|
REQUEST_ANIM_DICT(tCleaningExit_animDict)
|
|
|
|
iCleaningStage = iCLEANING_1_wait
|
|
ENDIF
|
|
BREAK
|
|
CASE iCLEANING_1_wait
|
|
#IF IS_DEBUG_BUILD
|
|
str =("dist_1_wait: ")
|
|
str +=GET_STRING_FROM_FLOAT(VDIST(GET_ENTITY_COORDS(PedIndex),vClean_Pos_x+vClean_offsets[iCleaningCount]))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, eColour)
|
|
|
|
INT iWaitForRequest
|
|
iWaitForRequest = 0
|
|
IF NOT HAS_MODEL_LOADED(eCleaningPropModel)
|
|
str =("request \"")
|
|
str +=GET_MODEL_NAME_FOR_DEBUG(eCleaningPropModel)
|
|
str +=("\"")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4+TO_FLOAT(iWaitForRequest), eColour)
|
|
iWaitForRequest++
|
|
ENDIF
|
|
IF NOT HAS_ANIM_DICT_LOADED(tCleaningEnter_animDict)
|
|
str =("request \"")
|
|
str +=tCleaningEnter_animDict
|
|
str +=("\"")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4+TO_FLOAT(iWaitForRequest), eColour)
|
|
iWaitForRequest++
|
|
ENDIF
|
|
IF NOT HAS_ANIM_DICT_LOADED(tCleaningBase_animDict)
|
|
str =("request \"")
|
|
str +=tCleaningBase_animDict
|
|
str +=("\"")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4+TO_FLOAT(iWaitForRequest), eColour)
|
|
iWaitForRequest++
|
|
ENDIF
|
|
IF NOT HAS_ANIM_DICT_LOADED(tCleaningExit_animDict)
|
|
str =("request \"")
|
|
str +=tCleaningExit_animDict
|
|
str +=("\"")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4+TO_FLOAT(iWaitForRequest), eColour)
|
|
iWaitForRequest++
|
|
ENDIF
|
|
|
|
IF iWaitForRequest = 0
|
|
str =("request \"")
|
|
str +="none"
|
|
str +=("\"")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4+TO_FLOAT(iWaitForRequest), eColour)
|
|
ENDIF
|
|
|
|
#ENDIF
|
|
|
|
IF HAS_MODEL_LOADED(eCleaningPropModel)
|
|
AND HAS_ANIM_DICT_LOADED(tCleaningEnter_animDict)
|
|
AND HAS_ANIM_DICT_LOADED(tCleaningBase_animDict)
|
|
AND HAS_ANIM_DICT_LOADED(tCleaningExit_animDict)
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK)
|
|
|
|
NAVDATA sNavdata
|
|
sNavdata.m_fSlideToCoordHeading = fClean_Head_x+fClean_offsets[iCleaningCount]
|
|
|
|
SEQUENCE_INDEX siseq
|
|
OPEN_SEQUENCE_TASK(siseq)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD_ADVANCED(NULL, vClean_Pos_x+vClean_offsets[iCleaningCount], PEDMOVE_WALK,
|
|
Time, Radius, NavFlags, sNavdata,
|
|
fClean_Head_x+fClean_offsets[iCleaningCount])
|
|
CLOSE_SEQUENCE_TASK(siseq)
|
|
TASK_PERFORM_SEQUENCE(PedIndex, siseq)
|
|
CLEAR_SEQUENCE_TASK(siseq)
|
|
ENDIF
|
|
|
|
iCleaningStage = iCLEANING_2_find
|
|
ENDIF
|
|
BREAK
|
|
CASE iCLEANING_2_find
|
|
#IF IS_DEBUG_BUILD
|
|
str =("dist_2_find: ")
|
|
str +=GET_STRING_FROM_FLOAT(VDIST(GET_ENTITY_COORDS(PedIndex),vClean_Pos_x+vClean_offsets[iCleaningCount]))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, eColour)
|
|
#ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK)
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PedIndex, FALSE), vClean_Pos_x+vClean_offsets[iCleaningCount]) <= 0.5
|
|
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
|
|
IF HAS_ANIM_DICT_LOADED(tCleaningEnter_animDict)
|
|
IF ARE_STRINGS_EQUAL(tCleaningEnter_animDict, "TIMETABLE@MAID@CLEANING_SURFACE_1@")
|
|
TASK_PLAY_ANIM(PedIndex, tCleaningEnter_animDict, tCleaningEnter_animClip,
|
|
// vClean_Pos_x+vClean_offsets[iCleaningCount], <<0,0,fClean_Head_x+fClean_offsets[iCleaningCount]>>,
|
|
WALK_BLEND_IN, INSTANT_BLEND_OUT, -1, eCleaning_animFlag | AF_HOLD_LAST_FRAME,
|
|
0.0, DEFAULT, AIK_NONE)
|
|
ELSE
|
|
iScene = CREATE_SYNCHRONIZED_SCENE(vClean_Pos_x+vClean_offsets[iCleaningCount], <<0,0,fClean_Head_x+fClean_offsets[iCleaningCount]>>)
|
|
TASK_SYNCHRONIZED_SCENE(PedIndex, iScene,
|
|
tCleaningEnter_animDict, tCleaningEnter_animClip,
|
|
WALK_BLEND_IN, WALK_BLEND_OUT,
|
|
SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT,
|
|
default, WALK_BLEND_IN)
|
|
ENDIF
|
|
ELSE
|
|
CASSERTLN(DEBUG_FAMILY, "missing enter anim dict?")
|
|
ENDIF
|
|
|
|
iCleaningStage = iCLEANING_3_enter
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE iCLEANING_3_enter
|
|
#IF IS_DEBUG_BUILD
|
|
str =("dist_3_enter: ")
|
|
str +=GET_STRING_FROM_FLOAT(VDIST(GET_ENTITY_COORDS(PedIndex),vClean_Pos_x+vClean_offsets[iCleaningCount]))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, eColour)
|
|
#ENDIF
|
|
|
|
BOOL bFinishedEnterAnim
|
|
bFinishedEnterAnim = FALSE
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
FLOAT fEnterAnimPhaseTime
|
|
fEnterAnimPhaseTime = GET_SYNCHRONIZED_SCENE_PHASE(iScene)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str =("enterSync: ")
|
|
str +=GET_STRING_FROM_FLOAT(fEnterAnimPhaseTime)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4, eColour)
|
|
#ENDIF
|
|
|
|
IF fEnterAnimPhaseTime >= 0.3
|
|
IF NOT DOES_ENTITY_EXIST(cleaning_prop)
|
|
eStoredCleaningPropModel = eCleaningPropModel
|
|
|
|
cleaning_prop = CREATE_OBJECT(eCleaningPropModel, GET_PED_BONE_COORDS(pedIndex, eCleaningPropAttachBonetag, <<0,0,0>>))
|
|
ATTACH_ENTITY_TO_ENTITY(cleaning_prop, pedIndex,
|
|
GET_PED_BONE_INDEX(pedIndex, eCleaningPropAttachBonetag),
|
|
<<0,0,0>>, <<0,0,0>>,
|
|
TRUE, DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF fEnterAnimPhaseTime >= 0.99
|
|
bFinishedEnterAnim = TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PedIndex, tCleaningEnter_animDict, tCleaningEnter_animClip)
|
|
FLOAT fEnterAnimPhaseTime
|
|
fEnterAnimPhaseTime = GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tCleaningEnter_animDict, tCleaningEnter_animClip)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str =("enterAnim: ")
|
|
str +=GET_STRING_FROM_FLOAT(fEnterAnimPhaseTime)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4, eColour)
|
|
#ENDIF
|
|
|
|
IF fEnterAnimPhaseTime >= 0.3
|
|
IF NOT DOES_ENTITY_EXIST(cleaning_prop)
|
|
eStoredCleaningPropModel = eCleaningPropModel
|
|
|
|
cleaning_prop = CREATE_OBJECT(eCleaningPropModel, GET_PED_BONE_COORDS(pedIndex, eCleaningPropAttachBonetag, <<0,0,0>>))
|
|
ATTACH_ENTITY_TO_ENTITY(cleaning_prop, pedIndex,
|
|
GET_PED_BONE_INDEX(pedIndex, eCleaningPropAttachBonetag),
|
|
<<0,0,0>>, <<0,0,0>>,
|
|
TRUE, DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF fEnterAnimPhaseTime >= 0.99
|
|
bFinishedEnterAnim = TRUE
|
|
ENDIF
|
|
ELSE
|
|
bFinishedEnterAnim = TRUE
|
|
ENDIF
|
|
|
|
IF bFinishedEnterAnim
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
DETACH_SYNCHRONIZED_SCENE(iScene)
|
|
ENDIF
|
|
iScene = -1
|
|
|
|
IF HAS_ANIM_DICT_LOADED(tCleaningBase_animDict)
|
|
// TASK_PLAY_ANIM_ADVANCED(PedIndex, tCleaningBase_animDict, tCleaningBase_animClip,
|
|
// vClean_Pos_x+vClean_offsets[iCleaningCount], <<0,0,fClean_Head_x+fClean_offsets[iCleaningCount]>>,
|
|
// INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, eCleaning_animFlag | AF_HOLD_LAST_FRAME,
|
|
// 0.0, EULER_YXZ, AIK_NONE)
|
|
TASK_PLAY_ANIM(PedIndex, tCleaningBase_animDict, tCleaningBase_animClip,
|
|
// vClean_Pos_x+vClean_offsets[iCleaningCount], <<0,0,fClean_Head_x+fClean_offsets[iCleaningCount]>>,
|
|
INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, eCleaning_animFlag | AF_HOLD_LAST_FRAME,
|
|
0.0, DEFAULT, AIK_NONE)
|
|
|
|
ELSE
|
|
CASSERTLN(DEBUG_FAMILY, "missing base anim dict?")
|
|
ENDIF
|
|
|
|
iCleaningStage = iCLEANING_4_base
|
|
ENDIF
|
|
BREAK
|
|
CASE iCLEANING_4_base
|
|
#IF IS_DEBUG_BUILD
|
|
str =("dist_4_base: ")
|
|
str +=GET_STRING_FROM_FLOAT(VDIST(GET_ENTITY_COORDS(PedIndex),vClean_Pos_x+vClean_offsets[iCleaningCount]))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, eColour)
|
|
#ENDIF
|
|
|
|
BOOL bFinishedBaseAnim
|
|
bFinishedBaseAnim = FALSE
|
|
IF IS_ENTITY_PLAYING_ANIM(PedIndex, tCleaningBase_animDict, tCleaningBase_animClip)
|
|
FLOAT fBaseAnimPhaseTime
|
|
fBaseAnimPhaseTime = GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tCleaningBase_animDict, tCleaningBase_animClip)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str =("baseAnim: ")
|
|
str +=GET_STRING_FROM_FLOAT(fBaseAnimPhaseTime)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4, eColour)
|
|
#ENDIF
|
|
|
|
IF fBaseAnimPhaseTime >= 0.99
|
|
bFinishedBaseAnim = TRUE
|
|
ENDIF
|
|
ELSE
|
|
bFinishedBaseAnim = TRUE
|
|
ENDIF
|
|
|
|
IF bFinishedBaseAnim
|
|
IF HAS_ANIM_DICT_LOADED(tCleaningExit_animDict)
|
|
// TASK_PLAY_ANIM_ADVANCED(PedIndex, tCleaningExit_animDict, tCleaningExit_animClip,
|
|
// vClean_Pos_x+vClean_offsets[iCleaningCount], <<0,0,fClean_Head_x+fClean_offsets[iCleaningCount]>>,
|
|
// INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, eCleaning_animFlag | AF_HOLD_LAST_FRAME,
|
|
// 0.0, EULER_YXZ, AIK_NONE)
|
|
TASK_PLAY_ANIM(PedIndex, tCleaningExit_animDict, tCleaningExit_animClip,
|
|
// vClean_Pos_x+vClean_offsets[iCleaningCount], <<0,0,fClean_Head_x+fClean_offsets[iCleaningCount]>>,
|
|
INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, eCleaning_animFlag,
|
|
0.0, DEFAULT, AIK_NONE)
|
|
|
|
ELSE
|
|
CASSERTLN(DEBUG_FAMILY, "missing exit anim dict?")
|
|
ENDIF
|
|
iCleaningStage = iCLEANING_5_exit
|
|
ENDIF
|
|
BREAK
|
|
CASE iCLEANING_5_exit
|
|
#IF IS_DEBUG_BUILD
|
|
str =("dist_5_exit: ")
|
|
str +=GET_STRING_FROM_FLOAT(VDIST(GET_ENTITY_COORDS(PedIndex),vClean_Pos_x+vClean_offsets[iCleaningCount]))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, eColour)
|
|
#ENDIF
|
|
|
|
BOOL bFinishedExitAnim
|
|
bFinishedExitAnim = FALSE
|
|
IF IS_ENTITY_PLAYING_ANIM(PedIndex, tCleaningExit_animDict, tCleaningExit_animClip)
|
|
FLOAT fExitAnimPhaseTime
|
|
fExitAnimPhaseTime = GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tCleaningExit_animDict, tCleaningExit_animClip)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str =("exitAnim: ")
|
|
str +=GET_STRING_FROM_FLOAT(fExitAnimPhaseTime)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4, eColour)
|
|
#ENDIF
|
|
|
|
IF fExitAnimPhaseTime >= 0.7
|
|
IF DOES_ENTITY_EXIST(cleaning_prop)
|
|
DELETE_OBJECT(cleaning_prop)
|
|
eStoredCleaningPropModel = DUMMY_MODEL_FOR_SCRIPT
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
bFinishedExitAnim = TRUE
|
|
ENDIF
|
|
|
|
IF bFinishedExitAnim
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(eCleaningPropModel)
|
|
REMOVE_ANIM_DICT(tCleaningEnter_animDict)
|
|
REMOVE_ANIM_DICT(tCleaningBase_animDict)
|
|
REMOVE_ANIM_DICT(tCleaningExit_animDict)
|
|
|
|
iCleaningCount++
|
|
IF iCleaningCount >= COUNT_OF(vClean_offsets)
|
|
iCleaningCount = 0
|
|
ENDIF
|
|
|
|
CLEAR_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
|
|
iCleaningStage = iCLEANING_0_start
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
bMovePeds = bMovePeds
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
//#IF IS_DEBUG_BUILD
|
|
//structTimer sDebugTimerForUpdatingFamilyEvents
|
|
//#ENDIF
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Event_For_Anim(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, enumFamilyEvents eUpdatedFamilyEvent)
|
|
|
|
IF (g_eCurrentFamilyEvent[eFamilyMember] <> eUpdatedFamilyEvent)
|
|
|
|
|
|
TEXT_LABEL_63 tFamilyAnimDict, tFamilyAnimClip
|
|
ANIMATION_FLAGS eFamilyAnimFlag
|
|
enumFamilyAnimProgress eFamilyAnimProgress
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, g_eCurrentFamilyEvent[eFamilyMember],
|
|
tFamilyAnimDict, tFamilyAnimClip, eFamilyAnimFlag,
|
|
eFamilyAnimProgress)
|
|
IF IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilyAnimDict, tFamilyAnimClip)
|
|
FLOAT fFamilyAnimClip
|
|
fFamilyAnimClip = GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tFamilyAnimDict, tFamilyAnimClip)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, " * family_ped[", Get_String_From_FamilyMember(eFamilyMember), "] playing anim \"", tFamilyAnimDict, "\", \"", tFamilyAnimClip, "\" ", fFamilyAnimClip)
|
|
#ENDIF
|
|
|
|
IF fFamilyAnimClip >= 0.95
|
|
g_eCurrentFamilyEvent[eFamilyMember] = eUpdatedFamilyEvent
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, " * family_ped[", Get_String_From_FamilyMember(eFamilyMember), "] NOT playing anim \"", tFamilyAnimDict, "\", \"", tFamilyAnimClip, "\"")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, " * family_ped[", Get_String_From_FamilyMember(eFamilyMember), "] has no anim")
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, " * family_ped[", Get_String_From_FamilyMember(eFamilyMember), "] current event = ", Get_String_From_FamilyEvent(eUpdatedFamilyEvent))
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Wander(PED_INDEX PedIndex,
|
|
enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
VECTOR vSequencePos, FLOAT fSequenceHead)
|
|
|
|
VECTOR vWanderOffset
|
|
FLOAT fWanderHead
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vWanderOffset, fWanderHead)
|
|
|
|
//TASK_WANDER_STANDARD(PedIndex)
|
|
|
|
IF NOT (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_IN_AREA) = PERFORMING_TASK)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_Wander")
|
|
|
|
TASK_WANDER_IN_AREA(PedIndex,
|
|
vSequencePos+vWanderOffset,
|
|
25.0)
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(vSequencePos+vWanderOffset,
|
|
25.0, HUD_COLOUR_GREEN, 0.5)
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
fSequenceHead = fSequenceHead
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Facial(PED_INDEX PedIndex, TEXT_LABEL_63 tFamilySleepingDict, TEXT_LABEL_63 tFamilySleepingClip, ANIMATION_FLAGS AF_extraFacial = AF_DEFAULT)
|
|
|
|
IF IS_STRING_NULL_OR_EMPTY(tFamilySleepingDict)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
HUD_COLOURS animHudColour = HUD_COLOUR_PINK
|
|
#ENDIF
|
|
|
|
REQUEST_ANIM_DICT(tFamilySleepingDict)
|
|
IF NOT HAS_ANIM_DICT_LOADED(tFamilySleepingDict)
|
|
REQUEST_ANIM_DICT(tFamilySleepingDict)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("request: ")
|
|
str += ("\"")
|
|
str += (tFamilySleepingDict)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), -1, animHudColour)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ELSE
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(PedIndex, tFamilySleepingDict, tFamilySleepingClip)
|
|
TASK_PLAY_ANIM(PedIndex, tFamilySleepingDict, tFamilySleepingClip,
|
|
NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,
|
|
AF_SECONDARY | AF_extraFacial)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("TASK_PLAY_ANIM \"")
|
|
// str += (tFamilySleepingDict)
|
|
// str += ("\", \"")
|
|
str += (tFamilySleepingClip)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), -1, animHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("anim \"")
|
|
// str += (tFamilySleepingDict)
|
|
// str += ("\", \"")
|
|
str += (tFamilySleepingClip)
|
|
str += ("\" ")
|
|
str += GET_STRING_FROM_FLOAT(GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tFamilySleepingDict, tFamilySleepingClip))
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), -1, animHudColour)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Sleeping(PED_INDEX PedIndex)
|
|
/*
|
|
Added to DICTIONARY: - facials@generic ANIM: - mood_Sleeping
|
|
NOTE: This will be moved to a new dictionary structure at some point in the next month or so.
|
|
*/
|
|
|
|
TEXT_LABEL_63 tFamilySleepingDict = "facials@gen_male@base" //"facials@generic"
|
|
IF NOT IS_PED_MALE(PedIndex)
|
|
tFamilySleepingDict = "facials@gen_female@base"
|
|
ENDIF
|
|
|
|
TEXT_LABEL_63 tFamilySleepingClip = "mood_sleeping_1" //"mood_Sleeping"
|
|
|
|
RETURN PRIVATE_Update_Family_Facial(PedIndex, tFamilySleepingDict, tFamilySleepingClip, AF_LOOPING)
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL PRIVATE_SetFamilyMemberPedCapsule(enumFamilyMember eFamilyMember, FLOAT &fCapsuleRadius)
|
|
//
|
|
SWITCH g_eCurrentFamilyEvent[eFamilyMember]
|
|
CASE FE_M_SON_on_ecstasy_AND_friendly
|
|
fCapsuleRadius = (0.4) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M_SON_Fighting_with_sister_A
|
|
fCapsuleRadius = (0.75) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M_SON_Fighting_with_sister_B
|
|
fCapsuleRadius = (0.75) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M_SON_Fighting_with_sister_C
|
|
fCapsuleRadius = (0.75) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M_SON_Fighting_with_sister_D
|
|
fCapsuleRadius = (0.75) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M7_SON_jumping_jacks
|
|
fCapsuleRadius = (0.5) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M_DAUGHTER_screaming_at_dad
|
|
fCapsuleRadius = (1.25) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M_DAUGHTER_dancing_practice
|
|
fCapsuleRadius = (0.75) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M2_MEXMAID_clean_window
|
|
CASE FE_M7_MEXMAID_clean_window
|
|
CASE FE_M_MEXMAID_MIC4_clean_window
|
|
fCapsuleRadius = (0.5) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M_MEXMAID_does_the_dishes
|
|
fCapsuleRadius = (0.5) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M2_WIFE_doing_yoga
|
|
CASE FE_M7_WIFE_doing_yoga
|
|
fCapsuleRadius = (0.75) RETURN TRUE
|
|
BREAK
|
|
CASE FE_M_GARDENER_mowing_lawn
|
|
fCapsuleRadius = (1.0) RETURN TRUE
|
|
BREAK
|
|
|
|
// CASE FE_F_LAMAR_and_STRETCH_chill_outside
|
|
// fCapsuleRadius = (0.50) RETURN TRUE
|
|
// BREAK
|
|
|
|
CASE FE_T0_MICHAEL_depressed_head_in_hands
|
|
fCapsuleRadius = (0.50) RETURN TRUE
|
|
BREAK
|
|
CASE FE_T0_MICHAEL_sunbathing
|
|
fCapsuleRadius = (0.80) RETURN TRUE
|
|
BREAK
|
|
CASE FE_T0_RONEX_doing_target_practice
|
|
fCapsuleRadius = (0.75) RETURN TRUE
|
|
BREAK
|
|
CASE FE_T0_TREVOR_smoking_crystal
|
|
fCapsuleRadius = (1.5) RETURN TRUE
|
|
BREAK
|
|
#IF NOT IS_JAPANESE_BUILD
|
|
CASE FE_T0_TREVOR_doing_a_shit
|
|
fCapsuleRadius = (1.25) RETURN TRUE
|
|
BREAK
|
|
#ENDIF
|
|
CASE FE_T0_KIDNAPPED_WIFE_does_garden_work
|
|
fCapsuleRadius = (0.8) RETURN TRUE
|
|
BREAK
|
|
|
|
CASE FE_T1_FLOYD_cleaning
|
|
fCapsuleRadius = (0.50) RETURN TRUE
|
|
BREAK
|
|
|
|
CASE FE_ANY_find_family_event
|
|
CASE FE_ANY_wander_family_event
|
|
IF eFamilyMember = FM_TREVOR_1_FLOYD
|
|
OR eFamilyMember = FM_TREVOR_1_FLOYD
|
|
fCapsuleRadius = (0.30) RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
fCapsuleRadius = 0.0
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
FUNC BOOL PRIVATE_Is_Family_Sleeping(enumFamilyEvents eFamilyEvent)
|
|
SWITCH eFamilyEvent
|
|
CASE FE_M_SON_sleeping
|
|
CASE FE_M_DAUGHTER_sleeping
|
|
CASE FE_M_DAUGHTER_couchsleep
|
|
CASE FE_M2_WIFE_sleeping
|
|
CASE FE_M7_WIFE_sleeping
|
|
CASE FE_T1_FLOYD_is_sleeping
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_GotoCoord(PED_INDEX PedIndex,
|
|
enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
VECTOR vSequencePos, FLOAT fSequenceHead,
|
|
TEXT_LABEL_63 &tSynchDict, TEXT_LABEL_63 &tSynchClip, INT &iScene,
|
|
OBJECT_INDEX leftObj, OBJECT_INDEX rightObj,
|
|
BOOL bMovePeds)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bMovePeds
|
|
RETURN TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
VECTOR vWanderOffset
|
|
FLOAT fWanderHead
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vWanderOffset, fWanderHead)
|
|
|
|
CONST_FLOAT fFAMILY_GOTO_DIST_CHECK_RADIUS 4.0 //1.0
|
|
CONST_FLOAT fFAMILY_GOTO_NAVMESH_RADIUS DEFAULT_NAVMESH_RADIUS
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PedIndex),vSequencePos+vWanderOffset) > (fFAMILY_GOTO_DIST_CHECK_RADIUS*fFAMILY_GOTO_DIST_CHECK_RADIUS)
|
|
IF NOT (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) = PERFORMING_TASK)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_GotoCoord")
|
|
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex,
|
|
vSequencePos+vWanderOffset, PEDMOVEBLENDRATIO_WALK,
|
|
DEFAULT_TIME_NEVER_WARP,
|
|
fFAMILY_GOTO_NAVMESH_RADIUS,
|
|
ENAV_DEFAULT,
|
|
fSequenceHead+fWanderHead)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(tSynchDict)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_GotoCoord - dict \"", tSynchDict, "\" is nulled")
|
|
|
|
tSynchDict = ""
|
|
ENDIF
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(tSynchClip)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_GotoCoord - clip \"", tSynchClip, "\" is nulled")
|
|
|
|
tSynchClip = ""
|
|
ENDIF
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
DETACH_SYNCHRONIZED_SCENE(iScene)
|
|
ENDIF
|
|
iScene = -1
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(vSequencePos+vWanderOffset,
|
|
fFAMILY_GOTO_DIST_CHECK_RADIUS, HUD_COLOUR_GREEN, 0.25)
|
|
DrawDebugFamilyLine(vSequencePos+vWanderOffset,
|
|
GET_ENTITY_COORDS(PedIndex),
|
|
HUD_COLOUR_GREEN)
|
|
DrawDebugFamilyTextWithOffset("go to coord", GET_ENTITY_COORDS(PedIndex), 4, HUD_COLOUR_GREEN)
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
ELSE
|
|
IF NOT (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) = PERFORMING_TASK)
|
|
|
|
IF DOES_ENTITY_EXIST(leftObj)
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(leftObj, PedIndex)
|
|
IF NOT IS_ENTITY_VISIBLE(leftObj)
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_GotoCoord - SET_ENTITY_VISIBLE(leftObj)")
|
|
SET_ENTITY_VISIBLE(leftObj, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(rightObj)
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(rightObj, PedIndex)
|
|
IF NOT IS_ENTITY_VISIBLE(rightObj)
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_GotoCoord - SET_ENTITY_VISIBLE(rightObj)")
|
|
SET_ENTITY_VISIBLE(rightObj, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
FLOAT fCapsuleRadius
|
|
IF PRIVATE_SetFamilyMemberPedCapsule(eFamilyMember, fCapsuleRadius)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "<", GET_THIS_SCRIPT_NAME(), "> family member[", Get_String_From_FamilyMember(eFamilyMember), "] \"", Get_String_From_FamilyEvent(g_eCurrentFamilyEvent[eFamilyMember]), "\" SET_PED_CAPSULE ", fCapsuleRadius)
|
|
#ENDIF
|
|
|
|
SET_PED_CAPSULE(PedIndex, fCapsuleRadius)
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(leftObj)
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(leftObj, PedIndex)
|
|
IF IS_ENTITY_VISIBLE(leftObj)
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_GotoCoord - SET_ENTITY_INVISIBLE(leftObj)")
|
|
SET_ENTITY_VISIBLE(leftObj, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(rightObj)
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(rightObj, PedIndex)
|
|
IF IS_ENTITY_VISIBLE(rightObj)
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_GotoCoord - SET_ENTITY_INVISIBLE(rightObj)")
|
|
SET_ENTITY_VISIBLE(rightObj, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_PED_CAPSULE(PedIndex, 0.3)
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
bMovePeds = bMovePeds
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Hangup(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, enumFamilyEvents eUpdatedFamilyEvent,
|
|
STRING strTextBlock, STRING strLabel, TEXT_LABEL &tCreatedConvLabels[],
|
|
structPedsForConversation &inSpeechStruct, structTimer &speechTimer, enumFamilyEvents &ePrevFamilyEvent,
|
|
enumConversationPriority enSpeechPriority = CONV_PRIORITY_AMBIENT_HIGH)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str = ""
|
|
CONST_FLOAT Offset_y 3.0
|
|
HUD_COLOURS animHudColour = HUD_COLOUR_GREEN
|
|
#ENDIF
|
|
|
|
IF (g_eCurrentFamilyEvent[eFamilyMember] <> eUpdatedFamilyEvent)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF g_bDrawDebugFamilyStuff
|
|
str =("updated event <> ")
|
|
str +=(Get_String_From_FamilyEvent(eUpdatedFamilyEvent))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y, animHudColour)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF g_bUpdatedFamilyEvents
|
|
OR (IS_KEYBOARD_KEY_PRESSED(KEY_LEFT) OR IS_KEYBOARD_KEY_PRESSED(KEY_RIGHT))
|
|
str =(" ## restart timer reset at ")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+1.0, animHudColour)
|
|
RETURN FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
// IF IS_ENTITY_OCCLUDED(PedIndex)
|
|
// #IF IS_DEBUG_BUILD
|
|
// IF g_bDrawDebug""FamilyStuff
|
|
// str =("PRIVATE_Update_Family_Hangup.IS_ENTITY_OCCLUDED()")
|
|
// DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+1.0, animHudColour)
|
|
// ENDIF
|
|
// #ENDIF
|
|
//
|
|
// RETURN FALSE
|
|
// ENDIF
|
|
|
|
IF NOT IS_ENTITY_ON_SCREEN(PedIndex)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF g_bDrawDebugFamilyStuff
|
|
str =("PRIVATE_Update_Family_Hangup.IS_ENTITY_ON_SCREEN()")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+1.0, animHudColour)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
CONST_FLOAT fCONST_min_hangup_dist 7.0
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) > (fCONST_min_hangup_dist*fCONST_min_hangup_dist)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF g_bDrawDebugFamilyStuff
|
|
str =("PRIVATE_Update_Family_Hangup.VDIST()")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+1.0, animHudColour)
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex, FALSE), fCONST_min_hangup_dist, animHudColour, 0.1)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_ANY_SPEECH_PLAYING(PedIndex)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF g_bDrawDebugFamilyStuff
|
|
str =("PRIVATE_Update_Family_Hangup.IS_ANY_SPEECH_PLAYING()")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+1.0, animHudColour)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(strLabel)
|
|
//play "hang up" dialogue
|
|
|
|
INT iRandCount, iSpeechBit, iPlayerBitset
|
|
Get_SpeechLabel_From_FamilyEvent(eUpdatedFamilyEvent, iRandCount, iSpeechBit, iPlayerBitset)
|
|
|
|
IF NOT IS_BITMASK_SET(iPlayerBitset, GET_CURRENT_PLAYER_PED_BIT())
|
|
CPRINTLN(DEBUG_FAMILY, "hangup - invalid IS_BITMASK_SET")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
//is the speech a single line or is it a random conv
|
|
IF IS_BITMASK_AS_ENUM_SET(iSpeechBit, FSC_singleRandomLine)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(strLabel)
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, strLabel,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
g_eCurrentFamilyEvent[eFamilyMember] = eUpdatedFamilyEvent
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
CASSERTLN(DEBUG_FAMILY, GET_THIS_SCRIPT_NAME(), ": PRIVATE_Update_Family_Hangup(", Get_String_From_FamilyMember(eFamilyMember), ", current:", Get_String_From_FamilyEvent(g_eCurrentFamilyEvent[eFamilyMember]), ", updated:", Get_String_From_FamilyEvent(eUpdatedFamilyEvent), ") - attempting to play an empty single random line??")
|
|
ENDIF
|
|
ELSE
|
|
|
|
TEXT_LABEL returnedStrLabel = strLabel
|
|
IF GetRandomConversationFromLabel(strTextBlock, returnedStrLabel, tCreatedConvLabels)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(returnedStrLabel)
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, returnedStrLabel,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
g_eCurrentFamilyEvent[eFamilyMember] = eUpdatedFamilyEvent
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
CASSERTLN(DEBUG_FAMILY, GET_THIS_SCRIPT_NAME(), ": PRIVATE_Update_Family_Hangup(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(g_eCurrentFamilyEvent[eFamilyMember]), ", updated:", Get_String_From_FamilyEvent(eUpdatedFamilyEvent), ") - attempting to play an empty multiple random line??")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
g_eCurrentFamilyEvent[eFamilyMember] = eUpdatedFamilyEvent
|
|
ePrevFamilyEvent = g_eCurrentFamilyEvent[eFamilyMember]
|
|
RETURN TRUE
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF g_bDrawDebugFamilyStuff
|
|
str =(" * family_ped[")
|
|
str +=(Get_String_From_FamilyMember(eFamilyMember))
|
|
str +=("] current event = ")
|
|
str +=(Get_String_From_FamilyEvent(eUpdatedFamilyEvent))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y, animHudColour)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Hangup_And_Wander(PED_INDEX PedIndex,
|
|
enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent,
|
|
VECTOR vFamilyScenePos, FLOAT fFamilySceneHead,
|
|
TEXT_LABEL_63 &tAnimDict, TEXT_LABEL_63 &tAnimClip,
|
|
INT &iHangupStage, OBJECT_INDEX &phoneProp, MODEL_NAMES &ePhonePropModel, BOOL bDeletePhoneProp)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str = ""
|
|
CONST_FLOAT Offset_y 2.0
|
|
HUD_COLOURS animHudColour = HUD_COLOUR_GREEN
|
|
#ENDIF
|
|
|
|
SWITCH iHangupStage
|
|
CASE 0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str =("play hangup anim...")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+0.0, animHudColour)
|
|
#ENDIF
|
|
|
|
tAnimDict = ""
|
|
tAnimDict = ""
|
|
|
|
TEXT_LABEL_63 sHangup_animDict, sHangup_animClip
|
|
ANIMATION_FLAGS eHangup_animFlag
|
|
enumFamilyAnimProgress eFamilyAnimProgress
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
sHangup_animDict, sHangup_animClip, eHangup_animFlag, eFamilyAnimProgress)
|
|
ENDIF
|
|
|
|
IF (eFamilyAnimProgress <> FAP_2_dialogue)
|
|
REQUEST_ANIM_DICT(sHangup_animDict)
|
|
IF NOT HAS_ANIM_DICT_LOADED(sHangup_animDict)
|
|
#IF IS_DEBUG_BUILD
|
|
str =("requesting \"")
|
|
str +=(sHangup_animDict)
|
|
str +=("\"")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+1.0, animHudColour)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(eHangup_animFlag, AF_LOOPING)
|
|
CLEAR_BITMASK_ENUM_AS_ENUM(eHangup_animFlag, AF_LOOPING)
|
|
ELSE
|
|
//
|
|
ENDIF
|
|
|
|
TASK_PLAY_ANIM(PedIndex, sHangup_animDict, sHangup_animClip,
|
|
NORMAL_BLEND_IN, WALK_BLEND_OUT, -1, eHangup_animFlag)
|
|
tAnimDict = sHangup_animDict
|
|
tAnimClip = sHangup_animClip
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Get_FamilyMember_Anim(\"", tAnimDict, "\", \"", tAnimClip, "\")")
|
|
|
|
iHangupStage = 1
|
|
ELSE
|
|
IF PRIVATE_Update_Family_DialogueAnim(PedIndex, eFamilyMember, eFamilyEvent,
|
|
tAnimDict, tAnimClip,
|
|
vFamilyScenePos, fFamilySceneHead)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_DialogueAnim(\"", tAnimDict, "\", \"", tAnimClip, ") //", Get_String_From_FamilyEvent(eFamilyEvent))
|
|
#ENDIF
|
|
|
|
iHangupStage = 1
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
str =("waiting on dialogue anim...")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+1.0, animHudColour)
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str =("playing hangup anim \"")
|
|
str +=(tAnimClip)
|
|
str +=("\" ")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+0.0, animHudColour)
|
|
#ENDIF
|
|
|
|
IF IS_ENTITY_PLAYING_ANIM(PedIndex, tAnimDict, tAnimClip)
|
|
FLOAT fHangupAnimCurrentTime
|
|
fHangupAnimCurrentTime = GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, tAnimDict, tAnimClip)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str =("anim time:")
|
|
str += GET_STRING_FROM_FLOAT(fHangupAnimCurrentTime)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+1.0, animHudColour)
|
|
#ENDIF
|
|
|
|
IF fHangupAnimCurrentTime >= 1.0
|
|
CLEAR_PED_TASKS(PedIndex)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(phoneProp)
|
|
|
|
STRING pEventName
|
|
pEventName = "hangup"
|
|
FLOAT ReturnStartPhase, ReturnEndPhase
|
|
IF FIND_ANIM_EVENT_PHASE(tAnimDict, tAnimClip, pEventName,
|
|
ReturnStartPhase, ReturnEndPhase)
|
|
ELSE
|
|
ReturnStartPhase = -1
|
|
|
|
IF ARE_STRINGS_EQUAL(tAnimDict, "TIMETABLE@MAID@IG_8@")
|
|
IF ARE_STRINGS_EQUAL(tAnimClip, "IG_8_IDLE_A")
|
|
ReturnStartPhase = 0.85
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ReturnStartPhase < 0
|
|
#IF IS_DEBUG_BUILD
|
|
CASSERTLN(DEBUG_FAMILY, "\"", pEventName, "\" missing from \"", tAnimDict, "/", tAnimClip, "\"")
|
|
#ENDIF
|
|
|
|
ReturnStartPhase = 0.5
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF fHangupAnimCurrentTime < ReturnStartPhase
|
|
#IF IS_DEBUG_BUILD
|
|
IF bDeletePhoneProp
|
|
str =("delete time:")
|
|
ELSE
|
|
str =("detach time:")
|
|
ENDIF
|
|
str += GET_STRING_FROM_FLOAT(ReturnStartPhase)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+2.0, animHudColour)
|
|
#ENDIF
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bDeletePhoneProp
|
|
str =("deleting:")
|
|
ELSE
|
|
str =("detaching:")
|
|
ENDIF
|
|
str += GET_STRING_FROM_FLOAT(ReturnStartPhase)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+2.0, animHudColour)
|
|
#ENDIF
|
|
|
|
IF IS_ENTITY_ATTACHED(phoneProp)
|
|
DETACH_ENTITY(phoneProp)
|
|
ENDIF
|
|
|
|
IF bDeletePhoneProp
|
|
ePhonePropModel = DUMMY_MODEL_FOR_SCRIPT
|
|
DELETE_OBJECT(phoneProp)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
IF bDeletePhoneProp
|
|
str =("deleted (no prop)")
|
|
ELSE
|
|
str =("detached (no prop)")
|
|
ENDIF
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+2.0, animHudColour)
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF DOES_ENTITY_EXIST(phoneProp)
|
|
IF IS_ENTITY_ATTACHED(phoneProp)
|
|
DETACH_ENTITY(phoneProp)
|
|
ENDIF
|
|
|
|
IF bDeletePhoneProp
|
|
ePhonePropModel = DUMMY_MODEL_FOR_SCRIPT
|
|
DELETE_OBJECT(phoneProp)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
tAnimDict = ""
|
|
tAnimClip = ""
|
|
iHangupStage = 2
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE 2
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str =("..wander")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+0.0, animHudColour)
|
|
#ENDIF
|
|
|
|
IF bDeletePhoneProp
|
|
IF DOES_ENTITY_EXIST(phoneProp)
|
|
CASSERTLN(DEBUG_FAMILY, "phoneProp exists???")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, FE_ANY_wander_family_event)
|
|
iHangupStage = 0
|
|
RETURN TRUE
|
|
BREAK
|
|
|
|
|
|
DEFAULT
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str =("DEFAULT ")
|
|
str +=iHangupStage
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), Offset_y+0.0, animHudColour)
|
|
CASSERTLN(DEBUG_FAMILY, str)
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Trigger_Family_Argue(PED_INDEX PedIndex, enumFamilyEvents eFamilyEvent, VECTOR vSequencePos, FLOAT fSequenceHead)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_S)
|
|
RETURN TRUE
|
|
ENDIF
|
|
HUD_COLOURS eHudColour = HUD_COLOUR_ORANGELIGHT
|
|
#ENDIF
|
|
CONST_FLOAT fDEFAULT_ArgueRad 4.0
|
|
|
|
SWITCH eFamilyEvent
|
|
CASE FE_M2_SON_gaming_loop
|
|
// CONST_FLOAT fSON_gaming_ArgueRad fDEFAULT_ArgueRad
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fSON_gaming_ArgueRad, eHudColour, 0.25)
|
|
// #ENDIF
|
|
//
|
|
// IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fSON_gaming_ArgueRad)*(fSON_gaming_ArgueRad))
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
|
|
/* IF IS_THIS_TV_ON(TV_LOC_JIMMY_BEDROOM)
|
|
IF NOT IS_THIS_TV_AVAILABLE_FOR_USE(TV_LOC_JIMMY_BEDROOM)
|
|
CASSERTLN(DEBUG_FAMILY, "NOT IS_THIS_TV_AVAILABLE_FOR_USE(TV_LOC_JIMMY_BEDROOM)")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
//#1445897
|
|
IF IS_TVSHOW_CURRENTLY_PLAYING(HASH("END_OF_MOVIE_MARKER"))
|
|
CASSERTLN(DEBUG_FAMILY, "IS_TVSHOW_CURRENTLY_PLAYING")
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF*/
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
CASE FE_M7_SON_gaming
|
|
CONST_FLOAT fSON_gaming_ArgueRad fDEFAULT_ArgueRad
|
|
|
|
/* #IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fSON_gaming_ArgueRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fSON_gaming_ArgueRad)*(fSON_gaming_ArgueRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF IS_THIS_TV_ON(TV_LOC_JIMMY_BEDROOM)
|
|
IF NOT IS_THIS_TV_AVAILABLE_FOR_USE(TV_LOC_JIMMY_BEDROOM)
|
|
CASSERTLN(DEBUG_FAMILY, "NOT IS_THIS_TV_AVAILABLE_FOR_USE(TV_LOC_JIMMY_BEDROOM)")
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF */
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
CASE FE_M_SON_Fighting_with_sister_A FALLTHRU
|
|
CASE FE_M_SON_Fighting_with_sister_B FALLTHRU
|
|
CASE FE_M_SON_Fighting_with_sister_C FALLTHRU
|
|
CASE FE_M_SON_Fighting_with_sister_D
|
|
CONST_FLOAT fSON_Fighting_with_sister_ArgueRad 7.5
|
|
CONST_FLOAT fSON_Fighting_with_sister_ArgueRad_VEHICLE 15.0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fSON_Fighting_with_sister_ArgueRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fSON_Fighting_with_sister_ArgueRad_VEHICLE)*(fSON_Fighting_with_sister_ArgueRad_VEHICLE))
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fSON_Fighting_with_sister_ArgueRad)*(fSON_Fighting_with_sister_ArgueRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
|
|
CASE FE_M_DAUGHTER_screaming_at_dad FALLTHRU
|
|
CONST_FLOAT fDAUGHTER_screaming_at_dad_ArgueRad 8.5
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fDAUGHTER_screaming_at_dad_ArgueRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fDAUGHTER_screaming_at_dad_ArgueRad)*(fDAUGHTER_screaming_at_dad_ArgueRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
|
|
// CASE FE_M_WIFE_screaming_at_son_P1 FALLTHRU
|
|
CASE FE_M_WIFE_screaming_at_son_P2 FALLTHRU
|
|
CASE FE_M_WIFE_screaming_at_son_P3 FALLTHRU
|
|
CONST_FLOAT fWIFE_screaming_at_son_ArgueRad 5.0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fWIFE_screaming_at_son_ArgueRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fWIFE_screaming_at_son_ArgueRad)*(fWIFE_screaming_at_son_ArgueRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
CASE FE_M_WIFE_screaming_at_daughter
|
|
CONST_FLOAT fWIFE_screaming_at_daughter_ArgueRad 5.0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fWIFE_screaming_at_daughter_ArgueRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fWIFE_screaming_at_daughter_ArgueRad)*(fWIFE_screaming_at_daughter_ArgueRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
VECTOR WIFE_screaming_at_daughter_VecCentre, WIFE_screaming_at_daughter_VecBounds
|
|
FLOAT WIFE_screaming_at_daughter_fAngle
|
|
WIFE_screaming_at_daughter_VecCentre = <<-0.4200, 0.6800, 1.0000>>
|
|
WIFE_screaming_at_daughter_VecBounds = <<4.5000, 2.7500, 1.0000>>
|
|
WIFE_screaming_at_daughter_fAngle = -22.0000
|
|
|
|
/* START_WIDGET_GROUP("FE_M_WIFE_screaming_at_daughter")
|
|
ADD_WIDGET_VECTOR_SLIDER("VecCentre", WIFE_screaming_at_daughter_VecCentre, -20.0, 20.0, 0.01)
|
|
ADD_WIDGET_VECTOR_SLIDER("VecBounds", WIFE_screaming_at_daughter_VecBounds, 0.5, 20.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("fAngle", WIFE_screaming_at_daughter_fAngle, -360.0, 360.0, 1.0)
|
|
STOP_WIDGET_GROUP()
|
|
WHILE TRUE
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
vSequencePos+WIFE_screaming_at_daughter_VecCentre, WIFE_screaming_at_daughter_VecBounds, fSequenceHead+WIFE_screaming_at_daughter_fAngle)
|
|
ENDIF
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_C)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("WIFE_screaming_at_daughter_VecCentre = ")SAVE_VECTOR_TO_DEBUG_FILE(WIFE_screaming_at_daughter_VecCentre)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("WIFE_screaming_at_daughter_VecBounds = ")SAVE_VECTOR_TO_DEBUG_FILE(WIFE_screaming_at_daughter_VecBounds)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("WIFE_screaming_at_daughter_fAngle = ")SAVE_FLOAT_TO_DEBUG_FILE(WIFE_screaming_at_daughter_fAngle)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
RETURN TRUE
|
|
ENDIF
|
|
WAIT(0)
|
|
ENDWHILE */
|
|
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
vSequencePos+WIFE_screaming_at_daughter_VecCentre, WIFE_screaming_at_daughter_VecBounds, fSequenceHead+WIFE_screaming_at_daughter_fAngle)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
CASE FE_M_WIFE_screams_at_mexmaid
|
|
CONST_FLOAT fWIFE_screams_at_mexmaid_ArgueRad 3.0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fWIFE_screams_at_mexmaid_ArgueRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fWIFE_screams_at_mexmaid_ArgueRad)*(fWIFE_screams_at_mexmaid_ArgueRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
VECTOR WIFE_screams_at_mexmaid_VecCentre, WIFE_screams_at_mexmaid_VecBounds
|
|
FLOAT WIFE_screams_at_mexmaid_fAngle
|
|
WIFE_screams_at_mexmaid_VecCentre = <<10.8751, 2.6168, 1.4700>>
|
|
WIFE_screams_at_mexmaid_VecBounds = <<7.5000, 3.0000, 1.5000>>
|
|
WIFE_screams_at_mexmaid_fAngle = -21.0000
|
|
|
|
/* START_WIDGET_GROUP("FE_M_WIFE_screams_at_mexmaid")
|
|
ADD_WIDGET_VECTOR_SLIDER("VecCentre", WIFE_screams_at_mexmaid_VecCentre, -20.0, 20.0, 0.01)
|
|
ADD_WIDGET_VECTOR_SLIDER("VecBounds", WIFE_screams_at_mexmaid_VecBounds, 0.5, 20.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("fAngle", WIFE_screams_at_mexmaid_fAngle, -360.0, 360.0, 1.0)
|
|
STOP_WIDGET_GROUP()
|
|
WHILE TRUE
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
vSequencePos+WIFE_screams_at_mexmaid_VecCentre, WIFE_screams_at_mexmaid_VecBounds, fSequenceHead+WIFE_screams_at_mexmaid_fAngle)
|
|
ENDIF
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_C)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("WIFE_screams_at_mexmaid_VecCentre = ")SAVE_VECTOR_TO_DEBUG_FILE(WIFE_screams_at_mexmaid_VecCentre)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("WIFE_screams_at_mexmaid_VecBounds = ")SAVE_VECTOR_TO_DEBUG_FILE(WIFE_screams_at_mexmaid_VecBounds)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("WIFE_screams_at_mexmaid_fAngle = ")SAVE_FLOAT_TO_DEBUG_FILE(WIFE_screams_at_mexmaid_fAngle)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
RETURN TRUE
|
|
ENDIF
|
|
WAIT(0)
|
|
ENDWHILE */
|
|
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
vSequencePos+WIFE_screams_at_mexmaid_VecCentre, WIFE_screams_at_mexmaid_VecBounds, fSequenceHead+WIFE_screams_at_mexmaid_fAngle)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
|
|
CASE FE_M2_WIFE_with_shopping_bags_enter FALLTHRU
|
|
CASE FE_M7_WIFE_with_shopping_bags_enter FALLTHRU
|
|
CASE FE_M7_WIFE_shopping_with_daughter //FALLTHRU
|
|
// CASE FE_M7_WIFE_shopping_with_son
|
|
DOOR_DATA_STRUCT sData_M_Mansion_F_L, sData_M_Mansion_F_R
|
|
sData_M_Mansion_F_L = GET_DOOR_DATA(DOORNAME_M_MANSION_F_L)
|
|
sData_M_Mansion_F_R = GET_DOOR_DATA(DOORNAME_M_MANSION_F_R)
|
|
|
|
|
|
IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(sData_M_Mansion_F_L.doorHash)
|
|
OR NOT IS_DOOR_REGISTERED_WITH_SYSTEM(sData_M_Mansion_F_R.doorHash)
|
|
//ADD_DOOR_TO_SYSTEM(sData_M_Mansion_F_L.doorHash, ObjectModel, vecPos)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(sData_M_Mansion_F_L.doorHash)
|
|
DrawDebugFamilyTextWithOffset("sData_M_Mansion_F_L not in system", sData_M_Mansion_F_L.coords, 0, HUD_COLOUR_RED)
|
|
ENDIF
|
|
IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(sData_M_Mansion_F_R.doorHash)
|
|
DrawDebugFamilyTextWithOffset("sData_M_Mansion_F_R not in system", sData_M_Mansion_F_R.coords, 0, HUD_COLOUR_RED)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ELSE
|
|
//
|
|
|
|
FLOAT fDoorLeftOpenRatio, fDoorRightOpenRatio
|
|
fDoorLeftOpenRatio = ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(sData_M_Mansion_F_L.doorHash))
|
|
fDoorRightOpenRatio = ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(sData_M_Mansion_F_R.doorHash))
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
str = "Mansion_F_L open:"
|
|
str += GET_STRING_FROM_FLOAT(fDoorLeftOpenRatio)
|
|
DrawDebugFamilyTextWithOffset(str, sData_M_Mansion_F_L.coords, 0, HUD_COLOUR_RED)
|
|
|
|
str = "Mansion_F_R open:"
|
|
str += GET_STRING_FROM_FLOAT(fDoorRightOpenRatio)
|
|
DrawDebugFamilyTextWithOffset(str, sData_M_Mansion_F_R.coords, 0, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF fDoorLeftOpenRatio >= 0.1
|
|
OR fDoorRightOpenRatio >= 0.1
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
VECTOR WIFE_with_shopping_VecCentre, WIFE_with_shopping_VecBounds
|
|
FLOAT WIFE_with_shopping_fAngle
|
|
WIFE_with_shopping_VecCentre = <<-0.72, 0.52, 1.0>>
|
|
WIFE_with_shopping_VecBounds = <<3.0, 3.0, 1.0>>
|
|
WIFE_with_shopping_fAngle = -22.00
|
|
|
|
/* START_WIDGET_GROUP("FE_M_WIFE_with_shopping")
|
|
ADD_WIDGET_VECTOR_SLIDER("VecCentre", WIFE_with_shopping_VecCentre, -20.0, 20.0, 0.01)
|
|
ADD_WIDGET_VECTOR_SLIDER("VecBounds", WIFE_with_shopping_VecBounds, 0.5, 20.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("fAngle", WIFE_with_shopping_fAngle, -360.0, 360.0, 1.0)
|
|
STOP_WIDGET_GROUP()
|
|
WHILE TRUE
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
vSequencePos+WIFE_with_shopping_VecCentre, WIFE_with_shopping_VecBounds, fSequenceHead+WIFE_with_shopping_fAngle)
|
|
ENDIF
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_C)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("WIFE_with_shopping_VecCentre = ")SAVE_VECTOR_TO_DEBUG_FILE(WIFE_with_shopping_VecCentre)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("WIFE_with_shopping_VecBounds = ")SAVE_VECTOR_TO_DEBUG_FILE(WIFE_with_shopping_VecBounds)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("WIFE_with_shopping_fAngle = ")SAVE_FLOAT_TO_DEBUG_FILE(WIFE_with_shopping_fAngle)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
RETURN TRUE
|
|
ENDIF
|
|
WAIT(0)
|
|
ENDWHILE */
|
|
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
vSequencePos+WIFE_with_shopping_VecCentre, WIFE_with_shopping_VecBounds, fSequenceHead+WIFE_with_shopping_fAngle)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
|
|
CASE FE_M7_WIFE_Making_juice
|
|
CONST_FLOAT fWIFE_Making_juiceRad fDEFAULT_ArgueRad
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fWIFE_Making_juiceRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fWIFE_Making_juiceRad)*(fWIFE_Making_juiceRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
CASE FE_T1_FLOYD_pineapple
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fDEFAULT_ArgueRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fDEFAULT_ArgueRad)*(fDEFAULT_ArgueRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
|
|
#IF NOT IS_JAPANESE_BUILD
|
|
CASE FE_M2_WIFE_using_vibrator FALLTHRU
|
|
CASE FE_M7_WIFE_using_vibrator
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fDEFAULT_ArgueRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fDEFAULT_ArgueRad)*(fDEFAULT_ArgueRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
MODEL_NAMES ObjectModel
|
|
VECTOR vecPos
|
|
DOOR_NAME_ENUM eDoorName
|
|
DOOR_HASH_ENUM eDoorHash
|
|
TEXT_LABEL_63 roomName
|
|
BOOL bIgnoreInRoomCheck
|
|
|
|
PRIVATE_Get_Family_Door_Attributes(FD_7_MICHAEL_BEDROOM,
|
|
ObjectModel, vecPos, eDoorName, eDoorHash, roomName, bIgnoreInRoomCheck)
|
|
|
|
IF (eDoorName <> DUMMY_DOORNAME)
|
|
//do nothing...
|
|
CPRINTLN(DEBUG_FAMILY, "do nothing...")
|
|
ELSE
|
|
IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash))
|
|
ADD_DOOR_TO_SYSTEM(ENUM_TO_INT(eDoorHash), ObjectModel, vecPos)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "ADD_DOOR_TO_SYSTEM()")
|
|
ELSE
|
|
//
|
|
|
|
FLOAT fDoorOpenRatio
|
|
fDoorOpenRatio = ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(ENUM_TO_INT(eDoorHash)))
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "fDoorOpenRatio: ", fDoorOpenRatio)
|
|
|
|
IF fDoorOpenRatio >= 0.5
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
#ENDIF
|
|
CASE FE_T0_RON_ranting_about_government_LAYING
|
|
CASE FE_T0_RONEX_working_a_moonshine_sill
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fDEFAULT_ArgueRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fDEFAULT_ArgueRad)*(fDEFAULT_ArgueRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
|
|
CASE FE_T1_FLOYD_hiding_from_Trevor_a
|
|
CASE FE_T1_FLOYD_hiding_from_Trevor_c
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilySphere(GET_ENTITY_COORDS(PedIndex), fDEFAULT_ArgueRad, eHudColour, 0.25)
|
|
#ENDIF
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PedIndex)) < ((fDEFAULT_ArgueRad)*(fDEFAULT_ArgueRad))
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
CASE FE_T1_FLOYD_hiding_from_Trevor_b
|
|
VECTOR FLOYD_hiding_from_Trevor_VecCentre, FLOYD_hiding_from_Trevor_VecBounds
|
|
FLOAT FLOYD_hiding_from_Trevor_fAngle
|
|
FLOYD_hiding_from_Trevor_VecCentre = <<-0.0, 0.0, 1.0>>
|
|
FLOYD_hiding_from_Trevor_VecBounds = <<2.0, 2.0, 1.0>>
|
|
FLOYD_hiding_from_Trevor_fAngle = -0.00
|
|
|
|
/* START_WIDGET_GROUP("FE_M_FLOYD_hiding_from_Trevor")
|
|
ADD_WIDGET_VECTOR_SLIDER("VecCentre", FLOYD_hiding_from_Trevor_VecCentre, -20.0, 20.0, 0.01)
|
|
ADD_WIDGET_VECTOR_SLIDER("VecBounds", FLOYD_hiding_from_Trevor_VecBounds, 0.5, 20.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("fAngle", FLOYD_hiding_from_Trevor_fAngle, -360.0, 360.0, 1.0)
|
|
STOP_WIDGET_GROUP()
|
|
WHILE TRUE
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
vSequencePos+FLOYD_hiding_from_Trevor_VecCentre, FLOYD_hiding_from_Trevor_VecBounds, fSequenceHead+FLOYD_hiding_from_Trevor_fAngle)
|
|
ENDIF
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_C)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("FLOYD_hiding_from_Trevor_VecCentre = ")SAVE_VECTOR_TO_DEBUG_FILE(FLOYD_hiding_from_Trevor_VecCentre)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("FLOYD_hiding_from_Trevor_VecBounds = ")SAVE_VECTOR_TO_DEBUG_FILE(FLOYD_hiding_from_Trevor_VecBounds)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("FLOYD_hiding_from_Trevor_fAngle = ")SAVE_FLOAT_TO_DEBUG_FILE(FLOYD_hiding_from_Trevor_fAngle)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
RETURN TRUE
|
|
ENDIF
|
|
WAIT(0)
|
|
ENDWHILE */
|
|
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
vSequencePos+FLOYD_hiding_from_Trevor_VecCentre, FLOYD_hiding_from_Trevor_VecBounds, fSequenceHead+FLOYD_hiding_from_Trevor_fAngle)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyEvent(eFamilyEvent), " in PRIVATE_Trigger_Family_Argue()")
|
|
CASSERTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyEvent(eFamilyEvent), " in PRIVATE_Trigger_Family_Argue()")
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC STRING Get_Family_Argue_Exit_Clip(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent)
|
|
|
|
SWITCH eFamilyEvent
|
|
CASE FE_M2_SON_gaming_loop
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_SON
|
|
RETURN "JIM_IG_2_P2_Lagging"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE FE_M7_SON_gaming
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_SON
|
|
RETURN "IG_2_Exit"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE FE_M_SON_Fighting_with_sister_A
|
|
CASE FE_M_SON_Fighting_with_sister_B
|
|
CASE FE_M_SON_Fighting_with_sister_C
|
|
CASE FE_M_SON_Fighting_with_sister_D
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_SON
|
|
RETURN "EXIT_JIMMY"
|
|
BREAK
|
|
CASE FM_MICHAEL_DAUGHTER
|
|
RETURN "EXIT_TRACY"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
// CASE FE_M_WIFE_screaming_at_son_P1
|
|
// SWITCH eFamilyMember
|
|
// CASE FM_MICHAEL_WIFE
|
|
// RETURN "IG_2_YouKnowWhat_AMANDA"
|
|
// BREAK
|
|
// CASE FM_MICHAEL_SON
|
|
// RETURN "IG_2_YouKnowWhat_JIMMY"
|
|
// BREAK
|
|
// ENDSWITCH
|
|
// BREAK
|
|
CASE FE_M_WIFE_screaming_at_son_P2
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE
|
|
RETURN "IG_2_P2_ItsNotWastingTime_AMANDA"
|
|
BREAK
|
|
CASE FM_MICHAEL_SON
|
|
RETURN "IG_2_P2_ItsNotWastingTime_JIMMY"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE FE_M_WIFE_screaming_at_son_P3
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE
|
|
RETURN "IG2_P3_ItsNotABigDeal_AMANDA"
|
|
BREAK
|
|
CASE FM_MICHAEL_SON
|
|
RETURN "IG2_P3_ItsNotABigDeal_JIMMY"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE FE_M_WIFE_screaming_at_daughter
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE
|
|
RETURN "IG_3_WhenURPregnant_AMANDA"
|
|
BREAK
|
|
CASE FM_MICHAEL_DAUGHTER
|
|
RETURN "IG_3_WhenURPregnant_TRACY"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE FE_M_WIFE_screams_at_mexmaid
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE
|
|
RETURN "IG_9_IAmOnToYou_AMANDA"
|
|
BREAK
|
|
CASE FM_MICHAEL_MEXMAID
|
|
RETURN "IG_9_IAmOnToYou_MAID"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE FE_M2_WIFE_with_shopping_bags_enter
|
|
CASE FE_M7_WIFE_with_shopping_bags_enter
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE
|
|
RETURN "IG_7_EXIT"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE FE_M7_WIFE_Making_juice
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE
|
|
RETURN "Ugh_kale_Amanda"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE FE_T1_FLOYD_pineapple
|
|
SWITCH eFamilyMember
|
|
CASE FM_TREVOR_1_FLOYD
|
|
RETURN "Pineapple_EXIT_LOOP_FLOYD"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
#IF NOT IS_JAPANESE_BUILD
|
|
CASE FE_M2_WIFE_using_vibrator
|
|
CASE FE_M7_WIFE_using_vibrator
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_WIFE
|
|
RETURN "IG_6_EXIT"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
#ENDIF
|
|
|
|
CASE FE_M_DAUGHTER_screaming_at_dad
|
|
IF (eFamilyEvent = FE_M_DAUGHTER_screaming_at_dad)
|
|
MODEL_NAMES PedModel
|
|
PedModel = GET_ENTITY_MODEL(PedIndex)
|
|
|
|
IF (PedModel = GET_NPC_PED_MODEL(CHAR_TRACEY))
|
|
RETURN "EXIT_TRACY"
|
|
ELIF (PedModel = A_M_Y_HIPSTER_01)
|
|
RETURN "EXIT_BOY"
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE FE_T0_RON_ranting_about_government_LAYING
|
|
SWITCH eFamilyMember
|
|
CASE FM_TREVOR_0_RON
|
|
RETURN "ENTER"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE FE_T0_RONEX_working_a_moonshine_sill
|
|
SWITCH eFamilyMember
|
|
CASE FM_TREVOR_0_RON
|
|
RETURN "IG_3_IDLE_A"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE FE_T1_FLOYD_hiding_from_Trevor_a
|
|
CASE FE_T1_FLOYD_hiding_from_Trevor_b
|
|
CASE FE_T1_FLOYD_hiding_from_Trevor_c
|
|
SWITCH eFamilyMember
|
|
CASE FM_TREVOR_1_FLOYD
|
|
RETURN "base"
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
DEFAULT
|
|
//
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "invalid eFamilyMember ", Get_String_From_FamilyMember(eFamilyMember), " for Get_Family_Argue_Exit_Clip(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
CASSERTLN(DEBUG_FAMILY, "invalid eFamilyMember ", Get_String_From_FamilyMember(eFamilyMember), " for Get_Family_Argue_Exit_Clip(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
#ENDIF
|
|
|
|
eFamilyMember = eFamilyMember
|
|
eFamilyEvent = eFamilyEvent
|
|
|
|
RETURN "null"
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Argue(PED_INDEX PedIndex, enumFamilyMember eFamilyMember,
|
|
enumFamilyEvents eFamilyEvent, VECTOR vSequencePos, FLOAT fSequenceHead,
|
|
INT &iArgueStage, INT &iScene,
|
|
TEXT_LABEL_63 &tAnimDict, TEXT_LABEL_63 &tAnimClip,
|
|
enumFamilyEvents eDesiredFamilyEvent,
|
|
STRING strTextBlock, STRING strLoop, STRING strExit, TEXT_LABEL &tCreatedConvLabels[],
|
|
structPedsForConversation &inSpeechStruct, structTimer &speechTimer, FLOAT fExitDialogueTime = 0.0,
|
|
enumConversationPriority enSpeechPriority = CONV_PRIORITY_AMBIENT_HIGH)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
IF (eDesiredFamilyEvent = INT_TO_ENUM(enumFamilyEvents, 0))
|
|
eDesiredFamilyEvent = NO_FAMILY_EVENTS
|
|
ENDIF
|
|
|
|
CONST_INT iFamTextOffset 3
|
|
TEXT_LABEL_63 str
|
|
#ENDIF
|
|
|
|
CONST_INT iARGUE_0_argue 0
|
|
CONST_INT iARGUE_1_playExit 1
|
|
CONST_INT iARGUE_2_performingSynch 2
|
|
CONST_INT iARGUE_3_playExit 3
|
|
CONST_INT iARGUE_33_playExitWaitForSpeech 33
|
|
CONST_INT iARGUE_4_wanderArea 4
|
|
CONST_INT iARGUE_5_updateEvent 5
|
|
|
|
SWITCH iArgueStage
|
|
CASE iARGUE_0_argue //
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("0. wait for argue", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
IF PRIVATE_Trigger_Family_Argue(PedIndex, eFamilyEvent, vSequencePos, fSequenceHead)
|
|
|
|
IF IS_STRING_NULL_OR_EMPTY(tAnimDict)
|
|
CWARNINGLN(DEBUG_FAMILY, "PRIVATE_Update_Family_Argue(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ") tAnimDict has not been initialised")
|
|
|
|
PRIVATE_Update_Family_SynchScene(PedIndex, eFamilyMember, eFamilyEvent, vSequencePos, fSequenceHead, iScene, TRUE, FALSE, tAnimDict, tAnimClip)
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
|
|
IF IS_STRING_NULL_OR_EMPTY(strTextBlock)
|
|
AND IS_STRING_NULL_OR_EMPTY(strExit)
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iScene, FALSE)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, TRUE)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "iArgueStage = iARGUE_1_playExit - ARGUE (silent)!")
|
|
|
|
iArgueStage = iARGUE_1_playExit
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
INT iRandCount, iSpeechBit, iPlayerBitset
|
|
Get_SpeechLabel_From_FamilyEvent(eFamilyEvent, iRandCount, iSpeechBit, iPlayerBitset)
|
|
|
|
IF NOT IS_BITMASK_SET(iPlayerBitset, GET_CURRENT_PLAYER_PED_BIT())
|
|
CPRINTLN(DEBUG_FAMILY, "argue - invalid IS_BITMASK_SET: ", GET_CURRENT_PLAYER_PED_STRING())
|
|
ELSE
|
|
|
|
//is the speech a single line or is it a random conv
|
|
IF IS_BITMASK_AS_ENUM_SET(iSpeechBit, FSC_singleRandomLine)
|
|
|
|
BOOL bReadyForPlayExit
|
|
bReadyForPlayExit = FALSE
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(strExit)
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, strExit,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
bReadyForPlayExit = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF (eFamilyEvent = FE_T1_FLOYD_pineapple)
|
|
CPRINTLN(DEBUG_FAMILY, GET_THIS_SCRIPT_NAME(), ": PRIVATE_Update_Family_Argue(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ") - attempting to play an empty single random line...")
|
|
|
|
bReadyForPlayExit = TRUE
|
|
ELSE
|
|
CASSERTLN(DEBUG_FAMILY, GET_THIS_SCRIPT_NAME(), ": PRIVATE_Update_Family_Argue(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ") - attempting to play an empty single random line??")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (fExitDialogueTime <> 0)
|
|
bReadyForPlayExit = TRUE
|
|
ENDIF
|
|
|
|
IF bReadyForPlayExit
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iScene, FALSE)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, TRUE)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "iArgueStage = iARGUE_1_playExit - ARGUE (random)!")
|
|
|
|
iArgueStage = iARGUE_1_playExit
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELSE
|
|
TEXT_LABEL returnedStrLabel
|
|
returnedStrLabel = strExit
|
|
IF GetRandomConversationFromLabel(strTextBlock, returnedStrLabel, tCreatedConvLabels)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(returnedStrLabel)
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, returnedStrLabel,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iScene, FALSE)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, TRUE)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "iArgueStage = iARGUE_1_playExit - ARGUE (non-random)!")
|
|
|
|
iArgueStage = iARGUE_1_playExit
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELSE
|
|
CASSERTLN(DEBUG_FAMILY, GET_THIS_SCRIPT_NAME(), ": PRIVATE_Update_Family_Argue(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ") - attempting to play an empty multiple random line??")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_LOOPED(iScene)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "iArgueStage = iARGUE_1_playExit - non-looped...")
|
|
|
|
iArgueStage = iARGUE_1_playExit
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(strLoop)
|
|
//
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "play \"", strLoop, "\"...")
|
|
|
|
IF NOT IS_TIMER_STARTED(speechTimer)
|
|
START_TIMER_NOW(speechTimer)
|
|
ENDIF
|
|
|
|
TEXT_LABEL returnedStrLabel
|
|
returnedStrLabel = strLoop
|
|
IF GetRandomConversationFromLabel(strTextBlock, returnedStrLabel, tCreatedConvLabels)
|
|
INT iCurrentRandCount
|
|
Play_This_Family_Speech(PedIndex, eFamilyEvent,
|
|
inSpeechStruct, strTextBlock, tCreatedConvLabels,
|
|
speechTimer, iCurrentRandCount,
|
|
10, returnedStrLabel)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
FLOAT LoopblendInDelta, exitblendOutDelta
|
|
LoopblendInDelta = NORMAL_BLEND_IN
|
|
exitblendOutDelta = NORMAL_BLEND_OUT
|
|
|
|
IF (eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_a)
|
|
OR (eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_b)
|
|
OR (eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_c)
|
|
LoopblendInDelta = NORMAL_BLEND_IN
|
|
exitblendOutDelta = SLOW_BLEND_OUT
|
|
ENDIF
|
|
|
|
IF NOT PRIVATE_Update_Family_SynchScene(PedIndex, eFamilyMember, eFamilyEvent,
|
|
vSequencePos, fSequenceHead,
|
|
iScene, TRUE, FALSE, tAnimDict, tAnimClip,
|
|
LoopblendInDelta, exitblendOutDelta)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
CASE iARGUE_1_playExit
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("1. play exit, wait for speech", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF IS_STRING_NULL_OR_EMPTY(tAnimDict)
|
|
TEXT_LABEL_63 tTempFamilyAnimClip
|
|
|
|
ANIMATION_FLAGS eFamilyAnimFlag
|
|
enumFamilyAnimProgress eFamilyAnimProgress
|
|
|
|
PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tAnimDict, tTempFamilyAnimClip,
|
|
eFamilyAnimFlag, eFamilyAnimProgress)
|
|
|
|
REQUEST_ANIM_DICT(tAnimDict)
|
|
IF NOT HAS_ANIM_DICT_LOADED(tAnimDict)
|
|
CPRINTLN(DEBUG_FAMILY, "iArgueStage = iARGUE_1_playExit - waiting for \"", tAnimDict, "\"")
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
VECTOR vSynchSceneOffset
|
|
FLOAT fSynchSceneHead
|
|
vSynchSceneOffset = <<0,0,0>>
|
|
fSynchSceneHead = 0
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vSynchSceneOffset, fSynchSceneHead)
|
|
iScene = CREATE_SYNCHRONIZED_SCENE(vSequencePos+vSynchSceneOffset, <<0,0,fSequenceHead+fSynchSceneHead>>)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
STRING sFamilyArgueExitClip
|
|
sFamilyArgueExitClip = Get_Family_Argue_Exit_Clip(PedIndex, eFamilyMember, eFamilyEvent)
|
|
|
|
FLOAT blendInDelta, blendOutDelta
|
|
SYNCED_SCENE_PLAYBACK_FLAGS flags
|
|
RAGDOLL_BLOCKING_FLAGS ragdollFlags
|
|
|
|
blendInDelta = NORMAL_BLEND_IN
|
|
blendOutDelta = WALK_BLEND_OUT
|
|
flags = SYNCED_SCENE_USE_PHYSICS
|
|
ragdollFlags = RBF_PLAYER_IMPACT
|
|
|
|
IF (eFamilyEvent = FE_M_WIFE_screams_at_mexmaid)
|
|
blendInDelta = INSTANT_BLEND_IN
|
|
ENDIF
|
|
|
|
IF (eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_a)
|
|
OR (eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_b)
|
|
OR (eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_c)
|
|
blendInDelta = SLOW_BLEND_IN
|
|
ENDIF
|
|
|
|
IF (eDesiredFamilyEvent = NO_FAMILY_EVENTS)
|
|
flags |= SYNCED_SCENE_TAG_SYNC_OUT
|
|
ELIF (eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_a)
|
|
OR (eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_b)
|
|
OR (eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_c)
|
|
OR (eFamilyEvent = FE_M7_WIFE_Making_juice) //#1588065
|
|
OR (eFamilyEvent = FE_T0_RONEX_working_a_moonshine_sill)
|
|
OR (eFamilyEvent = FE_T1_FLOYD_pineapple) //#1590017
|
|
blendOutDelta = WALK_BLEND_OUT
|
|
ELSE
|
|
blendOutDelta = INSTANT_BLEND_OUT
|
|
ENDIF
|
|
|
|
IF eFamilyEvent = FE_M_WIFE_screaming_at_son_P2
|
|
IF eFamilyMember = FM_MICHAEL_WIFE
|
|
blendOutDelta = WALK_BLEND_OUT
|
|
ENDIF
|
|
ELIF eFamilyEvent = FE_M_WIFE_screaming_at_son_P3
|
|
IF eFamilyMember = FM_MICHAEL_WIFE
|
|
blendOutDelta = WALK_BLEND_OUT
|
|
ENDIF
|
|
ELIF eFamilyEvent = FE_M_WIFE_screaming_at_daughter
|
|
IF eFamilyMember = FM_MICHAEL_WIFE
|
|
blendOutDelta = WALK_BLEND_OUT
|
|
ENDIF
|
|
// ELIF eFamilyEvent = FE_M_WIFE_screaming_at_son_P1
|
|
// IF eFamilyMember = FM_MICHAEL_WIFE
|
|
// blendOutDelta = WALK_BLEND_OUT
|
|
// ENDIF
|
|
ENDIF
|
|
|
|
TASK_SYNCHRONIZED_SCENE(PedIndex, iScene,
|
|
tAnimDict, sFamilyArgueExitClip,
|
|
blendInDelta, blendOutDelta, flags, ragdollFlags)
|
|
SET_FORCE_FOOTSTEP_UPDATE(PedIndex, TRUE)
|
|
|
|
SET_SYNCHRONIZED_SCENE_PHASE(iScene, 0.0)
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iScene, FALSE)
|
|
IF eFamilyEvent = FE_M7_WIFE_Making_juice
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, FALSE)
|
|
ELSE
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, TRUE)
|
|
ENDIF
|
|
tAnimClip = sFamilyArgueExitClip
|
|
|
|
SET_PED_CONFIG_FLAG(PedIndex, PCF_UseKinematicModeWhenStationary, TRUE)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "iArgueStage = iARGUE_2_performingSynch \"", tAnimDict, "/", sFamilyArgueExitClip, "\"")
|
|
|
|
iArgueStage = iARGUE_2_performingSynch
|
|
RETURN FALSE
|
|
BREAK
|
|
CASE iARGUE_2_performingSynch //
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
str = ("creating SynchScene")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+0, HUD_COLOUR_REDLIGHT)
|
|
ELSE
|
|
str = ("SynchScene phase: ")
|
|
str += GET_STRING_FROM_FLOAT(GET_SYNCHRONIZED_SCENE_PHASE(iScene))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+0, HUD_COLOUR_BLUELIGHT)
|
|
ENDIF
|
|
DrawDebugFamilyTextWithOffset("2. wait to start playing argue", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_SYNCHRONIZED_SCENE) = PERFORMING_TASK)
|
|
iArgueStage = iARGUE_3_playExit
|
|
|
|
IF (fExitDialogueTime <> 0)
|
|
iArgueStage = iARGUE_33_playExitWaitForSpeech
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE iARGUE_3_playExit //
|
|
CASE iARGUE_33_playExitWaitForSpeech
|
|
|
|
|
|
TEXT_LABEL_63 tFamilyDebugAnimDict, tFamilyDebugAnimClip
|
|
ANIMATION_FLAGS eFamilyDebugAnimFlag
|
|
enumFamilyAnimProgress eFamilyDebugAnimProgress
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tFamilyDebugAnimDict, tFamilyDebugAnimClip,
|
|
eFamilyDebugAnimFlag, eFamilyDebugAnimProgress)
|
|
|
|
tFamilyDebugAnimClip = Get_Family_Argue_Exit_Clip(PedIndex, eFamilyMember, eFamilyEvent)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("tExitClip: \"")
|
|
str += (tFamilyDebugAnimClip)
|
|
str += ("\"")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+0, HUD_COLOUR_REDLIGHT)
|
|
#ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("tExitClip: \"")
|
|
str += (tFamilyDebugAnimClip)
|
|
str += ("\"")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+0, HUD_COLOUR_REDLIGHT)
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("3. playing argue, synch scene [")
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
str += "null"
|
|
ELSE
|
|
str += GET_STRING_FROM_FLOAT(GET_SYNCHRONIZED_SCENE_PHASE(iScene))
|
|
ENDIF
|
|
str += ("]")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF (fExitDialogueTime <> 0)
|
|
AND (iArgueStage <> iARGUE_3_playExit)
|
|
IF (IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
AND (GET_SYNCHRONIZED_SCENE_PHASE(iScene) >= fExitDialogueTime))
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(strExit)
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, strExit,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
iArgueStage = iARGUE_3_playExit
|
|
ENDIF
|
|
ELSE
|
|
CASSERTLN(DEBUG_FAMILY, GET_THIS_SCRIPT_NAME(), ": PRIVATE_Update_Family_Argue(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ") - attempting to play an empty exit line??")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
FLOAT ReturnStartPhase, ReturnEndPhase
|
|
IF FIND_ANIM_EVENT_PHASE(tFamilyDebugAnimDict, tFamilyDebugAnimClip,
|
|
"WalkInterruptible",
|
|
ReturnStartPhase, ReturnEndPhase)
|
|
CASSERTLN(DEBUG_FAMILY, "walk interruptible in argue anim")
|
|
ELSE
|
|
ReturnStartPhase = 0.95
|
|
ReturnEndPhase = 1.0
|
|
|
|
IF eFamilyEvent = FE_M7_SON_gaming
|
|
ReturnStartPhase = 0.44
|
|
ReturnEndPhase = 1.0
|
|
ENDIF
|
|
|
|
IF eFamilyEvent = FE_M_WIFE_screaming_at_son_P2
|
|
IF eFamilyMember = FM_MICHAEL_WIFE
|
|
ReturnStartPhase = 0.78 ReturnEndPhase = 1.00 //#1577498 & #1585993
|
|
ENDIF
|
|
ELIF eFamilyEvent = FE_M_WIFE_screaming_at_son_P3
|
|
IF eFamilyMember = FM_MICHAEL_WIFE
|
|
ReturnStartPhase = 0.73 ReturnEndPhase = 1.00 //#1577498 & #1585993
|
|
ENDIF
|
|
ELIF eFamilyEvent = FE_M_WIFE_screaming_at_daughter
|
|
IF eFamilyMember = FM_MICHAEL_WIFE
|
|
ReturnStartPhase = 0.80 ReturnEndPhase = 1.00 //#1577498 & #1585993
|
|
ENDIF
|
|
// ELIF eFamilyEvent = FE_M_WIFE_screaming_at_son_P1
|
|
// IF eFamilyMember = FM_MICHAEL_WIFE
|
|
// ReturnStartPhase = 0.71 ReturnEndPhase = 1.00 //#1577498 & #1585993
|
|
// ENDIF
|
|
ENDIF
|
|
|
|
IF eFamilyEvent = FE_T0_RONEX_working_a_moonshine_sill
|
|
ReturnStartPhase = 0.80 ReturnEndPhase = 1.00
|
|
ENDIF
|
|
|
|
IF eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_a
|
|
OR eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_b
|
|
OR eFamilyEvent = FE_T1_FLOYD_hiding_from_Trevor_c
|
|
ReturnStartPhase = 0.75 ReturnEndPhase = 1.00
|
|
ENDIF
|
|
|
|
IF eFamilyEvent = FE_M7_WIFE_Making_juice
|
|
ReturnStartPhase = 5.0 ReturnEndPhase = 1.00
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = (" WalkInterruptible phases: ")
|
|
str += GET_STRING_FROM_FLOAT(ReturnStartPhase)
|
|
str += (", ")
|
|
str += GET_STRING_FROM_FLOAT(ReturnEndPhase)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
OR (IS_SYNCHRONIZED_SCENE_RUNNING(iScene) AND (GET_SYNCHRONIZED_SCENE_PHASE(iScene) >= ReturnStartPhase))
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
|
|
IF (eDesiredFamilyEvent = NO_FAMILY_EVENTS)
|
|
|
|
TASK_GO_STRAIGHT_TO_COORD(PedIndex,
|
|
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PedIndex, <<0,1.5,0>>),
|
|
PEDMOVE_WALK)
|
|
|
|
FORCE_PED_MOTION_STATE(PedIndex, MS_ON_FOOT_WALK, FALSE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PedIndex)
|
|
|
|
iArgueStage = iARGUE_4_wanderArea
|
|
// ELIF (eFamilyEvent = FE_M_WIFE_screaming_at_son_P2 AND eFamilyMember = FM_MICHAEL_WIFE)
|
|
// OR (eFamilyEvent = FE_M_WIFE_screaming_at_son_P3 AND eFamilyMember = FM_MICHAEL_WIFE)
|
|
//
|
|
// TASK_GO_STRAIGHT_TO_COORD(PedIndex,
|
|
// GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PedIndex, <<0,1.5,0>>),
|
|
// PEDMOVE_WALK)
|
|
//
|
|
// FORCE_PED_MOTION_STATE(PedIndex, MS_ON_FOOT_WALK, FALSE)
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(PedIndex)
|
|
//
|
|
// RESTART_TIMER_NOW(speechTimer)
|
|
// iArgueStage = 0
|
|
// PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, eDesiredFamilyEvent)
|
|
// RETURN FALSE
|
|
ELSE
|
|
IF (eDesiredFamilyEvent = FE_ANY_find_family_event)
|
|
OR (eDesiredFamilyEvent = FE_ANY_wander_family_event)
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
DETACH_SYNCHRONIZED_SCENE(iScene)
|
|
ENDIF
|
|
iScene = -1
|
|
ENDIF
|
|
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
iArgueStage = 0
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, eDesiredFamilyEvent)
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE iARGUE_4_wanderArea //
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("4. finished argue - wander area", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
iArgueStage = 0
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, FE_ANY_wander_family_event)
|
|
BREAK
|
|
CASE iARGUE_5_updateEvent //
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("5. finished argue - update event", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF (eDesiredFamilyEvent = FE_ANY_find_family_event)
|
|
OR (eDesiredFamilyEvent = FE_ANY_wander_family_event)
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
DETACH_SYNCHRONIZED_SCENE(iScene)
|
|
ENDIF
|
|
iScene = -1
|
|
ENDIF
|
|
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
iArgueStage = 0
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, eDesiredFamilyEvent)
|
|
RETURN FALSE
|
|
BREAK
|
|
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "invalid iArgueStage ", iArgueStage, " for ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Update_Family_Argue(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
CASSERTLN(DEBUG_FAMILY, "invalid iArgueStage ", iArgueStage, " for ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Update_Family_Argue(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC PRIVATE_Set_Entity_Visible_And_Collision(ENTITY_INDEX EntityIndex, BOOL VisibleFlag)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(EntityIndex)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF NOT VisibleFlag
|
|
IF IS_ENTITY_VISIBLE(EntityIndex)
|
|
SET_ENTITY_VISIBLE(EntityIndex, FALSE)
|
|
SET_ENTITY_COLLISION(EntityIndex, FALSE)
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IS_ENTITY_VISIBLE(EntityIndex)
|
|
SET_ENTITY_VISIBLE(EntityIndex, TRUE)
|
|
SET_ENTITY_COLLISION(EntityIndex, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_ComingHome(PED_INDEX &PedIndex, enumFamilyMember eFamilyMember,
|
|
enumFamilyEvents eFamilyEvent, VECTOR vSequencePos, FLOAT fSequenceHead,
|
|
INT &iShoppingStage, OBJECT_INDEX oLeftBag, OBJECT_INDEX oRightBag,
|
|
INT &iScene, TEXT_LABEL_63 &tAnimDict, TEXT_LABEL_63 &tAnimClip,
|
|
enumFamilyEvents eDesiredFamilyEvent,
|
|
INTERIOR_INSTANCE_INDEX InteriorInstanceIndex, STRING RoomKeyName,
|
|
STRING strTextBlock, STRING strEnter, STRING strIdle, TEXT_LABEL &tCreatedConvLabels[],
|
|
structPedsForConversation &inSpeechStruct, structTimer &speechTimer, INT &iCurrentRandCount,
|
|
enumConversationPriority enSpeechPriority = CONV_PRIORITY_AMBIENT_HIGH)
|
|
|
|
CDEBUG3LN(DEBUG_FAMILY, GET_THIS_SCRIPT_NAME(), " PRIVATE_Update_Family_ComingHome.GET_CURRENT_STACK_SIZE(", GET_CURRENT_STACK_SIZE() ," max ", GET_ALLOCATED_STACK_SIZE(), ")")
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
IF (eDesiredFamilyEvent = INT_TO_ENUM(enumFamilyEvents, 0))
|
|
eDesiredFamilyEvent = NO_FAMILY_EVENTS
|
|
ENDIF
|
|
|
|
CONST_INT iFamTextOffset 3
|
|
TEXT_LABEL_63 str
|
|
#ENDIF
|
|
|
|
CONST_INT iSHOPPING_0_shopping 0
|
|
CONST_INT iSHOPPING_1_waitForSpeech 1
|
|
CONST_INT iSHOPPING_2_performingSynch 2
|
|
CONST_INT iSHOPPING_3_playIdle 3
|
|
CONST_INT iSHOPPING_4_exitShop 4
|
|
CONST_INT iSHOPPING_5_updateEvent 5
|
|
|
|
SWITCH iShoppingStage
|
|
CASE iSHOPPING_0_shopping //
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("0. wait for shopping", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF NOT PRIVATE_Trigger_Family_Argue(PedIndex, eFamilyEvent, vSequencePos, fSequenceHead)
|
|
|
|
PRIVATE_Set_Entity_Visible_And_Collision(PedIndex, FALSE)
|
|
PRIVATE_Set_Entity_Visible_And_Collision(oLeftBag, FALSE)
|
|
PRIVATE_Set_Entity_Visible_And_Collision(oRightBag, FALSE)
|
|
|
|
VECTOR Family_ComingHome_VecCentre, Family_ComingHome_VecBounds
|
|
FLOAT Family_ComingHome_fAngle
|
|
Family_ComingHome_VecCentre = <<-7.5000, -2.9500, 0.5700>>
|
|
Family_ComingHome_VecBounds = <<3.0000, 3.0000, 1.5000>>
|
|
Family_ComingHome_fAngle = -22.0000
|
|
|
|
|
|
/* START_WIDGET_GROUP("Family_ComingHome")
|
|
ADD_WIDGET_VECTOR_SLIDER("VecCentre", Family_ComingHome_VecCentre, -20.0, 20.0, 0.01)
|
|
ADD_WIDGET_VECTOR_SLIDER("VecBounds", Family_ComingHome_VecBounds, 0.5, 20.0, 0.5)
|
|
ADD_WIDGET_FLOAT_SLIDER("fAngle", Family_ComingHome_fAngle, -360.0, 360.0, 1.0)
|
|
STOP_WIDGET_GROUP()
|
|
WHILE TRUE
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
vSequencePos+Family_ComingHome_VecCentre, Family_ComingHome_VecBounds, fSequenceHead+Family_ComingHome_fAngle)
|
|
ENDIF
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_C)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("Family_ComingHome_VecCentre = ")SAVE_VECTOR_TO_DEBUG_FILE(Family_ComingHome_VecCentre)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("Family_ComingHome_VecBounds = ")SAVE_VECTOR_TO_DEBUG_FILE(Family_ComingHome_VecBounds)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("Family_ComingHome_fAngle = ")SAVE_FLOAT_TO_DEBUG_FILE(Family_ComingHome_fAngle)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
RETURN TRUE
|
|
ENDIF
|
|
WAIT(0)
|
|
ENDWHILE */
|
|
|
|
IF IS_PED_AT_ANGLED_COORD(PLAYER_PED_ID(),
|
|
vSequencePos+Family_ComingHome_VecCentre, Family_ComingHome_VecBounds, fSequenceHead+Family_ComingHome_fAngle)
|
|
|
|
Set_Current_Event_For_FamilyMember(eFamilyMember, FAMILY_MEMBER_BUSY)
|
|
DELETE_PED(PedIndex)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
|
|
|
|
ELSE
|
|
PRIVATE_Set_Entity_Visible_And_Collision(PedIndex, TRUE)
|
|
PRIVATE_Set_Entity_Visible_And_Collision(oLeftBag, TRUE)
|
|
PRIVATE_Set_Entity_Visible_And_Collision(oRightBag, TRUE)
|
|
|
|
INT iRandCount, iSpeechBit, iPlayerBitset
|
|
Get_SpeechLabel_From_FamilyEvent(eFamilyEvent, iRandCount, iSpeechBit, iPlayerBitset)
|
|
|
|
IF NOT IS_BITMASK_SET(iPlayerBitset, GET_CURRENT_PLAYER_PED_BIT())
|
|
CASSERTLN(DEBUG_FAMILY, "coming home - invalid IS_BITMASK_SET")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
//is the speech a single line or is it a random conv
|
|
IF IS_BITMASK_AS_ENUM_SET(iSpeechBit, FSC_singleRandomLine)
|
|
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, strEnter,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
IF ARE_STRINGS_EQUAL(strEnter, strIdle)
|
|
iCurrentRandCount++
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "iShoppingStage = iSHOPPING_1_waitForSpeech - SHOPPING (random)!")
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
SET_SYNCHRONIZED_SCENE_RATE(iScene, 1.0)
|
|
ENDIF
|
|
|
|
iShoppingStage = iSHOPPING_1_waitForSpeech
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELSE
|
|
TEXT_LABEL returnedStrLabel
|
|
returnedStrLabel = strEnter
|
|
IF GetRandomConversationFromLabel(strTextBlock, returnedStrLabel, tCreatedConvLabels)
|
|
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, returnedStrLabel,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
IF ARE_STRINGS_EQUAL(strEnter, strIdle)
|
|
iCurrentRandCount++
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "iShoppingStage = iSHOPPING_1_waitForSpeech - SHOPPING (non-random)!")
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
SET_SYNCHRONIZED_SCENE_RATE(iScene, 1.0)
|
|
ENDIF
|
|
|
|
iShoppingStage = iSHOPPING_1_waitForSpeech
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF PRIVATE_Update_Family_SynchScene(PedIndex, eFamilyMember, eFamilyEvent,
|
|
vSequencePos, fSequenceHead,
|
|
iScene, FALSE, FALSE, tAnimDict, tAnimClip)
|
|
|
|
IF IS_VALID_INTERIOR(InteriorInstanceIndex)
|
|
AND IS_INTERIOR_READY(InteriorInstanceIndex)
|
|
FORCE_ROOM_FOR_ENTITY(PedIndex, InteriorInstanceIndex, GET_HASH_KEY(RoomKeyName))
|
|
|
|
IF DOES_ENTITY_EXIST(oLeftBag)
|
|
FORCE_ROOM_FOR_ENTITY(oLeftBag, InteriorInstanceIndex, GET_HASH_KEY(RoomKeyName))
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(oRightBag)
|
|
FORCE_ROOM_FOR_ENTITY(oRightBag, InteriorInstanceIndex, GET_HASH_KEY(RoomKeyName))
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
SET_SYNCHRONIZED_SCENE_RATE(iScene, 0.0)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE iSHOPPING_1_waitForSpeech
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("1. wait for speech", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF PRIVATE_Update_Family_SynchScene(PedIndex, eFamilyMember, eFamilyEvent,
|
|
vSequencePos, fSequenceHead,
|
|
iScene, FALSE, TRUE, tAnimDict, tAnimClip,
|
|
NORMAL_BLEND_IN, INSTANT_BLEND_OUT)
|
|
|
|
PRIVATE_Set_Entity_Visible_And_Collision(PedIndex, TRUE)
|
|
PRIVATE_Set_Entity_Visible_And_Collision(oLeftBag, TRUE)
|
|
PRIVATE_Set_Entity_Visible_And_Collision(oRightBag, TRUE)
|
|
|
|
IF IS_VALID_INTERIOR(InteriorInstanceIndex)
|
|
AND IS_INTERIOR_READY(InteriorInstanceIndex)
|
|
FORCE_ROOM_FOR_ENTITY(PedIndex, InteriorInstanceIndex, GET_HASH_KEY(RoomKeyName))
|
|
|
|
IF DOES_ENTITY_EXIST(oLeftBag)
|
|
FORCE_ROOM_FOR_ENTITY(oLeftBag, InteriorInstanceIndex, GET_HASH_KEY(RoomKeyName))
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(oRightBag)
|
|
FORCE_ROOM_FOR_ENTITY(oRightBag, InteriorInstanceIndex, GET_HASH_KEY(RoomKeyName))
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
SET_SYNCHRONIZED_SCENE_RATE(iScene, 1.0)
|
|
ENDIF
|
|
|
|
iShoppingStage = iSHOPPING_2_performingSynch
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
CASE iSHOPPING_2_performingSynch //
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
str = ("creating SynchScene")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+0, HUD_COLOUR_REDLIGHT)
|
|
ELSE
|
|
str = ("SynchScene phase: ")
|
|
str += GET_STRING_FROM_FLOAT(GET_SYNCHRONIZED_SCENE_PHASE(iScene))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+0, HUD_COLOUR_BLUELIGHT)
|
|
ENDIF
|
|
DrawDebugFamilyTextWithOffset("2. play shoppingEnter", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
OR (GET_SYNCHRONIZED_SCENE_PHASE(iScene) >= 0.95)
|
|
IF DOES_ENTITY_EXIST(oLeftBag)
|
|
IF IS_ENTITY_ATTACHED(oLeftBag)
|
|
DETACH_ENTITY(oLeftBag)
|
|
CPRINTLN(DEBUG_FAMILY, "DETACH_ENTITY(oLeftBag)")
|
|
ENDIF
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
STOP_SYNCHRONIZED_ENTITY_ANIM(oLeftBag, INSTANT_BLEND_OUT, TRUE)
|
|
CPRINTLN(DEBUG_FAMILY, "STOP_SYNCHRONIZED_ENTITY_ANIM(oLeftBag)")
|
|
ENDIF
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(oRightBag)
|
|
IF IS_ENTITY_ATTACHED(oRightBag)
|
|
DETACH_ENTITY(oRightBag)
|
|
CPRINTLN(DEBUG_FAMILY, "DETACH_ENTITY(oRightBag)")
|
|
ENDIF
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
STOP_SYNCHRONIZED_ENTITY_ANIM(oRightBag, INSTANT_BLEND_OUT, TRUE)
|
|
CPRINTLN(DEBUG_FAMILY, "STOP_SYNCHRONIZED_ENTITY_ANIM(oLeftBag)")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (eFamilyMember = FM_MICHAEL_WIFE)
|
|
iShoppingStage = iSHOPPING_3_playIdle
|
|
ELSE
|
|
iShoppingStage = 0
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, eDesiredFamilyEvent)
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE iSHOPPING_3_playIdle //
|
|
INT iRandCount, iSpeechBit, iPlayerBitset
|
|
Get_SpeechLabel_From_FamilyEvent(eFamilyEvent, iRandCount, iSpeechBit, iPlayerBitset)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("3. play shoppingIdle")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
|
|
str = ("iRandCount [")
|
|
str += (iCurrentRandCount)
|
|
str += (" >= ")
|
|
str += (iRandCount)
|
|
str += ("]")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+2, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
PRIVATE_Update_Family_SynchSceneArray(PedIndex,
|
|
eFamilyMember, eFamilyEvent,
|
|
tAnimDict, tAnimClip,
|
|
vSequencePos, fSequenceHead,
|
|
iScene, TRUE, TRUE)
|
|
|
|
IF Play_This_Family_Speech(PedIndex, eFamilyEvent,
|
|
inSpeechStruct,
|
|
strTextBlock, tCreatedConvLabels, speechTimer, iCurrentRandCount,
|
|
16, strIdle)
|
|
ENDIF
|
|
|
|
// IF iCurrentRandCount >= iRandCount
|
|
// iShoppingStage = iSHOPPING_4_exitShop
|
|
// ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE iSHOPPING_4_exitShop //
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("4. exit shop", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
VECTOR vSynchSceneOffset
|
|
FLOAT fSynchSceneHead
|
|
vSynchSceneOffset = <<0,0,0>>
|
|
fSynchSceneHead = 0
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vSynchSceneOffset, fSynchSceneHead)
|
|
iScene = CREATE_SYNCHRONIZED_SCENE(vSequencePos+vSynchSceneOffset, <<0,0,fSequenceHead+fSynchSceneHead>>)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
STRING sFamilyArgueExitClip
|
|
sFamilyArgueExitClip = Get_Family_Argue_Exit_Clip(PedIndex, eFamilyMember, eFamilyEvent)
|
|
|
|
TASK_SYNCHRONIZED_SCENE(PedIndex, iScene,
|
|
tAnimDict, sFamilyArgueExitClip,
|
|
NORMAL_BLEND_IN, WALK_BLEND_OUT,
|
|
SYNCED_SCENE_USE_PHYSICS)
|
|
SET_FORCE_FOOTSTEP_UPDATE(PedIndex, TRUE)
|
|
|
|
SET_SYNCHRONIZED_SCENE_PHASE(iScene, 0.0)
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iScene, FALSE)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, FALSE)
|
|
|
|
tAnimClip = sFamilyArgueExitClip
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "iArgueStage = iSHOPPING_5_updateEvent \"", tAnimDict, "/", sFamilyArgueExitClip, "\"")
|
|
|
|
iShoppingStage = iSHOPPING_5_updateEvent
|
|
RETURN FALSE
|
|
BREAK
|
|
CASE iSHOPPING_5_updateEvent //
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("5. play shoppingExit", GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+0, HUD_COLOUR_RED)
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
str = ("creating SynchScene")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_REDLIGHT)
|
|
ELSE
|
|
str = ("SynchScene phase: ")
|
|
str += GET_STRING_FROM_FLOAT(GET_SYNCHRONIZED_SCENE_PHASE(iScene))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), iFamTextOffset+1, HUD_COLOUR_BLUELIGHT)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
iShoppingStage = 0
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, eDesiredFamilyEvent)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "invalid iShoppingStage ", iShoppingStage, " for ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Update_Family_Shopping(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
CASSERTLN(DEBUG_FAMILY, "invalid iShoppingStage ", iShoppingStage, " for ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Update_Family_Shopping(", Get_String_From_FamilyEvent(eFamilyEvent), ")")
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_AskForCash(enumCharacterList charSheetID, PED_INDEX PedIndex,
|
|
enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent, INT iPlayerBitset,
|
|
VECTOR vFamilyScenePos, FLOAT fFamilySceneHead,
|
|
INT &iCompletedGivingCash,
|
|
TEXT_LABEL_63 &tDialogueAnimDict, TEXT_LABEL_63 &tDialogueAnimClip,
|
|
INT &cash_intention_index, STRING strTextBlock, STRING strTextRoot, TEXT_LABEL &tCreatedConvLabels[],
|
|
INT &iScene,
|
|
structPedsForConversation &inSpeechStruct, structTimer &speechTimer,
|
|
enumConversationPriority enSpeechPriority = CONV_PRIORITY_AMBIENT_HIGH,
|
|
MODEL_NAMES ePropModel = DUMMY_MODEL_FOR_SCRIPT)
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
#ENDIF
|
|
|
|
|
|
CONST_INT iCONST_0_requestAssets 0
|
|
CONST_INT iCONST_1_waitForLoad 1
|
|
|
|
CONST_INT iCONST_2_animStart 2
|
|
CONST_INT iCONST_3_animFinish 3
|
|
|
|
CONST_INT iCONST_2_synchStart 20
|
|
CONST_INT iCONST_3_synchFinishing 30
|
|
CONST_INT iCONST_4_synchFinished 40
|
|
|
|
CONST_INT iCONST_done -1
|
|
|
|
IF NOT IS_BITMASK_SET(iPlayerBitset, GET_PLAYER_PED_BIT(charSheetID))
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("ask for cash, player not iPlayerBitset")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), -1, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (iCompletedGivingCash = iCONST_done)
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("ask for cash, giving cash is done")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), -1, HUD_COLOUR_PURE_WHITE)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
STRING strCASH = NULL
|
|
INT iCashAskedFor = -1
|
|
|
|
VECTOR vPedCoord = GET_ENTITY_COORDS(PedIndex)
|
|
VECTOR vLocateOffset
|
|
|
|
VECTOR vScenePosOffset
|
|
FLOAT fSceneRotOffset
|
|
|
|
TEXT_LABEL_63 tAnimDict = ""
|
|
TEXT_LABEL_63 tAnimPlayer = "", tAnimFamMember = "", tAnimFamProp = "", tAnimFamCam = ""
|
|
|
|
INT iNextStage = -99
|
|
INT iRandomAnimSet = -1
|
|
|
|
SWITCH eFamilyEvent
|
|
CASE FE_M_DAUGHTER_Coming_home_drunk
|
|
strCASH = "PAY_M_DAUG" //Press ~INPUT_CONTEXT~ to give $~1~ to Tracey.
|
|
iCashAskedFor = 50
|
|
vLocateOffset = <<0,0,-0.75>>
|
|
|
|
tAnimDict = "TIMETABLE@TRACY@IG_14@"
|
|
|
|
tAnimPlayer = "IG_14_IWishAll_A_PLAYER"
|
|
tAnimFamMember = "IG_14_IWishAll_A_TRACY"
|
|
tAnimFamProp = "IG_14_IWishAll_A_NOTE"
|
|
tAnimFamCam = "IG_14_IWishAll_A_CAM"
|
|
|
|
//tAnimPlayer = "IG_14_IWishAll_A_PLAYER"
|
|
//tAnimFamMember = "IG_14_IWishAll_A_TRACY"
|
|
//tAnimFamProp = "IG_14_IWishAll_A_NOTE"
|
|
//tAnimFamCam = "IG_14_IWishAll_A_CAM"
|
|
|
|
//tAnimPlayer = "IG_14_IWishAll_B_PLAYER"
|
|
//tAnimFamMember = "IG_14_IWishAll_B_TRACY"
|
|
//tAnimFamProp = "IG_14_IWishAll_B_NOTE"
|
|
//tAnimFamCam = "IG_14_IWishAll_B_CAM"
|
|
|
|
//tAnimPlayer = "IG_14_ParentingAtItsFinest_PLAYER"
|
|
//tAnimFamMember = "IG_14_ParentingAtItsFinest_TRACY"
|
|
//tAnimFamProp = "IG_14_ParentingAtItsFinest_NOTE"
|
|
//tAnimFamCam = "IG_14_ParentingAtItsFinest_CAM"
|
|
|
|
vScenePosOffset = <<0,0,0>>
|
|
fSceneRotOffset = 0
|
|
|
|
iRandomAnimSet = 99
|
|
iNextStage = iCONST_2_synchStart
|
|
BREAK
|
|
CASE FE_M_SON_watching_porn
|
|
strCASH = "PAY_M_SON" //Press ~INPUT_CONTEXT~ to check on Jimmy.
|
|
iCashAskedFor = 0
|
|
vLocateOffset = <<0,6,0>>
|
|
|
|
tAnimDict = "TIMETABLE@JIMMY@DOORKNOCK@"
|
|
tAnimPlayer = "KNOCKDOOR_IDLE"
|
|
tAnimFamMember = ""
|
|
tAnimFamProp = ""
|
|
tAnimFamCam = "KNOCKDOOR_IDLE_CAM"
|
|
|
|
vScenePosOffset = <<0.5010, 6.6020, 0.0>>
|
|
fSceneRotOffset = 242.1000
|
|
|
|
iRandomAnimSet = -1
|
|
iNextStage = iCONST_2_synchStart
|
|
BREAK
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyEvent(eFamilyEvent), " in PRIVATE_Update_Family_AskForCash()")
|
|
CASSERTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyEvent(eFamilyEvent), " in PRIVATE_Update_Family_AskForCash()")
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vPedCoord+vLocateOffset, <<2,2,1>>, FALSE, TRUE, TM_ON_FOOT)
|
|
AND NOT IS_PHONE_ONSCREEN()
|
|
REQUEST_ANIM_DICT(tAnimDict)
|
|
IF (ePropModel <> DUMMY_MODEL_FOR_SCRIPT)
|
|
REQUEST_MODEL(ePropModel)
|
|
ENDIF
|
|
|
|
IF (iCashAskedFor > 0)
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("(GET_TOTAL_CASH(")
|
|
str += (GET_PLAYER_PED_STRING(charSheetID))
|
|
str += ("):")
|
|
str += (GET_TOTAL_CASH(charSheetID))
|
|
str += (" < ")
|
|
str += (iCashAskedFor)
|
|
str += (")")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), -1, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
|
|
IF (GET_TOTAL_CASH(charSheetID) < iCashAskedFor)
|
|
IF cash_intention_index != NEW_CONTEXT_INTENTION
|
|
RELEASE_CONTEXT_INTENTION(cash_intention_index)
|
|
CLEAR_THIS_FLOATING_HELP_WITH_NUMBER(strCASH, iCashAskedFor)
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BOOL eHasPropModelLoaded = TRUE
|
|
IF (ePropModel <> DUMMY_MODEL_FOR_SCRIPT)
|
|
IF NOT HAS_MODEL_LOADED(ePropModel)
|
|
eHasPropModelLoaded = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_ANIM_DICT_LOADED(tAnimDict)
|
|
OR NOT Is_Family_Speech_Loaded_And_Setup(strTextBlock)
|
|
OR NOT eHasPropModelLoaded
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("request assets: ")
|
|
|
|
IF NOT HAS_ANIM_DICT_LOADED(tAnimDict)
|
|
str += (GET_PLAYER_PED_STRING(charSheetID))
|
|
str += " "
|
|
ENDIF
|
|
IF NOT eHasPropModelLoaded
|
|
str += (GET_MODEL_NAME_FOR_DEBUG(ePropModel))
|
|
str += " "
|
|
ENDIF
|
|
IF NOT Is_Family_Speech_Loaded_And_Setup(strTextBlock)
|
|
str += (strTextBlock)
|
|
ENDIF
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), -2, HUD_COLOUR_RED)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF cash_intention_index = NEW_CONTEXT_INTENTION
|
|
REGISTER_CONTEXT_INTENTION(cash_intention_index, CP_MEDIUM_PRIORITY, strCASH, TRUE)
|
|
ELSE
|
|
|
|
IF IS_CONTEXT_INTENTION_TOP(cash_intention_index)
|
|
IF NOT IS_THIS_HELP_MESSAGE_WITH_NUMBER_BEING_DISPLAYED(strCASH, iCashAskedFor)
|
|
PRINT_HELP_FOREVER_WITH_NUMBER(strCASH, iCashAskedFor)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_CONTEXT_BUTTON_TRIGGERED(cash_intention_index)
|
|
RETURN FALSE
|
|
ELSE
|
|
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
|
|
iCompletedGivingCash = iCONST_0_requestAssets
|
|
OBJECT_INDEX PropIndex
|
|
CAMERA_INDEX CamIndex
|
|
WHILE iCompletedGivingCash > iCONST_done
|
|
AND IS_PLAYER_PLAYING(PLAYER_ID())
|
|
AND NOT IS_PED_INJURED(PedIndex)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("iCompletedGivingCash:")
|
|
str += iCompletedGivingCash
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
|
|
SWITCH iCompletedGivingCash
|
|
CASE iCONST_0_requestAssets
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("requestAssets", GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
|
|
IF cash_intention_index != NEW_CONTEXT_INTENTION
|
|
RELEASE_CONTEXT_INTENTION(cash_intention_index)
|
|
ENDIF
|
|
IF IS_THIS_HELP_MESSAGE_WITH_NUMBER_BEING_DISPLAYED(strCASH, iCashAskedFor)
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, TRUE)
|
|
ENDIF
|
|
|
|
REQUEST_ANIM_DICT(tAnimDict)
|
|
IF (ePropModel <> DUMMY_MODEL_FOR_SCRIPT)
|
|
REQUEST_MODEL(ePropModel)
|
|
ENDIF
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
DISPLAY_RADAR(FALSE)
|
|
|
|
iCompletedGivingCash = iCONST_1_waitForLoad
|
|
BREAK
|
|
CASE iCONST_1_waitForLoad
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("waitForLoad", GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
|
|
BOOL eFinishedWaitingForPropModelToLoad
|
|
eFinishedWaitingForPropModelToLoad = TRUE
|
|
IF (ePropModel <> DUMMY_MODEL_FOR_SCRIPT)
|
|
IF NOT HAS_MODEL_LOADED(ePropModel)
|
|
eFinishedWaitingForPropModelToLoad = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_ANIM_DICT_LOADED(tAnimDict)
|
|
AND eFinishedWaitingForPropModelToLoad
|
|
iCompletedGivingCash = iNextStage
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE iCONST_2_animStart
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("animStart", GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
|
|
IF Is_Ped_Playing_Family_Speech(strTextBlock, strTextRoot,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
|
|
TASK_PLAY_ANIM(PLAYER_PED_ID(), tAnimDict, tAnimPlayer)
|
|
TASK_PLAY_ANIM(PedIndex, tAnimDict, tAnimFamMember)
|
|
|
|
iCompletedGivingCash = iCONST_3_animFinish
|
|
ENDIF
|
|
BREAK
|
|
CASE iCONST_3_animFinish
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("animFinish", GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), tAnimDict, tAnimPlayer)
|
|
AND NOT IS_ENTITY_PLAYING_ANIM(PedIndex, tAnimDict, tAnimFamMember)
|
|
iCompletedGivingCash = iCONST_done
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE iCONST_2_synchStart
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("synchStart", GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
|
|
// IF (GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY) <> PERFORMING_TASK)
|
|
|
|
IF NOT Is_Ped_Playing_Family_Speech(strTextBlock, strTextRoot,
|
|
inSpeechStruct, enSpeechPriority, tCreatedConvLabels)
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("wait for speech to start...", GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
ELSE
|
|
VECTOR vSynchSceneOffset
|
|
FLOAT fSynchSceneHead
|
|
vSynchSceneOffset = <<0,0,0>>
|
|
fSynchSceneHead = 0
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vSynchSceneOffset, fSynchSceneHead)
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
DETACH_SYNCHRONIZED_SCENE(iScene)
|
|
ENDIF
|
|
iScene = -1
|
|
|
|
IF iRandomAnimSet = 99
|
|
|
|
TEXT_LABEL rootLabel
|
|
INT iRootFilenameNum
|
|
rootLabel = g_ConversationData.ConversationSegmentToGrab
|
|
rootLabel += "A"
|
|
iRootFilenameNum = GET_VARIATION_CHOSEN_FOR_SCRIPTED_LINE(rootLabel)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SAVE_STRING_TO_DEBUG_FILE("PRIVATE_GetTextLabelFromConv(\"")
|
|
SAVE_STRING_TO_DEBUG_FILE(rootLabel)
|
|
SAVE_STRING_TO_DEBUG_FILE("\", \"")
|
|
SAVE_INT_TO_DEBUG_FILE(iRootFilenameNum)
|
|
SAVE_STRING_TO_DEBUG_FILE("\")")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
#ENDIF
|
|
|
|
IF iRootFilenameNum < 0
|
|
iRootFilenameNum = GET_RANDOM_INT_IN_RANGE(0,6)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SAVE_STRING_TO_DEBUG_FILE("invalid iRootFilenameNum, randomized to ")
|
|
SAVE_INT_TO_DEBUG_FILE(iRootFilenameNum)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
SWITCH iRootFilenameNum
|
|
CASE 0
|
|
CASE 1
|
|
tAnimPlayer = "IG_14_IWishAll_A_PLAYER"
|
|
tAnimFamMember = "IG_14_IWishAll_A_TRACY"
|
|
tAnimFamProp = "IG_14_IWishAll_A_NOTE"
|
|
tAnimFamCam = "IG_14_IWishAll_A_CAM"
|
|
BREAK
|
|
|
|
CASE 2
|
|
CASE 3
|
|
tAnimPlayer = "IG_14_IWishAll_B_PLAYER"
|
|
tAnimFamMember = "IG_14_IWishAll_B_TRACY"
|
|
tAnimFamProp = "IG_14_IWishAll_B_NOTE"
|
|
tAnimFamCam = "IG_14_IWishAll_B_CAM"
|
|
BREAK
|
|
|
|
CASE 4
|
|
CASE 5
|
|
tAnimPlayer = "IG_14_ParentingAtItsFinest_PLAYER"
|
|
tAnimFamMember = "IG_14_ParentingAtItsFinest_TRACY"
|
|
tAnimFamProp = "IG_14_ParentingAtItsFinest_NOTE"
|
|
tAnimFamCam = "IG_14_ParentingAtItsFinest_CAM"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SAVE_STRING_TO_DEBUG_FILE("iRootFilenameNum: ")
|
|
SAVE_INT_TO_DEBUG_FILE(iRootFilenameNum)
|
|
SAVE_STRING_TO_DEBUG_FILE(" \"")
|
|
SAVE_STRING_TO_DEBUG_FILE(tAnimPlayer)
|
|
SAVE_STRING_TO_DEBUG_FILE("\"")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
iScene = CREATE_SYNCHRONIZED_SCENE(vFamilyScenePos+vSynchSceneOffset+vScenePosOffset, <<0,0,fFamilySceneHead+fSynchSceneHead+fSceneRotOffset>>)
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iScene, FALSE)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, TRUE)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(tAnimPlayer)
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iScene,
|
|
tAnimDict, tAnimPlayer,
|
|
INSTANT_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_NONE, RBF_PLAYER_IMPACT, INSTANT_BLEND_IN)
|
|
ENDIF
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(tAnimFamMember)
|
|
TASK_SYNCHRONIZED_SCENE(PedIndex, iScene,
|
|
tAnimDict, tAnimFamMember,
|
|
INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_NONE, RBF_PLAYER_IMPACT, INSTANT_BLEND_IN)
|
|
ENDIF
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(tAnimFamProp)
|
|
PropIndex = CREATE_OBJECT(ePropModel, vFamilyScenePos+vSynchSceneOffset)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(PropIndex, iScene,
|
|
tAnimFamProp, tAnimDict,
|
|
INSTANT_BLEND_IN)
|
|
ENDIF
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(tAnimFamCam)
|
|
CamIndex = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE)
|
|
PLAY_SYNCHRONIZED_CAM_ANIM(CamIndex, iScene,
|
|
tAnimFamCam, tAnimDict)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
iCompletedGivingCash = iCONST_3_synchFinishing
|
|
ENDIF
|
|
|
|
ENDIF
|
|
// ENDIF
|
|
BREAK
|
|
CASE iCONST_3_synchFinishing
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
FLOAT fScenePhase
|
|
fScenePhase = GET_SYNCHRONIZED_SCENE_PHASE(iScene)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("synchFinishing:phase ")
|
|
str += GET_STRING_FROM_FLOAT(fScenePhase)
|
|
IF IS_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene)
|
|
str += (" hold last frame")
|
|
ENDIF
|
|
IF IS_SYNCHRONIZED_SCENE_LOOPED(iScene)
|
|
str += (" looped")
|
|
ENDIF
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENDARK)
|
|
|
|
str = ("tAnimFamMember: \"")
|
|
str += (tAnimFamMember)
|
|
str += ("\"")
|
|
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_GREENDARK)
|
|
|
|
|
|
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
|
|
VECTOR vSynchSceneOffset
|
|
FLOAT fSynchSceneHead
|
|
vSynchSceneOffset = <<0,0,0>>
|
|
fSynchSceneHead = 0
|
|
IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vSynchSceneOffset, fSynchSceneHead)
|
|
|
|
|
|
START_WIDGET_GROUP("PRIVATE_Update_Family_AskForCash")
|
|
ADD_WIDGET_STRING("scene phase")
|
|
ADD_WIDGET_FLOAT_SLIDER("fScenePhase", fScenePhase, 0.0, 1.0, 0.001)
|
|
ADD_WIDGET_STRING("scene position")
|
|
ADD_WIDGET_VECTOR_SLIDER("vFamilyScenePos", vFamilyScenePos, -4000.0, 4000.0, 0.0)
|
|
ADD_WIDGET_VECTOR_SLIDER("vSynchSceneOffset", vSynchSceneOffset, -4000.0, 4000.0, 0.0)
|
|
ADD_WIDGET_VECTOR_SLIDER("vScenePosOffset", vScenePosOffset, -20.0, 20.0, 0.001)
|
|
ADD_WIDGET_STRING("scene orientation")
|
|
ADD_WIDGET_FLOAT_SLIDER("fFamilySceneHead", fFamilySceneHead, -4000.0, 4000.0, 0.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("fSynchSceneHead", fSynchSceneHead, -4000.0, 4000.0, 0.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("fSceneRotOffset", fSceneRotOffset, 0.0, 360.0, 0.1)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
WHILE NOT IS_KEYBOARD_KEY_JUST_RELEASED(KEY_C)
|
|
SET_SYNCHRONIZED_SCENE_ORIGIN(iScene,
|
|
vFamilyScenePos+vSynchSceneOffset+vScenePosOffset,
|
|
<<0,0,fFamilySceneHead+fSynchSceneHead+fSceneRotOffset>>)
|
|
SET_SYNCHRONIZED_SCENE_PHASE(iScene, fScenePhase)
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("fScenePhase = ")SAVE_FLOAT_TO_DEBUG_FILE(fScenePhase)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("vFamilyScenePos = ")SAVE_VECTOR_TO_DEBUG_FILE(vFamilyScenePos)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("vSynchSceneOffset = ")SAVE_VECTOR_TO_DEBUG_FILE(vSynchSceneOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("vScenePosOffset = ")SAVE_VECTOR_TO_DEBUG_FILE(vScenePosOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("fFamilySceneHead = ")SAVE_FLOAT_TO_DEBUG_FILE(fFamilySceneHead)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("fSynchSceneHead = ")SAVE_FLOAT_TO_DEBUG_FILE(fSynchSceneHead)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE("fSceneRotOffset = ")SAVE_FLOAT_TO_DEBUG_FILE(fSceneRotOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#ENDIF
|
|
|
|
IF (fScenePhase >= 0.95)
|
|
iCompletedGivingCash = iCONST_4_synchFinished
|
|
ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("synchFinishing:DONE", GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
|
|
iCompletedGivingCash = iCONST_4_synchFinished
|
|
ENDIF
|
|
BREAK
|
|
CASE iCONST_4_synchFinished
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
#IF IS_DEBUG_BUILD
|
|
FLOAT fScenePhase
|
|
fScenePhase = GET_SYNCHRONIZED_SCENE_PHASE(iScene)
|
|
|
|
str = ("synchFinished:phase ")
|
|
str += GET_STRING_FROM_FLOAT(fScenePhase)
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENDARK)
|
|
|
|
str = ("tDialogueAnimClip: \"")
|
|
str += (tDialogueAnimClip)
|
|
str += ("\"")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
TEXT_LABEL_63 tFamilySynchSceneDict
|
|
TEXT_LABEL_63 tFamilySynchSceneClip
|
|
tFamilySynchSceneDict = ""
|
|
tFamilySynchSceneClip = ""
|
|
|
|
ANIMATION_FLAGS eFamilySynchSceneFlag
|
|
enumFamilyAnimProgress eFamilySynchSceneProgress
|
|
eFamilySynchSceneFlag = AF_DEFAULT
|
|
eFamilySynchSceneProgress = FAP_0_default
|
|
|
|
FLOAT blendInDelta
|
|
FLOAT blendOutDelta
|
|
blendInDelta = INSTANT_BLEND_IN
|
|
blendOutDelta = NORMAL_BLEND_OUT
|
|
|
|
SYNCED_SCENE_PLAYBACK_FLAGS flags
|
|
RAGDOLL_BLOCKING_FLAGS ragdollFlags
|
|
FLOAT moverBlendInDelta
|
|
flags = SYNCED_SCENE_USE_PHYSICS
|
|
ragdollFlags = RBF_PLAYER_IMPACT
|
|
moverBlendInDelta = INSTANT_BLEND_IN
|
|
|
|
IF PRIVATE_Get_FamilyMember_Anim(eFamilyMember, eFamilyEvent,
|
|
tFamilySynchSceneDict, tFamilySynchSceneClip, eFamilySynchSceneFlag, eFamilySynchSceneProgress)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(tAnimFamMember)
|
|
IF IS_BITMASK_ENUM_AS_ENUM_SET(ragdollFlags, SYNCED_SCENE_USE_PHYSICS)
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
SET_PED_CAN_EVASIVE_DIVE(PedIndex, FALSE)
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedIndex, TRUE)
|
|
ENDIF
|
|
|
|
SET_SYNCHRONIZED_SCENE_PHASE(iScene, 0.0)
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iScene, TRUE)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iScene, FALSE)
|
|
|
|
TASK_SYNCHRONIZED_SCENE(PedIndex, iScene,
|
|
tFamilySynchSceneDict, tFamilySynchSceneClip,
|
|
blendInDelta, blendOutDelta, flags, ragdollFlags, moverBlendInDelta)
|
|
SET_FORCE_FOOTSTEP_UPDATE(PedIndex, TRUE)
|
|
|
|
tDialogueAnimDict = tFamilySynchSceneDict
|
|
tDialogueAnimClip = tFamilySynchSceneClip
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_TaskSynchSceneDone(PedIndex, \"", tDialogueAnimDict, "\", \"", tDialogueAnimClip, "\": ", iScene, ")")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_IDLE, TRUE)
|
|
|
|
iCompletedGivingCash = iCONST_done
|
|
ENDIF
|
|
BREAK
|
|
|
|
DEFAULT
|
|
CPRINTLN(DEBUG_FAMILY, "unknown iCompletedGivingCash: ", iCompletedGivingCash)
|
|
CASSERTLN(DEBUG_FAMILY, "unknown iCompletedGivingCash: ", iCompletedGivingCash)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
|
|
IF (ePropModel <> DUMMY_MODEL_FOR_SCRIPT)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(ePropModel)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(PropIndex)
|
|
DELETE_OBJECT(PropIndex)
|
|
ENDIF
|
|
IF DOES_CAM_EXIST(CamIndex)
|
|
STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP()
|
|
DESTROY_CAM(camIndex)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PedIndex)
|
|
AND (iCashAskedFor > 0)
|
|
DEBIT_BANK_ACCOUNT(charSheetID, BAAC_LESTER, iCashAskedFor)
|
|
ENDIF
|
|
|
|
DISPLAY_RADAR(TRUE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
RESTART_TIMER_NOW(speechTimer)
|
|
|
|
IF IS_PED_INJURED(PedIndex)
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("asking for cash:")
|
|
str += iScene
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_GREENLIGHT)
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
ELSE
|
|
IF cash_intention_index != NEW_CONTEXT_INTENTION
|
|
RELEASE_CONTEXT_INTENTION(cash_intention_index)
|
|
IF IS_THIS_HELP_MESSAGE_WITH_NUMBER_BEING_DISPLAYED(strCASH, iCashAskedFor)
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (ePropModel <> DUMMY_MODEL_FOR_SCRIPT)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(ePropModel)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Find_Event(PED_INDEX PedIndex, enumFamilyMember eFamilyMember,
|
|
VECTOR vSequencePos, FLOAT fExitRad = 4.0, BOOL bSetCurrentFamilyMemberEvent = TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
#ENDIF
|
|
|
|
IF VDIST2(vSequencePos, GET_ENTITY_COORDS(PedIndex)) > ((fExitRad)*(fExitRad))
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("Update_Family_Find_Event(")
|
|
str += (Get_String_From_FamilyMember(eFamilyMember))
|
|
str += (")")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_GREENLIGHT)
|
|
|
|
str = ("VDIST ")
|
|
str += GET_STRING_FROM_FLOAT(VDIST(vSequencePos, GET_ENTITY_COORDS(PedIndex)))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENLIGHT)
|
|
#ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> PERFORMING_TASK)
|
|
INT Time = DEFAULT_TIME_NEVER_WARP //DEFAULT_TIME_BEFORE_WARP
|
|
FLOAT Radius = DEFAULT_NAVMESH_RADIUS
|
|
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, vSequencePos, PEDMOVE_WALK, Time, Radius)
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
str += (" FOLLOW_NAV_MESH_TO_COORD != performing")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_GREENLIGHT)
|
|
#ENDIF
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF IS_ENTITY_IN_WATER(PedIndex)
|
|
#IF IS_DEBUG_BUILD
|
|
str += ("PED IN WATER (Family_Find_Event)!!!")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_GREENLIGHT)
|
|
CPRINTLN(DEBUG_FAMILY, str)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
enumFamilyEvents eDesiredFamilyEvent
|
|
IF PRIVATE_Get_Desired_FamilyMember_Event(eFamilyMember, eDesiredFamilyEvent, TRUE)
|
|
IF PRIVATE_Is_Valid_Find_FamilyMember_Event(eFamilyMember, eDesiredFamilyEvent)
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("desired event ")
|
|
str += (Get_String_From_FamilyEvent(eDesiredFamilyEvent))
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_GREENLIGHT)
|
|
#ENDIF
|
|
|
|
|
|
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, eDesiredFamilyEvent)
|
|
RETURN TRUE
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("Update_Family_Find_Event(")
|
|
str += (Get_String_From_FamilyMember(eFamilyMember))
|
|
str += (") not valid? ")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENLIGHT)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, str)
|
|
#ENDIF
|
|
ENDIF
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = ("Update_Family_Find_Event(")
|
|
str += (Get_String_From_FamilyMember(eFamilyMember))
|
|
str += (")")
|
|
|
|
TEXT_LABEL_63 str2
|
|
str2 = ("nothing desired? ")
|
|
str2 += (Get_String_From_FamilyEvent(eDesiredFamilyEvent))
|
|
|
|
IF ARE_STRINGS_EQUAL(GET_THIS_SCRIPT_NAME(), "family_scene_m")
|
|
SWITCH GetMichaelScheduleStage()
|
|
CASE MSS_M2_WithFamily
|
|
str2 += (" - M2_WithFam")
|
|
BREAK
|
|
CASE MSS_M4_WithoutFamily
|
|
str2 += (" - M4_WithoutFam")
|
|
BREAK
|
|
CASE MSS_M6_Exiled
|
|
str2 += (" - M6_Exiled")
|
|
BREAK
|
|
CASE MSS_M7_ReunitedWithFamily
|
|
str2 += (" - M7_Reunited")
|
|
BREAK
|
|
|
|
DEFAULT
|
|
str2 += (" - MSS_Mxxx")
|
|
BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
//
|
|
ENDIF
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_GREENLIGHT)
|
|
DrawDebugFamilyTextWithOffset(str2, GET_ENTITY_COORDS(PedIndex, FALSE), 3, HUD_COLOUR_GREENLIGHT)
|
|
CPRINTLN(DEBUG_FAMILY, str, str2)
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bSetCurrentFamilyMemberEvent
|
|
IF IS_ENTITY_IN_WATER(PedIndex)
|
|
#IF IS_DEBUG_BUILD
|
|
str += ("PED IN WATER (Family_Find_Event)!!!")
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_GREENLIGHT)
|
|
CPRINTLN(DEBUG_FAMILY, str)
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, FE_ANY_wander_family_event)
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC VECTOR PRIVATE_get_random_family_point(PED_INDEX PedIndex, enumFamilyMember eFamilyMember, BOOL bClosest)
|
|
VECTOR vEmergencyGotoCoords[10]
|
|
|
|
VECTOR vOffset = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PedIndex, <<GET_RANDOM_FLOAT_IN_RANGE(-5, 5),GET_RANDOM_FLOAT_IN_RANGE(10, 50),0>>)
|
|
|
|
SWITCH eFamilyMember
|
|
CASE FM_MICHAEL_SON
|
|
CASE FM_MICHAEL_DAUGHTER
|
|
CASE FM_MICHAEL_WIFE
|
|
CASE FM_MICHAEL_MEXMAID
|
|
#IF USE_TU_CHANGES
|
|
CASE FM_MICHAEL_GARDENER
|
|
#ENDIF
|
|
//EXTERIOR
|
|
vEmergencyGotoCoords[0] = <<-821.1343, 155.6063, 69.2348>>
|
|
vEmergencyGotoCoords[1] = <<-793.1925, 165.5698, 70.3529>>
|
|
vEmergencyGotoCoords[2] = <<-802.1196, 191.1686, 71.8350>>
|
|
vEmergencyGotoCoords[3] = <<-779.3063, 184.1423, 71.8354>>
|
|
vEmergencyGotoCoords[4] = <<-781.6624, 155.8212, 66.4745>>
|
|
|
|
//INTERIOR
|
|
vEmergencyGotoCoords[5] = <<-815.5585, 179.7955, 71.1531>>
|
|
vEmergencyGotoCoords[6] = <<-806.1222, 169.9548, 71.8347>>
|
|
vEmergencyGotoCoords[7] = <<-794.8763, 179.0604, 71.8347>>
|
|
vEmergencyGotoCoords[8] = <<-798.2634, 185.7100, 71.6055>>
|
|
|
|
IF eFamilyMember = FM_MICHAEL_SON
|
|
vEmergencyGotoCoords[9] = <<-808.7040, 169.7271, 75.7504>>
|
|
ELIF eFamilyMember = FM_MICHAEL_DAUGHTER
|
|
vEmergencyGotoCoords[9] = <<-800.1566, 172.8743, 75.7504>>
|
|
ELIF eFamilyMember = FM_MICHAEL_WIFE
|
|
vEmergencyGotoCoords[9] = <<-815.9270, 179.6694, 75.7407>>
|
|
ELSE
|
|
vEmergencyGotoCoords[9] = <<-802.9651, 178.5574, 75.7483>>
|
|
ENDIF
|
|
|
|
BREAK
|
|
#IF USE_TU_CHANGES
|
|
CASE FM_FRANKLIN_AUNT
|
|
#ENDIF
|
|
CASE FM_FRANKLIN_LAMAR
|
|
CASE FM_FRANKLIN_STRETCH
|
|
//EXTERIOR
|
|
vEmergencyGotoCoords[0] = <<-38.2037, -1459.5112, 30.3994>>
|
|
vEmergencyGotoCoords[1] = <<-86.7261, -1471.7407, 31.5351>>
|
|
|
|
//INTERIOR
|
|
|
|
BREAK
|
|
CASE FM_TREVOR_0_RON
|
|
CASE FM_TREVOR_0_WIFE
|
|
|
|
#IF USE_TU_CHANGES
|
|
CASE FM_TREVOR_0_MICHAEL
|
|
CASE FM_TREVOR_0_TREVOR
|
|
#ENDIF
|
|
//EXTERIOR
|
|
vEmergencyGotoCoords[0] = <<1980.7178, 3819.2358, 31.4324>>
|
|
vEmergencyGotoCoords[1] = <<1974.1460, 3825.4822, 31.3671>>
|
|
vEmergencyGotoCoords[2] = <<1989.2611, 3820.5364, 31.3665>>
|
|
vEmergencyGotoCoords[3] = <<1971.3353, 3837.5620, 30.9977>>
|
|
|
|
//INTERIOR
|
|
vEmergencyGotoCoords[4] = <<1975.6251, 3820.1807, 32.4501>>
|
|
vEmergencyGotoCoords[5] = <<1969.5767, 3815.7659, 32.4287>>
|
|
|
|
BREAK
|
|
|
|
CASE FM_TREVOR_1_FLOYD
|
|
//EXTERIOR
|
|
vEmergencyGotoCoords[0] = <<-1148.7909, -1522.9229, 9.6330>>
|
|
vEmergencyGotoCoords[1] = <<-1151.6345, -1521.5306, 3.3567>>
|
|
vEmergencyGotoCoords[2] = <<-1145.8826, -1542.1782, 3.3772>>
|
|
vEmergencyGotoCoords[3] = <<-1167.1464, -1505.1429, 3.3794>>
|
|
vEmergencyGotoCoords[4] = <<-1187.0579, -1532.1716, 3.3795>>
|
|
|
|
//INTERIOR
|
|
vEmergencyGotoCoords[5] = <<-1156.8148, -1517.5059, 9.6327>>
|
|
vEmergencyGotoCoords[6] = <<-1157.3087, -1525.3698, 9.6321>>
|
|
vEmergencyGotoCoords[7] = <<-1148.6206, -1519.6217, 9.6327>>
|
|
vEmergencyGotoCoords[8] = <<-1149.4954, -1513.1079, 9.6327>>
|
|
|
|
IF (g_eCurrentSafehouseActivity = SA_TREVOR_BEER)
|
|
OR (g_eCurrentSafehouseActivity = SA_TREVOR_SHOTS)
|
|
vEmergencyGotoCoords[8] = <<0,0,0>>
|
|
ELSE
|
|
vEmergencyGotoCoords[8] = <<-1153.3973, -1522.3252, 9.6475>>
|
|
ENDIF
|
|
|
|
//RANDOM COORD
|
|
vOffset = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PedIndex, <<GET_RANDOM_FLOAT_IN_RANGE(-2.5, 2.5),GET_RANDOM_FLOAT_IN_RANGE(5, 10),0>>)
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
// VECTOR vRandomCoord = GET_RANDOM_POINT_IN_SPHERE(GET_ENTITY_COORDS(PedIndex, FALSE), 20.0)
|
|
//
|
|
// INT iRandom = GET_RANDOM_INT_IN_RANGE(0,15)
|
|
// IF iRandom < COUNT_OF(vEmergencyGotoCoords)
|
|
// IF NOT ARE_VECTORS_ALMOST_EQUAL(vEmergencyGotoCoords[iRandom], <<0,0,0>>)
|
|
// vRandomCoord = vEmergencyGotoCoords[iRandom]
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
INT iCount
|
|
|
|
FLOAT fShortDist = 9999999.99
|
|
INT iClosest = 99, iTotalAmount = 0
|
|
|
|
REPEAT COUNT_OF(vEmergencyGotoCoords) iCount
|
|
IF NOT ARE_VECTORS_EQUAL(vEmergencyGotoCoords[iCount], <<0,0,0>>)
|
|
FLOAT fCurrentDist = GET_DISTANCE_BETWEEN_COORDS(vOffset, vEmergencyGotoCoords[iCount])
|
|
IF fCurrentDist < fShortDist
|
|
fShortDist = fCurrentDist
|
|
iClosest = iCount
|
|
ENDIF
|
|
|
|
iTotalAmount++
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
INT iSecondClosest = iClosest
|
|
IF bClosest
|
|
fShortDist = 9999999.99
|
|
REPEAT COUNT_OF(vEmergencyGotoCoords) iCount
|
|
IF NOT ARE_VECTORS_EQUAL(vEmergencyGotoCoords[iCount], <<0,0,0>>)
|
|
FLOAT fCurrentDist = GET_DISTANCE_BETWEEN_COORDS(vOffset, vEmergencyGotoCoords[iCount])
|
|
IF fCurrentDist < fShortDist
|
|
AND iCount != iClosest
|
|
fShortDist = fCurrentDist
|
|
iSecondClosest = iCount
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ELSE
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF iTotalAmount = 0
|
|
CASSERTLN(DEBUG_FAMILY, "iSecondClosest is somehow greater than COUNT_OF(vEmergencyGotoCoords)??")
|
|
|
|
VECTOR vRandomCoord = <<GET_RANDOM_INT_IN_RANGE(-40, 40), GET_RANDOM_INT_IN_RANGE(-40, 40), 0.0>>
|
|
|
|
VECTOR vSafeCoord
|
|
IF GET_SAFE_COORD_FOR_PED(vRandomCoord, FALSE, vSafeCoord)
|
|
vRandomCoord = vSafeCoord
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "vRandomCoord[", iSecondClosest, "]: ", vRandomCoord, " //emergency bail")
|
|
|
|
RETURN vRandomCoord
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
iSecondClosest = GET_RANDOM_INT_IN_RANGE(0, iTotalAmount-1)
|
|
ENDIF
|
|
|
|
VECTOR vRandomCoord = vEmergencyGotoCoords[iSecondClosest]
|
|
|
|
VECTOR vSafeCoord
|
|
IF GET_SAFE_COORD_FOR_PED(vEmergencyGotoCoords[iSecondClosest], FALSE, vSafeCoord)
|
|
vRandomCoord = vSafeCoord
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "vRandomCoord[", iSecondClosest, "]: ", vRandomCoord, " aka ", vEmergencyGotoCoords[iSecondClosest])
|
|
|
|
IF ARE_VECTORS_EQUAL(vRandomCoord, <<0,0,0>>)
|
|
CASSERTLN(DEBUG_FAMILY, "PRIVATE_get_random_family_point(", Get_String_From_FamilyMember(eFamilyMember), ") is zero??? #1718002")
|
|
|
|
RETURN vOffset
|
|
ELSE
|
|
RETURN vRandomCoord
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Wander_Event(PED_INDEX PedIndex, enumFamilyMember eFamilyMember,
|
|
INT &iWanderStage,
|
|
OBJECT_INDEX &objLeftHand, MODEL_NAMES &ObjLeftHandModel,
|
|
OBJECT_INDEX &objRightHand, MODEL_NAMES &eObjRightHandModel,
|
|
OBJECT_INDEX &objChair,
|
|
INT &iScene)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str
|
|
#ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
|
|
DETACH_SYNCHRONIZED_SCENE(iScene)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "detach synch scene ", Get_String_From_FamilyMember(eFamilyMember))
|
|
#ENDIF
|
|
ENDIF
|
|
IF (iScene <> -1)
|
|
iScene = -1
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_FAMILY, "invalidate synch scene ", Get_String_From_FamilyMember(eFamilyMember))
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = "wanted: "
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_BLUEDARK)
|
|
#ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_SMART_FLEE_PED) <> PERFORMING_TASK)
|
|
|
|
PED_INDEX nearbyPeds[10]
|
|
INT iNearbyPeds = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), nearbyPeds)
|
|
INT iPed
|
|
REPEAT iNearbyPeds iPed
|
|
IF DOES_ENTITY_EXIST(nearbyPeds[iPed])
|
|
AND NOT IS_PED_INJURED(nearbyPeds[iPed])
|
|
IF GET_PED_TYPE(nearbyPeds[iPed]) = PEDTYPE_COP
|
|
TASK_SMART_FLEE_PED(PedIndex, nearbyPeds[iPed], 75, -1, TRUE)
|
|
|
|
iWanderStage = 0
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_SMART_FLEE_POINT) <> PERFORMING_TASK)
|
|
TASK_SMART_FLEE_COORD(PedIndex, GET_ENTITY_COORDS(PLAYER_PED_ID()), 75, -1, TRUE)
|
|
iWanderStage = 0
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objLeftHand)
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(objLeftHand, PedIndex)
|
|
CPRINTLN(DEBUG_FAMILY, "detach left hand prop ", Get_String_From_FamilyMember(eFamilyMember))
|
|
|
|
DETACH_ENTITY(objLeftHand)
|
|
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(objLeftHand, PedIndex)
|
|
CPRINTLN(DEBUG_FAMILY, "left hand prop detach failed")
|
|
CPRINTLN(DEBUG_FAMILY, "running inverse detach ped ", Get_String_From_FamilyMember(eFamilyMember), " from left hand prop")
|
|
|
|
DETACH_ENTITY(PedIndex)
|
|
ENDIF
|
|
|
|
ObjLeftHandModel = DUMMY_MODEL_FOR_SCRIPT
|
|
objLeftHand = NULL
|
|
ENDIF
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(objRightHand)
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(objRightHand, PedIndex)
|
|
CPRINTLN(DEBUG_FAMILY, "detach right hand prop ", Get_String_From_FamilyMember(eFamilyMember))
|
|
|
|
DETACH_ENTITY(objRightHand)
|
|
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(objRightHand, PedIndex)
|
|
CPRINTLN(DEBUG_FAMILY, "right hand prop detach failed")
|
|
CPRINTLN(DEBUG_FAMILY, "running inverse detach ped ", Get_String_From_FamilyMember(eFamilyMember), " from right hand prop")
|
|
|
|
DETACH_ENTITY(PedIndex)
|
|
ENDIF
|
|
|
|
eObjRightHandModel = DUMMY_MODEL_FOR_SCRIPT
|
|
objRightHand = NULL
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objChair)
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(objChair, PedIndex)
|
|
CPRINTLN(DEBUG_FAMILY, "detach chair prop from ped ", Get_String_From_FamilyMember(eFamilyMember))
|
|
|
|
DETACH_ENTITY(objChair)
|
|
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(objChair, PedIndex)
|
|
CPRINTLN(DEBUG_FAMILY, "chair detach failed")
|
|
CPRINTLN(DEBUG_FAMILY, "running inverse detach ped ", Get_String_From_FamilyMember(eFamilyMember), " from chair prop")
|
|
|
|
DETACH_ENTITY(PedIndex)
|
|
ENDIF
|
|
|
|
objChair = NULL
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
CONST_INT Time DEFAULT_TIME_NEVER_WARP //DEFAULT_TIME_BEFORE_WARP
|
|
CONST_FLOAT Radius DEFAULT_NAVMESH_RADIUS
|
|
|
|
CONST_INT iCONST_WANDER_0_navmesh 0
|
|
CONST_INT iCONST_WANDER_1_wander 1
|
|
CONST_INT iCONST_WANDER_2_scenario 2
|
|
|
|
CONST_FLOAT fDIST_SCENARIO 5.0 //10.0
|
|
|
|
SWITCH iWanderStage
|
|
CASE iCONST_WANDER_0_navmesh
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("0. iWander - Navmesh", GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_GREENDARK)
|
|
#ENDIF
|
|
|
|
IF PRIVATE_Update_Family_Find_Event(PedIndex, eFamilyMember, GET_ENTITY_COORDS(PedIndex, FALSE), 40.0)
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_Find_Event (wander)!!!")
|
|
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
|
|
iWanderStage = 0 //reset
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objLeftHand)
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(objLeftHand, PedIndex)
|
|
CPRINTLN(DEBUG_FAMILY, "detach left hand prop")
|
|
|
|
DETACH_ENTITY(objLeftHand)
|
|
objLeftHand = NULL
|
|
ENDIF
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(objRightHand)
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(objRightHand, PedIndex)
|
|
CPRINTLN(DEBUG_FAMILY, "detach right hand prop")
|
|
|
|
DETACH_ENTITY(objRightHand)
|
|
objLeftHand = NULL
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objChair)
|
|
IF IS_ENTITY_ATTACHED_TO_ENTITY(objChair, PedIndex)
|
|
CPRINTLN(DEBUG_FAMILY, "detach chair prop")
|
|
|
|
DETACH_ENTITY(objChair)
|
|
|
|
objChair = NULL
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) != PERFORMING_TASK)
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PedIndex, TRUE)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, PRIVATE_get_random_family_point(PedIndex, eFamilyMember, TRUE),
|
|
PEDMOVE_WALK, Time, Radius)
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELSE
|
|
|
|
WAIT(5)
|
|
IF IS_PED_INJURED(PedIndex)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
NAVMESH_ROUTE_RESULT enavmesh_route_result
|
|
FLOAT fOut_DistanceRemaining
|
|
INT iOut_ThisIsLastRouteSection
|
|
enavmesh_route_result = GET_NAVMESH_ROUTE_DISTANCE_REMAINING(PedIndex, fOut_DistanceRemaining, iOut_ThisIsLastRouteSection)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("navmesh...", GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_GREENDARK)
|
|
|
|
str = "navtask["
|
|
SWITCH enavmesh_route_result
|
|
CASE NAVMESHROUTE_TASK_NOT_FOUND str += "TASK_NOT_FOUND" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_NOT_YET_TRIED str += "ROUTE_NOT_YET_TRIED" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_NOT_FOUND str += "ROUTE_NOT_FOUND" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_FOUND str += "ROUTE_FOUND" BREAK
|
|
DEFAULT
|
|
str += ENUM_TO_INT(enavmesh_route_result)
|
|
BREAK
|
|
ENDSWITCH
|
|
str += ", "
|
|
str += GET_STRING_FROM_FLOAT(fOut_DistanceRemaining)
|
|
str += "m, s:"
|
|
str += (iOut_ThisIsLastRouteSection)
|
|
str += "]"
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_BLUE)
|
|
#ENDIF
|
|
|
|
IF enavmesh_route_result != NAVMESHROUTE_ROUTE_NOT_FOUND
|
|
iWanderStage = iCONST_WANDER_1_wander
|
|
RETURN FALSE
|
|
ELSE
|
|
CLEAR_PED_TASKS(PedIndex)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, PRIVATE_get_random_family_point(PedIndex, eFamilyMember, FALSE),
|
|
PEDMOVE_WALK, Time, Radius)
|
|
|
|
WAIT(0)
|
|
|
|
IF NOT IS_PED_INJURED(PedIndex)
|
|
AND (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) = PERFORMING_TASK)
|
|
|
|
enavmesh_route_result = GET_NAVMESH_ROUTE_DISTANCE_REMAINING(PedIndex, fOut_DistanceRemaining, iOut_ThisIsLastRouteSection)
|
|
|
|
IF enavmesh_route_result != NAVMESHROUTE_ROUTE_NOT_FOUND
|
|
iWanderStage = iCONST_WANDER_1_wander
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// //
|
|
STRING scenarioTypeName
|
|
scenarioTypeName = "PROP_HUMAN_SEAT_CHAIR"
|
|
BOOL bEnableScenarioType
|
|
bEnableScenarioType = TRUE
|
|
|
|
enumFamilyMember eThisFamMember
|
|
PED_COMPONENT ePedCompID
|
|
INT iDrawableId, iTextureID
|
|
IF GetComponentForFamilyMember(FC_AMANDA_LEGS_5, eThisFamMember, ePedCompID, iDrawableId, iTextureID)
|
|
|
|
IF (eFamilyMember = eThisFamMember)
|
|
IF GET_PED_DRAWABLE_VARIATION(PedIndex, ePedCompID) = iDrawableId
|
|
AND GET_PED_TEXTURE_VARIATION(PedIndex, ePedCompID) = iTextureID
|
|
|
|
IF IS_SCENARIO_TYPE_ENABLED(scenarioTypeName)
|
|
CPRINTLN(DEBUG_FAMILY, "disable \"", scenarioTypeName, "\" for heels...")
|
|
|
|
SET_SCENARIO_TYPE_ENABLED(scenarioTypeName, FALSE)
|
|
bEnableScenarioType = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_COLLISION_MARKED_OUTSIDE(GET_ENTITY_COORDS(PedIndex, FALSE))
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PedIndex, TRUE)
|
|
CLEAR_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT)
|
|
CLEAR_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_BUMP)
|
|
|
|
// TASK_WANDER_IN_AREA(PedIndex, GET_ENTITY_COORDS(PedIndex, FALSE), 40.0)
|
|
TASK_WANDER_STANDARD(PedIndex)
|
|
|
|
iWanderStage = iCONST_WANDER_1_wander
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE iCONST_WANDER_1_wander
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("1. iWander - Wander", GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_PINK)
|
|
// DrawDebugFamilySphere(vSequencePos, fWanderRad, HUD_COLOUR_PINK, 0.25)
|
|
#ENDIF
|
|
|
|
IF PRIVATE_Update_Family_Find_Event(PedIndex, eFamilyMember, GET_ENTITY_COORDS(PedIndex, FALSE), 40.0)
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_Find_Event (wander)!!!")
|
|
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
|
|
iWanderStage = 0
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF NOT DOES_SCENARIO_EXIST_IN_AREA(GET_ENTITY_COORDS(PedIndex), fDIST_SCENARIO, TRUE)
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("NO scenario in area", GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_PINK)
|
|
#ENDIF
|
|
|
|
ELIF IS_SCENARIO_OCCUPIED(GET_ENTITY_COORDS(PedIndex), fDIST_SCENARIO, TRUE)
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("scenario OCCUPIED in area", GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_PINK)
|
|
#ENDIF
|
|
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("scenario in area", GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_PINK)
|
|
#ENDIF
|
|
|
|
|
|
// IF eFamilyMember = FM_MICHAEL_SON
|
|
// IF IS_SCENARIO_TYPE_ENABLED(scenarioTypeName)
|
|
// CPRINTLN(DEBUG_FAMILY, "disable \"")
|
|
// CPRINTLN(DEBUG_FAMILY, scenarioTypeName)
|
|
// CPRINTLN(DEBUG_FAMILY, "\" for jimmy...")
|
|
// CprintNL()
|
|
//
|
|
// SET_SCENARIO_TYPE_ENABLED(scenarioTypeName, FALSE)
|
|
// bEnableScenarioType = FALSE
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
IF bEnableScenarioType
|
|
// IF NOT IS_SCENARIO_TYPE_ENABLED(scenarioTypeName)
|
|
// CPRINTLN(DEBUG_FAMILY, "reenable \"")
|
|
// CPRINTLN(DEBUG_FAMILY, scenarioTypeName)
|
|
// CPRINTLN(DEBUG_FAMILY, "\" (not heels, not jimmy)...")
|
|
// CprintNL()
|
|
//
|
|
// SET_SCENARIO_TYPE_ENABLED(scenarioTypeName, TRUE)
|
|
// ENDIF
|
|
ENDIF
|
|
|
|
IF (g_eCurrentSafehouseActivity = SA_MICHAEL_SOFA)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(scenarioTypeName)
|
|
AND IS_SCENARIO_TYPE_ENABLED(scenarioTypeName)
|
|
CPRINTLN(DEBUG_FAMILY, "disable \"", scenarioTypeName, "\" for sofa activity...")
|
|
|
|
SET_SCENARIO_TYPE_ENABLED(scenarioTypeName, FALSE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_USE_NEAREST_SCENARIO_TO_POS) <> PERFORMING_TASK)
|
|
TASK_USE_NEAREST_SCENARIO_TO_COORD(PedIndex,
|
|
GET_ENTITY_COORDS(PedIndex), fDIST_SCENARIO, 0)
|
|
ELSE
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
|
|
iWanderStage = iCONST_WANDER_2_scenario
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) = PERFORMING_TASK)
|
|
|
|
NAVMESH_ROUTE_RESULT enavmesh_route_result
|
|
FLOAT fOut_DistanceRemaining
|
|
INT iOut_ThisIsLastRouteSection
|
|
enavmesh_route_result = GET_NAVMESH_ROUTE_DISTANCE_REMAINING(PedIndex, fOut_DistanceRemaining, iOut_ThisIsLastRouteSection)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("navmesh...", GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_PINK)
|
|
|
|
str = "navtask["
|
|
SWITCH enavmesh_route_result
|
|
CASE NAVMESHROUTE_TASK_NOT_FOUND str += "TASK_NOT_FOUND" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_NOT_YET_TRIED str += "ROUTE_NOT_YET_TRIED" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_NOT_FOUND str += "ROUTE_NOT_FOUND" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_FOUND str += "ROUTE_FOUND" BREAK
|
|
DEFAULT
|
|
str += ENUM_TO_INT(enavmesh_route_result)
|
|
BREAK
|
|
ENDSWITCH
|
|
str += ", "
|
|
str += GET_STRING_FROM_FLOAT(fOut_DistanceRemaining)
|
|
str += "m, s:"
|
|
str += (iOut_ThisIsLastRouteSection)
|
|
str += "]"
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 5, HUD_COLOUR_BLUE)
|
|
#ENDIF
|
|
|
|
IF enavmesh_route_result = NAVMESHROUTE_ROUTE_NOT_FOUND
|
|
VECTOR vRandomCoord
|
|
vRandomCoord = PRIVATE_get_random_family_point(PedIndex, eFamilyMember, FALSE)
|
|
|
|
CLEAR_PED_TASKS(PedIndex)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, vRandomCoord, PEDMOVE_WALK,
|
|
Time, Radius)
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "vRandomCoord: ", vRandomCoord)
|
|
|
|
iWanderStage = iCONST_WANDER_0_navmesh
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_IN_AREA) = PERFORMING_TASK)
|
|
OR (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_STANDARD) = PERFORMING_TASK)
|
|
NAVMESH_ROUTE_RESULT enavmesh_route_result
|
|
FLOAT fOut_DistanceRemaining
|
|
INT iOut_ThisIsLastRouteSection
|
|
enavmesh_route_result = GET_NAVMESH_ROUTE_DISTANCE_REMAINING(PedIndex, fOut_DistanceRemaining, iOut_ThisIsLastRouteSection)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = "wandtask["
|
|
SWITCH enavmesh_route_result
|
|
CASE NAVMESHROUTE_TASK_NOT_FOUND str += "TASK_NOT_FOUND" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_NOT_YET_TRIED str += "ROUTE_NOT_YET_TRIED" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_NOT_FOUND str += "ROUTE_NOT_FOUND" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_FOUND str += "ROUTE_FOUND" BREAK
|
|
DEFAULT
|
|
str += ENUM_TO_INT(enavmesh_route_result)
|
|
BREAK
|
|
ENDSWITCH
|
|
str += ", "
|
|
str += GET_STRING_FROM_FLOAT(fOut_DistanceRemaining)
|
|
str += "m, s:"
|
|
str += (iOut_ThisIsLastRouteSection)
|
|
str += "]"
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 5, HUD_COLOUR_BLUE)
|
|
#ENDIF
|
|
|
|
IF enavmesh_route_result = NAVMESHROUTE_ROUTE_NOT_FOUND
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, PRIVATE_get_random_family_point(PedIndex, eFamilyMember, TRUE),
|
|
PEDMOVE_WALK, Time, Radius)
|
|
iWanderStage = iCONST_WANDER_0_navmesh
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "NAVMESHROUTE_ROUTE_NOT_FOUND (wandmiss)")
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PED_RAGDOLL(PedIndex)
|
|
SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT|RBF_PLAYER_BUMP)
|
|
|
|
iWanderStage = iCONST_WANDER_0_navmesh
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_IN_AREA) = PERFORMING_TASK)
|
|
OR (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_STANDARD) = PERFORMING_TASK)
|
|
OR (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) = PERFORMING_TASK)
|
|
OR (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_WANDER_STANDARD) = PERFORMING_TASK)
|
|
|
|
ELSE
|
|
iWanderStage = iCONST_WANDER_0_navmesh
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
BREAK
|
|
CASE iCONST_WANDER_2_scenario
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("2. iWander - Scenario", GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_BLUE)
|
|
#ENDIF
|
|
|
|
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_USE_NEAREST_SCENARIO_TO_POS) <> PERFORMING_TASK)
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("not performing...", GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_BLUE)
|
|
#ENDIF
|
|
|
|
IF NOT (g_eCurrentSafehouseActivity = SA_MICHAEL_SOFA)
|
|
IF DOES_SCENARIO_EXIST_IN_AREA(GET_ENTITY_COORDS(PedIndex), fDIST_SCENARIO, TRUE)
|
|
TASK_USE_NEAREST_SCENARIO_TO_COORD(PedIndex,
|
|
GET_ENTITY_COORDS(PedIndex), fDIST_SCENARIO, 0)
|
|
|
|
NAVMESH_ROUTE_RESULT enavmesh_route_result
|
|
FLOAT fOut_DistanceRemaining
|
|
INT iOut_ThisIsLastRouteSection
|
|
enavmesh_route_result = GET_NAVMESH_ROUTE_DISTANCE_REMAINING(PedIndex, fOut_DistanceRemaining, iOut_ThisIsLastRouteSection)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = "wandtask["
|
|
SWITCH enavmesh_route_result
|
|
CASE NAVMESHROUTE_TASK_NOT_FOUND str += "TASK_NOT_FOUND" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_NOT_YET_TRIED str += "ROUTE_NOT_YET_TRIED" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_NOT_FOUND str += "ROUTE_NOT_FOUND" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_FOUND str += "ROUTE_FOUND" BREAK
|
|
DEFAULT
|
|
str += ENUM_TO_INT(enavmesh_route_result)
|
|
BREAK
|
|
ENDSWITCH
|
|
str += ", "
|
|
str += GET_STRING_FROM_FLOAT(fOut_DistanceRemaining)
|
|
str += "m, s:"
|
|
str += (iOut_ThisIsLastRouteSection)
|
|
str += "]"
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 5, HUD_COLOUR_BLUE)
|
|
#ENDIF
|
|
|
|
IF enavmesh_route_result = NAVMESHROUTE_ROUTE_NOT_FOUND
|
|
or enavmesh_route_result = NAVMESHROUTE_TASK_NOT_FOUND
|
|
VECTOR vRandomCoord
|
|
vRandomCoord = PRIVATE_get_random_family_point(PedIndex, eFamilyMember, TRUE)
|
|
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, vRandomCoord,
|
|
PEDMOVE_WALK, Time, Radius)
|
|
iWanderStage = iCONST_WANDER_0_navmesh
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "NAVMESHROUTE_ROUTE_NOT_FOUND (wandmiss)")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
ELSE
|
|
iWanderStage = iCONST_WANDER_1_wander
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELSE
|
|
VECTOR vRandomCoord
|
|
vRandomCoord = PRIVATE_get_random_family_point(PedIndex, eFamilyMember, TRUE)
|
|
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, vRandomCoord,
|
|
PEDMOVE_WALK, Time, Radius)
|
|
iWanderStage = iCONST_WANDER_0_navmesh
|
|
|
|
CPRINTLN(DEBUG_FAMILY, "NAVMESHROUTE_ROUTE_NOT_FOUND (wandmiss)")
|
|
RETURN FALSE
|
|
ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("performing...", GET_ENTITY_COORDS(PedIndex, FALSE), 4, HUD_COLOUR_BLUE)
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF NOT PED_HAS_USE_SCENARIO_TASK(PedIndex)
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyTextWithOffset("not has task...", GET_ENTITY_COORDS(PedIndex, FALSE), 5, HUD_COLOUR_BLUE)
|
|
#ENDIF
|
|
|
|
ELSE
|
|
NAVMESH_ROUTE_RESULT enavmesh_route_result
|
|
FLOAT fOut_DistanceRemaining
|
|
INT iOut_ThisIsLastRouteSection
|
|
enavmesh_route_result = GET_NAVMESH_ROUTE_DISTANCE_REMAINING(PedIndex, fOut_DistanceRemaining, iOut_ThisIsLastRouteSection)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
str = "scenario["
|
|
SWITCH enavmesh_route_result
|
|
CASE NAVMESHROUTE_TASK_NOT_FOUND str += "TASK_NOT_FOUND" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_NOT_YET_TRIED str += "ROUTE_NOT_YET_TRIED" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_NOT_FOUND str += "ROUTE_NOT_FOUND" BREAK
|
|
CASE NAVMESHROUTE_ROUTE_FOUND str += "ROUTE_FOUND" BREAK
|
|
DEFAULT
|
|
str += ENUM_TO_INT(enavmesh_route_result)
|
|
BREAK
|
|
ENDSWITCH
|
|
str += ", "
|
|
str += GET_STRING_FROM_FLOAT(fOut_DistanceRemaining)
|
|
str += "m, s:"
|
|
str += (iOut_ThisIsLastRouteSection)
|
|
str += "]"
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 5, HUD_COLOUR_BLUE)
|
|
#ENDIF
|
|
|
|
IF PRIVATE_Update_Family_Find_Event(PedIndex, eFamilyMember, GET_ENTITY_COORDS(PedIndex, FALSE), 40.0)
|
|
CPRINTLN(DEBUG_FAMILY, "PRIVATE_Update_Family_Find_Event (scenario)!!!")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF (iOut_ThisIsLastRouteSection > 0)
|
|
IF IS_SCENARIO_OCCUPIED(GET_ENTITY_COORDS(PedIndex), fOut_DistanceRemaining+0.5, TRUE)
|
|
|
|
enavmesh_route_result = enavmesh_route_result
|
|
|
|
CLEAR_PED_TASKS(PedIndex)
|
|
iWanderStage = iCONST_WANDER_1_wander
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD
|
|
str = "iWanderStage: "
|
|
str += iWanderStage
|
|
DrawDebugFamilyTextWithOffset(str, GET_ENTITY_COORDS(PedIndex, FALSE), 2, HUD_COLOUR_ORANGELIGHT)
|
|
#ENDIF
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
eFamilyMember = eFamilyMember
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PRIVATE_Update_Family_Cop(PED_INDEX CrookPedIndex, enumFamilyMember eFamilyMember, PED_INDEX &CopPedIndex)
|
|
IF NOT DOES_ENTITY_EXIST(CopPedIndex)
|
|
// CLEAR_PED_TASKS(CopPedIndex)
|
|
RETURN FALSE //TRUE
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(CopPedIndex)
|
|
IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
//
|
|
WEAPON_TYPE TypeOfWeapon = WEAPONTYPE_PISTOL
|
|
IF NOT HAS_PED_GOT_WEAPON(CrookPedIndex, TypeOfWeapon)
|
|
GIVE_WEAPON_TO_PED(CrookPedIndex, TypeOfWeapon, INFINITE_AMMO, FALSE)
|
|
ENDIF
|
|
IF NOT HAS_PED_GOT_WEAPON(CopPedIndex, TypeOfWeapon)
|
|
GIVE_WEAPON_TO_PED(CopPedIndex, TypeOfWeapon, INFINITE_AMMO, FALSE)
|
|
ENDIF
|
|
|
|
IF IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), CopPedIndex)
|
|
SET_PLAYER_WANTED_LEVEL_NO_DROP(PLAYER_ID(), 1)
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_FACING_PED(CopPedIndex, CrookPedIndex, 15.0)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(CopPedIndex, CrookPedIndex)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyLine(GET_ENTITY_COORDS(CopPedIndex), GET_ENTITY_COORDS(CrookPedIndex), HUD_COLOUR_REDDARK)
|
|
#ENDIF
|
|
|
|
ELSE
|
|
IF NOT PED_HAS_USE_SCENARIO_TASK(CopPedIndex)
|
|
TASK_START_SCENARIO_IN_PLACE(CopPedIndex, "WORLD_VEHICLE_POLICE_NEXT_TO_CAR")
|
|
ENDIF
|
|
ENDIF
|
|
// IF NOT IS_PED_FACING_PED(CrookPedIndex, CopPedIndex, 30.0)
|
|
// TASK_TURN_PED_TO_FACE_ENTITY(CrookPedIndex, CopPedIndex)
|
|
// ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DrawDebugFamilyLine(GET_ENTITY_COORDS(CopPedIndex), GET_ENTITY_COORDS(CrookPedIndex), HUD_COLOUR_BLUEDARK)
|
|
#ENDIF
|
|
ELSE
|
|
//
|
|
TASK_COMBAT_PED(CopPedIndex, PLAYER_PED_ID())
|
|
SET_PED_KEEP_TASK(CopPedIndex, TRUE)
|
|
SET_PED_AS_NO_LONGER_NEEDED(CopPedIndex)
|
|
|
|
PRIVATE_Set_Current_Family_Member_Event(eFamilyMember, FE_ANY_find_family_event)
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|