Skip to content

Instantly share code, notes, and snippets.

@JuniorDjjr
Last active April 26, 2024 07: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/b12b2087d3fc11da0795584557bb686b to your computer and use it in GitHub Desktop.
Save JuniorDjjr/b12b2087d3fc11da0795584557bb686b to your computer and use it in GitHub Desktop.
// You need: https://forum.mixmods.com.br/f141-gta3script-cleo/t5206-como-criar-scripts-com-cleoplus
SCRIPT_START
{
LVAR_INT scplayer hChar[8] hVeh iCurNumPassengers iMaxPassengers iNumGangMembers i j k iNextTimeToTalk iIdToSay hOtherChar iCfgRandMinTime iCfgRandMaxTime
WAIT 0
WAIT 0
IF IS_ON_SAMP
TERMINATE_THIS_CUSTOM_SCRIPT
ENDIF
IF NOT READ_INT_FROM_INI_FILE "CLEO\Random Car Talk.ini" "Settings" "RandMinTime" (iCfgRandMinTime)
iCfgRandMinTime = 2000
ENDIF
IF NOT READ_INT_FROM_INI_FILE "CLEO\Random Car Talk.ini" "Settings" "RandMaxTime" (iCfgRandMaxTime)
iCfgRandMaxTime = 20000
ENDIF
GET_PLAYER_CHAR 0 scplayer
WHILE TRUE
WAIT 0
IF IS_CHAR_SITTING_IN_ANY_CAR scplayer
STORE_CAR_CHAR_IS_IN_NO_SAVE scplayer hVeh
GET_MAXIMUM_NUMBER_OF_PASSENGERS hVeh iMaxPassengers
IF iMaxPassengers > 0
IF iMaxPassengers > 8
iMaxPassengers = 8
ENDIF
iNextTimeToTalk = 0x7FFFFFFF
WHILE IS_CHAR_SITTING_IN_ANY_CAR scplayer
IF GOSUB Process
BREAK
ENDIF
IF timera > iNextTimeToTalk
GOSUB RandomCharTalk
GOSUB GetNextTimeToTalk
ENDIF
//PRINT_FORMATTED "%x %x %x gmem %i" 1000 hChar[0] hChar[1] hChar[2] iNumGangMembers
ENDWHILE
ENDIF
ENDIF
ENDWHILE
RandomCharTalk:
IF iCurNumPassengers > 0
AND NOT IS_ON_MISSION
AND NOT IS_ON_SCRIPTED_CUTSCENE
AND IS_PLAYER_CONTROL_ON 0
i = iMaxPassengers + 1
GENERATE_RANDOM_INT_IN_RANGE 0 i (i)
IF i = 0
//CJ
GOSUB CJTalk
ELSE
//passengers
i -= 1
IF DOES_CHAR_EXIST hChar[i]
GOSUB NPCTalk
ENDIF
ENDIF
ENDIF
RETURN
CJTalk:
iIdToSay = -1
//decrease chance
IF iNumGangMembers > 0
IF RANDOM_PERCENT 10
RETURN
ENDIF
ELSE
IF RANDOM_PERCENT 5
RETURN
ENDIF
ENDIF
//cj random talk
GENERATE_RANDOM_INT_IN_RANGE 0 3 (j)
SWITCH j
CASE 0
IF iNumGangMembers > 1
iIdToSay = 193 //Refuse a homie to do something
ENDIF
BREAK
CASE 1
IF iNumGangMembers > 1
iIdToSay = 108 //Greet a dude (grove gang)
ENDIF
BREAK
CASE 2
iIdToSay = 119 //Insult/threatens someone
BREAK
/*CASE 3
// if linked to the song currently playing it would be FUCKING COOL
iIdToSay = 336 //Sing songs
BREAK*/
ENDSWITCH
IF iIdToSay > -1
TASK_SAY scplayer iIdToSay
//PRINT_FORMATTED_NOW "cj say %i" 3000 iIdToSay
ENDIF
RETURN
NPCTalk:
iIdToSay = -1
GET_CHAR_STAT_ID hChar[i] (j)
IF j = PEDSTAT_GANG2
// Gang member
GENERATE_RANDOM_INT_IN_RANGE 0 18 (j)
SWITCH j
CASE 0
IF iNumGangMembers > 1
iIdToSay = 23 //Greet a homie/Don't approve a homies' drink
ENDIF
BREAK
CASE 1
IF iNumGangMembers > 1
iIdToSay = 24 //Approve a homies' drink/Ask to drink
ENDIF
BREAK
CASE 2
TASK_SAY hChar[i] 36 //Don't approve CJ's actions
//PRINT_FORMATTED_NOW "say %i" 3000 36
WAIT 2500
TASK_SAY scplayer 107 //Comment; Negative; "Yeah bitch, kiss my ass!"
BREAK
CASE 3
iIdToSay = 40 //Ask to wait
BREAK
CASE 4
GET_CAR_VALUE hVeh (j)
IF j > 50000
TASK_SAY hChar[i] 57 //Approve CJ's ride
//PRINT_FORMATTED_NOW "say %i" 3000 57
WAIT 2500
IF RANDOM_PERCENT 50
TASK_SAY scplayer 129 //Positive reaction to a good car speech
ELSE
TASK_SAY scplayer 137 //Say thanks to someone
ENDIF
ELSE
TASK_SAY hChar[i] 48 //Don't approve CJ's ride
//PRINT_FORMATTED_NOW "say %i" 3000 48
WAIT 2500
TASK_SAY scplayer 132 //"Whatever you say" + Insult
ENDIF
BREAK
CASE 5
IF iNumGangMembers > 2
iIdToSay = 66 //"Watch out" + insulting
ENDIF
BREAK
CASE 6
iIdToSay = 68 //"You tripping"
BREAK
CASE 7
j = 0
WHILE GET_ANY_CHAR_NO_SAVE_RECURSIVE j (j hOtherChar)
GET_PED_TYPE hOtherChar (k)
IF k = PEDTYPE_GANG1
OR k = PEDTYPE_GANG3
OR k = PEDTYPE_GANG4
OR k = PEDTYPE_GANG5
iIdToSay = 87 //See suspicious guy (rival gangbanger?)
BREAK
ENDIF
ENDWHILE
BREAK
CASE 8
iIdToSay = 89 //Order to f**k off
BREAK
CASE 9
IF iNumGangMembers > 2
TASK_SAY hChar[i] 105 //GANG MEMBER; Car is full!
//PRINT_FORMATTED_NOW "say %i" 3000 105
WAIT 2500
TASK_SAY scplayer 243 //Say to get lost to someone
BREAK
ENDIF
BREAK
CASE 10
IF iNumGangMembers > 2
iIdToSay = 118 //"Get you hands from me"
ENDIF
BREAK
CASE 11
IF iNumGangMembers = 0
TASK_SAY hChar[i] 133 //Abuse CJ
//PRINT_FORMATTED_NOW "say %i" 3000 133
WAIT 2500
TASK_SAY scplayer 243 //Say to get lost to someone
ENDIF
BREAK
CASE 12
iIdToSay = 144 //"I'm a maniac"
BREAK
CASE 13
iIdToSay = 145 //"Take it"?
BREAK
CASE 14
iIdToSay = 146 //"Check it"?
BREAK
CASE 15
iIdToSay = 340 //Coughing
BREAK
CASE 16
IF iNumGangMembers > 1
iIdToSay = 200 //Don't approve homies' cigarettes
ENDIF
BREAK
CASE 17
IF iNumGangMembers > 1
iIdToSay = 201 //Approve homies' cigarettes/Ask to smoke
ENDIF
BREAK
ENDSWITCH
ELSE
// ignore these stats
IF j = PEDSTAT_PROSTITUTE
RETURN
ENDIF
// ignore if gang
IF NOT j = 5 //grove
IF j >= 4
AND j <= 13
RETURN
ENDIF
ENDIF
GET_CHAR_MODEL hChar[i] (j)
// ignore if girlfriend
IF j >= 190
AND j <= 195
RETURN
ENDIF
// less chance for random peds, due to less audios
IF RANDOM_PERCENT 10
// random ped talk
GENERATE_RANDOM_INT_IN_RANGE 0 4 (j)
SWITCH j
CASE 0
GET_CAR_VALUE hVeh (j)
IF j > 50000
TASK_SAY hChar[i] 57 //Approve CJ's ride
//PRINT_FORMATTED_NOW "say %i" 3000 57
WAIT 2500
IF RANDOM_PERCENT 50
TASK_SAY scplayer 129 //Positive reaction to a good car speech
ELSE
TASK_SAY scplayer 137 //Say thanks to someone
ENDIF
ELSE
TASK_SAY hChar[i] 48 //Don't approve CJ's ride
//PRINT_FORMATTED_NOW "say %i" 3000 48
WAIT 2500
TASK_SAY scplayer 132 //"Whatever you say" + Insult
ENDIF
BREAK
CASE 1
j = 0
WHILE GET_ANY_CHAR_NO_SAVE_RECURSIVE j (j hOtherChar)
GET_PED_TYPE hOtherChar (k)
IF k = PEDTYPE_GANG2
iIdToSay = 88 //Sees gansta? Sees grove street member? Sees CJ in a lot of green gangsta clothing?
BREAK
ENDIF
ENDWHILE
BREAK
CASE 2
iIdToSay = 170 //Negative comment on chars hood
BREAK
CASE 3
iIdToSay = 171 //Positive comment on chars hood
BREAK
ENDSWITCH
ENDIF
ENDIF
IF iIdToSay > -1
TASK_SAY hChar[i] iIdToSay
//PRINT_FORMATTED_NOW "say %i" 3000 iIdToSay
ENDIF
RETURN
Process:
WAIT 0
IF DOES_VEHICLE_EXIST hVeh
IF IS_CHAR_IN_CAR scplayer hVeh
GET_NUMBER_OF_PASSENGERS hVeh (i)
IF NOT i = iCurNumPassengers
iCurNumPassengers = i
// Changed, update passengers
GOSUB UpdatePassengers
ENDIF
ELSE
RETURN_TRUE
RETURN
ENDIF
ELSE
RETURN_TRUE
RETURN
ENDIF
RETURN_FALSE
RETURN
UpdatePassengers:
iNumGangMembers = 0
i = 0
WHILE i < iMaxPassengers
IF IS_CAR_PASSENGER_SEAT_FREE hVeh i
hChar[i] = -1
ELSE
GET_CHAR_IN_CAR_PASSENGER_SEAT hVeh i hChar[i]
GET_CHAR_STAT_ID hChar[i] (j)
IF j = PEDSTAT_GANG2
++iNumGangMembers
ENDIF
ENDIF
++i
ENDWHILE
GOSUB GetNextTimeToTalk
RETURN
GetNextTimeToTalk:
timera = 0
GENERATE_RANDOM_INT_IN_RANGE iCfgRandMinTime iCfgRandMaxTime (iNextTimeToTalk)
RETURN
}
SCRIPT_END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment