Skip to content

Commit 4cdfe0e

Browse files
author
pongo1231
committed
Ped Randomizer: Add compatibility for changing ForcePed in debug menu
1 parent 5c5c0ae commit 4cdfe0e

File tree

2 files changed

+72
-33
lines changed

2 files changed

+72
-33
lines changed

src/peds/peds.cc

+4-32
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,12 @@ class PedRandomizer
8181
return model;
8282

8383
// Forced Ped
84-
if (!PR::Config ().ForcedPedHashes.empty ())
84+
PR::Config ().ForcedPedHashes = PR::Config ().ForcedPed;
85+
if (!PR::Config ().ForcedPedHashes.Get ().empty ())
8586
{
8687
uint32_t id = CStreaming::GetModelIndex (
87-
PR::Config ().ForcedPedHashes [ 0, RandomInt(PR::Config()
88-
.ForcedPedHashes.size() - 1) ]);
88+
PR::Config ().ForcedPedHashes.Get ()[ 0, RandomInt(PR::Config()
89+
.ForcedPedHashes.Get ().size () - 1) ]);
8990

9091
if (CStreaming::HasModelLoaded (id))
9192
return id;
@@ -191,35 +192,6 @@ class PedRandomizer
191192
OPTION (OddsOfPlayerModels)))
192193
return;
193194

194-
if (PR::Config ().ForcedPed.size ())
195-
{
196-
std::string forcedPeds = PR::Config ().ForcedPed;
197-
198-
while (true)
199-
{
200-
size_t splitPos = forcedPeds.find (',');
201-
202-
std::string forcedPed = forcedPeds.substr (0, splitPos);
203-
204-
// trimming
205-
forcedPed.erase (0, forcedPed.find_first_not_of (' '));
206-
if (forcedPed.find_last_not_of (' ') != forcedPed.npos)
207-
forcedPed.erase (forcedPed.find_last_not_of (' ') + 1);
208-
209-
// just in case it was just whitespace
210-
if (forcedPed.size ())
211-
PR::Config ().ForcedPedHashes
212-
.push_back (rage::atStringHash (forcedPed));
213-
214-
if (splitPos == forcedPeds.npos)
215-
{
216-
break;
217-
}
218-
219-
forcedPeds.erase (0, splitPos + 1);
220-
}
221-
}
222-
223195
InitialiseAllComponents ();
224196

225197
// Hooks

src/peds/peds.hh

+68-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,73 @@
1111
#include "peds_AnimalFixes.hh"
1212
#include "peds_MainFixes.hh"
1313

14+
class PedRandomizer_PedHashes
15+
{
16+
std::string m_ForcedPedStr;
17+
std::vector<uint32_t> m_ForcedPedHashes;
18+
19+
public:
20+
/*******************************************************/
21+
PedRandomizer_PedHashes () = default;
22+
23+
/*******************************************************/
24+
PedRandomizer_PedHashes (const std::string &forcedPedStr)
25+
: m_ForcedPedStr (forcedPedStr)
26+
{
27+
UpdateHashes (forcedPedStr);
28+
}
29+
30+
/*******************************************************/
31+
void
32+
operator= (const std::string &forcedPedStr)
33+
{
34+
if (m_ForcedPedStr != forcedPedStr)
35+
{
36+
m_ForcedPedStr = forcedPedStr;
37+
UpdateHashes (forcedPedStr);
38+
}
39+
}
40+
41+
/*******************************************************/
42+
void
43+
UpdateHashes (std::string forcedPedStr)
44+
{
45+
m_ForcedPedHashes.clear ();
46+
47+
if (forcedPedStr.size ())
48+
{
49+
while (true)
50+
{
51+
auto splitPos = forcedPedStr.find (',');
52+
auto forcedPed = std::string (forcedPedStr.substr (0, splitPos));
53+
54+
// trimming
55+
forcedPed.erase (0, forcedPed.find_first_not_of (' '));
56+
if (forcedPed.find_last_not_of (' ') != forcedPed.npos)
57+
forcedPed.erase (forcedPed.find_last_not_of (' ') + 1);
58+
59+
if (forcedPed.size ())
60+
m_ForcedPedHashes
61+
.push_back (rage::atStringHash (forcedPed));
62+
63+
if (splitPos == forcedPedStr.npos)
64+
{
65+
break;
66+
}
67+
68+
forcedPedStr.erase (0, splitPos + 1);
69+
}
70+
}
71+
}
72+
73+
/*******************************************************/
74+
const std::vector<uint32_t> &
75+
Get () const
76+
{
77+
return m_ForcedPedHashes;
78+
}
79+
};
80+
1481
class PedRandomizer_Components
1582
{
1683
public:
@@ -21,7 +88,7 @@ public:
2188
{
2289
std::string ForcedPed = "";
2390
std::string ForcedClipset = "";
24-
std::vector<uint32_t> ForcedPedHashes;
91+
PedRandomizer_PedHashes ForcedPedHashes;
2592
bool EnableNSFWModels = false;
2693
bool RandomizePlayer = true;
2794
bool RandomizePeds = true;

0 commit comments

Comments
 (0)