r2763 - in branches/nexuiz-2.0/data: . qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Tue Jun 19 14:55:26 EDT 2007
Author: div0
Date: 2007-06-19 14:55:26 -0400 (Tue, 19 Jun 2007)
New Revision: 2763
Modified:
branches/nexuiz-2.0/data/default.cfg
branches/nexuiz-2.0/data/qcsrc/server/bots.qc
branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc
Log:
autoskill
Modified: branches/nexuiz-2.0/data/default.cfg
===================================================================
--- branches/nexuiz-2.0/data/default.cfg 2007-06-19 18:55:13 UTC (rev 2762)
+++ branches/nexuiz-2.0/data/default.cfg 2007-06-19 18:55:26 UTC (rev 2763)
@@ -154,6 +154,7 @@
set bot_nofire 0 // makes bots not attack at all, mainly for testing in g_waypointeditor mode
seta bot_prefix [BOT]
seta bot_suffix ""
+seta skill_auto 0 // when 1, "skill" gets adjusted to match the best player on the map
// general bot AI cvars
set bot_ai_strategyinterval 2
set bot_ai_enemydetectioninterval 0.5
Modified: branches/nexuiz-2.0/data/qcsrc/server/bots.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/bots.qc 2007-06-19 18:55:13 UTC (rev 2762)
+++ branches/nexuiz-2.0/data/qcsrc/server/bots.qc 2007-06-19 18:55:26 UTC (rev 2763)
@@ -2068,6 +2068,61 @@
float botframe_spawnedwaypoints;
float botframe_nextthink;
+
+float autoskill_nextthink;
+.float totalfrags_lastcheck;
+void(float factor) autoskill =
+{
+ float bestbot;
+ float bestplayer;
+ entity head;
+
+ bestbot = -1;
+ bestplayer = -1;
+ FOR_EACH_PLAYER(head)
+ {
+ if(clienttype(head) == CLIENTTYPE_REAL)
+ bestplayer = max(bestplayer, head.totalfrags - head.totalfrags_lastcheck);
+ else
+ bestbot = max(bestbot, head.totalfrags - head.totalfrags_lastcheck);
+ }
+
+ dprint("autoskill: best player got ", ftos(bestplayer), ", ");
+ dprint("best bot got ", ftos(bestbot), "; ");
+ if(bestbot < 0 || bestplayer < 0)
+ {
+ dprint("not doing anything\n");
+ // don't return, let it reset all counters below
+ }
+ else if(bestbot <= bestplayer * factor - 2)
+ {
+ if(cvar("skill") < 17)
+ {
+ dprint("2 frags difference, increasing skill\n");
+ cvar_set("skill", ftos(cvar("skill") + 1));
+ bprint("^2SKILL UP!^7 Now at level ", ftos(cvar("skill")), "\n");
+ }
+ }
+ else if(bestbot >= bestplayer * factor + 2)
+ {
+ if(cvar("skill") > 0)
+ {
+ dprint("2 frags difference, decreasing skill\n");
+ cvar_set("skill", ftos(cvar("skill") - 1));
+ bprint("^1SKILL DOWN!^7 Now at level ", ftos(cvar("skill")), "\n");
+ }
+ }
+ else
+ {
+ dprint("not doing anything\n");
+ return;
+ // don't reset counters, wait for them to accumulate
+ }
+
+ FOR_EACH_PLAYER(head)
+ head.totalfrags_lastcheck = head.totalfrags;
+}
+
void() bot_serverframe =
{
float realplayers, bots, activerealplayers;
@@ -2079,6 +2134,16 @@
if (time < 2)
return;
+ if(time > autoskill_nextthink)
+ {
+ float a;
+ a = cvar("skill_auto");
+ if(!cvar("g_campaign"))
+ if(a)
+ autoskill(a);
+ autoskill_nextthink = time + 5;
+ }
+
activerealplayers = 0;
realplayers = 0;
Modified: branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc 2007-06-19 18:55:13 UTC (rev 2762)
+++ branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc 2007-06-19 18:55:26 UTC (rev 2763)
@@ -115,9 +115,9 @@
if(intermission_running)
return;
if(frags_player)
- player.frags = player.frags + floor(0.5 + frags_player);
+ UpdateFrags(player, frags_player);
if(key && key.owner && frags_owner)
- key.owner.frags = key.owner.frags + floor(0.5 + frags_owner);
+ UpdateFrags(key.owner, frags_owner);
if(!cvar("sv_eventlog"))
return;
s = strcat(":keyhunt:", what, ":", ftos(player.playerid));
More information about the nexuiz-commits
mailing list