From 9771bf8c996c21dee95d2c6a9cec978d12efc3f3 Mon Sep 17 00:00:00 2001 From: div0 Date: Sat, 20 May 2006 20:51:08 +0000 Subject: [PATCH] bot_ignore_bots sv_servermodelsonly (please test) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1416 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/default.cfg | 3 +++ data/qcsrc/server/gamec/bots.c | 7 ++++++ data/qcsrc/server/gamec/cl_client.c | 27 +++++++++++------------- data/qcsrc/server/gamec/havocbot_roles.c | 3 ++- data/qcsrc/server/gamec/miscfunctions.c | 9 ++++++++ 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/data/default.cfg b/data/default.cfg index 0f13c6d84..71381aeac 100644 --- a/data/default.cfg +++ b/data/default.cfg @@ -137,6 +137,7 @@ set bot_ai_aimskill_blendrate 1 set bot_ai_aimskill_fixedrate 30 // waypoint editor enable set g_waypointeditor 0 +set bot_ignore_bots 0 alias g_waypointeditor_spawn "impulse 103" alias g_waypointeditor_remove "impulse 104" @@ -693,3 +694,5 @@ alias "sv_defaultplayer_fbskin_green" "set sv_defaultcharacter 1;set sv_defaultp alias "sv_defaultplayer_fbskin_red" "sv_defaultcharacter 1;set sv_defaultplayermodel models/player/nexus.zym;set sv_defaultplayerskin 4" alias "sv_defaultplayer_fbskin_orange" "sv_defaultcharacter 1;set sv_defaultplayermodel models/player/nexus.zym;set sv_defaultplayerskin 5" alias "sv_defaultplayer_fbskin_off" "sv_defaultcharacter 0;set sv_defaultplayerskin 0" + +seta sv_servermodelsonly 1 diff --git a/data/qcsrc/server/gamec/bots.c b/data/qcsrc/server/gamec/bots.c index 667f14bb5..3b704d4a6 100644 --- a/data/qcsrc/server/gamec/bots.c +++ b/data/qcsrc/server/gamec/bots.c @@ -1398,6 +1398,7 @@ void() bot_setnameandstuff = self.netname = name; }; +float bot_ignore_bots; // let bots not attack other bots (only works in non-teamplay) float(entity e) bot_shouldattack = { if (e.team == self.team) @@ -1408,6 +1409,10 @@ float(entity e) bot_shouldattack = if (e.team != 0) return FALSE; } + if(!teamplay) + if(bot_ignore_bots) + if(clienttype(e) == CLIENTTYPE_BOT) + return FALSE; if (!e.takedamage) return FALSE; if (e.deadflag) @@ -1875,6 +1880,8 @@ void() bot_serverframe = bots = 0; } + bot_ignore_bots = cvar("bot_ignore_bots"); + // only add one bot per frame to avoid utter chaos while (currentbots < bots) { diff --git a/data/qcsrc/server/gamec/cl_client.c b/data/qcsrc/server/gamec/cl_client.c index 35442cbcc..f4517f848 100644 --- a/data/qcsrc/server/gamec/cl_client.c +++ b/data/qcsrc/server/gamec/cl_client.c @@ -165,12 +165,19 @@ Checks if the argument string can be a valid playermodel. Returns a valid one in doubt. ============= */ +string FallbackPlayerModel = "models/player/marine.zym"; string CheckPlayerModel(string plyermodel) { - if( substring(plyermodel,0,14) != "models/player/") plyermodel = "models/player/marine.zym"; - - /* Possible Fixme: Check if server can open the model? - This would kill custom models, however. */ - + if(strlen(plyermodel) < 4) + return FallbackPlayerModel; + if( substring(plyermodel,0,14) != "models/player/") + return FallbackPlayerModel; + else if(cvar("sv_servermodelsonly")) + { + if(substring(plyermodel,strlen(plyermodel)-4,4) != ".zym") + return FallbackPlayerModel; + if(!fexists(plyermodel)) + return FallbackPlayerModel; + } return plyermodel; } @@ -208,16 +215,6 @@ float Client_customizeentityforclient() return TRUE; } -float fexists(string f) -{ - float fh; - fh = fopen(f, FILE_READ); - if(fh < 0) - return FALSE; - fclose(fh); - return TRUE; -} - void setmodel_lod(entity e, string modelname) { #ifdef ALLOW_VARIABLE_LOD diff --git a/data/qcsrc/server/gamec/havocbot_roles.c b/data/qcsrc/server/gamec/havocbot_roles.c index 75b8ab576..5cf5acc62 100644 --- a/data/qcsrc/server/gamec/havocbot_roles.c +++ b/data/qcsrc/server/gamec/havocbot_roles.c @@ -3,6 +3,7 @@ .void() havocbot_previous_role; .float bot_strategytime; .void() havocbot_role; +float bot_ignore_bots; float(entity e) canreach = { @@ -72,7 +73,7 @@ void(float ratingscale, vector org, float sradius) havocbot_goalrating_enemyplay while (head) { if (head.health > 0) - if (head.team != self.team || noteam) + if ((noteam && (!bot_ignore_bots || clienttype(head) == CLIENTTYPE_REAL)) || head.team != self.team) if (vlen(head.origin - org) < sradius) { t = head.frags + 25; diff --git a/data/qcsrc/server/gamec/miscfunctions.c b/data/qcsrc/server/gamec/miscfunctions.c index da6e7f78a..11ca867b6 100644 --- a/data/qcsrc/server/gamec/miscfunctions.c +++ b/data/qcsrc/server/gamec/miscfunctions.c @@ -411,3 +411,12 @@ void GetCvars(float f) GetCvars_handleFloat(f, cvar_cl_nogibs, "cl_nogibs"); } +float fexists(string f) +{ + float fh; + fh = fopen(f, FILE_READ); + if(fh < 0) + return FALSE; + fclose(fh); + return TRUE; +} -- 2.39.2