[SA] Improved Change Gear Anim v1.0
Enviado: 13 Jul 2020, 04:37
O Improved Change Gear Anim adiciona animações mais condizentes com a troca de marchas nos veículos do jogo, com cada marcha tendo sua própria animação.
Além do player, é aplicável a todos os outros motoristas aleatórios (não controlados por algum script).
Com cada um alternando seu estilo, segurando câmbio só quando necessário de forma correta, ou segurando após a troca de marcha, por mania mesmo.
Por causa da animação se sobrepor as animações dentro do carro, ao trocar de marchas virando o veículo, não aparecerá a animação de estar virando o volante.
Por enquanto o mod só faz isso, mas pretendo no futuro adicionar mais animações para outras ações dentro do carro.
Além do player, é aplicável a todos os outros motoristas aleatórios (não controlados por algum script).

Com cada um alternando seu estilo, segurando câmbio só quando necessário de forma correta, ou segurando após a troca de marcha, por mania mesmo.

O mod contém um .ini onde é possível configurar a velocidade da animação e o tempo que segura no câmbio.
Por causa da animação se sobrepor as animações dentro do carro, ao trocar de marchas virando o veículo, não aparecerá a animação de estar virando o volante.
Por enquanto o mod só faz isso, mas pretendo no futuro adicionar mais animações para outras ações dentro do carro.
Download
Necessário CLEO+
Necessário CLEO+
Source do mod (200+ lines)
SpoilerAbrir
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT flag scplayer userInt
LVAR_FLOAT userFloat
// -----
LVAR_INT i car gear last_gear
LVAR_FLOAT timing xfloat x y z
CONST_INT MOTORISTA 1
CONST_INT TOTALVARS 3
CONST_INT GEARUSER 1
LVAR_TEXT_LABEL16 anim
IF NOT READ_INT_FROM_INI_FILE "cleo/Improved Change Gear Anim.ini" "Config" "time" i
AND NOT READ_FLOAT_FROM_INI_FILE "cleo/Improved Change Gear Anim.ini" "Config" "AnimSpeed" xfloat
PRINT_STRING_NOW "~w~Improved Change Gear Anim: ~r~I cannot read my ini file, please verify." 4000
TERMINATE_THIS_CUSTOM_SCRIPT
ELSE
READ_INT_FROM_INI_FILE "cleo/Improved Change Gear Anim.ini" "Config" "time" userInt
READ_FLOAT_FROM_INI_FILE "cleo/Improved Change Gear Anim.ini" "Config" "AnimSpeed" userFloat
IF NOT userFloat = -1.0
userFloat *= 4.0
ELSE
userFloat = 4.0
ENDIF
ENDIF
SWITCH flag
CASE 0
STREAM_CUSTOM_SCRIPT "Improved Change Gear Anim (FilipeS).cs" 1
BREAK
CASE 1
GET_PLAYER_CHAR 0 scplayer
CLEO_CALL ChangeGearAnimsForAllVehicles 0 scplayer
BREAK
CASE 2
CLEO_CALL MakeCarUseGears 0 scplayer userInt userFloat
TERMINATE_THIS_CUSTOM_SCRIPT
BREAK
ENDSWITCH
GET_PLAYER_CHAR 0 scplayer
WHILE TRUE
WAIT 0
IF IS_CHAR_IN_ANY_CAR scplayer
GET_CAR_CHAR_IS_USING scplayer car
GET_VEHICLE_SUBCLASS car i
IF i = VEHICLE_SUBCLASS_AUTOMOBILE
OR i = VEHICLE_SUBCLASS_MTRUCK
REQUEST_ANIMATION GEARS
WHILE NOT HAS_ANIMATION_LOADED GEARS
WAIT 0
ENDWHILE
WHILE IS_CHAR_IN_CAR scplayer car
WAIT 0
GET_CAR_CURRENT_GEAR car gear
IF NOT gear = 0
STRING_FORMAT anim "gear%i" gear
ELSE
anim = "gear6"
ENDIF
last_gear = gear
TASK_PLAY_ANIM_NON_INTERRUPTABLE scplayer $anim GEARS userFloat 0 0 0 1 userInt
WHILE last_gear = gear
AND IS_CHAR_IN_CAR scplayer car
WAIT 0
GET_CAR_CURRENT_GEAR car gear
ENDWHILE
ENDWHILE
IF IS_CHAR_PLAYING_ANIM scplayer "gear"
TASK_PLAY_ANIM scplayer null NULL 4.0 0 0 0 0 1
ENDIF
REMOVE_ANIMATION GEARS
ENDIF
ENDIF
ENDWHILE
}
{
ChangeGearAnimsForAllVehicles:
LVAR_INT player
// -----
LVAR_INT car driver i cont
LVAR_FLOAT x y z
WAIT 5000
WHILE TRUE
WAIT 0
GET_ACTIVE_CAMERA_COORDINATES x y z
IF GET_RANDOM_CAR_IN_SPHERE_NO_SAVE_RECURSIVE x y z 50.0 TRUE FALSE car
IF DOES_VEHICLE_EXIST car
AND NOT IS_CAR_DEAD car
IF NOT IS_CAR_SCRIPT_CONTROLLED car
GET_VEHICLE_SUBCLASS car i
IF i = VEHICLE_SUBCLASS_AUTOMOBILE
GET_DRIVER_OF_CAR car driver
IF DOES_CHAR_EXIST driver
AND NOT IS_CHAR_DEAD driver
AND NOT driver = player
IF NOT IS_CHAR_SCRIPT_CONTROLLED driver
GET_EXTENDED_CHAR_VAR driver MOTORISTA GEARUSER i
IF NOT i = TRUE
STREAM_CUSTOM_SCRIPT "Improved Change Gear Anim (FilipeS).cs" 2 driver
WAIT 100
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDWHILE
CLEO_RETURN 0
}
{
MakeCarUseGears:
LVAR_INT driver userInt
LVAR_FLOAT userFloat
// ---
LVAR_INT car i r changed
LVAR_INT gear last_gear
LVAR_TEXT_LABEL16 anim
IF DOES_CHAR_EXIST driver
AND NOT IS_CHAR_DEAD driver
REQUEST_ANIMATION GEARS
WHILE NOT HAS_ANIMATION_LOADED GEARS
WAIT 0
ENDWHILE
INIT_EXTENDED_CHAR_VARS driver MOTORISTA TOTALVARS
SET_EXTENDED_CHAR_VAR driver MOTORISTA GEARUSER TRUE
GET_CAR_CHAR_IS_USING driver car
GENERATE_RANDOM_INT_IN_RANGE 0 2 r
IF r = 0
userInt = 99999999
userFloat = 4.0
ENDIF
WHILE DOES_CHAR_EXIST driver
AND NOT IS_CHAR_DEAD driver
WAIT 0
IF DOES_VEHICLE_EXIST car
AND NOT IS_CAR_DEAD car
IF IS_CHAR_IN_CAR driver car
GET_CAR_CURRENT_GEAR car gear
IF NOT gear = 0
STRING_FORMAT anim "gear%i" gear
ELSE
anim = "gear6"
ENDIF
last_gear = gear
TASK_PLAY_ANIM driver $anim GEARS userFloat 0 0 0 1 userInt
timera = 0
changed = 0
WHILE last_gear = gear
WAIT 0
IF DOES_CHAR_EXIST driver
AND NOT IS_CHAR_DEAD driver
IF DOES_VEHICLE_EXIST car
AND NOT IS_CAR_DEAD car
IF IS_CHAR_IN_CAR driver car
IF timera > userInt
AND changed = 0
CLEAR_CHAR_TASKS driver
changed = 1
ENDIF
GET_CAR_CURRENT_GEAR car gear
ELSE
BREAK
ENDIF
ELSE
BREAK
ENDIF
ELSE
BREAK
ENDIF
ENDWHILE
ELSE
BREAK
ENDIF
ELSE
BREAK
ENDIF
ENDWHILE
IF DOES_CHAR_EXIST driver
SET_EXTENDED_CHAR_VAR driver MOTORISTA GEARUSER FALSE
ENDIF
ENDIF
CLEO_RETURN 0
}
SCRIPT_END