mirror of
https://github.com/ineedbots/iw4_bot_warfare.git
synced 2025-05-13 16:04:51 +00:00
Remote
This commit is contained in:
parent
51a414c236
commit
99d244bfab
@ -188,6 +188,12 @@ connected()
|
|||||||
if(!self is_bot())
|
if(!self is_bot())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!isDefined(self.pers["isBot"]))
|
||||||
|
{
|
||||||
|
// fast_restart occured...
|
||||||
|
self.pers["isBot"] = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (!isDefined(self.pers["isBotWarfare"]))
|
if (!isDefined(self.pers["isBotWarfare"]))
|
||||||
{
|
{
|
||||||
self.pers["isBotWarfare"] = true;
|
self.pers["isBotWarfare"] = true;
|
||||||
|
@ -87,11 +87,10 @@ resetBotVars()
|
|||||||
self.bot.second_next_wp = -1;
|
self.bot.second_next_wp = -1;
|
||||||
self.bot.towards_goal = undefined;
|
self.bot.towards_goal = undefined;
|
||||||
self.bot.astar = [];
|
self.bot.astar = [];
|
||||||
|
self.bot.speed = 0;
|
||||||
|
|
||||||
self.bot.isfrozen = false;
|
self.bot.isfrozen = false;
|
||||||
self.bot.sprintendtime = -1;
|
|
||||||
self.bot.isreloading = false;
|
self.bot.isreloading = false;
|
||||||
self.bot.issprinting = false;
|
|
||||||
self.bot.isfragging = false;
|
self.bot.isfragging = false;
|
||||||
self.bot.issmoking = false;
|
self.bot.issmoking = false;
|
||||||
self.bot.isfraggingafter = false;
|
self.bot.isfraggingafter = false;
|
||||||
@ -142,6 +141,7 @@ onPlayerSpawned()
|
|||||||
self thread stanceHack();
|
self thread stanceHack();
|
||||||
|
|
||||||
self thread UseRunThink();
|
self thread UseRunThink();
|
||||||
|
self thread watchUsingRemote();
|
||||||
|
|
||||||
self thread spawned();
|
self thread spawned();
|
||||||
}
|
}
|
||||||
@ -235,7 +235,8 @@ UseRunThink()
|
|||||||
self.bot.isfrozen ||
|
self.bot.isfrozen ||
|
||||||
self.bot.isreloading ||
|
self.bot.isreloading ||
|
||||||
self.bot.ads_pressed || self.bot.fire_pressed ||
|
self.bot.ads_pressed || self.bot.fire_pressed ||
|
||||||
self.bot.isfragging || self.bot.issmoking)
|
self.bot.isfragging || self.bot.issmoking ||
|
||||||
|
self.bot.speed <= 0)
|
||||||
{
|
{
|
||||||
self.bot.running = false;
|
self.bot.running = false;
|
||||||
self thread doRunDelay();
|
self thread doRunDelay();
|
||||||
@ -268,24 +269,26 @@ bot_lookat(pos, time, vel)
|
|||||||
self endon("bots_aim_overlap");
|
self endon("bots_aim_overlap");
|
||||||
self endon("disconnect");
|
self endon("disconnect");
|
||||||
self endon("death");
|
self endon("death");
|
||||||
|
self endon("spawned_player");
|
||||||
level endon ( "game_ended" );
|
level endon ( "game_ended" );
|
||||||
|
|
||||||
if (!isDefined(pos))
|
if (!isDefined(pos))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
steps = time / 0.05;
|
||||||
|
if (!isDefined(steps) || steps <= 0)
|
||||||
|
steps = 1;
|
||||||
|
|
||||||
if (isDefined(vel))
|
if (isDefined(vel))
|
||||||
{
|
{
|
||||||
vel /= 4;
|
vel *= time;
|
||||||
pos -= vel;
|
vel /= steps;
|
||||||
|
pos += vel;
|
||||||
}
|
}
|
||||||
|
|
||||||
myAngle=self getPlayerAngles();
|
myAngle=self getPlayerAngles();
|
||||||
angles = VectorToAngles( (pos - self GetEye()) - anglesToForward(myAngle) );
|
angles = VectorToAngles( (pos - self GetEye()) - anglesToForward(myAngle) );
|
||||||
|
|
||||||
steps = time / 0.05;
|
|
||||||
if (!isDefined(steps) || steps <= 0)
|
|
||||||
steps = 1;
|
|
||||||
|
|
||||||
X=(angles[0]-myAngle[0]);
|
X=(angles[0]-myAngle[0]);
|
||||||
while(X > 170.0)
|
while(X > 170.0)
|
||||||
X=X-360.0;
|
X=X-360.0;
|
||||||
@ -335,19 +338,22 @@ stanceHack()
|
|||||||
fireHack()
|
fireHack()
|
||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon("disconnect");
|
||||||
self endon("death");
|
self endon("spawned_player");
|
||||||
|
|
||||||
self FreezeControls(true);
|
self FreezeControls(true);
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
|
if (!isAlive(self))
|
||||||
|
return;
|
||||||
|
|
||||||
shouldFire = self.bot.fire_pressed;
|
shouldFire = self.bot.fire_pressed;
|
||||||
|
|
||||||
if (self.bot.isswitching || self.bot.run_in_delay || self.bot.running)
|
if (self.bot.isswitching || self.bot.run_in_delay || self.bot.running)
|
||||||
shouldFire = false;
|
shouldFire = false;
|
||||||
|
|
||||||
if (self.bot.isfragging || self.bot.issmoking || !self GetCurrentWeaponClipAmmo())
|
if (self.bot.isfragging || self.bot.issmoking || (!self GetCurrentWeaponClipAmmo() && !self IsUsingRemote()))
|
||||||
shouldFire = true;
|
shouldFire = true;
|
||||||
|
|
||||||
if (level.gameEnded || !gameFlag( "prematch_done" ))
|
if (level.gameEnded || !gameFlag( "prematch_done" ))
|
||||||
@ -363,12 +369,21 @@ fireHack()
|
|||||||
adsHack()
|
adsHack()
|
||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon("disconnect");
|
||||||
self endon("death");
|
self endon("spawned_player");
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
|
if (!isAlive(self))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (self isUsingRemote())
|
||||||
|
{
|
||||||
|
self ResetSpreadOverride();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
shouldAds = self.bot.ads_pressed;
|
shouldAds = self.bot.ads_pressed;
|
||||||
|
|
||||||
if (level.gameEnded)
|
if (level.gameEnded)
|
||||||
@ -412,6 +427,7 @@ onWeaponChange()
|
|||||||
|
|
||||||
self.bot.isswitching = false;
|
self.bot.isswitching = false;
|
||||||
|
|
||||||
|
self.bot.is_cur_full_auto = WeaponIsFullAuto(self GetCurrentWeapon());
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
self waittill( "weapon_change", newWeapon );
|
self waittill( "weapon_change", newWeapon );
|
||||||
@ -423,8 +439,11 @@ onWeaponChange()
|
|||||||
case "none":
|
case "none":
|
||||||
if(isDefined(self.lastDroppableWeapon) && self.lastDroppableWeapon != "none")
|
if(isDefined(self.lastDroppableWeapon) && self.lastDroppableWeapon != "none")
|
||||||
self setSpawnWeapon(self.lastDroppableWeapon);
|
self setSpawnWeapon(self.lastDroppableWeapon);
|
||||||
break;//ac130, grenades
|
break;//grenades
|
||||||
case "":
|
case "ac130_105mm_mp":
|
||||||
|
case "ac130_40mm_mp":
|
||||||
|
case "ac130_25mm_mp":
|
||||||
|
case "heli_remote_mp":
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
self thread doSwitch();
|
self thread doSwitch();
|
||||||
@ -492,6 +511,86 @@ onLastStand()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
watchUsingRemote()
|
||||||
|
{
|
||||||
|
self endon("disconnect");
|
||||||
|
self endon("spawned_player");
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (isDefined(level.chopper) && isDefined(level.chopper.gunner) && level.chopper.gunner == self)
|
||||||
|
{
|
||||||
|
self watchUsingMinigun();
|
||||||
|
|
||||||
|
if (isReallyAlive(self))
|
||||||
|
{
|
||||||
|
self setSpawnWeapon(self getLastWeapon());
|
||||||
|
self.bot.targets = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDefined(level.ac130Player) && level.ac130player == self)
|
||||||
|
{
|
||||||
|
self thread watchAc130Weapon();
|
||||||
|
self watchUsingAc130();
|
||||||
|
|
||||||
|
if (isReallyAlive(self))
|
||||||
|
{
|
||||||
|
self setSpawnWeapon(self getLastWeapon());
|
||||||
|
self.bot.targets = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
watchUsingMinigun()
|
||||||
|
{
|
||||||
|
self endon("heliPlayer_removed");
|
||||||
|
|
||||||
|
while (isDefined(level.chopper) && isDefined(level.chopper.gunner) && level.chopper.gunner == self)
|
||||||
|
{
|
||||||
|
if (self getCurrentWeapon() != "heli_remote_mp")
|
||||||
|
{
|
||||||
|
self setspawnweapon("heli_remote_mp");
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
watchAc130Weapon()
|
||||||
|
{
|
||||||
|
self endon("ac130player_removed");
|
||||||
|
self endon("disconnect");
|
||||||
|
|
||||||
|
while (isDefined(level.ac130Player) && level.ac130player == self)
|
||||||
|
{
|
||||||
|
curWeap = self GetCurrentWeapon();
|
||||||
|
|
||||||
|
if (curWeap != "ac130_105mm_mp" && curWeap != "ac130_40mm_mp" && curWeap != "ac130_25mm_mp")
|
||||||
|
self setSpawnWeapon("ac130_105mm_mp");
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
watchUsingAc130()
|
||||||
|
{
|
||||||
|
self endon("ac130player_removed");
|
||||||
|
|
||||||
|
while (isDefined(level.ac130Player) && level.ac130player == self)
|
||||||
|
{
|
||||||
|
self setspawnweapon("ac130_105mm_mp");
|
||||||
|
wait 3+randomInt(3);
|
||||||
|
self setspawnweapon("ac130_40mm_mp");
|
||||||
|
wait 4+randomInt(3);
|
||||||
|
self setspawnweapon("ac130_25mm_mp");
|
||||||
|
wait 4+randomInt(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We wait for a time defined by the bot's difficulty and start all threads that control the bot.
|
We wait for a time defined by the bot's difficulty and start all threads that control the bot.
|
||||||
*/
|
*/
|
||||||
@ -502,12 +601,12 @@ spawned()
|
|||||||
|
|
||||||
wait self.pers["bots"]["skill"]["spawn_time"];
|
wait self.pers["bots"]["skill"]["spawn_time"];
|
||||||
|
|
||||||
/*self thread check_reload();
|
|
||||||
self thread stance();
|
|
||||||
self thread walk();
|
|
||||||
self thread target();
|
self thread target();
|
||||||
self thread aim();
|
self thread aim();
|
||||||
self thread onNewEnemy();*/
|
self thread check_reload();
|
||||||
|
self thread stance();
|
||||||
|
self thread onNewEnemy();
|
||||||
|
self thread walk();
|
||||||
|
|
||||||
self notify("bot_spawned");
|
self notify("bot_spawned");
|
||||||
}
|
}
|
||||||
@ -584,12 +683,12 @@ reload_thread()
|
|||||||
|
|
||||||
wait 2.5;
|
wait 2.5;
|
||||||
|
|
||||||
if(isDefined(self.bot.target) || self.bot.isreloading || self.bot.isfragging || self.bot.issmoking || self.bot.isfrozen || level.gameEnded || !gameFlag( "prematch_done" ))
|
if(isDefined(self.bot.target) || self.bot.isreloading || self.bot.isfraggingafter || self.bot.issmokingafter || self.bot.isfrozen || level.gameEnded || !gameFlag( "prematch_done" ))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cur = self getCurrentWEapon();
|
cur = self getCurrentWEapon();
|
||||||
|
|
||||||
if(IsWeaponClipOnly(cur) || !self GetWeaponAmmoStock(cur))
|
if(IsWeaponClipOnly(cur) || !self GetWeaponAmmoStock(cur) || self IsUsingRemote())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
maxsize = WeaponClipSize(cur);
|
maxsize = WeaponClipSize(cur);
|
||||||
@ -605,14 +704,15 @@ reload_thread()
|
|||||||
target()
|
target()
|
||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon("disconnect");
|
||||||
self endon("death");
|
self endon("spawned_player");
|
||||||
|
|
||||||
targets = [];
|
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
|
if (!isAlive(self))
|
||||||
|
return;
|
||||||
|
|
||||||
if(self maps\mp\_flashgrenades::isFlashbanged())
|
if(self maps\mp\_flashgrenades::isFlashbanged())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -628,6 +728,15 @@ target()
|
|||||||
initReactTime = self.pers["bots"]["skill"]["init_react_time"];
|
initReactTime = self.pers["bots"]["skill"]["init_react_time"];
|
||||||
hasTarget = isDefined(self.bot.target);
|
hasTarget = isDefined(self.bot.target);
|
||||||
usingRemote = self isUsingRemote();
|
usingRemote = self isUsingRemote();
|
||||||
|
vehEnt = undefined;
|
||||||
|
|
||||||
|
if (usingRemote)
|
||||||
|
{
|
||||||
|
if ( level.ac130player == self )
|
||||||
|
vehEnt = level.ac130.planeModel;
|
||||||
|
if ( isDefined(level.chopper) && isDefined(level.chopper.gunner) && level.chopper.gunner == self )
|
||||||
|
vehEnt = level.chopper;
|
||||||
|
}
|
||||||
|
|
||||||
if(hasTarget && !isDefined(self.bot.target.entity))
|
if(hasTarget && !isDefined(self.bot.target.entity))
|
||||||
{
|
{
|
||||||
@ -642,7 +751,9 @@ target()
|
|||||||
daDist = distanceSquared(self.origin, ent.origin);
|
daDist = distanceSquared(self.origin, ent.origin);
|
||||||
obj = self.bot.targets[key];
|
obj = self.bot.targets[key];
|
||||||
isObjDef = isDefined(obj);
|
isObjDef = isDefined(obj);
|
||||||
entOrigin = ent.origin + (0, 0, 5);
|
entOrigin = ent.origin;
|
||||||
|
if (isDefined(self.bot.script_target_offset))
|
||||||
|
entOrigin += self.bot.script_target_offset;
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
@ -668,6 +779,8 @@ target()
|
|||||||
obj.trace_time_time = 0;
|
obj.trace_time_time = 0;
|
||||||
obj.rand = randomInt(100);
|
obj.rand = randomInt(100);
|
||||||
obj.didlook = false;
|
obj.didlook = false;
|
||||||
|
obj.isplay = isPlayer(ent);
|
||||||
|
obj.offset = self.bot.script_target_offset;
|
||||||
|
|
||||||
self.bot.targets[key] = obj;
|
self.bot.targets[key] = obj;
|
||||||
}
|
}
|
||||||
@ -730,6 +843,8 @@ target()
|
|||||||
obj.trace_time_time = 0;
|
obj.trace_time_time = 0;
|
||||||
obj.rand = randomInt(100);
|
obj.rand = randomInt(100);
|
||||||
obj.didlook = false;
|
obj.didlook = false;
|
||||||
|
obj.isplay = isPlayer(player);
|
||||||
|
obj.offset = undefined;
|
||||||
|
|
||||||
self.bot.targets[key] = obj;
|
self.bot.targets[key] = obj;
|
||||||
}
|
}
|
||||||
@ -767,7 +882,8 @@ target()
|
|||||||
|
|
||||||
if (usingRemote)
|
if (usingRemote)
|
||||||
{
|
{
|
||||||
canTargetPlayer = true;
|
canTargetPlayer = (bulletTracePassed(myEye, player getTagOrigin( "j_head" ), false, vehEnt)
|
||||||
|
&& !player _hasPerk("specialty_coldblooded"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -795,6 +911,8 @@ target()
|
|||||||
obj.trace_time_time = 0;
|
obj.trace_time_time = 0;
|
||||||
obj.rand = randomInt(100);
|
obj.rand = randomInt(100);
|
||||||
obj.didlook = false;
|
obj.didlook = false;
|
||||||
|
obj.isplay = isPlayer(player);
|
||||||
|
obj.offset = undefined;
|
||||||
|
|
||||||
self.bot.targets[key] = obj;
|
self.bot.targets[key] = obj;
|
||||||
}
|
}
|
||||||
@ -964,12 +1082,15 @@ watchToLook()
|
|||||||
aim()
|
aim()
|
||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon("disconnect");
|
||||||
self endon("death");
|
self endon("spawned_player"); // for remote killstreaks.
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
|
if (!isAlive(self))
|
||||||
|
return;
|
||||||
|
|
||||||
if(!gameFlag( "prematch_done" ) || level.gameEnded || self.bot.isfrozen || self maps\mp\_flashgrenades::isFlashbanged())
|
if(!gameFlag( "prematch_done" ) || level.gameEnded || self.bot.isfrozen || self maps\mp\_flashgrenades::isFlashbanged())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -977,6 +1098,8 @@ aim()
|
|||||||
if(self IsStunned() || self isArtShocked())
|
if(self IsStunned() || self isArtShocked())
|
||||||
aimspeed = 1;
|
aimspeed = 1;
|
||||||
|
|
||||||
|
usingRemote = self IsUsingRemote();
|
||||||
|
|
||||||
if(isDefined(self.bot.target) && isDefined(self.bot.target.entity))
|
if(isDefined(self.bot.target) && isDefined(self.bot.target.entity))
|
||||||
{
|
{
|
||||||
trace_time = self.bot.target.trace_time;
|
trace_time = self.bot.target.trace_time;
|
||||||
@ -984,7 +1107,8 @@ aim()
|
|||||||
last_pos = self.bot.target.last_seen_pos;
|
last_pos = self.bot.target.last_seen_pos;
|
||||||
target = self.bot.target.entity;
|
target = self.bot.target.entity;
|
||||||
conedot = 0;
|
conedot = 0;
|
||||||
isplay = isPlayer(target);
|
isplay = self.bot.target.isplay;
|
||||||
|
offset = self.bot.target.offset;
|
||||||
dist = self.bot.target.dist;
|
dist = self.bot.target.dist;
|
||||||
curweap = self getCurrentWeapon();
|
curweap = self getCurrentWeapon();
|
||||||
eyePos = self getEye();
|
eyePos = self getEye();
|
||||||
@ -995,14 +1119,14 @@ aim()
|
|||||||
nadeAimOffset = 0;
|
nadeAimOffset = 0;
|
||||||
myeye = self getEye();
|
myeye = self getEye();
|
||||||
|
|
||||||
if(self.bot.isfragging || self.bot.issmoking)
|
if(self.bot.isfraggingafter || self.bot.issmokingafter)
|
||||||
nadeAimOffset = dist/3000;
|
nadeAimOffset = dist/3000;
|
||||||
else if(weaponClass(curweap) == "grenade")
|
else if(weaponClass(curweap) == "grenade")
|
||||||
nadeAimOffset = dist/16000;
|
nadeAimOffset = dist/16000;
|
||||||
|
|
||||||
if(no_trace_time)
|
if(no_trace_time)
|
||||||
{
|
{
|
||||||
if(no_trace_time > remember_time/2)
|
if(no_trace_time > remember_time/2 && !usingRemote)
|
||||||
{
|
{
|
||||||
self ads(false);
|
self ads(false);
|
||||||
|
|
||||||
@ -1029,7 +1153,10 @@ aim()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//self botLookAt(last_pos + (0, 0, self getEyeHeight() + nadeAimOffset), aimspeed);
|
if (!usingRemote)
|
||||||
|
self thread bot_lookat(last_pos + (0, 0, self getEyeHeight() + nadeAimOffset), aimspeed);
|
||||||
|
else
|
||||||
|
self thread bot_lookat(last_pos, aimspeed);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1039,22 +1166,16 @@ aim()
|
|||||||
{
|
{
|
||||||
aimpos = target getTagOrigin( "j_spineupper" ) + (0, 0, nadeAimOffset);
|
aimpos = target getTagOrigin( "j_spineupper" ) + (0, 0, nadeAimOffset);
|
||||||
conedot = getConeDot(aimpos, eyePos, angles);
|
conedot = getConeDot(aimpos, eyePos, angles);
|
||||||
|
|
||||||
if(!nadeAimOffset && conedot > 0.999)
|
|
||||||
{
|
|
||||||
//self botLookAtPlayer(target, "j_spineupper");//cod4x is crashing when this is called
|
|
||||||
self thread bot_lookat(aimpos, aimspeed, target GetVelocity());
|
self thread bot_lookat(aimpos, aimspeed, target GetVelocity());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self thread bot_lookat(aimpos, aimspeed, target GetVelocity());
|
aimpos = target.origin;
|
||||||
}
|
if (isDefined(offset))
|
||||||
}
|
aimpos += offset;
|
||||||
else
|
aimpos += (0, 0, nadeAimOffset);
|
||||||
{
|
|
||||||
aimpos = target.origin + (0, 0, 5 + nadeAimOffset);
|
|
||||||
conedot = getConeDot(aimpos, eyePos, angles);
|
conedot = getConeDot(aimpos, eyePos, angles);
|
||||||
self bot_lookat(aimpos, aimspeed);
|
self thread bot_lookat(aimpos, aimspeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(false && isplay && conedot > 0.9 && dist < level.bots_maxKnifeDistance && trace_time > reaction_time)
|
if(false && isplay && conedot > 0.9 && dist < level.bots_maxKnifeDistance && trace_time > reaction_time)
|
||||||
@ -1070,12 +1191,10 @@ aim()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//c4 logic here, but doesnt work anyway
|
|
||||||
|
|
||||||
canADS = self canAds(dist, curweap);
|
canADS = self canAds(dist, curweap);
|
||||||
self ads(canADS);
|
self ads(canADS);
|
||||||
|
|
||||||
if((!canADS || self botAdsAmount() == 1.0) && conedot > 0.95 && trace_time > reaction_time)
|
if((!canADS || self botAdsAmount() == 1.0) && (conedot > 0.95 || dist < level.bots_maxKnifeDistance) && trace_time > reaction_time)
|
||||||
{
|
{
|
||||||
self botFire();
|
self botFire();
|
||||||
}
|
}
|
||||||
@ -1086,8 +1205,12 @@ aim()
|
|||||||
self ads(false);
|
self ads(false);
|
||||||
self stopNading();
|
self stopNading();
|
||||||
|
|
||||||
lookat = self.bot.script_aimpos;
|
if (!isDefined(self.bot.script_aimpos))
|
||||||
if(self.bot.second_next_wp != -1 && !self.bot.run.running)
|
{
|
||||||
|
if (!usingRemote)
|
||||||
|
{
|
||||||
|
lookat = undefined;
|
||||||
|
if(self.bot.second_next_wp != -1 && !self.bot.running)
|
||||||
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;
|
||||||
@ -1096,6 +1219,12 @@ aim()
|
|||||||
self thread bot_lookat(lookat + (0, 0, self getEyeHeight()), aimspeed);
|
self thread bot_lookat(lookat + (0, 0, self getEyeHeight()), aimspeed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self thread bot_lookat(self.bot.script_aimpos, aimspeed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Bots will fire their gun.
|
Bots will fire their gun.
|
||||||
@ -1176,6 +1305,9 @@ canFire(curweap)
|
|||||||
if(curweap == "none")
|
if(curweap == "none")
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (self IsUsingRemote())
|
||||||
|
return true;
|
||||||
|
|
||||||
return self GetWeaponammoclip(curweap);
|
return self GetWeaponammoclip(curweap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1184,6 +1316,9 @@ canFire(curweap)
|
|||||||
*/
|
*/
|
||||||
canAds(dist, curweap)
|
canAds(dist, curweap)
|
||||||
{
|
{
|
||||||
|
if (self IsUsingRemote())
|
||||||
|
return false;
|
||||||
|
|
||||||
far = level.bots_noADSDistance;
|
far = level.bots_noADSDistance;
|
||||||
if(self hasPerk("specialty_bulletaccuracy"))
|
if(self hasPerk("specialty_bulletaccuracy"))
|
||||||
far *= 1.4;
|
far *= 1.4;
|
||||||
@ -1205,6 +1340,9 @@ isInRange(dist, curweap)
|
|||||||
{
|
{
|
||||||
weapclass = weaponClass(curweap);
|
weapclass = weaponClass(curweap);
|
||||||
|
|
||||||
|
if (self IsUsingRemote())
|
||||||
|
return true;
|
||||||
|
|
||||||
if(weapclass == "spread" && dist > level.bots_maxShotgunDistance)
|
if(weapclass == "spread" && dist > level.bots_maxShotgunDistance)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ is_bot()
|
|||||||
assert(isDefined(self));
|
assert(isDefined(self));
|
||||||
assert(isPlayer(self));
|
assert(isPlayer(self));
|
||||||
|
|
||||||
return ((isDefined(self.pers["isBot"]) && self.pers["isBot"]) || (isDefined(self.pers["isBotWarfare"]) && self.pers["isBotWarfare"]));
|
return ((isDefined(self.pers["isBot"]) && self.pers["isBot"]) || (isDefined(self.pers["isBotWarfare"]) && self.pers["isBotWarfare"]) || isSubStr( self.guid, "bot" ));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -92,9 +92,10 @@ ClearScriptGoal()
|
|||||||
/*
|
/*
|
||||||
Sets the script enemy for a bot.
|
Sets the script enemy for a bot.
|
||||||
*/
|
*/
|
||||||
SetScriptEnemy(enemy)
|
SetScriptEnemy(enemy, offset)
|
||||||
{
|
{
|
||||||
self.bot.script_target = enemy;
|
self.bot.script_target = enemy;
|
||||||
|
self.bot.script_target_offset = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -102,7 +103,7 @@ SetScriptEnemy(enemy)
|
|||||||
*/
|
*/
|
||||||
ClearScriptEnemy()
|
ClearScriptEnemy()
|
||||||
{
|
{
|
||||||
self SetScriptEnemy(undefined);
|
self SetScriptEnemy(undefined, undefined);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -190,7 +191,7 @@ RaySphereIntersect(start, end, spherePos, radius)
|
|||||||
*/
|
*/
|
||||||
SmokeTrace(start, end, rad)
|
SmokeTrace(start, end, rad)
|
||||||
{
|
{
|
||||||
for(i = 0; i < level.bots_smokeList.count; i++)
|
for(i = level.bots_smokeList.count - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
nade = level.bots_smokeList.data[i];
|
nade = level.bots_smokeList.data[i];
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user