Implement per-client randomized menus with MenuShufflePerClient native.
Add MenuSetClientMapping native.
This commit is contained in:
parent
a9c85d8842
commit
03eeb23ab3
@ -754,6 +754,62 @@ unsigned int CBaseMenu::GetRealItemIndex(int client, unsigned int position)
|
|||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CBaseMenu::ShufflePerClient(int start, int stop)
|
||||||
|
{
|
||||||
|
// limit map len to 255 items since it's using uint8
|
||||||
|
int length = MIN(GetItemCount(), 255);
|
||||||
|
if (stop >= 0)
|
||||||
|
length = MIN(length, stop);
|
||||||
|
|
||||||
|
for (int i = 1; i < SM_MAXPLAYERS + 1; i++)
|
||||||
|
{
|
||||||
|
// populate per-client map ...
|
||||||
|
m_RandomMaps[i].resize(length);
|
||||||
|
for (int j = 0; j < length; j++)
|
||||||
|
m_RandomMaps[i][j] = j;
|
||||||
|
|
||||||
|
// ... and random shuffle it
|
||||||
|
for (int j = length - 1; j > start; j--)
|
||||||
|
{
|
||||||
|
int x = rand() % (j - start + 1) + start;
|
||||||
|
uint8_t tmp = m_RandomMaps[i][x];
|
||||||
|
m_RandomMaps[i][x] = m_RandomMaps[i][j];
|
||||||
|
m_RandomMaps[i][j] = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CBaseMenu::SetClientMapping(int client, int *array, int length)
|
||||||
|
{
|
||||||
|
length = MIN(length, 255);
|
||||||
|
m_RandomMaps[client].resize(length);
|
||||||
|
for (int i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
m_RandomMaps[client][i] = array[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CBaseMenu::IsPerClientShuffled()
|
||||||
|
{
|
||||||
|
for (int i = 1; i < SM_MAXPLAYERS + 1; i++)
|
||||||
|
{
|
||||||
|
if(m_RandomMaps[i].length() > 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int CBaseMenu::GetRealItemIndex(int client, unsigned int position)
|
||||||
|
{
|
||||||
|
if (client > 0 && position < m_RandomMaps[client].length())
|
||||||
|
{
|
||||||
|
position = m_RandomMaps[client][position];
|
||||||
|
return m_items[position].index;
|
||||||
|
}
|
||||||
|
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int CBaseMenu::GetItemCount()
|
unsigned int CBaseMenu::GetItemCount()
|
||||||
{
|
{
|
||||||
return m_items.size();
|
return m_items.size();
|
||||||
|
Loading…
Reference in New Issue
Block a user