Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Created July 7, 2020 06:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save JuniorDjjr/88ab8f87531e7da874d392ad4119c06d to your computer and use it in GitHub Desktop.
Save JuniorDjjr/88ab8f87531e7da874d392ad4119c06d to your computer and use it in GitHub Desktop.
// by Junior_Djjr - MixMods.com.br
// You need: https://forum.mixmods.com.br/f16-utilidades/t179-gta3script-while-true-return_true-e-return_false
SCRIPT_START
{
LVAR_INT scplayer iSeat iSide iVehModel iTotalSeats hChar hVeh iWeaponType iPassenger iKey1 iKey2 iLastModel pModelKey
LVAR_FLOAT f x y z fOffsetX fOffsetY fOffsetZ
GET_PLAYER_CHAR 0 scplayer
IF NOT READ_INT_FROM_INI_FILE "CLEO/Turret (Junior_Djjr).ini" "Settings" "Key1" (iKey1)
OR NOT READ_INT_FROM_INI_FILE "CLEO/Turret (Junior_Djjr).ini" "Settings" "Key2" (iKey2)
PRINT_STRING_NOW "Error: Unable to read 'Turret (Junior_Djjr).ini'" 5000
TERMINATE_THIS_CUSTOM_SCRIPT
ENDIF
WHILE TRUE
WAIT 0
IF IS_KEY_PRESSED iKey1
AND IS_KEY_PRESSED iKey2
IF IS_CHAR_SITTING_IN_ANY_CAR scplayer
GET_CAR_CHAR_IS_USING scplayer hVeh
GOSUB GetSeat
GOSUB GetSideBySeat
GET_CURRENT_CHAR_WEAPON scplayer iWeaponType
WARP_CHAR_FROM_CAR_TO_COORD scplayer 0.0 0.0 0.0
IF DOES_VEHICLE_EXIST hVeh
AND NOT IS_CHAR_DEAD scplayer
ATTACH_CHAR_TO_CAR scplayer hVeh x y z iSide 140.0 iWeaponType
GOSUB WaitKey
WHILE DOES_VEHICLE_EXIST hVeh
AND NOT IS_CHAR_DEAD scplayer
WAIT 0
IF IS_KEY_PRESSED iKey1
AND IS_KEY_PRESSED iKey2
DETACH_CHAR_FROM_CAR scplayer
IF iSeat = -1
WARP_CHAR_INTO_CAR scplayer hVeh
ELSE
WARP_CHAR_INTO_CAR_AS_PASSENGER scplayer hVeh iSeat
ENDIF
GOSUB WaitKey
BREAK
ENDIF
ENDWHILE
ENDIF
ENDIF
ENDIF
ENDWHILE
WaitKey:
WHILE IS_KEY_PRESSED iKey1
AND IS_KEY_PRESSED iKey2
WAIT 0
ENDWHILE
RETURN
GetSeat:
iSeat = -1
GET_DRIVER_OF_CAR hVeh hChar
IF hChar = scplayer
RETURN
ENDIF
GET_MAXIMUM_NUMBER_OF_PASSENGERS hVeh iTotalSeats
WHILE iSeat < iTotalSeats
GET_CHAR_IN_CAR_PASSENGER_SEAT hVeh iSeat hChar
IF hChar = scplayer
RETURN
ENDIF
iTotalSeats++
ENDWHILE
RETURN
GetSideBySeat:
GET_CAR_MODEL hVeh iVehModel
IF NOT iLastModel = iVehModel
iLastModel = iVehModel
GET_LABEL_POINTER Buffer pModelKey
STRING_FORMAT pModelKey "Model%i" iVehModel
IF NOT READ_FLOAT_FROM_INI_FILE "Turret (Junior_Djjr).ini" $pModelKey "OffsetX" (fOffsetX)
READ_FLOAT_FROM_INI_FILE "Turret (Junior_Djjr).ini" "Default" "OffsetX" (fOffsetX)
ENDIF
IF NOT READ_FLOAT_FROM_INI_FILE "Turret (Junior_Djjr).ini" $pModelKey "OffsetY" (fOffsetY)
READ_FLOAT_FROM_INI_FILE "Turret (Junior_Djjr).ini" "Default" "OffsetY" (fOffsetY)
ENDIF
IF NOT READ_FLOAT_FROM_INI_FILE "Turret (Junior_Djjr).ini" $pModelKey "OffsetZ" (fOffsetZ)
READ_FLOAT_FROM_INI_FILE "Turret (Junior_Djjr).ini" "Default" "OffsetZ" (fOffsetZ)
ENDIF
ENDIF
GET_MODEL_DIMENSIONS iVehModel x y z z z z
ABS_LVAR_FLOAT x
x += fOffsetX
y = fOffsetY
z = fOffsetZ
SWITCH iSeat
CASE -1 // driver
CASE 1 // lr
iSide = FACING_LEFT
x *= -1.0
BREAK
CASE 0 // rf
CASE 2 // rr
iSide = FACING_RIGHT
BREAK
DEFAULT
iSide = FACING_FORWARD
BREAK
ENDSWITCH
IF iSeat = 1 // lr
OR iSeat = 2 // rr
y -= 0.5
ENDIF
// Just to make a little better for bus (not even tested)
IF iSeat > 2
f =# iSeat
f -= 2.0
f *= 0.5
y -= f
ENDIF
RETURN
Buffer:
DUMP
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ENDDUMP
}
SCRIPT_END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment