Refactor code, [III | VC]add new peds, cars, wepons from menu

This commit is contained in:
Grinch_ 2022-08-05 00:42:52 +06:00
parent 4b9ab8890c
commit 088f84a981
16 changed files with 2171 additions and 2197 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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'

View File

@ -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"

View File

@ -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);

View File

@ -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();

View File

@ -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")))

View File

@ -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();
} }

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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();

View File

@ -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

View File

@ -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();
} }

View File

@ -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) };

View File

@ -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)
{ {

View File

@ -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,