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"
##############################################################################
[Misc]
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"
[Favourites]
[Girls]
32 = "Girlfriend budget"
65 = "Girlfriend respect"
171 = "Number of girls pimped"
184 = "Current number of girlfriends"
186 = "Number of girls dated"
187 = "Number of times scored with a girl"
189 = "Number of girls dumped"
252 = "Progress with Denise"
253 = "Progress with Michelle"
254 = "Progress with Helena"
255 = "Progress with Barbara"
256 = "Progress with Katie"
257 = "Progress with Millie"
'Current number of girlfriends' = '184'
'Girlfriend budget' = '32'
'Girlfriend respect' = '65'
'Number of girls dated' = '186'
'Number of girls dumped' = '189'
'Number of girls pimped' = '171'
'Number of times scored with a girl' = '187'
'Progress with Barbara' = '255'
'Progress with Denise' = '252'
'Progress with Helena' = '254'
'Progress with Katie' = '256'
'Progress with Michelle' = '253'
'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]
0 = "Progress made"
1 = "Total progress"
58 = "Time spent on longest mission"
59 = "Time spent on quickest mission"
60 = "Average mission time"
146 = "Mission attempts"
147 = "Missions passed"
148 = "Total number of missions in game"
152 = "Criminals killed on Vigilante Mission"
157 = "Highest Vigilante Mission level"
158 = "Highest Paramedic Mission level"
159 = "Highest Firefighter Mission level"
161 = "Number of Truck missions passed"
201 = "Money made in Quarry"
202 = "Time taken to Complete Quarry"
224 = "Respect Mission"
228 = "Respect Mission Total"
258 = "Best position in Lowrider Race"
259 = "Best time in Lowrider Race"
260 = "Best position in Little Loop"
261 = "Best time in Little Loop"
262 = "Best position in Backroad Wanderer"
263 = "Best time in Backroad Wanderer"
264 = "Best position in City Circuit"
265 = "Best time in City Circuit"
266 = "Best position in Vinewood"
267 = "Best time in Vinewood"
268 = "Best position in Freeway"
269 = "Best time in Freeway"
270 = "Best position in Into the Country"
271 = "Best time in Into the Country"
272 = "Best position in Badlands A"
273 = "Best time in Badlands A"
274 = "Best position in Badlands B"
275 = "Best time in Badlands B"
276 = "Best position in Dirtbike Danger"
277 = "Best time in Dirtbike Danger"
278 = "Best position in Bandito County"
279 = "Best time in Bandito County"
280 = "Best position in Go-Go-Kart"
281 = "Best time in Go-Go-Kart"
282 = "Best position in San Fierro Fastlane"
283 = "Best time in San Fierro Fastlane"
284 = "Best position in San Fierro Hills"
285 = "Best time in San Fierro Hills"
286 = "Best position in Country Endurance"
287 = "Best time in Country Endurance"
288 = "Best position in SF to LV"
289 = "Best time in SF to LV"
290 = "Best position in Dam Rider"
291 = "Best time in Dam Rider"
292 = "Best position in Desert Tricks"
293 = "Best time in Desert Tricks"
294 = "Best position in LV Ringroad"
295 = "Best time in LV Ringroad"
296 = "Best time in World War Aces"
297 = "Best time in Barnstorming"
298 = "Best time in Military Service"
299 = "Best time in Chopper Checkpoint"
300 = "Best time in Whirly Bird Waypoint"
301 = "Best time in Heli Hell"
302 = "Drive-thru mission accomplished"
303 = "Management Issues mission accomplished"
304 = "555 WE TIP mission accomplished"
305 = "Yay Ka-Boom-Boom mission accomplished"
306 = "Fish in a Barrel mission accomplished"
307 = "Breaking the Bank at Caligula's mission accomplished"
308 = "A Home In The Hills mission accomplished"
309 = "maybe set riot mode"
310 = "Ryder's mission Robbing Uncle Sam accomplished"
311 = "Mike Toreno mission accomplished"
312 = "Architectural Espionage mission accomplished"
313 = "Jizzy mission accomplished"
314 = "Reuniting the Families mission accomplished"
315 = "Small Town Bank mission accomplished"
316 = "Photo Opportunity mission accomplished"
317 = "Don Peyote mission accomplished"
318 = "Local Liquor Store mission accomplished"
319 = "Badlands mission accomplished"
335 = "Riot Mission accomplished"
337 = "Territory under control"
338 = "Are you going to San Fierro? mission accomplished"
339 = "High Noon mission accomplished"
340 = "The Green Sabre mission accomplished"
341 = "maybe Catalina meeting"
342 = "maybe Wu Zi meeting"
'555 WE TIP mission accomplished' = '304'
'A Home In The Hills mission accomplished' = '308'
'Architectural Espionage mission accomplished' = '312'
'Are you going to San Fierro? mission accomplished' = '338'
'Average mission time' = '60'
'Badlands mission accomplished' = '319'
'Best position in Backroad Wanderer' = '262'
'Best position in Badlands A' = '272'
'Best position in Badlands B' = '274'
'Best position in Bandito County' = '278'
'Best position in City Circuit' = '264'
'Best position in Country Endurance' = '286'
'Best position in Dam Rider' = '290'
'Best position in Desert Tricks' = '292'
'Best position in Dirtbike Danger' = '276'
'Best position in Freeway' = '268'
'Best position in Go-Go-Kart' = '280'
'Best position in Into the Country' = '270'
'Best position in LV Ringroad' = '294'
'Best position in Little Loop' = '260'
'Best position in Lowrider Race' = '258'
'Best position in SF to LV' = '288'
'Best position in San Fierro Fastlane' = '282'
'Best position in San Fierro Hills' = '284'
'Best position in Vinewood' = '266'
'Best time in Backroad Wanderer' = '263'
'Best time in Badlands A' = '273'
'Best time in Badlands B' = '275'
'Best time in Bandito County' = '279'
'Best time in Barnstorming' = '297'
'Best time in Chopper Checkpoint' = '299'
'Best time in City Circuit' = '265'
'Best time in Country Endurance' = '287'
'Best time in Dam Rider' = '291'
'Best time in Desert Tricks' = '293'
'Best time in Dirtbike Danger' = '277'
'Best time in Freeway' = '269'
'Best time in Go-Go-Kart' = '281'
'Best time in Heli Hell' = '301'
'Best time in Into the Country' = '271'
'Best time in LV Ringroad' = '295'
'Best time in Little Loop' = '261'
'Best time in Lowrider Race' = '259'
'Best time in Military Service' = '298'
'Best time in SF to LV' = '289'
'Best time in San Fierro Fastlane' = '283'
'Best time in San Fierro Hills' = '285'
'Best time in Vinewood' = '267'
'Best time in Whirly Bird Waypoint' = '300'
'Best time in World War Aces' = '296'
"Breaking the Bank at Caligula's mission accomplished" = '307'
'Criminals killed on Vigilante Mission' = '152'
'Don Peyote mission accomplished' = '317'
'Drive-thru mission accomplished' = '302'
'Fish in a Barrel mission accomplished' = '306'
'High Noon mission accomplished' = '339'
'Highest Firefighter Mission level' = '159'
'Highest Paramedic Mission level' = '158'
'Highest Vigilante Mission level' = '157'
'Jizzy mission accomplished' = '313'
'Local Liquor Store mission accomplished' = '318'
'Management Issues mission accomplished' = '303'
'Mike Toreno mission accomplished' = '311'
'Mission attempts' = '146'
'Missions passed' = '147'
'Money made in Quarry' = '201'
'Number of Truck missions passed' = '161'
'Photo Opportunity mission accomplished' = '316'
'Progress made' = '0'
'Respect Mission' = '224'
'Respect Mission Total' = '228'
'Reuniting the Families mission accomplished' = '314'
'Riot Mission accomplished' = '335'
"Ryder's mission Robbing Uncle Sam accomplished" = '310'
'Small Town Bank mission accomplished' = '315'
'Territory under control' = '337'
'The Green Sabre mission accomplished' = '340'
'Time spent on longest mission' = '58'
'Time spent on quickest mission' = '59'
'Time taken to Complete Quarry' = '202'
'Total number of missions in game' = '148'
'Total progress' = '1'
'Yay Ka-Boom-Boom mission accomplished' = '305'
'maybe Catalina meeting' = '341'
'maybe Wu Zi meeting' = '342'
'maybe set riot mode' = '309'
[Money]
14 = "Fashion Budget"
15 = "Property Budget"
20 = "Food Budget"
30 = "Tattoo budget"
31 = "Hairdressing budget"
33 = "Prostitute budget"
34 = "Furniture budget"
35 = "Money spent gambling"
36 = "Money made from pimping"
37 = "Money won gambling"
38 = "Biggest gambling win"
39 = "Biggest gambling loss"
40 = "Largest burglary swag"
41 = "Money made from burglary"
42 = "Money spent building property"
53 = "Wage bill"
54 = "Strip club budget"
56 = "Time spent shopping"
57 = "Time spent gambling"
61 = "Drugs budget"
62 = "Total shopping budget"
'Biggest gambling loss' = '39'
'Biggest gambling win' = '38'
'Drugs budget' = '61'
'Fashion Budget' = '14'
'Food Budget' = '20'
'Furniture budget' = '34'
'Hairdressing budget' = '31'
'Largest burglary swag' = '40'
'Money made from burglary' = '41'
'Money made from pimping' = '36'
'Money spent building property' = '42'
'Money spent gambling' = '35'
'Money won gambling' = '37'
'Property Budget' = '15'
'Prostitute budget' = '33'
'Strip club budget' = '54'
'Tattoo budget' = '30'
'Time spent gambling' = '57'
'Time spent shopping' = '56'
'Total shopping budget' = '62'
'Wage bill' = '53'
[Vehicle]
2 = "Furthest Hoop"
3 = "Distance travelled on foot"
4 = "Distance travelled by car"
5 = "Distance travelled by motorbike"
6 = "Distance travelled by boat"
7 = "Distance travelled by golf cart"
8 = "Distance travelled by helicopter"
9 = "Distance travelled by plane"
10 = "Longest Wheelie distance"
11 = "Longest Stoppie distance"
12 = "Longest 2 wheels distance"
16 = "Auto Repair and Painting Budget"
17 = "Longest Wheelie time"
18 = "Longest Stoppie time"
19 = "Longest 2 wheels time"
26 = "Distance travelled by swimming"
27 = "Distance travelled by bicycle"
28 = "Distance travelled on treadmill"
29 = "Distance travelled on exercise bike"
49 = "BMX best time"
55 = "Car modification budget"
122 = "Road Vehicles destroyed"
123 = "Boats destroyed"
124 = "Planes & Helicopters destroyed"
125 = "Cost of property damaged"
138 = "Vehicle Resprays"
139 = "Maximum INSANE Jump distance"
140 = "Maximum INSANE Jump height"
141 = "Maximum INSANE Jump flips"
142 = "Maximum INSANE Jump rotation"
143 = "Best INSANE stunt awarded"
144 = "Unique Jumps found"
145 = "Unique Jumps done"
149 = "Cash made in a Taxi"
150 = "Passengers dropped off"
151 = "People saved in an Ambulance"
153 = "Total fires extinguished"
154 = "Packages Delivered"
155 = "Assassinations"
160 = "Driving skill"
162 = "Money made in Truck"
219 = "Best lap time in dirt track"
220 = "Best time in dirt track"
221 = "Best position in dirt track"
222 = "NRG-500 best time"
223 = "Flying skill"
229 = "Bike skill"
230 = "Cycling skill"
Assassinations = '155'
'Auto Repair and Painting Budget' = '16'
'BMX best time' = '49'
'Best INSANE stunt awarded' = '143'
'Best lap time in dirt track' = '219'
'Best position in dirt track' = '221'
'Best time in dirt track' = '220'
'Bike skill' = '229'
'Boats destroyed' = '123'
'Car modification budget' = '55'
'Cash made in a Taxi' = '149'
'Cost of property damaged' = '125'
'Cycling skill' = '230'
'Distance travelled by bicycle' = '27'
'Distance travelled by boat' = '6'
'Distance travelled by car' = '4'
'Distance travelled by golf cart' = '7'
'Distance travelled by helicopter' = '8'
'Distance travelled by motorbike' = '5'
'Distance travelled by plane' = '9'
'Distance travelled by swimming' = '26'
'Distance travelled on exercise bike' = '29'
'Distance travelled on foot' = '3'
'Distance travelled on treadmill' = '28'
'Driving skill' = '160'
'Flying skill' = '223'
'Furthest Hoop' = '2'
'Longest 2 wheels distance' = '12'
'Longest 2 wheels time' = '19'
'Longest Stoppie distance' = '11'
'Longest Stoppie time' = '18'
'Longest Wheelie distance' = '10'
'Longest Wheelie time' = '17'
'Maximum INSANE Jump distance' = '139'
'Maximum INSANE Jump flips' = '141'
'Maximum INSANE Jump height' = '140'
'Maximum INSANE Jump rotation' = '142'
'Money made in Truck' = '162'
'NRG-500 best time' = '222'
'Packages Delivered' = '154'
'Passengers dropped off' = '150'
'People saved in an Ambulance' = '151'
'Planes & Helicopters destroyed' = '124'
'Road Vehicles destroyed' = '122'
'Total fires extinguished' = '153'
'Unique Jumps done' = '145'
'Unique Jumps found' = '144'
'Vehicle Resprays' = '138'
[Weapons]
13 = "Weapon Budget"
69 = "Pistol Skill"
70 = "Silenced Pistol Skill"
71 = "Desert Eagle Skill"
72 = "Shotgun Skill"
73 = "Sawn-Off Shotgun Skill"
74 = "Combat Shotgun Skill"
75 = "Machine Pistol Skill"
76 = "SMG Skill"
77 = "AK-47 Skill"
78 = "M4 Skill"
79 = "Rifle Skill"
126 = "Bullets fired"
127 = "Kgs of explosives used"
128 = "Bullets that hit"
129 = "Tires popped with gunfire"
130 = "Number of headshots"
328 = "Current weapon skill"
329 = "Weapon skill levels"
'AK-47 Skill' = '77'
'Bullets fired' = '126'
'Bullets that hit' = '128'
'Combat Shotgun Skill' = '74'
'Current weapon skill' = '328'
'Desert Eagle Skill' = '71'
'Kgs of explosives used' = '127'
'M4 Skill' = '78'
'Machine Pistol Skill' = '75'
'Number of headshots' = '130'
'Pistol Skill' = '69'
'Rifle Skill' = '79'
'SMG Skill' = '76'
'Sawn-Off Shotgun Skill' = '73'
'Shotgun Skill' = '72'
'Silenced Pistol Skill' = '70'
'Tires popped with gunfire' = '129'
'Weapon Budget' = '13'
'Weapon skill levels' = '329'

View File

@ -817,6 +817,7 @@ MenusTab = "Menus"
Minimum = "Min"
PedPage = "Ped"
PlayerPage = "Player"
RemoveEntry = "Entry removed"
Search = "Search"
LocationsTab = "Locations"
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
// Thanks to codenulls(https://github.com/codenulls/)
@ -191,7 +176,7 @@ void _PlayAnim(RpClump* pClump, int animGroup, int animID, float blend, bool loo
}
#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();
if (!pPed)
@ -230,20 +215,6 @@ void Animation::Play(std::string& ifp, std::string& anim, std::string& _)
#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()
{
#ifdef GTASA
@ -345,7 +316,7 @@ void Animation::ShowPage()
if (ImGui::BeginChild("Anims Child"))
{
ImGui::Spacing();
Widget::DataList(m_AnimData, Play, Remove,
Widget::DataList(m_AnimData, Play,
[](){
static char animBuf[INPUT_BUFFER_SIZE];
static char ifpBuf[INPUT_BUFFER_SIZE];
@ -446,7 +417,7 @@ void Animation::ShowPage()
if (ImGui::BeginChild("Cutscene Child"))
{
ImGui::Spacing();
Widget::DataList(Cutscene::m_Data, Cutscene::Play, nullptr);
Widget::DataList(Cutscene::m_Data, Cutscene::Play);
ImGui::EndChild();
}
ImGui::EndTabItem();
@ -478,7 +449,7 @@ void Animation::ShowPage()
if (ImGui::BeginChild("Anims Child"))
{
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];
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 void Play(std::string& rootKey, std::string& particle, std::string& dummy);
static void Remove(std::string& ifp, std::string& anim, std::string& ifpRepeat);
};
#endif
@ -36,7 +35,6 @@ private:
static inline CPed *m_pTarget = nullptr;
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
static void DrawPedTasks();

View File

@ -1020,14 +1020,13 @@ void Game::ShowPage()
ImGui::Spacing();
Widget::DataList(m_MissionData, SetPlayerMission, nullptr);
Widget::DataList(m_MissionData, SetPlayerMission);
}
ImGui::EndTabItem();
}
#ifdef GTASA
if (ImGui::BeginTabItem(TEXT("Game.Stats")))
{
// similar to Widget::DataList()
ImGui::Spacing();
if (ImGui::Button(TEXT("Game.MaxWepSkills"), Widget::CalcSize(2)))
@ -1051,29 +1050,7 @@ void Game::ShowPage()
}
ImGui::Spacing();
ImGui::PushItemWidth((ImGui::GetWindowContentRegionWidth() - ImGui::GetStyle().ItemSpacing.x)/2);
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();
Widget::DataList(m_StatData, nullptr, nullptr, true);
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem(TEXT("Game.RandomCheats")))

View File

@ -86,6 +86,37 @@ void Ped::Init()
#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
void Ped::SpawnPed(std::string& model)
#else
@ -308,39 +339,9 @@ void Ped::ShowPage()
Widget::ImageList(m_PedData, SpawnPed,
[](std::string& str){
return m_PedData.m_pData->Get(str.c_str(), "Unknown");
}, nullptr,
[](){
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;
}
});
}, nullptr, AddNewPed);
#else
Widget::DataList(m_PedData, SpawnPed, nullptr);
Widget::DataList(m_PedData, SpawnPed, AddNewPed);
#endif
ImGui::EndTabItem();
}
@ -399,8 +400,7 @@ void Ped::ShowPage()
{
Spawner::m_nWeaponId = std::stoi(id);
weaponName = key;
},
nullptr);
});
#endif
ImGui::EndTabItem();
}

View File

@ -18,6 +18,7 @@ private:
static inline int m_nWeaponId;
};
static void AddNewPed();
#ifdef GTASA
static void SpawnPed(std::string& model);
#else

View File

@ -936,7 +936,7 @@ void Player::ShowPage()
#else
ImGui::TextWrapped(TEXT("Player.WorkSkinOnly"));
#endif
Widget::DataList(skinData, ChangePlayerModel, nullptr);
Widget::DataList(skinData, ChangePlayerModel);
ImGui::EndTabItem();
}
#endif

View File

@ -229,7 +229,7 @@ void Teleport::ShowPage()
ImGui::Columns(1);
#else
ImGui::Spacing();
ImGui::Sameline();
ImGui::SameLine();
ImGui::Checkbox(TEXT("Teleport.InsertCoord"), &m_bInsertCoord);
#endif
ImGui::Spacing();
@ -323,18 +323,6 @@ void Teleport::ShowPage()
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.Coordinates"), "x, y, z", inBuf, INPUT_BUFFER_SIZE);

View File

@ -315,6 +315,46 @@ void WarpPlayerIntoVehicle(CVehicle *pVeh, int seatId)
}
#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
void Vehicle::SpawnVehicle(std::string& smodel)
#else
@ -1141,47 +1181,9 @@ void Vehicle::ShowPage()
Widget::ImageList(Spawner::m_VehData, SpawnVehicle,
[](std::string& str){
return GetNameFromModel(std::stoi(str));
}, nullptr,
[](){
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"));
}
}
});
}, nullptr, AddNewVehicle);
#else
Widget::DataList(Spawner::m_VehData, SpawnVehicle, nullptr);
Widget::DataList(Spawner::m_VehData, SpawnVehicle, AddNewVehicle);
#endif
ImGui::EndTabItem();
}
@ -1228,7 +1230,7 @@ void Vehicle::ShowPage()
{
CVehicle* pVeh = BY_GAME(FindPlayerVehicle(-1, false), FindPlayerVehicle(), FindPlayerVehicle());
StartAutoDrive(pVeh, loc.c_str());
}, nullptr);
});
ImGui::EndTabItem();
}
ImGui::EndTabBar();

View File

@ -97,6 +97,7 @@ public:
Vehicle() = delete;
Vehicle(const Vehicle&) = delete;
static void AddNewVehicle();
#ifdef GTASA
static void SpawnVehicle(std::string& name);
#else

View File

@ -223,6 +223,23 @@ void Weapon::GiveWeaponToPlayer(std::string& rootkey, std::string& name, std::st
}
#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()
{
CPlayerPed* pPlayer = FindPlayerPed();
@ -367,24 +384,9 @@ void Weapon::ShowPage()
[](std::string& str)
{
return str != "0"; /*Unarmed*/
},
[](){
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"));
}
});
}, AddWeapon);
#else
Widget::DataList(m_WeaponData, GiveWeaponToPlayer, nullptr);
Widget::DataList(m_WeaponData, GiveWeaponToPlayer, AddWeapon);
#endif
ImGui::EndTabItem();
}

View File

@ -43,6 +43,7 @@ public:
static void Init();
static void ShowPage();
static void AddWeapon();
#ifdef GTASA
static inline ResourceStore m_WeaponData { "weapons", eResourceType::TYPE_IMAGE_TEXT, ImVec2(65, 65) };

View File

@ -5,7 +5,6 @@
static struct
{
std::string root, key, val;
void* func = nullptr;
bool show = false;
bool added = false;
} 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))
{
@ -115,14 +114,24 @@ void Widget::DataList(ResourceStore& data, ArgCallback3 clickFunc, ArgCallback3
{
std::string root = std::string(k.str());
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))
{
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();
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")))
{
@ -169,15 +188,25 @@ void Widget::DataList(ResourceStore& data, ArgCallback3 clickFunc, ArgCallback3
if (data.m_Filter.PassFilter(key.c_str()))
{
std::string val = v.value_or<std::string>("Unkonwn");
if (ImGui::MenuItem(key.c_str()) && clickFunc != nullptr)
if (isEditItem)
{
std::string str = "Favourites";
clickFunc(str, key, val);
#ifdef GTASA
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))
{
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;
}
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;
if (ImGui::InputInt(label, val, change))
if (ImGui::InputInt(label, val))
{
if (min != max)
{

View File

@ -41,8 +41,7 @@ public:
static bool ColorBtn(int colorId, std::vector<float>& color, ImVec2 size);
// Draws DataStore data in the interface
static void DataList(ResourceStore& data, ArgCallback3 clickFunc, ArgCallback3 removeFunc,
ArgCallbackNone addFunc = nullptr);
static void DataList(ResourceStore& data, ArgCallback3 clickFunc = nullptr, ArgCallbackNone addFunc = nullptr, bool isEditItem = false);
// Draws a dropdown editor for memory address
template <typename T>
@ -67,7 +66,7 @@ public:
// 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 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
static void ImageList(ResourceStore &store, ArgCallback clickFunc, ArgCallbackRtn getNameFunc,