fixed prefixed names are not cleared upon bot disconnect
This commit is contained in:
parent
55d9227221
commit
2eec5839bd
4 changed files with 22 additions and 14 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -63,3 +63,4 @@ project/yapb.vcxproj.user
|
||||||
/project/#Verone/incremental_index
|
/project/#Verone/incremental_index
|
||||||
*.vsp
|
*.vsp
|
||||||
*.lastcodeanalysissucceeded
|
*.lastcodeanalysissucceeded
|
||||||
|
*.json
|
||||||
|
|
|
||||||
|
|
@ -602,7 +602,7 @@ struct BotName
|
||||||
{
|
{
|
||||||
String steamId;
|
String steamId;
|
||||||
String name;
|
String name;
|
||||||
bool used;
|
int usedBy;
|
||||||
};
|
};
|
||||||
|
|
||||||
// voice config structure definition
|
// voice config structure definition
|
||||||
|
|
|
||||||
|
|
@ -512,7 +512,7 @@ void InitConfig (void)
|
||||||
memset (&item, 0, sizeof (item));
|
memset (&item, 0, sizeof (item));
|
||||||
|
|
||||||
item.name = line;
|
item.name = line;
|
||||||
item.used = false;
|
item.usedBy = 0;
|
||||||
|
|
||||||
if (pair.GetElementNumber () > 1)
|
if (pair.GetElementNumber () > 1)
|
||||||
item.steamId = pair[1].Trim ();
|
item.steamId = pair[1].Trim ();
|
||||||
|
|
@ -1134,8 +1134,6 @@ void ClientDisconnect (edict_t *ent)
|
||||||
if (bot->pev == &ent->v)
|
if (bot->pev == &ent->v)
|
||||||
{
|
{
|
||||||
bot->EnableChatterIcon (false);
|
bot->EnableChatterIcon (false);
|
||||||
bot->ReleaseUsedName ();
|
|
||||||
|
|
||||||
bots.Free (i);
|
bots.Free (i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,7 @@ BotCreationResult BotManager::CreateBot (const String &name, int difficulty, int
|
||||||
}
|
}
|
||||||
|
|
||||||
String steamId = "";
|
String steamId = "";
|
||||||
|
BotName *botName = nullptr;
|
||||||
|
|
||||||
// setup name
|
// setup name
|
||||||
if (name.IsEmpty ())
|
if (name.IsEmpty ())
|
||||||
|
|
@ -160,23 +161,23 @@ BotCreationResult BotManager::CreateBot (const String &name, int difficulty, int
|
||||||
{
|
{
|
||||||
bool nameFound = false;
|
bool nameFound = false;
|
||||||
|
|
||||||
for (int i = 0; i < g_botNames.GetSize (); i++)
|
FOR_EACH_AE (g_botNames, i)
|
||||||
{
|
{
|
||||||
if (nameFound)
|
if (nameFound)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
BotName *pickedName = &g_botNames.GetRandomElement ();
|
botName = &g_botNames.GetRandomElement ();
|
||||||
|
|
||||||
if (pickedName == nullptr)
|
if (botName == nullptr)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (pickedName->used)
|
if (botName->usedBy != 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
pickedName->used = nameFound = true;
|
nameFound = true;
|
||||||
strncpy (outputName, pickedName->name, SIZEOF_CHAR (outputName));
|
strncpy (outputName, botName->name, SIZEOF_CHAR (outputName));
|
||||||
|
|
||||||
steamId = pickedName->steamId;
|
steamId = botName->steamId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -205,6 +206,9 @@ BotCreationResult BotManager::CreateBot (const String &name, int difficulty, int
|
||||||
}
|
}
|
||||||
int index = engine.IndexOfEntity (bot) - 1;
|
int index = engine.IndexOfEntity (bot) - 1;
|
||||||
|
|
||||||
|
// ensure it free
|
||||||
|
Free (index);
|
||||||
|
|
||||||
InternalAssert (index >= 0 && index <= MAX_ENGINE_PLAYERS); // check index
|
InternalAssert (index >= 0 && index <= MAX_ENGINE_PLAYERS); // check index
|
||||||
InternalAssert (m_bots[index] == nullptr); // check bot slot
|
InternalAssert (m_bots[index] == nullptr); // check bot slot
|
||||||
|
|
||||||
|
|
@ -213,6 +217,10 @@ BotCreationResult BotManager::CreateBot (const String &name, int difficulty, int
|
||||||
if (m_bots[index] == nullptr)
|
if (m_bots[index] == nullptr)
|
||||||
TerminateOnMalloc ();
|
TerminateOnMalloc ();
|
||||||
|
|
||||||
|
// assign owner of bot name
|
||||||
|
if (botName != nullptr)
|
||||||
|
botName->usedBy = m_bots[index]->GetIndex ();
|
||||||
|
|
||||||
engine.Printf ("Connecting Bot...");
|
engine.Printf ("Connecting Bot...");
|
||||||
|
|
||||||
if (isConsoleCmd)
|
if (isConsoleCmd)
|
||||||
|
|
@ -853,7 +861,7 @@ Bot::Bot (edict_t *bot, int difficulty, int personality, int team, int member, c
|
||||||
int clientIndex = engine.IndexOfEntity (bot);
|
int clientIndex = engine.IndexOfEntity (bot);
|
||||||
|
|
||||||
memset (reinterpret_cast <void *> (this), 0, sizeof (*this));
|
memset (reinterpret_cast <void *> (this), 0, sizeof (*this));
|
||||||
|
|
||||||
pev = &bot->v;
|
pev = &bot->v;
|
||||||
|
|
||||||
if (bot->pvPrivateData != nullptr)
|
if (bot->pvPrivateData != nullptr)
|
||||||
|
|
@ -969,9 +977,9 @@ void Bot::ReleaseUsedName (void)
|
||||||
{
|
{
|
||||||
BotName &name = g_botNames[j];
|
BotName &name = g_botNames[j];
|
||||||
|
|
||||||
if (strcmp (name.name, STRING (pev->netname)) == 0)
|
if (name.usedBy == GetIndex ())
|
||||||
{
|
{
|
||||||
name.used = false;
|
name.usedBy = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -981,6 +989,7 @@ Bot::~Bot (void)
|
||||||
{
|
{
|
||||||
// this is bot destructor
|
// this is bot destructor
|
||||||
|
|
||||||
|
ReleaseUsedName ();
|
||||||
DeleteSearchNodes ();
|
DeleteSearchNodes ();
|
||||||
ResetTasks ();
|
ResetTasks ();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue