mirror of
https://github.com/ineedbots/t5_bot_warfare.git
synced 2025-04-21 00:55:44 +00:00
Format scripts
This commit is contained in:
parent
3eca845f07
commit
9713ac71b7
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -16,11 +16,12 @@ getBotArray()
|
|||||||
{
|
{
|
||||||
result = [];
|
result = [];
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
for(i = 0; i < playercount; i++)
|
|
||||||
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
|
|
||||||
if(!player is_bot())
|
if ( !player is_bot() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
result[result.size] = player;
|
result[result.size] = player;
|
||||||
@ -34,7 +35,7 @@ getBotArray()
|
|||||||
*/
|
*/
|
||||||
getGoodMapAmount()
|
getGoodMapAmount()
|
||||||
{
|
{
|
||||||
switch(getdvar("mapname"))
|
switch ( getdvar( "mapname" ) )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
return 2;
|
return 2;
|
||||||
@ -44,13 +45,13 @@ getGoodMapAmount()
|
|||||||
/*
|
/*
|
||||||
Rounds to the nearest whole number.
|
Rounds to the nearest whole number.
|
||||||
*/
|
*/
|
||||||
Round(x)
|
Round( x )
|
||||||
{
|
{
|
||||||
y = int(x);
|
y = int( x );
|
||||||
|
|
||||||
if(abs(x) - abs(y) > 0.5)
|
if ( abs( x ) - abs( y ) > 0.5 )
|
||||||
{
|
{
|
||||||
if(x < 0)
|
if ( x < 0 )
|
||||||
return y - 1;
|
return y - 1;
|
||||||
else
|
else
|
||||||
return y + 1;
|
return y + 1;
|
||||||
@ -62,12 +63,12 @@ Round(x)
|
|||||||
/*
|
/*
|
||||||
Picks a random thing
|
Picks a random thing
|
||||||
*/
|
*/
|
||||||
PickRandom(arr)
|
PickRandom( arr )
|
||||||
{
|
{
|
||||||
if (!arr.size)
|
if ( !arr.size )
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
return arr[randomInt(arr.size)];
|
return arr[randomInt( arr.size )];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -75,7 +76,7 @@ PickRandom(arr)
|
|||||||
*/
|
*/
|
||||||
isDefusing()
|
isDefusing()
|
||||||
{
|
{
|
||||||
return (isDefined(self.isDefusing) && self.isDefusing);
|
return ( isDefined( self.isDefusing ) && self.isDefusing );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -83,7 +84,7 @@ isDefusing()
|
|||||||
*/
|
*/
|
||||||
isPlanting()
|
isPlanting()
|
||||||
{
|
{
|
||||||
return (isDefined(self.isPlanting) && self.isPlanting);
|
return ( isDefined( self.isPlanting ) && self.isPlanting );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -91,7 +92,7 @@ isPlanting()
|
|||||||
*/
|
*/
|
||||||
inLastStand()
|
inLastStand()
|
||||||
{
|
{
|
||||||
return (isDefined(self.laststand) && self.laststand);
|
return ( isDefined( self.laststand ) && self.laststand );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -99,7 +100,7 @@ inLastStand()
|
|||||||
*/
|
*/
|
||||||
isFlagCarrier()
|
isFlagCarrier()
|
||||||
{
|
{
|
||||||
return (isDefined(self.isFlagCarrier) && self.isFlagCarrier);
|
return ( isDefined( self.isFlagCarrier ) && self.isFlagCarrier );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -107,7 +108,7 @@ isFlagCarrier()
|
|||||||
*/
|
*/
|
||||||
isInUse()
|
isInUse()
|
||||||
{
|
{
|
||||||
return (isDefined(self.inUse) && self.inUse);
|
return ( isDefined( self.inUse ) && self.inUse );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -115,7 +116,7 @@ isInUse()
|
|||||||
*/
|
*/
|
||||||
isBombCarrier()
|
isBombCarrier()
|
||||||
{
|
{
|
||||||
return (isDefined(self.isBombCarrier) && self.isBombCarrier);
|
return ( isDefined( self.isBombCarrier ) && self.isBombCarrier );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -141,17 +142,20 @@ GetBotDiffNum()
|
|||||||
{
|
{
|
||||||
num = 0;
|
num = 0;
|
||||||
|
|
||||||
switch (getDvar("bot_difficulty"))
|
switch ( getDvar( "bot_difficulty" ) )
|
||||||
{
|
{
|
||||||
case "fu":
|
case "fu":
|
||||||
num = 3;
|
num = 3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "hard":
|
case "hard":
|
||||||
num = 2;
|
num = 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "normal":
|
case "normal":
|
||||||
num = 1;
|
num = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "easy":
|
case "easy":
|
||||||
default:
|
default:
|
||||||
num = 0;
|
num = 0;
|
||||||
@ -164,9 +168,9 @@ GetBotDiffNum()
|
|||||||
/*
|
/*
|
||||||
is the weapon alt mode?
|
is the weapon alt mode?
|
||||||
*/
|
*/
|
||||||
isWeaponAltmode(weap)
|
isWeaponAltmode( weap )
|
||||||
{
|
{
|
||||||
if (isStrStart(weap, "gl_") || isStrStart(weap, "ft_") || isStrStart(weap, "mk_"))
|
if ( isStrStart( weap, "gl_" ) || isStrStart( weap, "ft_" ) || isStrStart( weap, "mk_" ) )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -179,14 +183,14 @@ getValidTube()
|
|||||||
{
|
{
|
||||||
weaps = self getweaponslist();
|
weaps = self getweaponslist();
|
||||||
|
|
||||||
for (i = 0; i < weaps.size; i++)
|
for ( i = 0; i < weaps.size; i++ )
|
||||||
{
|
{
|
||||||
weap = weaps[i];
|
weap = weaps[i];
|
||||||
|
|
||||||
if(!self getAmmoCount(weap))
|
if ( !self getAmmoCount( weap ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ((isSubStr(weap, "gl_") && !isSubStr(weap, "_gl_")) || weap == "china_lake_mp")
|
if ( ( isSubStr( weap, "gl_" ) && !isSubStr( weap, "_gl_" ) ) || weap == "china_lake_mp" )
|
||||||
return weap;
|
return weap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,10 +203,10 @@ getValidTube()
|
|||||||
waittill_any_timeout( timeOut, string1, string2, string3, string4, string5 )
|
waittill_any_timeout( timeOut, string1, string2, string3, string4, string5 )
|
||||||
{
|
{
|
||||||
if ( ( !isdefined( string1 ) || string1 != "death" ) &&
|
if ( ( !isdefined( string1 ) || string1 != "death" ) &&
|
||||||
( !isdefined( string2 ) || string2 != "death" ) &&
|
( !isdefined( string2 ) || string2 != "death" ) &&
|
||||||
( !isdefined( string3 ) || string3 != "death" ) &&
|
( !isdefined( string3 ) || string3 != "death" ) &&
|
||||||
( !isdefined( string4 ) || string4 != "death" ) &&
|
( !isdefined( string4 ) || string4 != "death" ) &&
|
||||||
( !isdefined( string5 ) || string5 != "death" ) )
|
( !isdefined( string5 ) || string5 != "death" ) )
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
ent = spawnstruct();
|
ent = spawnstruct();
|
||||||
@ -247,36 +251,36 @@ bot_wait_for_host()
|
|||||||
{
|
{
|
||||||
host = undefined;
|
host = undefined;
|
||||||
|
|
||||||
while (!isDefined(level) || !isDefined(level.players))
|
while ( !isDefined( level ) || !isDefined( level.players ) )
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05)
|
for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 )
|
||||||
{
|
{
|
||||||
host = GetHostPlayer();
|
host = GetHostPlayer();
|
||||||
|
|
||||||
if(isDefined(host))
|
if ( isDefined( host ) )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!isDefined(host))
|
if ( !isDefined( host ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05)
|
for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 )
|
||||||
{
|
{
|
||||||
if(IsDefined( host.pers[ "team" ] ))
|
if ( IsDefined( host.pers[ "team" ] ) )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!IsDefined( host.pers[ "team" ] ))
|
if ( !IsDefined( host.pers[ "team" ] ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05)
|
for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 )
|
||||||
{
|
{
|
||||||
if(host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis")
|
if ( host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis" )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
@ -286,11 +290,11 @@ bot_wait_for_host()
|
|||||||
/*
|
/*
|
||||||
Wrapper for setgoal
|
Wrapper for setgoal
|
||||||
*/
|
*/
|
||||||
SetBotGoal(where, dist)
|
SetBotGoal( where, dist )
|
||||||
{
|
{
|
||||||
self SetScriptGoal(where, dist);
|
self SetScriptGoal( where, dist );
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
self notify("new_goal");
|
self notify( "new_goal" );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -300,29 +304,30 @@ ClearBotGoal()
|
|||||||
{
|
{
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
self notify("new_goal");
|
self notify( "new_goal" );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Freezes bot in place
|
Freezes bot in place
|
||||||
*/
|
*/
|
||||||
botStopMove(what)
|
botStopMove( what )
|
||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon( "disconnect" );
|
||||||
self endon("death");
|
self endon( "death" );
|
||||||
level endon("game_ended");
|
level endon( "game_ended" );
|
||||||
|
|
||||||
self notify("botStopMove");
|
self notify( "botStopMove" );
|
||||||
self endon("botStopMove");
|
self endon( "botStopMove" );
|
||||||
|
|
||||||
if (!what)
|
if ( !what )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
og = self.origin;
|
og = self.origin;
|
||||||
for (;;)
|
|
||||||
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self setVelocity((0,0,0));
|
self setVelocity( ( 0, 0, 0 ) );
|
||||||
self setOrigin(og);
|
self setOrigin( og );
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -330,40 +335,125 @@ botStopMove(what)
|
|||||||
/*
|
/*
|
||||||
Matches a num to a char
|
Matches a num to a char
|
||||||
*/
|
*/
|
||||||
keyCodeToString(a)
|
keyCodeToString( a )
|
||||||
{
|
{
|
||||||
b="";
|
b = "";
|
||||||
switch(a)
|
|
||||||
|
switch ( a )
|
||||||
{
|
{
|
||||||
case 0: b= "a"; break;
|
case 0:
|
||||||
case 1: b= "b"; break;
|
b = "a";
|
||||||
case 2: b= "c"; break;
|
break;
|
||||||
case 3: b= "d"; break;
|
|
||||||
case 4: b= "e"; break;
|
case 1:
|
||||||
case 5: b= "f"; break;
|
b = "b";
|
||||||
case 6: b= "g"; break;
|
break;
|
||||||
case 7: b= "h"; break;
|
|
||||||
case 8: b= "i"; break;
|
case 2:
|
||||||
case 9: b= "j"; break;
|
b = "c";
|
||||||
case 10: b= "k"; break;
|
break;
|
||||||
case 11: b= "l"; break;
|
|
||||||
case 12: b= "m"; break;
|
case 3:
|
||||||
case 13: b= "n"; break;
|
b = "d";
|
||||||
case 14: b= "o"; break;
|
break;
|
||||||
case 15: b= "p"; break;
|
|
||||||
case 16: b= "q"; break;
|
case 4:
|
||||||
case 17: b= "r"; break;
|
b = "e";
|
||||||
case 18: b= "s"; break;
|
break;
|
||||||
case 19: b= "t"; break;
|
|
||||||
case 20: b= "u"; break;
|
case 5:
|
||||||
case 21: b= "v"; break;
|
b = "f";
|
||||||
case 22: b= "w"; break;
|
break;
|
||||||
case 23: b= "x"; break;
|
|
||||||
case 24: b= "y"; break;
|
case 6:
|
||||||
case 25: b= "z"; break;
|
b = "g";
|
||||||
case 26: b= "."; break;
|
break;
|
||||||
case 27: b= " "; 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;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,11 +468,11 @@ doExtraCheck()
|
|||||||
/*
|
/*
|
||||||
Returns the cone dot (like fov, or distance from the center of our screen).
|
Returns the cone dot (like fov, or distance from the center of our screen).
|
||||||
*/
|
*/
|
||||||
getConeDot(to, from, dir)
|
getConeDot( to, from, dir )
|
||||||
{
|
{
|
||||||
dirToTarget = VectorNormalize(to-from);
|
dirToTarget = VectorNormalize( to - from );
|
||||||
forward = AnglesToForward(dir);
|
forward = AnglesToForward( dir );
|
||||||
return vectordot(dirToTarget, forward);
|
return vectordot( dirToTarget, forward );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -404,14 +494,15 @@ bot_onUsePlantObjectFix( player )
|
|||||||
|
|
||||||
level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject();
|
level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject();
|
||||||
}
|
}
|
||||||
thread playSoundOnPlayers( "mus_sd_planted"+"_"+level.teamPostfix[player.pers["team"]] );
|
|
||||||
|
thread playSoundOnPlayers( "mus_sd_planted" + "_" + level.teamPostfix[player.pers["team"]] );
|
||||||
// removed plant audio until finalization of assest TODO : new plant sounds when assests are online
|
// removed plant audio until finalization of assest TODO : new plant sounds when assests are online
|
||||||
// player playSound( "mpl_sd_bomb_plant" );
|
// player playSound( "mpl_sd_bomb_plant" );
|
||||||
player notify ( "bomb_planted" );
|
player notify ( "bomb_planted" );
|
||||||
|
|
||||||
level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_PLANTED_BY", player );
|
level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_PLANTED_BY", player );
|
||||||
|
|
||||||
if( isdefined(player.pers["plants"]) )
|
if ( isdefined( player.pers["plants"] ) )
|
||||||
{
|
{
|
||||||
player.pers["plants"]++;
|
player.pers["plants"]++;
|
||||||
player.plants = player.pers["plants"];
|
player.plants = player.pers["plants"];
|
||||||
@ -444,7 +535,7 @@ bot_bombPlanted( destroyedObj, player )
|
|||||||
level.tickingObject = destroyedObj.visuals[0];
|
level.tickingObject = destroyedObj.visuals[0];
|
||||||
|
|
||||||
level.timeLimitOverride = true;
|
level.timeLimitOverride = true;
|
||||||
setGameEndTime( int( gettime() + (level.bombTimer * 1000) ) );
|
setGameEndTime( int( gettime() + ( level.bombTimer * 1000 ) ) );
|
||||||
setMatchFlag( "bomb_timer", 1 );
|
setMatchFlag( "bomb_timer", 1 );
|
||||||
|
|
||||||
if ( !level.multiBomb )
|
if ( !level.multiBomb )
|
||||||
@ -463,10 +554,10 @@ bot_bombPlanted( destroyedObj, player )
|
|||||||
level.players[index].carryIcon destroyElem();
|
level.players[index].carryIcon destroyElem();
|
||||||
}
|
}
|
||||||
|
|
||||||
trace = bulletTrace( player.origin + (0,0,20), player.origin - (0,0,2000), false, player );
|
trace = bulletTrace( player.origin + ( 0, 0, 20 ), player.origin - ( 0, 0, 2000 ), false, player );
|
||||||
|
|
||||||
tempAngle = randomfloat( 360 );
|
tempAngle = randomfloat( 360 );
|
||||||
forward = (cos( tempAngle ), sin( tempAngle ), 0);
|
forward = ( cos( tempAngle ), sin( tempAngle ), 0 );
|
||||||
forward = vectornormalize( forward - vector_scale( trace["normal"], vectordot( forward, trace["normal"] ) ) );
|
forward = vectornormalize( forward - vector_scale( trace["normal"], vectordot( forward, trace["normal"] ) ) );
|
||||||
dropAngles = vectortoangles( forward );
|
dropAngles = vectortoangles( forward );
|
||||||
|
|
||||||
@ -474,13 +565,14 @@ bot_bombPlanted( destroyedObj, player )
|
|||||||
level.sdBombModel.angles = dropAngles;
|
level.sdBombModel.angles = dropAngles;
|
||||||
level.sdBombModel setModel( "prop_suitcase_bomb" );
|
level.sdBombModel setModel( "prop_suitcase_bomb" );
|
||||||
}
|
}
|
||||||
|
|
||||||
destroyedObj maps\mp\gametypes\_gameobjects::allowUse( "none" );
|
destroyedObj maps\mp\gametypes\_gameobjects::allowUse( "none" );
|
||||||
destroyedObj maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
|
destroyedObj maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
|
||||||
/*
|
/*
|
||||||
destroyedObj maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", undefined );
|
destroyedObj maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", undefined );
|
||||||
destroyedObj maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", undefined );
|
destroyedObj maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", undefined );
|
||||||
destroyedObj maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", undefined );
|
destroyedObj maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", undefined );
|
||||||
destroyedObj maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", undefined );
|
destroyedObj maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", undefined );
|
||||||
*/
|
*/
|
||||||
label = destroyedObj maps\mp\gametypes\_gameobjects::getLabel();
|
label = destroyedObj maps\mp\gametypes\_gameobjects::getLabel();
|
||||||
|
|
||||||
@ -488,7 +580,7 @@ bot_bombPlanted( destroyedObj, player )
|
|||||||
trigger = destroyedObj.bombDefuseTrig;
|
trigger = destroyedObj.bombDefuseTrig;
|
||||||
trigger.origin = level.sdBombModel.origin;
|
trigger.origin = level.sdBombModel.origin;
|
||||||
visuals = [];
|
visuals = [];
|
||||||
defuseObject = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, (0,0,32) );
|
defuseObject = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, ( 0, 0, 32 ) );
|
||||||
defuseObject maps\mp\gametypes\_gameobjects::allowUse( "friendly" );
|
defuseObject maps\mp\gametypes\_gameobjects::allowUse( "friendly" );
|
||||||
defuseObject maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime );
|
defuseObject maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime );
|
||||||
defuseObject maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" );
|
defuseObject maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" );
|
||||||
@ -520,7 +612,7 @@ bot_bombPlanted( destroyedObj, player )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
explosionOrigin = level.sdBombModel.origin+(0,0,12);
|
explosionOrigin = level.sdBombModel.origin + ( 0, 0, 12 );
|
||||||
level.sdBombModel hide();
|
level.sdBombModel hide();
|
||||||
|
|
||||||
if ( isdefined( player ) )
|
if ( isdefined( player ) )
|
||||||
@ -533,8 +625,8 @@ bot_bombPlanted( destroyedObj, player )
|
|||||||
else
|
else
|
||||||
destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" );
|
destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" );
|
||||||
|
|
||||||
rot = randomfloat(360);
|
rot = randomfloat( 360 );
|
||||||
explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + (0,0,50), (0,0,1), (cos(rot),sin(rot),0) );
|
explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + ( 0, 0, 50 ), ( 0, 0, 1 ), ( cos( rot ), sin( rot ), 0 ) );
|
||||||
triggerFx( explosionEffect );
|
triggerFx( explosionEffect );
|
||||||
|
|
||||||
thread playSoundinSpace( "mpl_sd_exp_suitcase_bomb_main", explosionOrigin );
|
thread playSoundinSpace( "mpl_sd_exp_suitcase_bomb_main", explosionOrigin );
|
||||||
@ -545,6 +637,7 @@ bot_bombPlanted( destroyedObj, player )
|
|||||||
|
|
||||||
for ( index = 0; index < level.bombZones.size; index++ )
|
for ( index = 0; index < level.bombZones.size; index++ )
|
||||||
level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject();
|
level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject();
|
||||||
|
|
||||||
defuseObject maps\mp\gametypes\_gameobjects::disableObject();
|
defuseObject maps\mp\gametypes\_gameobjects::disableObject();
|
||||||
|
|
||||||
setGameEndTime( 0 );
|
setGameEndTime( 0 );
|
||||||
|
@ -19,70 +19,89 @@ init()
|
|||||||
|
|
||||||
level.bot_offline = false;
|
level.bot_offline = false;
|
||||||
|
|
||||||
if(getDvar("bots_main") == "")
|
if ( getDvar( "bots_main" ) == "" )
|
||||||
setDvar("bots_main", true);
|
setDvar( "bots_main", true );
|
||||||
|
|
||||||
if (!getDvarInt("bots_main"))
|
if ( !getDvarInt( "bots_main" ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(getDvar("bots_main_waitForHostTime") == "")
|
if ( getDvar( "bots_main_waitForHostTime" ) == "" )
|
||||||
setDvar("bots_main_waitForHostTime", 10.0);//how long to wait to wait for the host player
|
setDvar( "bots_main_waitForHostTime", 10.0 ); //how long to wait to wait for the host player
|
||||||
|
|
||||||
if(getDvar("bots_manage_add") == "")
|
if ( getDvar( "bots_manage_add" ) == "" )
|
||||||
setDvar("bots_manage_add", 0);//amount of bots to add to the game
|
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") == "")
|
if ( getDvar( "bots_manage_fill" ) == "" )
|
||||||
setDvar("bots_team", "autoassign");//which team for bots to join
|
setDvar( "bots_manage_fill", 0 ); //amount of bots to maintain
|
||||||
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_loadout_reasonable") == "")//filter out the bad 'guns' and perks
|
if ( getDvar( "bots_manage_fill_spec" ) == "" )
|
||||||
setDvar("bots_loadout_reasonable", false);
|
setDvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team
|
||||||
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_codpoints") == "")// how much cod points a bot should have, -1 is around the players, 0 is all random
|
|
||||||
setDvar("bots_loadout_codpoints", -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_target_other") == "")//bot target non play ents (vehicles)
|
if ( getDvar( "bots_manage_fill_mode" ) == "" )
|
||||||
setDvar("bots_play_target_other", true);
|
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_play_killstreak") == "")//bot use killstreaks
|
|
||||||
setDvar("bots_play_killstreak", true);
|
if ( getDvar( "bots_manage_fill_kick" ) == "" )
|
||||||
if(getDvar("bots_play_nade") == "")//bots grenade
|
setDvar( "bots_manage_fill_kick", false ); //kick bots if too many
|
||||||
setDvar("bots_play_nade", true);
|
|
||||||
if(getDvar("bots_play_knife") == "")//bots knife
|
if ( getDvar( "bots_team" ) == "" )
|
||||||
setDvar("bots_play_knife", true);
|
setDvar( "bots_team", "autoassign" ); //which team for bots to join
|
||||||
if(getDvar("bots_play_fire") == "")//bots fire
|
|
||||||
setDvar("bots_play_fire", true);
|
if ( getDvar( "bots_team_amount" ) == "" )
|
||||||
if(getDvar("bots_play_move") == "")//bots move
|
setDvar( "bots_team_amount", 0 ); //amount of bots on axis team
|
||||||
setDvar("bots_play_move", true);
|
|
||||||
if(getDvar("bots_play_take_carepackages") == "")//bots take carepackages
|
if ( getDvar( "bots_team_force" ) == "" )
|
||||||
setDvar("bots_play_take_carepackages", true);
|
setDvar( "bots_team_force", false ); //force bots on team
|
||||||
if(getDvar("bots_play_obj") == "")//bots play the obj
|
|
||||||
setDvar("bots_play_obj", true);
|
if ( getDvar( "bots_team_mode" ) == "" )
|
||||||
if(getDvar("bots_play_camp") == "")//bots camp and follow
|
setDvar( "bots_team_mode", 0 ); //counts just bots when 1
|
||||||
setDvar("bots_play_camp", true);
|
|
||||||
|
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_codpoints" ) == "" ) // how much cod points a bot should have, -1 is around the players, 0 is all random
|
||||||
|
setDvar( "bots_loadout_codpoints", -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_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_nade" ) == "" ) //bots grenade
|
||||||
|
setDvar( "bots_play_nade", 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_move" ) == "" ) //bots move
|
||||||
|
setDvar( "bots_play_move", true );
|
||||||
|
|
||||||
|
if ( getDvar( "bots_play_take_carepackages" ) == "" ) //bots take carepackages
|
||||||
|
setDvar( "bots_play_take_carepackages", 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 );
|
||||||
|
|
||||||
level.bots = [];
|
level.bots = [];
|
||||||
level.bot_decoys = [];
|
level.bot_decoys = [];
|
||||||
level.bot_planes = [];
|
level.bot_planes = [];
|
||||||
|
|
||||||
if(!isDefined(game["botWarfare"]))
|
if ( !isDefined( game["botWarfare"] ) )
|
||||||
game["botWarfare"] = true;
|
game["botWarfare"] = true;
|
||||||
|
|
||||||
thread fixGamemodes();
|
thread fixGamemodes();
|
||||||
@ -99,9 +118,9 @@ init()
|
|||||||
*/
|
*/
|
||||||
onPlayerConnect()
|
onPlayerConnect()
|
||||||
{
|
{
|
||||||
for(;;)
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill("connected", player);
|
level waittill( "connected", player );
|
||||||
|
|
||||||
player thread watch_shoot();
|
player thread watch_shoot();
|
||||||
player thread watch_grenade();
|
player thread watch_grenade();
|
||||||
@ -118,10 +137,10 @@ handleBots()
|
|||||||
thread teamBots();
|
thread teamBots();
|
||||||
addBots();
|
addBots();
|
||||||
|
|
||||||
while(!level.intermission)
|
while ( !level.intermission )
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
setDvar("bots_manage_add", getBotArray().size);
|
setDvar( "bots_manage_add", getBotArray().size );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -129,9 +148,9 @@ handleBots()
|
|||||||
*/
|
*/
|
||||||
onDisconnect()
|
onDisconnect()
|
||||||
{
|
{
|
||||||
self waittill("disconnect");
|
self waittill( "disconnect" );
|
||||||
|
|
||||||
level.bots = array_remove(level.bots, self);
|
level.bots = array_remove( level.bots, self );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -139,9 +158,9 @@ onDisconnect()
|
|||||||
*/
|
*/
|
||||||
connected()
|
connected()
|
||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon( "disconnect" );
|
||||||
|
|
||||||
if (!self is_bot())
|
if ( !self is_bot() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
self thread maps\mp\bots\_bot_script::connected();
|
self thread maps\mp\bots\_bot_script::connected();
|
||||||
@ -149,7 +168,7 @@ connected()
|
|||||||
level.bots[level.bots.size] = self;
|
level.bots[level.bots.size] = self;
|
||||||
self thread onDisconnect();
|
self thread onDisconnect();
|
||||||
|
|
||||||
level notify("bot_connected", self);
|
level notify( "bot_connected", self );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -157,11 +176,11 @@ connected()
|
|||||||
*/
|
*/
|
||||||
diffBots()
|
diffBots()
|
||||||
{
|
{
|
||||||
for (;;)
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 1.5;
|
wait 1.5;
|
||||||
|
|
||||||
bot_set_difficulty(GetDvar( #"bot_difficulty" ));
|
bot_set_difficulty( GetDvar( #"bot_difficulty" ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,47 +189,49 @@ diffBots()
|
|||||||
*/
|
*/
|
||||||
doNonDediBots()
|
doNonDediBots()
|
||||||
{
|
{
|
||||||
if (!GetDvarInt( #"xblive_basictraining" ))
|
if ( !GetDvarInt( #"xblive_basictraining" ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (isDefined(game[ "bots_spawned" ]))
|
if ( isDefined( game[ "bots_spawned" ] ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
game[ "bots_spawned" ] = true;
|
game[ "bots_spawned" ] = true;
|
||||||
|
|
||||||
if(getDvar("bot_enemies_extra") == "")
|
if ( getDvar( "bot_enemies_extra" ) == "" )
|
||||||
setDvar("bot_enemies_extra", 0);
|
setDvar( "bot_enemies_extra", 0 );
|
||||||
if(getDvar("bot_friends_extra") == "")
|
|
||||||
setDvar("bot_friends_extra", 0);
|
if ( getDvar( "bot_friends_extra" ) == "" )
|
||||||
|
setDvar( "bot_friends_extra", 0 );
|
||||||
|
|
||||||
bot_friends = GetDvarInt( #"bot_friends" );
|
bot_friends = GetDvarInt( #"bot_friends" );
|
||||||
bot_enemies = GetDvarInt( #"bot_enemies" );
|
bot_enemies = GetDvarInt( #"bot_enemies" );
|
||||||
|
|
||||||
bot_enemies += GetDvarInt("bot_enemies_extra");
|
bot_enemies += GetDvarInt( "bot_enemies_extra" );
|
||||||
bot_friends += GetDvarInt("bot_friends_extra");
|
bot_friends += GetDvarInt( "bot_friends_extra" );
|
||||||
|
|
||||||
bot_wait_for_host();
|
bot_wait_for_host();
|
||||||
host = GetHostPlayer();
|
host = GetHostPlayer();
|
||||||
|
|
||||||
team = "allies";
|
team = "allies";
|
||||||
if(isDefined(host) && isDefined(host.pers[ "team" ]) && (host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis"))
|
|
||||||
|
if ( isDefined( host ) && isDefined( host.pers[ "team" ] ) && ( host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis" ) )
|
||||||
team = host.pers[ "team" ];
|
team = host.pers[ "team" ];
|
||||||
|
|
||||||
setDvar("bots_manage_add", bot_enemies + bot_friends - 1);
|
setDvar( "bots_manage_add", bot_enemies + bot_friends - 1 );
|
||||||
setDvar("bots_manage_fill", bot_enemies + bot_friends);
|
setDvar( "bots_manage_fill", bot_enemies + bot_friends );
|
||||||
setDvar("bots_manage_fill_mode", 0);
|
setDvar( "bots_manage_fill_mode", 0 );
|
||||||
setDvar("bots_manage_fill_kick", true);
|
setDvar( "bots_manage_fill_kick", true );
|
||||||
setDvar("bots_manage_fill_spec", false);
|
setDvar( "bots_manage_fill_spec", false );
|
||||||
|
|
||||||
setDvar("bots_team", "custom");
|
setDvar( "bots_team", "custom" );
|
||||||
|
|
||||||
if (team == "axis")
|
if ( team == "axis" )
|
||||||
setDvar("bots_team_amount", bot_friends);
|
setDvar( "bots_team_amount", bot_friends );
|
||||||
else
|
else
|
||||||
setDvar("bots_team_amount", bot_enemies);
|
setDvar( "bots_team_amount", bot_enemies );
|
||||||
|
|
||||||
setDvar("bots_team_force", true);
|
setDvar( "bots_team_force", true );
|
||||||
setDvar("bots_team_mode", 0);
|
setDvar( "bots_team_mode", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -343,7 +364,7 @@ bot_set_difficulty( difficulty )
|
|||||||
SetDvar( "sv_botSprintDistance", "256" );
|
SetDvar( "sv_botSprintDistance", "256" );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!getDvarInt("bots_play_nade"))
|
if ( !getDvarInt( "bots_play_nade" ) )
|
||||||
SetDvar( "sv_botAllowGrenades", "0" );
|
SetDvar( "sv_botAllowGrenades", "0" );
|
||||||
|
|
||||||
SetDvar( "bot_difficulty", difficulty );
|
SetDvar( "bot_difficulty", difficulty );
|
||||||
@ -356,8 +377,8 @@ bot_set_difficulty( difficulty )
|
|||||||
*/
|
*/
|
||||||
teamBots_loop()
|
teamBots_loop()
|
||||||
{
|
{
|
||||||
teamAmount = getDvarInt("bots_team_amount");
|
teamAmount = getDvarInt( "bots_team_amount" );
|
||||||
toTeam = getDvar("bots_team");
|
toTeam = getDvar( "bots_team" );
|
||||||
|
|
||||||
alliesbots = 0;
|
alliesbots = 0;
|
||||||
alliesplayers = 0;
|
alliesplayers = 0;
|
||||||
@ -365,25 +386,26 @@ teamBots_loop()
|
|||||||
axisplayers = 0;
|
axisplayers = 0;
|
||||||
|
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
for(i = 0; i < playercount; i++)
|
|
||||||
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
|
|
||||||
if(!isDefined(player.pers["team"]))
|
if ( !isDefined( player.pers["team"] ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(player is_bot())
|
if ( player is_bot() )
|
||||||
{
|
{
|
||||||
if(player.pers["team"] == "allies")
|
if ( player.pers["team"] == "allies" )
|
||||||
alliesbots++;
|
alliesbots++;
|
||||||
else if(player.pers["team"] == "axis")
|
else if ( player.pers["team"] == "axis" )
|
||||||
axisbots++;
|
axisbots++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(player.pers["team"] == "allies")
|
if ( player.pers["team"] == "allies" )
|
||||||
alliesplayers++;
|
alliesplayers++;
|
||||||
else if(player.pers["team"] == "axis")
|
else if ( player.pers["team"] == "axis" )
|
||||||
axisplayers++;
|
axisplayers++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -391,48 +413,51 @@ teamBots_loop()
|
|||||||
allies = alliesbots;
|
allies = alliesbots;
|
||||||
axis = axisbots;
|
axis = axisbots;
|
||||||
|
|
||||||
if(!getDvarInt("bots_team_mode"))
|
if ( !getDvarInt( "bots_team_mode" ) )
|
||||||
{
|
{
|
||||||
allies += alliesplayers;
|
allies += alliesplayers;
|
||||||
axis += axisplayers;
|
axis += axisplayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(toTeam != "custom")
|
if ( toTeam != "custom" )
|
||||||
{
|
{
|
||||||
if(getDvarInt("bots_team_force"))
|
if ( getDvarInt( "bots_team_force" ) )
|
||||||
{
|
{
|
||||||
if(toTeam == "autoassign")
|
if ( toTeam == "autoassign" )
|
||||||
{
|
{
|
||||||
if(abs(axis - allies) > 1)
|
if ( abs( axis - allies ) > 1 )
|
||||||
{
|
{
|
||||||
toTeam = "axis";
|
toTeam = "axis";
|
||||||
if(axis > allies)
|
|
||||||
|
if ( axis > allies )
|
||||||
toTeam = "allies";
|
toTeam = "allies";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(toTeam != "autoassign")
|
if ( toTeam != "autoassign" )
|
||||||
{
|
{
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
for(i = 0; i < playercount; i++)
|
|
||||||
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
|
|
||||||
if(!isDefined(player.pers["team"]))
|
if ( !isDefined( player.pers["team"] ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(!player is_bot())
|
if ( !player is_bot() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(player.pers["team"] == toTeam)
|
if ( player.pers["team"] == toTeam )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (toTeam == "allies")
|
if ( toTeam == "allies" )
|
||||||
player thread [[level.allies]]();
|
player thread [[level.allies]]();
|
||||||
else if (toTeam == "axis")
|
else if ( toTeam == "axis" )
|
||||||
player thread [[level.axis]]();
|
player thread [[level.axis]]();
|
||||||
else
|
else
|
||||||
player thread [[level.spectator]]();
|
player thread [[level.spectator]]();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -441,19 +466,20 @@ teamBots_loop()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
for(i = 0; i < playercount; i++)
|
|
||||||
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
|
|
||||||
if(!isDefined(player.pers["team"]))
|
if ( !isDefined( player.pers["team"] ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(!player is_bot())
|
if ( !player is_bot() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(player.pers["team"] == "axis")
|
if ( player.pers["team"] == "axis" )
|
||||||
{
|
{
|
||||||
if(axis > teamAmount)
|
if ( axis > teamAmount )
|
||||||
{
|
{
|
||||||
player thread [[level.allies]]();
|
player thread [[level.allies]]();
|
||||||
break;
|
break;
|
||||||
@ -461,12 +487,12 @@ teamBots_loop()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(axis < teamAmount)
|
if ( axis < teamAmount )
|
||||||
{
|
{
|
||||||
player thread [[level.axis]]();
|
player thread [[level.axis]]();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if(player.pers["team"] != "allies")
|
else if ( player.pers["team"] != "allies" )
|
||||||
{
|
{
|
||||||
player thread [[level.allies]]();
|
player thread [[level.allies]]();
|
||||||
break;
|
break;
|
||||||
@ -481,7 +507,7 @@ teamBots_loop()
|
|||||||
*/
|
*/
|
||||||
teamBots()
|
teamBots()
|
||||||
{
|
{
|
||||||
for(;;)
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 1.5;
|
wait 1.5;
|
||||||
teamBots_loop();
|
teamBots_loop();
|
||||||
@ -493,79 +519,81 @@ teamBots()
|
|||||||
*/
|
*/
|
||||||
addBots_loop()
|
addBots_loop()
|
||||||
{
|
{
|
||||||
botsToAdd = GetDvarInt("bots_manage_add");
|
botsToAdd = GetDvarInt( "bots_manage_add" );
|
||||||
|
|
||||||
if(botsToAdd > 0)
|
if ( botsToAdd > 0 )
|
||||||
{
|
{
|
||||||
SetDvar("bots_manage_add", 0);
|
SetDvar( "bots_manage_add", 0 );
|
||||||
|
|
||||||
if(botsToAdd > 64)
|
if ( botsToAdd > 64 )
|
||||||
botsToAdd = 64;
|
botsToAdd = 64;
|
||||||
|
|
||||||
for(; botsToAdd > 0; botsToAdd--)
|
for ( ; botsToAdd > 0; botsToAdd-- )
|
||||||
{
|
{
|
||||||
level add_bot();
|
level add_bot();
|
||||||
wait 0.25;
|
wait 0.25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fillMode = getDVarInt("bots_manage_fill_mode");
|
fillMode = getDVarInt( "bots_manage_fill_mode" );
|
||||||
|
|
||||||
if(fillMode == 2 || fillMode == 3)
|
if ( fillMode == 2 || fillMode == 3 )
|
||||||
setDvar("bots_manage_fill", getGoodMapAmount());
|
setDvar( "bots_manage_fill", getGoodMapAmount() );
|
||||||
|
|
||||||
fillAmount = getDvarInt("bots_manage_fill");
|
fillAmount = getDvarInt( "bots_manage_fill" );
|
||||||
|
|
||||||
players = 0;
|
players = 0;
|
||||||
bots = 0;
|
bots = 0;
|
||||||
spec = 0;
|
spec = 0;
|
||||||
|
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
for(i = 0; i < playercount; i++)
|
|
||||||
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
|
|
||||||
if (player isdemoclient())
|
if ( player isdemoclient() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(player is_bot())
|
if ( player is_bot() )
|
||||||
bots++;
|
bots++;
|
||||||
else if(!isDefined(player.pers["team"]) || (player.pers["team"] != "axis" && player.pers["team"] != "allies"))
|
else if ( !isDefined( player.pers["team"] ) || ( player.pers["team"] != "axis" && player.pers["team"] != "allies" ) )
|
||||||
spec++;
|
spec++;
|
||||||
else
|
else
|
||||||
players++;
|
players++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(fillMode == 4)
|
if ( fillMode == 4 )
|
||||||
{
|
{
|
||||||
axisplayers = 0;
|
axisplayers = 0;
|
||||||
alliesplayers = 0;
|
alliesplayers = 0;
|
||||||
|
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
for(i = 0; i < playercount; i++)
|
|
||||||
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
|
|
||||||
if(player is_bot())
|
if ( player is_bot() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(!isDefined(player.pers["team"]))
|
if ( !isDefined( player.pers["team"] ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(player.pers["team"] == "axis")
|
if ( player.pers["team"] == "axis" )
|
||||||
axisplayers++;
|
axisplayers++;
|
||||||
else if(player.pers["team"] == "allies")
|
else if ( player.pers["team"] == "allies" )
|
||||||
alliesplayers++;
|
alliesplayers++;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = fillAmount - abs(axisplayers - alliesplayers) + bots;
|
result = fillAmount - abs( axisplayers - alliesplayers ) + bots;
|
||||||
|
|
||||||
if (players == 0)
|
if ( players == 0 )
|
||||||
{
|
{
|
||||||
if(bots < fillAmount)
|
if ( bots < fillAmount )
|
||||||
result = fillAmount-1;
|
result = fillAmount - 1;
|
||||||
else if (bots > fillAmount)
|
else if ( bots > fillAmount )
|
||||||
result = fillAmount+1;
|
result = fillAmount + 1;
|
||||||
else
|
else
|
||||||
result = fillAmount;
|
result = fillAmount;
|
||||||
}
|
}
|
||||||
@ -573,26 +601,29 @@ addBots_loop()
|
|||||||
bots = result;
|
bots = result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!randomInt(999))
|
if ( !randomInt( 999 ) )
|
||||||
{
|
{
|
||||||
setDvar("testclients_doreload", true);
|
setDvar( "testclients_doreload", true );
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
setDvar("testclients_doreload", false);
|
setDvar( "testclients_doreload", false );
|
||||||
doExtraCheck();
|
doExtraCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
amount = bots;
|
amount = bots;
|
||||||
if(fillMode == 0 || fillMode == 2)
|
|
||||||
|
if ( fillMode == 0 || fillMode == 2 )
|
||||||
amount += players;
|
amount += players;
|
||||||
if(getDVarInt("bots_manage_fill_spec"))
|
|
||||||
|
if ( getDVarInt( "bots_manage_fill_spec" ) )
|
||||||
amount += spec;
|
amount += spec;
|
||||||
|
|
||||||
if(amount < fillAmount)
|
if ( amount < fillAmount )
|
||||||
setDvar("bots_manage_add", 1);
|
setDvar( "bots_manage_add", 1 );
|
||||||
else if(amount > fillAmount && getDvarInt("bots_manage_fill_kick"))
|
else if ( amount > fillAmount && getDvarInt( "bots_manage_fill_kick" ) )
|
||||||
{
|
{
|
||||||
tempBot = PickRandom(getBotArray());
|
tempBot = PickRandom( getBotArray() );
|
||||||
if (isDefined(tempBot))
|
|
||||||
|
if ( isDefined( tempBot ) )
|
||||||
kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" );
|
kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -608,7 +639,7 @@ addBots_loop()
|
|||||||
pregame:
|
pregame:
|
||||||
in the ShouldDoPregame sub:
|
in the ShouldDoPregame sub:
|
||||||
B8 01 00 00 00: mov eax, 1
|
B8 01 00 00 00: mov eax, 1
|
||||||
change to: B8 00 00 00 00: mov eax, 0
|
change to: B8 00 00 00 00: mov eax, 0
|
||||||
0x4F6C77 in rektmp
|
0x4F6C77 in rektmp
|
||||||
0x4598A7 in bg
|
0x4598A7 in bg
|
||||||
|
|
||||||
@ -616,7 +647,7 @@ change to: B8 00 00 00 00: mov eax, 0
|
|||||||
spawnbots:
|
spawnbots:
|
||||||
in the SV_AddTestClient sub:
|
in the SV_AddTestClient sub:
|
||||||
0F 85 A4 00 00 00: jnz
|
0F 85 A4 00 00 00: jnz
|
||||||
change to: 0F 84 A4 00 00 00: jz
|
change to: 0F 84 A4 00 00 00: jz
|
||||||
0x6B6180 in rektmp
|
0x6B6180 in rektmp
|
||||||
0x4682F0 in bg
|
0x4682F0 in bg
|
||||||
|
|
||||||
@ -633,7 +664,7 @@ addBots()
|
|||||||
|
|
||||||
bot_wait_for_host();
|
bot_wait_for_host();
|
||||||
|
|
||||||
for (;;)
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 1.5;
|
wait 1.5;
|
||||||
|
|
||||||
@ -648,7 +679,7 @@ add_bot()
|
|||||||
{
|
{
|
||||||
bot = addtestclient();
|
bot = addtestclient();
|
||||||
|
|
||||||
if (isdefined(bot))
|
if ( isdefined( bot ) )
|
||||||
{
|
{
|
||||||
bot.pers["isBot"] = true;
|
bot.pers["isBot"] = true;
|
||||||
bot.equipment_enabled = true;
|
bot.equipment_enabled = true;
|
||||||
@ -714,13 +745,13 @@ bot_is_idle()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(self UseButtonPressed())
|
if ( self UseButtonPressed() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(self isPlanting())
|
if ( self isPlanting() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(self isDefusing())
|
if ( self isDefusing() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -731,23 +762,24 @@ bot_is_idle()
|
|||||||
*/
|
*/
|
||||||
watch_grenade()
|
watch_grenade()
|
||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self.bot_scrambled = false;
|
self.bot_scrambled = false;
|
||||||
for(;;)
|
|
||||||
{
|
|
||||||
self waittill("grenade_fire", g, name);
|
|
||||||
|
|
||||||
if (!isDefined(g))
|
for ( ;; )
|
||||||
|
{
|
||||||
|
self waittill( "grenade_fire", g, name );
|
||||||
|
|
||||||
|
if ( !isDefined( g ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(name == "scrambler_mp")
|
if ( name == "scrambler_mp" )
|
||||||
{
|
{
|
||||||
g thread watch_scrambler();
|
g thread watch_scrambler();
|
||||||
}
|
}
|
||||||
else if(name == "nightingale_mp")
|
else if ( name == "nightingale_mp" )
|
||||||
{
|
{
|
||||||
self thread watch_decoy(g);
|
self thread watch_decoy( g );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -755,23 +787,24 @@ watch_grenade()
|
|||||||
/*
|
/*
|
||||||
Watch the decoy grenade
|
Watch the decoy grenade
|
||||||
*/
|
*/
|
||||||
watch_decoy(g)
|
watch_decoy( g )
|
||||||
{
|
{
|
||||||
g.team = self.team;
|
g.team = self.team;
|
||||||
|
|
||||||
level.bot_decoys[level.bot_decoys.size] = g;
|
level.bot_decoys[level.bot_decoys.size] = g;
|
||||||
|
|
||||||
g waittill("death");
|
g waittill( "death" );
|
||||||
|
|
||||||
for ( entry = 0; entry < level.bot_decoys.size; entry++ )
|
for ( entry = 0; entry < level.bot_decoys.size; entry++ )
|
||||||
{
|
{
|
||||||
if ( level.bot_decoys[entry] == g )
|
if ( level.bot_decoys[entry] == g )
|
||||||
{
|
{
|
||||||
while ( entry < level.bot_decoys.size-1 )
|
while ( entry < level.bot_decoys.size - 1 )
|
||||||
{
|
{
|
||||||
level.bot_decoys[entry] = level.bot_decoys[entry+1];
|
level.bot_decoys[entry] = level.bot_decoys[entry + 1];
|
||||||
entry++;
|
entry++;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.bot_decoys[entry] = undefined;
|
level.bot_decoys[entry] = undefined;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -783,39 +816,40 @@ watch_decoy(g)
|
|||||||
*/
|
*/
|
||||||
watch_scrambler()
|
watch_scrambler()
|
||||||
{
|
{
|
||||||
trig = spawn( "trigger_radius", self.origin + (0, 0, -1000), 0, 1000, 2000 );
|
trig = spawn( "trigger_radius", self.origin + ( 0, 0, -1000 ), 0, 1000, 2000 );
|
||||||
|
|
||||||
self scramble_nearby(trig);
|
self scramble_nearby( trig );
|
||||||
|
|
||||||
trig delete();
|
trig delete ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Watch when players enter the scrambler trigger
|
Watch when players enter the scrambler trigger
|
||||||
*/
|
*/
|
||||||
scramble_nearby(trig)
|
scramble_nearby( trig )
|
||||||
{
|
{
|
||||||
self endon("death");
|
self endon( "death" );
|
||||||
self endon("hacked");
|
self endon( "hacked" );
|
||||||
|
|
||||||
while(!isDefined(self.owner) || !isDefined(self.owner.team))
|
while ( !isDefined( self.owner ) || !isDefined( self.owner.team ) )
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
self.team = self.owner.team;
|
self.team = self.owner.team;
|
||||||
for(;;)
|
|
||||||
|
for ( ;; )
|
||||||
{
|
{
|
||||||
trig waittill("trigger", player);
|
trig waittill( "trigger", player );
|
||||||
|
|
||||||
if (!isDefined(player) || !isDefined(player.team))
|
if ( !isDefined( player ) || !isDefined( player.team ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(self maps\mp\gametypes\_weaponobjects::isStunned())
|
if ( self maps\mp\gametypes\_weaponobjects::isStunned() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(isDefined(self.owner) && player == self.owner)
|
if ( isDefined( self.owner ) && player == self.owner )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(level.teamBased && self.team == player.team)
|
if ( level.teamBased && self.team == player.team )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
player thread scramble_player();
|
player thread scramble_player();
|
||||||
@ -827,13 +861,13 @@ scramble_nearby(trig)
|
|||||||
*/
|
*/
|
||||||
scramble_player()
|
scramble_player()
|
||||||
{
|
{
|
||||||
self notify("scramble_nearby");
|
self notify( "scramble_nearby" );
|
||||||
self endon("scramble_nearby");
|
self endon( "scramble_nearby" );
|
||||||
|
|
||||||
self.bot_scrambled = true;
|
self.bot_scrambled = true;
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
|
|
||||||
if(isDefined(self))
|
if ( isDefined( self ) )
|
||||||
self.bot_scrambled = false;
|
self.bot_scrambled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -842,10 +876,11 @@ scramble_player()
|
|||||||
*/
|
*/
|
||||||
watch_shoot()
|
watch_shoot()
|
||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self.bot_firing = false;
|
self.bot_firing = false;
|
||||||
for(;;)
|
|
||||||
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "weapon_fired" );
|
self waittill( "weapon_fired" );
|
||||||
self thread doFiringThread();
|
self thread doFiringThread();
|
||||||
@ -857,8 +892,8 @@ watch_shoot()
|
|||||||
*/
|
*/
|
||||||
doFiringThread()
|
doFiringThread()
|
||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon( "disconnect" );
|
||||||
self endon("weapon_fired");
|
self endon( "weapon_fired" );
|
||||||
|
|
||||||
self.bot_firing = true;
|
self.bot_firing = true;
|
||||||
wait 1;
|
wait 1;
|
||||||
@ -870,18 +905,19 @@ doFiringThread()
|
|||||||
*/
|
*/
|
||||||
bot_watch_planes_loop()
|
bot_watch_planes_loop()
|
||||||
{
|
{
|
||||||
ents = GetEntArray("script_model", "classname");
|
ents = GetEntArray( "script_model", "classname" );
|
||||||
for(i = 0; i < ents.size; i++)
|
|
||||||
|
for ( i = 0; i < ents.size; i++ )
|
||||||
{
|
{
|
||||||
ent = ents[i];
|
ent = ents[i];
|
||||||
|
|
||||||
if(isDefined(ent.bot_plane))
|
if ( isDefined( ent.bot_plane ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(ent.model != level.spyplanemodel)
|
if ( ent.model != level.spyplanemodel )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
thread watch_plane(ent);
|
thread watch_plane( ent );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -890,9 +926,9 @@ bot_watch_planes_loop()
|
|||||||
*/
|
*/
|
||||||
bot_watch_planes()
|
bot_watch_planes()
|
||||||
{
|
{
|
||||||
for(;;)
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill("uav_update");
|
level waittill( "uav_update" );
|
||||||
|
|
||||||
bot_watch_planes_loop();
|
bot_watch_planes_loop();
|
||||||
}
|
}
|
||||||
@ -901,23 +937,24 @@ bot_watch_planes()
|
|||||||
/*
|
/*
|
||||||
Watches the plane
|
Watches the plane
|
||||||
*/
|
*/
|
||||||
watch_plane(ent)
|
watch_plane( ent )
|
||||||
{
|
{
|
||||||
ent.bot_plane = true;
|
ent.bot_plane = true;
|
||||||
|
|
||||||
level.bot_planes[level.bot_planes.size] = ent;
|
level.bot_planes[level.bot_planes.size] = ent;
|
||||||
|
|
||||||
ent waittill_any("death", "delete", "leaving");
|
ent waittill_any( "death", "delete", "leaving" );
|
||||||
|
|
||||||
for ( entry = 0; entry < level.bot_planes.size; entry++ )
|
for ( entry = 0; entry < level.bot_planes.size; entry++ )
|
||||||
{
|
{
|
||||||
if ( level.bot_planes[entry] == ent )
|
if ( level.bot_planes[entry] == ent )
|
||||||
{
|
{
|
||||||
while ( entry < level.bot_planes.size-1 )
|
while ( entry < level.bot_planes.size - 1 )
|
||||||
{
|
{
|
||||||
level.bot_planes[entry] = level.bot_planes[entry+1];
|
level.bot_planes[entry] = level.bot_planes[entry + 1];
|
||||||
entry++;
|
entry++;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.bot_planes[entry] = undefined;
|
level.bot_planes[entry] = undefined;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -937,13 +974,15 @@ bot_killBoost()
|
|||||||
*/
|
*/
|
||||||
fixGamemodes()
|
fixGamemodes()
|
||||||
{
|
{
|
||||||
for(i=0;i<19;i++)
|
for ( i = 0; i < 19; i++ )
|
||||||
{
|
{
|
||||||
if(isDefined(level.bombZones) && level.gametype == "sd")
|
if ( isDefined( level.bombZones ) && level.gametype == "sd" )
|
||||||
{
|
{
|
||||||
level.isKillBoosting = ::bot_killBoost;
|
level.isKillBoosting = ::bot_killBoost;
|
||||||
for(i = 0; i < level.bombZones.size; i++)
|
|
||||||
|
for ( i = 0; i < level.bombZones.size; i++ )
|
||||||
level.bombZones[i].onUse = ::bot_onUsePlantObjectFix;
|
level.bombZones[i].onUse = ::bot_onUsePlantObjectFix;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user