Last active
January 5, 2024 17:41
-
-
Save JuniorDjjr/731b8641ba4e9688d87402464b2765d2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// You need: https://forum.mixmods.com.br/f141-gta3script-cleo/t5206-como-criar-scripts-com-cleoplus | |
SCRIPT_START | |
{ | |
LVAR_INT i j scplayer hVeh hChar iPlayerId bRulesFlags | |
LVAR_FLOAT f car_x car_y car_z x y z fDistance fTimeOnSidewalk[2] fSpeed fDecreaseEase[2] fFinalDecreaseValue fCarHighSpeedLimit fCarInSidewalkTimeLimit | |
CONST_INT FLAG_CAR_HIGH_SPEED 0 | |
CONST_INT FLAG_CAR_IN_SIDEWALK 1 | |
CONST_INT FLAG_DRIVE_EMERGENCY_VEHICLES 2 | |
CONST_INT FLAG_DRIVE_EMERGENCY_VEHICLES_CONSIDER_OUTFIT 3 | |
WAIT 1000 | |
IF READ_INT_FROM_INI_FILE "CLEO\Rules.ini" "CarHighSpeed" "Enabled" (i) | |
AND i = TRUE | |
IF READ_FLOAT_FROM_INI_FILE "CLEO\Rules.ini" "CarHighSpeed" "SpeedLimit" (fCarHighSpeedLimit) | |
SET_LOCAL_VAR_BIT_CONST bRulesFlags FLAG_CAR_HIGH_SPEED | |
ENDIF | |
ENDIF | |
IF READ_INT_FROM_INI_FILE "CLEO\Rules.ini" "CarInSidewalk" "Enabled" (i) | |
AND i = TRUE | |
IF READ_FLOAT_FROM_INI_FILE "CLEO\Rules.ini" "CarInSidewalk" "TimeLimit" (fCarInSidewalkTimeLimit) | |
SET_LOCAL_VAR_BIT_CONST bRulesFlags FLAG_CAR_IN_SIDEWALK | |
ENDIF | |
ENDIF | |
IF READ_INT_FROM_INI_FILE "CLEO\Rules.ini" "DriveEmergencyCar" "Enabled" (i) | |
AND i = TRUE | |
SET_LOCAL_VAR_BIT_CONST bRulesFlags FLAG_DRIVE_EMERGENCY_VEHICLES | |
IF READ_INT_FROM_INI_FILE "CLEO\Rules.ini" "DriveEmergencyCar" "IgnoreIfCopOutfit" (i) | |
AND i = TRUE | |
SET_LOCAL_VAR_BIT_CONST bRulesFlags FLAG_DRIVE_EMERGENCY_VEHICLES_CONSIDER_OUTFIT | |
ENDIF | |
ENDIF | |
///////////////////////////////////////////////// | |
WHILE TRUE | |
WAIT 0 | |
// -- Simple 2 players adaptation | |
iPlayerId = 0 | |
GOSUB CheckAndStart | |
IF IS_2PLAYER_GAME_GOING_ON | |
iPlayerId = 1 | |
GOSUB CheckAndStart | |
ENDIF | |
ENDWHILE | |
CheckAndStart: | |
GET_PLAYER_CHAR iPlayerId scplayer | |
IF NOT IS_WANTED_LEVEL_GREATER iPlayerId 1 | |
IF IS_CHAR_SITTING_IN_ANY_CAR scplayer | |
STORE_CAR_CHAR_IS_IN_NO_SAVE scplayer (hVeh) | |
GET_DRIVER_OF_CAR hVeh (hChar) | |
IF hChar = scplayer | |
AND IS_PLAYER_CONTROL_ON iPlayerId | |
AND NOT IS_ON_SCRIPTED_CUTSCENE | |
AND NOT IS_ON_MISSION | |
GET_VEHICLE_SUBCLASS hVeh i | |
IF NOT i = VEHICLE_SUBCLASS_TRAIN | |
AND NOT i = VEHICLE_SUBCLASS_BMX | |
GET_CAR_SPEED hVeh (fSpeed) | |
GET_CAR_COORDINATES hVeh car_x car_y car_z | |
IF NOT i = VEHICLE_SUBCLASS_PLANE | |
AND NOT i = VEHICLE_SUBCLASS_HELI | |
GOSUB CarHighSpeed | |
GOSUB CarInSidewalk | |
IF fSpeed < 20.0 | |
GOSUB DriveEmergencyVehicles | |
ENDIF | |
ENDIF | |
ENDIF | |
ENDIF | |
ENDIF | |
ELSE | |
fTimeOnSidewalk[iPlayerId] = 0.0 | |
fDecreaseEase[iPlayerId] = 0.0 | |
ENDIF | |
RETURN | |
///////////////////////////////////////////////// | |
CarHighSpeed: | |
IF IS_LOCAL_VAR_BIT_SET_CONST bRulesFlags FLAG_CAR_HIGH_SPEED | |
//PRINT_FORMATTED_NOW "sp %.3f" 100 fSpeed | |
IF fSpeed > fCarHighSpeedLimit | |
GOSUB IsSeenByCop | |
ENDIF | |
ENDIF | |
RETURN | |
CarInSidewalk: | |
IF IS_LOCAL_VAR_BIT_SET_CONST bRulesFlags FLAG_CAR_IN_SIDEWALK | |
GET_CLOSEST_CHAR_NODE car_x car_y car_z (x y z) | |
GET_DISTANCE_BETWEEN_COORDS_3D car_x car_y car_z x y z (fDistance) | |
IF fDistance > 3.0 | |
fDecreaseEase[iPlayerId] +=@ 0.01 | |
IF fDecreaseEase[iPlayerId] > 1.0 | |
fDecreaseEase[iPlayerId] = 1.0 | |
ENDIF | |
f = fSpeed / 10.0 | |
IF f > 1.0 | |
f = 1.0 | |
ENDIF | |
fFinalDecreaseValue = fDecreaseEase[iPlayerId] * f | |
IF fFinalDecreaseValue > 0.0 | |
fTimeOnSidewalk[iPlayerId] -=@ fFinalDecreaseValue | |
ENDIF | |
IF fTimeOnSidewalk[iPlayerId] < 0.0 | |
fTimeOnSidewalk[iPlayerId] = 0.0 | |
ENDIF | |
//PRINT_FORMATTED_NOW "~r~%.1f - %.1f" 100 fTimeOnSidewalk[iPlayerId] fFinalDecreaseValue | |
ELSE | |
fDecreaseEase[iPlayerId] -=@ 0.1 | |
IF fDecreaseEase[iPlayerId] < 0.0 | |
fDecreaseEase[iPlayerId] = 0.0 | |
ENDIF | |
f = fSpeed / 20.0 | |
IF f > 1.0 | |
f = 1.0 | |
ENDIF | |
fTimeOnSidewalk[iPlayerId] +=@ f | |
IF fTimeOnSidewalk[iPlayerId] > fCarInSidewalkTimeLimit | |
fDistance = 100.0 | |
GOSUB IsSeenByCop | |
f = fCarInSidewalkTimeLimit * 2.0 // to avoid too high values | |
IF fTimeOnSidewalk[iPlayerId] > f | |
fTimeOnSidewalk[iPlayerId] = f | |
ENDIF | |
ENDIF | |
//PRINT_FORMATTED_NOW "~y~%.1f + %.1f" 100 fTimeOnSidewalk[iPlayerId] f | |
ENDIF | |
ENDIF | |
RETURN | |
DriveEmergencyVehicles: | |
IF IS_LOCAL_VAR_BIT_SET_CONST bRulesFlags FLAG_DRIVE_EMERGENCY_VEHICLES | |
IF IS_EMERGENCY_SERVICES_VEHICLE hVeh | |
GET_CAR_MODEL hVeh i | |
IF NOT i = 432 //rhino | |
AND NOT i = 601 //swatvan | |
IF IS_LOCAL_VAR_BIT_SET_CONST bRulesFlags FLAG_DRIVE_EMERGENCY_VEHICLES_CONSIDER_OUTFIT | |
GET_CHAR_MODEL scplayer i | |
IF IS_PLAYER_WEARING iPlayerId 17 POLICETR | |
RETURN | |
ENDIF | |
IF i >= 274 | |
AND i <= 288 | |
RETURN | |
ENDIF | |
ENDIF | |
fDistance = 20.0 | |
GOSUB IsSeenByCop | |
ENDIF | |
ENDIF | |
ENDIF | |
RETURN | |
IsSeenByCop: | |
IF GET_CLOSEST_COP_NEAR_CHAR scplayer fDistance TRUE TRUE TRUE TRUE (hChar) | |
GET_SCRIPT_TASK_STATUS hChar 0x5C0 (i) | |
IF i = 7 | |
TASK_LOOK_AT_VEHICLE hChar hVeh (3000) | |
ENDIF | |
ALTER_WANTED_LEVEL_NO_DROP iPlayerId 1 | |
RETURN_TRUE | |
RETURN | |
ENDIF | |
RETURN_FALSE | |
RETURN | |
} | |
SCRIPT_END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment