nuclide/src/botlib/cmd.qc

91 lines
2.1 KiB
Plaintext

/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
void
Bot_PickName(entity target)
{
int n = 0;
entity pbot = world;
for (int i = 1; (pbot = edict_num(i)); i++)
if (clienttype(pbot) == CLIENTTYPE_BOT)
n++;
if (autocvar_bot_prefix)
forceinfokey(target, "name", sprintf("%s Bot %i", autocvar_bot_prefix, n));
else
forceinfokey(target, "name", sprintf("Bot %i", n));
forceinfokey(target, "model", "robo");
}
entity
Bot_AddQuick(void)
{
/* we've got no nodes, so generate some fake waypoints */
if (!g_nodes_present) {
print("^1Bot_AddQuick^7: Can't add bot. No waypoints.\n");
return (__NULL__);
}
entity newbot;
entity oself;
oself = self;
self = spawnclient();
if (!self) {
print("^1Bot_AddQuick^7: Can't add bot. Server is full\n");
self = oself;
return (__NULL__);
}
Bot_PickName(self);
ClientConnect();
PutClientInServer();
newbot = self;
self = oself;
return (newbot);
}
void
Bot_KillAllBots(void)
{
entity oldSelf = self;
for ( other = world; ( other = find( other, classname, "player" ) ); ) {
if ( clienttype( other ) == CLIENTTYPE_BOT ) {
self = other;
ClientKill();
}
}
self = oldSelf;
}
void
Bot_ResetAllBotsGoals(void)
{
for ( other = world; ( other = find( other, classname, "player" ) ); ) {
if ( clienttype( other ) == CLIENTTYPE_BOT ) {
NSBot theBot = (NSBot)other;
theBot.SetEnemy(__NULL__);
theBot.RouteClear();
}
}
}