[nexuiz-commits] r6783 - in trunk/data: . qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu May 28 21:04:00 EDT 2009
Author: mand1nga
Date: 2009-05-28 21:03:57 -0400 (Thu, 28 May 2009)
New Revision: 6783
Added:
trunk/data/bots.txt
Modified:
trunk/data/defaultNexuiz.cfg
trunk/data/qcsrc/server/bots.qc
Log:
New file based configuration for bots by Taoki
Added: trunk/data/bots.txt
===================================================================
--- trunk/data/bots.txt (rev 0)
+++ trunk/data/bots.txt 2009-05-29 01:03:57 UTC (rev 6783)
@@ -0,0 +1,21 @@
+//bot configuration: name model skin shirt-color pants-color team-override
+//default team values (team-override): 1 = red, 2 = blue, 3 = yellow, 4 = pink
+//use -1 for shirt-color or pants-color to get random colors
+Hellfire carni 0 4 0 0
+Toxic carni 1 14 7 0
+Discovery crash 0 2 6 0
+Pegasus grunt 0 13 11 0
+Eureka headhunter 0 12 7 0
+Airhead insurrectionist 0 11 1 0
+Gator lurk 0 3 10 0
+Delirium lurk 1 8 12 0
+Death lycanthrope 0 4 11 0
+Scorcher marine 0 13 13 0
+Necrotic nexus 0 12 14 0
+Dominator nexus 1 3 9 0
+Thunderstorm nexus 2 13 6 0
+Mystery pyria 0 9 14 0
+Lion shock 0 0 4 0
+Sensible skadi 0 9 9 0
+Shadow specop 0 4 8 0
+Resurrection visitant 0 1 1 0
\ No newline at end of file
Modified: trunk/data/defaultNexuiz.cfg
===================================================================
--- trunk/data/defaultNexuiz.cfg 2009-05-28 15:15:55 UTC (rev 6782)
+++ trunk/data/defaultNexuiz.cfg 2009-05-29 01:03:57 UTC (rev 6783)
@@ -332,6 +332,7 @@
seta cl_playerdetailreduction 0 "the higher, the less detailed"
+set bot_config_file bots.txt "Name and path of the bot configuration file"
set bot_number 0 "Minimum number of bots"
seta bot_usemodelnames 0 "Use player model names for bot names"
set bot_nofire 0 "When set, bots never fire. Mainly for testing in g_waypointeditor mode"
Modified: trunk/data/qcsrc/server/bots.qc
===================================================================
--- trunk/data/qcsrc/server/bots.qc 2009-05-28 15:15:55 UTC (rev 6782)
+++ trunk/data/qcsrc/server/bots.qc 2009-05-29 01:03:57 UTC (rev 6783)
@@ -1907,126 +1907,71 @@
vector shotorg;
vector shotdir;
-const float BOTSKINS = 19;
-const float BOTNAMES = 32;
-string bot_namefornumber(float r)
-{
- if (r < 1) return "Thunderstorm";
- if (r < 2) return "Darkness";
- if (r < 3) return "Scorcher";
- if (r < 4) return "Paranoia";
- if (r < 5) return "Eureka";
- if (r < 6) return "Mystery";
- if (r < 7) return "Toxic";
- if (r < 8) return "Dominion";
- if (r < 9) return "Pegasus";
- if (r < 10) return "Sensible";
- if (r < 11) return "Gator";
- if (r < 12) return "Kangaroo";
- if (r < 13) return "Deadline";
- if (r < 14) return "Frosty";
- if (r < 15) return "Roadkill";
- if (r < 16) return "Death";
- if (r < 17) return "Panic";
- if (r < 18) return "Discovery";
- if (r < 19) return "Shadow";
- if (r < 20) return "Acidic";
- if (r < 21) return "Dominator";
- if (r < 22) return "Hellfire";
- if (r < 23) return "Necrotic";
- if (r < 24) return "Newbie";
- if (r < 25) return "Spellbinder";
- if (r < 26) return "Lion";
- if (r < 27) return "Controlled";
- if (r < 28) return "Airhead";
- if (r < 29) return "Delirium";
- if (r < 30) return "Resurrection";
- if (r < 31) return "Danger";
- return "Flatline";
-};
-
-string bot_skinfornumber(float r)
-{
- if (r < 1) {self.playermodel = "models/player/carni.zym" ;self.playerskin = "0";return "Carni" ;}
- else if (r < 2) {self.playermodel = "models/player/carni.zym" ;self.playerskin = "1";return "Armored Carni" ;}
- else if (r < 3) {self.playermodel = "models/player/crash.zym" ;self.playerskin = "0";return "Quark" ;}
- else if (r < 4) {self.playermodel = "models/player/grunt.zym" ;self.playerskin = "0";return "Grunt" ;}
- else if (r < 5) {self.playermodel = "models/player/headhunter.zym" ;self.playerskin = "0";return "HeadHunter" ;}
- else if (r < 6) {self.playermodel = "models/player/insurrectionist.zym";self.playerskin = "0";return "Insurrectionist";}
- else if (r < 7) {self.playermodel = "models/player/lurk.zym" ;self.playerskin = "0";return "Lurk" ;}
- else if (r < 8) {self.playermodel = "models/player/lurk.zym" ;self.playerskin = "1";return "Reptile" ;}
- else if (r < 9) {self.playermodel = "models/player/lycanthrope.zym" ;self.playerskin = "0";return "Lycanthrope" ;}
- else if (r < 10) {self.playermodel = "models/player/marine.zym" ;self.playerskin = "0";return "Marine" ;}
- else if (r < 11) {self.playermodel = "models/player/nexus.zym" ;self.playerskin = "0";return "Nexus" ;}
- else if (r < 12) {self.playermodel = "models/player/nexus.zym" ;self.playerskin = "1";return "Mulder" ;}
- else if (r < 13) {self.playermodel = "models/player/nexus.zym" ;self.playerskin = "2";return "Xolar" ;}
- else if (r < 14) {self.playermodel = "models/player/pyria.zym" ;self.playerskin = "0";return "Pyria" ;}
- else if (r < 15) {self.playermodel = "models/player/shock.zym" ;self.playerskin = "0";return "Shock" ;}
- else if (r < 16) {self.playermodel = "models/player/skadi.zym" ;self.playerskin = "0";return "Skadi" ;}
- else if (r < 17) {self.playermodel = "models/player/specop.zym" ;self.playerskin = "0";return "Specop" ;}
- else {self.playermodel = "models/player/visitant.zym" ;self.playerskin = "0";return "Fricka" ;}
-};
-
+.float bot_team;
void bot_setnameandstuff()
{
+ local string readfile, s;
+ local float file, tokens;
+
+ local string bot_name, bot_model, bot_skin, bot_shirt, bot_pants;
local string name, prefix, suffix;
- local float r, b, shirt, pants;
+ file = fopen(cvar_string("bot_config_file"), FILE_READ);
+
+ if(file < 0)
+ print(strcat("Error: Can not open the bot configuration file '",cvar_string("bot_config_file"),"'\n"));
+ else
+ {
+ RandomSelection_Init();
+ for(;;)
+ {
+ s = fgets(file);
+ if(!s)
+ break;
+ if(substring(s, 0, 2) == "//")
+ continue;
+ if(substring(s, 0, 1) == "#")
+ continue;
+ RandomSelection_Add(world, 0, s, 1, 0);
+ readfile = RandomSelection_chosen_string;
+ }
+ fclose(file);
+ }
+
+ tokens = tokenizebyseparator(readfile, "\t");
+ if(argv(0) != "") bot_name = argv(0);
+ else bot_name = "Bot";
+
+ if(argv(1) != "") bot_model = argv(1);
+ else bot_model = "marine";
+
+ if(argv(2) != "") bot_skin = argv(2);
+ else bot_skin = "0";
+
+ if(argv(3) != "" && stof(argv(3)) >= 0) bot_shirt = argv(3);
+ else bot_shirt = ftos(floor(random() * 15));
+
+ if(argv(4) != "" && stof(argv(4)) >= 0) bot_pants = argv(4);
+ else bot_pants = ftos(floor(random() * 15));
+
+ self.bot_team = stof(argv(5));
prefix = cvar_string("bot_prefix");
suffix = cvar_string("bot_suffix");
// this is really only a default, JoinBestTeam is called later
- pants = floor(random() * 15);
- shirt = floor(random() * 15);
- //shirt = pants;
- setcolor(self, shirt * 16 + pants);
+ setcolor(self, stof(bot_shirt) * 16 + stof(bot_pants));
self.bot_preferredcolors = self.clientcolors;
- // now pick a name...
-
+ // pick the name
if (cvar("bot_usemodelnames"))
- {
- // first see if all skins are taken
- b = 0;
- do
- {
- name = bot_skinfornumber(b);
- b = b + 1;
- }
- while (b < BOTSKINS && find(world, netname, name));
-
- // randomly pick a skin, if it's taken either repeat until we find one,
- // or give up if we already know all skins are taken
- do
- {
- r = floor(random() * BOTSKINS);
- name = bot_skinfornumber(r);
- }
- while (b < BOTSKINS && find(world, netname, name));
- }
+ name = bot_model;
else
- {
- // first see if all names are taken
- b = 0;
- do
- {
- name = bot_namefornumber(b);
- b = b + 1;
- }
- while (b < BOTNAMES && find(world, netname, name));
+ name = bot_name;
- // randomly pick a name, if it's taken either repeat until we find one,
- // or give up if we already know all names are taken
- do
- {
- r = floor(random() * BOTNAMES);
- name = bot_namefornumber(r);
- }
- while (b < BOTNAMES && find(world, netname, name));
+ // pick the model and skin
+ self.playermodel = strzone(strcat("models/player/", bot_model, ".zym"));
+ self.playerskin = strzone(bot_skin);
- // randomly pick a skin
- bot_skinfornumber(floor(random() * BOTSKINS));
- }
if(!cvar("g_campaign"))
self.netname = self.netname_freeme = strzone(strcat(prefix, name, suffix));
else
@@ -2523,7 +2468,17 @@
self.lag_func = bot_lagfunc;
self.isbot = TRUE;
self.createdtime = self.nextthink;
- JoinBestTeam(self, FALSE, TRUE);
+
+ switch(self.bot_team)
+ {
+ case 1: self.team = COLOR_TEAM1;
+ case 2: self.team = COLOR_TEAM2;
+ case 3: self.team = COLOR_TEAM3;
+ case 4: self.team = COLOR_TEAM4;
+ default:
+ JoinBestTeam(self, FALSE, TRUE);
+ }
+
havocbot_setupbot();
self.bot_mouseskill=random()-0.5;
self.bot_thinkskill=random()-0.5;
More information about the nexuiz-commits
mailing list