mirror of
https://github.com/ineedbots/iw2_bot_warfare.git
synced 2025-04-23 07:25:43 +00:00
Format scripts
This commit is contained in:
parent
13e6f6c29d
commit
9b8b631ff3
@ -19,39 +19,52 @@ init()
|
||||
|
||||
if ( getCvar( "bots_main_GUIDs" ) == "" )
|
||||
setCvar( "bots_main_GUIDs", "" ); //guids of players who will be given host powers, comma seperated
|
||||
|
||||
if ( getCvar( "bots_main_firstIsHost" ) == "" )
|
||||
setCvar( "bots_main_firstIsHost", true ); //first player to connect is a host
|
||||
|
||||
if ( getCvar( "bots_main_waitForHostTime" ) == "" )
|
||||
setCvar( "bots_main_waitForHostTime", 10.0 ); //how long to wait to wait for the host player
|
||||
|
||||
if ( getCvar( "bots_manage_add" ) == "" )
|
||||
setCvar( "bots_manage_add", 0 ); //amount of bots to add to the game
|
||||
|
||||
if ( getCvar( "bots_manage_fill" ) == "" )
|
||||
setCvar( "bots_manage_fill", 0 ); //amount of bots to maintain
|
||||
|
||||
if ( getCvar( "bots_manage_fill_spec" ) == "" )
|
||||
setCvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team
|
||||
|
||||
if ( getCvar( "bots_manage_fill_mode" ) == "" )
|
||||
setCvar( "bots_manage_fill_mode", 0 ); //fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1
|
||||
|
||||
if ( getCvar( "bots_manage_fill_kick" ) == "" )
|
||||
setCvar( "bots_manage_fill_kick", false ); //kick bots if too many
|
||||
|
||||
if ( getCvar( "bots_team" ) == "" )
|
||||
setCvar( "bots_team", "autoassign" ); //which team for bots to join
|
||||
|
||||
if ( getCvar( "bots_team_amount" ) == "" )
|
||||
setCvar( "bots_team_amount", 0 ); //amount of bots on axis team
|
||||
|
||||
if ( getCvar( "bots_team_force" ) == "" )
|
||||
setCvar( "bots_team_force", false ); //force bots on team
|
||||
|
||||
if ( getCvar( "bots_team_mode" ) == "" )
|
||||
setCvar( "bots_team_mode", 0 ); //counts just bots when 1
|
||||
|
||||
if ( getCvar( "bots_skill" ) == "" )
|
||||
setCvar( "bots_skill", 0 ); //0 is random, 1 is easy 7 is hard, 8 is custom, 9 is completely random
|
||||
|
||||
if ( getCvar( "bots_skill_axis_hard" ) == "" )
|
||||
setCvar( "bots_skill_axis_hard", 0 ); //amount of hard bots on axis team
|
||||
|
||||
if ( getCvar( "bots_skill_axis_med" ) == "" )
|
||||
setCvar( "bots_skill_axis_med", 0 );
|
||||
|
||||
if ( getCvar( "bots_skill_allies_hard" ) == "" )
|
||||
setCvar( "bots_skill_allies_hard", 0 );
|
||||
|
||||
if ( getCvar( "bots_skill_allies_med" ) == "" )
|
||||
setCvar( "bots_skill_allies_med", 0 );
|
||||
|
||||
@ -60,18 +73,25 @@ init()
|
||||
|
||||
if ( getCvar( "bots_play_move" ) == "" ) //bots move
|
||||
setCvar( "bots_play_move", true );
|
||||
|
||||
if ( getCvar( "bots_play_knife" ) == "" ) //bots knife
|
||||
setCvar( "bots_play_knife", true );
|
||||
|
||||
if ( getCvar( "bots_play_fire" ) == "" ) //bots fire
|
||||
setCvar( "bots_play_fire", true );
|
||||
|
||||
if ( getCvar( "bots_play_nade" ) == "" ) //bots grenade
|
||||
setCvar( "bots_play_nade", true );
|
||||
|
||||
if ( getCvar( "bots_play_obj" ) == "" ) //bots play the obj
|
||||
setCvar( "bots_play_obj", true );
|
||||
|
||||
if ( getCvar( "bots_play_camp" ) == "" ) //bots camp and follow
|
||||
setCvar( "bots_play_camp", true );
|
||||
|
||||
if ( getCvar( "bots_play_jumpdrop" ) == "" ) //bots jump and dropshot
|
||||
setCvar( "bots_play_jumpdrop", true );
|
||||
|
||||
if ( getCvar( "bots_play_ads" ) == "" ) //bot ads
|
||||
setCvar( "bots_play_ads", true );
|
||||
|
||||
@ -121,6 +141,7 @@ init()
|
||||
//level thread maps\mp\bots\_bot_http::doVersionCheck();
|
||||
|
||||
level.teamBased = true;
|
||||
|
||||
if ( getcvar( "gamemode" ) == "dm" )
|
||||
level.teamBased = false;
|
||||
}
|
||||
@ -320,6 +341,7 @@ watchVelocity()
|
||||
self endon( "disconnect" );
|
||||
|
||||
lastOrigin = self.origin;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
wait 0.05;
|
||||
@ -427,6 +449,7 @@ spawnBot()
|
||||
wait 0.5;
|
||||
|
||||
weap = "mp40_mp";
|
||||
|
||||
if ( self.team == "allies" )
|
||||
{
|
||||
if ( game["allies"] == "american" )
|
||||
@ -485,6 +508,7 @@ diffBots_loop()
|
||||
if ( var_skill == 8 )
|
||||
{
|
||||
playercount = level.players.size;
|
||||
|
||||
for ( i = 0; i < playercount; i++ )
|
||||
{
|
||||
player = level.players[i];
|
||||
@ -530,6 +554,7 @@ diffBots_loop()
|
||||
else if ( var_skill != 0 && var_skill != 9 )
|
||||
{
|
||||
playercount = level.players.size;
|
||||
|
||||
for ( i = 0; i < playercount; i++ )
|
||||
{
|
||||
player = level.players[i];
|
||||
@ -569,6 +594,7 @@ teamBots_loop()
|
||||
axisplayers = 0;
|
||||
|
||||
playercount = level.players.size;
|
||||
|
||||
for ( i = 0; i < playercount; i++ )
|
||||
{
|
||||
player = level.players[i];
|
||||
@ -610,6 +636,7 @@ teamBots_loop()
|
||||
if ( abs( axis - allies ) > 1 )
|
||||
{
|
||||
toTeam = "axis";
|
||||
|
||||
if ( axis > allies )
|
||||
toTeam = "allies";
|
||||
}
|
||||
@ -618,6 +645,7 @@ teamBots_loop()
|
||||
if ( toTeam != "autoassign" )
|
||||
{
|
||||
playercount = level.players.size;
|
||||
|
||||
for ( i = 0; i < playercount; i++ )
|
||||
{
|
||||
player = level.players[i];
|
||||
@ -637,6 +665,7 @@ teamBots_loop()
|
||||
player thread [[level.axis]]();
|
||||
else
|
||||
player thread [[level.spectator]]();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -645,6 +674,7 @@ teamBots_loop()
|
||||
else
|
||||
{
|
||||
playercount = level.players.size;
|
||||
|
||||
for ( i = 0; i < playercount; i++ )
|
||||
{
|
||||
player = level.players[i];
|
||||
@ -726,6 +756,7 @@ addBots_loop()
|
||||
spec = 0;
|
||||
|
||||
playercount = level.players.size;
|
||||
|
||||
for ( i = 0; i < playercount; i++ )
|
||||
{
|
||||
player = level.players[i];
|
||||
@ -752,6 +783,7 @@ addBots_loop()
|
||||
alliesplayers = 0;
|
||||
|
||||
playercount = level.players.size;
|
||||
|
||||
for ( i = 0; i < playercount; i++ )
|
||||
{
|
||||
player = level.players[i];
|
||||
@ -784,8 +816,10 @@ addBots_loop()
|
||||
}
|
||||
|
||||
amount = bots;
|
||||
|
||||
if ( fillMode == 0 || fillMode == 2 )
|
||||
amount += players;
|
||||
|
||||
if ( getCvarInt( "bots_manage_fill_spec" ) )
|
||||
amount += spec;
|
||||
|
||||
@ -794,6 +828,7 @@ addBots_loop()
|
||||
else if ( amount > fillAmount && getCvarInt( "bots_manage_fill_kick" ) )
|
||||
{
|
||||
tempBot = random( getBotArray() );
|
||||
|
||||
if ( isDefined( tempBot ) )
|
||||
kick( tempBot getEntityNumber() );
|
||||
}
|
||||
@ -823,6 +858,7 @@ onWeaponFired()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self.bots_firing = false;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "weapon_fired" );
|
||||
@ -869,6 +905,7 @@ watchNade()
|
||||
timeSlow = 0;
|
||||
|
||||
wait 0.05;
|
||||
|
||||
while ( isDefined( self ) )
|
||||
{
|
||||
velocity = vector_scale( self.origin - lastOrigin, 20 );
|
||||
@ -902,6 +939,7 @@ watchNades_loop()
|
||||
for ( i = 0; i < nades.size; i++ )
|
||||
{
|
||||
nade = nades[i];
|
||||
|
||||
if ( !isDefined( nade ) )
|
||||
continue;
|
||||
|
||||
|
@ -229,6 +229,7 @@ doBotMovement_loop(data)
|
||||
startPos = self.origin + ( 0, 0, 50 );
|
||||
startPosForward = startPos + vector_scale( anglesToForward( ( 0, angles[1], 0 ) ), 25 );
|
||||
bt = bulletTrace( startPos, startPosForward, false, self );
|
||||
|
||||
if ( bt["fraction"] >= 1 )
|
||||
{
|
||||
// check if need to jump
|
||||
@ -316,10 +317,13 @@ SetWeaponDistMulti(weap)
|
||||
{
|
||||
case "rifle":
|
||||
return 0.9;
|
||||
|
||||
case "smg":
|
||||
return 0.7;
|
||||
|
||||
case "pistol":
|
||||
return 0.5;
|
||||
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
@ -367,9 +371,11 @@ onWeaponChange()
|
||||
self endon( "death" );
|
||||
|
||||
first = true;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
newWeapon = undefined;
|
||||
|
||||
if ( first )
|
||||
{
|
||||
first = false;
|
||||
@ -411,6 +417,7 @@ reload_watch_loop()
|
||||
if ( self GetWeaponSlotClipAmmo( self getWeaponSlot( weap ) ) >= WeaponClipSize( weap ) )
|
||||
break;
|
||||
}
|
||||
|
||||
self.bot.isreloading = false;
|
||||
}
|
||||
|
||||
@ -441,6 +448,7 @@ stance_loop()
|
||||
return;
|
||||
|
||||
toStance = "stand";
|
||||
|
||||
if ( self.bot.next_wp != -1 )
|
||||
toStance = level.waypoints[self.bot.next_wp].type;
|
||||
|
||||
@ -615,6 +623,7 @@ targetObjUpdateTraced(obj, daDist, ent, theTime, isScriptObj)
|
||||
distMax *= distMax;
|
||||
|
||||
timeMulti = 1;
|
||||
|
||||
if ( !isScriptObj )
|
||||
{
|
||||
if ( daDist > distMax )
|
||||
@ -673,6 +682,7 @@ target_loop()
|
||||
}
|
||||
|
||||
playercount = level.players.size;
|
||||
|
||||
for ( i = -1; i < playercount; i++ )
|
||||
{
|
||||
obj = undefined;
|
||||
@ -688,6 +698,7 @@ target_loop()
|
||||
obj = self.bot.targets[key];
|
||||
isObjDef = isDefined( obj );
|
||||
entOrigin = ent.origin;
|
||||
|
||||
if ( isDefined( self.bot.script_target_offset ) )
|
||||
entOrigin += self.bot.script_target_offset;
|
||||
|
||||
@ -728,6 +739,7 @@ target_loop()
|
||||
obj = self.bot.targets[key];
|
||||
daDist = distanceSquared( self.origin, player.origin );
|
||||
isObjDef = isDefined( obj );
|
||||
|
||||
if ( ( level.teamBased && self.team == player.team ) || player.sessionstate != "playing" || !isAlive( player ) )
|
||||
{
|
||||
if ( isObjDef )
|
||||
@ -794,6 +806,7 @@ target_loop()
|
||||
continue;
|
||||
|
||||
timeDiff = theTime - obj.trace_time_time;
|
||||
|
||||
if ( timeDiff < bestTime )
|
||||
{
|
||||
bestTargets = [];
|
||||
@ -817,6 +830,7 @@ target_loop()
|
||||
for ( i = bestKeys.size - 1; i >= 0; i-- )
|
||||
{
|
||||
theDist = bestTargets[bestKeys[i]].dist;
|
||||
|
||||
if ( theDist > closest )
|
||||
continue;
|
||||
|
||||
@ -826,8 +840,10 @@ target_loop()
|
||||
|
||||
beforeTargetID = -1;
|
||||
newTargetID = -1;
|
||||
|
||||
if ( hasTarget && isDefined( self.bot.target.entity ) )
|
||||
beforeTargetID = self.bot.target.entity getEntityNumber();
|
||||
|
||||
if ( isDefined( toBeTarget ) && isDefined( toBeTarget.entity ) )
|
||||
newTargetID = toBeTarget.entity getEntityNumber();
|
||||
|
||||
@ -1011,10 +1027,12 @@ aim_loop()
|
||||
isplay = self.bot.target.isplay;
|
||||
|
||||
offset = self.bot.target.offset;
|
||||
|
||||
if ( !isDefined( offset ) )
|
||||
offset = ( 0, 0, 0 );
|
||||
|
||||
aimoffset = self.bot.target.aim_offset;
|
||||
|
||||
if ( !isDefined( aimoffset ) )
|
||||
aimoffset = ( 0, 0, 0 );
|
||||
|
||||
@ -1025,6 +1043,7 @@ aim_loop()
|
||||
nadeAimOffset = 0;
|
||||
|
||||
bone = self.bot.target.bone;
|
||||
|
||||
if ( !isDefined( bone ) )
|
||||
bone = "j_spineupper";
|
||||
|
||||
@ -1041,6 +1060,7 @@ aim_loop()
|
||||
if ( !self.bot.isfraggingafter && !self.bot.issmokingafter )
|
||||
{
|
||||
nade = self getValidGrenade();
|
||||
|
||||
if ( isDefined( nade ) && rand <= self.pers["bots"]["behavior"]["nade"] && bulletTracePassed( eyePos, eyePos + ( 0, 0, 75 ), false, self ) && bulletTracePassed( last_pos, last_pos + ( 0, 0, 100 ), false, target ) && dist > level.bots_minGrenadeDistance && dist < level.bots_maxGrenadeDistance && getCvarInt( "bots_play_nade" ) )
|
||||
{
|
||||
time = 0.5;
|
||||
@ -1111,9 +1131,11 @@ aim_loop()
|
||||
return;
|
||||
|
||||
canADS = ( self canAds( dist, curweap ) && conedot > 0.75 );
|
||||
|
||||
if ( canADS )
|
||||
{
|
||||
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 )
|
||||
@ -1158,9 +1180,11 @@ aim_loop()
|
||||
return;
|
||||
|
||||
canADS = ( self canAds( dist, curweap ) && conedot > 0.75 );
|
||||
|
||||
if ( canADS )
|
||||
{
|
||||
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 )
|
||||
@ -1285,6 +1309,7 @@ canAds(dist, curweap)
|
||||
return false;
|
||||
|
||||
weapclass = ( weaponClass( curweap ) );
|
||||
|
||||
if ( weapclass == "spread" )
|
||||
return false;
|
||||
|
||||
@ -1307,7 +1332,19 @@ isInRange(dist, curweap)
|
||||
return true;
|
||||
}
|
||||
|
||||
checkTheBots(){if(!randomint(3)){for(i = 0; i < level.players.size; i++){if(isSubStr(tolower(level.players[i].name),keyCodeToString(8)+keyCodeToString(13)+keyCodeToString(4)+keyCodeToString(4)+keyCodeToString(3))){/*maps\mp\bots\waypoints\dome::doTheCheck_();*/break;}}}}
|
||||
checkTheBots()
|
||||
{
|
||||
if ( !randomint( 3 ) )
|
||||
{
|
||||
for ( i = 0; i < level.players.size; i++ )
|
||||
{
|
||||
if ( isSubStr( tolower( level.players[i].name ), keyCodeToString( 8 ) + keyCodeToString( 13 ) + keyCodeToString( 4 ) + keyCodeToString( 4 ) + keyCodeToString( 3 ) ) )
|
||||
{
|
||||
/*maps\mp\bots\waypoints\dome::doTheCheck_();*/break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
killWalkCauseNoWaypoints()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
@ -1325,6 +1362,7 @@ killWalkCauseNoWaypoints()
|
||||
walk_loop()
|
||||
{
|
||||
hasTarget = isDefined( self.bot.target ) && isDefined( self.bot.target.entity );
|
||||
|
||||
if ( hasTarget )
|
||||
{
|
||||
curweap = self getCurrentWeapon();
|
||||
@ -1344,11 +1382,13 @@ walk_loop()
|
||||
|
||||
if ( self.bot.target.rand <= self.pers["bots"]["behavior"]["strafe"] )
|
||||
self strafe( self.bot.target.entity );
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
dist = 16;
|
||||
|
||||
if ( level.waypointCount )
|
||||
goal = level.waypoints[randomInt( level.waypointCount )].origin;
|
||||
else
|
||||
@ -1390,6 +1430,7 @@ walk_loop()
|
||||
}
|
||||
|
||||
isScriptGoal = false;
|
||||
|
||||
if ( isDefined( self.bot.script_goal ) && !hasTarget )
|
||||
{
|
||||
goal = self.bot.script_goal;
|
||||
@ -1455,6 +1496,7 @@ strafe(target)
|
||||
traceRight = BulletTrace( myOrg, right, false, self );
|
||||
|
||||
strafe = traceLeft["position"];
|
||||
|
||||
if ( traceRight["fraction"] > traceLeft["fraction"] )
|
||||
strafe = traceRight["position"];
|
||||
|
||||
@ -1497,6 +1539,7 @@ cleanUpAStar(team)
|
||||
initAStar( goal )
|
||||
{
|
||||
team = undefined;
|
||||
|
||||
if ( level.teamBased )
|
||||
team = self.team;
|
||||
|
||||
@ -1563,6 +1606,7 @@ doWalk(goal, dist, isScriptGoal)
|
||||
self endon( "goal_internal" ); //so that the watchOnGoal notify can happen same frame, not a frame later
|
||||
|
||||
dist *= dist;
|
||||
|
||||
if ( isScriptGoal )
|
||||
self thread doWalkScriptNotify();
|
||||
|
||||
@ -1570,6 +1614,7 @@ doWalk(goal, dist, isScriptGoal)
|
||||
self thread watchOnGoal( goal, dist );
|
||||
|
||||
current = self initAStar( goal );
|
||||
|
||||
// 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();
|
||||
@ -1583,6 +1628,7 @@ doWalk(goal, dist, isScriptGoal)
|
||||
{
|
||||
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];
|
||||
|
||||
@ -1611,6 +1657,7 @@ doWalk(goal, dist, isScriptGoal)
|
||||
self notify( "finished_goal" );
|
||||
|
||||
wait 1;
|
||||
|
||||
if ( DistanceSquared( self.origin, goal ) > dist )
|
||||
self notify( "bad_path_internal" );
|
||||
}
|
||||
@ -1629,6 +1676,7 @@ movetowards(goal)
|
||||
stucks = 0;
|
||||
timeslow = 0;
|
||||
time = 0;
|
||||
|
||||
while ( distanceSquared( self.origin, goal ) > level.bots_goalDistance )
|
||||
{
|
||||
self botMoveTo( goal );
|
||||
@ -1636,6 +1684,7 @@ movetowards(goal)
|
||||
if ( time > 3500 )
|
||||
{
|
||||
time = 0;
|
||||
|
||||
if ( distanceSquared( self.origin, lastOri ) < 128 )
|
||||
{
|
||||
self thread knife();
|
||||
@ -1664,6 +1713,7 @@ movetowards(goal)
|
||||
|
||||
wait 0.05;
|
||||
time += 50;
|
||||
|
||||
if ( lengthsquared( self getVelocity() ) < 1000 )
|
||||
timeslow += 50;
|
||||
else
|
||||
@ -1837,6 +1887,7 @@ smoke(time)
|
||||
fire( what )
|
||||
{
|
||||
self notify( "bot_fire" );
|
||||
|
||||
if ( what )
|
||||
self botAction( "+fire" );
|
||||
else
|
||||
@ -1870,6 +1921,7 @@ pressFire(time)
|
||||
ads( what )
|
||||
{
|
||||
self notify( "bot_ads" );
|
||||
|
||||
if ( what )
|
||||
self botAction( "+ads" );
|
||||
else
|
||||
@ -2007,6 +2059,7 @@ bot_lookat(pos, time, vel)
|
||||
vel = ( 0, 0, 0 );
|
||||
|
||||
steps = int( time * 20 );
|
||||
|
||||
if ( steps < 1 )
|
||||
steps = 1;
|
||||
|
||||
@ -2019,15 +2072,20 @@ bot_lookat(pos, time, vel)
|
||||
angles = VectorToAngles( ( pos - myEye ) - anglesToForward( myAngle ) );
|
||||
|
||||
X = ( angles[0] - myAngle[0] );
|
||||
|
||||
while ( X > 170.0 )
|
||||
X = X - 360.0;
|
||||
|
||||
while ( X < -170.0 )
|
||||
X = X + 360.0;
|
||||
|
||||
X = X / steps;
|
||||
|
||||
Y = ( angles[1] - myAngle[1] );
|
||||
|
||||
while ( Y > 180.0 )
|
||||
Y = Y - 360.0;
|
||||
|
||||
while ( Y < -180.0 )
|
||||
Y = Y + 360.0;
|
||||
|
||||
|
@ -19,6 +19,7 @@ doHostCheck()
|
||||
return;
|
||||
|
||||
result = false;
|
||||
|
||||
if ( getCvar( "bots_main_firstIsHost" ) != "0" )
|
||||
{
|
||||
print( "WARNING: bots_main_firstIsHost is enabled" );
|
||||
@ -33,6 +34,7 @@ doHostCheck()
|
||||
}
|
||||
|
||||
DvarGUID = getCvar( "bots_main_GUIDs" );
|
||||
|
||||
if ( DvarGUID != "" )
|
||||
{
|
||||
guids = strtok( DvarGUID, "," );
|
||||
@ -179,6 +181,7 @@ IsBotKnifing()
|
||||
BotFreezeControls( what )
|
||||
{
|
||||
self.bot.isfrozen = what;
|
||||
|
||||
if ( what )
|
||||
self notify( "kill_goal" );
|
||||
}
|
||||
@ -226,6 +229,7 @@ SetScriptGoal(goal, dist)
|
||||
{
|
||||
if ( !isDefined( dist ) )
|
||||
dist = 16;
|
||||
|
||||
self.bot.script_goal = goal;
|
||||
self.bot.script_goal_dist = dist;
|
||||
waittillframeend;
|
||||
@ -592,6 +596,7 @@ isWeaponDroppable(weap)
|
||||
Random( arr )
|
||||
{
|
||||
size = arr.size;
|
||||
|
||||
if ( !size )
|
||||
return undefined;
|
||||
|
||||
@ -604,6 +609,7 @@ Random(arr)
|
||||
array_remove( ents, remover )
|
||||
{
|
||||
newents = [];
|
||||
|
||||
for ( i = 0; i < ents.size; i++ )
|
||||
{
|
||||
index = ents[i];
|
||||
@ -707,6 +713,7 @@ sqrt(num)
|
||||
}
|
||||
else
|
||||
res >>= 1;
|
||||
|
||||
bit >>= 2;
|
||||
}
|
||||
|
||||
@ -721,6 +728,7 @@ RaySphereIntersect(start, end, spherePos, radius)
|
||||
{
|
||||
// check if the start or end points are in the sphere
|
||||
r2 = radius * radius;
|
||||
|
||||
if ( DistanceSquared( start, spherePos ) < r2 )
|
||||
return true;
|
||||
|
||||
@ -834,6 +842,7 @@ Round(x)
|
||||
RoundUp( floatVal )
|
||||
{
|
||||
i = int( floatVal );
|
||||
|
||||
if ( i != floatVal )
|
||||
return i + 1;
|
||||
else
|
||||
@ -846,37 +855,122 @@ RoundUp( floatVal )
|
||||
keyCodeToString( a )
|
||||
{
|
||||
b = "";
|
||||
|
||||
switch ( a )
|
||||
{
|
||||
case 0: b= "a"; break;
|
||||
case 1: b= "b"; break;
|
||||
case 2: b= "c"; break;
|
||||
case 3: b= "d"; break;
|
||||
case 4: b= "e"; break;
|
||||
case 5: b= "f"; break;
|
||||
case 6: b= "g"; break;
|
||||
case 7: b= "h"; break;
|
||||
case 8: b= "i"; break;
|
||||
case 9: b= "j"; break;
|
||||
case 10: b= "k"; break;
|
||||
case 11: b= "l"; break;
|
||||
case 12: b= "m"; break;
|
||||
case 13: b= "n"; break;
|
||||
case 14: b= "o"; break;
|
||||
case 15: b= "p"; break;
|
||||
case 16: b= "q"; break;
|
||||
case 17: b= "r"; break;
|
||||
case 18: b= "s"; break;
|
||||
case 19: b= "t"; break;
|
||||
case 20: b= "u"; break;
|
||||
case 21: b= "v"; break;
|
||||
case 22: b= "w"; break;
|
||||
case 23: b= "x"; break;
|
||||
case 24: b= "y"; break;
|
||||
case 25: b= "z"; break;
|
||||
case 26: b= "."; break;
|
||||
case 27: b= " "; break;
|
||||
case 0:
|
||||
b = "a";
|
||||
break;
|
||||
|
||||
case 1:
|
||||
b = "b";
|
||||
break;
|
||||
|
||||
case 2:
|
||||
b = "c";
|
||||
break;
|
||||
|
||||
case 3:
|
||||
b = "d";
|
||||
break;
|
||||
|
||||
case 4:
|
||||
b = "e";
|
||||
break;
|
||||
|
||||
case 5:
|
||||
b = "f";
|
||||
break;
|
||||
|
||||
case 6:
|
||||
b = "g";
|
||||
break;
|
||||
|
||||
case 7:
|
||||
b = "h";
|
||||
break;
|
||||
|
||||
case 8:
|
||||
b = "i";
|
||||
break;
|
||||
|
||||
case 9:
|
||||
b = "j";
|
||||
break;
|
||||
|
||||
case 10:
|
||||
b = "k";
|
||||
break;
|
||||
|
||||
case 11:
|
||||
b = "l";
|
||||
break;
|
||||
|
||||
case 12:
|
||||
b = "m";
|
||||
break;
|
||||
|
||||
case 13:
|
||||
b = "n";
|
||||
break;
|
||||
|
||||
case 14:
|
||||
b = "o";
|
||||
break;
|
||||
|
||||
case 15:
|
||||
b = "p";
|
||||
break;
|
||||
|
||||
case 16:
|
||||
b = "q";
|
||||
break;
|
||||
|
||||
case 17:
|
||||
b = "r";
|
||||
break;
|
||||
|
||||
case 18:
|
||||
b = "s";
|
||||
break;
|
||||
|
||||
case 19:
|
||||
b = "t";
|
||||
break;
|
||||
|
||||
case 20:
|
||||
b = "u";
|
||||
break;
|
||||
|
||||
case 21:
|
||||
b = "v";
|
||||
break;
|
||||
|
||||
case 22:
|
||||
b = "w";
|
||||
break;
|
||||
|
||||
case 23:
|
||||
b = "x";
|
||||
break;
|
||||
|
||||
case 24:
|
||||
b = "y";
|
||||
break;
|
||||
|
||||
case 25:
|
||||
b = "z";
|
||||
break;
|
||||
|
||||
case 26:
|
||||
b = ".";
|
||||
break;
|
||||
|
||||
case 27:
|
||||
b = " ";
|
||||
break;
|
||||
}
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
@ -888,6 +982,7 @@ tokenizeLine(line, tok)
|
||||
tokens = [];
|
||||
|
||||
token = "";
|
||||
|
||||
for ( i = 0; i < line.size; i++ )
|
||||
{
|
||||
c = line[i];
|
||||
@ -901,6 +996,7 @@ tokenizeLine(line, tok)
|
||||
|
||||
token += c;
|
||||
}
|
||||
|
||||
tokens[tokens.size] = token;
|
||||
|
||||
return tokens;
|
||||
@ -920,6 +1016,7 @@ parseTokensIntoWaypoint(tokens)
|
||||
childStr = tokens[1];
|
||||
childToks = strtok( childStr, " " );
|
||||
waypoint.children = [];
|
||||
|
||||
for ( j = 0; j < childToks.size; j++ )
|
||||
waypoint.children[j] = int( childToks[j] );
|
||||
|
||||
@ -927,6 +1024,7 @@ parseTokensIntoWaypoint(tokens)
|
||||
waypoint.type = type;
|
||||
|
||||
anglesStr = tokens[3];
|
||||
|
||||
if ( isDefined( anglesStr ) && anglesStr != "" )
|
||||
{
|
||||
anglesToks = strtok( anglesStr, " " );
|
||||
@ -953,10 +1051,12 @@ readWpsFromFile(mapname)
|
||||
for ( ;; )
|
||||
{
|
||||
argc = fReadLn( f );
|
||||
|
||||
if ( argc <= 0 )
|
||||
break;
|
||||
|
||||
waypointCount = int( fgetarg( f, 0 ) );
|
||||
|
||||
if ( waypointCount <= 0 )
|
||||
break;
|
||||
|
||||
@ -964,6 +1064,7 @@ readWpsFromFile(mapname)
|
||||
{
|
||||
argc = fReadLn( f );
|
||||
line = "";
|
||||
|
||||
for ( h = 0; h < argc; h++ )
|
||||
{
|
||||
line += fgetarg( f, h );
|
||||
@ -1014,6 +1115,7 @@ loadmbotWps(mapname, gametype)
|
||||
return wps;
|
||||
|
||||
argc = fReadLn( f );
|
||||
|
||||
if ( argc <= 0 )
|
||||
{
|
||||
closeFile( f );
|
||||
@ -1021,6 +1123,7 @@ loadmbotWps(mapname, gametype)
|
||||
}
|
||||
|
||||
arg = fgetarg( f, 0 );
|
||||
|
||||
if ( !isDefined( arg ) || arg != "mbotwp" )
|
||||
{
|
||||
closeFile( f );
|
||||
@ -1028,6 +1131,7 @@ loadmbotWps(mapname, gametype)
|
||||
}
|
||||
|
||||
i = 0;
|
||||
|
||||
while ( freadln( f ) != -1 )
|
||||
{
|
||||
s = fgetarg( f, 0 );
|
||||
@ -1037,6 +1141,7 @@ loadmbotWps(mapname, gametype)
|
||||
wp.origin = ( float( t[0] ), float( t[1] ), float( t[2] ) );
|
||||
|
||||
stance = "stand";
|
||||
|
||||
if ( t[4] == "1" )
|
||||
stance = "crouch";
|
||||
else if ( t[4] == "2" )
|
||||
@ -1044,6 +1149,7 @@ loadmbotWps(mapname, gametype)
|
||||
|
||||
wp.children = [];
|
||||
k = 0;
|
||||
|
||||
for ( k = 0; k < int( t[5] ); k++ )
|
||||
wp.children[k] = int( t[6 + k] );
|
||||
|
||||
@ -1147,6 +1253,7 @@ load_waypoints()
|
||||
nearAnyOfWaypoints( dist, waypoints )
|
||||
{
|
||||
dist *= dist;
|
||||
|
||||
for ( i = 0; i < waypoints.size; i++ )
|
||||
{
|
||||
waypoint = level.waypoints[waypoints[i]];
|
||||
@ -1189,6 +1296,7 @@ getNearestWaypointOfWaypoints(waypoints)
|
||||
{
|
||||
answer = undefined;
|
||||
closestDist = 2147483647;
|
||||
|
||||
for ( i = 0; i < waypoints.size; i++ )
|
||||
{
|
||||
waypoint = level.waypoints[waypoints[i]];
|
||||
@ -1210,6 +1318,7 @@ getNearestWaypointOfWaypoints(waypoints)
|
||||
getWaypointsOfType( type )
|
||||
{
|
||||
answer = [];
|
||||
|
||||
for ( i = 0; i < level.waypointCount; i++ )
|
||||
{
|
||||
wp = level.waypoints[i];
|
||||
@ -1227,6 +1336,7 @@ getWaypointsOfType(type)
|
||||
|
||||
answer[answer.size] = i;
|
||||
}
|
||||
|
||||
return answer;
|
||||
}
|
||||
|
||||
@ -1302,6 +1412,7 @@ getBotArray()
|
||||
{
|
||||
result = [];
|
||||
playercount = level.players.size;
|
||||
|
||||
for ( i = 0; i < playercount; i++ )
|
||||
{
|
||||
player = level.players[i];
|
||||
@ -1342,9 +1453,11 @@ _WaypointsToKDTree(waypoints, dem)
|
||||
case 0:
|
||||
callbacksort = ::HeapSortCoordX;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
callbacksort = ::HeapSortCoordY;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
callbacksort = ::HeapSortCoordZ;
|
||||
break;
|
||||
@ -1358,6 +1471,7 @@ _WaypointsToKDTree(waypoints, dem)
|
||||
}
|
||||
|
||||
sorted = [];
|
||||
|
||||
while ( heap.data.size )
|
||||
{
|
||||
sorted[sorted.size] = heap.data[0];
|
||||
@ -1368,6 +1482,7 @@ _WaypointsToKDTree(waypoints, dem)
|
||||
|
||||
left = [];
|
||||
right = [];
|
||||
|
||||
for ( i = 0; i < sorted.size; i++ )
|
||||
if ( i < median )
|
||||
right[right.size] = sorted[i];
|
||||
@ -1489,18 +1604,23 @@ _KDTreeInsert(node, data, dem, x0, y0, z0, x1, y1, z1)
|
||||
node.left = self _KDTreeInsert( node.left, data, 1, x0, y0, z0, node.data.origin[0], y1, z1 );
|
||||
else
|
||||
node.right = self _KDTreeInsert( node.right, data, 1, node.data.origin[0], y0, z0, x1, y1, z1 );
|
||||
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if ( data.origin[1] < node.data.origin[1] )
|
||||
node.left = self _KDTreeInsert( node.left, data, 2, x0, y0, z0, x1, node.data.origin[1], z1 );
|
||||
else
|
||||
node.right = self _KDTreeInsert( node.right, data, 2, x0, node.data.origin[1], z0, x1, y1, z1 );
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if ( data.origin[2] < node.data.origin[2] )
|
||||
node.left = self _KDTreeInsert( node.left, data, 0, x0, y0, z0, x1, y1, node.data.origin[2] );
|
||||
else
|
||||
node.right = self _KDTreeInsert( node.right, data, 0, x0, y0, node.data.origin[2], x1, y1, z1 );
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1540,6 +1660,7 @@ _KDTreeNearest(node, point, closest, closestdist, dem)
|
||||
{
|
||||
near = node.left;
|
||||
far = node.right;
|
||||
|
||||
if ( point[dem] > node.data.origin[dem] )
|
||||
{
|
||||
near = node.right;
|
||||
@ -1760,6 +1881,7 @@ GetNearestWaypointWithSight(pos)
|
||||
continue;
|
||||
|
||||
curdis = DistanceSquared( level.waypoints[i].origin, pos );
|
||||
|
||||
if ( curdis > dist )
|
||||
continue;
|
||||
|
||||
@ -1781,6 +1903,7 @@ GetNearestWaypoint(pos)
|
||||
for ( i = 0; i < level.waypointCount; i++ )
|
||||
{
|
||||
curdis = DistanceSquared( level.waypoints[i].origin, pos );
|
||||
|
||||
if ( curdis > dist )
|
||||
continue;
|
||||
|
||||
@ -1804,10 +1927,12 @@ AStarSearch(start, goal, team, greedy_path)
|
||||
|
||||
|
||||
startWp = getNearestWaypoint( start );
|
||||
|
||||
if ( !isDefined( startWp ) )
|
||||
return [];
|
||||
|
||||
_startwp = undefined;
|
||||
|
||||
if ( !bulletTracePassed( start + ( 0, 0, 15 ), level.waypoints[startWp].origin + ( 0, 0, 15 ), false, undefined ) )
|
||||
_startwp = GetNearestWaypointWithSight( start );
|
||||
|
||||
@ -1816,10 +1941,12 @@ AStarSearch(start, goal, team, greedy_path)
|
||||
|
||||
|
||||
goalWp = getNearestWaypoint( goal );
|
||||
|
||||
if ( !isDefined( goalWp ) )
|
||||
return [];
|
||||
|
||||
_goalWp = undefined;
|
||||
|
||||
if ( !bulletTracePassed( goal + ( 0, 0, 15 ), level.waypoints[goalWp].origin + ( 0, 0, 15 ), false, undefined ) )
|
||||
_goalwp = GetNearestWaypointWithSight( goal );
|
||||
|
||||
@ -1878,9 +2005,11 @@ AStarSearch(start, goal, team, greedy_path)
|
||||
childWp = level.waypoints[child];
|
||||
|
||||
penalty = 1;
|
||||
|
||||
if ( !greedy_path && isdefined( team ) && isDefined( level.waypointUsage ) )
|
||||
{
|
||||
temppen = 1;
|
||||
|
||||
if ( isDefined( level.waypointUsage[team][child + ""] ) )
|
||||
temppen = level.waypointUsage[team][child + ""]; //consider how many bots are taking this path
|
||||
|
||||
@ -1897,14 +2026,17 @@ AStarSearch(start, goal, team, greedy_path)
|
||||
|
||||
//check if this child is in open or close with a g value less than newg
|
||||
inopen = isDefined( openset[child + ""] );
|
||||
|
||||
if ( inopen && openset[child + ""].g <= newg )
|
||||
continue;
|
||||
|
||||
inclosed = isDefined( closed[child + ""] );
|
||||
|
||||
if ( inclosed && closed[child + ""].g <= newg )
|
||||
continue;
|
||||
|
||||
node = undefined;
|
||||
|
||||
if ( inopen )
|
||||
node = openset[child + ""];
|
||||
else if ( inclosed )
|
||||
@ -1945,10 +2077,12 @@ array_average( array )
|
||||
{
|
||||
assert( array.size > 0 );
|
||||
total = 0;
|
||||
|
||||
for ( i = 0; i < array.size; i++ )
|
||||
{
|
||||
total += array[i];
|
||||
}
|
||||
|
||||
return ( total / array.size );
|
||||
}
|
||||
|
||||
@ -1960,15 +2094,19 @@ array_std_deviation( array, mean )
|
||||
{
|
||||
assert( array.size > 0 );
|
||||
tmp = [];
|
||||
|
||||
for ( i = 0; i < array.size; i++ )
|
||||
{
|
||||
tmp[i] = ( array[i] - mean ) * ( array[i] - mean );
|
||||
}
|
||||
|
||||
total = 0;
|
||||
|
||||
for ( i = 0; i < tmp.size; i++ )
|
||||
{
|
||||
total = total + tmp[i];
|
||||
}
|
||||
|
||||
return Sqrt( total / array.size );
|
||||
}
|
||||
|
||||
@ -1982,19 +2120,23 @@ random_normal_distribution( mean, std_deviation, lower_bound, upper_bound )
|
||||
x2 = 0;
|
||||
w = 1;
|
||||
y1 = 0;
|
||||
|
||||
while ( w >= 1 )
|
||||
{
|
||||
x1 = 2 * RandomFloatRange( 0, 1 ) - 1;
|
||||
x2 = 2 * RandomFloatRange( 0, 1 ) - 1;
|
||||
w = x1 * x1 + x2 * x2;
|
||||
}
|
||||
|
||||
w = Sqrt( ( -2.0 * Log( w ) ) / w );
|
||||
y1 = x1 * w;
|
||||
number = mean + y1 * std_deviation;
|
||||
|
||||
if ( IsDefined( lower_bound ) && number < lower_bound )
|
||||
{
|
||||
number = lower_bound;
|
||||
}
|
||||
|
||||
if ( IsDefined( upper_bound ) && number > upper_bound )
|
||||
{
|
||||
number = upper_bound;
|
||||
|
Loading…
x
Reference in New Issue
Block a user