Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 32.67 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include common_scripts\utility;
  3. #include maps\mp\gametypes\_hud_util;
  4. #include maps\mp\gametypes\me_assets;
  5. main()
  6. {
  7.     PrintLn( "Jari 'JariZ' Zwarts" );
  8.     PrintLn( "MapEdit v1");
  9.  
  10.     if( GetDvar( "mapname" ) == "mp_background" )
  11.     {
  12.         return;
  13.     }
  14.    
  15.     if( !mapSupport() )
  16.     {
  17.         error( "Could not find any available models to use." );
  18.         maps\mp\gametypes\_callbacksetup::AbortLevel();
  19.         return;
  20.     }
  21.  
  22.     collMapListGenerate();
  23.    
  24.     level.DISPLAY_MODELNAME = GetDvarInt( "scr_hns_displaymodelname" );
  25.     onPrecacheGameModels();
  26.     level.giveCustomLoadout = ::giveCustomLoadout;
  27.     maps\mp\gametypes\_globallogic::init();
  28.     maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  29.     maps\mp\gametypes\_globallogic::SetupCallbacks();
  30.     maps\mp\gametypes\_globallogic_utils::registerRoundSwitchDvar( level.gameType, 3, 0, 9 );
  31.     maps\mp\gametypes\_globallogic_utils::registerTimeLimitDvar( level.gameType, 2.5 + ( level.hidingGracePeriod / 60 ), 0, 1440 );
  32.     maps\mp\gametypes\_globallogic_utils::registerScoreLimitDvar( level.gameType, 4, 0, 500 );
  33.     maps\mp\gametypes\_globallogic_utils::registerRoundLimitDvar( level.gameType, 0, 0, 15 );
  34.     maps\mp\gametypes\_globallogic_utils::registerRoundWinLimitDvar( level.gameType, 0, 0, 10 );
  35.     maps\mp\gametypes\_globallogic_utils::registerNumLivesDvar( level.gameType, 1, 0, 10 );
  36.  
  37.     level.gametype = "tdm";
  38.     level.fullGameTypeName = "tdm";
  39.     level.teamBased = true;
  40.     level.overrideTeamScore = true;
  41.     level.onPrecacheGameType = ::onPrecacheGameType;
  42.     level.onStartGameType = ::onStartGameType;
  43.     level.onSpawnPlayer = ::onSpawnPlayer;
  44.     level.onSpawnPlayerUnified = ::onSpawnPlayerUnified;
  45.     level.playerSpawnedCB = ::hns_playerSpawnedCB;
  46.     level.onPlayerKilled = ::onPlayerKilled;
  47.     level.onDeadEvent = ::onDeadEvent;
  48.     level.onOneLeftEvent = ::onOneLeftEvent;
  49.     level.onTimeLimit = ::onTimeLimit;
  50.     level.onRoundSwitch = ::onRoundSwitch;
  51.     level.onRoundEndGame = ::onRoundEndGame;
  52.     level.endGameOnScoreLimit = false;
  53.     game[ "dialog" ][ "gametype" ] = "sd_start";
  54.     game[ "dialog" ][ "gametype_hardcore" ] = "hcsd_start";
  55.     game[ "dialog" ][ "sudden_death" ] = "generic_boost";
  56.     game[ "dialog" ][ "last_one" ] = "encourage_last";
  57.     game[ "dialog" ][ "halftime" ] = "sd_halftime";
  58.     setscoreboardcolumns( "kills", "deaths", "kdratio", "assists" );
  59.     level thread onPlayerConnect();
  60. }
  61.  
  62. HNS_TeamSet()
  63. {
  64.  
  65.     SetDvar( "g_TeamIcon_Axis", "icon_hiders" );
  66.     SetDvar( "g_TeamIcon_Allies", "icon_seekers" );
  67.  
  68.     game[ "entity_headicon_allies" ] = "icon_seekers";
  69.     game[ "entity_headicon_axis" ] = "icon_hiders";
  70.     game[ "headicon_allies" ] = "icon_seekers";
  71.     game[ "headicon_axis" ] = "icon_hiders";
  72.  
  73.     SetDvar( "g_TeamName_Allies", &"HIDEANDSEEK_SEEKERS_SHORT" );
  74.     SetDvar( "g_TeamName_Axis", &"HIDEANDSEEK_HIDERS_SHORT" );
  75.  
  76.     game[ "strings" ][ "allies_win" ] = &"HIDEANDSEEK_SEEKERS_WIN_MATCH";
  77.     game[ "strings" ][ "allies_win_round" ] = &"HIDEANDSEEK_SEEKERS_WIN_ROUND";
  78.     game[ "strings" ][ "allies_mission_accomplished" ] = &"HIDEANDSEEK_SEEKERS_MISSION_ACCOMPLISHED";
  79.     game[ "strings" ][ "allies_eliminated" ] = &"HIDEANDSEEK_SEEKERS_ELIMINATED";
  80.     game[ "strings" ][ "allies_forfeited" ] = &"HIDEANDSEEK_SEEKERS_FORFEITED";
  81.     game[ "strings" ][ "allies_name" ] = &"HIDEANDSEEK_SEEKERS_NAME";
  82.     game[ "icons" ][ "allies" ] = "icon_seekers";
  83.     game[ "strings" ][ "axis_win" ] = &"HIDEANDSEEK_HIDERS_WIN_MATCH";
  84.     game[ "strings" ][ "axis_win_round" ] = &"HIDEANDSEEK_HIDERS_WIN_ROUND";
  85.     game[ "strings" ][ "axis_mission_accomplished" ] = &"HIDEANDSEEK_HIDERS_MISSION_ACCOMPLISHED";
  86.     game[ "strings" ][ "axis_eliminated" ] = &"HIDEANDSEEK_HIDERS_ELIMINATED";
  87.     game[ "strings" ][ "axis_forfeited" ] = &"HIDEANDSEEK_HIDERS_FORFEITED";
  88.     game[ "strings" ][ "axis_name" ] = &"HIDEANDSEEK_HIDERS_NAME";
  89.     game[ "icons" ][ "axis" ] = "icon_hiders";
  90. }
  91.  
  92. checkAllowSpectating()
  93. {
  94.     wait ( 0.05 );
  95.     update = false;
  96.     if( !level.aliveCount[ game[ "attackers" ] ] )
  97.     {
  98.         level.spectateOverride[game[ "attackers" ]].allowEnemySpectate = 1;
  99.         update = true;
  100.     }
  101.     if( !level.aliveCount[ game[ "defenders" ] ] )
  102.     {
  103.         level.spectateOverride[game[ "defenders" ] ].allowEnemySpectate = 1;
  104.         update = true;
  105.     }
  106.     if( update )
  107.     {
  108.         maps\mp\gametypes\_spectating::updateSpectateSettings();
  109.     }
  110. }
  111.  
  112. onPrecacheGameType()
  113. {
  114.     PreCacheShader( "icon_hiders" );
  115.     PreCacheShader( "icon_seekers" );
  116.     PreCacheString( &"HIDEANDSEEK_HIDER_CONTROL_A_1" );
  117.     PreCacheString( &"HIDEANDSEEK_HIDER_CONTROL_A_2" );
  118.     PreCacheString( &"HIDEANDSEEK_HIDER_CONTROL_B" );
  119.     PreCacheString( &"HIDEANDSEEK_HIDER_CONTROL_C" );
  120.     precacheSlide( "hideandseek_tut1_a", &"HIDEANDSEEK_TUT1_A" );
  121.     precacheSlide( "hideandseek_tut1_b", &"HIDEANDSEEK_TUT1_B" );
  122.     precacheSlide( "hideandseek_tut2_a", &"HIDEANDSEEK_TUT2_A" );
  123.     precacheSlide( "hideandseek_tut2_b", &"HIDEANDSEEK_TUT2_B" );
  124.     precacheSlide( "hideandseek_tut3_a", &"HIDEANDSEEK_TUT3_A" );
  125.     precacheSlide( "hideandseek_tut3_b", &"HIDEANDSEEK_TUT3_B" );
  126.     precacheSlide( "hideandseek_tut4_a", &"HIDEANDSEEK_TUT4_A" );
  127.     precacheSlide( "hideandseek_tut4_b", &"HIDEANDSEEK_TUT4_B" );
  128. }
  129.  
  130. onStartGameType()
  131. {
  132.     if( !IsDefined( game[ "switchedsides" ] ) )
  133.     {
  134.         game[ "switchedsides" ] = false;
  135.     }
  136.     if( game[ "switchedsides" ] )
  137.     {
  138.         oldAttackers = game[ "attackers" ] ;
  139.         oldDefenders = game[ "defenders" ];
  140.         game[ "attackers" ] = oldDefenders;
  141.         game[ "defenders" ] = oldAttackers;
  142.     }
  143.     SetClientNameMode( "manual_change" );
  144.     HNS_TeamSet();
  145.     SetDvar( "scr_teambalance", 0 );
  146.     SetDvar( "scr_disable_cac", 1 );
  147.     MakeDvarServerInfo( "scr_disable_cac", 1 );
  148.     SetDvar( "scr_disable_weapondrop", 1 );
  149.     SetDvar( "scr_game_perks", 0 );
  150.     level.killstreaksenabled = 0;
  151.     level.hardpointsenabled = 0;
  152.     SetDvar( "xblive_privatematch", 0 );
  153.     MakeDvarServerInfo( "xblive_privatematch", 0 );
  154.     maps\mp\gametypes\_globallogic_ui::setObjectiveText( "allies", &"HIDEANDSEEK_OBJECTIVE_SEEKERS" );
  155.     maps\mp\gametypes\_globallogic_ui::setObjectiveText( "axis", &"HIDEANDSEEK_OBJECTIVE_HIDERS" );
  156.     if( level.splitscreen )
  157.     {
  158.         maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "allies", &"HIDEANDSEEK_OBJECTIVE_SEEKERS" );
  159.         maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "axis", &"HIDEANDSEEK_OBJECTIVE_HIDERS" );
  160.     }
  161.     else
  162.     {
  163.         maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "allies", &"HIDEANDSEEK_OBJECTIVE_SEEKERS_SCORE" );
  164.         maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "axis", &"HIDEANDSEEK_OBJECTIVE_HIDERS_SCORE" );
  165.     }
  166.     maps\mp\gametypes\_globallogic_ui::setObjectiveHintText( "allies", &"HIDEANDSEEK_OBJECTIVE_SEEKERS_HINT" );
  167.     maps\mp\gametypes\_globallogic_ui::setObjectiveHintText( "axis", &"HIDEANDSEEK_OBJECTIVE_HIDERS_HINT" );
  168.     level.spawnMins = ( 0, 0, 0 );
  169.     level.spawnMaxs = ( 0, 0, 0 );
  170.     maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_allies_start" );
  171.     maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_tdm_spawn_axis_start" );
  172.     maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_tdm_spawn" );
  173.     maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_tdm_spawn" );
  174.     maps\mp\gametypes\_spawning::updateAllSpawnPoints();
  175.     level.spawn_axis_start= maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_tdm_spawn_axis_start" );
  176.     level.spawn_allies_start= maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_tdm_spawn_allies_start" );
  177.     level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs );
  178.     setMapCenter( level.mapCenter );
  179.     spawnpoint = maps\mp\gametypes\_spawnlogic::getRandomIntermissionPoint();
  180.     setDemoIntermissionPoint( spawnpoint.origin, spawnpoint.angles );
  181.     allowed[ 0 ] = "tdm";
  182.     level.displayRoundEndText = false;
  183.     maps\mp\gametypes\_gameobjects::main( allowed );
  184.     maps\mp\gametypes\_spawning::create_map_placed_influencers();
  185.  
  186.     level thread HideAndSeek_Main();
  187. }
  188.  
  189. HideAndSeek_Main()
  190. {
  191.     addSlide( "hideandseek_tut1_a", &"HIDEANDSEEK_TUT1_A" );
  192.     addSlide( "hideandseek_tut1_b", &"HIDEANDSEEK_TUT1_B" );
  193.     addSlide( "hideandseek_tut2_a", &"HIDEANDSEEK_TUT2_A" );
  194.     addSlide( "hideandseek_tut2_b", &"HIDEANDSEEK_TUT2_B" );
  195.     addSlide( "hideandseek_tut3_a", &"HIDEANDSEEK_TUT3_A" );
  196.     addSlide( "hideandseek_tut3_b", &"HIDEANDSEEK_TUT3_B" );
  197.     addSlide( "hideandseek_tut4_a", &"HIDEANDSEEK_TUT4_A" );
  198.     addSlide( "hideandseek_tut4_b", &"HIDEANDSEEK_TUT4_B" );
  199.  
  200.     level.SeekingHasBegun = false;
  201.     level._effect[ "hider_killed" ] = LoadFX( "maps/zombie/fx_zmbtron_bear_butterfly" );
  202.     level waittill ( "prematch_over" );
  203.     array_thread( getSeekers(), ::freeze_player_controls, true );
  204.     CoverSeekerEyes = CreateServerIcon( "black", 640, 480 , game[ "attackers" ] );
  205.     CoverSeekerEyes.sort = -2;
  206.     CoverSeekerEyes.horzAlign = "fullscreen";
  207.     CoverSeekerEyes.vertAlign = "fullscreen";
  208.     thread playSlides();
  209.     timerDisplay = [];
  210.     timerDisplay[ "allies" ] = createServerTimer( "objective", 1.4, game[ "attackers" ] );
  211.     timerDisplay[ "allies" ].sort = -1;
  212.     timerDisplay[ "allies" ] setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 );
  213.     timerDisplay[ "allies" ].label = &"HIDEANDSEEK_HIDE_GRACEPERIOD_SEEKERS";
  214.     timerDisplay[ "allies" ].alpha = 0;
  215.     timerDisplay[ "allies" ].archived = false;
  216.     timerDisplay[ "allies" ].hideWhenInMenu = true;
  217.     timerDisplay[ "axis"  ] = createServerTimer( "objective", 1.4, game[ "defenders" ] );
  218.     timerDisplay[ "axis"  ].sort = -1;
  219.     timerDisplay[ "axis"  ] setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 );
  220.     timerDisplay[ "axis"  ].label = &"HIDEANDSEEK_HIDE_GRACEPERIOD_HIDERS";
  221.     timerDisplay[ "axis"  ].alpha = 0;
  222.     timerDisplay[ "axis"  ].archived = false;
  223.     timerDisplay[ "axis"  ].hideWhenInMenu = true;
  224.     thread hideTimerDisplayOnGameEnd( timerDisplay[ "allies" ] );
  225.     thread hideTimerDisplayOnGameEnd( timerDisplay[ "axis" ] );
  226.     timerDisplay[ "allies" ].label = &"HIDEANDSEEK_HIDE_GRACEPERIOD_SEEKERS";
  227.     timerDisplay[ "allies" ] setTimer( level.hidingGracePeriod );
  228.     timerDisplay[ "allies" ].alpha = 1;
  229.     timerDisplay[ "axis"  ].label = &"HIDEANDSEEK_HIDE_GRACEPERIOD_HIDERS";
  230.     timerDisplay[ "axis"  ] setTimer( level.hidingGracePeriod );
  231.     timerDisplay[ "axis"  ].alpha = 1;
  232.     wait level.hidingGracePeriod;
  233.     CoverSeekerEyes Destroy();
  234.     timerDisplay[ "allies" ].alpha = 0;
  235.     timerDisplay[ "axis"  ].alpha = 0;
  236.     level.SeekingHasBegun = true;
  237.     level notify ( "SeekingHasBegun" );
  238.     array_thread( getSeekers(), ::freeze_player_controls, false );
  239. }
  240.  
  241. makeHider()
  242. {
  243.     self TakeAllWeapons();
  244.     self DisableWeapons();
  245.     self AllowAds( false );
  246.     self notify( "stop_ammo" );
  247.     self SetClientDvars(
  248.     "cg_thirdPerson", "1",
  249.     "cg_thirdPersonAngle", "360",
  250.     "cg_thirdPersonRange", "200" );
  251.     self ClearPerks();
  252.     self SetPerk( "specialty_quieter" );
  253.     self SetPerk( "specialty_gpsjammer" );
  254.     if( IsDefined( self.pers[ "myprop" ]  ) )
  255.     {
  256.         self.pers[ "myprop" ] Delete();
  257.     }
  258.     usableModelsKeys = GetArrayKeys( level.usableModels );
  259.     self.pers[ "myprop" ] = spawn( "script_model", self.origin );
  260.     self.pers[ "myprop" ].health = 10000;
  261.     self.pers[ "myprop" ].owner = self;
  262.     self.pers[ "myprop" ].angles = self.angles;
  263.     self.pers[ "myprop" ].indexKey = RandomInt( level.MAX_USUABLE_MODELS );
  264.     self.pers[ "myprop" ] SetModel( level.usableModels[ usableModelsKeys[ self.pers[ "myprop" ].indexKey ] ] );
  265.     self.pers[ "myprop" ] SetCanDamage( true );
  266.     self.pers[ "myprop" ] thread detachOnDisconnect( self );
  267.     self.pers[ "myprop" ] thread attachModel( self );
  268.     self thread monitorKeyPress();
  269. }
  270.  
  271. makeSeeker()
  272. {
  273.     self EnableWeapons();
  274.     self AllowAds( true );
  275.     self thread infiniteAmmo();
  276.     self thread damageOnFire();
  277.     self SetClientDvars(
  278.     "cg_thirdPerson", "0" );
  279.     self ClearPerks();
  280.     self SetPerk( "specialty_fastreload" );
  281.     self SetPerk( "specialty_fastads" );
  282.     self SetPerk( "specialty_sprintrecovery" );
  283.     self SetPerk( "specialty_longersprint" );
  284.     if( IsDefined( self.pers[ "myprop" ]  ) )
  285.     {
  286.         self.pers[ "myprop" ] Delete();
  287.     }
  288.     if( !level.SeekingHasBegun )
  289.     {
  290.         self freeze_player_controls( true );
  291.     }
  292. }
  293.  
  294. detachOnDisconnect( player )
  295. {
  296.     player endon( "death" );
  297.     player endon( "killed_player" );
  298.     player waittill( "disconnect" );
  299.     modelOrigin = self.origin;
  300.     self Delete();
  301.     PlayFX( getfx( "hider_killed" ), modelOrigin );
  302. }
  303.  
  304. attachModel( player )
  305. {
  306.     player endon( "disconnect" );
  307.     player endon( "killed_player" );
  308.     player endon( "death" );
  309.     self endon( "death" );
  310.     for( ;; )
  311.     {
  312.         wait (0.01);
  313.         if( self.origin != player.origin )
  314.         {
  315.             self MoveTo( player.origin, 0.1 );
  316.         }
  317.     }
  318. }
  319.  
  320. hiderHudCreate()
  321. {
  322.     if( !IsDefined( self.modelColumn1_a ) )
  323.     {
  324.         self.modelColumn1_a = NewClientHudElem( self );
  325.         self.modelColumn1_a hiderHudLineCreate( -64, 336, 128, "right" );
  326.         self.modelColumn1_a SetText( &"HIDEANDSEEK_HIDER_CONTROL_A_1" );
  327.     }
  328.     if( !IsDefined( self.modelColumn1_b ) )
  329.     {
  330.         self.modelColumn1_b = NewClientHudElem( self );
  331.         self.modelColumn1_b hiderHudLineCreate( -64, 336, 128, "right", -64 + 24  );
  332.         self.modelColumn1_b SetText( &"HIDEANDSEEK_HIDER_CONTROL_A_2" );
  333.     }
  334.     if( !IsDefined( self.modelColumn2 ) )
  335.     {
  336.         self.modelColumn2 = NewClientHudElem( self );
  337.         self.modelColumn2 hiderHudLineCreate( 0, 128, 128, "center" );
  338.         self.modelColumn2 SetText( &"HIDEANDSEEK_HIDER_CONTROL_B" );
  339.     }
  340.     if( !IsDefined( self.modelColumn3 ) )
  341.     {
  342.         self.modelColumn3 = NewClientHudElem( self );
  343.         self.modelColumn3 hiderHudLineCreate( 64, 336, 128, "left" );
  344.         self.modelColumn3 SetText( &"HIDEANDSEEK_HIDER_CONTROL_C" );
  345.     }
  346.     if( !IsDefined( self.modelNameHUD ) && level.DISPLAY_MODELNAME )
  347.     {
  348.         self.modelNameHUD = NewClientHudElem( self );
  349.         self.modelNameHUD hiderHudLineCreate( 0, 336, 128, "center", -64 - 24 );
  350.     }
  351.     self thread hideHudDestroy();
  352. }
  353.  
  354. hiderHudLineCreate( x, height, width, xAlign, yOverwrite )
  355. {
  356.     if( !IsDefined( yOverwrite ) )
  357.     {
  358.         yOverwrite = -64;
  359.     }
  360.     self.archived = false;
  361.     self.x = x;
  362.     self.sort = 1;
  363.     self.font = "objective";
  364.     self.foreground = true;
  365.     self.y = yOverwrite;
  366.     self.fontscale = 2;
  367.  
  368.     self.horzAlign = "center";
  369.     self.vertAlign = "bottom";
  370.     self.alignX = xAlign;
  371.     self.alignY = "middle";
  372. }
  373.  
  374. hideHudDestroy( skipWait )
  375. {
  376.     if( !IsDefined( skipWait ) )
  377.     {
  378.         self waittill_any( "death", "disconnect" );
  379.     }
  380.     if( IsDefined( self.modelColumn1_a ) )
  381.     {
  382.         self.modelColumn1_a Destroy();
  383.     }
  384.     if( IsDefined( self.modelColumn1_b ) )
  385.     {
  386.         self.modelColumn1_b Destroy();
  387.     }
  388.     if( IsDefined( self.modelColumn2 ) )
  389.     {
  390.         self.modelColumn2 Destroy();
  391.     }
  392.     if( IsDefined( self.modelColumn3 ) )
  393.     {
  394.         self.modelColumn3 Destroy();
  395.     }
  396.     if( IsDefined( self.modelNameHUD ) )
  397.     {
  398.         self.modelNameHUD Destroy();
  399.     }
  400. }
  401.  
  402. hideTimerDisplayOnGameEnd( timerDisplay )
  403. {
  404.     level waittill( "game_ended" );
  405.     if( IsDefined( timerDisplay ) )
  406.     {
  407.         timerDisplay.alpha = 0;
  408.         waittillframeend;
  409.         timerDisplay Destroy();
  410.     }
  411. }
  412.  
  413. giveCustomLoadout( takeAllWeapons, alreadySpawned )
  414. {
  415.     chooseRandomBody = false;
  416.     if( !IsDefined( alreadySpawned ) || !alreadySpawned )
  417.     {
  418.         chooseRandomBody = true;
  419.     }
  420.     self maps\mp\gametypes\_wager::setupBlankRandomPlayer( takeAllWeapons, chooseRandomBody );
  421.     self DisableWeaponCycling();
  422.     if( !IsDefined( self.gunProgress ) )
  423.     {
  424.         self.gunProgress = 0;
  425.     }
  426.     if( self.pers[ "team" ] == game[ "defenders" ] )
  427.     {
  428.         return "none";
  429.     }
  430.     currentWeapon = "python_speed_mp";
  431.     self GiveWeapon( currentWeapon );
  432.     self SwitchToWeapon( currentWeapon );
  433.     self GiveWeapon( "knife_mp" );
  434.     if( !IsDefined( alreadySpawned ) || !alreadySpawned )
  435.     {
  436.         self SetSpawnWeapon( currentWeapon );
  437.     }
  438.     if( IsDefined( takeAllWeapons ) && !takeAllWeapons )
  439.     {
  440.         self thread takeOldWeapons( currentWeapon );
  441.     }
  442.     else
  443.     {
  444.         self EnableWeaponCycling();
  445.     }
  446.     return currentWeapon;
  447. }
  448.  
  449. takeOldWeapons( currentWeapon )
  450. {
  451.     self endon( "disconnect" );
  452.     self endon( "death" );
  453.     for( ;; )
  454.     {
  455.         self waittill( "weapon_change", newWeapon );
  456.         if( newWeapon != "none" )
  457.         {
  458.             break;
  459.         }
  460.     }
  461.     weaponsList = self GetWeaponsList();
  462.     for( i = 0; i < weaponsList.size; i++ )
  463.     {
  464.         if( ( weaponsList[i] != currentWeapon ) && ( weaponsList[i] != "knife_mp" ) )
  465.         {
  466.             self TakeWeapon( weaponsList[i] );
  467.         }
  468.     }
  469.     self EnableWeaponCycling();
  470. }
  471.  
  472. infiniteAmmo()
  473. {
  474.     self endon ( "death" );
  475.     self endon ( "disconnect" );
  476.     self endon ( "stop_ammo" );
  477.     for( ;; )
  478.     {
  479.         wait ( 0.1 );
  480.         weapon = self GetCurrentWeapon();
  481.         if( IsDefined( weapon ) )
  482.         {
  483.             self GiveMaxAmmo( weapon );
  484.         }
  485.     }
  486. }
  487.  
  488. damageOnFire()
  489. {
  490.     self endon ( "death" );
  491.     self endon ( "disconnect" );
  492.     while( 1 )
  493.     {
  494.         self waittill ( "weapon_fired" );
  495.         self DoDamage( 10, self.origin, self );
  496.         wait ( 0.05 );
  497.     }
  498. }
  499.  
  500. onPlayerConnect()
  501. {
  502.     for(;;)
  503.     {
  504.         level waittill ( "connected", player );
  505.         player thread onPlayerSpawned();
  506.         player thread onJoinedTeam();
  507.     }
  508. }
  509.  
  510. onSpawnPlayerUnified()
  511. {
  512.     maps\mp\gametypes\_spawning::onSpawnPlayer_Unified();
  513. }
  514.  
  515. onSpawnPlayer()
  516. {
  517.     pixbeginevent( "HNS:onSpawnPlayer" );
  518.     self.usingObj = undefined;
  519.     if( level.inGracePeriod )
  520.     {
  521.         spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_tdm_spawn_" + self.pers[ "team" ] + "_start" );
  522.         if( !spawnPoints.size )
  523.         {
  524.             spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_" + self.pers[ "team" ] + "_start" );
  525.         }
  526.         if( !spawnPoints.size )
  527.         {
  528.             spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( self.pers[ "team" ] );
  529.             spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
  530.         }
  531.         else
  532.         {
  533.             spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints );
  534.         }
  535.     }
  536.     else
  537.     {
  538.         spawnPoints = maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints( self.pers[ "team" ] );
  539.         spawnPoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( spawnPoints );
  540.     }
  541.     self Spawn( spawnPoint.origin, spawnPoint.angles, "tdm" );
  542.     pixendevent();
  543. }
  544.  
  545. onJoinedTeam()
  546. {
  547.     self endon( "disconnect" );
  548.     for(;;)
  549.     {
  550.         self waittill( "joined_team" );
  551.         if( self.pers[ "team" ] == game[ "defenders" ] )
  552.         {
  553.             self SetClientDvars(
  554.             "cg_thirdPerson", "1",
  555.             "cg_thirdPersonAngle", "360",
  556.             "cg_thirdPersonRange", "200" );
  557.         }
  558.         else
  559.         {
  560.             self SetClientDvars(
  561.             "cg_thirdPerson", "0" );
  562.         }
  563.     }
  564. }
  565.  
  566. hns_playerSpawnedCB()
  567. {
  568.     level notify ( "spawned_player" );
  569. }
  570.  
  571. hns_endGame( winningTeam, endReasonText )
  572. {
  573.     if( IsDefined( winningTeam ) )
  574.     {
  575.         [[level._setTeamScore]]( winningTeam, [[level._getTeamScore]]( winningTeam ) + 1 );
  576.     }
  577.     thread maps\mp\gametypes\_globallogic::endGame( winningTeam, endReasonText );
  578. }
  579.  
  580. hns_endGameWithKillcam( winningTeam, endReasonText )
  581. {
  582.     level thread maps\mp\gametypes\_killcam::startLastKillcam();
  583.     hns_endGame( winningTeam, endReasonText );
  584. }
  585.  
  586. onPlayerSpawned()
  587. {
  588.     self endon( "disconnect" );
  589.     level endon ( "game_ended" );
  590.     for(;;)
  591.     {
  592.         self waittill( "spawned_player" );
  593.  
  594.         wait ( 1 );
  595.        
  596.             self makeHider();
  597.             self SetClientDvars(
  598.             "cg_thirdPerson", "1",
  599.             "cg_thirdPersonAngle", "360",
  600.             "cg_thirdPersonRange", "200" );
  601.     }
  602. }
  603.  
  604. onPlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration )
  605. {
  606.     thread checkAllowSpectating();
  607.     if( IsDefined( self.pers[ "myprop" ] ) )
  608.     {
  609.         modelOrigin = self.pers[ "myprop" ].origin;
  610.         self.pers[ "myprop" ] Delete();
  611.         PlayFX( getfx( "hider_killed" ), modelOrigin );
  612.     }
  613.     if( sMeansOfDeath == "MOD_SUICIDE" )
  614.     {
  615.         return;
  616.     }
  617.     if( IsDefined( attacker ) && IsPlayer( attacker ) )
  618.     {
  619.         if( attacker == self )
  620.         {
  621.             return;
  622.         }
  623.     }
  624. }
  625.  
  626. onDeadEvent( team )
  627. {
  628.     if( team == "all" )
  629.     {
  630.         hns_endGameWithKillcam( game[ "defenders" ], game[ "strings" ][game[ "attackers" ]+"_eliminated" ] );
  631.     }
  632.     else if( team == game[ "attackers" ] )
  633.     {
  634.         hns_endGameWithKillcam( game[ "defenders" ], game[ "strings" ][game[ "attackers" ]+"_eliminated" ] );
  635.     }
  636.     else if( team == game[ "defenders" ] )
  637.     {
  638.         hns_endGameWithKillcam( game[ "attackers" ], game[ "strings" ][game[ "defenders" ]+"_eliminated" ] );
  639.     }
  640. }
  641.  
  642. onTimeLimit()
  643. {
  644.     if( level.teamBased )
  645.     {
  646.         hns_endGame( game[ "defenders" ], game[ "strings" ][ "time_limit_reached" ] );
  647.     }
  648.     else
  649.     {
  650.         hns_endGame( undefined, game[ "strings" ][ "time_limit_reached" ] );
  651.     }
  652. }
  653.  
  654. onRoundSwitch()
  655. {
  656.     if( !IsDefined( game[ "switchedsides" ] ) )
  657.     {
  658.         game[ "switchedsides" ] = false;
  659.     }
  660.     if( game[ "teamScores" ][ "allies" ] == level.scorelimit - 1 && game[ "teamScores" ][ "axis" ] == level.scorelimit - 1 )
  661.     {
  662.         level.halftimeType = "overtime";
  663.     }
  664.     else
  665.     {
  666.         level.halftimeType = "halftime";
  667.     }
  668.     game[ "switchedsides" ] = !game[ "switchedsides" ];
  669. }
  670.  
  671. onEndGame( winningTeam )
  672. {
  673.     array_thread( level.players, ::hideHudDestroy, true );
  674.     if( IsDefined( winningTeam ) && ( winningTeam == "allies" || winningTeam == "axis" ) )
  675.     {
  676.         [[ level._setTeamScore ]]( winningTeam, [[ level._getTeamScore ]]( winningTeam ) + 1 );
  677.     }
  678. }
  679.  
  680. onRoundEndGame( roundWinner )
  681. {
  682.     if( game[ "roundswon" ][ "allies" ] == game[ "roundswon" ][ "axis" ] )
  683.     {
  684.         winner = "tie";
  685.     }
  686.     else if( game[ "roundswon" ][ "axis" ] > game[ "roundswon" ][ "allies" ] )
  687.     {
  688.         winner = "axis";
  689.     }
  690.     else
  691.     {
  692.         winner = "allies";
  693.     }
  694.     return winner;
  695. }
  696.  
  697. onOneLeftEvent( team )
  698. {
  699.     warnLastPlayer( team );
  700. }
  701.  
  702. warnLastPlayer( team )
  703. {
  704.     if( !IsDefined( level.warnedLastPlayer ) )
  705.     {
  706.         level.warnedLastPlayer = [];
  707.     }
  708.     if( IsDefined( level.warnedLastPlayer[ team ] ) )
  709.     {
  710.         return;
  711.     }
  712.     level.warnedLastPlayer[ team ] = true;
  713.     players = level.players;
  714.     for( i = 0; i < players.size; i++ )
  715.     {
  716.         player = players[i];
  717.         if( IsDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == team && IsDefined( player.pers[ "class" ] ) )
  718.         {
  719.             if( player.sessionstate == "playing" && !player.afk )
  720.             {
  721.                 break;
  722.             }
  723.         }
  724.     }
  725.     if( i == players.size )
  726.     {
  727.         return;
  728.     }
  729.     players[ i ] thread giveLastAttackerWarning();
  730. }
  731.  
  732. giveLastAttackerWarning()
  733. {
  734.     self endon( "death" );
  735.     self endon( "disconnect" );
  736.     fullHealthTime = 0;
  737.     interval = .05;
  738.     while( 1 )
  739.     {
  740.         if( self.health != self.maxhealth )
  741.         {
  742.             fullHealthTime = 0;
  743.         }
  744.         else
  745.         {
  746.             fullHealthTime += interval;
  747.         }
  748.         wait ( interval );
  749.         if( self.health == self.maxhealth && fullHealthTime >= 3 )
  750.         {
  751.             break;
  752.         }
  753.     }
  754.     self maps\mp\gametypes\_globallogic_audio::leaderDialogOnPlayer( "last_one" );
  755.     self playlocalsound ( "mus_last_stand" );
  756.     self maps\mp\gametypes\_missions::lastManSD();
  757.     self.lastManSD = true;
  758. }
  759.  
  760. monitorKeyPress()
  761. {
  762.     self endon( "disconnect" );
  763.     self endon( "killed_player" );
  764.     self endon( "death" );
  765.     level endon( "game_ended" );
  766.     usableModelsKeys = GetArrayKeys( level.usableModels );
  767.  
  768.     self hiderHudCreate();
  769.  
  770.     minZoom = 125;
  771.     maxZoom = 525;
  772.     zoomChangeRate = 5;
  773.     self Hide();
  774.  
  775.     self.pers[ "myprop" ].rotateYaw_attack = SpawnStruct();
  776.     self.pers[ "myprop" ].rotateYaw_attack.value = 0;
  777.     self.pers[ "myprop" ].rotateYaw_attack.check = ::attackCheck;
  778.     self.pers[ "myprop" ].rotateYaw_attack.max = -50;
  779.     self.pers[ "myprop" ].rotateYaw_attack.change_rate = 1;
  780.     self.pers[ "myprop" ].rotateYaw_attack.reset_rate = 50;
  781.     self.pers[ "myprop" ].rotateYaw_ads = SpawnStruct();
  782.     self.pers[ "myprop" ].rotateYaw_ads.value = 0;
  783.     self.pers[ "myprop" ].rotateYaw_ads.check = ::adsCheck;
  784.     self.pers[ "myprop" ].rotateYaw_ads.max = 50;
  785.     self.pers[ "myprop" ].rotateYaw_ads.change_rate = 1;
  786.     self.pers[ "myprop" ].rotateYaw_ads.reset_rate = 50;
  787.     for(;;)
  788.     {
  789.         wait ( 0.05 );
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.             if( self ActionSlotTwoButtonPressed() && IsDefined( self.pers[ "myprop" ] ) ) //
  797.             {
  798.                 //spawn code by JariZ.nl
  799.                 //Get location (stolen from se7en)
  800.                 vec = anglestoforward(self getPlayerAngles());
  801.                 end = (vec[0] * 200000, vec[1] * 200000, vec[2] * 200000);
  802.                 location = BulletTrace( self gettagorigin("tag_eye"), self gettagorigin("tag_eye")+end, 0, self )[ "position" ];
  803.                
  804.                 //get current model
  805.                 model = level.usableModels[ usableModelsKeys[ self.pers[ "myprop" ].indexKey ] ];
  806.                
  807.                 //spawn the model
  808.                 block = spawn("script_model", location, 1);
  809.                 block setModel(model);
  810.                
  811.                 iprintln("^1[MAPEDIT] ^7Model spawned");
  812.                
  813.                 //WARNING : ROTATION OF MODEL NOT YET IMPLENTED
  814.                
  815.             }
  816.         if( self FragButtonPressed() && IsDefined( self.pers[ "myprop" ] ) )
  817.         {
  818.             self.pers[ "myprop" ].indexKey = self.pers[ "myprop" ].indexKey + 1;
  819.             PrintLn( "HNS INDEX: " + self.pers[ "myprop" ].indexKey + "   MAX POS: " + level.MAX_USUABLE_MODELS );
  820.             if( self.pers[ "myprop" ].indexKey >= level.MAX_USUABLE_MODELS || self.pers[ "myprop" ].indexKey < 0 )
  821.             {
  822.                 self.pers[ "myprop" ].indexKey = 0;
  823.             }
  824.             model = level.usableModels[ usableModelsKeys[ self.pers[ "myprop" ].indexKey ] ];
  825.             self.modelNameHUD SetText( model );
  826.             self.pers[ "myprop" ] SetModel( model );
  827.             self.pers[ "myprop" ] NotSolid();
  828.         }
  829.         if( self SecondaryOffhandButtonPressed() && IsDefined( self.pers[ "myprop" ] ) )
  830.         {
  831.             self.pers[ "myprop" ].indexKey = self.pers[ "myprop" ].indexKey - 1;
  832.             PrintLn( "HNS INDEX: " + self.pers[ "myprop" ].indexKey + "   MAX POS: " + level.MAX_USUABLE_MODELS );
  833.             if( self.pers[ "myprop" ].indexKey >= level.MAX_USUABLE_MODELS || self.pers[ "myprop" ].indexKey < 0 )
  834.             {
  835.                 self.pers[ "myprop" ].indexKey = 0;
  836.             }
  837.             model = level.usableModels[ usableModelsKeys[ self.pers[ "myprop" ].indexKey ] ];
  838.             self.modelNameHUD SetText( model );
  839.             self.pers[ "myprop" ] SetModel( model );
  840.             self.pers[ "myprop" ] NotSolid();
  841.         }
  842.  
  843.         if( self ActionSlotTwoButtonPressed() )
  844.         {
  845.             if( GetDvarInt( "cg_thirdPersonRange" ) > minZoom )
  846.             {
  847.                 self SetClientDvar( "cg_thirdPersonRange", GetDvarInt( "cg_thirdPersonRange" ) - zoomChangeRate );
  848.             }
  849.         }
  850.         if( self ActionSlotFourButtonPressed() )
  851.         {
  852.             if( GetDvarInt( "cg_thirdPersonRange" ) < maxZoom )
  853.             {
  854.                 self SetClientDvar( "cg_thirdPersonRange", GetDvarInt( "cg_thirdPersonRange" ) + zoomChangeRate );
  855.             }
  856.         }
  857.  
  858.         self buttonHeldCheck( self.pers[ "myprop" ].rotateYaw_attack );
  859.         self buttonHeldCheck( self.pers[ "myprop" ].rotateYaw_ads );
  860.         self.pers[ "myprop" ] RotateYaw( self.pers[ "myprop" ].rotateYaw_ads.value + self.pers[ "myprop" ].rotateYaw_attack.value, 0.5 );
  861.     }
  862. }
  863.  
  864. attackCheck()
  865. {
  866.     return ( self AttackButtonPressed() );
  867. }
  868.  
  869. adsCheck()
  870. {
  871.     return ( self AdsButtonPressed() );
  872. }
  873.  
  874. buttonHeldCheck( struct )
  875. {
  876.     self endon ( "disconnect" );
  877.     self endon ( "death" );
  878.     if( [[ struct.check ]]() )
  879.     {
  880.         if( struct.max > 0 )
  881.         {
  882.             struct.value += struct.change_rate;
  883.         }
  884.         else
  885.         {
  886.             struct.value -= struct.change_rate;
  887.         }
  888.     }
  889.     else if( struct.value != 0 )
  890.     {
  891.         if( struct.value > 0 )
  892.         {
  893.             struct.value -= struct.reset_rate;
  894.         }
  895.         else
  896.         {
  897.             struct.value += struct.reset_rate;
  898.         }
  899.         if( abs( struct.value ) < struct.reset_rate )
  900.         {
  901.             struct.value = 0;
  902.         }
  903.     }
  904.     if( struct.max > 0 )
  905.     {
  906.         if( struct.value > struct.max )
  907.         {
  908.             struct.value = struct.max;
  909.         }
  910.     }
  911.     else
  912.     {
  913.         if( struct.value < struct.max )
  914.         {
  915.             struct.value = struct.max;
  916.         }
  917.     }
  918. }
  919.  
  920. onPrecacheGameModels()
  921. {
  922.     precacheLevelModels();
  923.     if( IsDefined( level.availableModels ) && level.availableModels.size > 0 )
  924.     {
  925.         level.availableModels = array_randomize( level.availableModels );
  926.         if( level.availableModels.size < level.MAX_USUABLE_MODELS )
  927.         {
  928.             level.MAX_USUABLE_MODELS = level.availableModels.size;
  929.         }
  930.         availableModelsKeys = GetArrayKeys( level.availableModels );
  931.         if( !IsDefined( level.usableModels ) )
  932.         {
  933.             level.usableModels = [];
  934.         }
  935.         for( x = 0 ; x < level.availableModels.size ; x++ )
  936.         {
  937.             PreCacheModel( level.availableModels[ availableModelsKeys[ x ] ] );
  938.             level.usableModels[ level.availableModels[ availableModelsKeys[ x ] ] ] = level.availableModels[ availableModelsKeys[ x ] ];
  939.             if( level.usableModels.size >= level.MAX_USUABLE_MODELS )
  940.             {
  941.                 return;
  942.             }
  943.         }
  944.     }
  945. }
  946.  
  947. addModel( model )
  948. {
  949.     if( !IsDefined( level.availableModels ) )
  950.     {
  951.         level.availableModels = [];
  952.     }
  953.  
  954.     if( IsDefined( level.collMapModels ) && IsDefined( level.collMapModels[ model ] ) )
  955.     {
  956.  
  957.         return;
  958.     }
  959.     if( !IsDefined( level.availableModels[ model ] ) )
  960.     {
  961.         level.availableModels[ model ] = model;
  962.     }
  963. }
  964.  
  965. precacheLevelModels()
  966. {
  967.     if( IsDefined( level.force_hns_models ) )
  968.     {
  969.         [[ level.force_hns_models ]]();
  970.         return;
  971.     }
  972.     switch( GetDvar( "mapname" ) )
  973.     {
  974.         case "mp_array":
  975.         {
  976.             mpArrayPrecache();
  977.         } break;
  978.         case "mp_berlinwall2":
  979.         {
  980.             mpBerlinwall2Precache();
  981.         } break;
  982.         case "mp_cairo":
  983.         {
  984.             mpCairoPrecache();
  985.         } break;
  986.         case "mp_cosmodrome":
  987.         {
  988.             mpCosmodromePrecache();
  989.         } break;
  990.         case "mp_cracked":
  991.         {
  992.             mpCrackedPrecache();
  993.         } break;
  994.         case "mp_crisis":
  995.         {
  996.             mpCrisisPrecache();
  997.         } break;
  998.         case "mp_discovery":
  999.         {
  1000.             mpDiscoveryPrecache();
  1001.         } break;
  1002.         case "mp_duga":
  1003.         {
  1004.             mpDugaPrecache();
  1005.         } break;
  1006.         case "mp_firingrange":
  1007.         {
  1008.             mpFiringrangePrecache();
  1009.         } break;
  1010.         case "mp_gridlock":
  1011.         {
  1012.             mpGridlockPrecache();
  1013.         } break;
  1014.         case "mp_hanoi":
  1015.         {
  1016.             mpHanoiPrecache();
  1017.         } break;
  1018.         case "mp_havoc":
  1019.         {
  1020.             mpHavocPrecache();
  1021.         } break;
  1022.         case "mp_hotel":
  1023.         {
  1024.             mpHotelPrecache();
  1025.         } break;
  1026.         case "mp_kowloon":
  1027.         {
  1028.             mpKowloonPrecache();
  1029.         } break;
  1030.         case "mp_mountain":
  1031.         {
  1032.             mpMountainPrecache();
  1033.         } break;
  1034.         case "mp_nuked":
  1035.         {
  1036.             mpNukedPrecache();
  1037.         } break;
  1038.         case "mp_outskirts":
  1039.         {
  1040.             mpOutskirtsPrecache();
  1041.         } break;
  1042.         case "mp_radiation":
  1043.         {
  1044.             mpRadiationPrecache();
  1045.         } break;
  1046.         case "mp_russianbase":
  1047.         {
  1048.             mpRussianbasePrecache();
  1049.         } break;
  1050.         case "mp_stadium":
  1051.         {
  1052.             mpStadiumPrecache();
  1053.         } break;
  1054.         case "mp_villa":
  1055.         {
  1056.             mpVillaPrecache();
  1057.         } break;
  1058.         case "mp_zoo":
  1059.         {
  1060.             mpZooPrecache();
  1061.         } break;
  1062.     }
  1063. }
  1064.  
  1065. addCollMapModel( model )
  1066. {
  1067.     if( !IsDefined( level.collMapModels ) )
  1068.     {
  1069.         level.collMapModels = [];
  1070.     }
  1071.     level.collMapModels[ model ] = model;
  1072. }
  1073.  
  1074. mapSupport()
  1075. {
  1076.     if( IsDefined( level.force_hns_support ) && level.force_hns_support )
  1077.     {
  1078.         return true;
  1079.     }
  1080.     switch( ToLower( GetDvar( "mapname" ) ) )
  1081.     {
  1082.         case "mp_array":
  1083.         case "mp_berlinwall2":
  1084.         case "mp_cairo":
  1085.         case "mp_cosmodrome":
  1086.         case "mp_cracked":
  1087.         case "mp_crisis":
  1088.         case "mp_discovery":
  1089.         case "mp_duga":
  1090.         case "mp_firingrange":
  1091.         case "mp_gridlock":
  1092.         case "mp_hanoi":
  1093.         case "mp_havoc":
  1094.         case "mp_hotel":
  1095.         case "mp_kowloon":
  1096.         case "mp_mountain":
  1097.         case "mp_nuked":
  1098.         case "mp_outskirts":
  1099.         case "mp_radiation":
  1100.         case "mp_russianbase":
  1101.         case "mp_stadium":
  1102.         case "mp_villa":
  1103.         case "mp_zoo":
  1104.         {
  1105.             return true;
  1106.         }
  1107.     }
  1108.     return false;
  1109. }
  1110.  
  1111. precacheSlide( image, text )
  1112. {
  1113.     PreCacheShader( image );
  1114.     PreCacheString( text );
  1115. }
  1116.  
  1117. addSlide( image, text )
  1118. {
  1119.     if( !IsDefined( level.hns_slideshow ) )
  1120.     {
  1121.         level.hns_slideshow = [];
  1122.     }
  1123.  
  1124.     temp = SpawnStruct();
  1125.     temp.image = image;
  1126.     temp.text = text;
  1127.     level.hns_slideshow = array_add( level.hns_slideshow, temp );
  1128. }
  1129.  
  1130. playSlides()
  1131. {
  1132.     level endon ( "SeekingHasBegun" );
  1133.     thread destroySlides();
  1134.     level.hns_slideshow_image = NewTeamHudElem( game[ "attackers" ] );
  1135.     level.hns_slideshow_image.sort = -1;
  1136.     level.hns_slideshow_image.horzAlign = "center";
  1137.     level.hns_slideshow_image.vertAlign = "middle";
  1138.     level.hns_slideshow_image.alignX = "center";
  1139.     level.hns_slideshow_image.alignY = "middle";
  1140.     level.hns_slideshow_image.alpha = 0;
  1141.     level.hns_slideshow_text = NewTeamHudElem( game[ "attackers" ] );
  1142.     level.hns_slideshow_text.sort = -1;
  1143.     level.hns_slideshow_text.horzAlign = "center";
  1144.     level.hns_slideshow_text.vertAlign = "bottom";
  1145.     level.hns_slideshow_text.alignX = "center";
  1146.     level.hns_slideshow_text.alignY = "bottom";
  1147.     level.hns_slideshow_text.alpha = 0;
  1148.     level.hns_slideshow_text.y = -64;
  1149.     level.hns_slideshow_text.fontscale = 1.5;
  1150.     while( 1 )
  1151.     {
  1152.         for( x = 0 ; x < level.hns_slideshow.size ; x++ )
  1153.         {
  1154.             level.hns_slideshow_text SetText( level.hns_slideshow[ x ].text );
  1155.             level.hns_slideshow_image SetShader( level.hns_slideshow[ x ].image, 512, 256 );
  1156.             level.hns_slideshow_text FadeOverTime( 0.75 );
  1157.             level.hns_slideshow_text.alpha = 1;
  1158.             level.hns_slideshow_image FadeOverTime( 0.75 );
  1159.             level.hns_slideshow_image.alpha = 1;
  1160.             wait ( 5 );
  1161.             level.hns_slideshow_text FadeOverTime( 0.75 );
  1162.             level.hns_slideshow_text.alpha = 0;
  1163.             level.hns_slideshow_image FadeOverTime( 0.75 );
  1164.             level.hns_slideshow_image.alpha = 0;
  1165.             wait ( 0.74 );
  1166.         }
  1167.         wait ( 0.05 );
  1168.     }
  1169. }
  1170.  
  1171. destroySlides()
  1172. {
  1173.     level waittill ( "SeekingHasBegun" );
  1174.     if( IsDefined( level.hns_slideshow_image ) )
  1175.     {
  1176.         level.hns_slideshow_image Destroy();
  1177.     }
  1178.     if( IsDefined( level.hns_slideshow_text ) )
  1179.     {
  1180.         level.hns_slideshow_text Destroy();
  1181.     }
  1182. }
  1183.  
  1184. getHiders()
  1185. {
  1186.     hiders = [];
  1187.     for( x = 0 ; x < level.players.size ; x++ )
  1188.     {
  1189.         player = level.players[ x ];
  1190.         if( IsDefined( player ) && IsDefined( player.pers ) && IsDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == "axis" && player.sessionstate == "playing" )
  1191.         {
  1192.             hiders[ hiders.size ] = player;
  1193.         }
  1194.     }
  1195.     return hiders;
  1196. }
  1197.  
  1198. getSeekers()
  1199. {
  1200.     seekers = [];
  1201.     for( x = 0 ; x < level.players.size ; x++ )
  1202.     {
  1203.         player = level.players[ x ];
  1204.         if( IsDefined( player ) && IsDefined( player.pers ) && IsDefined( player.pers[ "team" ] ) && player.pers[ "team" ] == "allies" && player.sessionstate == "playing"  )
  1205.         {
  1206.             seekers[ seekers.size ] = player;
  1207.         }
  1208.     }
  1209.     return seekers;
  1210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement