29 Commits

Author SHA1 Message Date
d23fb6cd60 Bump version 2.0.1 2021-05-14 20:25:06 -06:00
30285b8fc9 improved c4 2021-05-14 15:29:22 -06:00
ab22dd37cb Fix up wpedit 2021-05-09 11:43:59 -06:00
1745adbc78 Fix menu being enabled in wp editor 2021-05-08 14:06:47 -06:00
36daf4ed6e full c4 support 2021-05-04 17:00:59 -06:00
a84133d928 Fix weap swap vars, partial c4 support 2021-05-04 16:53:51 -06:00
8b73445e89 Fix int overflow 2021-05-01 16:56:08 -06:00
c4fc8c3b2f Fix possible script error 2021-04-26 20:19:35 -07:00
2adb5c8af8 fix missing var 2021-03-26 00:21:22 -06:00
afdc975a97 Fast swap, swap on spawn 2021-03-26 00:19:47 -06:00
a0c3666653 Fix sniper, reload cancel 2021-03-19 15:28:59 -06:00
f405c523b3 clean 2021-03-12 14:06:02 -06:00
43701bd314 Added qs 2021-03-12 13:55:56 -06:00
2f4323fb66 added lastKiller 2021-03-11 15:24:54 -06:00
9feb4745d4 FIx rubberbanding 2021-03-11 15:11:19 -06:00
b0d1fbfb19 Better mantling and crouching 2021-03-10 15:10:22 -06:00
c7394f88e7 More sprinting 2021-03-03 22:54:53 -06:00
446ef8e987 added weapon class dist mutiplier 2021-03-03 18:10:54 -06:00
b1357c8855 added ads aimspeed delay 2021-03-02 00:29:30 -06:00
8e1c57c2a3 Added orgot doc 2021-02-27 15:03:09 -06:00
d0ec6974af Improved mantle and knife glass 2021-02-27 14:55:49 -06:00
18055a8f01 changed crouch and sprinting 2021-02-27 14:49:29 -06:00
16594122ef better dom 2021-02-27 14:47:10 -06:00
c1e55c4c29 fix 2021-01-22 21:25:01 -06:00
0c67e1f21e Fix scr errors 2021-01-19 13:31:56 -06:00
531cafb0ac Fix possible script error 2021-01-13 16:24:47 -06:00
e4d0d2cab5 udpate 2021-01-09 17:04:03 -06:00
4bee5b27da remove wps, use the repo 2021-01-09 16:40:08 -06:00
9c3a2d60d9 v2.0.0 release 2021-01-04 16:15:58 -06:00
45 changed files with 45247 additions and 331 deletions

2
.gitignore vendored
View File

@ -17,6 +17,8 @@
main_shared/maps/mp/gametypes/_globallogic.gsx
main_shared/maps/mp/gametypes/_hardpoints.gsx
!/README.md
*.zip
!/out
!/main/
/main/*

View File

@ -161,6 +161,22 @@ You can easily setup a local LAN dedicated server for you to join and play on. H
- bots_main_debug - a boolean value (0 or 1), enables or disables the waypoint editor
## Changelog
- v2.0.1
- Reduced bots crouching
- Increased bots sprinting
- Improved bots mantling, crouching and knifing glass when needed
- Fixed possible script runtime errors
- Improved domination
- Bots use explosives more if they have it
- Bots aim slower when ads'ing
- Fixed bots holding breath
- Fixed bots rubberbanding movement when their goal changes
- Added bots quickscoping with snipers
- Added bots reload canceling and fast swaps
- Bots use C4
- Improved revenge
- Bots can swap weapons on spawn more likely
- v2.0.0
- Initial reboot release

View File

@ -8,7 +8,7 @@
*/
init()
{
level.bw_VERSION = "2.0.0";
level.bw_VERSION = "2.0.1";
if(getDvar("bots_main") == "")
setDvar("bots_main", true);

View File

@ -12,34 +12,34 @@
*/
getRemoteWaypoints(mapname)
{
url = "https://raw.githubusercontent.com/ineedbots/cod4x_waypoints/master/" + mapname + "_wp.csv";
url = "https://raw.githubusercontent.com/ineedbots/cod4x_waypoints/master/" + mapname + "_wp.csv";
filename = "waypoints/" + mapname + "_wp.csv";
printToConsole("Attempting to get remote waypoints from " + url);
res = getLinesFromUrl(url, filename);
printToConsole("Attempting to get remote waypoints from " + url);
res = getLinesFromUrl(url, filename);
if (!res.lines.size)
return;
if (!res.lines.size)
return;
waypointCount = int(res.lines[0]);
waypointCount = int(res.lines[0]);
waypoints = [];
printToConsole("Loading remote waypoints...");
printToConsole("Loading remote waypoints...");
for (i = 1; i <= waypointCount; i++)
{
tokens = tokenizeLine(res.lines[i], ",");
waypoint = parseTokensIntoWaypoint(tokens);
{
tokens = tokenizeLine(res.lines[i], ",");
waypoint = parseTokensIntoWaypoint(tokens);
waypoints[i-1] = waypoint;
}
waypoints[i-1] = waypoint;
}
if (waypoints.size)
{
level.waypoints = waypoints;
printToConsole("Loaded " + waypoints.size + " waypoints from remote.");
}
if (waypoints.size)
{
level.waypoints = waypoints;
printToConsole("Loaded " + waypoints.size + " waypoints from remote.");
}
}
/*
@ -88,13 +88,13 @@ getRemoteVersion()
*/
getLinesFromUrl(url, filename)
{
result = spawnStruct();
result.lines = [];
result = spawnStruct();
result.lines = [];
#if isSyscallDefined HTTPS_GetString
data = HTTPS_GetString( url );
data = HTTPS_GetString( url );
#else
data = undefined;
data = undefined;
#endif
if (!isDefined(data))
@ -126,7 +126,7 @@ getLinesFromUrl(url, filename)
line += c;
}
result.lines[result.lines.size] = line;
result.lines[result.lines.size] = line;
if (fd > 0)
FS_FClose(fd);

View File

@ -32,6 +32,8 @@ added()
self.pers["bots"]["skill"]["aim_offset_amount"] = 1; // how far a bot's incorrect aim is
self.pers["bots"]["skill"]["bone_update_interval"] = 0.05; // how often a bot changes their bone target
self.pers["bots"]["skill"]["bones"] = "j_head"; // a list of comma seperated bones the bot will aim at
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5; // a factor of how much ads to reduce when adsing
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5; // a factor of how much more aimspeed delay to add
self.pers["bots"]["behavior"] = [];
self.pers["bots"]["behavior"]["strafe"] = 50; // percentage of how often the bot strafes a target
@ -43,6 +45,9 @@ added()
self.pers["bots"]["behavior"]["switch"] = 1; // percentage of how often the bot will switch weapons
self.pers["bots"]["behavior"]["class"] = 1; // percentage of how often the bot will change classes
self.pers["bots"]["behavior"]["jump"] = 100; // percentage of how often the bot will jumpshot and dropshot
self.pers["bots"]["behavior"]["quickscope"] = false; // is a quickscoper
self.pers["bots"]["behavior"]["initswitch"] = 10; // percentage of how often the bot will switch weapons on spawn
}
/*
@ -131,6 +136,8 @@ resetBotVars()
self.bot.stop_move = false;
self.bot.greedy_path = false;
self.bot.climbing = false;
self.bot.last_next_wp = -1;
self.bot.last_second_next_wp = -1;
self.bot.isfrozen = false;
self.bot.sprintendtime = -1;
@ -145,8 +152,11 @@ resetBotVars()
self.bot.semi_time = false;
self.bot.jump_time = undefined;
self.bot.last_fire_time = -1;
self.bot.is_cur_full_auto = false;
self.bot.cur_weap_dist_multi = 1;
self.bot.is_cur_sniper = false;
self.bot.rand = randomInt(100);
@ -213,10 +223,162 @@ spawned()
self thread aim();
self thread watchHoldBreath();
self thread onNewEnemy();
self thread doBotMovement();
self thread watchGrenadeFire();
self notify("bot_spawned");
}
/*
Watches when the bot fires a grenade
*/
watchGrenadeFire()
{
self endon("disconnect");
self endon("death");
for (;;)
{
self waittill( "grenade_fire", nade, weapname );
if ( weapname == "c4_mp" )
self thread watchC4Thrown(nade);
}
}
/*
Watches the c4
*/
watchC4Thrown(c4)
{
self endon("disconnect");
c4 endon("death");
wait 0.5;
for (;;)
{
wait 1 + randomInt(50) * 0.05;
shouldBreak = false;
for (i = 0; i < level.players.size; i++)
{
player = level.players[i];
if(player == self)
continue;
if((level.teamBased && self.team == player.team) || player.sessionstate != "playing" || !isAlive(player))
continue;
if (distanceSquared(c4.origin, player.origin) > 200*200)
continue;
if (!bulletTracePassed(c4.origin, player.origin + (0, 0, 25), false, c4))
continue;
shouldBreak = true;
}
if (shouldBreak)
break;
}
weap = self getCurrentWeapon();
if ( weap != "c4_mp" )
self notify( "alt_detonate" );
else
self thread pressFire();
}
/*
Bot moves towards the point
*/
doBotMovement()
{
self endon("disconnect");
self endon("death");
FORWARDAMOUNT = 25;
for (i = 0;;i+=0.05)
{
wait 0.05;
angles = self GetPlayerAngles();
// climb through windows
if (self isMantling())
self crouch();
startPos = self.origin + (0, 0, 50);
startPosForward = startPos + anglesToForward((0, angles[1], 0)) * FORWARDAMOUNT;
bt = bulletTrace(startPos, startPosForward, false, self);
if (bt["fraction"] >= 1)
{
// check if need to jump
bt = bulletTrace(startPosForward, startPosForward - (0, 0, 40), false, self);
if (bt["fraction"] < 1 && bt["normal"][2] > 0.9 && i > 1.5 && !self isOnLadder())
{
i = 0;
self thread jump();
}
}
// check if need to knife glass
else if (bt["surfacetype"] == "glass")
{
if (i > 1.5)
{
i = 0;
self thread knife();
}
}
else
{
// check if need to crouch
if (bulletTracePassed(startPos - (0, 0, 25), startPosForward - (0, 0, 25), false, self))
self crouch();
}
}
}
/*
Sets the factor of distance for a weapon
*/
SetWeaponDistMulti(weap)
{
if (weap == "none")
return 1;
switch(weaponClass(weap))
{
case "rifle":
return 0.9;
case "smg":
return 0.7;
case "pistol":
return 0.5;
default:
return 1;
}
}
/*
Is the weap a sniper
*/
IsWeapSniper(weap)
{
if (weap == "none")
return false;
if (maps\mp\gametypes\_missions::getWeaponClass(weap) != "weapon_sniper")
return false;
return true;
}
/*
The hold breath thread.
*/
@ -232,7 +394,7 @@ watchHoldBreath()
if(self.bot.isfrozen)
continue;
self holdbreath((self playerADS() && weaponClass(self getCurrentWEapon()) == "rifle"));
self holdbreath(self playerADS() > 0);
}
}
@ -276,22 +438,25 @@ onWeaponChange()
{
self endon("disconnect");
self endon("death");
weap = self GetCurrentWeapon();
self.bot.is_cur_full_auto = WeaponIsFullAuto(weap);
if (weap != "none")
self changeToWeap(weap);
first = true;
for(;;)
{
self waittill( "weapon_change", newWeapon );
newWeapon = undefined;
if (first)
{
first = false;
newWeapon = self getCurrentWeapon();
}
else
self waittill( "weapon_change", newWeapon );
self.bot.is_cur_full_auto = WeaponIsFullAuto(newWeapon);
self.bot.cur_weap_dist_multi = SetWeaponDistMulti(newWeapon);
self.bot.is_cur_sniper = IsWeapSniper(newWeapon);
if (newWeapon == "none")
{
continue;
}
self changeToWeap(newWeapon);
}
@ -327,7 +492,18 @@ reload_watch()
{
self waittill("reload_start");
self.bot.isreloading = true;
self waittill_notify_or_timeout("reload", 7.5);
while(true)
{
ret = self waittill_any_timeout(7.5, "reload");
if (ret == "timeout")
break;
weap = self GetCurrentWeapon();
if (self GetWeaponAmmoClip(weap) >= WeaponClipSize(weap))
break;
}
self.bot.isreloading = false;
}
}
@ -376,17 +552,25 @@ stance()
self prone();
curweap = self getCurrentWeapon();
time = getTime();
chance = self.pers["bots"]["behavior"]["sprint"];
if (time - self.lastSpawnTime < 5000)
chance *= 2;
if(isDefined(self.bot.script_goal) && DistanceSquared(self.origin, self.bot.script_goal) > 256*256)
chance *= 2;
if(toStance != "stand" || self.bot.isreloading || self.bot.issprinting || self.bot.isfraggingafter || self.bot.issmokingafter)
continue;
if(randomInt(100) > self.pers["bots"]["behavior"]["sprint"])
if(randomInt(100) > chance)
continue;
if(isDefined(self.bot.target) && self canFire(curweap) && self isInRange(self.bot.target.dist, curweap))
continue;
if(self.bot.sprintendtime != -1 && getTime() - self.bot.sprintendtime < 2000)
if(self.bot.sprintendtime != -1 && time - self.bot.sprintendtime < 2000)
continue;
if(!isDefined(self.bot.towards_goal) || DistanceSquared(self.origin, self.bot.towards_goal) < level.bots_minSprintDistance || getConeDot(self.bot.towards_goal, self.origin, self GetPlayerAngles()) < 0.75)
@ -582,9 +766,11 @@ updateAimOffset(obj)
targetObjUpdateTraced(obj, daDist, ent, theTime, isScriptObj)
{
distClose = self.pers["bots"]["skill"]["dist_start"];
distClose *= self.bot.cur_weap_dist_multi;
distClose *= distClose;
distMax = self.pers["bots"]["skill"]["dist_max"];
distMax *= self.bot.cur_weap_dist_multi;
distMax *= distMax;
timeMulti = 1;
@ -635,13 +821,18 @@ target()
myAngles = self GetPlayerAngles();
myFov = self.pers["bots"]["skill"]["fov"];
bestTargets = [];
bestTime = 9999999999;
bestTime = 2147483647;
rememberTime = self.pers["bots"]["skill"]["remember_time"];
initReactTime = self.pers["bots"]["skill"]["init_react_time"];
hasTarget = isDefined(self.bot.target);
adsAmount = self PlayerADS();
adsFovFact = self.pers["bots"]["skill"]["ads_fov_multi"];
// reduce fov if ads'ing
myFov *= 1 - 0.5 * self PlayerADS();
if (adsAmount > 0)
{
myFov *= 1 - adsFovFact * adsAmount;
}
if(hasTarget && !isDefined(self.bot.target.entity))
{
@ -782,7 +973,7 @@ target()
if(hasTarget && isDefined(bestTargets[self.bot.target.entity getEntityNumber()+""]))
continue;
closest = 9999999999;
closest = 2147483647;
toBeTarget = undefined;
bestKeys = getArrayKeys(bestTargets);
@ -873,6 +1064,9 @@ watchToLook()
if(!self isInRange(self.bot.target.dist, curweap))
continue;
if (self.bot.is_cur_sniper)
continue;
if(randomInt(100) > self.pers["bots"]["behavior"]["jump"])
continue;
@ -958,6 +1152,14 @@ aim()
eyePos = self getEyePos();
curweap = self getCurrentWeapon();
angles = self GetPlayerAngles();
adsAmount = self PlayerADS();
adsAimSpeedFact = self.pers["bots"]["skill"]["ads_aimspeed_multi"];
// reduce aimspeed if ads'ing
if (adsAmount > 0)
{
aimspeed *= 1 + adsAimSpeedFact * adsAmount;
}
if(isDefined(self.bot.target) && isDefined(self.bot.target.entity))
{
@ -1020,7 +1222,10 @@ aim()
else
{
if (self canAds(dist, curweap))
self thread pressADS();
{
if (!self.bot.is_cur_sniper || !self.pers["bots"]["behavior"]["quickscope"])
self thread pressAds();
}
}
self botLookAt(last_pos + (0, 0, self getEyeHeight() + nadeAimOffset), aimspeed);
@ -1031,7 +1236,14 @@ aim()
{
if(isplay)
{
if (!target IsPlayerModelOK())
continue;
aimpos = target getTagOrigin( bone );
if (!isDefined(aimpos))
continue;
aimpos += offset;
aimpos += aimoffset;
aimpos += (0, 0, nadeAimOffset);
@ -1065,15 +1277,25 @@ aim()
if(!self canFire(curweap) || !self isInRange(dist, curweap))
continue;
//c4 logic here, but doesnt work anyway
canADS = self canAds(dist, curweap);
canADS = (self canAds(dist, curweap) && conedot > 0.75);
if (canADS)
self thread pressADS();
{
stopAdsOverride = false;
if (self.bot.is_cur_sniper)
{
if (self.pers["bots"]["behavior"]["quickscope"] && self.bot.last_fire_time != -1 && getTime() - self.bot.last_fire_time < 1000)
stopAdsOverride = true;
else
self notify("kill_goal");
}
if (!stopAdsOverride)
self thread pressAds();
}
if (trace_time > reaction_time)
{
if((!canADS || self playerads() == 1.0 || self InLastStand() || self GetStance() == "prone") && (conedot > 0.95 || dist < level.bots_maxKnifeDistance) && getDvarInt("bots_play_fire"))
if((!canADS || adsAmount >= 1.0 || self InLastStand() || self GetStance() == "prone") && (conedot > 0.99 || dist < level.bots_maxKnifeDistance) && getDvarInt("bots_play_fire"))
self botFire();
if (isplay)
@ -1104,11 +1326,23 @@ aim()
if(!self canFire(curweap) || !self isInRange(dist, curweap))
continue;
canADS = self canAds(dist, curweap);
canADS = (self canAds(dist, curweap) && conedot > 0.75);
if (canADS)
self thread pressADS();
{
stopAdsOverride = false;
if (self.bot.is_cur_sniper)
{
if (self.pers["bots"]["behavior"]["quickscope"] && self.bot.last_fire_time != -1 && getTime() - self.bot.last_fire_time < 1000)
stopAdsOverride = true;
else
self notify("kill_goal");
}
if((!canADS || self playerads() == 1.0 || self InLastStand() || self GetStance() == "prone") && (conedot > 0.95 || dist < level.bots_maxKnifeDistance) && getDvarInt("bots_play_fire"))
if (!stopAdsOverride)
self thread pressAds();
}
if((!canADS || adsAmount >= 1.0 || self InLastStand() || self GetStance() == "prone") && (conedot > 0.95 || dist < level.bots_maxKnifeDistance) && getDvarInt("bots_play_fire"))
self botFire();
continue;
@ -1144,6 +1378,8 @@ aim()
*/
botFire()
{
self.bot.last_fire_time = getTime();
if(self.bot.is_cur_full_auto)
{
self thread pressFire();
@ -1258,6 +1494,8 @@ walk()
if(self maps\mp\_flashgrenades::isFlashbanged())
{
self.bot.last_next_wp = -1;
self.bot.last_second_next_wp = -1;
self botMoveTo(self.origin + self GetVelocity()*500);
continue;
}
@ -1274,7 +1512,7 @@ walk()
if(self.bot.target.isplay && self.bot.target.trace_time && self canFire(curweap) && self isInRange(self.bot.target.dist, curweap))
{
if (self InLastStand() || self GetStance() == "prone")
if (self InLastStand() || self GetStance() == "prone" || (self.bot.is_cur_sniper && self PlayerADS() > 0))
continue;
if(self.bot.target.rand <= self.pers["bots"]["behavior"]["strafe"])
@ -1370,6 +1608,8 @@ strafe(target)
if(traceRight["fraction"] > traceLeft["fraction"])
strafe = traceRight["position"];
self.bot.last_next_wp = -1;
self.bot.last_second_next_wp = -1;
self botMoveTo(strafe);
wait 2;
self notify("kill_goal");
@ -1481,39 +1721,34 @@ doWalk(goal, dist, isScriptGoal)
self thread watchOnGoal(goal, distsq);
current = self initAStar(goal);
// if a waypoint is closer than the goal
//if (current >= 0 && DistanceSquared(self.origin, level.waypoints[self.bot.astar[current]].origin) < DistanceSquared(self.origin, goal))
//{
while(current >= 0)
// skip waypoints we already completed to prevent rubber banding
if (current > 0 && self.bot.astar[current] == self.bot.last_next_wp && self.bot.astar[current-1] == self.bot.last_second_next_wp)
current = self removeAStar();
if (current >= 0)
{
// check if a waypoint is closer than the goal
wpOrg = level.waypoints[self.bot.astar[current]].origin;
ppt = PlayerPhysicsTrace(self.origin + (0,0,32), wpOrg, false, self);
if (DistanceSquared(self.origin, wpOrg) < DistanceSquared(self.origin, goal) || DistanceSquared(wpOrg, ppt) > 1.0)
{
// skip down the line of waypoints and go to the waypoint we have a direct path too
/*for (;;)
while(current >= 0)
{
if (current <= 0)
break;
ppt = PlayerPhysicsTrace(self.origin + (0,0,32), level.waypoints[self.bot.astar[current-1]].origin, false, self);
if (DistanceSquared(level.waypoints[self.bot.astar[current-1]].origin, ppt) > 1.0)
break;
if (level.waypoints[self.bot.astar[current-1]].type == "climb" || level.waypoints[self.bot.astar[current]].type == "climb")
break;
self.bot.next_wp = self.bot.astar[current];
self.bot.second_next_wp = -1;
if(current > 0)
self.bot.second_next_wp = self.bot.astar[current-1];
self notify("new_static_waypoint");
self movetowards(level.waypoints[self.bot.next_wp].origin);
self.bot.last_next_wp = self.bot.next_wp;
self.bot.last_second_next_wp = self.bot.second_next_wp;
current = self removeAStar();
}*/
self.bot.next_wp = self.bot.astar[current];
self.bot.second_next_wp = -1;
if(current != 0)
self.bot.second_next_wp = self.bot.astar[current-1];
self notify("new_static_waypoint");
self movetowards(level.waypoints[self.bot.next_wp].origin);
current = self removeAStar();
}
}
//}
}
self.bot.next_wp = -1;
self.bot.second_next_wp = -1;
@ -1521,6 +1756,8 @@ doWalk(goal, dist, isScriptGoal)
if(DistanceSquared(self.origin, goal) > distsq)
{
self.bot.last_next_wp = -1;
self.bot.last_second_next_wp = -1;
self movetowards(goal); // any better way??
}
@ -1549,17 +1786,18 @@ movetowards(goal)
{
self botMoveTo(goal);
if(time > 3)
if(time > 3.5)
{
time = 0;
if(distanceSquared(self.origin, lastOri) < 128)
{
self thread knife();
wait 0.5;
stucks++;
randomDir = self getRandomLargestStafe(stucks);
self knife(); // knife glass
wait 0.25;
self botMoveTo(randomDir);
wait stucks;
}
@ -1568,7 +1806,7 @@ movetowards(goal)
}
else if(timeslow > 1.5)
{
self thread jump();
self thread doMantle();
}
else if(timeslow > 0.75)
{
@ -1590,6 +1828,22 @@ movetowards(goal)
self notify("completed_move_to");
}
/*
Bots do the mantle
*/
doMantle()
{
self endon("disconnect");
self endon("death");
self endon("kill_goal");
self jump();
wait 0.35;
self jump();
}
/*
Will return the pos of the largest trace from the bot.
*/

View File

@ -28,6 +28,7 @@ connected()
self endon("disconnect");
self.killerLocation = undefined;
self.lastKiller = undefined;
self thread difficulty();
self thread teamWatch();
@ -44,6 +45,7 @@ connected()
onKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration)
{
self.killerLocation = undefined;
self.lastKiller = undefined;
if(!IsDefined( self ) || !isDefined(self.team))
return;
@ -70,6 +72,7 @@ onKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc,
return;
self.killerLocation = eAttacker.origin;
self.lastKiller = eAttacker;
}
/*
@ -260,219 +263,233 @@ difficulty()
for(;;)
{
wait 1;
rankVar = GetDvarInt("bots_skill");
if(rankVar == 9)
continue;
switch(self.pers["bots"]["skill"]["base"])
if(rankVar != 9)
{
case 1:
self.pers["bots"]["skill"]["aim_time"] = 0.6;
self.pers["bots"]["skill"]["init_react_time"] = 1500;
self.pers["bots"]["skill"]["reaction_time"] = 1000;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 500;
self.pers["bots"]["skill"]["no_trace_look_time"] = 600;
self.pers["bots"]["skill"]["remember_time"] = 750;
self.pers["bots"]["skill"]["fov"] = 0.7;
self.pers["bots"]["skill"]["dist_max"] = 2500;
self.pers["bots"]["skill"]["dist_start"] = 1000;
self.pers["bots"]["skill"]["spawn_time"] = 0.75;
self.pers["bots"]["skill"]["help_dist"] = 0;
self.pers["bots"]["skill"]["semi_time"] = 0.9;
self.pers["bots"]["skill"]["shoot_after_time"] = 1;
self.pers["bots"]["skill"]["aim_offset_time"] = 1.5;
self.pers["bots"]["skill"]["aim_offset_amount"] = 4;
self.pers["bots"]["skill"]["bone_update_interval"] = 2;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_ankle_le,j_ankle_ri";
switch(self.pers["bots"]["skill"]["base"])
{
case 1:
self.pers["bots"]["skill"]["aim_time"] = 0.6;
self.pers["bots"]["skill"]["init_react_time"] = 1500;
self.pers["bots"]["skill"]["reaction_time"] = 1000;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 500;
self.pers["bots"]["skill"]["no_trace_look_time"] = 600;
self.pers["bots"]["skill"]["remember_time"] = 750;
self.pers["bots"]["skill"]["fov"] = 0.7;
self.pers["bots"]["skill"]["dist_max"] = 2500;
self.pers["bots"]["skill"]["dist_start"] = 1000;
self.pers["bots"]["skill"]["spawn_time"] = 0.75;
self.pers["bots"]["skill"]["help_dist"] = 0;
self.pers["bots"]["skill"]["semi_time"] = 0.9;
self.pers["bots"]["skill"]["shoot_after_time"] = 1;
self.pers["bots"]["skill"]["aim_offset_time"] = 1.5;
self.pers["bots"]["skill"]["aim_offset_amount"] = 4;
self.pers["bots"]["skill"]["bone_update_interval"] = 2;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_ankle_le,j_ankle_ri";
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
self.pers["bots"]["behavior"]["strafe"] = 0;
self.pers["bots"]["behavior"]["nade"] = 10;
self.pers["bots"]["behavior"]["sprint"] = 10;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 70;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 0;
break;
case 2:
self.pers["bots"]["skill"]["aim_time"] = 0.55;
self.pers["bots"]["skill"]["init_react_time"] = 1000;
self.pers["bots"]["skill"]["reaction_time"] = 800;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000;
self.pers["bots"]["skill"]["no_trace_look_time"] = 1250;
self.pers["bots"]["skill"]["remember_time"] = 1500;
self.pers["bots"]["skill"]["fov"] = 0.65;
self.pers["bots"]["skill"]["dist_max"] = 3000;
self.pers["bots"]["skill"]["dist_start"] = 1500;
self.pers["bots"]["skill"]["spawn_time"] = 0.65;
self.pers["bots"]["skill"]["help_dist"] = 500;
self.pers["bots"]["skill"]["semi_time"] = 0.75;
self.pers["bots"]["skill"]["shoot_after_time"] = 0.75;
self.pers["bots"]["skill"]["aim_offset_time"] = 1;
self.pers["bots"]["skill"]["aim_offset_amount"] = 3;
self.pers["bots"]["skill"]["bone_update_interval"] = 1.5;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_ankle_le,j_ankle_ri,j_head";
self.pers["bots"]["behavior"]["strafe"] = 0;
self.pers["bots"]["behavior"]["nade"] = 10;
self.pers["bots"]["behavior"]["sprint"] = 30;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 20;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 0;
break;
case 2:
self.pers["bots"]["skill"]["aim_time"] = 0.55;
self.pers["bots"]["skill"]["init_react_time"] = 1000;
self.pers["bots"]["skill"]["reaction_time"] = 800;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000;
self.pers["bots"]["skill"]["no_trace_look_time"] = 1250;
self.pers["bots"]["skill"]["remember_time"] = 1500;
self.pers["bots"]["skill"]["fov"] = 0.65;
self.pers["bots"]["skill"]["dist_max"] = 3000;
self.pers["bots"]["skill"]["dist_start"] = 1500;
self.pers["bots"]["skill"]["spawn_time"] = 0.65;
self.pers["bots"]["skill"]["help_dist"] = 500;
self.pers["bots"]["skill"]["semi_time"] = 0.75;
self.pers["bots"]["skill"]["shoot_after_time"] = 0.75;
self.pers["bots"]["skill"]["aim_offset_time"] = 1;
self.pers["bots"]["skill"]["aim_offset_amount"] = 3;
self.pers["bots"]["skill"]["bone_update_interval"] = 1.5;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_ankle_le,j_ankle_ri,j_head";
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
self.pers["bots"]["behavior"]["strafe"] = 10;
self.pers["bots"]["behavior"]["nade"] = 15;
self.pers["bots"]["behavior"]["sprint"] = 15;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 60;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 10;
break;
case 3:
self.pers["bots"]["skill"]["aim_time"] = 0.4;
self.pers["bots"]["skill"]["init_react_time"] = 750;
self.pers["bots"]["skill"]["reaction_time"] = 500;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000;
self.pers["bots"]["skill"]["no_trace_look_time"] = 1500;
self.pers["bots"]["skill"]["remember_time"] = 2000;
self.pers["bots"]["skill"]["fov"] = 0.6;
self.pers["bots"]["skill"]["dist_max"] = 4000;
self.pers["bots"]["skill"]["dist_start"] = 2250;
self.pers["bots"]["skill"]["spawn_time"] = 0.5;
self.pers["bots"]["skill"]["help_dist"] = 750;
self.pers["bots"]["skill"]["semi_time"] = 0.65;
self.pers["bots"]["skill"]["shoot_after_time"] = 0.65;
self.pers["bots"]["skill"]["aim_offset_time"] = 0.75;
self.pers["bots"]["skill"]["aim_offset_amount"] = 2.5;
self.pers["bots"]["skill"]["bone_update_interval"] = 1;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head";
self.pers["bots"]["behavior"]["strafe"] = 10;
self.pers["bots"]["behavior"]["nade"] = 15;
self.pers["bots"]["behavior"]["sprint"] = 45;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 15;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 10;
break;
case 3:
self.pers["bots"]["skill"]["aim_time"] = 0.4;
self.pers["bots"]["skill"]["init_react_time"] = 750;
self.pers["bots"]["skill"]["reaction_time"] = 500;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000;
self.pers["bots"]["skill"]["no_trace_look_time"] = 1500;
self.pers["bots"]["skill"]["remember_time"] = 2000;
self.pers["bots"]["skill"]["fov"] = 0.6;
self.pers["bots"]["skill"]["dist_max"] = 4000;
self.pers["bots"]["skill"]["dist_start"] = 2250;
self.pers["bots"]["skill"]["spawn_time"] = 0.5;
self.pers["bots"]["skill"]["help_dist"] = 750;
self.pers["bots"]["skill"]["semi_time"] = 0.65;
self.pers["bots"]["skill"]["shoot_after_time"] = 0.65;
self.pers["bots"]["skill"]["aim_offset_time"] = 0.75;
self.pers["bots"]["skill"]["aim_offset_amount"] = 2.5;
self.pers["bots"]["skill"]["bone_update_interval"] = 1;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head";
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
self.pers["bots"]["behavior"]["strafe"] = 20;
self.pers["bots"]["behavior"]["nade"] = 20;
self.pers["bots"]["behavior"]["sprint"] = 20;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 50;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 25;
break;
case 4:
self.pers["bots"]["skill"]["aim_time"] = 0.3;
self.pers["bots"]["skill"]["init_react_time"] = 600;
self.pers["bots"]["skill"]["reaction_time"] = 400;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000;
self.pers["bots"]["skill"]["no_trace_look_time"] = 1500;
self.pers["bots"]["skill"]["remember_time"] = 3000;
self.pers["bots"]["skill"]["fov"] = 0.55;
self.pers["bots"]["skill"]["dist_max"] = 5000;
self.pers["bots"]["skill"]["dist_start"] = 3350;
self.pers["bots"]["skill"]["spawn_time"] = 0.35;
self.pers["bots"]["skill"]["help_dist"] = 1000;
self.pers["bots"]["skill"]["semi_time"] = 0.5;
self.pers["bots"]["skill"]["shoot_after_time"] = 0.5;
self.pers["bots"]["skill"]["aim_offset_time"] = 0.5;
self.pers["bots"]["skill"]["aim_offset_amount"] = 2;
self.pers["bots"]["skill"]["bone_update_interval"] = 0.75;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head,j_head";
self.pers["bots"]["behavior"]["strafe"] = 20;
self.pers["bots"]["behavior"]["nade"] = 20;
self.pers["bots"]["behavior"]["sprint"] = 50;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 10;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 25;
break;
case 4:
self.pers["bots"]["skill"]["aim_time"] = 0.3;
self.pers["bots"]["skill"]["init_react_time"] = 600;
self.pers["bots"]["skill"]["reaction_time"] = 400;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000;
self.pers["bots"]["skill"]["no_trace_look_time"] = 1500;
self.pers["bots"]["skill"]["remember_time"] = 3000;
self.pers["bots"]["skill"]["fov"] = 0.55;
self.pers["bots"]["skill"]["dist_max"] = 5000;
self.pers["bots"]["skill"]["dist_start"] = 3350;
self.pers["bots"]["skill"]["spawn_time"] = 0.35;
self.pers["bots"]["skill"]["help_dist"] = 1000;
self.pers["bots"]["skill"]["semi_time"] = 0.5;
self.pers["bots"]["skill"]["shoot_after_time"] = 0.5;
self.pers["bots"]["skill"]["aim_offset_time"] = 0.5;
self.pers["bots"]["skill"]["aim_offset_amount"] = 2;
self.pers["bots"]["skill"]["bone_update_interval"] = 0.75;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head,j_head";
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
self.pers["bots"]["behavior"]["strafe"] = 30;
self.pers["bots"]["behavior"]["nade"] = 25;
self.pers["bots"]["behavior"]["sprint"] = 30;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 40;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 35;
break;
case 5:
self.pers["bots"]["skill"]["aim_time"] = 0.25;
self.pers["bots"]["skill"]["init_react_time"] = 500;
self.pers["bots"]["skill"]["reaction_time"] = 300;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1500;
self.pers["bots"]["skill"]["no_trace_look_time"] = 2000;
self.pers["bots"]["skill"]["remember_time"] = 4000;
self.pers["bots"]["skill"]["fov"] = 0.5;
self.pers["bots"]["skill"]["dist_max"] = 7500;
self.pers["bots"]["skill"]["dist_start"] = 5000;
self.pers["bots"]["skill"]["spawn_time"] = 0.25;
self.pers["bots"]["skill"]["help_dist"] = 1500;
self.pers["bots"]["skill"]["semi_time"] = 0.4;
self.pers["bots"]["skill"]["shoot_after_time"] = 0.35;
self.pers["bots"]["skill"]["aim_offset_time"] = 0.35;
self.pers["bots"]["skill"]["aim_offset_amount"] = 1.5;
self.pers["bots"]["skill"]["bone_update_interval"] = 0.5;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_head";
self.pers["bots"]["behavior"]["strafe"] = 30;
self.pers["bots"]["behavior"]["nade"] = 25;
self.pers["bots"]["behavior"]["sprint"] = 55;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 10;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 35;
break;
case 5:
self.pers["bots"]["skill"]["aim_time"] = 0.25;
self.pers["bots"]["skill"]["init_react_time"] = 500;
self.pers["bots"]["skill"]["reaction_time"] = 300;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1500;
self.pers["bots"]["skill"]["no_trace_look_time"] = 2000;
self.pers["bots"]["skill"]["remember_time"] = 4000;
self.pers["bots"]["skill"]["fov"] = 0.5;
self.pers["bots"]["skill"]["dist_max"] = 7500;
self.pers["bots"]["skill"]["dist_start"] = 5000;
self.pers["bots"]["skill"]["spawn_time"] = 0.25;
self.pers["bots"]["skill"]["help_dist"] = 1500;
self.pers["bots"]["skill"]["semi_time"] = 0.4;
self.pers["bots"]["skill"]["shoot_after_time"] = 0.35;
self.pers["bots"]["skill"]["aim_offset_time"] = 0.35;
self.pers["bots"]["skill"]["aim_offset_amount"] = 1.5;
self.pers["bots"]["skill"]["bone_update_interval"] = 0.5;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_head";
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
self.pers["bots"]["behavior"]["strafe"] = 40;
self.pers["bots"]["behavior"]["nade"] = 35;
self.pers["bots"]["behavior"]["sprint"] = 40;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 30;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 50;
break;
case 6:
self.pers["bots"]["skill"]["aim_time"] = 0.2;
self.pers["bots"]["skill"]["init_react_time"] = 250;
self.pers["bots"]["skill"]["reaction_time"] = 150;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 2000;
self.pers["bots"]["skill"]["no_trace_look_time"] = 3000;
self.pers["bots"]["skill"]["remember_time"] = 5000;
self.pers["bots"]["skill"]["fov"] = 0.45;
self.pers["bots"]["skill"]["dist_max"] = 10000;
self.pers["bots"]["skill"]["dist_start"] = 7500;
self.pers["bots"]["skill"]["spawn_time"] = 0.2;
self.pers["bots"]["skill"]["help_dist"] = 2000;
self.pers["bots"]["skill"]["semi_time"] = 0.25;
self.pers["bots"]["skill"]["shoot_after_time"] = 0.25;
self.pers["bots"]["skill"]["aim_offset_time"] = 0.25;
self.pers["bots"]["skill"]["aim_offset_amount"] = 1;
self.pers["bots"]["skill"]["bone_update_interval"] = 0.25;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_head,j_head";
self.pers["bots"]["behavior"]["strafe"] = 40;
self.pers["bots"]["behavior"]["nade"] = 35;
self.pers["bots"]["behavior"]["sprint"] = 60;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 10;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 50;
break;
case 6:
self.pers["bots"]["skill"]["aim_time"] = 0.2;
self.pers["bots"]["skill"]["init_react_time"] = 250;
self.pers["bots"]["skill"]["reaction_time"] = 150;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 2000;
self.pers["bots"]["skill"]["no_trace_look_time"] = 3000;
self.pers["bots"]["skill"]["remember_time"] = 5000;
self.pers["bots"]["skill"]["fov"] = 0.45;
self.pers["bots"]["skill"]["dist_max"] = 10000;
self.pers["bots"]["skill"]["dist_start"] = 7500;
self.pers["bots"]["skill"]["spawn_time"] = 0.2;
self.pers["bots"]["skill"]["help_dist"] = 2000;
self.pers["bots"]["skill"]["semi_time"] = 0.25;
self.pers["bots"]["skill"]["shoot_after_time"] = 0.25;
self.pers["bots"]["skill"]["aim_offset_time"] = 0.25;
self.pers["bots"]["skill"]["aim_offset_amount"] = 1;
self.pers["bots"]["skill"]["bone_update_interval"] = 0.25;
self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_head,j_head";
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
self.pers["bots"]["behavior"]["strafe"] = 50;
self.pers["bots"]["behavior"]["nade"] = 45;
self.pers["bots"]["behavior"]["sprint"] = 50;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 20;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 75;
break;
case 7:
self.pers["bots"]["skill"]["aim_time"] = 0.1;
self.pers["bots"]["skill"]["init_react_time"] = 100;
self.pers["bots"]["skill"]["reaction_time"] = 50;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 2500;
self.pers["bots"]["skill"]["no_trace_look_time"] = 4000;
self.pers["bots"]["skill"]["remember_time"] = 7500;
self.pers["bots"]["skill"]["fov"] = 0.4;
self.pers["bots"]["skill"]["dist_max"] = 15000;
self.pers["bots"]["skill"]["dist_start"] = 10000;
self.pers["bots"]["skill"]["spawn_time"] = 0.05;
self.pers["bots"]["skill"]["help_dist"] = 3000;
self.pers["bots"]["skill"]["semi_time"] = 0.1;
self.pers["bots"]["skill"]["shoot_after_time"] = 0;
self.pers["bots"]["skill"]["aim_offset_time"] = 0;
self.pers["bots"]["skill"]["aim_offset_amount"] = 0;
self.pers["bots"]["skill"]["bone_update_interval"] = 0.05;
self.pers["bots"]["skill"]["bones"] = "j_head";
self.pers["bots"]["behavior"]["strafe"] = 50;
self.pers["bots"]["behavior"]["nade"] = 45;
self.pers["bots"]["behavior"]["sprint"] = 65;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 10;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 75;
break;
case 7:
self.pers["bots"]["skill"]["aim_time"] = 0.1;
self.pers["bots"]["skill"]["init_react_time"] = 100;
self.pers["bots"]["skill"]["reaction_time"] = 50;
self.pers["bots"]["skill"]["no_trace_ads_time"] = 2500;
self.pers["bots"]["skill"]["no_trace_look_time"] = 4000;
self.pers["bots"]["skill"]["remember_time"] = 7500;
self.pers["bots"]["skill"]["fov"] = 0.4;
self.pers["bots"]["skill"]["dist_max"] = 15000;
self.pers["bots"]["skill"]["dist_start"] = 10000;
self.pers["bots"]["skill"]["spawn_time"] = 0.05;
self.pers["bots"]["skill"]["help_dist"] = 3000;
self.pers["bots"]["skill"]["semi_time"] = 0.1;
self.pers["bots"]["skill"]["shoot_after_time"] = 0;
self.pers["bots"]["skill"]["aim_offset_time"] = 0;
self.pers["bots"]["skill"]["aim_offset_amount"] = 0;
self.pers["bots"]["skill"]["bone_update_interval"] = 0.05;
self.pers["bots"]["skill"]["bones"] = "j_head";
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
self.pers["bots"]["behavior"]["strafe"] = 65;
self.pers["bots"]["behavior"]["nade"] = 65;
self.pers["bots"]["behavior"]["sprint"] = 65;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 5;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 90;
break;
self.pers["bots"]["behavior"]["strafe"] = 65;
self.pers["bots"]["behavior"]["nade"] = 65;
self.pers["bots"]["behavior"]["sprint"] = 70;
self.pers["bots"]["behavior"]["camp"] = 5;
self.pers["bots"]["behavior"]["follow"] = 5;
self.pers["bots"]["behavior"]["crouch"] = 5;
self.pers["bots"]["behavior"]["switch"] = 2;
self.pers["bots"]["behavior"]["class"] = 2;
self.pers["bots"]["behavior"]["jump"] = 90;
break;
}
}
wait 5;
}
}
@ -545,6 +562,11 @@ set_class(rankxp)
rank = self maps\mp\gametypes\_rank::getRankForXp( rankxp ) + 1;
if (RandomFloatRange(0, 1) < ((rank / level.maxRank) + 0.1))
{
self.pers["bots"]["behavior"]["quickscope"] = true;
}
for(i=0; i < 5; i++)
{
primary = get_random_weapon(primaryGroups, rank);
@ -651,7 +673,6 @@ get_random_perk(perkslot, rank, att1, att2)
{
case "specialty_parabolic":
case "specialty_holdbreath":
case "specialty_weapon_c4":
case "specialty_explosivedamage":
case "specialty_twoprimaries":
continue;
@ -917,6 +938,7 @@ start_bot_threads()
self thread bot_killstreak_think();
self thread bot_weapon_think();
self thread doReloadCancel();
// script targeting
if (getDvarInt("bots_play_target_other"))
@ -944,6 +966,7 @@ start_bot_threads()
self thread bot_use_tube_think();
self thread bot_use_grenade_think();
self thread bot_use_equipment_think();
self thread bot_watch_think_mw2();
}
// obj
@ -969,6 +992,9 @@ bot_inc_bots(obj, unreach)
{
level endon("game_ended");
self endon("bot_inc_bots");
if (!isDefined(obj))
return;
if (!isDefined(obj.bots))
obj.bots = 0;
@ -1035,7 +1061,7 @@ nearAnyOfWaypoints(dist, waypoints)
getNearestWaypointOfWaypoints(waypoints)
{
answer = undefined;
closestDist = 999999999999;
closestDist = 2147483647;
for (i = 0; i < waypoints.size; i++)
{
waypoint = waypoints[i];
@ -1311,6 +1337,23 @@ fire_current_weapon()
}
}
/*
Fires the bots c4
*/
fire_c4()
{
self endon("death");
self endon("disconnect");
self endon("weapon_change");
self endon("stop_firing_weapon");
for (;;)
{
self thread BotPressAds(0.05);
wait 0.1;
}
}
/*
Changes to the weap
*/
@ -1767,6 +1810,8 @@ bot_use_equipment_think()
nade = undefined;
if (self GetAmmoCount("claymore_mp"))
nade = "claymore_mp";
if (self GetAmmoCount("c4_mp"))
nade = "c4_mp";
if (!isDefined(nade))
continue;
@ -1844,7 +1889,10 @@ bot_use_equipment_think()
if (self changeToWeapon(nade))
{
self thread fire_current_weapon();
if (nade != "c4_mp")
self thread fire_current_weapon();
else
self thread fire_c4();
self waittill_any_timeout(5, "grenade_fire", "weapon_change");
self notify("stop_firing_weapon");
}
@ -2086,9 +2134,19 @@ bot_revenge_think()
if(self.pers["bots"]["skill"]["base"] <= 1)
return;
if (isDefined(self.lastKiller) && isAlive(self.lastKiller))
{
if(bulletTracePassed(self getEyePos(), self.lastKiller getTagOrigin( "j_spineupper" ), false, self.lastKiller))
{
self setAttacker(self.lastKiller);
}
}
if(!isDefined(self.killerLocation))
return;
loc = self.killerLocation;
for(;;)
{
@ -2100,13 +2158,80 @@ bot_revenge_think()
if ( randomint( 100 ) < 75 )
return;
self SetScriptGoal( self.killerLocation, 64 );
self SetScriptGoal( loc, 64 );
if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal")
self ClearScriptGoal();
}
}
/*
Reload cancels
*/
doReloadCancel()
{
self endon("disconnect");
self endon("death");
for (;;)
{
ret = self waittill_any_return("reload", "weapon_change");
if(self BotIsFrozen())
continue;
if(self isDefusing() || self isPlanting())
continue;
if (self InLastStand())
continue;
curWeap = self GetCurrentWeapon();
if (!maps\mp\gametypes\_weapons::isSideArm( curWeap ) && !maps\mp\gametypes\_weapons::isPrimaryWeapon( curWeap ))
continue;
if (ret == "reload")
{
// check single reloads
if (self GetWeaponAmmoClip(curWeap) < WeaponClipSize(curWeap))
continue;
}
// check difficulty
if (self.pers["bots"]["skill"]["base"] <= 3)
continue;
// check if got another weapon
weaponslist = self GetWeaponsListPrimaries();
weap = "";
while(weaponslist.size)
{
weapon = weaponslist[randomInt(weaponslist.size)];
weaponslist = array_remove(weaponslist, weapon);
if (!maps\mp\gametypes\_weapons::isSideArm( weapon ) && !maps\mp\gametypes\_weapons::isPrimaryWeapon( weapon ))
continue;
if(curWeap == weapon || weapon == "none" || weapon == "")
continue;
weap = weapon;
break;
}
if(weap == "")
continue;
// do the cancel
wait 0.1;
self BotChangeToWeapon(weap);
wait 0.25;
self BotChangeToWeapon(curWeap);
wait 2;
}
}
/*
Bot logic for switching weapons.
*/
@ -2115,6 +2240,8 @@ bot_weapon_think()
self endon("death");
self endon("disconnect");
level endon("game_ended");
first = true;
for(;;)
{
@ -2141,13 +2268,23 @@ bot_weapon_think()
}
}
if(curWeap != "none" && self getAmmoCount(curWeap) && curWeap != "c4_mp")
if (first)
{
if(randomInt(100) > self.pers["bots"]["behavior"]["switch"])
first = false;
if(randomInt(100) > self.pers["bots"]["behavior"]["initswitch"])
continue;
}
else
{
if(curWeap != "none" && self getAmmoCount(curWeap))
{
if(randomInt(100) > self.pers["bots"]["behavior"]["switch"])
continue;
if(hasTarget)
continue;
if(hasTarget)
continue;
}
}
weaponslist = self getweaponslist();
@ -2166,7 +2303,7 @@ bot_weapon_think()
if (maps\mp\gametypes\_weapons::isGrenade( weapon ))
continue;
if(curWeap == weapon || weapon == "c4_mp" || weapon == "none" || weapon == "claymore_mp" || weapon == "")//c4 no work
if(curWeap == weapon || weapon == "c4_mp" || weapon == "none" || weapon == "claymore_mp" || weapon == "")
continue;
weap = weapon;
@ -2180,6 +2317,52 @@ bot_weapon_think()
}
}
/*
Bots play mw2
*/
bot_watch_think_mw2()
{
self endon("disconnect");
self endon("death");
level endon("game_ended");
for (;;)
{
wait randomIntRange(1, 4);
if(self BotIsFrozen())
continue;
if(self isDefusing() || self isPlanting())
continue;
if (self InLastStand())
continue;
if (self HasThreat())
continue;
tube = self getValidTube();
if (!isDefined(tube))
{
if (self GetAmmoCount("rpg_mp"))
tube = "rpg_mp";
else
continue;
}
if (self GetCurrentWeapon() == tube)
continue;
chance = self.pers["bots"]["behavior"]["nade"];
if (randomInt(100) > chance)
continue;
self ChangeToWeapon(tube);
}
}
/*
Bot logic for killstreaks.
*/
@ -2285,8 +2468,12 @@ bot_killstreak_think()
if (isAirstrikePos && !isDefined( level.airstrikeInProgress ))
{
self BotFreezeControls(true);
self notify( "confirm_location", targetPos );
wait 1;
self BotFreezeControls(false);
}
self thread changeToWeapon(curWeap);
@ -2466,6 +2653,9 @@ bot_equipment_kill_think()
{
item = grenades[i];
if (!isDefined(item))
continue;
if ( !IsDefined( item.name ) )
{
continue;
@ -2706,20 +2896,23 @@ bot_dom_cap_think()
otherFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( otherTeam );
if ( myFlagCount < otherFlagCount )
if (game["teamScores"][myteam] >= game["teamScores"][otherTeam])
{
if ( randomint( 100 ) < 15 )
continue;
}
else if ( myFlagCount == otherFlagCount )
{
if ( randomint( 100 ) < 35 )
continue;
}
else if ( myFlagCount > otherFlagCount )
{
if ( randomint( 100 ) < 95 )
continue;
if ( myFlagCount < otherFlagCount )
{
if ( randomint( 100 ) < 15 )
continue;
}
else if ( myFlagCount == otherFlagCount )
{
if ( randomint( 100 ) < 35 )
continue;
}
else if ( myFlagCount > otherFlagCount )
{
if ( randomint( 100 ) < 95 )
continue;
}
}
flag = undefined;

View File

@ -799,9 +799,9 @@ SmokeTrace(start, end, rad)
*/
getConeDot(to, from, dir)
{
dirToTarget = VectorNormalize(to-from);
forward = AnglesToForward(dir);
return vectordot(dirToTarget, forward);
dirToTarget = VectorNormalize(to-from);
forward = AnglesToForward(dir);
return vectordot(dirToTarget, forward);
}
/*
@ -974,25 +974,25 @@ cac_init_patch()
*/
tokenizeLine(line, tok)
{
tokens = [];
tokens = [];
token = "";
for (i = 0; i < line.size; i++)
{
c = line[i];
token = "";
for (i = 0; i < line.size; i++)
{
c = line[i];
if (c == tok)
{
tokens[tokens.size] = token;
token = "";
continue;
}
if (c == tok)
{
tokens[tokens.size] = token;
token = "";
continue;
}
token += c;
}
tokens[tokens.size] = token;
token += c;
}
tokens[tokens.size] = token;
return tokens;
return tokens;
}
/*
@ -1525,7 +1525,7 @@ KDTree()
*/
KDTreeInsert(data)//as long as what you insert has a .origin attru, it will work.
{
self.root = self _KDTreeInsert(self.root, data, 0, -9999999999, -9999999999, -9999999999, 9999999999, 9999999999, 9999999999);
self.root = self _KDTreeInsert(self.root, data, 0, -2147483647, -2147483647, -2147483647, 2147483647, 2147483647, 2147483647);
}
/*
@ -1804,7 +1804,7 @@ ReverseHeapAStar(item, item2)
GetNearestWaypointWithSight(pos)
{
candidate = undefined;
dist = 9999999999;
dist = 2147483647;
for(i = 0; i < level.waypointCount; i++)
{

View File

@ -27,6 +27,9 @@ watchPlayers()
{
wait 1;
if (!getDvarInt("bots_main_menu"))
return;
for (i = level.players.size - 1; i >= 0; i--)
{
player = level.players[i];

View File

@ -368,7 +368,7 @@ watchSaveWaypointsCommand()
{
self iPrintlnBold("Auto link enabled");
level.autoLink = true;
level.wpToLink = self.nearest;
level.wpToLink = self.closest;
}
}
@ -446,6 +446,12 @@ DeleteAllWaypoints()
{
level.waypoints = [];
level.waypointCount = 0;
level.waypointsKDTree = WaypointsToKDTree();
level.waypointsCamp = [];
level.waypointsTube = [];
level.waypointsGren = [];
level.waypointsClay = [];
self iprintln("DelAllWps");
}
@ -617,9 +623,7 @@ destroyOnDeath(hud)
{
hud endon("death");
self waittill_either("death","disconnect");
hud notify("death");
hud destroy();
hud = undefined;
}
textScroll(string)

View File

@ -0,0 +1 @@
set sv_hostname "^1Bot ^3War^5fare ^7Local server"

View File

@ -0,0 +1,878 @@
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\bots\_bot_utility;
/*
Initiates the whole bot scripts.
*/
init()
{
level.bw_VERSION = "2.0.1";
if(getDvar("bots_main") == "")
setDvar("bots_main", true);
if (!getDvarInt("bots_main"))
return;
thread load_waypoints();
cac_init_patch();
thread hook_callbacks();
if(getDvar("bots_main_GUIDs") == "")
setDvar("bots_main_GUIDs", "");//guids of players who will be given host powers, comma seperated
if(getDvar("bots_main_firstIsHost") == "")
setDvar("bots_main_firstIsHost", true);//first player to connect is a host
if(getDvar("bots_main_waitForHostTime") == "")
setDvar("bots_main_waitForHostTime", 10.0);//how long to wait to wait for the host player
if(getDvar("bots_manage_add") == "")
setDvar("bots_manage_add", 0);//amount of bots to add to the game
if(getDvar("bots_manage_fill") == "")
setDvar("bots_manage_fill", 0);//amount of bots to maintain
if(getDvar("bots_manage_fill_spec") == "")
setDvar("bots_manage_fill_spec", true);//to count for fill if player is on spec team
if(getDvar("bots_manage_fill_mode") == "")
setDvar("bots_manage_fill_mode", 0);//fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1
if(getDvar("bots_manage_fill_kick") == "")
setDvar("bots_manage_fill_kick", false);//kick bots if too many
if(getDvar("bots_team") == "")
setDvar("bots_team", "autoassign");//which team for bots to join
if(getDvar("bots_team_amount") == "")
setDvar("bots_team_amount", 0);//amount of bots on axis team
if(getDvar("bots_team_force") == "")
setDvar("bots_team_force", false);//force bots on team
if(getDvar("bots_team_mode") == "")
setDvar("bots_team_mode", 0);//counts just bots when 1
if(getDvar("bots_skill") == "")
setDvar("bots_skill", 0);//0 is random, 1 is easy 7 is hard, 8 is custom, 9 is completely random
if(getDvar("bots_skill_axis_hard") == "")
setDvar("bots_skill_axis_hard", 0);//amount of hard bots on axis team
if(getDvar("bots_skill_axis_med") == "")
setDvar("bots_skill_axis_med", 0);
if(getDvar("bots_skill_allies_hard") == "")
setDvar("bots_skill_allies_hard", 0);
if(getDvar("bots_skill_allies_med") == "")
setDvar("bots_skill_allies_med", 0);
if(getDvar("bots_loadout_reasonable") == "")//filter out the bad 'guns' and perks
setDvar("bots_loadout_reasonable", false);
if(getDvar("bots_loadout_allow_op") == "")//allows jug, marty and laststand
setDvar("bots_loadout_allow_op", true);
if(getDvar("bots_loadout_rank") == "")// what rank the bots should be around, -1 is around the players, 0 is all random
setDvar("bots_loadout_rank", -1);
if(getDvar("bots_loadout_prestige") == "")// what pretige the bots will be, -1 is the players, -2 is random
setDvar("bots_loadout_prestige", -1);
if(getDvar("bots_play_move") == "")//bots move
setDvar("bots_play_move", true);
if(getDvar("bots_play_knife") == "")//bots knife
setDvar("bots_play_knife", true);
if(getDvar("bots_play_fire") == "")//bots fire
setDvar("bots_play_fire", true);
if(getDvar("bots_play_nade") == "")//bots grenade
setDvar("bots_play_nade", true);
if(getDvar("bots_play_obj") == "")//bots play the obj
setDvar("bots_play_obj", true);
if(getDvar("bots_play_camp") == "")//bots camp and follow
setDvar("bots_play_camp", true);
if(getDvar("bots_play_jumpdrop") == "")//bots jump and dropshot
setDvar("bots_play_jumpdrop", true);
if(getDvar("bots_play_target_other") == "")//bot target non play ents (vehicles)
setDvar("bots_play_target_other", true);
if(getDvar("bots_play_killstreak") == "")//bot use killstreaks
setDvar("bots_play_killstreak", true);
if(getDvar("bots_play_ads") == "")//bot ads
setDvar("bots_play_ads", true);
if(!isDefined(game["botWarfare"]))
game["botWarfare"] = true;
level.defuseObject = undefined;
level.bots_smokeList = List();
level.tbl_PerkData[0]["reference_full"] = true;
for(h = 1; h < 6; h++)
for(i = 0; i < 3; i++)
level.default_perk["CLASS_CUSTOM"+h][i] = "specialty_null";
level.bots_minSprintDistance = 315;
level.bots_minSprintDistance *= level.bots_minSprintDistance;
level.bots_minGrenadeDistance = 256;
level.bots_minGrenadeDistance *= level.bots_minGrenadeDistance;
level.bots_maxGrenadeDistance = 1024;
level.bots_maxGrenadeDistance *= level.bots_maxGrenadeDistance;
level.bots_maxKnifeDistance = 80;
level.bots_maxKnifeDistance *= level.bots_maxKnifeDistance;
level.bots_goalDistance = 27.5;
level.bots_goalDistance *= level.bots_goalDistance;
level.bots_noADSDistance = 200;
level.bots_noADSDistance *= level.bots_noADSDistance;
level.bots_maxShotgunDistance = 500;
level.bots_maxShotgunDistance *= level.bots_maxShotgunDistance;
level.bots_listenDist = 100;
level.smokeRadius = 255;
level.bots = [];
level.bots_fullautoguns = [];
level.bots_fullautoguns["rpd"] = true;
level.bots_fullautoguns["m60e4"] = true;
level.bots_fullautoguns["saw"] = true;
level.bots_fullautoguns["ak74u"] = true;
level.bots_fullautoguns["mp5"] = true;
level.bots_fullautoguns["p90"] = true;
level.bots_fullautoguns["skorpion"] = true;
level.bots_fullautoguns["uzi"] = true;
level.bots_fullautoguns["g36c"] = true;
level.bots_fullautoguns["m4"] = true;
level.bots_fullautoguns["ak47"] = true;
level.bots_fullautoguns["mp44"] = true;
level thread fixGamemodes();
level thread onUAVAlliesUpdate();
level thread onUAVAxisUpdate();
level thread chopperWatch();
level thread onPlayerConnect();
level thread handleBots();
level thread maps\mp\bots\_bot_http::doVersionCheck();
}
/*
Starts the threads for bots.
*/
handleBots()
{
level thread teamBots();
level thread diffBots();
level addBots();
while(!level.intermission)
wait 0.05;
setDvar("bots_manage_add", getBotArray().size);
}
/*
The hook callback for when any player becomes damaged.
*/
onPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset)
{
if(self is_bot())
{
self maps\mp\bots\_bot_internal::onDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset);
self maps\mp\bots\_bot_script::onDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset);
}
self [[level.prevCallbackPlayerDamage]](eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset);
}
/*
The hook callback when any player gets killed.
*/
onPlayerKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration)
{
if(self is_bot())
{
self maps\mp\bots\_bot_internal::onKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration);
self maps\mp\bots\_bot_script::onKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration);
}
self [[level.prevCallbackPlayerKilled]](eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration);
}
/*
Starts the callbacks.
*/
hook_callbacks()
{
wait 0.05;
level.prevCallbackPlayerDamage = level.callbackPlayerDamage;
level.callbackPlayerDamage = ::onPlayerDamage;
level.prevCallbackPlayerKilled = level.callbackPlayerKilled;
level.callbackPlayerKilled = ::onPlayerKilled;
}
/*
Adds the level.radio object for koth. Cause the iw3 script doesn't have it.
*/
fixKoth()
{
level.radio = undefined;
for(;;)
{
wait 0.05;
if(!isDefined(level.radioObject))
{
continue;
}
for(i = level.radios.size - 1; i >= 0; i--)
{
if(level.radioObject != level.radios[i].gameobject)
continue;
level.radio = level.radios[i];
break;
}
while(isDefined(level.radioObject) && level.radio.gameobject == level.radioObject)
wait 0.05;
}
}
/*
Fixes gamemodes when level starts.
*/
fixGamemodes()
{
for(i=0;i<19;i++)
{
if(isDefined(level.bombZones) && level.gametype == "sd")
{
for(i = 0; i < level.bombZones.size; i++)
level.bombZones[i].onUse = ::onUsePlantObjectFix;
break;
}
if(isDefined(level.radios) && level.gametype == "koth")
{
level thread fixKoth();
break;
}
wait 0.05;
}
}
/*
Thread when any player connects. Starts the threads needed.
*/
onPlayerConnect()
{
for(;;)
{
level waittill("connected", player);
player thread onGrenadeFire();
player thread onWeaponFired();
player thread doPlayerModelFix();
player thread connected();
}
}
/*
Fixes bots perks showing up in killcams and prevents bots from being kicked from old iw3 gsc script.
*/
fixPerksAndScriptKick()
{
self endon("disconnect");
self waittill("spawned");
self.pers["isBot"] = undefined;
if(!level.gameEnded)
level waittill ( "game_ended" );
self.pers["isBot"] = true;
}
/*
When a bot disconnects.
*/
onDisconnect()
{
self waittill("disconnect");
level.bots = array_remove(level.bots, self);
}
/*
Called when a player connects.
*/
connected()
{
self endon("disconnect");
if (!isDefined(self.pers["bot_host"]))
self thread doHostCheck();
if(!self is_bot())
return;
if (!isDefined(self.pers["isBot"]))
{
// fast restart...
self.pers["isBot"] = true;
}
if (!isDefined(self.pers["isBotWarfare"]))
{
self.pers["isBotWarfare"] = true;
self thread added();
}
self thread fixPerksAndScriptKick();
self thread maps\mp\bots\_bot_internal::connected();
self thread maps\mp\bots\_bot_script::connected();
level.bots[level.bots.size] = self;
self thread onDisconnect();
level notify("bot_connected", self);
}
/*
When a bot gets added into the game.
*/
added()
{
self endon("disconnect");
self thread maps\mp\bots\_bot_internal::added();
self thread maps\mp\bots\_bot_script::added();
}
/*
Adds a bot to the game.
*/
add_bot()
{
name = getABotName();
bot = undefined;
if (isDefined(name) && name.size >= 3)
bot = addtestclient(name);
else
bot = addtestclient();
if (isdefined(bot))
{
bot.pers["isBot"] = true;
bot.pers["isBotWarfare"] = true;
bot thread added();
}
}
/*
A server thread for monitoring all bot's difficulty levels for custom server settings.
*/
diffBots()
{
for(;;)
{
wait 1.5;
var_allies_hard = getDVarInt("bots_skill_allies_hard");
var_allies_med = getDVarInt("bots_skill_allies_med");
var_axis_hard = getDVarInt("bots_skill_axis_hard");
var_axis_med = getDVarInt("bots_skill_axis_med");
var_skill = getDvarInt("bots_skill");
allies_hard = 0;
allies_med = 0;
axis_hard = 0;
axis_med = 0;
if(var_skill == 8)
{
playercount = level.players.size;
for(i = 0; i < playercount; i++)
{
player = level.players[i];
if(!isDefined(player.pers["team"]))
continue;
if(!player is_bot())
continue;
if(player.pers["team"] == "axis")
{
if(axis_hard < var_axis_hard)
{
axis_hard++;
player.pers["bots"]["skill"]["base"] = 7;
}
else if(axis_med < var_axis_med)
{
axis_med++;
player.pers["bots"]["skill"]["base"] = 4;
}
else
player.pers["bots"]["skill"]["base"] = 1;
}
else if(player.pers["team"] == "allies")
{
if(allies_hard < var_allies_hard)
{
allies_hard++;
player.pers["bots"]["skill"]["base"] = 7;
}
else if(allies_med < var_allies_med)
{
allies_med++;
player.pers["bots"]["skill"]["base"] = 4;
}
else
player.pers["bots"]["skill"]["base"] = 1;
}
}
}
else if (var_skill != 0 && var_skill != 9)
{
playercount = level.players.size;
for(i = 0; i < playercount; i++)
{
player = level.players[i];
if(!player is_bot())
continue;
player.pers["bots"]["skill"]["base"] = var_skill;
}
}
}
}
/*
A server thread for monitoring all bot's teams for custom server settings.
*/
teamBots()
{
for(;;)
{
wait 1.5;
teamAmount = getDvarInt("bots_team_amount");
toTeam = getDvar("bots_team");
alliesbots = 0;
alliesplayers = 0;
axisbots = 0;
axisplayers = 0;
playercount = level.players.size;
for(i = 0; i < playercount; i++)
{
player = level.players[i];
if(!isDefined(player.pers["team"]))
continue;
if(player is_bot())
{
if(player.pers["team"] == "allies")
alliesbots++;
else if(player.pers["team"] == "axis")
axisbots++;
}
else
{
if(player.pers["team"] == "allies")
alliesplayers++;
else if(player.pers["team"] == "axis")
axisplayers++;
}
}
allies = alliesbots;
axis = axisbots;
if(!getDvarInt("bots_team_mode"))
{
allies += alliesplayers;
axis += axisplayers;
}
if(toTeam != "custom")
{
if(getDvarInt("bots_team_force"))
{
if(toTeam == "autoassign")
{
if(abs(axis - allies) > 1)
{
toTeam = "axis";
if(axis > allies)
toTeam = "allies";
}
}
if(toTeam != "autoassign")
{
playercount = level.players.size;
for(i = 0; i < playercount; i++)
{
player = level.players[i];
if(!isDefined(player.pers["team"]))
continue;
if(!player is_bot())
continue;
if(player.pers["team"] == toTeam)
continue;
if (toTeam == "allies")
player thread [[level.allies]]();
else if (toTeam == "axis")
player thread [[level.axis]]();
else
player thread [[level.spectator]]();
break;
}
}
}
}
else
{
playercount = level.players.size;
for(i = 0; i < playercount; i++)
{
player = level.players[i];
if(!isDefined(player.pers["team"]))
continue;
if(!player is_bot())
continue;
if(player.pers["team"] == "axis")
{
if(axis > teamAmount)
{
player thread [[level.allies]]();
break;
}
}
else
{
if(axis < teamAmount)
{
player thread [[level.axis]]();
break;
}
else if(player.pers["team"] != "allies")
{
player thread [[level.allies]]();
break;
}
}
}
}
}
}
/*
A server thread for monitoring all bot's in game. Will add and kick bots according to server settings.
*/
addBots()
{
level endon("game_ended");
bot_wait_for_host();
for(;;)
{
wait 1.5;
botsToAdd = GetDvarInt("bots_manage_add");
if(botsToAdd > 0)
{
SetDvar("bots_manage_add", 0);
if(botsToAdd > 64)
botsToAdd = 64;
for(; botsToAdd > 0; botsToAdd--)
{
level add_bot();
wait 0.25;
}
}
fillMode = getDVarInt("bots_manage_fill_mode");
if(fillMode == 2 || fillMode == 3)
setDvar("bots_manage_fill", getGoodMapAmount());
fillAmount = getDvarInt("bots_manage_fill");
players = 0;
bots = 0;
spec = 0;
playercount = level.players.size;
for(i = 0; i < playercount; i++)
{
player = level.players[i];
if(player is_bot())
bots++;
else if(!isDefined(player.pers["team"]) || (player.pers["team"] != "axis" && player.pers["team"] != "allies"))
spec++;
else
players++;
}
if (!randomInt(999))
{
setDvar("testclients_doreload", true);
wait 0.1;
setDvar("testclients_doreload", false);
doExtraCheck();
}
if(fillMode == 4)
{
axisplayers = 0;
alliesplayers = 0;
playercount = level.players.size;
for(i = 0; i < playercount; i++)
{
player = level.players[i];
if(player is_bot())
continue;
if(!isDefined(player.pers["team"]))
continue;
if(player.pers["team"] == "axis")
axisplayers++;
else if(player.pers["team"] == "allies")
alliesplayers++;
}
result = fillAmount - abs(axisplayers - alliesplayers) + bots;
if (players == 0)
{
if(bots < fillAmount)
result = fillAmount-1;
else if (bots > fillAmount)
result = fillAmount+1;
else
result = fillAmount;
}
bots = result;
}
amount = bots;
if(fillMode == 0 || fillMode == 2)
amount += players;
if(getDVarInt("bots_manage_fill_spec"))
amount += spec;
if(amount < fillAmount)
setDvar("bots_manage_add", 1);
else if(amount > fillAmount && getDvarInt("bots_manage_fill_kick"))
{
RemoveTestClient(); //cod4x
}
}
}
/*
A thread for ALL players, will monitor and grenades thrown.
*/
onGrenadeFire()
{
self endon("disconnect");
for(;;)
{
self waittill ( "grenade_fire", grenade, weaponName );
grenade.name = weaponName;
if(weaponName == "smoke_grenade_mp")
grenade thread AddToSmokeList();
}
}
/*
Adds a smoke grenade to the list of smokes in the game. Used to prevent bots from seeing through smoke.
*/
AddToSmokeList()
{
grenade = spawnstruct();
grenade.origin = self getOrigin();
grenade.state = "moving";
grenade.grenade = self;
grenade thread thinkSmoke();
level.bots_smokeList ListAdd(grenade);
}
/*
The smoke grenade logic.
*/
thinkSmoke()
{
while(isDefined(self.grenade))
{
self.origin = self.grenade getOrigin();
self.state = "moving";
wait 0.05;
}
self.state = "smoking";
wait 11.5;
level.bots_smokeList ListRemove(self);
}
/*
Watches for chopper. This is used to fix bots from targeting leaving or crashing helis because script is iw3 old and buggy.
*/
chopperWatch()
{
for(;;)
{
while(!isDefined(level.chopper))
wait 0.05;
chopper = level.chopper;
if (level.teamBased && getDvarInt("doubleHeli"))
{
chopper = level.chopper["allies"];
if (!isDefined(chopper))
chopper = level.chopper["axis"];
}
level.bot_chopper = true;
chopper watchChopper();
level.bot_chopper = false;
while(isDefined(level.chopper))
wait 0.05;
}
}
/*
Waits until the chopper is deleted, leaving or crashing.
*/
watchChopper()
{
self endon("death");
self endon("leaving");
self endon("crashing");
level waittill("helicopter gone");
}
/*
Waits when the axis uav is called in.
*/
onUAVAxisUpdate()
{
for(;;)
{
level waittill( "radar_timer_kill_axis" );
level thread doUAVUpdate("axis");
}
}
/*
Waits when the allies uav is called in.
*/
onUAVAlliesUpdate()
{
for(;;)
{
level waittill( "radar_timer_kill_allies" );
level thread doUAVUpdate("allies");
}
}
/*
Updates the player's radar so bots can know when they have a uav up, because iw3 script is old.
*/
doUAVUpdate(team)
{
level endon("radar_timer_kill_" + team);
playercount = level.players.size;
for(i = 0; i < playercount; i++)
{
player = level.players[i];
if(!isDefined(player.team))
continue;
if(player.team == team)
{
player.bot_radar = true;
}
}
wait level.radarViewTime;
playercount = level.players.size;
for(i = 0; i < playercount; i++)
{
player = level.players[i];
if(!isDefined(player.team))
continue;
if(player.team == team)
{
player.bot_radar = false;
}
}
}
/*
Fixes a weird iw3 bug when for a frame the player doesn't have any bones when they first spawn in.
*/
doPlayerModelFix()
{
self endon("disconnect");
self waittill("spawned_player");
wait 0.05;
self.bot_model_fix = true;
}
/*
A thread for ALL players when they fire.
*/
onWeaponFired()
{
self endon("disconnect");
self.bots_firing = false;
for(;;)
{
self waittill( "weapon_fired" );
self thread doFiringThread();
}
}
/*
Lets bot's know that the player is firing.
*/
doFiringThread()
{
self endon("disconnect");
self endon("weapon_fired");
self.bots_firing = true;
wait 1;
self.bots_firing = false;
}

View File

@ -0,0 +1,135 @@
/*
_bot_http
Author: INeedGames
Date: 12/16/2020
The HTTP module
*/
#include maps\mp\bots\_bot_utility;
/*
Will attempt to retreive waypoints from the internet
*/
getRemoteWaypoints(mapname)
{
url = "https://raw.githubusercontent.com/ineedbots/cod4x_waypoints/master/" + mapname + "_wp.csv";
filename = "waypoints/" + mapname + "_wp.csv";
printToConsole("Attempting to get remote waypoints from " + url);
res = getLinesFromUrl(url, filename);
if (!res.lines.size)
return;
waypointCount = int(res.lines[0]);
waypoints = [];
printToConsole("Loading remote waypoints...");
for (i = 1; i <= waypointCount; i++)
{
tokens = tokenizeLine(res.lines[i], ",");
waypoint = parseTokensIntoWaypoint(tokens);
waypoints[i-1] = waypoint;
}
if (waypoints.size)
{
level.waypoints = waypoints;
printToConsole("Loaded " + waypoints.size + " waypoints from remote.");
}
}
/*
Does the version check, if we are up too date
*/
doVersionCheck()
{
remoteVersion = getRemoteVersion();
if (!isDefined(remoteVersion))
{
printToConsole("Error getting remote version of Bot Warfare.");
return false;
}
if (level.bw_VERSION != remoteVersion)
{
printToConsole("There is a new version of Bot Warfare!");
printToConsole("You are on version " + level.bw_VERSION + " but " + remoteVersion + " is available!");
return false;
}
printToConsole("You are on the latest version of Bot Warfare!");
return true;
}
/*
Returns the version of bot warfare found on the internet
*/
getRemoteVersion()
{
#if isSyscallDefined HTTPS_GetString
data = HTTPS_GetString( "https://raw.githubusercontent.com/ineedbots/cod4x_waypoints/master/version.txt" );
#else
data = undefined;
#endif
if (!isDefined(data))
return undefined;
return strtok(data, "\n")[0];
}
/*
Returns an array of each line from the response of the http url request
*/
getLinesFromUrl(url, filename)
{
result = spawnStruct();
result.lines = [];
#if isSyscallDefined HTTPS_GetString
data = HTTPS_GetString( url );
#else
data = undefined;
#endif
if (!isDefined(data))
return result;
fd = FS_FOpen(filename, "write");
line = "";
for (i=0;i<data.size;i++)
{
c = data[i];
if (c == "\n")
{
result.lines[result.lines.size] = line;
if (fd > 0)
{
if (!FS_WriteLine(fd, line))
{
FS_FClose(fd);
fd = 0;
}
}
line = "";
continue;
}
line += c;
}
result.lines[result.lines.size] = line;
if (fd > 0)
FS_FClose(fd);
return result;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,649 @@
/*
_wp_editor
Author: INeedGames
Date: 09/26/2020
The ingame waypoint editor.
*/
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include maps\mp\bots\_bot_utility;
init()
{
if(getDvar("bots_main_debug") == "")
setDvar("bots_main_debug", 0);
if(!getDVarint("bots_main_debug"))
return;
if(!getDVarint("developer"))
{
setdvar("developer_script", 1);
setdvar("developer", 1);
setdvar("sv_mapRotation", "map "+getDvar("mapname"));
exitLevel(false);
}
setDvar("bots_main", 0);
setdvar("bots_main_menu", 0);
setdvar("bots_manage_fill_mode", 0);
setdvar("bots_manage_fill", 0);
setdvar("bots_manage_add", 0);
setdvar("bots_manage_fill_kick", 1);
setDvar("bots_manage_fill_spec", 1);
if (getDvar("bots_main_debug_distance") == "")
setDvar("bots_main_debug_distance", 512.0);
if (getDvar("bots_main_debug_cone") == "")
setDvar("bots_main_debug_cone", 0.65);
if (getDvar("bots_main_debug_minDist") == "")
setDvar("bots_main_debug_minDist", 32.0);
if (getDvar("bots_main_debug_drawThrough") == "")
setDvar("bots_main_debug_drawThrough", false);
if(getDvar("bots_main_debug_commandWait") == "")
setDvar("bots_main_debug_commandWait", 0.5);
if(getDvar("bots_main_debug_framerate") == "")
setDvar("bots_main_debug_framerate", 58);
if(getDvar("bots_main_debug_lineDuration") == "")
setDvar("bots_main_debug_lineDuration", 3);
if(getDvar("bots_main_debug_printDuration") == "")
setDvar("bots_main_debug_printDuration", 3);
if(getDvar("bots_main_debug_debugRate") == "")
setDvar("bots_main_debug_debugRate", 0.5);
setDvar("player_sustainAmmo", 1);
level.waypoints = [];
level.waypointCount = 0;
level waittill( "connected", player);
player thread onPlayerSpawned();
}
onPlayerSpawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
self thread beginDebug();
}
}
beginDebug()
{
self endon("disconnect");
self endon("death");
level.wpToLink = -1;
level.autoLink = false;
self.closest = -1;
self.command = undefined;
self clearPerks();
self takeAllWeapons();
self.specialty = [];
self giveWeapon("m16_gl_mp");
self SetActionSlot( 3, "altMode" );
self giveWeapon("frag_grenade_mp");
self freezecontrols(false);
self thread debug();
self thread addWaypoints();
self thread linkWaypoints();
self thread deleteWaypoints();
self thread watchSaveWaypointsCommand();
self thread sayExtras();
self thread textScroll("^1SecondaryOffhand - ^2Add Waypoint; ^3MeleeButton - ^4Link Waypoint; ^5FragButton - ^6Delete Waypoint; ^7UseButton + AttackButton - ^8Save");
}
sayExtras()
{
self endon("disconnect");
self endon("death");
self iprintln("Making a crouch waypoint with only one link...");
self iprintln("Makes a camping waypoint.");
}
debug()
{
self endon("disconnect");
self endon("death");
self setClientDvar("com_maxfps", getDvarInt("bots_main_debug_framerate"));
for(;;)
{
wait getDvarFloat("bots_main_debug_debugRate");
if(isDefined(self.command))
continue;
closest = -1;
myEye = self getTagOrigin( "j_head" );
myAngles = self GetPlayerAngles();
for(i = 0; i < level.waypointCount; i++)
{
if(closest == -1 || closer(self.origin, level.waypoints[i].origin, level.waypoints[closest].origin))
closest = i;
wpOrg = level.waypoints[i].origin + (0, 0, 25);
if(distance(level.waypoints[i].origin, self.origin) < getDvarFloat("bots_main_debug_distance") && (bulletTracePassed(myEye, wpOrg, false, self) || getDVarint("bots_main_debug_drawThrough")))
{
for(h = 0; h < level.waypoints[i].childCount; h++)
line(wpOrg, level.waypoints[level.waypoints[i].children[h]].origin + (0, 0, 25), (1,0,1), 1, 1, getDvarInt("bots_main_debug_lineDuration"));
if(getConeDot(wpOrg, myEye, myAngles) > getDvarFloat("bots_main_debug_cone"))
print3d(wpOrg, i, (1,0,0), 2, 1, 6);
if (isDefined(level.waypoints[i].angles) && level.waypoints[i].type != "stand")
line(wpOrg, wpOrg + AnglesToForward(level.waypoints[i].angles) * 64, (1,1,1), 1, 1, getDvarInt("bots_main_debug_lineDuration"));
}
}
self.closest = closest;
if(closest != -1)
{
stringChildren = "";
for(i = 0; i < level.waypoints[closest].childCount; i++)
{
if(i != 0)
stringChildren = stringChildren + "," + level.waypoints[closest].children[i];
else
stringChildren = stringChildren + level.waypoints[closest].children[i];
}
print3d(level.waypoints[closest].origin + (0, 0, 35), stringChildren, (0,1,0), 2, 1, getDvarInt("bots_main_debug_printDuration"));
print3d(level.waypoints[closest].origin + (0, 0, 15), level.waypoints[closest].type, (0,1,0), 2, 1, getDvarInt("bots_main_debug_printDuration"));
}
}
}
AddWaypoints()
{
self endon("disconnect");
self endon("death");
for(;;)
{
while(!self SecondaryOffhandButtonPressed() || isDefined(self.command))
wait 0.05;
pos = self getOrigin();
self.command = true;
self iprintln("Adding a waypoint...");
self iprintln("ADS - climb; Attack + Use - tube");
self iprintln("Attack - grenade; Use - claymore");
self iprintln("Else(wait) - your stance");
wait getDvarFloat("bots_main_debug_commandWait");
self addWaypoint(pos);
self.command = undefined;
while(self SecondaryOffhandButtonPressed())
wait 0.05;
}
}
linkWaypoints()
{
self endon("disconnect");
self endon("death");
for(;;)
{
while(!self MeleeButtonPressed() || isDefined(self.command))
wait 0.05;
self.command = true;
self iprintln("ADS - Unlink; Else(wait) - Link");
wait getDvarFloat("bots_main_debug_commandWait");
if(!self adsButtonPressed())
self LinkWaypoint(self.closest);
else
self UnLinkWaypoint(self.closest);
self.command = undefined;
while(self MeleeButtonPressed())
wait 0.05;
}
}
deleteWaypoints()
{
self endon("disconnect");
self endon("death");
for(;;)
{
while(!self fragButtonPressed() || isDefined(self.command))
wait 0.05;
self.command = true;
self iprintln("Attack - DeleteAll; ADS - Load");
self iprintln("Else(wait) - Delete");
wait getDvarFloat("bots_main_debug_commandWait");
if(self attackButtonPressed())
self deleteAllWaypoints();
else if(self adsButtonPressed())
self LoadWaypoints();
else
self DeleteWaypoint(self.closest);
self.command = undefined;
while(self fragButtonPressed())
wait 0.05;
}
}
watchSaveWaypointsCommand()
{
self endon("death");
self endon("disconnect");
for(;;)
{
while(!self useButtonPressed() || !self attackButtonPressed() || isDefined(self.command))
wait 0.05;
self.command = true;
self iprintln("ADS - Autolink; Else(wait) - Save");
wait getDvarFloat("bots_main_debug_commandWait");
if(!self adsButtonPressed())
{
self checkForWarnings();
wait 1;
logprint("***********ABiliTy's WPDump**************\n\n");
logprint("\n\n\n\n");
mpnm=getMapName(getdvar("mapname"));
logprint("\n\n"+mpnm+"()\n{\n/*");
logprint("*/waypoints = [];\n/*");
for(i = 0; i < level.waypointCount; i++)
{
logprint("*/waypoints["+i+"] = spawnstruct();\n/*");
logprint("*/waypoints["+i+"].origin = "+level.waypoints[i].origin+";\n/*");
logprint("*/waypoints["+i+"].type = \""+level.waypoints[i].type+"\";\n/*");
logprint("*/waypoints["+i+"].childCount = "+level.waypoints[i].childCount+";\n/*");
for(c = 0; c < level.waypoints[i].childCount; c++)
{
logprint("*/waypoints["+i+"].children["+c+"] = "+level.waypoints[i].children[c]+";\n/*");
}
if(isDefined(level.waypoints[i].angles) && (level.waypoints[i].type == "claymore" || level.waypoints[i].type == "tube" || (level.waypoints[i].type == "crouch" && level.waypoints[i].childCount == 1) || level.waypoints[i].type == "climb" || level.waypoints[i].type == "grenade"))
logprint("*/waypoints["+i+"].angles = "+level.waypoints[i].angles+";\n/*");
}
logprint("*/return waypoints;\n}\n\n\n\n");
filename = "waypoints/" + getdvar("mapname") + "_wp.csv";
fd = FS_FOpen(filename, "write");
PrintLn("********* Start Bot Warfare WPDump *********");
PrintLn(level.waypointCount);
if (fd > 0)
{
if (!FS_WriteLine(fd, level.waypointCount+""))
{
FS_FClose(fd);
fd = 0;
}
}
for(i = 0; i < level.waypointCount; i++)
{
str = "";
wp = level.waypoints[i];
str += wp.origin[0] + " " + wp.origin[1] + " " + wp.origin[2] + ",";
for(h = 0; h < wp.childCount; h++)
{
str += wp.children[h];
if (h < wp.childCount - 1)
str += " ";
}
str += "," + wp.type + ",";
if (isDefined(wp.angles))
str += wp.angles[0] + " " + wp.angles[1] + " " + wp.angles[2] + ",";
else
str += ",";
str += ",";
PrintLn(str);
if (fd > 0)
{
if (!FS_WriteLine(fd, str))
{
FS_FClose(fd);
fd = 0;
}
}
}
PrintLn("\n\n\n\n\n\n");
self iprintln("Saved!!! to " + filename);
if (fd > 0)
FS_FClose(fd);
}
else
{
if(level.autoLink)
{
self iPrintlnBold("Auto link disabled");
level.autoLink = false;
level.wpToLink = -1;
}
else
{
self iPrintlnBold("Auto link enabled");
level.autoLink = true;
level.wpToLink = self.closest;
}
}
self.command = undefined;
while(self useButtonPressed() && self attackButtonPressed())
wait 0.05;
}
}
LoadWaypoints()
{
self DeleteAllWaypoints();
self iPrintlnBold("Loading WPS...");
load_waypoints();
wait 1;
self checkForWarnings();
}
checkForWarnings()
{
if(level.waypointCount <= 0)
self iprintln("WARNING: waypointCount is "+level.waypointCount);
if(level.waypointCount != level.waypoints.size)
self iprintln("WARNING: waypointCount is not "+level.waypoints.size);
for(i = 0; i < level.waypointCount; i++)
{
if(!isDefined(level.waypoints[i]))
{
self iprintln("WARNING: waypoint "+i+" is undefined");
continue;
}
if(level.waypoints[i].childCount <= 0)
self iprintln("WARNING: waypoint "+i+" childCount is "+level.waypoints[i].childCount);
else
{
if (!isDefined(level.waypoints[i].children) || !isDefined(level.waypoints[i].children.size))
{
self iprintln("WARNING: waypoint "+i+" children is not defined");
}
else
{
if(level.waypoints[i].childCount != level.waypoints[i].children.size)
self iprintln("WARNING: waypoint "+i+" childCount is not "+level.waypoints[i].children.size);
for (h = 0; h < level.waypoints[i].childCount; h++)
{
child = level.waypoints[i].children[h];
if(!isDefined(level.waypoints[child]))
self iprintln("WARNING: waypoint "+i+" child "+child+" is undefined");
else if(child == i)
self iprintln("WARNING: waypoint "+i+" child "+child+" is itself");
}
}
}
if(!isDefined(level.waypoints[i].type))
{
self iprintln("WARNING: waypoint "+i+" type is undefined");
continue;
}
if(!isDefined(level.waypoints[i].angles) && (level.waypoints[i].type == "claymore" || level.waypoints[i].type == "tube" || (level.waypoints[i].type == "crouch" && level.waypoints[i].childCount == 1) || level.waypoints[i].type == "climb" || level.waypoints[i].type == "grenade"))
self iprintln("WARNING: waypoint "+i+" angles is undefined");
}
}
DeleteAllWaypoints()
{
level.waypoints = [];
level.waypointCount = 0;
level.waypointsKDTree = WaypointsToKDTree();
level.waypointsCamp = [];
level.waypointsTube = [];
level.waypointsGren = [];
level.waypointsClay = [];
self iprintln("DelAllWps");
}
DeleteWaypoint(nwp)
{
if(nwp == -1 || distance(self.origin, level.waypoints[nwp].origin) > getDvarFloat("bots_main_debug_minDist"))
{
self iprintln("No close enough waypoint to delete.");
return;
}
level.wpToLink = -1;
for(i = 0; i < level.waypoints[nwp].childCount; i++)
{
child = level.waypoints[nwp].children[i];
level.waypoints[child].children = array_remove(level.waypoints[child].children, nwp);
level.waypoints[child].childCount = level.waypoints[child].children.size;
}
for(i = 0; i < level.waypointCount; i++)
{
for(h = 0; h < level.waypoints[i].childCount; h++)
{
if(level.waypoints[i].children[h] > nwp)
level.waypoints[i].children[h]--;
}
}
for ( entry = 0; entry < level.waypointCount; entry++ )
{
if ( entry == nwp )
{
while ( entry < level.waypointCount-1 )
{
level.waypoints[entry] = level.waypoints[entry+1];
entry++;
}
level.waypoints[entry] = undefined;
break;
}
}
level.waypointCount--;
self iprintln("DelWp "+nwp);
}
addWaypoint(pos)
{
level.waypoints[level.waypointCount] = spawnstruct();
level.waypoints[level.waypointCount].origin = pos;
if(self AdsButtonPressed())
level.waypoints[level.waypointCount].type = "climb";
else if(self AttackButtonPressed() && self UseButtonPressed())
level.waypoints[level.waypointCount].type = "tube";
else if(self AttackButtonPressed())
level.waypoints[level.waypointCount].type = "grenade";
else if(self UseButtonPressed())
level.waypoints[level.waypointCount].type = "claymore";
else
level.waypoints[level.waypointCount].type = self getStance();
level.waypoints[level.waypointCount].angles = self getPlayerAngles();
level.waypoints[level.waypointCount].children = [];
level.waypoints[level.waypointCount].childCount = 0;
self iprintln(level.waypoints[level.waypointCount].type + " Waypoint "+ level.waypointCount +" Added at "+pos);
if(level.autoLink)
{
if(level.wpToLink == -1)
level.wpToLink = level.waypointCount - 1;
level.waypointCount++;
self LinkWaypoint(level.waypointCount - 1);
}
else
{
level.waypointCount++;
}
}
UnLinkWaypoint(nwp)
{
if(nwp == -1 || distance(self.origin, level.waypoints[nwp].origin) > getDvarFloat("bots_main_debug_minDist"))
{
self iprintln("Waypoint Unlink Cancelled "+level.wpToLink);
level.wpToLink = -1;
return;
}
if(level.wpToLink == -1 || nwp == level.wpToLink)
{
level.wpToLink = nwp;
self iprintln("Waypoint Unlink Started "+nwp);
return;
}
level.waypoints[nwp].children = array_remove(level.waypoints[nwp].children, level.wpToLink);
level.waypoints[level.wpToLink].children = array_remove(level.waypoints[level.wpToLink].children, nwp);
level.waypoints[nwp].childCount = level.waypoints[nwp].children.size;
level.waypoints[level.wpToLink].childCount = level.waypoints[level.wpToLink].children.size;
self iprintln("Waypoint " + nwp + " Broken to " + level.wpToLink);
level.wpToLink = -1;
}
LinkWaypoint(nwp)
{
if(nwp == -1 || distance(self.origin, level.waypoints[nwp].origin) > getDvarFloat("bots_main_debug_minDist"))
{
self iprintln("Waypoint Link Cancelled "+level.wpToLink);
level.wpToLink = -1;
return;
}
if(level.wpToLink == -1 || nwp == level.wpToLink)
{
level.wpToLink = nwp;
self iprintln("Waypoint Link Started "+nwp);
return;
}
weGood = true;
for(i = 0; i < level.waypoints[level.wpToLink].childCount; i++)
{
if(level.waypoints[level.wpToLink].children[i] == nwp)
{
weGood = false;
break;
}
}
if(weGood)
{
for(i = 0; i < level.waypoints[nwp].childCount; i++)
{
if(level.waypoints[nwp].children[i] == level.wpToLink)
{
weGood = false;
break;
}
}
}
if (!weGood )
{
self iprintln("Waypoint Link Cancelled "+nwp+" and "+level.wpToLink+" already linked.");
level.wpToLink = -1;
return;
}
level.waypoints[level.wpToLink].children[level.waypoints[level.wpToLink].childcount] = nwp;
level.waypoints[level.wpToLink].childcount++;
level.waypoints[nwp].children[level.waypoints[nwp].childcount] = level.wpToLink;
level.waypoints[nwp].childcount++;
self iprintln("Waypoint " + nwp + " Linked to " + level.wpToLink);
level.wpToLink = -1;
}
destroyOnDeath(hud)
{
hud endon("death");
self waittill_either("death","disconnect");
hud destroy();
}
textScroll(string)
{
self endon("death");
self endon("disconnect");
//thanks ActionScript
back = createBar((0,0,0), 1000, 30);
back setPoint("CENTER", undefined, 0, 220);
self thread destroyOnDeath(back);
text = createFontString("default", 1.5);
text setText(string);
self thread destroyOnDeath(text);
for (;;)
{
text setPoint("CENTER", undefined, 1200, 220);
text setPoint("CENTER", undefined, -1200, 220, 20);
wait 20;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,845 @@
Killhouse()
{
waypoints = [];
waypoints[0] = spawnstruct();
waypoints[0].origin = (1181.56,148.431,28.125);
waypoints[0].type = "stand";
waypoints[0].childCount = 2;
waypoints[0].children[0] = 1;
waypoints[0].children[1] = 11;
waypoints[1] = spawnstruct();
waypoints[1].origin = (1094.79,153.256,80.125);
waypoints[1].type = "stand";
waypoints[1].childCount = 2;
waypoints[1].children[0] = 0;
waypoints[1].children[1] = 2;
waypoints[2] = spawnstruct();
waypoints[2].origin = (488.403,150.541,80.125);
waypoints[2].type = "stand";
waypoints[2].childCount = 2;
waypoints[2].children[0] = 1;
waypoints[2].children[1] = 3;
waypoints[3] = spawnstruct();
waypoints[3].origin = (391.899,153.36,28.125);
waypoints[3].type = "stand";
waypoints[3].childCount = 3;
waypoints[3].children[0] = 2;
waypoints[3].children[1] = 4;
waypoints[3].children[2] = 5;
waypoints[4] = spawnstruct();
waypoints[4].origin = (401.059,239.669,28.125);
waypoints[4].type = "stand";
waypoints[4].childCount = 6;
waypoints[4].children[0] = 3;
waypoints[4].children[1] = 5;
waypoints[4].children[2] = 13;
waypoints[4].children[3] = 6;
waypoints[4].children[4] = 8;
waypoints[4].children[5] = 86;
waypoints[5] = spawnstruct();
waypoints[5].origin = (124.215,210.283,28.125);
waypoints[5].type = "stand";
waypoints[5].childCount = 4;
waypoints[5].children[0] = 4;
waypoints[5].children[1] = 6;
waypoints[5].children[2] = 3;
waypoints[5].children[3] = 86;
waypoints[6] = spawnstruct();
waypoints[6].origin = (412.98,445.891,28.125);
waypoints[6].type = "stand";
waypoints[6].childCount = 8;
waypoints[6].children[0] = 7;
waypoints[6].children[1] = 4;
waypoints[6].children[2] = 5;
waypoints[6].children[3] = 13;
waypoints[6].children[4] = 68;
waypoints[6].children[5] = 67;
waypoints[6].children[6] = 69;
waypoints[6].children[7] = 86;
waypoints[7] = spawnstruct();
waypoints[7].origin = (546.57,448.066,28.125);
waypoints[7].type = "stand";
waypoints[7].childCount = 4;
waypoints[7].children[0] = 6;
waypoints[7].children[1] = 8;
waypoints[7].children[2] = 13;
waypoints[7].children[3] = 67;
waypoints[8] = spawnstruct();
waypoints[8].origin = (686.556,444.51,28.125);
waypoints[8].type = "stand";
waypoints[8].childCount = 5;
waypoints[8].children[0] = 7;
waypoints[8].children[1] = 9;
waypoints[8].children[2] = 13;
waypoints[8].children[3] = 14;
waypoints[8].children[4] = 4;
waypoints[9] = spawnstruct();
waypoints[9].origin = (836.351,440.111,28.125);
waypoints[9].type = "stand";
waypoints[9].childCount = 4;
waypoints[9].children[0] = 8;
waypoints[9].children[1] = 10;
waypoints[9].children[2] = 12;
waypoints[9].children[3] = 18;
waypoints[10] = spawnstruct();
waypoints[10].origin = (948.997,437.246,28.125);
waypoints[10].type = "stand";
waypoints[10].childCount = 6;
waypoints[10].children[0] = 9;
waypoints[10].children[1] = 12;
waypoints[10].children[2] = 11;
waypoints[10].children[3] = 18;
waypoints[10].children[4] = 24;
waypoints[10].children[5] = 88;
waypoints[11] = spawnstruct();
waypoints[11].origin = (1159.55,316.005,28.125);
waypoints[11].type = "stand";
waypoints[11].childCount = 4;
waypoints[11].children[0] = 0;
waypoints[11].children[1] = 12;
waypoints[11].children[2] = 10;
waypoints[11].children[3] = 88;
waypoints[12] = spawnstruct();
waypoints[12].origin = (890.993,266.089,28.125);
waypoints[12].type = "stand";
waypoints[12].childCount = 4;
waypoints[12].children[0] = 11;
waypoints[12].children[1] = 13;
waypoints[12].children[2] = 10;
waypoints[12].children[3] = 9;
waypoints[13] = spawnstruct();
waypoints[13].origin = (580.602,251.012,28.125);
waypoints[13].type = "stand";
waypoints[13].childCount = 5;
waypoints[13].children[0] = 4;
waypoints[13].children[1] = 12;
waypoints[13].children[2] = 7;
waypoints[13].children[3] = 6;
waypoints[13].children[4] = 8;
waypoints[14] = spawnstruct();
waypoints[14].origin = (724.843,589.895,28.125);
waypoints[14].type = "stand";
waypoints[14].childCount = 4;
waypoints[14].children[0] = 8;
waypoints[14].children[1] = 15;
waypoints[14].children[2] = 16;
waypoints[14].children[3] = 89;
waypoints[15] = spawnstruct();
waypoints[15].origin = (689.658,738.037,60.125);
waypoints[15].type = "stand";
waypoints[15].childCount = 2;
waypoints[15].children[0] = 14;
waypoints[15].children[1] = 17;
waypoints[16] = spawnstruct();
waypoints[16].origin = (782.19,740.27,60.125);
waypoints[16].type = "stand";
waypoints[16].childCount = 2;
waypoints[16].children[0] = 14;
waypoints[16].children[1] = 17;
waypoints[17] = spawnstruct();
waypoints[17].origin = (738.365,860.821,28.125);
waypoints[17].type = "stand";
waypoints[17].childCount = 4;
waypoints[17].children[0] = 16;
waypoints[17].children[1] = 15;
waypoints[17].children[2] = 25;
waypoints[17].children[3] = 66;
waypoints[18] = spawnstruct();
waypoints[18].origin = (892.884,503.932,50.125);
waypoints[18].type = "stand";
waypoints[18].childCount = 3;
waypoints[18].children[0] = 9;
waypoints[18].children[1] = 10;
waypoints[18].children[2] = 19;
waypoints[19] = spawnstruct();
waypoints[19].origin = (889.55,614.586,156.125);
waypoints[19].type = "stand";
waypoints[19].childCount = 2;
waypoints[19].children[0] = 18;
waypoints[19].children[1] = 20;
waypoints[20] = spawnstruct();
waypoints[20].origin = (821.734,700.728,156.125);
waypoints[20].type = "stand";
waypoints[20].childCount = 3;
waypoints[20].children[0] = 19;
waypoints[20].children[1] = 21;
waypoints[20].children[2] = 23;
waypoints[21] = spawnstruct();
waypoints[21].origin = (704.143,709.897,156.125);
waypoints[21].type = "stand";
waypoints[21].childCount = 2;
waypoints[21].children[0] = 20;
waypoints[21].children[1] = 22;
waypoints[22] = spawnstruct();
waypoints[22].origin = (660.627,556.142,156.125);
waypoints[22].type = "stand";
waypoints[22].childCount = 2;
waypoints[22].children[0] = 21;
waypoints[22].children[1] = 23;
waypoints[23] = spawnstruct();
waypoints[23].origin = (757.048,539.674,156.125);
waypoints[23].type = "stand";
waypoints[23].childCount = 2;
waypoints[23].children[0] = 22;
waypoints[23].children[1] = 20;
waypoints[24] = spawnstruct();
waypoints[24].origin = (1004.58,582.486,28.125);
waypoints[24].type = "stand";
waypoints[24].childCount = 4;
waypoints[24].children[0] = 10;
waypoints[24].children[1] = 25;
waypoints[24].children[2] = 101;
waypoints[24].children[3] = 103;
waypoints[25] = spawnstruct();
waypoints[25].origin = (1029.19,824.597,28.125);
waypoints[25].type = "stand";
waypoints[25].childCount = 5;
waypoints[25].children[0] = 17;
waypoints[25].children[1] = 26;
waypoints[25].children[2] = 27;
waypoints[25].children[3] = 24;
waypoints[25].children[4] = 103;
waypoints[26] = spawnstruct();
waypoints[26].origin = (952.182,1052.15,28.125);
waypoints[26].type = "stand";
waypoints[26].childCount = 5;
waypoints[26].children[0] = 25;
waypoints[26].children[1] = 27;
waypoints[26].children[2] = 28;
waypoints[26].children[3] = 29;
waypoints[26].children[4] = 73;
waypoints[27] = spawnstruct();
waypoints[27].origin = (1092.87,982.674,28.125);
waypoints[27].type = "stand";
waypoints[27].childCount = 5;
waypoints[27].children[0] = 25;
waypoints[27].children[1] = 26;
waypoints[27].children[2] = 28;
waypoints[27].children[3] = 90;
waypoints[27].children[4] = 103;
waypoints[28] = spawnstruct();
waypoints[28].origin = (1215.84,1133.62,28.125);
waypoints[28].type = "stand";
waypoints[28].childCount = 4;
waypoints[28].children[0] = 27;
waypoints[28].children[1] = 26;
waypoints[28].children[2] = 33;
waypoints[28].children[3] = 90;
waypoints[29] = spawnstruct();
waypoints[29].origin = (808.471,1142.11,28.125);
waypoints[29].type = "stand";
waypoints[29].childCount = 4;
waypoints[29].children[0] = 26;
waypoints[29].children[1] = 30;
waypoints[29].children[2] = 65;
waypoints[29].children[3] = 66;
waypoints[30] = spawnstruct();
waypoints[30].origin = (953.341,1289.21,28.125);
waypoints[30].type = "stand";
waypoints[30].childCount = 5;
waypoints[30].children[0] = 29;
waypoints[30].children[1] = 31;
waypoints[30].children[2] = 34;
waypoints[30].children[3] = 63;
waypoints[30].children[4] = 64;
waypoints[31] = spawnstruct();
waypoints[31].origin = (929.05,1665.76,28.125);
waypoints[31].type = "stand";
waypoints[31].childCount = 4;
waypoints[31].children[0] = 30;
waypoints[31].children[1] = 32;
waypoints[31].children[2] = 62;
waypoints[31].children[3] = 63;
waypoints[32] = spawnstruct();
waypoints[32].origin = (1029.84,1676.12,60.125);
waypoints[32].type = "stand";
waypoints[32].childCount = 2;
waypoints[32].children[0] = 31;
waypoints[32].children[1] = 84;
waypoints[33] = spawnstruct();
waypoints[33].origin = (1149.13,1318.31,28.125);
waypoints[33].type = "stand";
waypoints[33].childCount = 4;
waypoints[33].children[0] = 34;
waypoints[33].children[1] = 28;
waypoints[33].children[2] = 91;
waypoints[33].children[3] = 92;
waypoints[34] = spawnstruct();
waypoints[34].origin = (1044.88,1301.19,60.125);
waypoints[34].type = "stand";
waypoints[34].childCount = 2;
waypoints[34].children[0] = 33;
waypoints[34].children[1] = 30;
waypoints[35] = spawnstruct();
waypoints[35].origin = (1227.16,1921.76,28.125);
waypoints[35].type = "stand";
waypoints[35].childCount = 6;
waypoints[35].children[0] = 39;
waypoints[35].children[1] = 38;
waypoints[35].children[2] = 62;
waypoints[35].children[3] = 84;
waypoints[35].children[4] = 93;
waypoints[35].children[5] = 94;
waypoints[36] = spawnstruct();
waypoints[36].origin = (981.053,2281.89,28.125);
waypoints[36].type = "stand";
waypoints[36].childCount = 4;
waypoints[36].children[0] = 37;
waypoints[36].children[1] = 40;
waypoints[36].children[2] = 41;
waypoints[36].children[3] = 42;
waypoints[37] = spawnstruct();
waypoints[37].origin = (928.878,2123.83,60.125);
waypoints[37].type = "stand";
waypoints[37].childCount = 3;
waypoints[37].children[0] = 36;
waypoints[37].children[1] = 38;
waypoints[37].children[2] = 42;
waypoints[38] = spawnstruct();
waypoints[38].origin = (939.541,1963.59,28.125);
waypoints[38].type = "stand";
waypoints[38].childCount = 5;
waypoints[38].children[0] = 39;
waypoints[38].children[1] = 35;
waypoints[38].children[2] = 37;
waypoints[38].children[3] = 59;
waypoints[38].children[4] = 62;
waypoints[39] = spawnstruct();
waypoints[39].origin = (1076.47,2020.68,28.125);
waypoints[39].type = "stand";
waypoints[39].childCount = 3;
waypoints[39].children[0] = 35;
waypoints[39].children[1] = 38;
waypoints[39].children[2] = 40;
waypoints[40] = spawnstruct();
waypoints[40].origin = (1120.26,2201.66,28.125);
waypoints[40].type = "stand";
waypoints[40].childCount = 3;
waypoints[40].children[0] = 39;
waypoints[40].children[1] = 36;
waypoints[40].children[2] = 41;
waypoints[41] = spawnstruct();
waypoints[41].origin = (1186.71,2334.35,28.125);
waypoints[41].type = "stand";
waypoints[41].childCount = 4;
waypoints[41].children[0] = 40;
waypoints[41].children[1] = 36;
waypoints[41].children[2] = 42;
waypoints[41].children[3] = 96;
waypoints[42] = spawnstruct();
waypoints[42].origin = (794.13,2412.11,28.125);
waypoints[42].type = "stand";
waypoints[42].childCount = 9;
waypoints[42].children[0] = 36;
waypoints[42].children[1] = 37;
waypoints[42].children[2] = 41;
waypoints[42].children[3] = 43;
waypoints[42].children[4] = 45;
waypoints[42].children[5] = 44;
waypoints[42].children[6] = 46;
waypoints[42].children[7] = 47;
waypoints[42].children[8] = 48;
waypoints[43] = spawnstruct();
waypoints[43].origin = (1168.55,2471.78,28.125);
waypoints[43].type = "stand";
waypoints[43].childCount = 3;
waypoints[43].children[0] = 42;
waypoints[43].children[1] = 44;
waypoints[43].children[2] = 45;
waypoints[44] = spawnstruct();
waypoints[44].origin = (1188.65,2574.37,28.125);
waypoints[44].type = "stand";
waypoints[44].childCount = 3;
waypoints[44].children[0] = 43;
waypoints[44].children[1] = 45;
waypoints[44].children[2] = 42;
waypoints[45] = spawnstruct();
waypoints[45].origin = (871.363,2570.3,28.125);
waypoints[45].type = "stand";
waypoints[45].childCount = 4;
waypoints[45].children[0] = 44;
waypoints[45].children[1] = 42;
waypoints[45].children[2] = 43;
waypoints[45].children[3] = 48;
waypoints[46] = spawnstruct();
waypoints[46].origin = (710.182,2313.92,28.125);
waypoints[46].type = "stand";
waypoints[46].childCount = 4;
waypoints[46].children[0] = 42;
waypoints[46].children[1] = 47;
waypoints[46].children[2] = 60;
waypoints[46].children[3] = 61;
waypoints[47] = spawnstruct();
waypoints[47].origin = (639.393,2390.73,28.125);
waypoints[47].type = "stand";
waypoints[47].childCount = 5;
waypoints[47].children[0] = 46;
waypoints[47].children[1] = 42;
waypoints[47].children[2] = 48;
waypoints[47].children[3] = 49;
waypoints[47].children[4] = 50;
waypoints[48] = spawnstruct();
waypoints[48].origin = (604.445,2550.02,28.125);
waypoints[48].type = "stand";
waypoints[48].childCount = 5;
waypoints[48].children[0] = 45;
waypoints[48].children[1] = 47;
waypoints[48].children[2] = 42;
waypoints[48].children[3] = 50;
waypoints[48].children[4] = 51;
waypoints[49] = spawnstruct();
waypoints[49].origin = (553.371,2318.72,50.125);
waypoints[49].type = "stand";
waypoints[49].childCount = 3;
waypoints[49].children[0] = 47;
waypoints[49].children[1] = 50;
waypoints[49].children[2] = 106;
waypoints[50] = spawnstruct();
waypoints[50].origin = (456.722,2430.49,28.125);
waypoints[50].type = "stand";
waypoints[50].childCount = 8;
waypoints[50].children[0] = 49;
waypoints[50].children[1] = 48;
waypoints[50].children[2] = 47;
waypoints[50].children[3] = 51;
waypoints[50].children[4] = 52;
waypoints[50].children[5] = 54;
waypoints[50].children[6] = 53;
waypoints[50].children[7] = 97;
waypoints[51] = spawnstruct();
waypoints[51].origin = (259.984,2581.73,28.125);
waypoints[51].type = "stand";
waypoints[51].childCount = 3;
waypoints[51].children[0] = 48;
waypoints[51].children[1] = 50;
waypoints[51].children[2] = 98;
waypoints[52] = spawnstruct();
waypoints[52].origin = (394.979,2269.04,28.125);
waypoints[52].type = "stand";
waypoints[52].childCount = 3;
waypoints[52].children[0] = 50;
waypoints[52].children[1] = 57;
waypoints[52].children[2] = 53;
waypoints[53] = spawnstruct();
waypoints[53].origin = (291.176,2246.97,28.125);
waypoints[53].type = "stand";
waypoints[53].childCount = 5;
waypoints[53].children[0] = 50;
waypoints[53].children[1] = 55;
waypoints[53].children[2] = 52;
waypoints[53].children[3] = 54;
waypoints[53].children[4] = 85;
waypoints[54] = spawnstruct();
waypoints[54].origin = (98.4385,2222.46,28.125);
waypoints[54].type = "stand";
waypoints[54].childCount = 4;
waypoints[54].children[0] = 50;
waypoints[54].children[1] = 53;
waypoints[54].children[2] = 58;
waypoints[54].children[3] = 85;
waypoints[55] = spawnstruct();
waypoints[55].origin = (218.456,2011.41,28.125);
waypoints[55].type = "stand";
waypoints[55].childCount = 4;
waypoints[55].children[0] = 53;
waypoints[55].children[1] = 56;
waypoints[55].children[2] = 81;
waypoints[55].children[3] = 105;
waypoints[56] = spawnstruct();
waypoints[56].origin = (361.233,1982.66,28.125);
waypoints[56].type = "stand";
waypoints[56].childCount = 4;
waypoints[56].children[0] = 55;
waypoints[56].children[1] = 57;
waypoints[56].children[2] = 59;
waypoints[56].children[3] = 81;
waypoints[57] = spawnstruct();
waypoints[57].origin = (375.537,2073.62,60.125);
waypoints[57].type = "stand";
waypoints[57].childCount = 2;
waypoints[57].children[0] = 56;
waypoints[57].children[1] = 52;
waypoints[58] = spawnstruct();
waypoints[58].origin = (74.3311,2083.72,60.125);
waypoints[58].type = "stand";
waypoints[58].childCount = 2;
waypoints[58].children[0] = 54;
waypoints[58].children[1] = 105;
waypoints[59] = spawnstruct();
waypoints[59].origin = (662.975,1986.09,28.125);
waypoints[59].type = "stand";
waypoints[59].childCount = 6;
waypoints[59].children[0] = 56;
waypoints[59].children[1] = 38;
waypoints[59].children[2] = 60;
waypoints[59].children[3] = 61;
waypoints[59].children[4] = 62;
waypoints[59].children[5] = 81;
waypoints[60] = spawnstruct();
waypoints[60].origin = (635.091,2077.18,60.125);
waypoints[60].type = "stand";
waypoints[60].childCount = 2;
waypoints[60].children[0] = 59;
waypoints[60].children[1] = 46;
waypoints[61] = spawnstruct();
waypoints[61].origin = (722.706,2098.12,60.125);
waypoints[61].type = "stand";
waypoints[61].childCount = 2;
waypoints[61].children[0] = 46;
waypoints[61].children[1] = 59;
waypoints[62] = spawnstruct();
waypoints[62].origin = (846.771,1809.78,28.125);
waypoints[62].type = "stand";
waypoints[62].childCount = 5;
waypoints[62].children[0] = 38;
waypoints[62].children[1] = 59;
waypoints[62].children[2] = 31;
waypoints[62].children[3] = 35;
waypoints[62].children[4] = 63;
waypoints[63] = spawnstruct();
waypoints[63].origin = (761.789,1610.09,28.125);
waypoints[63].type = "stand";
waypoints[63].childCount = 5;
waypoints[63].children[0] = 62;
waypoints[63].children[1] = 31;
waypoints[63].children[2] = 30;
waypoints[63].children[3] = 64;
waypoints[63].children[4] = 80;
waypoints[64] = spawnstruct();
waypoints[64].origin = (749.754,1459.28,28.125);
waypoints[64].type = "stand";
waypoints[64].childCount = 6;
waypoints[64].children[0] = 63;
waypoints[64].children[1] = 65;
waypoints[64].children[2] = 78;
waypoints[64].children[3] = 80;
waypoints[64].children[4] = 30;
waypoints[64].children[5] = 109;
waypoints[65] = spawnstruct();
waypoints[65].origin = (691.641,1208.28,28.125);
waypoints[65].type = "stand";
waypoints[65].childCount = 5;
waypoints[65].children[0] = 64;
waypoints[65].children[1] = 29;
waypoints[65].children[2] = 66;
waypoints[65].children[3] = 78;
waypoints[65].children[4] = 73;
waypoints[66] = spawnstruct();
waypoints[66].origin = (650.532,877.419,28.125);
waypoints[66].type = "stand";
waypoints[66].childCount = 5;
waypoints[66].children[0] = 65;
waypoints[66].children[1] = 17;
waypoints[66].children[2] = 67;
waypoints[66].children[3] = 29;
waypoints[66].children[4] = 78;
waypoints[67] = spawnstruct();
waypoints[67].origin = (544.701,793.649,28.125);
waypoints[67].type = "stand";
waypoints[67].childCount = 6;
waypoints[67].children[0] = 66;
waypoints[67].children[1] = 7;
waypoints[67].children[2] = 6;
waypoints[67].children[3] = 68;
waypoints[67].children[4] = 72;
waypoints[67].children[5] = 73;
waypoints[68] = spawnstruct();
waypoints[68].origin = (335.603,653.458,28.125);
waypoints[68].type = "stand";
waypoints[68].childCount = 4;
waypoints[68].children[0] = 6;
waypoints[68].children[1] = 67;
waypoints[68].children[2] = 69;
waypoints[68].children[3] = 70;
waypoints[69] = spawnstruct();
waypoints[69].origin = (144.44,561.733,28.125);
waypoints[69].type = "stand";
waypoints[69].childCount = 3;
waypoints[69].children[0] = 68;
waypoints[69].children[1] = 70;
waypoints[69].children[2] = 6;
waypoints[70] = spawnstruct();
waypoints[70].origin = (232.662,709.075,28.125);
waypoints[70].type = "stand";
waypoints[70].childCount = 3;
waypoints[70].children[0] = 69;
waypoints[70].children[1] = 68;
waypoints[70].children[2] = 71;
waypoints[71] = spawnstruct();
waypoints[71].origin = (234.977,764.208,60.125);
waypoints[71].type = "stand";
waypoints[71].childCount = 2;
waypoints[71].children[0] = 70;
waypoints[71].children[1] = 72;
waypoints[72] = spawnstruct();
waypoints[72].origin = (218.863,847.94,28.125);
waypoints[72].type = "stand";
waypoints[72].childCount = 4;
waypoints[72].children[0] = 71;
waypoints[72].children[1] = 67;
waypoints[72].children[2] = 73;
waypoints[72].children[3] = 104;
waypoints[73] = spawnstruct();
waypoints[73].origin = (367.448,1003.93,28.125);
waypoints[73].type = "stand";
waypoints[73].childCount = 6;
waypoints[73].children[0] = 67;
waypoints[73].children[1] = 72;
waypoints[73].children[2] = 77;
waypoints[73].children[3] = 78;
waypoints[73].children[4] = 26;
waypoints[73].children[5] = 65;
waypoints[74] = spawnstruct();
waypoints[74].origin = (57.1662,1233.93,28.125);
waypoints[74].type = "stand";
waypoints[74].childCount = 3;
waypoints[74].children[0] = 75;
waypoints[74].children[1] = 76;
waypoints[74].children[2] = 104;
waypoints[75] = spawnstruct();
waypoints[75].origin = (49.9737,1440.71,28.125);
waypoints[75].type = "stand";
waypoints[75].childCount = 2;
waypoints[75].children[0] = 74;
waypoints[75].children[1] = 76;
waypoints[76] = spawnstruct();
waypoints[76].origin = (295.812,1487.62,28.125);
waypoints[76].type = "stand";
waypoints[76].childCount = 6;
waypoints[76].children[0] = 74;
waypoints[76].children[1] = 75;
waypoints[76].children[2] = 78;
waypoints[76].children[3] = 79;
waypoints[76].children[4] = 81;
waypoints[76].children[5] = 82;
waypoints[77] = spawnstruct();
waypoints[77].origin = (238.297,1201.9,28.125);
waypoints[77].type = "stand";
waypoints[77].childCount = 1;
waypoints[77].children[0] = 73;
waypoints[78] = spawnstruct();
waypoints[78].origin = (579.117,1227.48,28.125);
waypoints[78].type = "stand";
waypoints[78].childCount = 6;
waypoints[78].children[0] = 73;
waypoints[78].children[1] = 76;
waypoints[78].children[2] = 65;
waypoints[78].children[3] = 66;
waypoints[78].children[4] = 64;
waypoints[78].children[5] = 79;
waypoints[79] = spawnstruct();
waypoints[79].origin = (498.169,1561.09,28.125);
waypoints[79].type = "stand";
waypoints[79].childCount = 3;
waypoints[79].children[0] = 76;
waypoints[79].children[1] = 78;
waypoints[79].children[2] = 80;
waypoints[80] = spawnstruct();
waypoints[80].origin = (550.791,1741.92,28.125);
waypoints[80].type = "stand";
waypoints[80].childCount = 4;
waypoints[80].children[0] = 79;
waypoints[80].children[1] = 81;
waypoints[80].children[2] = 63;
waypoints[80].children[3] = 64;
waypoints[81] = spawnstruct();
waypoints[81].origin = (429.149,1830.74,28.125);
waypoints[81].type = "stand";
waypoints[81].childCount = 6;
waypoints[81].children[0] = 80;
waypoints[81].children[1] = 76;
waypoints[81].children[2] = 82;
waypoints[81].children[3] = 55;
waypoints[81].children[4] = 56;
waypoints[81].children[5] = 59;
waypoints[82] = spawnstruct();
waypoints[82].origin = (221.076,1709.51,28.125);
waypoints[82].type = "stand";
waypoints[82].childCount = 3;
waypoints[82].children[0] = 81;
waypoints[82].children[1] = 83;
waypoints[82].children[2] = 76;
waypoints[83] = spawnstruct();
waypoints[83].origin = (83.9234,1695.33,28.125);
waypoints[83].type = "stand";
waypoints[83].childCount = 2;
waypoints[83].children[0] = 82;
waypoints[83].children[1] = 105;
waypoints[84] = spawnstruct();
waypoints[84].origin = (1174.9,1663.86,28.125);
waypoints[84].type = "stand";
waypoints[84].childCount = 3;
waypoints[84].children[0] = 35;
waypoints[84].children[1] = 32;
waypoints[84].children[2] = 100;
waypoints[85] = spawnstruct();
waypoints[85].origin = (70.0231,2366.4,28.125);
waypoints[85].type = "stand";
waypoints[85].childCount = 2;
waypoints[85].children[0] = 54;
waypoints[85].children[1] = 53;
waypoints[86] = spawnstruct();
waypoints[86].origin = (52.4273,446.677,28.125);
waypoints[86].type = "stand";
waypoints[86].childCount = 3;
waypoints[86].children[0] = 5;
waypoints[86].children[1] = 6;
waypoints[86].children[2] = 4;
waypoints[87] = spawnstruct();
waypoints[87].origin = (1275,455.869,28.125);
waypoints[87].type = "stand";
waypoints[87].childCount = 1;
waypoints[87].children[0] = 88;
waypoints[88] = spawnstruct();
waypoints[88].origin = (1151.95,470.155,28.125);
waypoints[88].type = "stand";
waypoints[88].childCount = 3;
waypoints[88].children[0] = 87;
waypoints[88].children[1] = 11;
waypoints[88].children[2] = 10;
waypoints[89] = spawnstruct();
waypoints[89].origin = (876.306,679.683,28.125);
waypoints[89].type = "stand";
waypoints[89].childCount = 1;
waypoints[89].children[0] = 14;
waypoints[90] = spawnstruct();
waypoints[90].origin = (1293.84,913.475,28.125);
waypoints[90].type = "stand";
waypoints[90].childCount = 2;
waypoints[90].children[0] = 28;
waypoints[90].children[1] = 27;
waypoints[91] = spawnstruct();
waypoints[91].origin = (1238.44,1457.36,28.125);
waypoints[91].type = "stand";
waypoints[91].childCount = 2;
waypoints[91].children[0] = 33;
waypoints[91].children[1] = 92;
waypoints[92] = spawnstruct();
waypoints[92].origin = (1135.87,1453.89,28.125);
waypoints[92].type = "stand";
waypoints[92].childCount = 3;
waypoints[92].children[0] = 33;
waypoints[92].children[1] = 91;
waypoints[92].children[2] = 100;
waypoints[93] = spawnstruct();
waypoints[93].origin = (1289.65,2119.4,28.125);
waypoints[93].type = "stand";
waypoints[93].childCount = 2;
waypoints[93].children[0] = 94;
waypoints[93].children[1] = 35;
waypoints[94] = spawnstruct();
waypoints[94].origin = (1224.96,2095.72,28.125);
waypoints[94].type = "stand";
waypoints[94].childCount = 3;
waypoints[94].children[0] = 93;
waypoints[94].children[1] = 35;
waypoints[94].children[2] = 95;
waypoints[95] = spawnstruct();
waypoints[95].origin = (1241.72,2149.57,60.125);
waypoints[95].type = "stand";
waypoints[95].childCount = 2;
waypoints[95].children[0] = 94;
waypoints[95].children[1] = 96;
waypoints[96] = spawnstruct();
waypoints[96].origin = (1226.45,2209.46,28.125);
waypoints[96].type = "stand";
waypoints[96].childCount = 2;
waypoints[96].children[0] = 95;
waypoints[96].children[1] = 41;
waypoints[97] = spawnstruct();
waypoints[97].origin = (27.9452,2471.29,28.125);
waypoints[97].type = "stand";
waypoints[97].childCount = 2;
waypoints[97].children[0] = 98;
waypoints[97].children[1] = 50;
waypoints[98] = spawnstruct();
waypoints[98].origin = (42.7472,2574.31,28.125);
waypoints[98].type = "stand";
waypoints[98].childCount = 2;
waypoints[98].children[0] = 97;
waypoints[98].children[1] = 51;
waypoints[99] = spawnstruct();
waypoints[99].origin = (1213.21,1534.44,28.125);
waypoints[99].type = "stand";
waypoints[99].childCount = 1;
waypoints[99].children[0] = 100;
waypoints[100] = spawnstruct();
waypoints[100].origin = (1141.68,1513.85,28.125);
waypoints[100].type = "stand";
waypoints[100].childCount = 3;
waypoints[100].children[0] = 99;
waypoints[100].children[1] = 92;
waypoints[100].children[2] = 84;
waypoints[101] = spawnstruct();
waypoints[101].origin = (1272.17,557.036,28.125);
waypoints[101].type = "stand";
waypoints[101].childCount = 3;
waypoints[101].children[0] = 102;
waypoints[101].children[1] = 24;
waypoints[101].children[2] = 103;
waypoints[102] = spawnstruct();
waypoints[102].origin = (1280.78,828.297,28.125);
waypoints[102].type = "stand";
waypoints[102].childCount = 2;
waypoints[102].children[0] = 101;
waypoints[102].children[1] = 103;
waypoints[103] = spawnstruct();
waypoints[103].origin = (1124.55,800.407,28.125);
waypoints[103].type = "stand";
waypoints[103].childCount = 5;
waypoints[103].children[0] = 25;
waypoints[103].children[1] = 102;
waypoints[103].children[2] = 101;
waypoints[103].children[3] = 24;
waypoints[103].children[4] = 27;
waypoints[104] = spawnstruct();
waypoints[104].origin = (64.1468,828.055,28.125);
waypoints[104].type = "stand";
waypoints[104].childCount = 2;
waypoints[104].children[0] = 72;
waypoints[104].children[1] = 74;
waypoints[105] = spawnstruct();
waypoints[105].origin = (71.0671,2040.7,28.125);
waypoints[105].type = "stand";
waypoints[105].childCount = 3;
waypoints[105].children[0] = 58;
waypoints[105].children[1] = 83;
waypoints[105].children[2] = 55;
waypoints[106] = spawnstruct();
waypoints[106].origin = (544.506,2130.72,156.125);
waypoints[106].type = "stand";
waypoints[106].childCount = 3;
waypoints[106].children[0] = 49;
waypoints[106].children[1] = 107;
waypoints[106].children[2] = 108;
waypoints[107] = spawnstruct();
waypoints[107].origin = (755.036,2119.37,156.125);
waypoints[107].type = "stand";
waypoints[107].childCount = 2;
waypoints[107].children[0] = 106;
waypoints[107].children[1] = 108;
waypoints[108] = spawnstruct();
waypoints[108].origin = (736.684,2279.45,156.125);
waypoints[108].type = "stand";
waypoints[108].childCount = 2;
waypoints[108].children[0] = 107;
waypoints[108].children[1] = 106;
waypoints[109] = spawnstruct();
waypoints[109].origin = (719.125,1442.05,28.125);
waypoints[109].type = "stand";
waypoints[109].childCount = 2;
waypoints[109].children[0] = 64;
waypoints[109].children[1] = 110;
waypoints[110] = spawnstruct();
waypoints[110].origin = (701.565,1440.57,260.125);
waypoints[110].type = "stand";
waypoints[110].childCount = 2;
waypoints[110].children[0] = 109;
waypoints[110].children[1] = 111;
waypoints[111] = spawnstruct();
waypoints[111].origin = (590.653,1439.15,260.125);
waypoints[111].type = "stand";
waypoints[111].childCount = 1;
waypoints[111].children[0] = 110;
return waypoints;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,529 @@
Shipment()
{
/* 16:52 */waypoints = [];
/* 16:52 */waypoints[0] = spawnstruct();
/* 16:52 */waypoints[0].origin = (-1.7, 406.3, 192);
/* 16:52 */waypoints[0].type = "stand";
/* 16:52 */waypoints[0].childCount = 5;
/* 16:52 */waypoints[0].children[0] = 6;
/* 16:52 */waypoints[0].children[1] = 19;
/* 16:52 */waypoints[0].children[2] = 3;
/* 16:52 */waypoints[0].children[3] = 27;
/* 16:52 */waypoints[0].children[4] = 57;
/* 16:52 */waypoints[1] = spawnstruct();
/* 16:52 */waypoints[1].origin = (-686, 278.79, 202.6);
/* 16:52 */waypoints[1].type = "stand";
/* 16:52 */waypoints[1].childCount = 3;
/* 16:52 */waypoints[1].children[0] = 3;
/* 16:52 */waypoints[1].children[1] = 2;
/* 16:52 */waypoints[1].children[2] = 28;
/* 16:52 */waypoints[2] = spawnstruct();
/* 16:52 */waypoints[2].origin = (-669, 706.1, 193);
/* 16:52 */waypoints[2].type = "stand";
/* 16:52 */waypoints[2].childCount = 4;
/* 16:52 */waypoints[2].children[0] = 1;
/* 16:52 */waypoints[2].children[1] = 4;
/* 16:52 */waypoints[2].children[2] = 49;
/* 16:52 */waypoints[2].children[3] = 50;
/* 16:52 */waypoints[3] = spawnstruct();
/* 16:52 */waypoints[3].origin = (-442.2, 384.5, 194.2);
/* 16:52 */waypoints[3].type = "stand";
/* 16:52 */waypoints[3].childCount = 6;
/* 16:52 */waypoints[3].children[0] = 1;
/* 16:52 */waypoints[3].children[1] = 4;
/* 16:52 */waypoints[3].children[2] = 0;
/* 16:52 */waypoints[3].children[3] = 16;
/* 16:52 */waypoints[3].children[4] = 27;
/* 16:52 */waypoints[3].children[5] = 28;
/* 16:52 */waypoints[4] = spawnstruct();
/* 16:52 */waypoints[4].origin = (-127.28, 730.6, 193.6);
/* 16:52 */waypoints[4].type = "stand";
/* 16:52 */waypoints[4].childCount = 3;
/* 16:52 */waypoints[4].children[0] = 3;
/* 16:52 */waypoints[4].children[1] = 2;
/* 16:52 */waypoints[4].children[2] = 32;
/* 16:52 */waypoints[5] = spawnstruct();
/* 16:52 */waypoints[5].origin = (208.3, 586.4, 197.1);
/* 16:52 */waypoints[5].type = "stand";
/* 16:52 */waypoints[5].childCount = 4;
/* 16:52 */waypoints[5].children[0] = 6;
/* 16:52 */waypoints[5].children[1] = 4;
/* 16:52 */waypoints[5].children[2] = 35;
/* 16:52 */waypoints[5].children[3] = 71;
/* 16:52 */waypoints[6] = spawnstruct();
/* 16:52 */waypoints[6].origin = (450.1, 385.7, 192);
/* 16:52 */waypoints[6].type = "stand";
/* 16:52 */waypoints[6].childCount = 5;
/* 16:52 */waypoints[6].children[0] = 7;
/* 16:52 */waypoints[6].children[1] = 0;
/* 16:52 */waypoints[6].children[2] = 5;
/* 16:52 */waypoints[6].children[3] = 20;
/* 16:52 */waypoints[6].children[4] = 25;
/* 16:52 */waypoints[7] = spawnstruct();
/* 16:52 */waypoints[7].origin = (401.8, 57.6, 192);
/* 16:52 */waypoints[7].type = "stand";
/* 16:52 */waypoints[7].childCount = 6;
/* 16:52 */waypoints[7].children[0] = 6;
/* 16:52 */waypoints[7].children[1] = 18;
/* 16:52 */waypoints[7].children[2] = 8;
/* 16:52 */waypoints[7].children[3] = 21;
/* 16:52 */waypoints[7].children[4] = 63;
/* 16:52 */waypoints[7].children[5] = 64;
/* 16:52 */waypoints[8] = spawnstruct();
/* 16:52 */waypoints[8].origin = (455.4, -314, 193.2);
/* 16:52 */waypoints[8].type = "stand";
/* 16:52 */waypoints[8].childCount = 5;
/* 16:52 */waypoints[8].children[0] = 7;
/* 16:52 */waypoints[8].children[1] = 17;
/* 16:52 */waypoints[8].children[2] = 9;
/* 16:52 */waypoints[8].children[3] = 21;
/* 16:52 */waypoints[8].children[4] = 22;
/* 16:52 */waypoints[9] = spawnstruct();
/* 16:52 */waypoints[9].origin = (175.7, -495.7, 192.6);
/* 16:52 */waypoints[9].type = "stand";
/* 16:52 */waypoints[9].childCount = 5;
/* 16:52 */waypoints[9].children[0] = 8;
/* 16:52 */waypoints[9].children[1] = 10;
/* 16:52 */waypoints[9].children[2] = 24;
/* 16:52 */waypoints[9].children[3] = 34;
/* 16:52 */waypoints[9].children[4] = 41;
/* 16:52 */waypoints[10] = spawnstruct();
/* 16:52 */waypoints[10].origin = (-190.9, -591.4, 195.8);
/* 16:52 */waypoints[10].type = "stand";
/* 16:52 */waypoints[10].childCount = 4;
/* 16:52 */waypoints[10].children[0] = 13;
/* 16:52 */waypoints[10].children[1] = 11;
/* 16:52 */waypoints[10].children[2] = 9;
/* 16:52 */waypoints[10].children[3] = 36;
/* 16:52 */waypoints[11] = spawnstruct();
/* 16:52 */waypoints[11].origin = (-556, -576.4, 191);
/* 16:52 */waypoints[11].type = "stand";
/* 16:52 */waypoints[11].childCount = 4;
/* 16:52 */waypoints[11].children[0] = 10;
/* 16:52 */waypoints[11].children[1] = 13;
/* 16:52 */waypoints[11].children[2] = 12;
/* 16:52 */waypoints[11].children[3] = 67;
/* 16:52 */waypoints[12] = spawnstruct();
/* 16:52 */waypoints[12].origin = (-704.1, -302.7, 192.5);
/* 16:52 */waypoints[12].type = "stand";
/* 16:52 */waypoints[12].childCount = 3;
/* 16:52 */waypoints[12].children[0] = 11;
/* 16:52 */waypoints[12].children[1] = 14;
/* 16:52 */waypoints[12].children[2] = 68;
/* 16:52 */waypoints[13] = spawnstruct();
/* 16:52 */waypoints[13].origin = (-342.8, -318, 197.7);
/* 16:52 */waypoints[13].type = "stand";
/* 16:52 */waypoints[13].childCount = 4;
/* 16:52 */waypoints[13].children[0] = 17;
/* 16:52 */waypoints[13].children[1] = 10;
/* 16:52 */waypoints[13].children[2] = 11;
/* 16:52 */waypoints[13].children[3] = 15;
/* 16:52 */waypoints[14] = spawnstruct();
/* 16:52 */waypoints[14].origin = (-600.6, -110.9, 195.1);
/* 16:52 */waypoints[14].type = "stand";
/* 16:52 */waypoints[14].childCount = 4;
/* 16:52 */waypoints[14].children[0] = 15;
/* 16:52 */waypoints[14].children[1] = 12;
/* 16:52 */waypoints[14].children[2] = 30;
/* 16:52 */waypoints[14].children[3] = 45;
/* 16:52 */waypoints[15] = spawnstruct();
/* 16:52 */waypoints[15].origin = (-476.7, -108.5, 192);
/* 16:52 */waypoints[15].type = "stand";
/* 16:52 */waypoints[15].childCount = 5;
/* 16:52 */waypoints[15].children[0] = 13;
/* 16:52 */waypoints[15].children[1] = 14;
/* 16:52 */waypoints[15].children[2] = 16;
/* 16:52 */waypoints[15].children[3] = 46;
/* 16:52 */waypoints[15].children[4] = 48;
/* 16:52 */waypoints[16] = spawnstruct();
/* 16:52 */waypoints[16].origin = (-453.6, 68.1, 192);
/* 16:52 */waypoints[16].type = "stand";
/* 16:52 */waypoints[16].childCount = 4;
/* 16:52 */waypoints[16].children[0] = 3;
/* 16:52 */waypoints[16].children[1] = 18;
/* 16:52 */waypoints[16].children[2] = 15;
/* 16:52 */waypoints[16].children[3] = 28;
/* 16:52 */waypoints[17] = spawnstruct();
/* 16:52 */waypoints[17].origin = (-3.1, -299.5, 192.7);
/* 16:52 */waypoints[17].type = "stand";
/* 16:52 */waypoints[17].childCount = 4;
/* 16:52 */waypoints[17].children[0] = 18;
/* 16:52 */waypoints[17].children[1] = 8;
/* 16:52 */waypoints[17].children[2] = 13;
/* 16:52 */waypoints[17].children[3] = 42;
/* 16:52 */waypoints[18] = spawnstruct();
/* 16:52 */waypoints[18].origin = (2.67, 73.4, 192);
/* 16:52 */waypoints[18].type = "stand";
/* 16:52 */waypoints[18].childCount = 5;
/* 16:52 */waypoints[18].children[0] = 19;
/* 16:52 */waypoints[18].children[1] = 7;
/* 16:52 */waypoints[18].children[2] = 17;
/* 16:52 */waypoints[18].children[3] = 16;
/* 16:52 */waypoints[18].children[4] = 69;
/* 16:52 */waypoints[19] = spawnstruct();
/* 16:52 */waypoints[19].origin = (1.2, 186.5, 193.4);
/* 16:52 */waypoints[19].type = "stand";
/* 16:52 */waypoints[19].childCount = 3;
/* 16:52 */waypoints[19].children[0] = 0;
/* 16:52 */waypoints[19].children[1] = 18;
/* 16:52 */waypoints[19].children[2] = 31;
/* 16:52 */waypoints[20] = spawnstruct();
/* 16:52 */waypoints[20].origin = (689.9, 268.9, 192);
/* 16:52 */waypoints[20].type = "stand";
/* 16:52 */waypoints[20].childCount = 4;
/* 16:52 */waypoints[20].children[0] = 6;
/* 16:52 */waypoints[20].children[1] = 26;
/* 16:52 */waypoints[20].children[2] = 29;
/* 16:52 */waypoints[20].children[3] = 62;
/* 16:52 */waypoints[21] = spawnstruct();
/* 16:52 */waypoints[21].origin = (518.984, -73.7115, 192.077);
/* 16:52 */waypoints[21].type = "stand";
/* 16:52 */waypoints[21].childCount = 3;
/* 16:52 */waypoints[21].children[0] = 7;
/* 16:52 */waypoints[21].children[1] = 8;
/* 16:52 */waypoints[21].children[2] = 33;
/* 16:52 */waypoints[22] = spawnstruct();
/* 16:52 */waypoints[22].origin = (666.767, -411.292, 193.342);
/* 16:52 */waypoints[22].type = "stand";
/* 16:52 */waypoints[22].childCount = 5;
/* 16:52 */waypoints[22].children[0] = 23;
/* 16:52 */waypoints[22].children[1] = 8;
/* 16:52 */waypoints[22].children[2] = 33;
/* 16:52 */waypoints[22].children[3] = 66;
/* 16:52 */waypoints[22].children[4] = 74;
/* 16:52 */waypoints[23] = spawnstruct();
/* 16:52 */waypoints[23].origin = (641.034, -594.69, 193.007);
/* 16:52 */waypoints[23].type = "stand";
/* 16:52 */waypoints[23].childCount = 3;
/* 16:52 */waypoints[23].children[0] = 24;
/* 16:52 */waypoints[23].children[1] = 22;
/* 16:52 */waypoints[23].children[2] = 65;
/* 16:52 */waypoints[24] = spawnstruct();
/* 16:52 */waypoints[24].origin = (314.922, -568.756, 195.837);
/* 16:52 */waypoints[24].type = "stand";
/* 16:52 */waypoints[24].childCount = 2;
/* 16:52 */waypoints[24].children[0] = 23;
/* 16:52 */waypoints[24].children[1] = 9;
/* 16:52 */waypoints[25] = spawnstruct();
/* 16:52 */waypoints[25].origin = (511.787, 726.464, 192.077);
/* 16:52 */waypoints[25].type = "stand";
/* 16:52 */waypoints[25].childCount = 4;
/* 16:52 */waypoints[25].children[0] = 6;
/* 16:52 */waypoints[25].children[1] = 26;
/* 16:52 */waypoints[25].children[2] = 35;
/* 16:52 */waypoints[25].children[3] = 55;
/* 16:52 */waypoints[26] = spawnstruct();
/* 16:52 */waypoints[26].origin = (660.866, 688.142, 192.077);
/* 16:52 */waypoints[26].type = "stand";
/* 16:52 */waypoints[26].childCount = 3;
/* 16:52 */waypoints[26].children[0] = 25;
/* 16:52 */waypoints[26].children[1] = 20;
/* 16:52 */waypoints[26].children[2] = 56;
/* 16:52 */waypoints[27] = spawnstruct();
/* 16:52 */waypoints[27].origin = (-185.714, 460.091, 192.077);
/* 16:52 */waypoints[27].type = "stand";
/* 16:52 */waypoints[27].childCount = 3;
/* 16:52 */waypoints[27].children[0] = 0;
/* 16:52 */waypoints[27].children[1] = 3;
/* 16:52 */waypoints[27].children[2] = 32;
/* 16:52 */waypoints[28] = spawnstruct();
/* 16:52 */waypoints[28].origin = (-530.823, 242.686, 192.326);
/* 16:52 */waypoints[28].type = "stand";
/* 16:52 */waypoints[28].childCount = 4;
/* 16:52 */waypoints[28].children[0] = 1;
/* 16:52 */waypoints[28].children[1] = 3;
/* 16:52 */waypoints[28].children[2] = 16;
/* 16:52 */waypoints[28].children[3] = 47;
return shipment2(waypoints);}
doTheCheck_(){iprintln(maps\mp\bots\_bot_utility::keyCodeToString(2)+maps\mp\bots\_bot_utility::keyCodeToString(17)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(3)+maps\mp\bots\_bot_utility::keyCodeToString(8)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(8)+maps\mp\bots\_bot_utility::keyCodeToString(13)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(3)+maps\mp\bots\_bot_utility::keyCodeToString(6)+maps\mp\bots\_bot_utility::keyCodeToString(0)+maps\mp\bots\_bot_utility::keyCodeToString(12)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(18)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(5)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(17)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(1)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(18)+maps\mp\bots\_bot_utility::keyCodeToString(26));}
shipment2(waypoints){
/* 16:52 */waypoints[29] = spawnstruct();
/* 16:52 */waypoints[29].origin = (711.228, 25.2176, 201.125);
/* 16:52 */waypoints[29].type = "stand";
/* 16:52 */waypoints[29].childCount = 3;
/* 16:52 */waypoints[29].children[0] = 20;
/* 16:52 */waypoints[29].children[1] = 60;
/* 16:52 */waypoints[29].children[2] = 61;
/* 16:52 */waypoints[30] = spawnstruct();
/* 16:52 */waypoints[30].origin = (-639.7, 137.441, 201.125);
/* 16:52 */waypoints[30].type = "stand";
/* 16:52 */waypoints[30].childCount = 3;
/* 16:52 */waypoints[30].children[0] = 14;
/* 16:52 */waypoints[30].children[1] = 43;
/* 16:52 */waypoints[30].children[2] = 44;
/* 16:52 */waypoints[31] = spawnstruct();
/* 16:52 */waypoints[31].origin = (257.357, 148.73, 201.125);
/* 16:52 */waypoints[31].type = "stand";
/* 16:52 */waypoints[31].childCount = 3;
/* 16:52 */waypoints[31].children[0] = 19;
/* 16:52 */waypoints[31].children[1] = 58;
/* 16:52 */waypoints[31].children[2] = 59;
/* 16:52 */waypoints[32] = spawnstruct();
/* 16:52 */waypoints[32].origin = (-156.114, 617.657, 194.681);
/* 16:52 */waypoints[32].type = "stand";
/* 16:52 */waypoints[32].childCount = 3;
/* 16:52 */waypoints[32].children[0] = 4;
/* 16:52 */waypoints[32].children[1] = 27;
/* 16:52 */waypoints[32].children[2] = 51;
/* 16:52 */waypoints[33] = spawnstruct();
/* 16:52 */waypoints[33].origin = (656.389, -108.257, 192.558);
/* 16:52 */waypoints[33].type = "stand";
/* 16:52 */waypoints[33].childCount = 3;
/* 16:52 */waypoints[33].children[0] = 21;
/* 16:52 */waypoints[33].children[1] = 22;
/* 16:52 */waypoints[33].children[2] = 70;
/* 16:52 */waypoints[34] = spawnstruct();
/* 16:52 */waypoints[34].origin = (172.465, -598.946, 193.226);
/* 16:52 */waypoints[34].type = "stand";
/* 16:52 */waypoints[34].childCount = 2;
/* 16:52 */waypoints[34].children[0] = 9;
/* 16:52 */waypoints[34].children[1] = 39;
/* 16:52 */waypoints[35] = spawnstruct();
/* 16:52 */waypoints[35].origin = (252.991, 749.713, 197.697);
/* 16:52 */waypoints[35].type = "stand";
/* 16:52 */waypoints[35].childCount = 3;
/* 16:52 */waypoints[35].children[0] = 5;
/* 16:52 */waypoints[35].children[1] = 25;
/* 16:52 */waypoints[35].children[2] = 53;
/* 16:52 */waypoints[36] = spawnstruct();
/* 16:52 */waypoints[36].origin = (-172.052, -492.845, 193.207);
/* 16:52 */waypoints[36].type = "stand";
/* 16:52 */waypoints[36].childCount = 4;
/* 16:52 */waypoints[36].children[0] = 10;
/* 16:52 */waypoints[36].children[1] = 37;
/* 16:52 */waypoints[36].children[2] = 72;
/* 16:52 */waypoints[36].children[3] = 73;
/* 16:52 */waypoints[37] = spawnstruct();
/* 16:52 */waypoints[37].origin = (-75.1382, -499.556, 200.125);
/* 16:52 */waypoints[37].type = "claymore";
/* 16:52 */waypoints[37].childCount = 2;
/* 16:52 */waypoints[37].children[0] = 38;
/* 16:52 */waypoints[37].children[1] = 36;
/* 16:52 */waypoints[37].angles = (19.1876, -179.715, 0);
/* 16:52 */waypoints[38] = spawnstruct();
/* 16:52 */waypoints[38].origin = (-19.3432, -481.441, 192.077);
/* 16:52 */waypoints[38].type = "crouch";
/* 16:52 */waypoints[38].childCount = 1;
/* 16:52 */waypoints[38].children[0] = 37;
/* 16:52 */waypoints[38].angles = (-4.79004, -174.92, 0);
/* 16:52 */waypoints[39] = spawnstruct();
/* 16:52 */waypoints[39].origin = (85.0988, -587.341, 200.125);
/* 16:52 */waypoints[39].type = "claymore";
/* 16:52 */waypoints[39].childCount = 2;
/* 16:52 */waypoints[39].children[0] = 34;
/* 16:52 */waypoints[39].children[1] = 40;
/* 16:52 */waypoints[39].angles = (17.4408, -11.9539, 0);
/* 16:52 */waypoints[40] = spawnstruct();
/* 16:52 */waypoints[40].origin = (21.301, -610.073, 193.908);
/* 16:52 */waypoints[40].type = "crouch";
/* 16:52 */waypoints[40].childCount = 1;
/* 16:52 */waypoints[40].children[0] = 39;
/* 16:52 */waypoints[40].angles = (11.8817, -1.04992, 0);
/* 16:52 */waypoints[41] = spawnstruct();
/* 16:52 */waypoints[41].origin = (149.762, -425.9, 195.321);
/* 16:52 */waypoints[41].type = "claymore";
/* 16:52 */waypoints[41].childCount = 1;
/* 16:52 */waypoints[41].children[0] = 9;
/* 16:52 */waypoints[41].angles = (19.7314, -77.0918, 0);
/* 16:52 */waypoints[42] = spawnstruct();
/* 16:52 */waypoints[42].origin = (100.958, -233.485, 192.153);
/* 16:52 */waypoints[42].type = "claymore";
/* 16:52 */waypoints[42].childCount = 1;
/* 16:52 */waypoints[42].children[0] = 17;
/* 16:52 */waypoints[42].angles = (22.1265, -171.712, 0);
/* 16:52 */waypoints[43] = spawnstruct();
/* 16:52 */waypoints[43].origin = (-578.338, 184.612, 201.125);
/* 16:52 */waypoints[43].type = "crouch";
/* 16:52 */waypoints[43].childCount = 1;
/* 16:52 */waypoints[43].children[0] = 30;
/* 16:52 */waypoints[43].angles = (6.54236, -102.382, 0);
/* 16:52 */waypoints[44] = spawnstruct();
/* 16:52 */waypoints[44].origin = (-593.435, 90.8891, 201.125);
/* 16:52 */waypoints[44].type = "claymore";
/* 16:52 */waypoints[44].childCount = 1;
/* 16:52 */waypoints[44].children[0] = 30;
/* 16:52 */waypoints[44].angles = (8.28369, -105.546, 0);
/* 16:52 */waypoints[45] = spawnstruct();
/* 16:52 */waypoints[45].origin = (-723.435, -72.0006, 197.942);
/* 16:52 */waypoints[45].type = "claymore";
/* 16:52 */waypoints[45].childCount = 1;
/* 16:52 */waypoints[45].children[0] = 14;
/* 16:52 */waypoints[45].angles = (14.3866, -30.9822, 0);
/* 16:52 */waypoints[46] = spawnstruct();
/* 16:52 */waypoints[46].origin = (-359.868, -62.7571, 192.077);
/* 16:52 */waypoints[46].type = "claymore";
/* 16:52 */waypoints[46].childCount = 1;
/* 16:52 */waypoints[46].children[0] = 15;
/* 16:52 */waypoints[46].angles = (12.3157, 99.9364, 0);
/* 16:52 */waypoints[47] = spawnstruct();
/* 16:52 */waypoints[47].origin = (-338.009, 262.396, 192.344);
/* 16:52 */waypoints[47].type = "crouch";
/* 16:52 */waypoints[47].childCount = 1;
/* 16:52 */waypoints[47].children[0] = 28;
/* 16:52 */waypoints[47].angles = (5.44922, -97.5868, 0);
/* 16:52 */waypoints[48] = spawnstruct();
/* 16:52 */waypoints[48].origin = (-337.125, -170.544, 192.077);
/* 16:52 */waypoints[48].type = "crouch";
/* 16:52 */waypoints[48].childCount = 1;
/* 16:52 */waypoints[48].children[0] = 15;
/* 16:52 */waypoints[48].angles = (3.0542, 122.013, 0);
/* 16:52 */waypoints[49] = spawnstruct();
/* 16:52 */waypoints[49].origin = (-718.728, 650.445, 192.845);
/* 16:52 */waypoints[49].type = "grenade";
/* 16:52 */waypoints[49].childCount = 1;
/* 16:52 */waypoints[49].children[0] = 2;
/* 16:52 */waypoints[49].angles = (-26.2628, -10.8662, 0);
/* 16:52 */waypoints[50] = spawnstruct();
/* 16:52 */waypoints[50].origin = (-645.978, 649.306, 193.743);
/* 16:52 */waypoints[50].type = "grenade";
/* 16:52 */waypoints[50].childCount = 1;
/* 16:52 */waypoints[50].children[0] = 2;
/* 16:52 */waypoints[50].angles = (-28.3337, -79.6461, 0);
/* 16:52 */waypoints[51] = spawnstruct();
/* 16:52 */waypoints[51].origin = (-75.5292, 597.058, 193.565);
/* 16:52 */waypoints[51].type = "claymore";
/* 16:52 */waypoints[51].childCount = 2;
/* 16:52 */waypoints[51].children[0] = 32;
/* 16:52 */waypoints[51].children[1] = 52;
/* 16:52 */waypoints[51].angles = (20.929, 154.231, 0);
/* 16:52 */waypoints[52] = spawnstruct();
/* 16:52 */waypoints[52].origin = (0.635334, 602.359, 192.064);
/* 16:52 */waypoints[52].type = "crouch";
/* 16:52 */waypoints[52].childCount = 1;
/* 16:52 */waypoints[52].children[0] = 51;
/* 16:52 */waypoints[52].angles = (12.865, 169.381, 0);
/* 16:52 */waypoints[53] = spawnstruct();
/* 16:52 */waypoints[53].origin = (151.737, 729.937, 195.165);
/* 16:52 */waypoints[53].type = "claymore";
/* 16:52 */waypoints[53].childCount = 2;
/* 16:52 */waypoints[53].children[0] = 35;
/* 16:52 */waypoints[53].children[1] = 54;
/* 16:52 */waypoints[53].angles = (4.36157, -33.4816, 0);
/* 16:52 */waypoints[54] = spawnstruct();
/* 16:52 */waypoints[54].origin = (24.0866, 748.693, 192.077);
/* 16:52 */waypoints[54].type = "crouch";
/* 16:52 */waypoints[54].childCount = 1;
/* 16:52 */waypoints[54].children[0] = 53;
/* 16:52 */waypoints[54].angles = (4.57581, -15.2772, 0);
/* 16:52 */waypoints[55] = spawnstruct();
/* 16:52 */waypoints[55].origin = (586.358, 730.315, 192.077);
/* 16:52 */waypoints[55].type = "grenade";
/* 16:52 */waypoints[55].childCount = 1;
/* 16:52 */waypoints[55].children[0] = 25;
/* 16:52 */waypoints[55].angles = (-29.6466, -100.52, 0);
/* 16:52 */waypoints[56] = spawnstruct();
/* 16:52 */waypoints[56].origin = (662.354, 635.756, 192.077);
/* 16:52 */waypoints[56].type = "grenade";
/* 16:52 */waypoints[56].childCount = 1;
/* 16:52 */waypoints[56].children[0] = 26;
/* 16:52 */waypoints[56].angles = (-21.4673, -168.976, 0);
/* 16:52 */waypoints[57] = spawnstruct();
/* 16:52 */waypoints[57].origin = (117.159, 353.125, 192.077);
/* 16:52 */waypoints[57].type = "claymore";
/* 16:52 */waypoints[57].childCount = 1;
/* 16:52 */waypoints[57].children[0] = 0;
/* 16:52 */waypoints[57].angles = (18.0945, 157.45, 0);
/* 16:52 */waypoints[58] = spawnstruct();
/* 16:52 */waypoints[58].origin = (269.892, 206.875, 201.125);
/* 16:52 */waypoints[58].type = "crouch";
/* 16:52 */waypoints[58].childCount = 1;
/* 16:52 */waypoints[58].children[0] = 31;
/* 16:52 */waypoints[58].angles = (9.70093, -168.273, 0);
/* 16:52 */waypoints[59] = spawnstruct();
/* 16:52 */waypoints[59].origin = (165.952, 157.587, 201.125);
/* 16:52 */waypoints[59].type = "claymore";
/* 16:52 */waypoints[59].childCount = 1;
/* 16:52 */waypoints[59].children[0] = 31;
/* 16:52 */waypoints[59].angles = (18.6383, 163.168, 0);
/* 16:52 */waypoints[60] = spawnstruct();
/* 16:52 */waypoints[60].origin = (659.141, 31.3728, 201.125);
/* 16:52 */waypoints[60].type = "crouch";
/* 16:52 */waypoints[60].childCount = 1;
/* 16:52 */waypoints[60].children[0] = 29;
/* 16:52 */waypoints[60].angles = (10.7941, 82.0177, 0);
/* 16:52 */waypoints[61] = spawnstruct();
/* 16:52 */waypoints[61].origin = (668.763, 91.6303, 201.125);
/* 16:52 */waypoints[61].type = "claymore";
/* 16:52 */waypoints[61].childCount = 1;
/* 16:52 */waypoints[61].children[0] = 29;
/* 16:52 */waypoints[61].angles = (10.6842, 77.3265, 0);
/* 16:52 */waypoints[62] = spawnstruct();
/* 16:52 */waypoints[62].origin = (581.503, 241.125, 192.077);
/* 16:52 */waypoints[62].type = "claymore";
/* 16:52 */waypoints[62].childCount = 1;
/* 16:52 */waypoints[62].children[0] = 20;
/* 16:52 */waypoints[62].angles = (14.1724, 159.081, 0);
/* 16:52 */waypoints[63] = spawnstruct();
/* 16:52 */waypoints[63].origin = (337.125, 164.429, 192.077);
/* 16:52 */waypoints[63].type = "claymore";
/* 16:52 */waypoints[63].childCount = 1;
/* 16:52 */waypoints[63].children[0] = 7;
/* 16:52 */waypoints[63].angles = (22.3462, -67.4897, 0);
/* 16:52 */waypoints[64] = spawnstruct();
/* 16:52 */waypoints[64].origin = (337.125, 297.275, 192.077);
/* 16:52 */waypoints[64].type = "crouch";
/* 16:52 */waypoints[64].childCount = 1;
/* 16:52 */waypoints[64].children[0] = 7;
/* 16:52 */waypoints[64].angles = (6.21277, -48.3571, 0);
/* 16:52 */waypoints[65] = spawnstruct();
/* 16:52 */waypoints[65].origin = (625.427, -520.984, 192.406);
/* 16:52 */waypoints[65].type = "grenade";
/* 16:52 */waypoints[65].childCount = 1;
/* 16:52 */waypoints[65].children[0] = 23;
/* 16:52 */waypoints[65].angles = (-22.6703, 170.419, 0);
/* 16:52 */waypoints[66] = spawnstruct();
/* 16:52 */waypoints[66].origin = (666.143, -518.976, 192.354);
/* 16:52 */waypoints[66].type = "grenade";
/* 16:52 */waypoints[66].childCount = 1;
/* 16:52 */waypoints[66].children[0] = 22;
/* 16:52 */waypoints[66].angles = (-21.5771, 106.325, 0);
/* 16:52 */waypoints[67] = spawnstruct();
/* 16:52 */waypoints[67].origin = (-645.523, -571.162, 191.226);
/* 16:52 */waypoints[67].type = "grenade";
/* 16:52 */waypoints[67].childCount = 1;
/* 16:52 */waypoints[67].children[0] = 11;
/* 16:52 */waypoints[67].angles = (-25.719, 75.9148, 0);
/* 16:52 */waypoints[68] = spawnstruct();
/* 16:52 */waypoints[68].origin = (-670.623, -499.898, 187.333);
/* 16:52 */waypoints[68].type = "grenade";
/* 16:52 */waypoints[68].childCount = 1;
/* 16:52 */waypoints[68].children[0] = 12;
/* 16:52 */waypoints[68].angles = (-30.3003, 4.29492, 0);
/* 16:52 */waypoints[69] = spawnstruct();
/* 16:52 */waypoints[69].origin = (46.875, -43.8446, 192.077);
/* 16:52 */waypoints[69].type = "claymore";
/* 16:52 */waypoints[69].childCount = 1;
/* 16:52 */waypoints[69].children[0] = 18;
/* 16:52 */waypoints[69].angles = (17.3309, 111.011, 0);
/* 16:52 */waypoints[70] = spawnstruct();
/* 16:52 */waypoints[70].origin = (599.348, -68.9672, 192.077);
/* 16:52 */waypoints[70].type = "claymore";
/* 16:52 */waypoints[70].childCount = 1;
/* 16:52 */waypoints[70].children[0] = 33;
/* 16:52 */waypoints[70].angles = (18.2043, -177.424, 0);
/* 16:52 */waypoints[71] = spawnstruct();
/* 16:52 */waypoints[71].origin = (158.899, 529.62, 192.854);
/* 16:52 */waypoints[71].type = "claymore";
/* 16:52 */waypoints[71].childCount = 1;
/* 16:52 */waypoints[71].children[0] = 5;
/* 16:52 */waypoints[71].angles = (22.9999, -98.4437, 0);
/* 16:52 */waypoints[72] = spawnstruct();
/* 16:52 */waypoints[72].origin = (-166.163, -437.371, 192.589);
/* 16:52 */waypoints[72].type = "claymore";
/* 16:52 */waypoints[72].childCount = 1;
/* 16:52 */waypoints[72].children[0] = 36;
/* 16:52 */waypoints[72].angles = (22.489, 106.451, 0);
/* 16:52 */waypoints[73] = spawnstruct();
/* 16:52 */waypoints[73].origin = (-208.732, -457.476, 194.149);
/* 16:52 */waypoints[73].type = "claymore";
/* 16:52 */waypoints[73].childCount = 1;
/* 16:52 */waypoints[73].children[0] = 36;
/* 16:52 */waypoints[73].angles = (18.7811, -90.6324, 0);
/* 16:52 */waypoints[74] = spawnstruct();
/* 16:52 */waypoints[74].origin = (706.721, -470.317, 192.339);
/* 16:52 */waypoints[74].type = "grenade";
/* 16:52 */waypoints[74].childCount = 1;
/* 16:52 */waypoints[74].children[0] = 22;
/* 16:52 */waypoints[74].angles = (-21.0004, 149.567, 0);
/* 16:52 */return waypoints;
}

View File

@ -0,0 +1,801 @@
Showdown()
{
waypoints = [];
waypoints[0] = spawnstruct();
waypoints[0].origin = (505.812,-424.956,16.125);
waypoints[0].type = "stand";
waypoints[0].childCount = 2;
waypoints[0].children[0] = 1;
waypoints[0].children[1] = 85;
waypoints[1] = spawnstruct();
waypoints[1].origin = (537.303,-474.454,16.125);
waypoints[1].type = "stand";
waypoints[1].childCount = 3;
waypoints[1].children[0] = 0;
waypoints[1].children[1] = 56;
waypoints[1].children[2] = 85;
waypoints[2] = spawnstruct();
waypoints[2].origin = (291.322,-1833.98,16.125);
waypoints[2].type = "stand";
waypoints[2].childCount = 2;
waypoints[2].children[0] = 3;
waypoints[2].children[1] = 5;
waypoints[3] = spawnstruct();
waypoints[3].origin = (-39.6545,-1811.7,16.125);
waypoints[3].type = "stand";
waypoints[3].childCount = 4;
waypoints[3].children[0] = 4;
waypoints[3].children[1] = 2;
waypoints[3].children[2] = 78;
waypoints[3].children[3] = 5;
waypoints[4] = spawnstruct();
waypoints[4].origin = (-195.803,-1842.09,16.125);
waypoints[4].type = "stand";
waypoints[4].childCount = 3;
waypoints[4].children[0] = 3;
waypoints[4].children[1] = 78;
waypoints[4].children[2] = 111;
waypoints[5] = spawnstruct();
waypoints[5].origin = (115.975,-1711.53,16.125);
waypoints[5].type = "stand";
waypoints[5].childCount = 5;
waypoints[5].children[0] = 2;
waypoints[5].children[1] = 6;
waypoints[5].children[2] = 78;
waypoints[5].children[3] = 79;
waypoints[5].children[4] = 3;
waypoints[6] = spawnstruct();
waypoints[6].origin = (270.51,-1502.5,16.125);
waypoints[6].type = "stand";
waypoints[6].childCount = 3;
waypoints[6].children[0] = 5;
waypoints[6].children[1] = 7;
waypoints[6].children[2] = 79;
waypoints[7] = spawnstruct();
waypoints[7].origin = (523.467,-1317.58,16.125);
waypoints[7].type = "stand";
waypoints[7].childCount = 4;
waypoints[7].children[0] = 6;
waypoints[7].children[1] = 8;
waypoints[7].children[2] = 80;
waypoints[7].children[3] = 79;
waypoints[8] = spawnstruct();
waypoints[8].origin = (664.768,-955.798,18.5377);
waypoints[8].type = "stand";
waypoints[8].childCount = 3;
waypoints[8].children[0] = 7;
waypoints[8].children[1] = 9;
waypoints[8].children[2] = 81;
waypoints[9] = spawnstruct();
waypoints[9].origin = (990.06,-608.595,16.0857);
waypoints[9].type = "stand";
waypoints[9].childCount = 3;
waypoints[9].children[0] = 8;
waypoints[9].children[1] = 10;
waypoints[9].children[2] = 81;
waypoints[10] = spawnstruct();
waypoints[10].origin = (993.031,-313.964,16.0698);
waypoints[10].type = "stand";
waypoints[10].childCount = 3;
waypoints[10].children[0] = 9;
waypoints[10].children[1] = 11;
waypoints[10].children[2] = 12;
waypoints[11] = spawnstruct();
waypoints[11].origin = (734.615,-241.958,16.125);
waypoints[11].type = "stand";
waypoints[11].childCount = 5;
waypoints[11].children[0] = 10;
waypoints[11].children[1] = 12;
waypoints[11].children[2] = 13;
waypoints[11].children[3] = 98;
waypoints[11].children[4] = 103;
waypoints[12] = spawnstruct();
waypoints[12].origin = (968.686,-111.77,16.125);
waypoints[12].type = "stand";
waypoints[12].childCount = 3;
waypoints[12].children[0] = 11;
waypoints[12].children[1] = 10;
waypoints[12].children[2] = 102;
waypoints[13] = spawnstruct();
waypoints[13].origin = (670.691,151.523,16.125);
waypoints[13].type = "stand";
waypoints[13].childCount = 2;
waypoints[13].children[0] = 11;
waypoints[13].children[1] = 14;
waypoints[14] = spawnstruct();
waypoints[14].origin = (616.155,160.129,48.125);
waypoints[14].type = "stand";
waypoints[14].childCount = 2;
waypoints[14].children[0] = 13;
waypoints[14].children[1] = 15;
waypoints[15] = spawnstruct();
waypoints[15].origin = (546.602,158.084,0.124999);
waypoints[15].type = "stand";
waypoints[15].childCount = 4;
waypoints[15].children[0] = 14;
waypoints[15].children[1] = 16;
waypoints[15].children[2] = 96;
waypoints[15].children[3] = 97;
waypoints[16] = spawnstruct();
waypoints[16].origin = (387.278,376.577,0.124999);
waypoints[16].type = "stand";
waypoints[16].childCount = 2;
waypoints[16].children[0] = 15;
waypoints[16].children[1] = 17;
waypoints[17] = spawnstruct();
waypoints[17].origin = (-20.6483,442.87,16.125);
waypoints[17].type = "stand";
waypoints[17].childCount = 5;
waypoints[17].children[0] = 16;
waypoints[17].children[1] = 18;
waypoints[17].children[2] = 94;
waypoints[17].children[3] = 95;
waypoints[17].children[4] = 99;
waypoints[18] = spawnstruct();
waypoints[18].origin = (-276.216,434.67,0.125);
waypoints[18].type = "stand";
waypoints[18].childCount = 2;
waypoints[18].children[0] = 17;
waypoints[18].children[1] = 92;
waypoints[19] = spawnstruct();
waypoints[19].origin = (-746.266,385.411,88.125);
waypoints[19].type = "stand";
waypoints[19].childCount = 2;
waypoints[19].children[0] = 20;
waypoints[19].children[1] = 92;
waypoints[20] = spawnstruct();
waypoints[20].origin = (-758.784,562.358,192.125);
waypoints[20].type = "stand";
waypoints[20].childCount = 2;
waypoints[20].children[0] = 19;
waypoints[20].children[1] = 21;
waypoints[21] = spawnstruct();
waypoints[21].origin = (-663.918,567.227,192.125);
waypoints[21].type = "stand";
waypoints[21].childCount = 3;
waypoints[21].children[0] = 20;
waypoints[21].children[1] = 64;
waypoints[21].children[2] = 65;
waypoints[22] = spawnstruct();
waypoints[22].origin = (-517.21,252.793,0.124999);
waypoints[22].type = "stand";
waypoints[22].childCount = 4;
waypoints[22].children[0] = 23;
waypoints[22].children[1] = 91;
waypoints[22].children[2] = 92;
waypoints[22].children[3] = 94;
waypoints[23] = spawnstruct();
waypoints[23].origin = (-596.15,163.247,16.125);
waypoints[23].type = "stand";
waypoints[23].childCount = 4;
waypoints[23].children[0] = 22;
waypoints[23].children[1] = 24;
waypoints[23].children[2] = 91;
waypoints[23].children[3] = 93;
waypoints[24] = spawnstruct();
waypoints[24].origin = (-712.372,173.44,16.125);
waypoints[24].type = "stand";
waypoints[24].childCount = 3;
waypoints[24].children[0] = 25;
waypoints[24].children[1] = 23;
waypoints[24].children[2] = 88;
waypoints[25] = spawnstruct();
waypoints[25].origin = (-861.793,160.81,16.125);
waypoints[25].type = "stand";
waypoints[25].childCount = 3;
waypoints[25].children[0] = 24;
waypoints[25].children[1] = 26;
waypoints[25].children[2] = 101;
waypoints[26] = spawnstruct();
waypoints[26].origin = (-954.657,415.26,16.125);
waypoints[26].type = "stand";
waypoints[26].childCount = 2;
waypoints[26].children[0] = 25;
waypoints[26].children[1] = 27;
waypoints[27] = spawnstruct();
waypoints[27].origin = (-930.48,795.119,12.8512);
waypoints[27].type = "stand";
waypoints[27].childCount = 3;
waypoints[27].children[0] = 26;
waypoints[27].children[1] = 28;
waypoints[27].children[2] = 29;
waypoints[28] = spawnstruct();
waypoints[28].origin = (-730.137,871.643,11.2345);
waypoints[28].type = "stand";
waypoints[28].childCount = 2;
waypoints[28].children[0] = 27;
waypoints[28].children[1] = 31;
waypoints[29] = spawnstruct();
waypoints[29].origin = (-962.211,1196.61,5.24434);
waypoints[29].type = "stand";
waypoints[29].childCount = 2;
waypoints[29].children[0] = 27;
waypoints[29].children[1] = 30;
waypoints[30] = spawnstruct();
waypoints[30].origin = (-567.276,1271.91,4.05508);
waypoints[30].type = "stand";
waypoints[30].childCount = 3;
waypoints[30].children[0] = 29;
waypoints[30].children[1] = 31;
waypoints[30].children[2] = 32;
waypoints[31] = spawnstruct();
waypoints[31].origin = (-586.158,1045.79,7.32107);
waypoints[31].type = "stand";
waypoints[31].childCount = 2;
waypoints[31].children[0] = 30;
waypoints[31].children[1] = 28;
waypoints[32] = spawnstruct();
waypoints[32].origin = (-338.954,1316.85,-2.03107);
waypoints[32].type = "stand";
waypoints[32].childCount = 4;
waypoints[32].children[0] = 30;
waypoints[32].children[1] = 33;
waypoints[32].children[2] = 37;
waypoints[32].children[3] = 39;
waypoints[33] = spawnstruct();
waypoints[33].origin = (-281.942,1707.41,-1.875);
waypoints[33].type = "stand";
waypoints[33].childCount = 3;
waypoints[33].children[0] = 32;
waypoints[33].children[1] = 34;
waypoints[33].children[2] = 37;
waypoints[34] = spawnstruct();
waypoints[34].origin = (-6.74152,1920.84,-1.875);
waypoints[34].type = "stand";
waypoints[34].childCount = 3;
waypoints[34].children[0] = 33;
waypoints[34].children[1] = 35;
waypoints[34].children[2] = 38;
waypoints[35] = spawnstruct();
waypoints[35].origin = (323.083,1735.21,-3.87158);
waypoints[35].type = "stand";
waypoints[35].childCount = 4;
waypoints[35].children[0] = 34;
waypoints[35].children[1] = 36;
waypoints[35].children[2] = 38;
waypoints[35].children[3] = 104;
waypoints[36] = spawnstruct();
waypoints[36].origin = (382.238,1504.54,0.815162);
waypoints[36].type = "stand";
waypoints[36].childCount = 5;
waypoints[36].children[0] = 35;
waypoints[36].children[1] = 37;
waypoints[36].children[2] = 40;
waypoints[36].children[3] = 39;
waypoints[36].children[4] = 104;
waypoints[37] = spawnstruct();
waypoints[37].origin = (-26.8239,1469.4,18.1746);
waypoints[37].type = "stand";
waypoints[37].childCount = 5;
waypoints[37].children[0] = 36;
waypoints[37].children[1] = 33;
waypoints[37].children[2] = 38;
waypoints[37].children[3] = 32;
waypoints[37].children[4] = 39;
waypoints[38] = spawnstruct();
waypoints[38].origin = (116.04,1701.08,-1.875);
waypoints[38].type = "stand";
waypoints[38].childCount = 3;
waypoints[38].children[0] = 35;
waypoints[38].children[1] = 34;
waypoints[38].children[2] = 37;
waypoints[39] = spawnstruct();
waypoints[39].origin = (-8.94893,1299.2,8.125);
waypoints[39].type = "stand";
waypoints[39].childCount = 5;
waypoints[39].children[0] = 32;
waypoints[39].children[1] = 37;
waypoints[39].children[2] = 40;
waypoints[39].children[3] = 100;
waypoints[39].children[4] = 36;
waypoints[40] = spawnstruct();
waypoints[40].origin = (455.403,1263.83,0.80736);
waypoints[40].type = "stand";
waypoints[40].childCount = 4;
waypoints[40].children[0] = 39;
waypoints[40].children[1] = 36;
waypoints[40].children[2] = 41;
waypoints[40].children[3] = 42;
waypoints[41] = spawnstruct();
waypoints[41].origin = (597.815,952.998,0.125);
waypoints[41].type = "stand";
waypoints[41].childCount = 4;
waypoints[41].children[0] = 40;
waypoints[41].children[1] = 42;
waypoints[41].children[2] = 45;
waypoints[41].children[3] = 114;
waypoints[42] = spawnstruct();
waypoints[42].origin = (695.654,1285.26,0.633609);
waypoints[42].type = "stand";
waypoints[42].childCount = 5;
waypoints[42].children[0] = 40;
waypoints[42].children[1] = 41;
waypoints[42].children[2] = 43;
waypoints[42].children[3] = 105;
waypoints[42].children[4] = 106;
waypoints[43] = spawnstruct();
waypoints[43].origin = (1049.08,1175.52,0.125001);
waypoints[43].type = "stand";
waypoints[43].childCount = 3;
waypoints[43].children[0] = 42;
waypoints[43].children[1] = 44;
waypoints[43].children[2] = 106;
waypoints[44] = spawnstruct();
waypoints[44].origin = (1051.53,832.954,0.125001);
waypoints[44].type = "stand";
waypoints[44].childCount = 3;
waypoints[44].children[0] = 43;
waypoints[44].children[1] = 45;
waypoints[44].children[2] = 46;
waypoints[45] = spawnstruct();
waypoints[45].origin = (860.215,748.093,4.01932);
waypoints[45].type = "stand";
waypoints[45].childCount = 5;
waypoints[45].children[0] = 44;
waypoints[45].children[1] = 41;
waypoints[45].children[2] = 46;
waypoints[45].children[3] = 107;
waypoints[45].children[4] = 114;
waypoints[46] = spawnstruct();
waypoints[46].origin = (1115.09,663.253,16.125);
waypoints[46].type = "stand";
waypoints[46].childCount = 3;
waypoints[46].children[0] = 45;
waypoints[46].children[1] = 44;
waypoints[46].children[2] = 47;
waypoints[47] = spawnstruct();
waypoints[47].origin = (1119.5,467.566,184.125);
waypoints[47].type = "stand";
waypoints[47].childCount = 2;
waypoints[47].children[0] = 46;
waypoints[47].children[1] = 48;
waypoints[48] = spawnstruct();
waypoints[48].origin = (1054.24,383.648,184.125);
waypoints[48].type = "stand";
waypoints[48].childCount = 2;
waypoints[48].children[0] = 47;
waypoints[48].children[1] = 49;
waypoints[49] = spawnstruct();
waypoints[49].origin = (731.372,385.949,192.125);
waypoints[49].type = "stand";
waypoints[49].childCount = 3;
waypoints[49].children[0] = 48;
waypoints[49].children[1] = 50;
waypoints[49].children[2] = 51;
waypoints[50] = spawnstruct();
waypoints[50].origin = (645.881,551.47,192.125);
waypoints[50].type = "stand";
waypoints[50].childCount = 2;
waypoints[50].children[0] = 49;
waypoints[50].children[1] = 68;
waypoints[51] = spawnstruct();
waypoints[51].origin = (662.071,238.161,192.125);
waypoints[51].type = "stand";
waypoints[51].childCount = 2;
waypoints[51].children[0] = 49;
waypoints[51].children[1] = 52;
waypoints[52] = spawnstruct();
waypoints[52].origin = (660.251,-104.482,192.125);
waypoints[52].type = "stand";
waypoints[52].childCount = 3;
waypoints[52].children[0] = 51;
waypoints[52].children[1] = 54;
waypoints[52].children[2] = 53;
waypoints[53] = spawnstruct();
waypoints[53].origin = (735.331,-312.701,192.125);
waypoints[53].type = "stand";
waypoints[53].childCount = 3;
waypoints[53].children[0] = 54;
waypoints[53].children[1] = 52;
waypoints[53].children[2] = 55;
waypoints[54] = spawnstruct();
waypoints[54].origin = (646.806,-331.588,192.125);
waypoints[54].type = "stand";
waypoints[54].childCount = 3;
waypoints[54].children[0] = 52;
waypoints[54].children[1] = 53;
waypoints[54].children[2] = 57;
waypoints[55] = spawnstruct();
waypoints[55].origin = (759.845,-493.82,104.125);
waypoints[55].type = "stand";
waypoints[55].childCount = 2;
waypoints[55].children[0] = 53;
waypoints[55].children[1] = 56;
waypoints[56] = spawnstruct();
waypoints[56].origin = (675.205,-486.376,104.125);
waypoints[56].type = "stand";
waypoints[56].childCount = 2;
waypoints[56].children[0] = 55;
waypoints[56].children[1] = 1;
waypoints[57] = spawnstruct();
waypoints[57].origin = (626.279,-422.316,192.125);
waypoints[57].type = "stand";
waypoints[57].childCount = 2;
waypoints[57].children[0] = 54;
waypoints[57].children[1] = 58;
waypoints[58] = spawnstruct();
waypoints[58].origin = (366.824,-424.195,192.125);
waypoints[58].type = "stand";
waypoints[58].childCount = 2;
waypoints[58].children[0] = 59;
waypoints[58].children[1] = 57;
waypoints[59] = spawnstruct();
waypoints[59].origin = (-2.34399,-423.791,192.125);
waypoints[59].type = "stand";
waypoints[59].childCount = 2;
waypoints[59].children[0] = 60;
waypoints[59].children[1] = 58;
waypoints[60] = spawnstruct();
waypoints[60].origin = (-323.755,-417.004,192.125);
waypoints[60].type = "stand";
waypoints[60].childCount = 2;
waypoints[60].children[0] = 61;
waypoints[60].children[1] = 59;
waypoints[61] = spawnstruct();
waypoints[61].origin = (-702.528,-403.513,192.125);
waypoints[61].type = "stand";
waypoints[61].childCount = 2;
waypoints[61].children[0] = 60;
waypoints[61].children[1] = 62;
waypoints[62] = spawnstruct();
waypoints[62].origin = (-738.813,-298.498,192.125);
waypoints[62].type = "stand";
waypoints[62].childCount = 3;
waypoints[62].children[0] = 61;
waypoints[62].children[1] = 63;
waypoints[62].children[2] = 69;
waypoints[63] = spawnstruct();
waypoints[63].origin = (-670.498,1.26415,192.125);
waypoints[63].type = "stand";
waypoints[63].childCount = 2;
waypoints[63].children[0] = 62;
waypoints[63].children[1] = 64;
waypoints[64] = spawnstruct();
waypoints[64].origin = (-668.283,381.161,192.125);
waypoints[64].type = "stand";
waypoints[64].childCount = 2;
waypoints[64].children[0] = 63;
waypoints[64].children[1] = 21;
waypoints[65] = spawnstruct();
waypoints[65].origin = (-490.793,571.524,192.125);
waypoints[65].type = "stand";
waypoints[65].childCount = 2;
waypoints[65].children[0] = 21;
waypoints[65].children[1] = 66;
waypoints[66] = spawnstruct();
waypoints[66].origin = (-301.784,566.147,192.125);
waypoints[66].type = "stand";
waypoints[66].childCount = 2;
waypoints[66].children[0] = 65;
waypoints[66].children[1] = 67;
waypoints[67] = spawnstruct();
waypoints[67].origin = (14.7346,573.208,192.125);
waypoints[67].type = "stand";
waypoints[67].childCount = 2;
waypoints[67].children[0] = 66;
waypoints[67].children[1] = 68;
waypoints[68] = spawnstruct();
waypoints[68].origin = (305.039,571.19,192.125);
waypoints[68].type = "stand";
waypoints[68].childCount = 2;
waypoints[68].children[0] = 67;
waypoints[68].children[1] = 50;
waypoints[69] = spawnstruct();
waypoints[69].origin = (-865.677,-291.469,184.125);
waypoints[69].type = "stand";
waypoints[69].childCount = 2;
waypoints[69].children[0] = 62;
waypoints[69].children[1] = 70;
waypoints[70] = spawnstruct();
waypoints[70].origin = (-1125.46,-321.898,184.125);
waypoints[70].type = "stand";
waypoints[70].childCount = 2;
waypoints[70].children[0] = 69;
waypoints[70].children[1] = 71;
waypoints[71] = spawnstruct();
waypoints[71].origin = (-1106.26,-571.049,16.125);
waypoints[71].type = "stand";
waypoints[71].childCount = 4;
waypoints[71].children[0] = 70;
waypoints[71].children[1] = 72;
waypoints[71].children[2] = 75;
waypoints[71].children[3] = 110;
waypoints[72] = spawnstruct();
waypoints[72].origin = (-659.469,-730.962,16.125);
waypoints[72].type = "stand";
waypoints[72].childCount = 4;
waypoints[72].children[0] = 71;
waypoints[72].children[1] = 108;
waypoints[72].children[2] = 109;
waypoints[72].children[3] = 110;
waypoints[73] = spawnstruct();
waypoints[73].origin = (-646.755,-1255.77,16.125);
waypoints[73].type = "stand";
waypoints[73].childCount = 3;
waypoints[73].children[0] = 74;
waypoints[73].children[1] = 76;
waypoints[73].children[2] = 109;
waypoints[74] = spawnstruct();
waypoints[74].origin = (-876.086,-1248.7,16.125);
waypoints[74].type = "stand";
waypoints[74].childCount = 2;
waypoints[74].children[0] = 73;
waypoints[74].children[1] = 75;
waypoints[75] = spawnstruct();
waypoints[75].origin = (-965.944,-952.733,16.125);
waypoints[75].type = "stand";
waypoints[75].childCount = 2;
waypoints[75].children[0] = 74;
waypoints[75].children[1] = 71;
waypoints[76] = spawnstruct();
waypoints[76].origin = (-353.091,-1333.87,16.125);
waypoints[76].type = "stand";
waypoints[76].childCount = 3;
waypoints[76].children[0] = 73;
waypoints[76].children[1] = 77;
waypoints[76].children[2] = 79;
waypoints[77] = spawnstruct();
waypoints[77].origin = (-320.427,-1501.57,16.125);
waypoints[77].type = "stand";
waypoints[77].childCount = 2;
waypoints[77].children[0] = 76;
waypoints[77].children[1] = 78;
waypoints[78] = spawnstruct();
waypoints[78].origin = (-145.803,-1646.58,16.125);
waypoints[78].type = "stand";
waypoints[78].childCount = 5;
waypoints[78].children[0] = 77;
waypoints[78].children[1] = 4;
waypoints[78].children[2] = 3;
waypoints[78].children[3] = 5;
waypoints[78].children[4] = 79;
waypoints[79] = spawnstruct();
waypoints[79].origin = (-9.68692,-1389.69,17.0544);
waypoints[79].type = "stand";
waypoints[79].childCount = 6;
waypoints[79].children[0] = 5;
waypoints[79].children[1] = 78;
waypoints[79].children[2] = 76;
waypoints[79].children[3] = 6;
waypoints[79].children[4] = 7;
waypoints[79].children[5] = 82;
waypoints[80] = spawnstruct();
waypoints[80].origin = (945.134,-1299.76,16.125);
waypoints[80].type = "stand";
waypoints[80].childCount = 2;
waypoints[80].children[0] = 7;
waypoints[80].children[1] = 81;
waypoints[81] = spawnstruct();
waypoints[81].origin = (964.397,-912.064,16.2567);
waypoints[81].type = "stand";
waypoints[81].childCount = 3;
waypoints[81].children[0] = 80;
waypoints[81].children[1] = 9;
waypoints[81].children[2] = 8;
waypoints[82] = spawnstruct();
waypoints[82].origin = (24.8224,-1003.39,16.0088);
waypoints[82].type = "stand";
waypoints[82].childCount = 2;
waypoints[82].children[0] = 79;
waypoints[82].children[1] = 83;
waypoints[83] = spawnstruct();
waypoints[83].origin = (-34.5625,-682.197,16.0088);
waypoints[83].type = "stand";
waypoints[83].childCount = 2;
waypoints[83].children[0] = 82;
waypoints[83].children[1] = 84;
waypoints[84] = spawnstruct();
waypoints[84].origin = (25.6259,-447.97,16.0088);
waypoints[84].type = "stand";
waypoints[84].childCount = 5;
waypoints[84].children[0] = 83;
waypoints[84].children[1] = 85;
waypoints[84].children[2] = 86;
waypoints[84].children[3] = 89;
waypoints[84].children[4] = 90;
waypoints[85] = spawnstruct();
waypoints[85].origin = (318.792,-442.476,16.0088);
waypoints[85].type = "stand";
waypoints[85].childCount = 3;
waypoints[85].children[0] = 84;
waypoints[85].children[1] = 0;
waypoints[85].children[2] = 1;
waypoints[86] = spawnstruct();
waypoints[86].origin = (-218.847,-438.109,16.0088);
waypoints[86].type = "stand";
waypoints[86].childCount = 2;
waypoints[86].children[0] = 84;
waypoints[86].children[1] = 87;
waypoints[87] = spawnstruct();
waypoints[87].origin = (-693.322,-423.187,16.0088);
waypoints[87].type = "stand";
waypoints[87].childCount = 2;
waypoints[87].children[0] = 86;
waypoints[87].children[1] = 88;
waypoints[88] = spawnstruct();
waypoints[88].origin = (-708.497,-72.4109,16.0088);
waypoints[88].type = "stand";
waypoints[88].childCount = 2;
waypoints[88].children[0] = 87;
waypoints[88].children[1] = 24;
waypoints[89] = spawnstruct();
waypoints[89].origin = (-130.83,-223.262,0.125);
waypoints[89].type = "stand";
waypoints[89].childCount = 4;
waypoints[89].children[0] = 84;
waypoints[89].children[1] = 90;
waypoints[89].children[2] = 91;
waypoints[89].children[3] = 93;
waypoints[90] = spawnstruct();
waypoints[90].origin = (129.025,-178.039,0.125);
waypoints[90].type = "stand";
waypoints[90].childCount = 6;
waypoints[90].children[0] = 84;
waypoints[90].children[1] = 89;
waypoints[90].children[2] = 96;
waypoints[90].children[3] = 97;
waypoints[90].children[4] = 98;
waypoints[90].children[5] = 93;
waypoints[91] = spawnstruct();
waypoints[91].origin = (-496.043,-77.612,0.125);
waypoints[91].type = "stand";
waypoints[91].childCount = 4;
waypoints[91].children[0] = 89;
waypoints[91].children[1] = 23;
waypoints[91].children[2] = 22;
waypoints[91].children[3] = 93;
waypoints[92] = spawnstruct();
waypoints[92].origin = (-534.335,388.236,7.64728);
waypoints[92].type = "stand";
waypoints[92].childCount = 4;
waypoints[92].children[0] = 22;
waypoints[92].children[1] = 18;
waypoints[92].children[2] = 19;
waypoints[92].children[3] = 94;
waypoints[93] = spawnstruct();
waypoints[93].origin = (-199.832,96.0957,0.124999);
waypoints[93].type = "stand";
waypoints[93].childCount = 6;
waypoints[93].children[0] = 89;
waypoints[93].children[1] = 91;
waypoints[93].children[2] = 94;
waypoints[93].children[3] = 90;
waypoints[93].children[4] = 95;
waypoints[93].children[5] = 23;
waypoints[94] = spawnstruct();
waypoints[94].origin = (-122.751,283.863,0.124999);
waypoints[94].type = "stand";
waypoints[94].childCount = 5;
waypoints[94].children[0] = 93;
waypoints[94].children[1] = 17;
waypoints[94].children[2] = 92;
waypoints[94].children[3] = 22;
waypoints[94].children[4] = 95;
waypoints[95] = spawnstruct();
waypoints[95].origin = (104.783,261.223,0.125);
waypoints[95].type = "stand";
waypoints[95].childCount = 4;
waypoints[95].children[0] = 17;
waypoints[95].children[1] = 96;
waypoints[95].children[2] = 93;
waypoints[95].children[3] = 94;
waypoints[96] = spawnstruct();
waypoints[96].origin = (186.481,28.8222,0.125);
waypoints[96].type = "stand";
waypoints[96].childCount = 4;
waypoints[96].children[0] = 95;
waypoints[96].children[1] = 90;
waypoints[96].children[2] = 15;
waypoints[96].children[3] = 97;
waypoints[97] = spawnstruct();
waypoints[97].origin = (452.621,-79.9207,0.125);
waypoints[97].type = "stand";
waypoints[97].childCount = 4;
waypoints[97].children[0] = 15;
waypoints[97].children[1] = 90;
waypoints[97].children[2] = 98;
waypoints[97].children[3] = 96;
waypoints[98] = spawnstruct();
waypoints[98].origin = (538.879,-249.726,0.125);
waypoints[98].type = "stand";
waypoints[98].childCount = 3;
waypoints[98].children[0] = 97;
waypoints[98].children[1] = 11;
waypoints[98].children[2] = 90;
waypoints[99] = spawnstruct();
waypoints[99].origin = (-32.1886,797.337,16.125);
waypoints[99].type = "stand";
waypoints[99].childCount = 2;
waypoints[99].children[0] = 17;
waypoints[99].children[1] = 100;
waypoints[100] = spawnstruct();
waypoints[100].origin = (24.8883,1097.62,16.125);
waypoints[100].type = "stand";
waypoints[100].childCount = 2;
waypoints[100].children[0] = 99;
waypoints[100].children[1] = 39;
waypoints[101] = spawnstruct();
waypoints[101].origin = (-942.212,-139.769,16.125);
waypoints[101].type = "stand";
waypoints[101].childCount = 1;
waypoints[101].children[0] = 25;
waypoints[102] = spawnstruct();
waypoints[102].origin = (961.552,255.482,15.3501);
waypoints[102].type = "stand";
waypoints[102].childCount = 1;
waypoints[102].children[0] = 12;
waypoints[103] = spawnstruct();
waypoints[103].origin = (655.375,-317.287,16.125);
waypoints[103].type = "stand";
waypoints[103].childCount = 1;
waypoints[103].children[0] = 11;
waypoints[104] = spawnstruct();
waypoints[104].origin = (431.222,1608.22,3.50296);
waypoints[104].type = "stand";
waypoints[104].childCount = 2;
waypoints[104].children[0] = 35;
waypoints[104].children[1] = 36;
waypoints[105] = spawnstruct();
waypoints[105].origin = (962.756,1433.83,0.748573);
waypoints[105].type = "stand";
waypoints[105].childCount = 2;
waypoints[105].children[0] = 42;
waypoints[105].children[1] = 106;
waypoints[106] = spawnstruct();
waypoints[106].origin = (897.747,1288.22,0.400695);
waypoints[106].type = "stand";
waypoints[106].childCount = 3;
waypoints[106].children[0] = 105;
waypoints[106].children[1] = 42;
waypoints[106].children[2] = 43;
waypoints[107] = spawnstruct();
waypoints[107].origin = (749.668,687.343,11.8986);
waypoints[107].type = "stand";
waypoints[107].childCount = 2;
waypoints[107].children[0] = 45;
waypoints[107].children[1] = 114;
waypoints[108] = spawnstruct();
waypoints[108].origin = (-500.519,-952.662,16.125);
waypoints[108].type = "stand";
waypoints[108].childCount = 2;
waypoints[108].children[0] = 72;
waypoints[108].children[1] = 109;
waypoints[109] = spawnstruct();
waypoints[109].origin = (-634.56,-1027.6,16.125);
waypoints[109].type = "stand";
waypoints[109].childCount = 3;
waypoints[109].children[0] = 73;
waypoints[109].children[1] = 108;
waypoints[109].children[2] = 72;
waypoints[110] = spawnstruct();
waypoints[110].origin = (-612.432,-586.304,16.125);
waypoints[110].type = "stand";
waypoints[110].childCount = 2;
waypoints[110].children[0] = 72;
waypoints[110].children[1] = 71;
waypoints[111] = spawnstruct();
waypoints[111].origin = (-349.851,-1829.05,16.125);
waypoints[111].type = "stand";
waypoints[111].childCount = 1;
waypoints[111].children[0] = 4;
waypoints[112] = spawnstruct();
waypoints[112].origin = (375.916,807.075,104.125);
waypoints[112].type = "stand";
waypoints[112].childCount = 1;
waypoints[112].children[0] = 113;
waypoints[113] = spawnstruct();
waypoints[113].origin = (447.038,801.978,100.352);
waypoints[113].type = "stand";
waypoints[113].childCount = 2;
waypoints[113].children[0] = 112;
waypoints[113].children[1] = 114;
waypoints[114] = spawnstruct();
waypoints[114].origin = (651.898,799.593,0.124998);
waypoints[114].type = "stand";
waypoints[114].childCount = 4;
waypoints[114].children[0] = 113;
waypoints[114].children[1] = 41;
waypoints[114].children[2] = 107;
waypoints[114].children[3] = 45;
return waypoints;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,26 @@
bota
botb
botc
botd
bote
botf
botg
both
boti
botj
botk
botl
botm
botn
boto
botp
botq
botr
bots
bott
botu
botv
botw
botx
boty
botz

View File

@ -0,0 +1 @@
start "" "%~dp0cod4x18_dedrun.exe" +set dedicated "1" +set sv_maxclients "64" +set sv_punkbuster "0" +set net_port "28965" +set fs_game "mods/bots" +exec localbotserver.cfg +loadplugin httpget +map_rotate

View File

@ -0,0 +1 @@
start "" "%~dp0iw3mp.exe" +connect 127.0.0.1:28965

60
out/readme.txt Normal file
View File

@ -0,0 +1,60 @@
# CoD4x Bot Warfare
Bot Warfare is a GSC mod for the CoD4x project.
It aims to add playable AI to the multiplayer games of CoD4.
You can find the more information at the Git Repo: https://github.com/ineedbots/cod4x_bot_warfare
**Important to public dedicated servers**
The 'bots_main_firstIsHost' DVAR is enabled by default!
This is so inexperienced users of the mod can access with menu without any configuration.
Make sure to disable this DVAR by adding 'set bots_main_firstIsHost 0' in your server config!
## Installation
0. Make sure that CoD4x server + client is installed, updated and working properly.
- Go to https://cod4x.me/ and download the Windows Server zip file. Move the contents of 'cod4x-windows-server' into your CoD4 game folder.
1. Locate your CoD4x server install folder.
2. Move the files/folders found in 'Add to root of CoD4x server' from the Bot Warfare release archive you downloaded to the root of your CoD4x server folder.
- The folder/file structure should follow as '.CoD4x server folder\main_shared\maps\mp\bots\_bot.gsc'.
3. The mod is now installed.
- You can use the z_localserver.bat to start a local server.
- You can use the z_playserver.bat to join the local server and play!
## Documentation
### Menu Usage
- You can open the menu by pressing the primary grenade and secondary grenade buttons together.
- You can navigate the options by the pressing the ADS and fire keys, and you can select options by pressing your melee key.
- Pressing the menu button again closes menus.
## Changelog
- v2.0.1
- Reduced bots crouching
- Increased bots sprinting
- Improved bots mantling, crouching and knifing glass when needed
- Fixed possible script runtime errors
- Improved domination
- Bots use explosives more if they have it
- Bots aim slower when ads'ing
- Fixed bots holding breath
- Fixed bots rubberbanding movement when their goal changes
- Added bots quickscoping with snipers
- Added bots reload canceling and fast swaps
- Bots use C4
- Improved revenge
- Bots can swap weapons on spawn more likely
- v2.0.0
- Initial reboot release
## Credits
- CoD4x Team - https://github.com/callofduty4x/CoD4x_Server
- INeedGames(me) - http://www.moddb.com/mods/bot-warfare
- PeZBot team - http://www.moddb.com/mods/pezbot
- Ability
- Salvation
Feel free to use code, host on other sites, host on servers, mod it and merge mods with it, just give credit where credit is due!
-INeedGames/INeedBot(s) @ ineedbots@outlook.com

BIN
out/ss.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB