mirror of
https://github.com/ineedbots/t5_bot_warfare.git
synced 2025-04-22 01:15:44 +00:00
Changes
This commit is contained in:
parent
00fc713e5a
commit
b540a8e884
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
_bot_utility
|
_bot_utility
|
||||||
Author: INeedGames
|
Author: INeedGames
|
||||||
Date: 12/20/2020
|
Date: 12/20/2020
|
||||||
The shared functions for bots
|
The shared functions for bots
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include common_scripts\utility;
|
#include common_scripts\utility;
|
||||||
@ -10,284 +10,332 @@
|
|||||||
#include maps\mp\gametypes\_hud_util;
|
#include maps\mp\gametypes\_hud_util;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Returns an array of all the bots in the game.
|
Returns an array of all the bots in the game.
|
||||||
*/
|
*/
|
||||||
getBotArray()
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Returns a good amount of players.
|
Returns a good amount of players.
|
||||||
*/
|
*/
|
||||||
getGoodMapAmount()
|
getGoodMapAmount()
|
||||||
{
|
{
|
||||||
switch(getdvar("mapname"))
|
switch(getdvar("mapname"))
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
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;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
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)];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Waits for a host player
|
Waits for a host player
|
||||||
*/
|
*/
|
||||||
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 = 0; i < 100; i++)
|
for(i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
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 = 0; i < 100; i++)
|
for(i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
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 = 0; i < 100; i++)
|
for(i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
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");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Fixes sd bomb planting
|
Matches a num to a char
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Does the extra check when adding bots
|
||||||
|
*/
|
||||||
|
doExtraCheck()
|
||||||
|
{
|
||||||
|
maps\mp\bots\_bot_script::checkTheBots();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Fixes sd bomb planting
|
||||||
*/
|
*/
|
||||||
bot_onUsePlantObjectFix( player )
|
bot_onUsePlantObjectFix( player )
|
||||||
{
|
{
|
||||||
// planted the bomb
|
// planted the bomb
|
||||||
if ( !self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) )
|
if ( !self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) )
|
||||||
{
|
{
|
||||||
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++ )
|
||||||
{
|
{
|
||||||
if ( level.bombZones[index] == self )
|
if ( level.bombZones[index] == self )
|
||||||
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" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Fixes sd bomb planting
|
Fixes sd bomb planting
|
||||||
*/
|
*/
|
||||||
bot_bombPlanted( destroyedObj, player )
|
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" );
|
||||||
level.sdBomb maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
|
level.sdBomb maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
|
||||||
level.sdBomb maps\mp\gametypes\_gameobjects::setDropped();
|
level.sdBomb maps\mp\gametypes\_gameobjects::setDropped();
|
||||||
level.sdBombModel = level.sdBomb.visuals[0];
|
level.sdBombModel = level.sdBomb.visuals[0];
|
||||||
}
|
}
|
||||||
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 ) )
|
||||||
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" );
|
||||||
/*
|
/*
|
||||||
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();
|
||||||
|
|
||||||
// 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;
|
||||||
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" );
|
||||||
defuseObject maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" );
|
defuseObject maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" );
|
||||||
defuseObject maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
|
defuseObject maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" );
|
||||||
defuseObject maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defuse" + label );
|
defuseObject maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defuse" + label );
|
||||||
defuseObject maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_defend" + label );
|
defuseObject maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_defend" + label );
|
||||||
defuseObject maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defuse" + label );
|
defuseObject maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defuse" + label );
|
||||||
defuseObject maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_defend" + label );
|
defuseObject maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_defend" + label );
|
||||||
defuseObject.label = label;
|
defuseObject.label = label;
|
||||||
defuseObject.onBeginUse = maps\mp\gametypes\sd::onBeginUse;
|
defuseObject.onBeginUse = maps\mp\gametypes\sd::onBeginUse;
|
||||||
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" );
|
||||||
level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_BLOWUP_BY", player );
|
level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_BLOWUP_BY", player );
|
||||||
player maps\mp\_medals::bomber();
|
player maps\mp\_medals::bomber();
|
||||||
player maps\mp\gametypes\_persistence::statAddWithGameType( "DESTRUCTIONS", 1 );
|
player maps\mp\gametypes\_persistence::statAddWithGameType( "DESTRUCTIONS", 1 );
|
||||||
}
|
}
|
||||||
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 );
|
||||||
//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
Loading…
x
Reference in New Issue
Block a user