Files
2025-09-29 00:52:08 +02:00

314 lines
9.1 KiB
Python
Executable File

// launcher_Yoga.sc
CONST_INT LAUNCHER_POINT_ENTER 1 // Tells the script that you kick it off by entering a point.
CONST_INT LAUNCHER_SNAP_CHECKPOINT_TO_GROUND 1
CONST_INT LAUNCHER_DONT_CHECK_RELOAD_RANGE 1
CONST_INT LAUNCHER_CHAR_REQUIRED 1
CONST_INT LAUNCHER_CLEAR_SCENE_ON_START 1
USING "generic_launcher_header.sch"
// PURPOSE: Location enum for Yoga minigame
// TODO: Share for launcher and main script when required
ENUM YOGA_LOCATION
YOGA_MICHAELS_HOUSE,
YOGA_NORTH_COAST,
YOGA_INVALID
ENDENUM
YOGA_LOCATION eYogaLocation
/// PURPOSE: Specifies details of minigame specific objects.
STRUCT OBJECT_STRUCT
OBJECT_INDEX ObjectIndex //Object index
MODEL_NAMES ModelName //Object model
VECTOR vPosition //Object postion
VECTOR vRotation //Object rotation
ENDSTRUCT
OBJECT_STRUCT objYogaMat
//PED_INDEX TempPed
// Debug widget
#IF IS_DEBUG_BUILD
// Anim widgets
WIDGET_GROUP_ID widgetGroup
WIDGET_GROUP_ID widgetGroupMat
FLOAT fYogaMatPosX = 0.0
FLOAT fYogaMatPosY = 0.0
FLOAT fYogaMatPosZ = 0.0
FLOAT fYogaMatRotX = 0.0
FLOAT fYogaMatRotY = 0.0
FLOAT fYogaMatRotZ = 0.0
BOOL bEditMode = FALSE
BOOL bOutputData
PROC CLEANUP_WIDGET()
IF DOES_WIDGET_GROUP_EXIST(widgetGroup)
DELETE_WIDGET_GROUP(widgetGroup)
ENDIF
IF DOES_WIDGET_GROUP_EXIST(widgetGroupMat)
DELETE_WIDGET_GROUP(widgetGroupMat)
ENDIF
ENDPROC
PROC INIT_WIDGET()
// Setup widget
CLEANUP_WIDGET()
widgetGroup = START_WIDGET_GROUP("Yoga Launcher")
widgetGroupMat = START_WIDGET_GROUP("Yoga Mat")
ADD_WIDGET_STRING("Position")
ADD_WIDGET_FLOAT_SLIDER("Pos X:", fYogaMatPosX, -7000, 7000, 0.1)
ADD_WIDGET_FLOAT_SLIDER("Pos Y:", fYogaMatPosY, -7000, 7000, 0.1)
ADD_WIDGET_FLOAT_SLIDER("Pos Z:", fYogaMatPosZ, -7000, 7000, 0.1)
ADD_WIDGET_STRING("Rotation")
ADD_WIDGET_FLOAT_SLIDER("Rot X", fYogaMatRotX, -360, 360, 1)
ADD_WIDGET_FLOAT_SLIDER("Rot Y", fYogaMatRotY, -360, 360, 1)
ADD_WIDGET_FLOAT_SLIDER("Rot Z", fYogaMatRotZ, -360, 360, 1)
ADD_WIDGET_BOOL("Edit Mode", bEditMode)
ADD_WIDGET_BOOL("Output Data", bOutputData)
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
ENDPROC
PROC UPDATE_WIDGET()
// Allow editing of Yoga Mat
IF bEditMode
IF DOES_ENTITY_EXIST(objYogaMat.ObjectIndex)
SET_ENTITY_COORDS(objYogaMat.ObjectIndex, <<fYogaMatPosX, fYogaMatPosY, fYogaMatPosZ>>)
SET_ENTITY_ROTATION(objYogaMat.ObjectIndex, <<fYogaMatRotX, fYogaMatRotY, fYogaMatRotZ>>)
ENDIF
ENDIF
// Output position and location to temp_debug.txt
IF bOutputData
VECTOR vPos = <<fYogaMatPosX, fYogaMatPosY, fYogaMatPosZ>>
VECTOR vRot = <<fYogaMatRotX, fYogaMatRotY, fYogaMatRotZ>>
OPEN_DEBUG_FILE()
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("objYogaMat.vPosition = ")
SAVE_VECTOR_TO_DEBUG_FILE(vPos)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("objYogaMat.vRotation = ")
SAVE_VECTOR_TO_DEBUG_FILE(vRot)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("objYogaMat.ModelName = PROP_YOGA_MAT_03")
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("#IF IS_DEBUG_BUILD")
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" fYogaMatPosX = ")
SAVE_FLOAT_TO_DEBUG_FILE(fYogaMatPosX)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" fYogaMatPosY = ")
SAVE_FLOAT_TO_DEBUG_FILE(fYogaMatPosY)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" fYogaMatPosZ = ")
SAVE_FLOAT_TO_DEBUG_FILE(fYogaMatPosZ)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" fYogaMatRotX = ")
SAVE_FLOAT_TO_DEBUG_FILE(fYogaMatRotX)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" fYogaMatRotY = ")
SAVE_FLOAT_TO_DEBUG_FILE(fYogaMatRotY)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" fYogaMatRotZ = ")
SAVE_FLOAT_TO_DEBUG_FILE(fYogaMatRotZ)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("#ENDIF")
SAVE_NEWLINE_TO_DEBUG_FILE()
CLOSE_DEBUG_FILE()
bOutputData = FALSE
ENDIF
ENDPROC
#ENDIF
FUNC YOGA_LOCATION GET_NEAREST_YOGA_LOCATION()
IF IS_PLAYER_PLAYING(PLAYER_ID())
// Player's current position
VECTOR vCurrentPos
vCurrentPos = GET_ENTITY_COORDS(GET_PLAYER_PED(PLAYER_ID()))
// Yoga locations
VECTOR vLocatePos[2]
vLocatePos[0] = <<-790.906, 186.293, 71.835>>
vLocatePos[1] = <<2862.15, 5945.49, 357.11>>
// Distance from locations
FLOAT fDistToYoga[2]
fDistToYoga[0] = VDIST2(vCurrentPos, vLocatePos[0])
fDistToYoga[1] = VDIST2(vCurrentPos, vLocatePos[1])
// Work out nearest Yoga location
// NOTE: If we have more locations - we'll change this over to a
// simple loop to iterate through them all.
IF fDistToYoga[0] < fDistToYoga[1]
RETURN YOGA_MICHAELS_HOUSE
ELSE
RETURN YOGA_NORTH_COAST
ENDIF
ENDIF
RETURN YOGA_INVALID
ENDFUNC
PROC LAUNCHER_CUSTOM_SCRIPT_INIT()
scriptName = "Yoga"
helpButtonPress = "PLAY_YOGA"
eMinigame = MINIGAME_YOGA
fLaunchScriptDist = 2.5
fLauncherShutdownDist = 20.0
#IF IS_DEBUG_BUILD
INIT_WIDGET()
#ENDIF
iStackSize = MISSION_STACK_SIZE
// Setup Yoga location
eYogaLocation = GET_NEAREST_YOGA_LOCATION()
IF eYogaLocation = YOGA_MICHAELS_HOUSE
eLauncherStaticBlip = STATIC_BLIP_MINIGAME_YOGA
CPRINTLN(DEBUG_AMBIENT, "YOGA: Launched at Michael's House")
objYogaMat.vPosition = <<-791.0036, 186.3552, 71.8295>>
objYogaMat.vRotation = << 0.0, 0.0, -87.1403>>
objYogaMat.ModelName = PROP_YOGA_MAT_03
#IF IS_DEBUG_BUILD
fYogaMatPosX = -791.53
fYogaMatPosY = 186.37
fYogaMatPosZ = 71.83
fYogaMatRotX = 0.0
fYogaMatRotY = 0.0
fYogaMatRotZ = 0.0
#ENDIF
ELIF eYogaLocation = YOGA_NORTH_COAST
eLauncherStaticBlip = STATIC_BLIP_MINIGAME_YOGA2
CPRINTLN(DEBUG_AMBIENT, "YOGA: Launched at North Coast")
objYogaMat.vPosition = << 2861.47, 5945.90, 357.06 >>
objYogaMat.vRotation = << 0.0, -0.5, 70.0 >>
objYogaMat.ModelName = PROP_YOGA_MAT_03
#IF IS_DEBUG_BUILD
fYogaMatPosX = 2862.0000
fYogaMatPosY = 5945.7002
fYogaMatPosZ = 357.1000
fYogaMatRotX = 0.0000
fYogaMatRotY = -0.5000
fYogaMatRotZ = -13.8000
#ENDIF
ELSE
CPRINTLN(DEBUG_AMBIENT, "YOGA: Unable to find location - IS_PLAYER_PLAYING() returned FALSE")
ENDIF
// Yoga can only be done as Michael.
characterRequired = CHAR_MICHAEL
ENDPROC
// Scene setup loading
PROC LAUNCHER_CUSTOM_REQUEST_ASSETS()
IF NOT IS_MODEL_VALID(objYogaMat.ModelName)
EXIT
ENDIF
REQUEST_MODEL(objYogaMat.ModelName)
ENDPROC
FUNC BOOL LAUNCHER_CUSTOM_ASSETS_LOADED()
IF NOT IS_MODEL_VALID(objYogaMat.ModelName)
RETURN FALSE
ENDIF
RETURN HAS_MODEL_LOADED(objYogaMat.ModelName)
ENDFUNC
PROC LAUNCHER_CUSTOM_SPAWN_SCENE()
IF NOT DOES_ENTITY_EXIST(objYogaMat.ObjectIndex)
objYogaMat.ObjectIndex = CREATE_OBJECT(objYogaMat.ModelName, objYogaMat.vPosition)
SET_ENTITY_COORDS_NO_OFFSET(objYogaMat.ObjectIndex, objYogaMat.vPosition)
SET_ENTITY_ROTATION(objYogaMat.ObjectIndex, objYogaMat.vRotation)
FREEZE_ENTITY_POSITION(objYogaMat.ObjectIndex, TRUE)
ENDIF
ENDPROC
PROC LAUNCHER_CUSTOM_APPROACH_WAIT()
#IF IS_DEBUG_BUILD
UPDATE_WIDGET()
#ENDIF
IF eYogaLocation = YOGA_NORTH_COAST
IF IS_SCENARIO_TYPE_ENABLED("WORLD_MOUNTAIN_LION_WANDER")
CPRINTLN(DEBUG_AMBIENT, "YOGA: Cougar's disabled!")
SET_SCENARIO_TYPE_ENABLED("WORLD_MOUNTAIN_LION_WANDER",FALSE )
SET_PED_MODEL_IS_SUPPRESSED(A_C_MTLION,TRUE)
ENDIF
/*
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_SCENARIO_PEDS_TO_BE_RETURNED_BY_NEXT_COMMAND( TRUE )
IF GET_CLOSEST_PED( GET_ENTITY_COORDS(PLAYER_PED_ID()), 15, TRUE, FALSE, TempPed )
//CPRINTLN(DEBUG_AMBIENT, "YOGA: Got a ped")
IF DOES_ENTITY_EXIST(TempPed)
//CPRINTLN(DEBUG_AMBIENT, "YOGA: Ped exists")
IF NOT IS_PED_INJURED(TempPed)
//CPRINTLN(DEBUG_AMBIENT, "YOGA: Ped is ok ", GET_ENTITY_MODEL(TempPed))
IF GET_ENTITY_MODEL(TempPed) = A_C_MTLION
//CPRINTLN(DEBUG_AMBIENT, "YOGA: Ped is a mountain lion")
IF NOT IS_PED_FLEEING(TempPed)
CPRINTLN(DEBUG_AMBIENT, "YOGA: Telling cougar to run away")
TASK_SMART_FLEE_PED(TempPed, PLAYER_PED_ID(), 300, -1 )
ENDIF
ENDIF
ENDIF
ENDIF
SET_PED_AS_NO_LONGER_NEEDED(TempPed)
ENDIF
ENDIF
*/
ENDIF
ENDPROC
PROC LAUNCHER_CUSTOM_CLEAR_SCENE()
SET_MODEL_AS_NO_LONGER_NEEDED(objYogaMat.ModelName)
IF DOES_ENTITY_EXIST(objYogaMat.ObjectIndex)
//DELETE_OBJECT(objYogaMat.ObjectIndex)
SET_OBJECT_AS_NO_LONGER_NEEDED(objYogaMat.ObjectIndex)
ENDIF
ENDPROC
PROC LAUNCHER_CUSTOM_CLEANUP()
IF NOT IS_SCENARIO_TYPE_ENABLED("WORLD_MOUNTAIN_LION_WANDER")
CPRINTLN(DEBUG_AMBIENT, "YOGA: Cougar's enabled!")
SET_SCENARIO_TYPE_ENABLED("WORLD_MOUNTAIN_LION_WANDER",TRUE)
SET_PED_MODEL_IS_SUPPRESSED(A_C_MTLION,FALSE)
ENDIF
ENDPROC
USING "generic_launcher.sch"