This commit is contained in:
6arelyFuture 2021-09-29 19:33:45 +01:00
parent 2977800533
commit 2db0b1cd61
6 changed files with 492 additions and 448 deletions

View File

@ -20,52 +20,64 @@ init()
onConnect() onConnect()
{ {
for ( ;; ) for ( ;; )
{ {
level waittill( "connected", player ); level waittill( "connected", player );
player thread monitorForRewards(); player thread monitorForRewards();
} }
} }
monitorForRewards() monitorForRewards()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
level endon( "game_ended" ); level endon( "game_ended" );
for ( ;; ) for ( ;; )
{ {
self waittill( "killed_enemy" ); self waittill( "killed_enemy" );
if ( self.pers["team"] == "axis" ) return; // It's infected. Once your team is axis you are done for the game if ( self.pers["team"] == "axis" ) return; // It's infected. Once your team is axis you are done for the game
count = self.kills; count = self.kills;
switch( count )
switch ( count )
{ {
case 1: case 1:
self scripts\_inf_utils::playLeaderDialog( "kill_confirmed" ); self scripts\_inf_utils::playLeaderDialog( "kill_confirmed" );
level thread dropAmmo( self ); level thread dropAmmo( self );
break; break;
case 5:
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "deployable_vest" ); case 5:
break; self maps\mp\killstreaks\_killstreaks::giveKillstreak( "deployable_vest" );
case 9: break;
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile" );
break; case 9:
case 18: self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile" );
level thread maps\mp\killstreaks\_airdrop::doMegaC130FlyBy( self, self.origin, randomFloat( 360 ), "airdrop_grnd", -360 ); break;
break;
case 25: case 18:
self maps\mp\killstreaks\_juggernaut::giveJuggernaut( "juggernaut" ); level thread maps\mp\killstreaks\_airdrop::doMegaC130FlyBy( self, self.origin, randomFloat( 360 ), "airdrop_grnd", -360 );
break; break;
case 45:
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "ac130" ); case 25:
break; self maps\mp\killstreaks\_juggernaut::giveJuggernaut( "juggernaut" );
case 85: break;
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "helicopter_flares" );
break; case 45:
case 100: self maps\mp\killstreaks\_killstreaks::giveKillstreak( "ac130" );
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "osprey_gunner" ); break;
break;
case 120: case 85:
level thread maps\mp\killstreaks\_airdrop::dropNuke( self.origin, self, "nuke_drop" ); self maps\mp\killstreaks\_killstreaks::giveKillstreak( "helicopter_flares" );
break; break;
case 100:
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "osprey_gunner" );
break;
case 120:
level thread maps\mp\killstreaks\_airdrop::dropNuke( self.origin, self, "nuke_drop" );
break;
} }
} }
} }
@ -102,6 +114,7 @@ dropAmmo( owner )
boomPlayed = false; boomPlayed = false;
minDist = distance2D( c130.origin, dropSite ); minDist = distance2D( c130.origin, dropSite );
for ( ;; ) for ( ;; )
{ {
dist = distance2D( c130.origin, dropSite ); dist = distance2D( c130.origin, dropSite );
@ -116,6 +129,7 @@ dropAmmo( owner )
else if ( dist < 768 ) else if ( dist < 768 )
{ {
earthquake( 0.15, 1.5, dropSite, 1500 ); earthquake( 0.15, 1.5, dropSite, 1500 );
if ( !boomPlayed ) if ( !boomPlayed )
{ {
c130 playSound( "veh_ac130_sonic_boom" ); c130 playSound( "veh_ac130_sonic_boom" );
@ -131,7 +145,7 @@ dropAmmo( owner )
c130 notify ( "drop_crate" ); c130 notify ( "drop_crate" );
wait( 4 ); wait( 4 );
c130 delete(); c130 delete ();
} }
ammoCrateThink( dropType ) ammoCrateThink( dropType )
@ -176,24 +190,25 @@ giveJuggernautStub( juggType )
if ( isDefined( self.hasLightArmor ) && self.hasLightArmor == true ) if ( isDefined( self.hasLightArmor ) && self.hasLightArmor == true )
maps\mp\perks\_perkfunctions::removeLightArmor( self.previousMaxHealth ); maps\mp\perks\_perkfunctions::removeLightArmor( self.previousMaxHealth );
switch( juggType ) switch ( juggType )
{ {
case "juggernaut": case "juggernaut":
self.isJuggernaut = true; self.isJuggernaut = true;
self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], juggType, false, false ); self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], juggType, false, false );
break; break;
case "juggernaut_recon":
self.isJuggernautRecon = true;
self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], juggType, false, false );
portable_radar = spawn( "script_model", self.origin ); case "juggernaut_recon":
portable_radar.team = self.team; self.isJuggernautRecon = true;
self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], juggType, false, false );
portable_radar makePortableRadar( self ); portable_radar = spawn( "script_model", self.origin );
self.personalRadar = portable_radar; portable_radar.team = self.team;
self thread maps\mp\killstreaks\_juggernaut::radarMover( portable_radar ); portable_radar makePortableRadar( self );
break; self.personalRadar = portable_radar;
self thread maps\mp\killstreaks\_juggernaut::radarMover( portable_radar );
break;
} }
if ( !getDvarInt( "camera_thirdPerson" ) ) if ( !getDvarInt( "camera_thirdPerson" ) )

View File

@ -11,76 +11,83 @@ ANTI_CAMP_RADIUS = 350;
init() init()
{ {
thread onConnect(); thread onConnect();
} }
onConnect() onConnect()
{ {
for ( ;; ) for ( ;; )
{ {
level waittill( "connected", player ); level waittill( "connected", player );
player thread monitorKillStreak(); player thread monitorKillStreak();
player thread connected(); player thread connected();
} }
} }
connected() connected()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
level endon( "game_ended" ); level endon( "game_ended" );
for ( ;; )
{ for ( ;; )
self waittill( "spawned_player" ); {
if ( self.pers["team"] != "allies" ) self waittill( "spawned_player" );
self.anti_camp = false;
} if ( self.pers["team"] != "allies" )
self.anti_camp = false;
}
} }
startAntiCamp() startAntiCamp()
{ {
assert( self.pers["team"] == "allies" ); assert( self.pers["team"] == "allies" );
level endon( "game_ended" ); level endon( "game_ended" );
self endon ( "disconnect" ); self endon ( "disconnect" );
oldPosition = self.origin; oldPosition = self.origin;
self iPrintLnBold( "^1Run ^:For Your Life^7!" ); self iPrintLnBold( "^1Run ^:For Your Life^7!" );
self scripts\_inf_utils::playLeaderDialog( "pushforward" ); self scripts\_inf_utils::playLeaderDialog( "pushforward" );
for ( ;; )
{
wait( 7.5 );
if ( !self.anti_camp ) return;
if ( self isUsingRemote() ) continue; for ( ;; )
{
wait( 7.5 );
newPosition = self.origin; if ( !self.anti_camp ) return;
if ( distance2D( oldPosition, newPosition ) < ANTI_CAMP_RADIUS ) if ( self isUsingRemote() ) continue;
{
dmg = 80;
if ( self.health > 100 ) dmg = 300; // Jugg ?
radiusDamage( newPosition, 36, dmg, dmg * 0.75, undefined, "MOD_TRIGGER_HURT" ); newPosition = self.origin;
self scripts\_inf_utils::playLeaderDialog( "new_positions" );
}
oldPosition = self.origin; if ( distance2D( oldPosition, newPosition ) < ANTI_CAMP_RADIUS )
} {
dmg = 80;
if ( self.health > 100 ) dmg = 300; // Jugg ?
radiusDamage( newPosition, 36, dmg, dmg * 0.75, undefined, "MOD_TRIGGER_HURT" );
self scripts\_inf_utils::playLeaderDialog( "new_positions" );
}
oldPosition = self.origin;
}
} }
monitorKillStreak() monitorKillStreak()
{ {
level endon( "game_ended" ); level endon( "game_ended" );
self endon ( "disconnect" ); self endon ( "disconnect" );
for ( ;; )
{ for ( ;; )
self waittill( "killed_enemy" ); {
count = self getPlayerData( "killstreaksState", "count" ); self waittill( "killed_enemy" );
if ( count > 24 && self.pers["team"] != "axis" ) count = self getPlayerData( "killstreaksState", "count" );
{
self.anti_camp = true; if ( count > 24 && self.pers["team"] != "axis" )
self thread startAntiCamp(); {
return; self.anti_camp = true;
} self thread startAntiCamp();
} return;
}
}
} }

View File

@ -9,27 +9,28 @@
init() init()
{ {
thread antiRageQuit(); thread antiRageQuit();
} }
antiRageQuit() antiRageQuit()
{ {
level endon( "game_ended" ); level endon( "game_ended" );
gameFlagWait( "prematch_done" ); gameFlagWait( "prematch_done" );
for ( ;; )
{
wait( .5 );
for ( ;; )
{
wait( .5 );
// If it's only 2 people let them quit // If it's only 2 people let them quit
if (level.players.size < 3) continue; if ( level.players.size < 3 ) continue;
foreach( player in level.players ) foreach ( player in level.players )
{ {
if ( player.pers["team"] == "axis" ) if ( player.pers["team"] == "axis" )
{ {
player closepopupmenu( "" ); player closepopupmenu( "" );
player closeingamemenu(); player closeingamemenu();
} }
} }
} }
} }

View File

@ -10,143 +10,154 @@
init() init()
{ {
replaceFunc( maps\mp\gametypes\_teams::playerModelForWeapon, ::playerModelForWeaponStub ); replaceFunc( maps\mp\gametypes\_teams::playerModelForWeapon, ::playerModelForWeaponStub );
thread onConnect(); thread onConnect();
preCacheShader( "specialty_carepackage_crate" ); preCacheShader( "specialty_carepackage_crate" );
preCacheShader( "iw5_cardicon_medkit" ); preCacheShader( "iw5_cardicon_medkit" );
preCacheShader( "iw5_cardicon_juggernaut_a" ); preCacheShader( "iw5_cardicon_juggernaut_a" );
preCacheItem( "at4_mp" ); preCacheItem( "at4_mp" );
precacheItem( "uav_strike_marker_mp" ); precacheItem( "uav_strike_marker_mp" );
} }
onConnect() onConnect()
{ {
for ( ;; ) for ( ;; )
{ {
level waittill( "connected", player ); level waittill( "connected", player );
player thread connected(); player thread connected();
} }
} }
connected() connected()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
level endon( "game_ended" ); level endon( "game_ended" );
for ( ;; )
{ for ( ;; )
self waittill( "spawned_player" ); {
waittillframeend; self waittill( "spawned_player" );
if ( self.pers["team"] == "allies" ) waittillframeend;
{
self giveAllPerks(); if ( self.pers["team"] == "allies" )
} {
else self giveAllPerks();
{ }
self giveAllPerks(); else
self SetOffhandPrimaryClass( "other" ); {
self giveWeapon( "bouncingbetty_mp" ); self giveAllPerks();
} self SetOffhandPrimaryClass( "other" );
} self giveWeapon( "bouncingbetty_mp" );
}
}
} }
giveAllPerks() giveAllPerks()
{ {
perks = []; perks = [];
perks[ perks.size ] = "specialty_longersprint"; perks[ perks.size ] = "specialty_longersprint";
perks[ perks.size ] = "specialty_fastreload"; perks[ perks.size ] = "specialty_fastreload";
perks[ perks.size ] = "specialty_scavenger"; perks[ perks.size ] = "specialty_scavenger";
perks[ perks.size ] = "specialty_blindeye"; perks[ perks.size ] = "specialty_blindeye";
perks[ perks.size ] = "specialty_paint"; perks[ perks.size ] = "specialty_paint";
perks[ perks.size ] = "specialty_hardline"; perks[ perks.size ] = "specialty_hardline";
perks[ perks.size ] = "specialty_coldblooded"; perks[ perks.size ] = "specialty_coldblooded";
perks[ perks.size ] = "specialty_quickdraw"; perks[ perks.size ] = "specialty_quickdraw";
perks[ perks.size ] = "_specialty_blastshield"; perks[ perks.size ] = "_specialty_blastshield";
perks[ perks.size ] = "specialty_detectexplosive"; perks[ perks.size ] = "specialty_detectexplosive";
perks[ perks.size ] = "specialty_autospot"; perks[ perks.size ] = "specialty_autospot";
perks[ perks.size ] = "specialty_bulletaccuracy"; perks[ perks.size ] = "specialty_bulletaccuracy";
perks[ perks.size ] = "specialty_quieter"; perks[ perks.size ] = "specialty_quieter";
perks[ perks.size ] = "specialty_stalker"; perks[ perks.size ] = "specialty_stalker";
perks[ perks.size ] = "specialty_bulletpenetration"; perks[ perks.size ] = "specialty_bulletpenetration";
perks[ perks.size ] = "specialty_marksman"; perks[ perks.size ] = "specialty_marksman";
perks[ perks.size ] = "specialty_sharp_focus"; perks[ perks.size ] = "specialty_sharp_focus";
perks[ perks.size ] = "specialty_holdbreathwhileads"; perks[ perks.size ] = "specialty_holdbreathwhileads";
perks[ perks.size ] = "specialty_longerrange"; perks[ perks.size ] = "specialty_longerrange";
perks[ perks.size ] = "specialty_fastermelee"; perks[ perks.size ] = "specialty_fastermelee";
perks[ perks.size ] = "specialty_reducedsway"; perks[ perks.size ] = "specialty_reducedsway";
perks[ perks.size ] = "specialty_lightweight"; perks[ perks.size ] = "specialty_lightweight";
foreach( perkName in perks ) foreach ( perkName in perks )
{ {
if( !self _hasPerk( perkName ) ) if ( !self _hasPerk( perkName ) )
{ {
self givePerk( perkName, false ); self givePerk( perkName, false );
if( maps\mp\gametypes\_class::isPerkUpgraded( perkName ) )
{ if ( maps\mp\gametypes\_class::isPerkUpgraded( perkName ) )
perkUpgrade = tablelookup( "mp/perktable.csv", 1, perkName, 8 ); {
self givePerk( perkUpgrade, false ); perkUpgrade = tablelookup( "mp/perktable.csv", 1, perkName, 8 );
} self givePerk( perkUpgrade, false );
} }
} }
}
} }
playerModelForWeaponStub( weapon, secondary ) playerModelForWeaponStub( weapon, secondary )
{ {
team = self.team; team = self.team;
if ( isDefined( game[ team + "_model" ][weapon] ) ) if ( isDefined( game[ team + "_model" ][weapon] ) )
{ {
[[game[ team + "_model" ][weapon]]](); [[game[ team + "_model" ][weapon]]]();
return; return;
} }
// Hack for infected players // Hack for infected players
if ( self.pers["team"] == "axis" ) if ( self.pers["team"] == "axis" )
{ {
if ( level.environment != "" && self isItemUnlocked( "ghillie_" + level.environment ) ) if ( level.environment != "" && self isItemUnlocked( "ghillie_" + level.environment ) )
[[game[ team + "_model" ]["GHILLIE"]]](); [[game[ team + "_model" ]["GHILLIE"]]]();
else else
[[game[ team + "_model" ]["SNIPER"]]](); [[game[ team + "_model" ]["SNIPER"]]]();
return;
}
weaponClass = tablelookup( "mp/statstable.csv", 4, weapon, 2 ); return;
}
switch ( weaponClass ) weaponClass = tablelookup( "mp/statstable.csv", 4, weapon, 2 );
{
case "weapon_smg":
[[game[ team + "_model" ]["SMG"]]]();
break;
case "weapon_assault":
[[game[ team + "_model" ]["ASSAULT"]]]();
break;
case "weapon_sniper":
if ( level.environment != "" && self isItemUnlocked( "ghillie_" + level.environment ) )
[[game[ team + "_model" ]["GHILLIE"]]]();
else
[[game[ team + "_model" ]["SNIPER"]]]();
break;
case "weapon_lmg":
[[game[ team + "_model" ]["LMG"]]]();
break;
case "weapon_riot":
[[game[ team + "_model" ]["RIOT"]]]();
break;
case "weapon_shotgun":
[[game[ team + "_model" ]["SHOTGUN"]]]();
break;
default:
[[game[team+"_model"]["ASSAULT"]]]();
break;
}
if ( self isJuggernaut() ) switch ( weaponClass )
{ {
[[game[ team + "_model" ]["JUGGERNAUT"]]](); case "weapon_smg":
} [[game[ team + "_model" ]["SMG"]]]();
break;
case "weapon_assault":
[[game[ team + "_model" ]["ASSAULT"]]]();
break;
case "weapon_sniper":
if ( level.environment != "" && self isItemUnlocked( "ghillie_" + level.environment ) )
[[game[ team + "_model" ]["GHILLIE"]]]();
else
[[game[ team + "_model" ]["SNIPER"]]]();
break;
case "weapon_lmg":
[[game[ team + "_model" ]["LMG"]]]();
break;
case "weapon_riot":
[[game[ team + "_model" ]["RIOT"]]]();
break;
case "weapon_shotgun":
[[game[ team + "_model" ]["SHOTGUN"]]]();
break;
default:
[[game[team + "_model"]["ASSAULT"]]]();
break;
}
if ( self isJuggernaut() )
{
[[game[ team + "_model" ]["JUGGERNAUT"]]]();
}
} }

View File

@ -9,176 +9,179 @@
init() init()
{ {
level._effect[ "nolight_burst_mp" ] = loadfx( "fire/firelp_huge_pm_nolight_burst" ); level._effect[ "nolight_burst_mp" ] = loadfx( "fire/firelp_huge_pm_nolight_burst" );
precacheMpAnim( "windmill_spin_med" ); precacheMpAnim( "windmill_spin_med" );
precacheMpAnim( "foliage_desertbrush_1_sway" ); precacheMpAnim( "foliage_desertbrush_1_sway" );
precacheMpAnim( "oilpump_pump01" ); precacheMpAnim( "oilpump_pump01" );
precacheMpAnim( "oilpump_pump02" ); precacheMpAnim( "oilpump_pump02" );
precacheMpAnim( "windsock_large_wind_medium" ); precacheMpAnim( "windsock_large_wind_medium" );
thread domeDyn(); thread domeDyn();
thread nukeDeath(); thread nukeDeath();
} }
domeDyn() domeDyn()
{ {
if ( getDvar( "mapname" ) != "mp_dome" ) return; if ( getDvar( "mapname" ) != "mp_dome" ) return;
animated = getentarray( "animated_model", "targetname" ); animated = getentarray( "animated_model", "targetname" );
for ( i = 0; i < animated.size; i++ ) for ( i = 0; i < animated.size; i++ )
{ {
model_name = animated[i].model; model_name = animated[i].model;
if ( isSubStr( model_name, "fence_tarp_" ) )
{ if ( isSubStr( model_name, "fence_tarp_" ) )
{
// print( "domeDyn fence_tarp_" ); // print( "domeDyn fence_tarp_" );
animated[i].targetname = "dynamic_model"; animated[i].targetname = "dynamic_model";
precacheMpAnim( model_name + "_med_01" ); precacheMpAnim( model_name + "_med_01" );
animated[i] ScriptModelPlayAnim( model_name + "_med_01" ); animated[i] ScriptModelPlayAnim( model_name + "_med_01" );
} }
else if ( model_name == "machinery_windmill" ) else if ( model_name == "machinery_windmill" )
{ {
// print( "domeDyn machinery_windmill" ); // print( "domeDyn machinery_windmill" );
animated[i].targetname = "dynamic_model"; animated[i].targetname = "dynamic_model";
animated[i] ScriptModelPlayAnim( "windmill_spin_med" ); animated[i] ScriptModelPlayAnim( "windmill_spin_med" );
} }
else if ( isSubStr( model_name, "foliage" ) ) else if ( isSubStr( model_name, "foliage" ) )
{ {
// print( "domeDyn foliage" ); // print( "domeDyn foliage" );
animated[i].targetname = "dynamic_model"; animated[i].targetname = "dynamic_model";
animated[i] ScriptModelPlayAnim( "foliage_desertbrush_1_sway" ); animated[i] ScriptModelPlayAnim( "foliage_desertbrush_1_sway" );
} }
else if ( isSubStr( model_name, "oil_pump_jack" ) ) else if ( isSubStr( model_name, "oil_pump_jack" ) )
{ {
// print( "domeDyn oil_pump_jack" ); // print( "domeDyn oil_pump_jack" );
animated[i].targetname = "dynamic_model"; animated[i].targetname = "dynamic_model";
animation = "oilpump_pump0" + ( randomint( 2 ) + 1 ); animation = "oilpump_pump0" + ( randomint( 2 ) + 1 );
animated[i] ScriptModelPlayAnim( animation ); animated[i] ScriptModelPlayAnim( animation );
} }
else if ( model_name == "accessories_windsock_large" ) else if ( model_name == "accessories_windsock_large" )
{ {
// print( "domeDyn accessories_windsock_large" ); // print( "domeDyn accessories_windsock_large" );
animated[i].targetname = "dynamic_model"; animated[i].targetname = "dynamic_model";
animated[i] ScriptModelPlayAnim( "windsock_large_wind_medium" ); animated[i] ScriptModelPlayAnim( "windsock_large_wind_medium" );
} }
} }
} }
doBoxEffect( effect ) doBoxEffect( effect )
{ {
wait ( 3 ); wait ( 3 );
forward = AnglesToForward( self.angles ); forward = AnglesToForward( self.angles );
up = AnglesToUp( self.angles ); up = AnglesToUp( self.angles );
effect delete(); effect delete ();
PlayFX( getfx( "box_explode_mp" ), self.origin, forward, up ); PlayFX( getfx( "box_explode_mp" ), self.origin, forward, up );
self self_func( "scriptModelClearAnim" ); self self_func( "scriptModelClearAnim" );
self Hide(); self Hide();
} }
fenceEffect() fenceEffect()
{ {
forward = AnglesToForward( self.angles ); forward = AnglesToForward( self.angles );
up = AnglesToUp( self.angles ); up = AnglesToUp( self.angles );
fxEnt = SpawnFx( getfx( "nolight_burst_mp" ), self.origin, forward, up ); fxEnt = SpawnFx( getfx( "nolight_burst_mp" ), self.origin, forward, up );
TriggerFx( fxEnt ); TriggerFx( fxEnt );
self thread doBoxEffect( fxEnt ); self thread doBoxEffect( fxEnt );
} }
clearAmim( delay ) clearAmim( delay )
{ {
wait ( delay ); wait ( delay );
self self_func( "scriptModelClearAnim" ); self self_func( "scriptModelClearAnim" );
} }
windsockLarge() windsockLarge()
{ {
self self_func( "scriptModelClearAnim" ); self self_func( "scriptModelClearAnim" );
self.origin += ( 0, 0, 20 ); self.origin += ( 0, 0, 20 );
bounds_1 = spawn("script_model", self.origin + ( 15, -7, 0 ) ); bounds_1 = spawn( "script_model", self.origin + ( 15, -7, 0 ) );
bounds_2 = spawn("script_model", self.origin + ( 70, -38, 0 ) ); bounds_2 = spawn( "script_model", self.origin + ( 70, -38, 0 ) );
bounds_1 setModel( "com_plasticcase_friendly" ); bounds_1 setModel( "com_plasticcase_friendly" );
bounds_2 setModel( "com_plasticcase_friendly" ); bounds_2 setModel( "com_plasticcase_friendly" );
bounds_1 hide(); bounds_1 hide();
bounds_2 hide(); bounds_2 hide();
bounds_1 CloneBrushmodelToScriptmodel( level.airDropCrateCollision ); bounds_1 CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
bounds_2 CloneBrushmodelToScriptmodel( level.airDropCrateCollision ); bounds_2 CloneBrushmodelToScriptmodel( level.airDropCrateCollision );
bounds_1 SetContents( 1 ); bounds_1 SetContents( 1 );
bounds_2 SetContents( 1 ); bounds_2 SetContents( 1 );
bounds_1.angles = self.angles + ( 0, 90, 0 ); bounds_1.angles = self.angles + ( 0, 90, 0 );
bounds_2.angles = bounds_1.angles; bounds_2.angles = bounds_1.angles;
self linkto( bounds_2 ); self linkto( bounds_2 );
bounds_2 linkto( bounds_1 ); bounds_2 linkto( bounds_1 );
bounds_1 PhysicsLaunchServer( ( 0, 0, 0 ), ( -400, -250, 10 ) ); bounds_1 PhysicsLaunchServer( ( 0, 0, 0 ), ( -400, -250, 10 ) );
} }
nukeDeath() nukeDeath()
{ {
level endon( "game_ended" ); level endon( "game_ended" );
gameFlagWait( "prematch_done" ); gameFlagWait( "prematch_done" );
if ( getDvar( "mapname" ) != "mp_dome" ) return;
for ( ;; ) if ( getDvar( "mapname" ) != "mp_dome" ) return;
{
level waittill( "nuke_death" );
dynamic = getentarray( "dynamic_model", "targetname" );
for ( i = 0; i < dynamic.size; i++ ) for ( ;; )
{ {
model_name = dynamic[i].model; level waittill( "nuke_death" );
if ( isSubStr( model_name, "fence_tarp_" ) ) dynamic = getentarray( "dynamic_model", "targetname" );
{
for ( i = 0; i < dynamic.size; i++ )
{
model_name = dynamic[i].model;
if ( isSubStr( model_name, "fence_tarp_" ) )
{
// print( "Doing fenceEffect" ); // print( "Doing fenceEffect" );
dynamic[i] thread fenceEffect(); dynamic[i] thread fenceEffect();
} }
else if ( model_name == "machinery_windmill" ) else if ( model_name == "machinery_windmill" )
{ {
// print( "Doing machinery_windmill" ); // print( "Doing machinery_windmill" );
dynamic[i] rotateroll( 80, 2, .5, .1 ); dynamic[i] rotateroll( 80, 2, .5, .1 );
dynamic[i] thread clearAmim( 1 ); dynamic[i] thread clearAmim( 1 );
} }
else if ( isSubStr( model_name, "foliage" ) ) else if ( isSubStr( model_name, "foliage" ) )
{ {
// print( "Doing foliage" ); // print( "Doing foliage" );
dynamic[i].origin -= ( 0, 0, 50 ); dynamic[i].origin -= ( 0, 0, 50 );
} }
else if ( isSubStr( model_name, "oil_pump_jack" ) ) else if ( isSubStr( model_name, "oil_pump_jack" ) )
{ {
// print( "Doing oil_pump_jack" ); // print( "Doing oil_pump_jack" );
dynamic[i] self_func( "scriptModelClearAnim" ); dynamic[i] self_func( "scriptModelClearAnim" );
} }
else if ( model_name == "accessories_windsock_large" ) else if ( model_name == "accessories_windsock_large" )
{ {
// print( "Doing accessories_windsock_large" ); // print( "Doing accessories_windsock_large" );
dynamic[i] thread windsockLarge(); dynamic[i] thread windsockLarge();
} }
} }
wait( 5 ); wait( 5 );
ents_to_blowup = getentarray("destructable", "targetname"); ents_to_blowup = getentarray( "destructable", "targetname" );
ents_to_blowup = array_combine( ents_to_blowup, getentarray( "destructible_toy", "targetname" ) ); ents_to_blowup = array_combine( ents_to_blowup, getentarray( "destructible_toy", "targetname" ) );
ents_to_blowup = array_combine( ents_to_blowup, getentarray( "destructible_vehicle", "targetname" ) ); ents_to_blowup = array_combine( ents_to_blowup, getentarray( "destructible_vehicle", "targetname" ) );
ents_to_blowup = array_combine( ents_to_blowup, getentarray( "explodable_barrel", "targetname" ) ); ents_to_blowup = array_combine( ents_to_blowup, getentarray( "explodable_barrel", "targetname" ) );
for (i = 0; i < ents_to_blowup.size; i++) for ( i = 0; i < ents_to_blowup.size; i++ )
{ {
ents_to_blowup[i] thread maps\mp\_destructables::destructable_destruct(); ents_to_blowup[i] thread maps\mp\_destructables::destructable_destruct();
} }
level notify( "game_cleanup" ); level notify( "game_cleanup" );
print( "Destroyed a lot of stuff" ); print( "Destroyed a lot of stuff" );
} }
} }

View File

@ -9,147 +9,154 @@
init() init()
{ {
replaceFunc( maps\mp\perks\_perkfunctions::GlowStickDamageListener, ::GlowStickDamageListenerStub ); replaceFunc( maps\mp\perks\_perkfunctions::GlowStickDamageListener, ::GlowStickDamageListenerStub );
replaceFunc( maps\mp\perks\_perkfunctions::GlowStickEnemyUseListener, ::GlowStickEnemyUseListenerStub ); replaceFunc( maps\mp\perks\_perkfunctions::GlowStickEnemyUseListener, ::GlowStickEnemyUseListenerStub );
create_dvar( "sv_fallDamage", 0 ); create_dvar( "sv_fallDamage", 0 );
setDvar( "scr_killcam_time", 7 ); setDvar( "scr_killcam_time", 7 );
setDvar( "scr_killcam_posttime", 2 ); setDvar( "scr_killcam_posttime", 2 );
setDvar( "g_playerCollision", 2 ); setDvar( "g_playerCollision", 2 );
setDvar( "g_playerEjection", 2 ); setDvar( "g_playerEjection", 2 );
setDvar( "sv_enableBounces", 1 ); setDvar( "sv_enableBounces", 1 );
setDvar( "jump_slowdownEnable", 0 ); setDvar( "jump_slowdownEnable", 0 );
thread gameEnded(); thread gameEnded();
thread gameStart(); thread gameStart();
if ( getDvarInt( "sv_fallDamage" ) != 0 ) return; if ( getDvarInt( "sv_fallDamage" ) != 0 ) return;
level.prevCallbackPlayerDamage = level.callbackPlayerDamage;
level.callbackPlayerDamage = ::codeCallbackPlayerDamage; level.prevCallbackPlayerDamage = level.callbackPlayerDamage;
level.callbackPlayerDamage = ::codeCallbackPlayerDamage;
} }
gameEnded() gameEnded()
{ {
gameFlagWait( "prematch_done" ); gameFlagWait( "prematch_done" );
for ( ;; )
{ for ( ;; )
level waittill( "game_ended", team ); {
foreach ( player in level.players ) level waittill( "game_ended", team );
{
player setClientDvar ( "cg_thirdperson", true ); foreach ( player in level.players )
player setClientDvar ( "cg_thirdPersonRange", 170 ); {
} player setClientDvar ( "cg_thirdperson", true );
wait( 1.5 ); player setClientDvar ( "cg_thirdPersonRange", 170 );
foreach ( player in level.players ) }
{
player freezecontrols( false ); wait( 1.5 );
}
} foreach ( player in level.players )
{
player freezecontrols( false );
}
}
} }
// Might need to set cg_thirdperson to false when a player spawns // Might need to set cg_thirdperson to false when a player spawns
gameStart() gameStart()
{ {
gameFlagWait( "prematch_done" ); gameFlagWait( "prematch_done" );
foreach ( player in level.players )
{ foreach ( player in level.players )
player setClientDvar ( "cg_thirdperson", false ); {
} player setClientDvar ( "cg_thirdperson", false );
}
} }
codeCallbackPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset ) codeCallbackPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
if ( sMeansOfDeath == "MOD_FALLING" || self isUsingRemote() ) if ( sMeansOfDeath == "MOD_FALLING" || self isUsingRemote() )
{ {
eAttacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "" ); eAttacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "" );
return; return;
} }
[[level.prevCallbackPlayerDamage]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset ); [[level.prevCallbackPlayerDamage]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset );
} }
playLeaderDialog( sound ) playLeaderDialog( sound )
{ {
assert( self.pers["team"] != "spectator" ); assert( self.pers["team"] != "spectator" );
suffix = "1mc_" + sound; suffix = "1mc_" + sound;
if ( self.pers["team"] == "allies" ) if ( self.pers["team"] == "allies" )
{ {
self playLocalSound( getTeamVoicePrefix( game["allies"] ) + suffix ); self playLocalSound( getTeamVoicePrefix( game["allies"] ) + suffix );
} }
else else
{ {
self playLocalSound( getTeamVoicePrefix( game["axis"] ) + suffix ); self playLocalSound( getTeamVoicePrefix( game["axis"] ) + suffix );
} }
} }
getTeamVoicePrefix( team ) getTeamVoicePrefix( team )
{ {
return tableLookup( "mp/factionTable.csv", 0, team, 7 ); return tableLookup( "mp/factionTable.csv", 0, team, 7 );
} }
GlowStickDamageListenerStub( owner ) GlowStickDamageListenerStub( owner )
{ {
self endon ( "death" ); self endon ( "death" );
self setCanDamage( true ); self setCanDamage( true );
self.health = 999999; self.health = 999999;
self.maxHealth = 100; self.maxHealth = 100;
self.damageTaken = 0; self.damageTaken = 0;
for ( ;; ) for ( ;; )
{ {
self waittill( "damage", damage, attacker, direction_vec, point, type, modelName, tagName, partName, iDFlags, weapon ); self waittill( "damage", damage, attacker, direction_vec, point, type, modelName, tagName, partName, iDFlags, weapon );
if ( !maps\mp\gametypes\_weapons::friendlyFireCheck( self.owner, attacker ) ) if ( !maps\mp\gametypes\_weapons::friendlyFireCheck( self.owner, attacker ) )
continue; continue;
if ( !isdefined( self ) )
return;
if ( !isdefined( self ) )
return;
// Can only be damaged by knife // Can only be damaged by knife
if ( type == "MOD_MELEE" ) if ( type == "MOD_MELEE" )
{ {
self.damageTaken += self.maxHealth; self.damageTaken += self.maxHealth;
self.wasDamaged = true; self.wasDamaged = true;
} }
if( isPlayer( attacker ) ) if ( isPlayer( attacker ) )
{ {
attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "tactical_insertion" ); attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "tactical_insertion" );
} }
if ( self.damageTaken >= self.maxHealth ) if ( self.damageTaken >= self.maxHealth )
{ {
if ( isDefined( owner ) && attacker != owner ) if ( isDefined( owner ) && attacker != owner )
{ {
attacker notify ( "destroyed_insertion", owner ); attacker notify ( "destroyed_insertion", owner );
attacker notify( "destroyed_explosive" ); // count towards SitRep Pro challenge attacker notify( "destroyed_explosive" ); // count towards SitRep Pro challenge
owner thread leaderDialogOnPlayer( "ti_destroyed" ); owner thread leaderDialogOnPlayer( "ti_destroyed" );
} }
attacker thread maps\mp\perks\_perkfunctions::deleteTI( self ); attacker thread maps\mp\perks\_perkfunctions::deleteTI( self );
} }
} }
} }
GlowStickEnemyUseListenerStub( owner ) GlowStickEnemyUseListenerStub( owner )
{ {
self endon ( "death" ); self endon ( "death" );
level endon ( "game_ended" ); level endon ( "game_ended" );
owner endon ( "disconnect" ); owner endon ( "disconnect" );
self.enemyTrigger setCursorHint( "HINT_NOICON" ); self.enemyTrigger setCursorHint( "HINT_NOICON" );
self.enemyTrigger setHintString( &"MP_DESTROY_TI" ); self.enemyTrigger setHintString( &"MP_DESTROY_TI" );
self.enemyTrigger makeEnemyUsable( owner ); self.enemyTrigger makeEnemyUsable( owner );
for ( ;; ) for ( ;; )
{ {
self.enemyTrigger waittill ( "trigger", player ); self.enemyTrigger waittill ( "trigger", player );
player iPrintLnBold( "Nice try" ); player iPrintLnBold( "Nice try" );
} }
} }