Refactor code, [III | VC]add new peds, cars, wepons from menu
This commit is contained in:
parent
4b9ab8890c
commit
088f84a981
File diff suppressed because it is too large
Load Diff
@ -6,305 +6,308 @@
|
|||||||
# stat_id = "name"
|
# stat_id = "name"
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
[Misc]
|
[Favourites]
|
||||||
44 = "Longest treadmill time"
|
|
||||||
45 = "Longest exercise bike time"
|
|
||||||
46 = "Heaviest weight on bench press"
|
|
||||||
47 = "Heaviest weight on dumbbells"
|
|
||||||
48 = "Best time in 8-Track"
|
|
||||||
50 = "Lightest weight"
|
|
||||||
51 = "Longest chase time with 5 or more stars"
|
|
||||||
52 = "Last chase time with 5 or more stars"
|
|
||||||
63 = "Time spent underwater"
|
|
||||||
64 = "Total respect"
|
|
||||||
66 = "Clothes respect"
|
|
||||||
67 = "Fitness respect"
|
|
||||||
68 = "Respect"
|
|
||||||
80 = "Appearance"
|
|
||||||
81 = "Gambling"
|
|
||||||
120 = "People wasted by others"
|
|
||||||
121 = "People you've wasted"
|
|
||||||
131 = "Total number of wanted stars attained"
|
|
||||||
132 = "Total number of wanted stars evaded"
|
|
||||||
133 = "Times busted"
|
|
||||||
134 = "Days passed in game"
|
|
||||||
135 = "Number of hospital visits"
|
|
||||||
136 = "Safehouse visits"
|
|
||||||
137 = "Times cheated"
|
|
||||||
156 = "Last dance score"
|
|
||||||
163 = "Recruited gang members killed"
|
|
||||||
166 = "Photographs Taken"
|
|
||||||
167 = "Rampages attempted"
|
|
||||||
168 = "Rampages passed"
|
|
||||||
169 = "Flight time"
|
|
||||||
170 = "Times drowned"
|
|
||||||
172 = "Best position in 8-Track"
|
|
||||||
173 = "Time on jetpack"
|
|
||||||
174 = "Shooting range levels passed"
|
|
||||||
175 = "Most cars parked on 'Valet Parking'"
|
|
||||||
176 = "Kills since last checkpoint"
|
|
||||||
177 = "Total legitimate kills"
|
|
||||||
178 = "Number of 'Bloodring' kills"
|
|
||||||
179 = "Total time in bloodring"
|
|
||||||
180 = "No more hurricanes Flag"
|
|
||||||
181 = "City unlocked"
|
|
||||||
182 = "Number of Police bribes"
|
|
||||||
183 = "Number of cars stolen"
|
|
||||||
185 = "Number of disastrous dates"
|
|
||||||
188 = "Number of successful dates"
|
|
||||||
190 = "Number of prostitutes visited"
|
|
||||||
191 = "Number of houses burgled"
|
|
||||||
192 = "Number of safes cracked"
|
|
||||||
193 = "Burgular status"
|
|
||||||
194 = "Number of stolen items sold"
|
|
||||||
195 = "Number of eight balls in pool"
|
|
||||||
196 = "Total number of wins playing pool"
|
|
||||||
197 = "Total number of losses playing pool"
|
|
||||||
198 = "Times visited the gym"
|
|
||||||
200 = "Number of meals eaten"
|
|
||||||
203 = "Number of furniture purchased"
|
|
||||||
204 = "Favorite console game"
|
|
||||||
205 = "Highest civilian peds killed on Rampage"
|
|
||||||
206 = "Highest police peds killed on Rampage"
|
|
||||||
207 = "Highest civilian vehicles destroyed on Rampage"
|
|
||||||
208 = "Highest police vehicles destroyed on Rampage"
|
|
||||||
209 = "Highest number of tanks destroyed on Rampage"
|
|
||||||
210 = "Pimping level"
|
|
||||||
211 = "Kickstart best score"
|
|
||||||
212 = "Best lap time in 8-Track"
|
|
||||||
213 = "Number of vehicles exported"
|
|
||||||
214 = "Number of vehicles imported"
|
|
||||||
215 = "Highest basketball score"
|
|
||||||
216 = "Fires started"
|
|
||||||
217 = "Amount of drugs sold"
|
|
||||||
218 = "Amount of drugs bought"
|
|
||||||
225 = "Lung capacity"
|
|
||||||
226 = "Game gore rating"
|
|
||||||
227 = "Game sex rating"
|
|
||||||
231 = "Snapshots taken"
|
|
||||||
232 = "Total snapshots"
|
|
||||||
233 = "Luck"
|
|
||||||
234 = "Territories taken over"
|
|
||||||
235 = "Territories lost"
|
|
||||||
236 = "Territories held"
|
|
||||||
237 = "Highest number of territories held"
|
|
||||||
238 = "Gang members recruited"
|
|
||||||
239 = "Enemy gang members killed"
|
|
||||||
240 = "Friendly gang members killed"
|
|
||||||
241 = "Horseshoes collected"
|
|
||||||
242 = "Total horseshoes"
|
|
||||||
243 = "Oysters collected"
|
|
||||||
244 = "Total oysters"
|
|
||||||
245 = "Calories"
|
|
||||||
251 = "'Keepie Uppy' best time"
|
|
||||||
320 = "Playing time"
|
|
||||||
321 = "Hidden Packages found"
|
|
||||||
322 = "Tags sprayed"
|
|
||||||
323 = "Least favorite gang"
|
|
||||||
324 = "Gang members wasted"
|
|
||||||
325 = "Criminals wasted"
|
|
||||||
326 = "Most Favorite Radio Station"
|
|
||||||
327 = "Least Favorite Radio Station"
|
|
||||||
330 = "Pilot ranking"
|
|
||||||
331 = "Strongest Gang"
|
|
||||||
332 = "2nd strongest gang"
|
|
||||||
333 = "3rd strongest gang"
|
|
||||||
334 = "Money lost gambling"
|
|
||||||
336 = "Gang strength"
|
|
||||||
|
|
||||||
[Girls]
|
[Girls]
|
||||||
32 = "Girlfriend budget"
|
'Current number of girlfriends' = '184'
|
||||||
65 = "Girlfriend respect"
|
'Girlfriend budget' = '32'
|
||||||
171 = "Number of girls pimped"
|
'Girlfriend respect' = '65'
|
||||||
184 = "Current number of girlfriends"
|
'Number of girls dated' = '186'
|
||||||
186 = "Number of girls dated"
|
'Number of girls dumped' = '189'
|
||||||
187 = "Number of times scored with a girl"
|
'Number of girls pimped' = '171'
|
||||||
189 = "Number of girls dumped"
|
'Number of times scored with a girl' = '187'
|
||||||
252 = "Progress with Denise"
|
'Progress with Barbara' = '255'
|
||||||
253 = "Progress with Michelle"
|
'Progress with Denise' = '252'
|
||||||
254 = "Progress with Helena"
|
'Progress with Helena' = '254'
|
||||||
255 = "Progress with Barbara"
|
'Progress with Katie' = '256'
|
||||||
256 = "Progress with Katie"
|
'Progress with Michelle' = '253'
|
||||||
257 = "Progress with Millie"
|
'Progress with Millie' = '257'
|
||||||
|
|
||||||
|
[Misc]
|
||||||
|
"'Keepie Uppy' best time" = '251'
|
||||||
|
'2nd strongest gang' = '332'
|
||||||
|
'3rd strongest gang' = '333'
|
||||||
|
'Amount of drugs bought' = '218'
|
||||||
|
'Amount of drugs sold' = '217'
|
||||||
|
Appearance = '80'
|
||||||
|
'Best lap time in 8-Track' = '212'
|
||||||
|
'Best position in 8-Track' = '172'
|
||||||
|
'Best time in 8-Track' = '48'
|
||||||
|
'Burgular status' = '193'
|
||||||
|
Calories = '245'
|
||||||
|
'City unlocked' = '181'
|
||||||
|
'Clothes respect' = '66'
|
||||||
|
'Criminals wasted' = '325'
|
||||||
|
'Days passed in game' = '134'
|
||||||
|
'Enemy gang members killed' = '239'
|
||||||
|
'Favorite console game' = '204'
|
||||||
|
'Fires started' = '216'
|
||||||
|
'Fitness respect' = '67'
|
||||||
|
'Flight time' = '169'
|
||||||
|
'Friendly gang members killed' = '240'
|
||||||
|
Gambling = '81'
|
||||||
|
'Game gore rating' = '226'
|
||||||
|
'Game sex rating' = '227'
|
||||||
|
'Gang members recruited' = '238'
|
||||||
|
'Gang members wasted' = '324'
|
||||||
|
'Gang strength' = '336'
|
||||||
|
'Heaviest weight on bench press' = '46'
|
||||||
|
'Heaviest weight on dumbbells' = '47'
|
||||||
|
'Hidden Packages found' = '321'
|
||||||
|
'Highest basketball score' = '215'
|
||||||
|
'Highest civilian peds killed on Rampage' = '205'
|
||||||
|
'Highest civilian vehicles destroyed on Rampage' = '207'
|
||||||
|
'Highest number of tanks destroyed on Rampage' = '209'
|
||||||
|
'Highest number of territories held' = '237'
|
||||||
|
'Highest police peds killed on Rampage' = '206'
|
||||||
|
'Highest police vehicles destroyed on Rampage' = '208'
|
||||||
|
'Horseshoes collected' = '241'
|
||||||
|
'Kickstart best score' = '211'
|
||||||
|
'Kills since last checkpoint' = '176'
|
||||||
|
'Last chase time with 5 or more stars' = '52'
|
||||||
|
'Last dance score' = '156'
|
||||||
|
'Least Favorite Radio Station' = '327'
|
||||||
|
'Least favorite gang' = '323'
|
||||||
|
'Lightest weight' = '50'
|
||||||
|
'Longest chase time with 5 or more stars' = '51'
|
||||||
|
'Longest exercise bike time' = '45'
|
||||||
|
'Longest treadmill time' = '44'
|
||||||
|
Luck = '233'
|
||||||
|
'Lung capacity' = '225'
|
||||||
|
'Money lost gambling' = '334'
|
||||||
|
'Most Favorite Radio Station' = '326'
|
||||||
|
"Most cars parked on 'Valet Parking'" = '175'
|
||||||
|
'No more hurricanes Flag' = '180'
|
||||||
|
"Number of 'Bloodring' kills" = '178'
|
||||||
|
'Number of Police bribes' = '182'
|
||||||
|
'Number of cars stolen' = '183'
|
||||||
|
'Number of disastrous dates' = '185'
|
||||||
|
'Number of eight balls in pool' = '195'
|
||||||
|
'Number of furniture purchased' = '203'
|
||||||
|
'Number of hospital visits' = '135'
|
||||||
|
'Number of houses burgled' = '191'
|
||||||
|
'Number of meals eaten' = '200'
|
||||||
|
'Number of prostitutes visited' = '190'
|
||||||
|
'Number of safes cracked' = '192'
|
||||||
|
'Number of stolen items sold' = '194'
|
||||||
|
'Number of successful dates' = '188'
|
||||||
|
'Number of vehicles exported' = '213'
|
||||||
|
'Number of vehicles imported' = '214'
|
||||||
|
'Oysters collected' = '243'
|
||||||
|
'People wasted by others' = '120'
|
||||||
|
"People you've wasted" = '121'
|
||||||
|
'Photographs Taken' = '166'
|
||||||
|
'Pilot ranking' = '330'
|
||||||
|
'Pimping level' = '210'
|
||||||
|
'Playing time' = '320'
|
||||||
|
'Rampages attempted' = '167'
|
||||||
|
'Rampages passed' = '168'
|
||||||
|
'Recruited gang members killed' = '163'
|
||||||
|
Respect = '68'
|
||||||
|
'Safehouse visits' = '136'
|
||||||
|
'Shooting range levels passed' = '174'
|
||||||
|
'Snapshots taken' = '231'
|
||||||
|
'Strongest Gang' = '331'
|
||||||
|
'Tags sprayed' = '322'
|
||||||
|
'Territories held' = '236'
|
||||||
|
'Territories lost' = '235'
|
||||||
|
'Territories taken over' = '234'
|
||||||
|
'Time on jetpack' = '173'
|
||||||
|
'Time spent underwater' = '63'
|
||||||
|
'Times busted' = '133'
|
||||||
|
'Times cheated' = '137'
|
||||||
|
'Times drowned' = '170'
|
||||||
|
'Times visited the gym' = '198'
|
||||||
|
'Total horseshoes' = '242'
|
||||||
|
'Total legitimate kills' = '177'
|
||||||
|
'Total number of losses playing pool' = '197'
|
||||||
|
'Total number of wanted stars attained' = '131'
|
||||||
|
'Total number of wanted stars evaded' = '132'
|
||||||
|
'Total number of wins playing pool' = '196'
|
||||||
|
'Total oysters' = '244'
|
||||||
|
'Total respect' = '64'
|
||||||
|
'Total snapshots' = '232'
|
||||||
|
'Total time in bloodring' = '179'
|
||||||
|
|
||||||
[Missions]
|
[Missions]
|
||||||
0 = "Progress made"
|
'555 WE TIP mission accomplished' = '304'
|
||||||
1 = "Total progress"
|
'A Home In The Hills mission accomplished' = '308'
|
||||||
58 = "Time spent on longest mission"
|
'Architectural Espionage mission accomplished' = '312'
|
||||||
59 = "Time spent on quickest mission"
|
'Are you going to San Fierro? mission accomplished' = '338'
|
||||||
60 = "Average mission time"
|
'Average mission time' = '60'
|
||||||
146 = "Mission attempts"
|
'Badlands mission accomplished' = '319'
|
||||||
147 = "Missions passed"
|
'Best position in Backroad Wanderer' = '262'
|
||||||
148 = "Total number of missions in game"
|
'Best position in Badlands A' = '272'
|
||||||
152 = "Criminals killed on Vigilante Mission"
|
'Best position in Badlands B' = '274'
|
||||||
157 = "Highest Vigilante Mission level"
|
'Best position in Bandito County' = '278'
|
||||||
158 = "Highest Paramedic Mission level"
|
'Best position in City Circuit' = '264'
|
||||||
159 = "Highest Firefighter Mission level"
|
'Best position in Country Endurance' = '286'
|
||||||
161 = "Number of Truck missions passed"
|
'Best position in Dam Rider' = '290'
|
||||||
201 = "Money made in Quarry"
|
'Best position in Desert Tricks' = '292'
|
||||||
202 = "Time taken to Complete Quarry"
|
'Best position in Dirtbike Danger' = '276'
|
||||||
224 = "Respect Mission"
|
'Best position in Freeway' = '268'
|
||||||
228 = "Respect Mission Total"
|
'Best position in Go-Go-Kart' = '280'
|
||||||
258 = "Best position in Lowrider Race"
|
'Best position in Into the Country' = '270'
|
||||||
259 = "Best time in Lowrider Race"
|
'Best position in LV Ringroad' = '294'
|
||||||
260 = "Best position in Little Loop"
|
'Best position in Little Loop' = '260'
|
||||||
261 = "Best time in Little Loop"
|
'Best position in Lowrider Race' = '258'
|
||||||
262 = "Best position in Backroad Wanderer"
|
'Best position in SF to LV' = '288'
|
||||||
263 = "Best time in Backroad Wanderer"
|
'Best position in San Fierro Fastlane' = '282'
|
||||||
264 = "Best position in City Circuit"
|
'Best position in San Fierro Hills' = '284'
|
||||||
265 = "Best time in City Circuit"
|
'Best position in Vinewood' = '266'
|
||||||
266 = "Best position in Vinewood"
|
'Best time in Backroad Wanderer' = '263'
|
||||||
267 = "Best time in Vinewood"
|
'Best time in Badlands A' = '273'
|
||||||
268 = "Best position in Freeway"
|
'Best time in Badlands B' = '275'
|
||||||
269 = "Best time in Freeway"
|
'Best time in Bandito County' = '279'
|
||||||
270 = "Best position in Into the Country"
|
'Best time in Barnstorming' = '297'
|
||||||
271 = "Best time in Into the Country"
|
'Best time in Chopper Checkpoint' = '299'
|
||||||
272 = "Best position in Badlands A"
|
'Best time in City Circuit' = '265'
|
||||||
273 = "Best time in Badlands A"
|
'Best time in Country Endurance' = '287'
|
||||||
274 = "Best position in Badlands B"
|
'Best time in Dam Rider' = '291'
|
||||||
275 = "Best time in Badlands B"
|
'Best time in Desert Tricks' = '293'
|
||||||
276 = "Best position in Dirtbike Danger"
|
'Best time in Dirtbike Danger' = '277'
|
||||||
277 = "Best time in Dirtbike Danger"
|
'Best time in Freeway' = '269'
|
||||||
278 = "Best position in Bandito County"
|
'Best time in Go-Go-Kart' = '281'
|
||||||
279 = "Best time in Bandito County"
|
'Best time in Heli Hell' = '301'
|
||||||
280 = "Best position in Go-Go-Kart"
|
'Best time in Into the Country' = '271'
|
||||||
281 = "Best time in Go-Go-Kart"
|
'Best time in LV Ringroad' = '295'
|
||||||
282 = "Best position in San Fierro Fastlane"
|
'Best time in Little Loop' = '261'
|
||||||
283 = "Best time in San Fierro Fastlane"
|
'Best time in Lowrider Race' = '259'
|
||||||
284 = "Best position in San Fierro Hills"
|
'Best time in Military Service' = '298'
|
||||||
285 = "Best time in San Fierro Hills"
|
'Best time in SF to LV' = '289'
|
||||||
286 = "Best position in Country Endurance"
|
'Best time in San Fierro Fastlane' = '283'
|
||||||
287 = "Best time in Country Endurance"
|
'Best time in San Fierro Hills' = '285'
|
||||||
288 = "Best position in SF to LV"
|
'Best time in Vinewood' = '267'
|
||||||
289 = "Best time in SF to LV"
|
'Best time in Whirly Bird Waypoint' = '300'
|
||||||
290 = "Best position in Dam Rider"
|
'Best time in World War Aces' = '296'
|
||||||
291 = "Best time in Dam Rider"
|
"Breaking the Bank at Caligula's mission accomplished" = '307'
|
||||||
292 = "Best position in Desert Tricks"
|
'Criminals killed on Vigilante Mission' = '152'
|
||||||
293 = "Best time in Desert Tricks"
|
'Don Peyote mission accomplished' = '317'
|
||||||
294 = "Best position in LV Ringroad"
|
'Drive-thru mission accomplished' = '302'
|
||||||
295 = "Best time in LV Ringroad"
|
'Fish in a Barrel mission accomplished' = '306'
|
||||||
296 = "Best time in World War Aces"
|
'High Noon mission accomplished' = '339'
|
||||||
297 = "Best time in Barnstorming"
|
'Highest Firefighter Mission level' = '159'
|
||||||
298 = "Best time in Military Service"
|
'Highest Paramedic Mission level' = '158'
|
||||||
299 = "Best time in Chopper Checkpoint"
|
'Highest Vigilante Mission level' = '157'
|
||||||
300 = "Best time in Whirly Bird Waypoint"
|
'Jizzy mission accomplished' = '313'
|
||||||
301 = "Best time in Heli Hell"
|
'Local Liquor Store mission accomplished' = '318'
|
||||||
302 = "Drive-thru mission accomplished"
|
'Management Issues mission accomplished' = '303'
|
||||||
303 = "Management Issues mission accomplished"
|
'Mike Toreno mission accomplished' = '311'
|
||||||
304 = "555 WE TIP mission accomplished"
|
'Mission attempts' = '146'
|
||||||
305 = "Yay Ka-Boom-Boom mission accomplished"
|
'Missions passed' = '147'
|
||||||
306 = "Fish in a Barrel mission accomplished"
|
'Money made in Quarry' = '201'
|
||||||
307 = "Breaking the Bank at Caligula's mission accomplished"
|
'Number of Truck missions passed' = '161'
|
||||||
308 = "A Home In The Hills mission accomplished"
|
'Photo Opportunity mission accomplished' = '316'
|
||||||
309 = "maybe set riot mode"
|
'Progress made' = '0'
|
||||||
310 = "Ryder's mission Robbing Uncle Sam accomplished"
|
'Respect Mission' = '224'
|
||||||
311 = "Mike Toreno mission accomplished"
|
'Respect Mission Total' = '228'
|
||||||
312 = "Architectural Espionage mission accomplished"
|
'Reuniting the Families mission accomplished' = '314'
|
||||||
313 = "Jizzy mission accomplished"
|
'Riot Mission accomplished' = '335'
|
||||||
314 = "Reuniting the Families mission accomplished"
|
"Ryder's mission Robbing Uncle Sam accomplished" = '310'
|
||||||
315 = "Small Town Bank mission accomplished"
|
'Small Town Bank mission accomplished' = '315'
|
||||||
316 = "Photo Opportunity mission accomplished"
|
'Territory under control' = '337'
|
||||||
317 = "Don Peyote mission accomplished"
|
'The Green Sabre mission accomplished' = '340'
|
||||||
318 = "Local Liquor Store mission accomplished"
|
'Time spent on longest mission' = '58'
|
||||||
319 = "Badlands mission accomplished"
|
'Time spent on quickest mission' = '59'
|
||||||
335 = "Riot Mission accomplished"
|
'Time taken to Complete Quarry' = '202'
|
||||||
337 = "Territory under control"
|
'Total number of missions in game' = '148'
|
||||||
338 = "Are you going to San Fierro? mission accomplished"
|
'Total progress' = '1'
|
||||||
339 = "High Noon mission accomplished"
|
'Yay Ka-Boom-Boom mission accomplished' = '305'
|
||||||
340 = "The Green Sabre mission accomplished"
|
'maybe Catalina meeting' = '341'
|
||||||
341 = "maybe Catalina meeting"
|
'maybe Wu Zi meeting' = '342'
|
||||||
342 = "maybe Wu Zi meeting"
|
'maybe set riot mode' = '309'
|
||||||
|
|
||||||
[Money]
|
[Money]
|
||||||
14 = "Fashion Budget"
|
'Biggest gambling loss' = '39'
|
||||||
15 = "Property Budget"
|
'Biggest gambling win' = '38'
|
||||||
20 = "Food Budget"
|
'Drugs budget' = '61'
|
||||||
30 = "Tattoo budget"
|
'Fashion Budget' = '14'
|
||||||
31 = "Hairdressing budget"
|
'Food Budget' = '20'
|
||||||
33 = "Prostitute budget"
|
'Furniture budget' = '34'
|
||||||
34 = "Furniture budget"
|
'Hairdressing budget' = '31'
|
||||||
35 = "Money spent gambling"
|
'Largest burglary swag' = '40'
|
||||||
36 = "Money made from pimping"
|
'Money made from burglary' = '41'
|
||||||
37 = "Money won gambling"
|
'Money made from pimping' = '36'
|
||||||
38 = "Biggest gambling win"
|
'Money spent building property' = '42'
|
||||||
39 = "Biggest gambling loss"
|
'Money spent gambling' = '35'
|
||||||
40 = "Largest burglary swag"
|
'Money won gambling' = '37'
|
||||||
41 = "Money made from burglary"
|
'Property Budget' = '15'
|
||||||
42 = "Money spent building property"
|
'Prostitute budget' = '33'
|
||||||
53 = "Wage bill"
|
'Strip club budget' = '54'
|
||||||
54 = "Strip club budget"
|
'Tattoo budget' = '30'
|
||||||
56 = "Time spent shopping"
|
'Time spent gambling' = '57'
|
||||||
57 = "Time spent gambling"
|
'Time spent shopping' = '56'
|
||||||
61 = "Drugs budget"
|
'Total shopping budget' = '62'
|
||||||
62 = "Total shopping budget"
|
'Wage bill' = '53'
|
||||||
|
|
||||||
[Vehicle]
|
[Vehicle]
|
||||||
2 = "Furthest Hoop"
|
Assassinations = '155'
|
||||||
3 = "Distance travelled on foot"
|
'Auto Repair and Painting Budget' = '16'
|
||||||
4 = "Distance travelled by car"
|
'BMX best time' = '49'
|
||||||
5 = "Distance travelled by motorbike"
|
'Best INSANE stunt awarded' = '143'
|
||||||
6 = "Distance travelled by boat"
|
'Best lap time in dirt track' = '219'
|
||||||
7 = "Distance travelled by golf cart"
|
'Best position in dirt track' = '221'
|
||||||
8 = "Distance travelled by helicopter"
|
'Best time in dirt track' = '220'
|
||||||
9 = "Distance travelled by plane"
|
'Bike skill' = '229'
|
||||||
10 = "Longest Wheelie distance"
|
'Boats destroyed' = '123'
|
||||||
11 = "Longest Stoppie distance"
|
'Car modification budget' = '55'
|
||||||
12 = "Longest 2 wheels distance"
|
'Cash made in a Taxi' = '149'
|
||||||
16 = "Auto Repair and Painting Budget"
|
'Cost of property damaged' = '125'
|
||||||
17 = "Longest Wheelie time"
|
'Cycling skill' = '230'
|
||||||
18 = "Longest Stoppie time"
|
'Distance travelled by bicycle' = '27'
|
||||||
19 = "Longest 2 wheels time"
|
'Distance travelled by boat' = '6'
|
||||||
26 = "Distance travelled by swimming"
|
'Distance travelled by car' = '4'
|
||||||
27 = "Distance travelled by bicycle"
|
'Distance travelled by golf cart' = '7'
|
||||||
28 = "Distance travelled on treadmill"
|
'Distance travelled by helicopter' = '8'
|
||||||
29 = "Distance travelled on exercise bike"
|
'Distance travelled by motorbike' = '5'
|
||||||
49 = "BMX best time"
|
'Distance travelled by plane' = '9'
|
||||||
55 = "Car modification budget"
|
'Distance travelled by swimming' = '26'
|
||||||
122 = "Road Vehicles destroyed"
|
'Distance travelled on exercise bike' = '29'
|
||||||
123 = "Boats destroyed"
|
'Distance travelled on foot' = '3'
|
||||||
124 = "Planes & Helicopters destroyed"
|
'Distance travelled on treadmill' = '28'
|
||||||
125 = "Cost of property damaged"
|
'Driving skill' = '160'
|
||||||
138 = "Vehicle Resprays"
|
'Flying skill' = '223'
|
||||||
139 = "Maximum INSANE Jump distance"
|
'Furthest Hoop' = '2'
|
||||||
140 = "Maximum INSANE Jump height"
|
'Longest 2 wheels distance' = '12'
|
||||||
141 = "Maximum INSANE Jump flips"
|
'Longest 2 wheels time' = '19'
|
||||||
142 = "Maximum INSANE Jump rotation"
|
'Longest Stoppie distance' = '11'
|
||||||
143 = "Best INSANE stunt awarded"
|
'Longest Stoppie time' = '18'
|
||||||
144 = "Unique Jumps found"
|
'Longest Wheelie distance' = '10'
|
||||||
145 = "Unique Jumps done"
|
'Longest Wheelie time' = '17'
|
||||||
149 = "Cash made in a Taxi"
|
'Maximum INSANE Jump distance' = '139'
|
||||||
150 = "Passengers dropped off"
|
'Maximum INSANE Jump flips' = '141'
|
||||||
151 = "People saved in an Ambulance"
|
'Maximum INSANE Jump height' = '140'
|
||||||
153 = "Total fires extinguished"
|
'Maximum INSANE Jump rotation' = '142'
|
||||||
154 = "Packages Delivered"
|
'Money made in Truck' = '162'
|
||||||
155 = "Assassinations"
|
'NRG-500 best time' = '222'
|
||||||
160 = "Driving skill"
|
'Packages Delivered' = '154'
|
||||||
162 = "Money made in Truck"
|
'Passengers dropped off' = '150'
|
||||||
219 = "Best lap time in dirt track"
|
'People saved in an Ambulance' = '151'
|
||||||
220 = "Best time in dirt track"
|
'Planes & Helicopters destroyed' = '124'
|
||||||
221 = "Best position in dirt track"
|
'Road Vehicles destroyed' = '122'
|
||||||
222 = "NRG-500 best time"
|
'Total fires extinguished' = '153'
|
||||||
223 = "Flying skill"
|
'Unique Jumps done' = '145'
|
||||||
229 = "Bike skill"
|
'Unique Jumps found' = '144'
|
||||||
230 = "Cycling skill"
|
'Vehicle Resprays' = '138'
|
||||||
|
|
||||||
[Weapons]
|
[Weapons]
|
||||||
13 = "Weapon Budget"
|
'AK-47 Skill' = '77'
|
||||||
69 = "Pistol Skill"
|
'Bullets fired' = '126'
|
||||||
70 = "Silenced Pistol Skill"
|
'Bullets that hit' = '128'
|
||||||
71 = "Desert Eagle Skill"
|
'Combat Shotgun Skill' = '74'
|
||||||
72 = "Shotgun Skill"
|
'Current weapon skill' = '328'
|
||||||
73 = "Sawn-Off Shotgun Skill"
|
'Desert Eagle Skill' = '71'
|
||||||
74 = "Combat Shotgun Skill"
|
'Kgs of explosives used' = '127'
|
||||||
75 = "Machine Pistol Skill"
|
'M4 Skill' = '78'
|
||||||
76 = "SMG Skill"
|
'Machine Pistol Skill' = '75'
|
||||||
77 = "AK-47 Skill"
|
'Number of headshots' = '130'
|
||||||
78 = "M4 Skill"
|
'Pistol Skill' = '69'
|
||||||
79 = "Rifle Skill"
|
'Rifle Skill' = '79'
|
||||||
126 = "Bullets fired"
|
'SMG Skill' = '76'
|
||||||
127 = "Kgs of explosives used"
|
'Sawn-Off Shotgun Skill' = '73'
|
||||||
128 = "Bullets that hit"
|
'Shotgun Skill' = '72'
|
||||||
129 = "Tires popped with gunfire"
|
'Silenced Pistol Skill' = '70'
|
||||||
130 = "Number of headshots"
|
'Tires popped with gunfire' = '129'
|
||||||
328 = "Current weapon skill"
|
'Weapon Budget' = '13'
|
||||||
329 = "Weapon skill levels"
|
'Weapon skill levels' = '329'
|
||||||
|
|
||||||
|
@ -817,6 +817,7 @@ MenusTab = "Menus"
|
|||||||
Minimum = "Min"
|
Minimum = "Min"
|
||||||
PedPage = "Ped"
|
PedPage = "Ped"
|
||||||
PlayerPage = "Player"
|
PlayerPage = "Player"
|
||||||
|
RemoveEntry = "Entry removed"
|
||||||
Search = "Search"
|
Search = "Search"
|
||||||
LocationsTab = "Locations"
|
LocationsTab = "Locations"
|
||||||
FavouritesTab = "Favourites"
|
FavouritesTab = "Favourites"
|
||||||
|
@ -68,21 +68,6 @@ void Particle::Play(std::string& cat, std::string& name, std::string& particle)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Particle::Remove(std::string& cat, std::string& name, std::string& particle)
|
|
||||||
{
|
|
||||||
if (cat == "Custom")
|
|
||||||
{
|
|
||||||
Particle::m_Data.m_pData->RemoveKey("Custom", particle.c_str());
|
|
||||||
Particle::m_Data.m_pData->Save();
|
|
||||||
Util::SetMessage(TEXT("Animation.ParticleRemoved"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Util::SetMessage(TEXT("Animation.CustomParticlesOnly"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif GTAVC
|
#elif GTAVC
|
||||||
|
|
||||||
// Thanks to codenulls(https://github.com/codenulls/)
|
// Thanks to codenulls(https://github.com/codenulls/)
|
||||||
@ -191,7 +176,7 @@ void _PlayAnim(RpClump* pClump, int animGroup, int animID, float blend, bool loo
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void Animation::Play(std::string& ifp, std::string& anim, std::string& _)
|
void Animation::Play(std::string& cat, std::string& anim, std::string& ifp)
|
||||||
{
|
{
|
||||||
CPed *pPed = m_PedAnim ? m_pTarget : FindPlayerPed();
|
CPed *pPed = m_PedAnim ? m_pTarget : FindPlayerPed();
|
||||||
if (!pPed)
|
if (!pPed)
|
||||||
@ -230,20 +215,6 @@ void Animation::Play(std::string& ifp, std::string& anim, std::string& _)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Animation::Remove(std::string& ifp, std::string& anim, std::string& ifpRepeat)
|
|
||||||
{
|
|
||||||
if (ifp == "Custom")
|
|
||||||
{
|
|
||||||
m_AnimData.m_pData->RemoveKey("Custom", anim.c_str());
|
|
||||||
m_AnimData.m_pData->Save();
|
|
||||||
Util::SetMessage(TEXT("Animation.AnimationRemoved"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Util::SetMessage(TEXT("Animation.CustomAnimsOnly"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Animation::Init()
|
void Animation::Init()
|
||||||
{
|
{
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
@ -345,7 +316,7 @@ void Animation::ShowPage()
|
|||||||
if (ImGui::BeginChild("Anims Child"))
|
if (ImGui::BeginChild("Anims Child"))
|
||||||
{
|
{
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
Widget::DataList(m_AnimData, Play, Remove,
|
Widget::DataList(m_AnimData, Play,
|
||||||
[](){
|
[](){
|
||||||
static char animBuf[INPUT_BUFFER_SIZE];
|
static char animBuf[INPUT_BUFFER_SIZE];
|
||||||
static char ifpBuf[INPUT_BUFFER_SIZE];
|
static char ifpBuf[INPUT_BUFFER_SIZE];
|
||||||
@ -446,7 +417,7 @@ void Animation::ShowPage()
|
|||||||
if (ImGui::BeginChild("Cutscene Child"))
|
if (ImGui::BeginChild("Cutscene Child"))
|
||||||
{
|
{
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
Widget::DataList(Cutscene::m_Data, Cutscene::Play, nullptr);
|
Widget::DataList(Cutscene::m_Data, Cutscene::Play);
|
||||||
ImGui::EndChild();
|
ImGui::EndChild();
|
||||||
}
|
}
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
@ -478,7 +449,7 @@ void Animation::ShowPage()
|
|||||||
if (ImGui::BeginChild("Anims Child"))
|
if (ImGui::BeginChild("Anims Child"))
|
||||||
{
|
{
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
Widget::DataList(Particle::m_Data, Particle::Play, Particle::Remove,
|
Widget::DataList(Particle::m_Data, Particle::Play,
|
||||||
[](){
|
[](){
|
||||||
static char name[INPUT_BUFFER_SIZE], particle[INPUT_BUFFER_SIZE];
|
static char name[INPUT_BUFFER_SIZE], particle[INPUT_BUFFER_SIZE];
|
||||||
ImGui::InputTextWithHint(TEXT("Animation.ParticleName"), "KKJJ fire particle", name, INPUT_BUFFER_SIZE);
|
ImGui::InputTextWithHint(TEXT("Animation.ParticleName"), "KKJJ fire particle", name, INPUT_BUFFER_SIZE);
|
||||||
|
@ -22,7 +22,6 @@ public:
|
|||||||
static inline std::vector<int> m_nParticleList;
|
static inline std::vector<int> m_nParticleList;
|
||||||
|
|
||||||
static void Play(std::string& rootKey, std::string& particle, std::string& dummy);
|
static void Play(std::string& rootKey, std::string& particle, std::string& dummy);
|
||||||
static void Remove(std::string& ifp, std::string& anim, std::string& ifpRepeat);
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -36,7 +35,6 @@ private:
|
|||||||
static inline CPed *m_pTarget = nullptr;
|
static inline CPed *m_pTarget = nullptr;
|
||||||
|
|
||||||
static void Play(std::string& rootKey, std::string& anim, std::string& ifp);
|
static void Play(std::string& rootKey, std::string& anim, std::string& ifp);
|
||||||
static void Remove(std::string& rootKey, std::string& anim, std::string& ifp);
|
|
||||||
|
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
static void DrawPedTasks();
|
static void DrawPedTasks();
|
||||||
|
27
src/game.cpp
27
src/game.cpp
@ -1020,14 +1020,13 @@ void Game::ShowPage()
|
|||||||
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
|
|
||||||
Widget::DataList(m_MissionData, SetPlayerMission, nullptr);
|
Widget::DataList(m_MissionData, SetPlayerMission);
|
||||||
}
|
}
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
}
|
}
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
if (ImGui::BeginTabItem(TEXT("Game.Stats")))
|
if (ImGui::BeginTabItem(TEXT("Game.Stats")))
|
||||||
{
|
{
|
||||||
// similar to Widget::DataList()
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
|
|
||||||
if (ImGui::Button(TEXT("Game.MaxWepSkills"), Widget::CalcSize(2)))
|
if (ImGui::Button(TEXT("Game.MaxWepSkills"), Widget::CalcSize(2)))
|
||||||
@ -1051,29 +1050,7 @@ void Game::ShowPage()
|
|||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImGui::PushItemWidth((ImGui::GetWindowContentRegionWidth() - ImGui::GetStyle().ItemSpacing.x)/2);
|
Widget::DataList(m_StatData, nullptr, nullptr, true);
|
||||||
Widget::ListBox("##Categories", m_StatData.m_Categories, m_StatData.m_Selected);
|
|
||||||
ImGui::SameLine();
|
|
||||||
Widget::Filter("##Filter", m_StatData.m_Filter, TEXT("Window.Search"));
|
|
||||||
ImGui::PopItemWidth();
|
|
||||||
|
|
||||||
ImGui::Spacing();
|
|
||||||
ImGui::BeginChild("STATCHILD");
|
|
||||||
for (auto [k, v] : m_StatData.m_pData->Items())
|
|
||||||
{
|
|
||||||
if (k.str() == m_StatData.m_Selected || m_StatData.m_Selected == "All")
|
|
||||||
{
|
|
||||||
for (auto [k2, v2] : v.as_table()->ref<DataStore::Table>())
|
|
||||||
{
|
|
||||||
std::string name = v2.value_or<std::string>("Unknown");
|
|
||||||
if (m_StatData.m_Filter.PassFilter(name.c_str()))
|
|
||||||
{
|
|
||||||
Widget::EditStat(name.c_str(), std::stoi(std::string(k2.str())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ImGui::EndChild();
|
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
}
|
}
|
||||||
if (ImGui::BeginTabItem(TEXT("Game.RandomCheats")))
|
if (ImGui::BeginTabItem(TEXT("Game.RandomCheats")))
|
||||||
|
68
src/ped.cpp
68
src/ped.cpp
@ -86,6 +86,37 @@ void Ped::Init()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Ped::AddNewPed()
|
||||||
|
{
|
||||||
|
static char name[8];
|
||||||
|
static int model = 0;
|
||||||
|
ImGui::InputTextWithHint(TEXT("Menu.Name"), "PEDNAME", name, 7);
|
||||||
|
Widget::InputInt(TEXT("Ped.Model"), &model, 0, 999999);
|
||||||
|
ImGui::Spacing();
|
||||||
|
ImVec2 sz = Widget::CalcSize(2);
|
||||||
|
if (ImGui::Button(TEXT("Ped.AddPed"), sz))
|
||||||
|
{
|
||||||
|
Command<Commands::REQUEST_MODEL>(model);
|
||||||
|
Command<Commands::LOAD_ALL_MODELS_NOW>();
|
||||||
|
if (Command<Commands::IS_MODEL_AVAILABLE>(model))
|
||||||
|
{
|
||||||
|
std::string key = std::format("Custom.{} (Added)", name);
|
||||||
|
m_PedData.m_pData->Set(key.c_str(), std::to_string(model));
|
||||||
|
m_PedData.m_pData->Save();
|
||||||
|
Util::SetMessage(TEXT("Ped.AddPedMSG"));
|
||||||
|
Command<Commands::MARK_MODEL_AS_NO_LONGER_NEEDED>(model);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Util::SetMessage(TEXT("Vehicle.InvalidID"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button(TEXT("Ped.GetPlayerModel"), sz))
|
||||||
|
{
|
||||||
|
model = FindPlayerPed()->m_nModelIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
void Ped::SpawnPed(std::string& model)
|
void Ped::SpawnPed(std::string& model)
|
||||||
#else
|
#else
|
||||||
@ -308,39 +339,9 @@ void Ped::ShowPage()
|
|||||||
Widget::ImageList(m_PedData, SpawnPed,
|
Widget::ImageList(m_PedData, SpawnPed,
|
||||||
[](std::string& str){
|
[](std::string& str){
|
||||||
return m_PedData.m_pData->Get(str.c_str(), "Unknown");
|
return m_PedData.m_pData->Get(str.c_str(), "Unknown");
|
||||||
}, nullptr,
|
}, nullptr, AddNewPed);
|
||||||
[](){
|
|
||||||
static char name[8];
|
|
||||||
static int model = 0;
|
|
||||||
ImGui::InputTextWithHint(TEXT("Menu.Name"), "PEDNAME", name, 7);
|
|
||||||
Widget::InputInt(TEXT("Ped.Model"), &model, 1, 0, 999999);
|
|
||||||
ImGui::Spacing();
|
|
||||||
ImVec2 sz = Widget::CalcSize(2);
|
|
||||||
if (ImGui::Button(TEXT("Ped.AddPed"), sz))
|
|
||||||
{
|
|
||||||
Command<Commands::REQUEST_MODEL>(model);
|
|
||||||
Command<Commands::LOAD_ALL_MODELS_NOW>();
|
|
||||||
if (Command<Commands::IS_MODEL_AVAILABLE>(model))
|
|
||||||
{
|
|
||||||
std::string key = std::format("Custom.{} (Added)", name);
|
|
||||||
m_PedData.m_pData->Set(key.c_str(), std::to_string(model));
|
|
||||||
m_PedData.m_pData->Save();
|
|
||||||
Util::SetMessage(TEXT("Ped.AddPedMSG"));
|
|
||||||
Command<Commands::MARK_MODEL_AS_NO_LONGER_NEEDED>(model);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Util::SetMessage(TEXT("Vehicle.InvalidID"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ImGui::SameLine();
|
|
||||||
if (ImGui::Button(TEXT("Ped.GetPlayerModel"), sz))
|
|
||||||
{
|
|
||||||
model = FindPlayerPed()->m_nModelIndex;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
#else
|
#else
|
||||||
Widget::DataList(m_PedData, SpawnPed, nullptr);
|
Widget::DataList(m_PedData, SpawnPed, AddNewPed);
|
||||||
#endif
|
#endif
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
}
|
}
|
||||||
@ -399,8 +400,7 @@ void Ped::ShowPage()
|
|||||||
{
|
{
|
||||||
Spawner::m_nWeaponId = std::stoi(id);
|
Spawner::m_nWeaponId = std::stoi(id);
|
||||||
weaponName = key;
|
weaponName = key;
|
||||||
},
|
});
|
||||||
nullptr);
|
|
||||||
#endif
|
#endif
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ private:
|
|||||||
static inline int m_nWeaponId;
|
static inline int m_nWeaponId;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void AddNewPed();
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
static void SpawnPed(std::string& model);
|
static void SpawnPed(std::string& model);
|
||||||
#else
|
#else
|
||||||
|
@ -936,7 +936,7 @@ void Player::ShowPage()
|
|||||||
#else
|
#else
|
||||||
ImGui::TextWrapped(TEXT("Player.WorkSkinOnly"));
|
ImGui::TextWrapped(TEXT("Player.WorkSkinOnly"));
|
||||||
#endif
|
#endif
|
||||||
Widget::DataList(skinData, ChangePlayerModel, nullptr);
|
Widget::DataList(skinData, ChangePlayerModel);
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -229,7 +229,7 @@ void Teleport::ShowPage()
|
|||||||
ImGui::Columns(1);
|
ImGui::Columns(1);
|
||||||
#else
|
#else
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImGui::Sameline();
|
ImGui::SameLine();
|
||||||
ImGui::Checkbox(TEXT("Teleport.InsertCoord"), &m_bInsertCoord);
|
ImGui::Checkbox(TEXT("Teleport.InsertCoord"), &m_bInsertCoord);
|
||||||
#endif
|
#endif
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
@ -323,18 +323,6 @@ void Teleport::ShowPage()
|
|||||||
Util::SetMessage(TEXT("Teleport.InvalidLocation"));
|
Util::SetMessage(TEXT("Teleport.InvalidLocation"));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[](std::string& category, std::string& key, std::string& _){
|
|
||||||
if (category == "Custom")
|
|
||||||
{
|
|
||||||
m_locData.m_pData->RemoveKey("Custom", key.c_str());
|
|
||||||
Util::SetMessage(TEXT("Teleport.LocationRemoved"));
|
|
||||||
m_locData.m_pData->Save();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Util::SetMessage(TEXT("Window.CustomRemoveOnly"));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[](){
|
[](){
|
||||||
ImGui::InputTextWithHint(TEXT("Teleport.Location"), TEXT("Teleport.LocationHint"), locBuf, INPUT_BUFFER_SIZE);
|
ImGui::InputTextWithHint(TEXT("Teleport.Location"), TEXT("Teleport.LocationHint"), locBuf, INPUT_BUFFER_SIZE);
|
||||||
ImGui::InputTextWithHint(TEXT("Teleport.Coordinates"), "x, y, z", inBuf, INPUT_BUFFER_SIZE);
|
ImGui::InputTextWithHint(TEXT("Teleport.Coordinates"), "x, y, z", inBuf, INPUT_BUFFER_SIZE);
|
||||||
|
@ -315,6 +315,46 @@ void WarpPlayerIntoVehicle(CVehicle *pVeh, int seatId)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void Vehicle::AddNewVehicle()
|
||||||
|
{
|
||||||
|
static char name[INPUT_BUFFER_SIZE];
|
||||||
|
static int model = 0;
|
||||||
|
ImGui::InputTextWithHint(TEXT("Menu.Name"), "Cheetah", name, INPUT_BUFFER_SIZE);
|
||||||
|
Widget::InputInt(TEXT("Vehicle.Model"), &model, 0, 999999);
|
||||||
|
ImGui::Spacing();
|
||||||
|
ImVec2 sz = Widget::CalcSize(2);
|
||||||
|
if (ImGui::Button(TEXT("Window.AddEntry"), sz))
|
||||||
|
{
|
||||||
|
if (CModelInfo::IsCarModel(model))
|
||||||
|
{
|
||||||
|
std::string key = std::format("Custom.{} (Added)", name);
|
||||||
|
Spawner::m_VehData.m_pData->Set(key.c_str(), std::to_string(model));
|
||||||
|
Spawner::m_VehData.m_pData->Save();
|
||||||
|
Util::SetMessage(TEXT("Window.AddEntryMSG"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Util::SetMessage(TEXT("Vehicle.InvalidID"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button(TEXT("Vehicle.GetCurrentVehInfo"), sz))
|
||||||
|
{
|
||||||
|
CPlayerPed *pPlayer = FindPlayerPed();
|
||||||
|
int hPlayer = CPools::GetPedRef(pPlayer);
|
||||||
|
if (Command<Commands::IS_CHAR_IN_ANY_CAR>(hPlayer))
|
||||||
|
{
|
||||||
|
model = pPlayer->m_pVehicle->m_nModelIndex;
|
||||||
|
std::string str = Vehicle::GetNameFromModel(model);
|
||||||
|
strcpy(name, str.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Util::SetMessage(TEXT("Vehicle.NotInVehicle"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
void Vehicle::SpawnVehicle(std::string& smodel)
|
void Vehicle::SpawnVehicle(std::string& smodel)
|
||||||
#else
|
#else
|
||||||
@ -1141,47 +1181,9 @@ void Vehicle::ShowPage()
|
|||||||
Widget::ImageList(Spawner::m_VehData, SpawnVehicle,
|
Widget::ImageList(Spawner::m_VehData, SpawnVehicle,
|
||||||
[](std::string& str){
|
[](std::string& str){
|
||||||
return GetNameFromModel(std::stoi(str));
|
return GetNameFromModel(std::stoi(str));
|
||||||
}, nullptr,
|
}, nullptr, AddNewVehicle);
|
||||||
[](){
|
|
||||||
static char name[INPUT_BUFFER_SIZE];
|
|
||||||
static int model = 0;
|
|
||||||
ImGui::InputTextWithHint(TEXT("Menu.Name"), "Cheetah", name, INPUT_BUFFER_SIZE);
|
|
||||||
Widget::InputInt(TEXT("Vehicle.Model"), &model, 1, 0, 999999);
|
|
||||||
ImGui::Spacing();
|
|
||||||
ImVec2 sz = Widget::CalcSize(2);
|
|
||||||
if (ImGui::Button(TEXT("Window.AddEntry"), sz))
|
|
||||||
{
|
|
||||||
if (Command<Commands::IS_THIS_MODEL_A_CAR>(model))
|
|
||||||
{
|
|
||||||
std::string key = std::format("Custom.{} (Added)", name);
|
|
||||||
Spawner::m_VehData.m_pData->Set(key.c_str(), std::to_string(model));
|
|
||||||
Spawner::m_VehData.m_pData->Save();
|
|
||||||
Util::SetMessage(TEXT("Window.AddEntryMSG"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Util::SetMessage(TEXT("Vehicle.InvalidID"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ImGui::SameLine();
|
|
||||||
if (ImGui::Button(TEXT("Vehicle.GetCurrentVehInfo"), sz))
|
|
||||||
{
|
|
||||||
CPlayerPed *pPlayer = FindPlayerPed();
|
|
||||||
int hPlayer = CPools::GetPedRef(pPlayer);
|
|
||||||
if (Command<Commands::IS_CHAR_IN_ANY_CAR>(hPlayer))
|
|
||||||
{
|
|
||||||
model = pPlayer->m_pVehicle->m_nModelIndex;
|
|
||||||
std::string str = Vehicle::GetNameFromModel(model);
|
|
||||||
strcpy(name, str.c_str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Util::SetMessage(TEXT("Vehicle.NotInVehicle"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
#else
|
#else
|
||||||
Widget::DataList(Spawner::m_VehData, SpawnVehicle, nullptr);
|
Widget::DataList(Spawner::m_VehData, SpawnVehicle, AddNewVehicle);
|
||||||
#endif
|
#endif
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
}
|
}
|
||||||
@ -1228,7 +1230,7 @@ void Vehicle::ShowPage()
|
|||||||
{
|
{
|
||||||
CVehicle* pVeh = BY_GAME(FindPlayerVehicle(-1, false), FindPlayerVehicle(), FindPlayerVehicle());
|
CVehicle* pVeh = BY_GAME(FindPlayerVehicle(-1, false), FindPlayerVehicle(), FindPlayerVehicle());
|
||||||
StartAutoDrive(pVeh, loc.c_str());
|
StartAutoDrive(pVeh, loc.c_str());
|
||||||
}, nullptr);
|
});
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
}
|
}
|
||||||
ImGui::EndTabBar();
|
ImGui::EndTabBar();
|
||||||
|
@ -97,6 +97,7 @@ public:
|
|||||||
Vehicle() = delete;
|
Vehicle() = delete;
|
||||||
Vehicle(const Vehicle&) = delete;
|
Vehicle(const Vehicle&) = delete;
|
||||||
|
|
||||||
|
static void AddNewVehicle();
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
static void SpawnVehicle(std::string& name);
|
static void SpawnVehicle(std::string& name);
|
||||||
#else
|
#else
|
||||||
|
@ -223,6 +223,23 @@ void Weapon::GiveWeaponToPlayer(std::string& rootkey, std::string& name, std::st
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void Weapon::AddWeapon()
|
||||||
|
{
|
||||||
|
static char name[INPUT_BUFFER_SIZE];
|
||||||
|
static int model = 0;
|
||||||
|
ImGui::InputTextWithHint(TEXT("Menu.Name"), "Minigun", name, INPUT_BUFFER_SIZE);
|
||||||
|
Widget::InputInt(TEXT("Weapon.WeaponType"), &model, 0, 999999);
|
||||||
|
ImGui::Spacing();
|
||||||
|
ImVec2 sz = Widget::CalcSize(1);
|
||||||
|
if (ImGui::Button(TEXT("Window.AddEntry"), sz))
|
||||||
|
{
|
||||||
|
std::string key = std::format("Custom.{} (Added)", name);
|
||||||
|
m_WeaponData.m_pData->Set(key.c_str(), std::to_string(model));
|
||||||
|
m_WeaponData.m_pData->Save();
|
||||||
|
Util::SetMessage(TEXT("Window.AddEntryMSG"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Weapon::ShowPage()
|
void Weapon::ShowPage()
|
||||||
{
|
{
|
||||||
CPlayerPed* pPlayer = FindPlayerPed();
|
CPlayerPed* pPlayer = FindPlayerPed();
|
||||||
@ -367,24 +384,9 @@ void Weapon::ShowPage()
|
|||||||
[](std::string& str)
|
[](std::string& str)
|
||||||
{
|
{
|
||||||
return str != "0"; /*Unarmed*/
|
return str != "0"; /*Unarmed*/
|
||||||
},
|
}, AddWeapon);
|
||||||
[](){
|
|
||||||
static char name[INPUT_BUFFER_SIZE];
|
|
||||||
static int model = 0;
|
|
||||||
ImGui::InputTextWithHint(TEXT("Menu.Name"), "Minigun", name, INPUT_BUFFER_SIZE);
|
|
||||||
Widget::InputInt(TEXT("Weapon.WeaponType"), &model, 1, 0, 999999);
|
|
||||||
ImGui::Spacing();
|
|
||||||
ImVec2 sz = Widget::CalcSize(1);
|
|
||||||
if (ImGui::Button(TEXT("Window.AddEntry"), sz))
|
|
||||||
{
|
|
||||||
std::string key = std::format("Custom.{} (Added)", name);
|
|
||||||
m_WeaponData.m_pData->Set(key.c_str(), std::to_string(model));
|
|
||||||
m_WeaponData.m_pData->Save();
|
|
||||||
Util::SetMessage(TEXT("Window.AddEntryMSG"));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
#else
|
#else
|
||||||
Widget::DataList(m_WeaponData, GiveWeaponToPlayer, nullptr);
|
Widget::DataList(m_WeaponData, GiveWeaponToPlayer, AddWeapon);
|
||||||
#endif
|
#endif
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ public:
|
|||||||
static void Init();
|
static void Init();
|
||||||
static void ShowPage();
|
static void ShowPage();
|
||||||
|
|
||||||
|
static void AddWeapon();
|
||||||
#ifdef GTASA
|
#ifdef GTASA
|
||||||
static inline ResourceStore m_WeaponData { "weapons", eResourceType::TYPE_IMAGE_TEXT, ImVec2(65, 65) };
|
static inline ResourceStore m_WeaponData { "weapons", eResourceType::TYPE_IMAGE_TEXT, ImVec2(65, 65) };
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
static struct
|
static struct
|
||||||
{
|
{
|
||||||
std::string root, key, val;
|
std::string root, key, val;
|
||||||
void* func = nullptr;
|
|
||||||
bool show = false;
|
bool show = false;
|
||||||
bool added = false;
|
bool added = false;
|
||||||
} contextMenu;
|
} contextMenu;
|
||||||
@ -76,7 +75,7 @@ void Widget::Filter(const char* label, ImGuiTextFilter& filter, const char* hint
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Widget::DataList(ResourceStore& data, ArgCallback3 clickFunc, ArgCallback3 removeFunc, ArgCallbackNone addFunc)
|
void Widget::DataList(ResourceStore& data, ArgCallback3 clickFunc, ArgCallbackNone addFunc, bool isEditItem)
|
||||||
{
|
{
|
||||||
if (ImGui::IsMouseClicked(1))
|
if (ImGui::IsMouseClicked(1))
|
||||||
{
|
{
|
||||||
@ -115,14 +114,24 @@ void Widget::DataList(ResourceStore& data, ArgCallback3 clickFunc, ArgCallback3
|
|||||||
{
|
{
|
||||||
std::string root = std::string(k.str());
|
std::string root = std::string(k.str());
|
||||||
std::string val = v2.value_or<std::string>("Unkonwn");
|
std::string val = v2.value_or<std::string>("Unkonwn");
|
||||||
if (ImGui::MenuItem(key.c_str()) && clickFunc != nullptr)
|
|
||||||
|
if (isEditItem)
|
||||||
{
|
{
|
||||||
clickFunc(root, key, val);
|
#ifdef GTASA
|
||||||
|
Widget::EditStat(key.c_str(), std::stoi(val));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ImGui::MenuItem(key.c_str()) && clickFunc != nullptr)
|
||||||
|
{
|
||||||
|
clickFunc(root, key, val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::IsItemClicked(1))
|
if (ImGui::IsItemClicked(1))
|
||||||
{
|
{
|
||||||
contextMenu = {root, key, val, removeFunc, true};
|
contextMenu = {root, key, val, true};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -140,9 +149,19 @@ void Widget::DataList(ResourceStore& data, ArgCallback3 clickFunc, ArgCallback3
|
|||||||
data.m_pData->Save();
|
data.m_pData->Save();
|
||||||
Util::SetMessage(TEXT("Menu.FavouritesText"));
|
Util::SetMessage(TEXT("Menu.FavouritesText"));
|
||||||
}
|
}
|
||||||
if (contextMenu.func && ImGui::MenuItem(TEXT("Menu.Remove")))
|
if (ImGui::MenuItem(TEXT("Menu.Remove")))
|
||||||
{
|
{
|
||||||
static_cast<ArgCallback3>(contextMenu.func)(contextMenu.root, contextMenu.key, contextMenu.val);
|
if (contextMenu.root == "Custom")
|
||||||
|
{
|
||||||
|
data.m_pData->RemoveKey("Custom", contextMenu.key.c_str());
|
||||||
|
data.m_pData->RemoveKey("Favourites", contextMenu.key.c_str());
|
||||||
|
data.m_pData->Save();
|
||||||
|
Util::SetMessage(TEXT("Window.RemoveEntry"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Util::SetMessage(TEXT("Window.CustomRemoveOnly"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (ImGui::MenuItem(TEXT("Menu.Close")))
|
if (ImGui::MenuItem(TEXT("Menu.Close")))
|
||||||
{
|
{
|
||||||
@ -169,15 +188,25 @@ void Widget::DataList(ResourceStore& data, ArgCallback3 clickFunc, ArgCallback3
|
|||||||
if (data.m_Filter.PassFilter(key.c_str()))
|
if (data.m_Filter.PassFilter(key.c_str()))
|
||||||
{
|
{
|
||||||
std::string val = v.value_or<std::string>("Unkonwn");
|
std::string val = v.value_or<std::string>("Unkonwn");
|
||||||
if (ImGui::MenuItem(key.c_str()) && clickFunc != nullptr)
|
|
||||||
|
if (isEditItem)
|
||||||
{
|
{
|
||||||
std::string str = "Favourites";
|
#ifdef GTASA
|
||||||
clickFunc(str, key, val);
|
Widget::EditStat(key.c_str(), std::stoi(val));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ImGui::MenuItem(key.c_str()) && clickFunc != nullptr)
|
||||||
|
{
|
||||||
|
std::string str = "Favourites";
|
||||||
|
clickFunc(str, key, val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::IsItemClicked(1))
|
if (ImGui::IsItemClicked(1))
|
||||||
{
|
{
|
||||||
contextMenu = {std::string("Favourites"), key, val, removeFunc, true};
|
contextMenu = {std::string("Favourites"), key, val, true};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -777,10 +806,10 @@ bool Widget::InputFloat(const char* label, float *val, float change, float min,
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Widget::InputInt(const char* label, int *val, int change, int min, int max)
|
bool Widget::InputInt(const char* label, int *val, int min, int max)
|
||||||
{
|
{
|
||||||
bool state = false;
|
bool state = false;
|
||||||
if (ImGui::InputInt(label, val, change))
|
if (ImGui::InputInt(label, val))
|
||||||
{
|
{
|
||||||
if (min != max)
|
if (min != max)
|
||||||
{
|
{
|
||||||
|
@ -41,8 +41,7 @@ public:
|
|||||||
static bool ColorBtn(int colorId, std::vector<float>& color, ImVec2 size);
|
static bool ColorBtn(int colorId, std::vector<float>& color, ImVec2 size);
|
||||||
|
|
||||||
// Draws DataStore data in the interface
|
// Draws DataStore data in the interface
|
||||||
static void DataList(ResourceStore& data, ArgCallback3 clickFunc, ArgCallback3 removeFunc,
|
static void DataList(ResourceStore& data, ArgCallback3 clickFunc = nullptr, ArgCallbackNone addFunc = nullptr, bool isEditItem = false);
|
||||||
ArgCallbackNone addFunc = nullptr);
|
|
||||||
|
|
||||||
// Draws a dropdown editor for memory address
|
// Draws a dropdown editor for memory address
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -67,7 +66,7 @@ public:
|
|||||||
|
|
||||||
// Input widgets with increment & decrement buttons
|
// Input widgets with increment & decrement buttons
|
||||||
static bool InputFloat(const char* label, float *val, float change = 1.0f, float min = -1.0f, float max = -1.0f);
|
static bool InputFloat(const char* label, float *val, float change = 1.0f, float min = -1.0f, float max = -1.0f);
|
||||||
static bool InputInt(const char* label, int *val, int change = 1, int min = -1, int max = -1);
|
static bool InputInt(const char* label, int *val, int min = -1, int max = -1);
|
||||||
|
|
||||||
// Draws ResourceStore images in the interface
|
// Draws ResourceStore images in the interface
|
||||||
static void ImageList(ResourceStore &store, ArgCallback clickFunc, ArgCallbackRtn getNameFunc,
|
static void ImageList(ResourceStore &store, ArgCallback clickFunc, ArgCallbackRtn getNameFunc,
|
||||||
|
Loading…
Reference in New Issue
Block a user