They play

This commit is contained in:
ineedbots 2021-06-15 20:07:37 -06:00
parent 83cb7b629d
commit c9b953e32e
3 changed files with 81 additions and 52 deletions

View File

@ -281,14 +281,16 @@ watchAmmoUsage(weap)
self endon("disconnect"); self endon("disconnect");
self endon("weapon_change"); self endon("weapon_change");
slot = self getWeaponSlot(weap);
for (;;) for (;;)
{ {
aCount = self GetWeaponSlotClipAmmo(self getCurrentWeaponSlot()); aCount = self GetWeaponSlotClipAmmo(slot);
while (aCount == self GetWeaponSlotClipAmmo(self getCurrentWeaponSlot())) while (aCount == self GetWeaponSlotClipAmmo(slot))
wait 0.05; wait 0.05;
if (self GetWeaponSlotClipAmmo(self getCurrentWeaponSlot()) < aCount) if (self GetWeaponSlotClipAmmo(slot) < aCount)
self notify("weapon_fired"); self notify("weapon_fired");
else else
self notify("reload"); self notify("reload");
@ -412,6 +414,30 @@ connected()
self thread onDisconnect(); self thread onDisconnect();
level notify("bot_connected", self); level notify("bot_connected", self);
self thread spawnBot();
}
spawnBot()
{
wait 5;
self notify("menuresponse", game["menu_team"], "autoassign");
wait 0.5;
weap = "mp40_mp";
if (self.team == "allies")
{
if (game["allies"] == "american")
weap = "thompson_mp";
else if (game["allies"] == "british")
weap = "greasegun_mp";
else
weap = "ppsh_mp";
}
self notify("menuresponse", game["menu_weapon_" + self.team], weap);
} }
/* /*

View File

@ -208,7 +208,7 @@ doBotMovement_loop(data)
0); 0);
// make the length 127 // make the length 127
dir = VectorNormalize(dir) * 127; dir = vector_scale(VectorNormalize(dir), 127);
// invert the second component as the engine requires this // invert the second component as the engine requires this
dir = (dir[0], 0-dir[1], 0); dir = (dir[0], 0-dir[1], 0);
@ -227,18 +227,18 @@ doBotMovement_loop(data)
}*/ }*/
startPos = self.origin + (0, 0, 50); startPos = self.origin + (0, 0, 50);
startPosForward = startPos + anglesToForward((0, angles[1], 0)) * 25; startPosForward = startPos + vector_scale(anglesToForward((0, angles[1], 0)), 25);
bt = bulletTrace(startPos, startPosForward, false, self); bt = bulletTrace(startPos, startPosForward, false, self);
if (bt["fraction"] >= 1) if (bt["fraction"] >= 1)
{ {
// check if need to jump // check if need to jump
bt = bulletTrace(startPosForward, startPosForward - (0, 0, 40), false, self); bt = bulletTrace(startPosForward, startPosForward - (0, 0, 40), false, self);
//if (bt["fraction"] < 1 && bt["normal"][2] > 0.9 && data.i > 1.5 && !self isOnLadder()) /*if (bt["fraction"] < 1 && bt["normal"][2] > 0.9 && data.i > 1.5 && !self isOnLadder())
//{ {
// data.i = 0; data.i = 0;
// self thread jump(); self thread jump();
//} }*/
} }
// check if need to knife glass // check if need to knife glass
else if (bt["surfacetype"] == "glass") else if (bt["surfacetype"] == "glass")
@ -258,6 +258,7 @@ doBotMovement_loop(data)
// move! // move!
self botMovement(int(dir[0]), int(dir[1])); self botMovement(int(dir[0]), int(dir[1]));
self setOrigin(move_To);
} }
/* /*
@ -332,6 +333,9 @@ IsWeapSniper(weap)
if (weap == "none") if (weap == "none")
return false; return false;
if (weaponClass(weap) != "sniper")
return false;
return true; return true;
} }
@ -404,8 +408,8 @@ reload_watch_loop()
if (weap == "none") if (weap == "none")
break; break;
// if (self GetWeaponAmmoClip(weap) >= WeaponClipSize(weap)) if (self GetWeaponSlotClipAmmo(self getWeaponSlot(weap)) >= WeaponClipSize(weap))
// break; break;
} }
self.bot.isreloading = false; self.bot.isreloading = false;
} }
@ -513,14 +517,14 @@ reload_thread()
if (cur == "" || cur == "none") if (cur == "" || cur == "none")
return; return;
//if(IsWeaponClipOnly(cur) || !self GetWeaponAmmoStock(cur)) if(IsWeaponClipOnly(cur) || !self getweaponslotammo(self getWeaponSlot(cur)))
// return; return;
//maxsize = WeaponClipSize(cur); maxsize = WeaponClipSize(cur);
//cursize = self GetWeaponammoclip(cur); cursize = self GetWeaponSlotClipAmmo(self getWeaponSlot(cur));
//if(cursize/maxsize < 0.5) if(cursize/maxsize < 0.5)
// self thread reload(); self thread reload();
} }
/* /*
@ -594,7 +598,7 @@ updateAimOffset(obj)
else else
offsetScalar = 1 - objCreatedFor / aimDiffTime; offsetScalar = 1 - objCreatedFor / aimDiffTime;
obj.aim_offset = obj.aim_offset_base * offsetScalar; obj.aim_offset = vector_scale(obj.aim_offset_base, offsetScalar);
} }
/* /*
@ -1026,8 +1030,6 @@ aim_loop()
if(self.bot.isfraggingafter || self.bot.issmokingafter) if(self.bot.isfraggingafter || self.bot.issmokingafter)
nadeAimOffset = dist/3000; nadeAimOffset = dist/3000;
else if(curweap != "none" && weaponClass(curweap) == "grenade")
nadeAimOffset = dist/16000;
if(no_trace_time && (!isDefined(self.bot.after_target) || self.bot.after_target != target)) if(no_trace_time && (!isDefined(self.bot.after_target) || self.bot.after_target != target))
{ {
@ -1042,8 +1044,6 @@ aim_loop()
if(isDefined(nade) && rand <= self.pers["bots"]["behavior"]["nade"] && bulletTracePassed(eyePos, eyePos + (0, 0, 75), false, self) && bulletTracePassed(last_pos, last_pos + (0, 0, 100), false, target) && dist > level.bots_minGrenadeDistance && dist < level.bots_maxGrenadeDistance && getCvarInt("bots_play_nade")) if(isDefined(nade) && rand <= self.pers["bots"]["behavior"]["nade"] && bulletTracePassed(eyePos, eyePos + (0, 0, 75), false, self) && bulletTracePassed(last_pos, last_pos + (0, 0, 100), false, target) && dist > level.bots_minGrenadeDistance && dist < level.bots_maxGrenadeDistance && getCvarInt("bots_play_nade"))
{ {
time = 0.5; time = 0.5;
if (nade == "frag_grenade_mp")
time = 2;
if(!isSecondaryGrenade(nade)) if(!isSecondaryGrenade(nade))
self thread frag(time); self thread frag(time);
@ -1148,8 +1148,6 @@ aim_loop()
if(self.bot.isfraggingafter || self.bot.issmokingafter) if(self.bot.isfraggingafter || self.bot.issmokingafter)
nadeAimOffset = dist/3000; nadeAimOffset = dist/3000;
else if(curweap != "none" && weaponClass(curweap) == "grenade")
nadeAimOffset = dist/16000;
aimpos = last_pos + (0, 0, self getEyeHeight() + nadeAimOffset); aimpos = last_pos + (0, 0, self getEyeHeight() + nadeAimOffset);
conedot = getConeDot(aimpos, eyePos, angles); conedot = getConeDot(aimpos, eyePos, angles);
@ -1195,7 +1193,7 @@ aim_loop()
{ {
lookat = undefined; lookat = undefined;
if(self.bot.second_next_wp != -1 && !self.bot.issprinting && !self.bot.climbing) if(self.bot.second_next_wp != -1 && !self.bot.climbing)
lookat = level.waypoints[self.bot.second_next_wp].origin; lookat = level.waypoints[self.bot.second_next_wp].origin;
else if(isDefined(self.bot.towards_goal)) else if(isDefined(self.bot.towards_goal))
lookat = self.bot.towards_goal; lookat = self.bot.towards_goal;
@ -1267,7 +1265,7 @@ canFire(curweap)
if(curweap == "none") if(curweap == "none")
return false; return false;
return /*self GetWeaponammoclip(curweap)*/; return self GetWeaponSlotClipAmmo(self getWeaponSlot(curweap));
} }
/* /*
@ -1287,7 +1285,7 @@ canAds(dist, curweap)
return false; return false;
weapclass = (weaponClass(curweap)); weapclass = (weaponClass(curweap));
if(weapclass == "spread" || weapclass == "grenade") if(weapclass == "spread")
return false; return false;
return true; return true;
@ -1306,9 +1304,6 @@ isInRange(dist, curweap)
if(weapclass == "spread" && dist > level.bots_maxShotgunDistance) if(weapclass == "spread" && dist > level.bots_maxShotgunDistance)
return false; return false;
if (curweap == "m2_flamethrower_mp" && dist > level.bots_maxShotgunDistance)
return false;
return true; return true;
} }
@ -1360,7 +1355,7 @@ walk_loop()
{ {
self thread killWalkCauseNoWaypoints(); self thread killWalkCauseNoWaypoints();
stepDist = 64; stepDist = 64;
forward = AnglesToForward(self GetPlayerAngles())*stepDist; forward = vector_scale(AnglesToForward(self GetPlayerAngles()), stepDist);
forward = (forward[0], forward[1], 0); forward = (forward[0], forward[1], 0);
myOrg = self.origin + (0, 0, 32); myOrg = self.origin + (0, 0, 32);
@ -1376,7 +1371,7 @@ walk_loop()
{ {
// didnt hit anything, just choose a random direction then // didnt hit anything, just choose a random direction then
dir = (0,randomIntRange(-180, 180),0); dir = (0,randomIntRange(-180, 180),0);
goal = PhysicsTrace(myOrg, myOrg + AnglesToForward(dir) * stepDist, false, self); goal = PhysicsTrace(myOrg, myOrg + vector_scale(AnglesToForward(dir), stepDist), false, self);
goal = PhysicsTrace(goal + (0, 0, 50), goal + (0, 0, -40), false, self); goal = PhysicsTrace(goal + (0, 0, 50), goal + (0, 0, -40), false, self);
} }
else else
@ -1386,9 +1381,9 @@ walk_loop()
d = VectorNormalize(trace["position"] - myOrg); d = VectorNormalize(trace["position"] - myOrg);
n = trace["normal"]; n = trace["normal"];
r = d - 2 * (VectorDot(d, n)) * n; r = d - 2 * vector_scale(VectorDot(d, n), n);
goal = PhysicsTrace(myOrg, myOrg + (r[0], r[1], 0) * stepDist, false, self); goal = PhysicsTrace(myOrg, myOrg + vector_scale((r[0], r[1], 0), stepDist), false, self);
goal = PhysicsTrace(goal + (0, 0, 50), goal + (0, 0, -40), false, self); goal = PhysicsTrace(goal + (0, 0, 50), goal + (0, 0, -40), false, self);
} }
} }
@ -1453,8 +1448,8 @@ strafe(target)
anglesRight = (0, angles[1]-90, 0); anglesRight = (0, angles[1]-90, 0);
myOrg = self.origin + (0, 0, 16); myOrg = self.origin + (0, 0, 16);
left = myOrg + anglestoforward(anglesLeft)*500; left = myOrg + vector_scale(anglestoforward(anglesLeft), 500);
right = myOrg + anglestoforward(anglesRight)*500; right = myOrg + vector_scale(anglestoforward(anglesRight), 500);
traceLeft = BulletTrace(myOrg, left, false, self); traceLeft = BulletTrace(myOrg, left, false, self);
traceRight = BulletTrace(myOrg, right, false, self); traceRight = BulletTrace(myOrg, right, false, self);
@ -1776,6 +1771,7 @@ reload()
self notify("bot_reload"); self notify("bot_reload");
self endon("bot_reload"); self endon("bot_reload");
self notify("reload_start");
self botAction("+reload"); self botAction("+reload");
wait 0.05; wait 0.05;
self botAction("-reload"); self botAction("-reload");
@ -2015,9 +2011,9 @@ bot_lookat(pos, time, vel)
steps = 1; steps = 1;
myEye = self GetEyePos(); // get our eye pos myEye = self GetEyePos(); // get our eye pos
myEye += (self getVelocity() * 0.05) * (steps - 1); // account for our velocity myEye += vector_scale(vector_scale(self getVelocity(), 0.05), steps - 1); // account for our velocity
pos += (vel * 0.05) * (steps - 1); // add the velocity vector pos += vector_scale(vector_scale(vel, 0.05), steps - 1); // add the velocity vector
myAngle=self getPlayerAngles(); myAngle=self getPlayerAngles();
angles = VectorToAngles( (pos - myEye) - anglesToForward(myAngle) ); angles = VectorToAngles( (pos - myEye) - anglesToForward(myAngle) );

View File

@ -377,27 +377,34 @@ isSecondaryGrenade(nade)
*/ */
weaponClass(weap) weaponClass(weap)
{ {
return "";
} }
/* /*
CoD2 CoD2
*/ */
getCurrentWeaponSlot() WeaponClipSize(weap)
{ {
current = self getCurrentWeapon(); return 1;
weapon1 = self getweaponslotweapon("primary"); }
weapon2 = self getweaponslotweapon("primaryb");
currentslot = undefined;
if(current == weapon1) /*
currentslot = "primary"; CoD2
*/
getWeaponSlot(weap)
{
if (self getweaponslotweapon("primary") == weap)
return "primary";
else else
{ return "primaryb";
currentslot = "primaryb"; }
}
return currentslot; /*
IsWeaponClipOnly cod2
*/
IsWeaponClipOnly(weap)
{
return false;
} }
/* /*
@ -737,7 +744,7 @@ RaySphereIntersect(start, end, spherePos, radius)
//mu2 = (0-b - sqrt(bb4ac)) / (2 * a); //mu2 = (0-b - sqrt(bb4ac)) / (2 * a);
// intersection points of the sphere // intersection points of the sphere
ip1 = start + mu1 * dp; ip1 = start + vector_scale(dp, mu1);
//ip2 = start + mu2 * dp; //ip2 = start + mu2 * dp;
myDist = DistanceSquared(start, end); myDist = DistanceSquared(start, end);