This commit is contained in:
ineed bots 2024-01-04 16:08:30 -06:00
parent 7105b397c3
commit ddc7e5fcc4
6 changed files with 1908 additions and 1903 deletions

View File

@ -1,21 +1,27 @@
# try to mimic the original gsc provided # try to mimic the original gsc provided
# mode=ghc
mode=c mode=c
style=allman style=allman
indent=tab indent=force-tab=2
lineend=windows lineend=windows
pad-oper pad-oper
pad-paren-in pad-paren-in
pad-header pad-header
# pad-brackets-in
# delete-empty-lines fill-empty-lines
squeeze-lines=2
squeeze-ws
break-one-line-headers
add-braces
remove-comment-prefix
break-blocks break-blocks
# remove-braces
indent-switches indent-switches
indent-cases indent-cases
indent-after-parens indent-after-parens
indent-col1-comments
remove-comment-prefix remove-comment-prefix

View File

@ -4,7 +4,7 @@ root = true
indent_style = tab indent_style = tab
indent_size = 2 indent_size = 2
charset = latin1 charset = latin1
trim_trailing_whitespace = true trim_trailing_whitespace = false
insert_final_newline = true insert_final_newline = true
[*.md] [*.md]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,7 @@ wait_for_builtins()
{ {
return true; return true;
} }
if ( i < 18 ) if ( i < 18 )
{ {
waittillframeend; waittillframeend;
@ -30,7 +30,7 @@ wait_for_builtins()
wait 0.05; wait 0.05;
} }
} }
return false; return false;
} }
@ -197,19 +197,19 @@ 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;
} }
return result; return result;
} }
@ -231,7 +231,7 @@ getGoodMapAmount()
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 )
@ -258,7 +258,7 @@ PickRandom( arr )
{ {
return undefined; return undefined;
} }
return arr[ randomint( arr.size ) ]; return arr[ randomint( arr.size ) ];
} }
@ -332,27 +332,27 @@ allowTeamChoice()
GetBotDiffNum() 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;
break; break;
} }
return num; return num;
} }
@ -365,7 +365,7 @@ isWeaponAltmode( weap )
{ {
return true; return true;
} }
return false; return false;
} }
@ -380,57 +380,57 @@ bot_lookat( pos, time, vel, doAimPredict )
self endon( "death" ); self endon( "death" );
self endon( "spawned_player" ); self endon( "spawned_player" );
level endon ( "game_ended" ); level endon ( "game_ended" );
if ( level.gameended || level.inprematchperiod || self BotIsFrozen() || !getdvarint( "bots_play_aim" ) ) if ( level.gameended || level.inprematchperiod || self BotIsFrozen() || !getdvarint( "bots_play_aim" ) )
{ {
return; return;
} }
if ( !isdefined( pos ) ) if ( !isdefined( pos ) )
{ {
return; return;
} }
if ( !isdefined( doAimPredict ) ) if ( !isdefined( doAimPredict ) )
{ {
doAimPredict = false; doAimPredict = false;
} }
if ( !isdefined( time ) ) if ( !isdefined( time ) )
{ {
time = 0.05; time = 0.05;
} }
if ( !isdefined( vel ) ) if ( !isdefined( vel ) )
{ {
vel = ( 0, 0, 0 ); vel = ( 0, 0, 0 );
} }
steps = int( time * 20 ); steps = int( time * 20 );
if ( steps < 1 ) if ( steps < 1 )
{ {
steps = 1; steps = 1;
} }
myEye = self geteye(); // get our eye pos myEye = self geteye(); // get our eye pos
if ( doAimPredict ) if ( doAimPredict )
{ {
myEye += ( self getvelocity() * 0.05 ) * ( steps - 1 ); // account for our velocity myEye += ( self getvelocity() * 0.05 ) * ( steps - 1 ); // account for our velocity
pos += ( vel * 0.05 ) * ( steps - 1 ); // add the velocity vector pos += ( vel * 0.05 ) * ( steps - 1 ); // add the velocity vector
} }
myAngle = self getplayerangles(); myAngle = self getplayerangles();
angles = vectortoangles( ( pos - myEye ) - anglestoforward( myAngle ) ); angles = vectortoangles( ( pos - myEye ) - anglestoforward( myAngle ) );
X = angleclamp180( angles[ 0 ] - myAngle[ 0 ] ); X = angleclamp180( angles[ 0 ] - myAngle[ 0 ] );
X = X / steps; X = X / steps;
Y = angleclamp180( angles[ 1 ] - myAngle[ 1 ] ); Y = angleclamp180( angles[ 1 ] - myAngle[ 1 ] );
Y = Y / steps; Y = Y / steps;
for ( i = 0; i < steps; i++ ) for ( i = 0; i < steps; i++ )
{ {
myAngle = ( angleclamp180( myAngle[ 0 ] + X ), angleclamp180( myAngle[ 1 ] + Y ), 0 ); myAngle = ( angleclamp180( myAngle[ 0 ] + X ), angleclamp180( myAngle[ 1 ] + Y ), 0 );
@ -445,12 +445,12 @@ bot_lookat( pos, time, vel, doAimPredict )
getweaponslistall() getweaponslistall()
{ {
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 ];
toks = strtok( weap, "_" ); toks = strtok( weap, "_" );
if ( issubstr( weap, "_gl_" ) ) if ( issubstr( weap, "_gl_" ) )
{ {
weaps[ weaps.size ] = "gl_" + toks[ 0 ] + "_mp"; weaps[ weaps.size ] = "gl_" + toks[ 0 ] + "_mp";
@ -464,7 +464,7 @@ getweaponslistall()
weaps[ weaps.size ] = "mk_" + toks[ 0 ] + "_mp"; weaps[ weaps.size ] = "mk_" + toks[ 0 ] + "_mp";
} }
} }
return weaps; return weaps;
} }
@ -474,22 +474,22 @@ getweaponslistall()
getValidTube() getValidTube()
{ {
weaps = self getweaponslistall(); weaps = self getweaponslistall();
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;
} }
} }
return undefined; return undefined;
} }
@ -502,36 +502,36 @@ waittill_any_timeout( timeOut, string1, string2, string3, string4, string5 )
{ {
self endon( "death" ); self endon( "death" );
} }
ent = spawnstruct(); ent = spawnstruct();
if ( isdefined( string1 ) ) if ( isdefined( string1 ) )
{ {
self thread waittill_string( string1, ent ); self thread waittill_string( string1, ent );
} }
if ( isdefined( string2 ) ) if ( isdefined( string2 ) )
{ {
self thread waittill_string( string2, ent ); self thread waittill_string( string2, ent );
} }
if ( isdefined( string3 ) ) if ( isdefined( string3 ) )
{ {
self thread waittill_string( string3, ent ); self thread waittill_string( string3, ent );
} }
if ( isdefined( string4 ) ) if ( isdefined( string4 ) )
{ {
self thread waittill_string( string4, ent ); self thread waittill_string( string4, ent );
} }
if ( isdefined( string5 ) ) if ( isdefined( string5 ) )
{ {
self thread waittill_string( string5, ent ); self thread waittill_string( string5, ent );
} }
ent thread _timeout( timeOut ); ent thread _timeout( timeOut );
ent waittill( "returned", msg ); ent waittill( "returned", msg );
ent notify( "die" ); ent notify( "die" );
return msg; return msg;
@ -543,7 +543,7 @@ waittill_any_timeout( timeOut, string1, string2, string3, string4, string5 )
_timeout( delay ) _timeout( delay )
{ {
self endon( "die" ); self endon( "die" );
wait( delay ); wait( delay );
self notify( "returned", "timeout" ); self notify( "returned", "timeout" );
} }
@ -554,27 +554,27 @@ _timeout( delay )
getBotToKick() getBotToKick()
{ {
bots = getBotArray(); bots = getBotArray();
if ( !isdefined( bots ) || !isdefined( bots.size ) || bots.size <= 0 || !isdefined( bots[ 0 ] ) ) if ( !isdefined( bots ) || !isdefined( bots.size ) || bots.size <= 0 || !isdefined( bots[ 0 ] ) )
{ {
return undefined; return undefined;
} }
tokick = undefined; tokick = undefined;
axis = 0; axis = 0;
allies = 0; allies = 0;
team = getdvar( "bots_team" ); team = getdvar( "bots_team" );
// count teams // count teams
for ( i = 0; i < bots.size; i++ ) for ( i = 0; i < bots.size; i++ )
{ {
bot = bots[ i ]; bot = bots[ i ];
if ( !isdefined( bot ) || !isdefined( bot.team ) ) if ( !isdefined( bot ) || !isdefined( bot.team ) )
{ {
continue; continue;
} }
if ( bot.team == "allies" ) if ( bot.team == "allies" )
{ {
allies++; allies++;
@ -588,7 +588,7 @@ getBotToKick()
return bot; return bot;
} }
} }
// search for a bot on the other team // search for a bot on the other team
if ( team == "custom" || team == "axis" ) if ( team == "custom" || team == "axis" )
{ {
@ -598,7 +598,7 @@ getBotToKick()
{ {
// get the team with the most bots // get the team with the most bots
team = "allies"; team = "allies";
if ( axis > allies ) if ( axis > allies )
{ {
team = "axis"; team = "axis";
@ -608,43 +608,43 @@ getBotToKick()
{ {
team = "axis"; team = "axis";
} }
// get the bot on this team with lowest skill // get the bot on this team with lowest skill
for ( i = 0; i < bots.size; i++ ) for ( i = 0; i < bots.size; i++ )
{ {
bot = bots[ i ]; bot = bots[ i ];
if ( !isdefined( bot ) || !isdefined( bot.team ) ) if ( !isdefined( bot ) || !isdefined( bot.team ) )
{ {
continue; continue;
} }
if ( bot.team != team ) if ( bot.team != team )
{ {
continue; continue;
} }
tokick = bot; tokick = bot;
} }
if ( isdefined( tokick ) ) if ( isdefined( tokick ) )
{ {
return tokick; return tokick;
} }
// just kick lowest skill // just kick lowest skill
for ( i = 0; i < bots.size; i++ ) for ( i = 0; i < bots.size; i++ )
{ {
bot = bots[ i ]; bot = bots[ i ];
if ( !isdefined( bot ) || !isdefined( bot.team ) ) if ( !isdefined( bot ) || !isdefined( bot.team ) )
{ {
continue; continue;
} }
tokick = bot; tokick = bot;
} }
return tokick; return tokick;
} }
@ -654,51 +654,51 @@ getBotToKick()
bot_wait_for_host() 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;
} }
} }
@ -770,17 +770,17 @@ botStopMove2( 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 ) );
@ -803,122 +803,122 @@ BotNotifyBotEvent( msg, a, b, c, d, e, f, g )
keyCodeToString( a ) keyCodeToString( a )
{ {
b = ""; b = "";
switch ( a ) switch ( a )
{ {
case 0: case 0:
b = "a"; b = "a";
break; break;
case 1: case 1:
b = "b"; b = "b";
break; break;
case 2: case 2:
b = "c"; b = "c";
break; break;
case 3: case 3:
b = "d"; b = "d";
break; break;
case 4: case 4:
b = "e"; b = "e";
break; break;
case 5: case 5:
b = "f"; b = "f";
break; break;
case 6: case 6:
b = "g"; b = "g";
break; break;
case 7: case 7:
b = "h"; b = "h";
break; break;
case 8: case 8:
b = "i"; b = "i";
break; break;
case 9: case 9:
b = "j"; b = "j";
break; break;
case 10: case 10:
b = "k"; b = "k";
break; break;
case 11: case 11:
b = "l"; b = "l";
break; break;
case 12: case 12:
b = "m"; b = "m";
break; break;
case 13: case 13:
b = "n"; b = "n";
break; break;
case 14: case 14:
b = "o"; b = "o";
break; break;
case 15: case 15:
b = "p"; b = "p";
break; break;
case 16: case 16:
b = "q"; b = "q";
break; break;
case 17: case 17:
b = "r"; b = "r";
break; break;
case 18: case 18:
b = "s"; b = "s";
break; break;
case 19: case 19:
b = "t"; b = "t";
break; break;
case 20: case 20:
b = "u"; b = "u";
break; break;
case 21: case 21:
b = "v"; b = "v";
break; break;
case 22: case 22:
b = "w"; b = "w";
break; break;
case 23: case 23:
b = "x"; b = "x";
break; break;
case 24: case 24:
b = "y"; b = "y";
break; break;
case 25: case 25:
b = "z"; b = "z";
break; break;
case 26: case 26:
b = "."; b = ".";
break; break;
case 27: case 27:
b = " "; b = " ";
break; break;
} }
return b; return b;
} }
@ -950,7 +950,7 @@ bot_onUsePlantObjectFix( player )
{ {
level thread bot_bombPlanted( self, player ); level thread bot_bombPlanted( self, player );
player logstring( "bomb planted: " + self.label ); player logstring( "bomb planted: " + self.label );
// disable all bomb zones except this one // disable all bomb zones except this one
for ( index = 0; index < level.bombzones.size; index++ ) for ( index = 0; index < level.bombzones.size; index++ )
{ {
@ -958,28 +958,28 @@ bot_onUsePlantObjectFix( player )
{ {
continue; continue;
} }
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" ];
} }
player maps\mp\_medals::saboteur(); player maps\mp\_medals::saboteur();
player maps\mp\gametypes\_persistence::stataddwithgametype( "PLANTS", 1 ); player maps\mp\gametypes\_persistence::stataddwithgametype( "PLANTS", 1 );
maps\mp\gametypes\_globallogic_audio::leaderdialog( "bomb_planted" ); maps\mp\gametypes\_globallogic_audio::leaderdialog( "bomb_planted" );
maps\mp\gametypes\_globallogic_score::giveplayerscore( "plant", player ); maps\mp\gametypes\_globallogic_score::giveplayerscore( "plant", player );
// player thread [[ level.onxpevent ]]( "plant" ); // player thread [[ level.onxpevent ]]( "plant" );
} }
@ -992,19 +992,19 @@ bot_bombPlanted( destroyedObj, player )
{ {
maps\mp\gametypes\_globallogic_utils::pausetimer(); maps\mp\gametypes\_globallogic_utils::pausetimer();
level.bombplanted = true; level.bombplanted = true;
destroyedObj.visuals[ 0 ] thread maps\mp\gametypes\_globallogic_utils::playtickingsound( "mpl_sab_ui_suitcasebomb_timer" ); destroyedObj.visuals[ 0 ] thread maps\mp\gametypes\_globallogic_utils::playtickingsound( "mpl_sab_ui_suitcasebomb_timer" );
// Play suspense music // Play suspense music
level thread maps\mp\gametypes\sd::bombplantedmusicdelay(); level thread maps\mp\gametypes\sd::bombplantedmusicdelay();
// thread maps\mp\gametypes\_globallogic_audio::actionmusicset(); // thread maps\mp\gametypes\_globallogic_audio::actionmusicset();
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 )
{ {
level.sdbomb maps\mp\gametypes\_gameobjects::allowcarry( "none" ); level.sdbomb maps\mp\gametypes\_gameobjects::allowcarry( "none" );
@ -1014,7 +1014,7 @@ bot_bombPlanted( destroyedObj, player )
} }
else else
{ {
for ( index = 0; index < level.players.size; index++ ) for ( index = 0; index < level.players.size; index++ )
{ {
if ( isdefined( level.players[ index ].carryicon ) ) if ( isdefined( level.players[ index ].carryicon ) )
@ -1022,19 +1022,19 @@ 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 );
level.sdbombmodel = spawn( "script_model", trace[ "position" ] ); level.sdbombmodel = spawn( "script_model", trace[ "position" ] );
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" );
/* /*
@ -1044,7 +1044,7 @@ bot_bombPlanted( destroyedObj, player )
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();
// create a new object to defuse with. // create a new object to defuse with.
trigger = destroyedObj.bombdefusetrig; trigger = destroyedObj.bombdefusetrig;
trigger.origin = level.sdbombmodel.origin; trigger.origin = level.sdbombmodel.origin;
@ -1064,28 +1064,27 @@ bot_bombPlanted( destroyedObj, player )
defuseObject.onenduse = maps\mp\gametypes\sd::onenduse; defuseObject.onenduse = maps\mp\gametypes\sd::onenduse;
defuseObject.onuse = maps\mp\gametypes\sd::onusedefuseobject; defuseObject.onuse = maps\mp\gametypes\sd::onusedefuseobject;
defuseObject.useweapon = "briefcase_bomb_defuse_mp"; defuseObject.useweapon = "briefcase_bomb_defuse_mp";
level.defuseobject = defuseObject; // every cod... level.defuseobject = defuseObject; // every cod...
player.isbombcarrier = false; player.isbombcarrier = false;
maps\mp\gametypes\sd::bombtimerwait(); maps\mp\gametypes\sd::bombtimerwait();
setmatchflag( "bomb_timer", 0 ); setmatchflag( "bomb_timer", 0 );
destroyedObj.visuals[ 0 ] maps\mp\gametypes\_globallogic_utils::stoptickingsound(); destroyedObj.visuals[ 0 ] maps\mp\gametypes\_globallogic_utils::stoptickingsound();
if ( level.gameended || level.bombdefused ) if ( level.gameended || level.bombdefused )
{ {
return; return;
} }
level.bombexploded = true; level.bombexploded = true;
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 ) )
{ {
destroyedObj.visuals[ 0 ] radiusdamage( explosionOrigin, 512, 200, 20, player, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); destroyedObj.visuals[ 0 ] radiusdamage( explosionOrigin, 512, 200, 20, player, "MOD_EXPLOSIVE", "briefcase_bomb_mp" );
@ -1097,29 +1096,29 @@ bot_bombPlanted( destroyedObj, player )
{ {
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 );
// thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "SILENT", "both" ); // thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "SILENT", "both" );
if ( isdefined( destroyedObj.exploderindex ) ) if ( isdefined( destroyedObj.exploderindex ) )
{ {
exploder( destroyedObj.exploderindex ); exploder( destroyedObj.exploderindex );
} }
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 );
wait 3; wait 3;
maps\mp\gametypes\sd::sd_endgame( game[ "attackers" ], game[ "strings" ][ "target_destroyed" ] ); maps\mp\gametypes\sd::sd_endgame( game[ "attackers" ], game[ "strings" ][ "target_destroyed" ] );
} }

File diff suppressed because it is too large Load Diff