r2759 - in trunk/data: . qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Jun 9 06:24:42 EDT 2007


Author: div0
Date: 2007-06-09 06:24:42 -0400 (Sat, 09 Jun 2007)
New Revision: 2759

Modified:
   trunk/data/default.cfg
   trunk/data/qcsrc/server/bots.qc
   trunk/data/qcsrc/server/keyhunt.qc
Log:
first attempt at "auto adjust skill"; not working well for teamplay yet, maybe this "+ 2" should be game mode dependent


Modified: trunk/data/default.cfg
===================================================================
--- trunk/data/default.cfg	2007-06-08 11:02:46 UTC (rev 2758)
+++ trunk/data/default.cfg	2007-06-09 10:24:42 UTC (rev 2759)
@@ -155,6 +155,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: trunk/data/qcsrc/server/bots.qc
===================================================================
--- trunk/data/qcsrc/server/bots.qc	2007-06-08 11:02:46 UTC (rev 2758)
+++ trunk/data/qcsrc/server/bots.qc	2007-06-09 10:24:42 UTC (rev 2759)
@@ -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: trunk/data/qcsrc/server/keyhunt.qc
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qc	2007-06-08 11:02:46 UTC (rev 2758)
+++ trunk/data/qcsrc/server/keyhunt.qc	2007-06-09 10:24:42 UTC (rev 2759)
@@ -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