having issues making mauvebot work correctly with my mod
Moderator: InsideQC Admins
7 posts
• Page 1 of 1
having issues making mauvebot work correctly with my mod
ok... iv gotten them to spawn to assigned teams. problem being they always target anything thats alive rather than just their teams. also iv noticed that when i make the game and apply "no team damage" and they attack each other (even though their on other teams) they still cant hurt each other.
here's my qc file...
as you can see iv even tried applying shirt+pants colors still no go.
here's my qc file...
as you can see iv even tried applying shirt+pants colors still no go.
- Code: Select all
/*
MauveBot v2.0 by MauveBib 22/4/09
Installation Instructions:
Add the files mauvebot.qc, dpextensions.qc and sv_user.qc to your mod source directory.
Edit the progs.src file, adding "dpextensions.qc" and "sv_user.qc" (without the quotes) right after "defs.qc". Add "mauvebot.qc" just after "weapons.qc"
Open up client.qc, and scroll to the function PlayerPreThink.
Just before the line "CheckRules ();" add a line saying "MauveBot_AI();"
Compile, run, enjoy. (Darkplaces only)
Impulse 100 spawns a bot, impulse 101 removes one.
*/
float bot_number;
//float visible;
.float ai_time;
float() crandom;
string() bot_name =
{
if (bot_number == 0)
return "Fender";
if (bot_number == 1)
return "Coffin";
if (bot_number == 2)
return "Fallout";
if (bot_number == 3)
return "Proteus";
if (bot_number == 4)
return "Inxus";
if (bot_number == 5)
return "Basil";
if (bot_number == 6)
return "Meat";
if (bot_number == 7)
return "Fettid";
if (bot_number == 8)
return "Biggles";
if (bot_number == 9)
return "Crusade";
else
return "Bot";
};
void() add_MauveBot =
{
local entity oldself;
local float shirt, pants;
local string str;
oldself = self;
self = spawnclient();
if (!self)
{
bprint("Can not add bot, server full.\n");
self = oldself;
return;
}
if (random() < 0.5)
{
self.pteam = QUAKE_SQUAD;
setmodel (self, "progs/QS.mdl"); //Sets your player model to the Quake Squads.
PutClientInServer();
pants = 2;
shirt = 2;
bot_number = bot_number + 1;
}
else
if (random() >= 0.5)
{
self.pteam = MARINE;
setmodel (self, "progs/Marine.mdl");
PutClientInServer();
bot_number = bot_number + 1;
}
self.netname = bot_name();
//shirt = floor(random() * 16);
//pants = floor(random() * 16);
self.clientcolors = shirt + pants;
//ClientConnect();
self = oldself;
};
void() remove_MauveBot =
{
local float flo, i;
local entity ent;
flo = floor(random() * bot_number);
ent = find(world, classname, "player");
while(ent)
{
if (clienttype(ent) == CLIENTTYPE_BOT)
{
if (flo == i)
{
dropclient(ent);
if (bot_number > 0)
bot_number = bot_number - 1;
return;
}
i = i + 1;
}
ent = find(ent, classname, "player");
}
};
void() Mauve_Impulses =
{
if (self.impulse == 100)
add_MauveBot();
if (self.impulse == 101)
remove_MauveBot();
};
void() bot_set_angle =
{
local vector view;
local float flo;
local entity ent;
if (self.goalentity)
ent = self.goalentity;
if (self.enemy)
if (visible(self.enemy))
ent = self.enemy;
if (ent != world)
{
view = ent.origin;
if (view == '0 0 0')
view = (ent.absmin + ent.absmax) * 0.5;
if (ent.health)
{
view = view - ent.velocity * (0.2);
flo = vlen(view - self.origin) / 10;
view_x = view_x + (crandom() * flo);
view_y = view_y + (crandom() * flo);
view_z = view_z + (crandom() * flo);
}
view = view - (self.origin + self.view_ofs);
self.angles = vectoangles(view);
self.v_angle = self.angles;
self.v_angle_x = self.v_angle_x * -1;
if (self.angles_x > 180)
self.angles_x = self.angles_x - 360;
self.angles_x = self.angles_x / 6;
}
else
self.angles_x = 0;// hack!
};
void() MauveToGoal =
{
local vector vec, en, diff, dir;
vec = self.origin;
movetogoal(32);
en = self.origin;
self.origin = vec;
diff = en - self.origin;
if (diff == '0 0 0')
diff = self.goalentity.origin - self.origin;
dir = normalize(diff);
dir = dir * cvar("sv_maxspeed");
makevectors(self.v_angle);
self.movement_x = dir * v_forward;
self.movement_y = dir * v_right;
self.movement_z = dir * v_up;
};
void() look_for_stuff =
{
local entity item, best, best2, backup;
local float dist, tdist, dist2;
item = findradius(self.origin, 1000);
if (self.search_time < time)
{
self.enemy = world;
self.goalentity = world;
}
if (self.enemy.health < 0)
self.enemy = world;
if (self.enemy.deadflag)
self.enemy = world;
dist = dist2 = 1000;
while(item)
{
if (item.flags & FL_CLIENT)
{
if (!(item.flags & FL_NOTARGET))
if (item != self)
if ((item.health > 0) && (!item.deadflag))
if (visible(item))
{
tdist = vlen(item.origin - self.origin);
if (tdist < dist)
{
best = item;
dist = tdist;
}
}
}
else if (( (item.flags & FL_ITEM) && item.model != string_null) && (item.search_time < time))
{
tdist = vlen(item.origin - self.origin);
if (tdist < dist2)
{
if (visible(item))
{
best2 = item;
dist2 = tdist;
}
else
backup = item;
}
}
item = item.chain;
}
if ((best != self.enemy) && (best != world))
self.enemy = best;
if ((best2 != self.goalentity) && (best2 != world))
{
self.goalentity = best2;
self.search_time = time + 5;
}
if (self.goalentity == world)
{
if (self.enemy)
self.goalentity = self.enemy;
else
self.goalentity = backup;
self.search_time = time + 5;
}
};
void() MauveBot_AI =
{
if (clienttype(self) != CLIENTTYPE_BOT)
{
Mauve_Impulses();
return;
}
self.button0 = 0;
self.button2 = 0;
self.button3 = 0;
self.movement = '0 0 0';
if (self.deadflag == DEAD_RESPAWNABLE)
{
self.button0 = 1;
return;
}
else if (self.deadflag)
return;
if (self.goalentity.model == string_null)
self.goalentity = world;
if ((vlen(self.goalentity.origin - self.origin) < 50) && (self.goalentity != world))
{
self.goalentity.search_time = time + 10;
self.goalentity = world;
}
if (time > self.ai_time)
{
self.ai_time = time + random();
look_for_stuff();
if (self.enemy)
{
if (self.search_time == 100000)
self.search_time = time + 5;
if (self.goalentity == world)
self.goalentity = self.enemy;
}
if (random() < 0.03)
self.button2 = 1;
}
if (visible(self.enemy))
{
self.button0 = 1;
self.search_time = 100000;
}
bot_set_angle();
if (self.goalentity != world)
MauveToGoal();
};
-

ceriux - Posts: 2223
- Joined: Sat Sep 06, 2008 3:30 pm
- Location: Indiana, USA
There is no teamplay check in MauveBot by default, but it's easy to add:
Find this bit of code in look_for_stuff():
Replace it with:
This is untested but should work.
Find this bit of code in look_for_stuff():
- Code: Select all
while(item)
{
if (item.flags & FL_CLIENT)
{
if (!(item.flags & FL_NOTARGET))
if (item != self)
if ((item.health > 0) && (!item.deadflag))
if (visible(item))
{
tdist = vlen(item.origin - self.origin);
if (tdist < dist)
{
best = item;
dist = tdist;
}
}
}
Replace it with:
- Code: Select all
while(item)
{
if (item.flags & FL_CLIENT)
{
if (!(item.flags & FL_NOTARGET))
if (item != self)
if ((!teamplay) || (item.team != self.team))
if ((item.health > 0) && (!item.deadflag))
if (visible(item))
{
tdist = vlen(item.origin - self.origin);
if (tdist < dist)
{
best = item;
dist = tdist;
}
}
}
This is untested but should work.
Apathy Now!
-

MauveBib - Posts: 634
- Joined: Thu Nov 04, 2004 1:22 am
k thnx gunna check it out now.
-=edit=-
it works... kinda ... problem being now is the other team gets - points for killing the other team? ( my pant colors = brown other = blue )
oh and the color is set like this.
self.clientcolors = self.pteam;
-=edit=-
it works... kinda ... problem being now is the other team gets - points for killing the other team? ( my pant colors = brown other = blue )
oh and the color is set like this.
self.clientcolors = self.pteam;
-

ceriux - Posts: 2223
- Joined: Sat Sep 06, 2008 3:30 pm
- Location: Indiana, USA
im having issues with this really really freakin bad and im close to giving up....
and im actually releasing my source out of frustration...
anyways my problem is that when the bots kill each other they get negative points... anyways...
thnx if anyone can actually help me so luck so far...
http://files.filefront.com/02azip/;1375 ... einfo.html
and im actually releasing my source out of frustration...
anyways my problem is that when the bots kill each other they get negative points... anyways...
thnx if anyone can actually help me so luck so far...
http://files.filefront.com/02azip/;1375 ... einfo.html
-

ceriux - Posts: 2223
- Joined: Sat Sep 06, 2008 3:30 pm
- Location: Indiana, USA
I'm guessing it's because you're using self.pteam for the team, whereas the frag code checks self.team, which will be the same for all bots, so it will assume every kill is a teamkill, so every kill will cause a frag to be lost.
You need to either alter the frag code, or set self.team on the bots.
You need to either alter the frag code, or set self.team on the bots.
Apathy Now!
-

MauveBib - Posts: 634
- Joined: Thu Nov 04, 2004 1:22 am
7 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 1 guest