Advertisement
NachosEater

_dev

Nov 19th, 2011
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 79.74 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include maps\mp\gametypes\_hud_util;
  3. #include common_scripts\utility;
  4.  
  5. init()
  6. {
  7. /#
  8. SetDevDvarIfUninitialized("scr_showspawns", "0");
  9.  
  10. precacheItem("defaultweapon_mp");
  11. precacheModel("test_sphere_silver");
  12. precacheModel("test_sphere_redchrome");
  13.  
  14. level.devSpawnFXid = loadfx( maps\mp\gametypes\_teams::getTeamFlagFX( "axis" ) );
  15.  
  16. thread addTestClients();
  17. thread haveTestClientKillPlayer();
  18. thread haveTestClientCallKillstreak();
  19. thread haveTestClientPlantExplosive();
  20. thread haveTestClientThrowDeployableVest();
  21. thread addTestClientJuggernaut();
  22. thread addTestClientSpawnPoint();
  23. thread warpEnemies();
  24. thread warpFriendlies();
  25. thread giveEquipment();
  26. thread giveSpecialGrenade();
  27. thread watchNoClip();
  28. thread watchUFO();
  29. thread printPerks();
  30. thread devGivePerks();
  31. thread devClearPerks();
  32. thread devHurtPlayer();
  33. thread devHurtPlayerReset();
  34. thread devHurtPlayerDirectional();
  35. thread devChangeTimeLimit();
  36. thread devWeaponXP();
  37. thread devPlayerXP();
  38. thread devScriptMoversDebugDraw();
  39. thread devHeliPathDebugDraw();
  40. thread devPredatorMissileDebugDraw();
  41. thread devPrintDailyWeeklyChallenges();
  42.  
  43. SetDevDvarIfUninitialized( "scr_testclients", "0" );
  44. SetDevDvarIfUninitialized( "scr_testclients_killplayer", "0" );
  45. SetDevDvarIfUninitialized( "scr_testclients_givekillstreak", "" );
  46. SetDevDvarIfUninitialized( "scr_testclients_givekillstreak_toggleall", "0" );
  47. SetDevDvarIfUninitialized( "scr_testclients_givekillstreak_toggleall_sametime", "0" );
  48. SetDevDvarIfUninitialized( "scr_testclients_plantexplosive", "" );
  49. SetDevDvarIfUninitialized( "scr_testclients_throw_deployable_vest", "0" );
  50. SetDevDvarIfUninitialized( "scr_testclients_jugg", "" );
  51. SetDevDvarIfUninitialized( "scr_testclients_spawnpoint", "0" );
  52. SetDevDvarIfUninitialized( "scr_warpenemies", "0" );
  53. SetDevDvarIfUninitialized( "scr_warpfriendlies", "0" );
  54. SetDevDvarIfUninitialized( "scr_debuguav", "0" );
  55. SetDevDvarIfUninitialized( "scr_debugairstrike", "0" );
  56. SetDevDvarIfUninitialized( "scr_printperks", "0" );
  57. SetDevDvarIfUninitialized( "scr_devnoclip", "0" );
  58. SetDevDvarIfUninitialized( "scr_devufo", "0" );
  59. SetDevDvarIfUninitialized( "scr_devgiveperk", "" );
  60. SetDevDvarIfUninitialized( "scr_devgivedeathstreak", "0" );
  61. SetDevDvarIfUninitialized( "scr_devdeathstreakoverride", "specialty_null" );
  62. SetDevDvarIfUninitialized( "scr_devclearperks", "0" );
  63. SetDevDvarIfUninitialized( "scr_devhurtplayer", "0" );
  64. SetDevDvarIfUninitialized( "scr_devhurtplayerreset", "0" );
  65. SetDevDvarIfUninitialized( "scr_devhurtplayerdirectional", "" );
  66. SetDevDvarIfUninitialized( "scr_dir_blood", "0" );
  67. SetDevDvarIfUninitialized( "scr_devchangetimelimit", "0" );
  68. SetDevDvarIfUninitialized( "scr_devweaponxp", "0" );
  69. SetDevDvarIfUninitialized( "scr_devresetweaponxp", "0" );
  70. SetDevDvarIfUninitialized( "scr_devplayerxp", "0" );
  71. SetDevDvarIfUninitialized( "scr_devScriptMoversDebugDraw", "0" );
  72. SetDevDvarIfUninitialized( "scr_devHeliPathsDebugDraw", "0" );
  73. SetDevDvarIfUninitialized( "scr_devPredatorMissileDebugDraw", "0" );
  74. SetDevDvarIfUninitialized( "scr_devPrintDailyWeeklyChallenges", "" );
  75.  
  76. SetDevDvar( "scr_givspecialgrenade", "" );
  77. SetDevDvar( "scr_giveequipment", "" );
  78. SetDevDvar( "scr_list_weapons", "" );
  79. SetDevDvar( "scr_givekillstreak", "" );
  80. SetDevDvar( "scr_devgivecarepackage", "" );
  81. SetDevDvar( "scr_devgivecarepackagetype", "" );
  82. SetDevDvar( "scr_useGambit", "" );
  83.  
  84. SetDevDvar( "scr_predatorme", "" );
  85. SetDevDvar( "scr_setdefcon", "" );
  86. SetDevDvar( "scr_showcard", "" );
  87. SetDevDvar( "scr_showoutcome", "" );
  88.  
  89. SetDevDvar( "scr_enemykillhost", "" );
  90.  
  91. SetDevDvar( "scr_giveperk", "" );
  92. SetDevDvar( "scr_takeperk", "" );
  93.  
  94. SetDevDvar( "scr_sre", "" );
  95. SetDevDvar( "scr_testmigration", "" );
  96.  
  97. SetDevDvar( "scr_show_splash", "" );
  98. SetDevDvar( "scr_spam_splashes", "" );
  99. SetDevDvar( "scr_spam_usedsplash", "" );
  100. SetDevDvar( "scr_spam_eventsplash", "" );
  101. SetDevDvar( "scr_spam_boteventsplash", "" );
  102. SetDevDvar( "scr_spam_ranksplash", "" );
  103. SetDevDvar( "scr_spam_weaponranksplash", "" );
  104.  
  105. SetDevDvar( "scr_show_endgameupdate", "" );
  106.  
  107. SetDevDvar( "scr_goto_spawn", "" );
  108.  
  109. SetDevDvar( "scr_showOrigin", "" );
  110.  
  111. level.baseWeaponList = maps\mp\gametypes\_weapons::buildWeaponData( true );
  112.  
  113. SetDevDvarIfUninitialized( "debug_reflection", "0" );
  114.  
  115. level thread onPlayerConnect();
  116.  
  117. for(;;)
  118. {
  119. wait .05;
  120. updateDevSettings();
  121. }
  122. #/
  123. }
  124.  
  125.  
  126. /#
  127. updateDevSettings()
  128. {
  129. showspawns = getdvarInt("scr_showspawns");
  130. if(showspawns > 1)
  131. showspawns = 1;
  132. else if(showspawns < 0)
  133. showspawns = 0;
  134.  
  135. if(!isdefined(level.showspawns) || level.showspawns != showspawns)
  136. {
  137. level.showspawns = showspawns;
  138. SetDevDvar("scr_showspawns", level.showspawns);
  139.  
  140. if(level.showspawns)
  141. showSpawnpoints();
  142. else
  143. hideSpawnpoints();
  144. }
  145.  
  146. updateMinimapSetting();
  147.  
  148. if ( getDvar( "scr_test_weapon" ) != "" )
  149. {
  150. foreach ( player in level.players )
  151. {
  152. player thread initForWeaponTests();
  153. player setTestWeapon( getDvar( "scr_test_weapon" ) );
  154. }
  155.  
  156. SetDevDvar( "scr_test_weapon", "" );
  157. }
  158.  
  159. if ( getDvar( "scr_dump_ranks" ) != "" )
  160. {
  161.  
  162. SetDevDvar( "scr_dump_ranks", "" );
  163.  
  164. for ( rId = 0; rId <= level.maxRank; rId++ )
  165. {
  166. rankName = tableLookupIString( "mp/rankTable.csv", 0, rId, 5 );
  167. iprintln( "REFERENCE UNLOCKED_AT_LV" + (rId+1) );
  168. iprintln( "LANG_ENGLISH Unlocked at ", rankName, " (Lv" + (rId+1) + ")" );
  169.  
  170. wait ( 0.05 );
  171. }
  172. }
  173.  
  174. if ( getDvar( "scr_list_weapons" ) != "" )
  175. {
  176. foreach ( baseWeapon, _ in level.baseWeaponList )
  177. iPrintLn( baseWeapon );
  178.  
  179. SetDevDvar( "scr_list_weapons", "" );
  180. }
  181.  
  182. if ( getdvarint("scr_predatorme") == 1 )
  183. {
  184. foreach ( player in level.players )
  185. level thread maps\mp\killstreaks\_remotemissile::_fire_noplayer( 0, player );
  186.  
  187. SetDevDvar( "scr_predatorme", "" );
  188. }
  189.  
  190. if ( getdvarfloat("scr_complete_all_challenges") != 0 )
  191. {
  192. foreach ( player in level.players )
  193. {
  194. player thread maps\mp\gametypes\_missions::completeAllChallenges( getdvarfloat("scr_complete_all_challenges") );
  195. }
  196.  
  197. SetDevDvar( "scr_complete_all_challenges", "" );
  198. }
  199.  
  200. if ( getDvarInt("scr_setdefcon") != 0 )
  201. {
  202. maps\mp\_defcon::updateDefcon( getDvarInt("scr_setdefcon") );
  203. SetDevDvar( "scr_setdefcon", "" );
  204. }
  205.  
  206. if ( getDvar("scr_givekillstreak") != "" )
  207. {
  208. streakName = getDvar( "scr_givekillstreak" );
  209.  
  210. resetEMPDvar = false;
  211. EMPTime = undefined;
  212. if( streakName == "emp_quick" )
  213. {
  214. resetEMPDvar = true;
  215. EMPTime = GetDvarFloat( "scr_emp_timeout" );
  216. streakName = "emp";
  217. SetDevDvar( "scr_emp_timeout", 1.0 );
  218. }
  219.  
  220. if( streakName == "juggernaut" || streakName == "juggernaut_recon" )
  221. {
  222. if( level.players[0] isJuggernaut() )
  223. {
  224. level.players[0] notify( "lost_juggernaut" );
  225. wait( 0.05 );
  226. }
  227.  
  228. level.players[0] thread maps\mp\killstreaks\_juggernaut::giveJuggernaut( streakname );
  229. }
  230. else if ( isDefined( level.killstreakFuncs[streakName] ) && tableLookup( "mp/killstreakTable.csv", 1, streakName, 0 ) != "" )
  231. {
  232. foreach ( player in level.players )
  233. {
  234. if( isDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] )
  235. continue;
  236.  
  237. if ( player.team != "spectator" )
  238. player maps\mp\killstreaks\_killstreaks::giveKillstreak( streakName );
  239. }
  240. }
  241. else
  242. {
  243. println( "\"" + getDvar("scr_givekillstreak") + "\" is not a valid value for scr_givekillstreak. Try:" );
  244. foreach ( killstreak, value in level.killstreakFuncs )
  245. {
  246. if ( tableLookup( "mp/killstreakTable.csv", 1, killstreak, 0 ) != "" )
  247. println( " " + killstreak );
  248. }
  249. println( "" );
  250. }
  251.  
  252. if( resetEMPDvar )
  253. {
  254. level thread waitResetDvar( 5.0, "scr_emp_timeout", EMPTime );
  255. }
  256.  
  257. SetDevDvar( "scr_givekillstreak", "" );
  258. }
  259.  
  260. if ( GetDvarInt( "scr_devgivedeathstreak" ) > 0 )
  261. {
  262. streakName = GetDvar( "scr_devdeathstreakoverride" );
  263.  
  264. foreach( player in level.players )
  265. {
  266. if( isDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] )
  267. continue;
  268.  
  269. if( player.team == "spectator" )
  270. continue;
  271.  
  272. player.pers["cur_death_streak"] = int( TableLookup( "mp/perkTable.csv", 1, streakName, 6 ) );
  273. SetDevDvar( "scr_testclients_killplayer", 1 );
  274. }
  275.  
  276. SetDevDvar( "scr_devgivedeathstreak", 0 );
  277. }
  278.  
  279. if ( getDvar("scr_devgivecarepackage") != "" )
  280. {
  281. streakName = getDvar( "scr_devgivecarepackage" );
  282. streakType = getDvar( "scr_devgivecarepackagetype" );
  283.  
  284. if ( ( isDefined( level.killstreakFuncs[streakName] ) && tableLookup( "mp/killstreakTable.csv", 1, streakName, 0 ) != "" ) || streakName == "random" )
  285. {
  286. foreach ( player in level.players )
  287. {
  288. if( isDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] )
  289. continue;
  290.  
  291. if ( player.team != "spectator" )
  292. player maps\mp\killstreaks\_killstreaks::giveKillstreak( "airdrop_assault" );
  293.  
  294. if( streakName != "random" )
  295. {
  296. SetDevDvar( "scr_crateOverride", streakName );
  297. SetDevDvar( "scr_crateTypeOverride", streakType );
  298. }
  299. else
  300. {
  301. SetDevDvar( "scr_crateOverride", "" );
  302. SetDevDvar( "scr_crateTypeOverride", "" );
  303. }
  304. }
  305. }
  306. else
  307. {
  308. println( "\"" + getDvar("scr_devgivecarepackage") + "\" is not a valid value for scr_devgivecarepackage. Try:" );
  309. foreach ( killstreak, value in level.killstreakFuncs )
  310. {
  311. if ( tableLookup( "mp/killstreakTable.csv", 1, killstreak, 0 ) != "" )
  312. println( " " + killstreak );
  313. }
  314. println( "" );
  315. }
  316.  
  317. SetDevDvar( "scr_devgivecarepackage", "" );
  318. SetDevDvar( "scr_devgivecarepackagetype", "" );
  319. }
  320.  
  321. if ( getDvar("scr_showcard") != "" )
  322. {
  323. tokens = strTok( getDvar( "scr_showcard" ), " " );
  324.  
  325. if ( tokens.size )
  326. {
  327. playerName = tokens[0];
  328.  
  329. if ( isDefined( tokens[1] ) )
  330. slotId = int(tokens[1]);
  331. else
  332. slotId = 0;
  333.  
  334. owner = undefined;
  335. foreach ( player in level.players )
  336. {
  337. if ( player.name == playerName )
  338. {
  339. owner = player;
  340. player SetCardDisplaySlot( player, slotId );
  341. break;
  342. }
  343. }
  344.  
  345. if ( !isDefined( owner ) )
  346. printLn( "Player " + playerName + "not found!" );
  347. }
  348.  
  349. SetDevDvar( "scr_showcard", "" );
  350. }
  351.  
  352. if ( getDvar("scr_usekillstreak") != "" )
  353. {
  354. tokens = strTok( getDvar( "scr_usekillstreak" ), " " );
  355.  
  356. if ( tokens.size > 1 )
  357. {
  358. playerName = tokens[0];
  359. streakName = tokens[1];
  360.  
  361. if ( !isDefined( level.killstreakFuncs[streakName] ) )
  362. printLn( "Killstreak " + streakName + "not found!" );
  363.  
  364. owner = undefined;
  365. foreach ( player in level.players )
  366. {
  367. if ( player.name == playerName )
  368. {
  369. owner = player;
  370.  
  371. player maps\mp\killstreaks\_killstreaks::giveKillstreak( streakName );
  372.  
  373. if ( isDefined( tokens[2] ) )
  374. player thread maps\mp\killstreaks\_killstreaks::killstreakUsePressed();
  375. else
  376. player thread [[ level.killstreakFuncs[ streakName ] ]]();
  377.  
  378. if ( isSubStr( streakName, "airstrike" ) )
  379. {
  380. wait .05;
  381. player notify( "confirm_location", level.mapCenter, 0 );
  382. }
  383.  
  384. if ( isSubStr( streakName, "airdrop" ) )
  385. {
  386. wait .05;
  387.  
  388. switch( streakName )
  389. {
  390. case "airdrop_assault":
  391. case "airdrop_support":
  392. level thread maps\mp\killstreaks\_airdrop::doFlyBy( player, level.mapCenter, randomFloat( 360 ), streakName );
  393. break;
  394. case "airdrop_mega":
  395. level thread maps\mp\killstreaks\_airdrop::doC130FlyBy( player, level.mapCenter, randomFloat( 360 ), streakName );
  396. break;
  397. }
  398. }
  399. break;
  400. }
  401. }
  402.  
  403. if ( !isDefined( owner ) )
  404. printLn( "Player " + playerName + "not found!" );
  405. }
  406. SetDevDvar( "scr_usekillstreak", "" );
  407. }
  408.  
  409. if ( getDvar("scr_playertoorigin") != "" )
  410. {
  411. tokens = strTok( getDvar( "scr_playertoorigin" ), " " );
  412.  
  413. newOrigin = (int(tokens[0]), int(tokens[1]), int(tokens[2]));
  414.  
  415. playerName = tokens[3];
  416. foreach ( player in level.players )
  417. {
  418. if ( player.name == playerName )
  419. {
  420. player setOrigin( newOrigin );
  421. break;
  422. }
  423. }
  424.  
  425. SetDevDvar( "scr_playertoorigin", "" );
  426. }
  427.  
  428. if ( getDvar("scr_useGambit") != "" )
  429. {
  430. tokens = strTok( getDvar( "scr_useGambit" ), " " );
  431.  
  432. if ( tokens.size > 1 )
  433. {
  434. playerName = tokens[0];
  435. gambitName = tokens[1];
  436.  
  437. if ( !isDefined( level.scriptPerks[gambitName] ) )
  438. printLn( "Gambit " + gambitName + "not found!" );
  439.  
  440. owner = undefined;
  441. foreach ( player in level.players )
  442. {
  443. if ( player.name == playerName )
  444. {
  445. owner = player;
  446. player notify("gambit_on");
  447. break;
  448. }
  449. }
  450.  
  451. if ( !isDefined( owner ) )
  452. printLn( "Player " + playerName + "not found!" );
  453. }
  454. SetDevDvar( "scr_useGambit", "" );
  455. }
  456.  
  457. if ( getDvar("scr_levelnotify" ) != "" )
  458. {
  459. level notify ( getDvar( "scr_levelnotify" ) );
  460. SetDevDvar( "scr_levelnotify", "" );
  461. }
  462.  
  463. if ( getdvar("scr_giveperk") != "" )
  464. {
  465. perk = getdvar("scr_giveperk");
  466.  
  467. for ( i = 0; i < level.players.size; i++ )
  468. level.players[i] thread givePerk( perk, false );
  469.  
  470. SetDevDvar( "scr_giveperk", "" );
  471. }
  472. if ( getdvar("scr_takeperk") != "" )
  473. {
  474. perk = getdvar("scr_takeperk");
  475. for ( i = 0; i < level.players.size; i++ )
  476. {
  477. level.players[i] unsetPerk( perk, true );
  478. level.players[i].extraPerks[ perk ] = undefined;
  479. }
  480. SetDevDvar( "scr_takeperk", "" );
  481. }
  482.  
  483. if ( getDvar( "scr_x_kills_y" ) != "" )
  484. {
  485. nameTokens = strTok( getDvar( "scr_x_kills_y" ), " " );
  486. if ( nameTokens.size > 1 )
  487. thread xKillsY( nameTokens[0], nameTokens[1] );
  488.  
  489. SetDevDvar( "scr_x_kills_y", "" );
  490. }
  491.  
  492. if ( getDvar( "scr_enemykillhost" ) != "" )
  493. {
  494. hostPlayer = undefined;
  495. enemyPlayer = undefined;
  496. foreach ( player in level.players )
  497. {
  498. if ( !player isHost() )
  499. continue;
  500.  
  501. hostPlayer = player;
  502. break;
  503. }
  504.  
  505.  
  506. foreach ( player in level.players )
  507. {
  508. if ( level.teamBased )
  509. {
  510. if ( player.team == hostPlayer.team )
  511. continue;
  512.  
  513. enemyPlayer = player;
  514. break;
  515. }
  516. else
  517. {
  518. if ( player isHost() )
  519. continue;
  520.  
  521. enemyPlayer = player;
  522. break;
  523. }
  524. }
  525.  
  526. if ( isDefined( enemyPlayer ) )
  527. thread xKillsY( enemyPlayer.name, hostPlayer.name );
  528.  
  529. SetDevDvar( "scr_enemykillhost", "" );
  530. }
  531.  
  532. if ( getDvar( "scr_drop_weapon" ) != "" )
  533. {
  534. weapon = spawn( "weapon_" + getDvar( "scr_drop_weapon" ), level.players[0].origin );
  535. SetDevDvar( "scr_drop_weapon", "" );
  536. }
  537.  
  538. if ( getDvar( "scr_set_rank" ) != "" )
  539. {
  540. level.players[0].pers["rank"] = 0;
  541. level.players[0].pers["rankxp"] = 0;
  542.  
  543. newRank = min( getDvarInt( "scr_set_rank" ), 54 );
  544. newRank = max( newRank, 1 );
  545.  
  546. SetDevDvar( "scr_set_rank", "" );
  547.  
  548. if ( level.teamBased && (!level.teamCount["allies"] || !level.teamCount["axis"]) )
  549. println( "scr_set_rank may not work because there are not players on both teams" );
  550. else if ( !level.teamBased && (level.teamCount["allies"] + level.teamCount["axis"] < 2) )
  551. println( "scr_set_rank may not work because there are not at least two players" );
  552.  
  553. level.players[0] setPlayerData( "restXPGoal", 0 );
  554.  
  555. lastXp = 0;
  556. for ( index = 0; index <= newRank; index++ )
  557. {
  558. newXp = maps\mp\gametypes\_rank::getRankInfoMinXP( index );
  559. level.players[0] thread maps\mp\gametypes\_rank::giveRankXP( "kill", newXp - lastXp );
  560. lastXp = newXp;
  561. wait ( 0.25 );
  562. self notify ( "cancel_notify" );
  563. }
  564. }
  565.  
  566. if ( getDvar( "scr_givexp" ) != "" )
  567. {
  568. level.players[0] thread maps\mp\gametypes\_rank::giveRankXP( "challenge", getDvarInt( "scr_givexp" ) );
  569.  
  570. SetDevDvar( "scr_givexp", "" );
  571. }
  572.  
  573. if ( getDvar( "scr_do_notify" ) != "" )
  574. {
  575. for ( i = 0; i < level.players.size; i++ )
  576. level.players[i] maps\mp\gametypes\_hud_message::oldNotifyMessage( getDvar( "scr_do_notify" ), getDvar( "scr_do_notify" ), game["icons"]["allies"] );
  577.  
  578. announcement( getDvar( "scr_do_notify" ) );
  579. SetDevDvar( "scr_do_notify", "" );
  580. }
  581.  
  582. if ( getDvar( "scr_spam_splashes" ) != "" )
  583. {
  584. foreach( player in level.players )
  585. {
  586. player thread maps\mp\gametypes\_hud_message::splashNotifyDelayed( "longshot" );
  587. player thread maps\mp\gametypes\_hud_message::splashNotifyDelayed( "headshot" );
  588. player thread maps\mp\gametypes\_hud_message::challengeSplashNotify( "ch_marksman_iw5_m4" );
  589. player thread maps\mp\gametypes\_hud_message::splashNotifyDelayed( "execution" );
  590. player thread maps\mp\gametypes\_hud_message::killstreakSplashNotify( "uav", 3 );
  591. player thread maps\mp\gametypes\_hud_message::killstreakSplashNotify( "ac130", 11 );
  592. level thread teamPlayerCardSplash( "used_emp", player, player.team );
  593. player thread maps\mp\gametypes\_rank::updateRankAnnounceHUD();
  594. player thread maps\mp\gametypes\_rank::updateWeaponRankAnnounceHUD();
  595.  
  596. player SetCardDisplaySlot( player, 8 );
  597. player openMenu( "youkilled_card_display" );
  598. wait( 2.0 );
  599. player SetCardDisplaySlot( player, 7 );
  600. player openMenu( "killedby_card_display" );
  601. }
  602.  
  603. SetDevDvar( "scr_spam_splashes", "" );
  604. }
  605.  
  606. if ( getDvar( "scr_spam_usedsplash" ) != "" )
  607. {
  608. foreach( player in level.players )
  609. {
  610. level thread teamPlayerCardSplash( "used_emp", player, player.team );
  611. level thread teamPlayerCardSplash( "used_ac130", player, player.team );
  612. level thread teamPlayerCardSplash( "used_sentry", player, player.team );
  613. level thread teamPlayerCardSplash( "used_remote_mortar", player, player.team );
  614. level thread teamPlayerCardSplash( "used_remote_mg_turret", player, player.team );
  615. level thread teamPlayerCardSplash( "used_littlebird_support", player, player.team );
  616. level thread teamPlayerCardSplash( "used_littlebird_flock", player, player.team );
  617. level thread teamPlayerCardSplash( "used_ims", player, player.team );
  618. level thread teamPlayerCardSplash( "used_remote_tank", player, player.team );
  619. }
  620.  
  621. SetDevDvar( "scr_spam_usedsplash", "" );
  622. }
  623.  
  624. if ( getDvar( "scr_spam_eventsplash" ) != "" )
  625. {
  626. foreach( player in level.players )
  627. {
  628. level thread teamPlayerCardSplash( "callout_firstblood", player );
  629. level thread teamPlayerCardSplash( "callout_grabbedtheflag", player );
  630. level thread teamPlayerCardSplash( "callout_lastenemyalive", player );
  631. level thread teamPlayerCardSplash( "callout_lastteammemberalive", player );
  632. level thread teamPlayerCardSplash( "callout_eliminated", player );
  633. level thread teamPlayerCardSplash( "callout_destroyed_helicopter_flares", player );
  634. level thread teamPlayerCardSplash( "callout_destroyed_little_bird", player );
  635. level thread teamPlayerCardSplash( "callout_bombdefused", player );
  636. level thread teamPlayerCardSplash( "callout_3xpluskill", player );
  637. }
  638.  
  639. SetDevDvar( "scr_spam_eventsplash", "" );
  640. }
  641.  
  642. if ( getDvar( "scr_spam_boteventsplash" ) != "" )
  643. {
  644. // get the first player and make them the "host"
  645. notBot = level.players[0];
  646. foreach( player in level.players )
  647. {
  648. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  649. {
  650. notBot = player;
  651. break;
  652. }
  653. }
  654.  
  655. bot = getBot( notBot );
  656.  
  657. level thread teamPlayerCardSplash( "callout_firstblood", bot );
  658. level thread teamPlayerCardSplash( "callout_grabbedtheflag", bot );
  659. level thread teamPlayerCardSplash( "callout_lastenemyalive", bot );
  660. level thread teamPlayerCardSplash( "callout_lastteammemberalive", bot );
  661. level thread teamPlayerCardSplash( "callout_eliminated", bot );
  662. level thread teamPlayerCardSplash( "callout_destroyed_helicopter_flares", bot );
  663. level thread teamPlayerCardSplash( "callout_destroyed_little_bird", bot );
  664. level thread teamPlayerCardSplash( "callout_bombdefused", bot );
  665. level thread teamPlayerCardSplash( "callout_3xpluskill", bot );
  666.  
  667. SetDevDvar( "scr_spam_boteventsplash", "" );
  668. }
  669.  
  670. if ( getDvar( "scr_spam_ranksplash" ) != "" )
  671. {
  672. foreach( player in level.players )
  673. {
  674. player thread rankSplash( 5, 2.0 );
  675. }
  676.  
  677. SetDevDvar( "scr_spam_ranksplash", "" );
  678. }
  679.  
  680. if ( getDvar( "scr_spam_weaponranksplash" ) != "" )
  681. {
  682. foreach( player in level.players )
  683. {
  684. player thread weaponRankSplash( 5, 2.0 );
  685. }
  686.  
  687. SetDevDvar( "scr_spam_weaponranksplash", "" );
  688. }
  689.  
  690. if ( getDvar( "scr_show_splash" ) != "" )
  691. {
  692. splashName = getDvar( "scr_show_splash" );
  693. splashValue = 1;
  694. splashType = tableLookup( "mp/splashTable.csv", 0, splashName, 11 );
  695.  
  696. if ( splashType == "" || splashType == "none" )
  697. {
  698. println( "splash not found in splash table" );
  699. }
  700. else
  701. {
  702. switch( splashType )
  703. {
  704. case "splash":
  705. foreach( player in level.players )
  706. player thread maps\mp\gametypes\_hud_message::splashNotify( splashName, splashValue );
  707. break;
  708. case "killstreak":
  709. foreach( player in level.players )
  710. player thread maps\mp\gametypes\_hud_message::killstreakSplashNotify( splashName, splashValue );
  711. break;
  712. case "challenge":
  713. case "perk_challenge":
  714. foreach( player in level.players )
  715. {
  716. player ch_setState( splashName, 2 );
  717. player.challengeData[splashName] = 2;
  718. player thread maps\mp\gametypes\_hud_message::challengeSplashNotify( splashName );
  719. }
  720. break;
  721. case "splooge":
  722. foreach( player in level.players )
  723. {
  724. player thread maps\mp\gametypes\_hud_message::challengeSplashNotify( "ch_marksman_m16" );
  725. player thread maps\mp\gametypes\_hud_message::killstreakSplashNotify( "uav", 3 );
  726. player thread maps\mp\gametypes\_hud_message::killstreakSplashNotify( "ac130", 11 );
  727. }
  728. break;
  729. default:
  730. break;
  731. }
  732. }
  733. SetDevDvar( "scr_show_splash", "" );
  734. }
  735.  
  736. if ( getDvar( "scr_addlower" ) != "" )
  737. {
  738. foreach ( player in level.players )
  739. player thread testLowerMessage();
  740.  
  741. SetDevDvar( "scr_addlower", "" );
  742. }
  743.  
  744. if ( getDvar( "scr_entdebug" ) != "" )
  745. {
  746. ents = getEntArray();
  747. level.entArray = [];
  748. level.entCounts = [];
  749. level.entGroups = [];
  750. for ( index = 0; index < ents.size; index++ )
  751. {
  752. classname = ents[index].classname;
  753. if ( !isSubStr( classname, "_spawn" ) )
  754. {
  755. curEnt = ents[index];
  756.  
  757. level.entArray[level.entArray.size] = curEnt;
  758.  
  759. if ( !isDefined( level.entCounts[classname] ) )
  760. level.entCounts[classname] = 0;
  761.  
  762. level.entCounts[classname]++;
  763.  
  764. if ( !isDefined( level.entGroups[classname] ) )
  765. level.entGroups[classname] = [];
  766.  
  767. level.entGroups[classname][level.entGroups[classname].size] = curEnt;
  768. }
  769. }
  770. }
  771.  
  772. if ( getDvar( "scr_sre" ) != "" )
  773. {
  774. assertmsg( "Testing script runtime error" );
  775. SetDevDvar( "scr_sre", "" );
  776. }
  777.  
  778. if ( getDvar( "scr_testmigration" ) != "" )
  779. {
  780. SetDevDvar( "scr_testmigration", "" );
  781. thread maps\mp\gametypes\_hostmigration::Callback_HostMigration();
  782. thread hostMigrationEndTimer_dev();
  783. }
  784.  
  785. if ( getDvar( "scr_show_endgameupdate" ) != "" )
  786. {
  787. promotion = ( getDvar( "scr_show_endgameupdate" ) == "2" );
  788.  
  789. foreach( player in level.players )
  790. player thread testEndGameUpdate( promotion );
  791.  
  792. SetDevDvar( "scr_show_endgameupdate", "" );
  793. }
  794.  
  795. if ( getDvar( "scr_goto_spawn" ) != "" )
  796. {
  797. if ( getDvar( "scr_goto_spawn" ) == "next" )
  798. gotoNextSpawn();
  799. else if ( getDvar( "scr_goto_spawn" ) == "prev" )
  800. gotoPrevSpawn();
  801.  
  802. SetDevDvar( "scr_goto_spawn", "" );
  803. }
  804.  
  805. if ( getDvar( "scr_showOrigin" ) != "" )
  806. {
  807. ent = undefined;
  808.  
  809. if ( isDefined( level.player ) )
  810. ent = level.player;
  811. else if ( isDefined( level.players[0] ) )
  812. ent = level.players[0];
  813.  
  814. if ( isDefined( ent ) )
  815. println( "Player origin - X: " + ent.origin[0] + ", Y: " + ent.origin[1] + ", Z: " + ent.origin[2] );
  816. else
  817. println( "NO PLAYER" );
  818.  
  819. SetDevDvar( "scr_showOrigin", "" );
  820. }
  821. }
  822.  
  823. rankSplash( increments, delay )
  824. {
  825. for( i = 0; i < increments; i++ )
  826. {
  827. self thread maps\mp\gametypes\_rank::updateRankAnnounceHUD();
  828. wait( delay );
  829. }
  830. }
  831.  
  832. weaponRankSplash( increments, delay )
  833. {
  834. for( i = 0; i < increments; i++ )
  835. {
  836. self thread maps\mp\gametypes\_rank::updateWeaponRankAnnounceHUD();
  837. wait( delay );
  838. }
  839. }
  840.  
  841. testEndGameUpdate( promotion )
  842. {
  843. self setClientDvars( "ui_challenge_1_ref", "ch_marksman_ak47",
  844. "ui_challenge_2_ref", "ch_ak47_gl",
  845. "ui_challenge_3_ref", "ch_ak47_reflex",
  846. "ui_challenge_4_ref", "ch_ak47_silencer",
  847. "ui_challenge_5_ref", "ch_ak47_acog",
  848. "ui_challenge_6_ref", "ch_ak47_fmj",
  849. "ui_challenge_7_ref", "ch_ak47_mastery" );
  850.  
  851. if ( isDefined( promotion ) && promotion )
  852. self setClientDvar( "ui_promotion", 1 );
  853. else
  854. self setClientDvar( "ui_promotion", 0 );
  855.  
  856. self closepopupMenu();
  857. self closeInGameMenu();
  858.  
  859. self openMenu( game["menu_endgameupdate"] );
  860.  
  861. waitTime = 4.0 + min( 7, 3 );
  862. while ( waitTime )
  863. {
  864. wait ( 0.25 );
  865. waitTime -= 0.25;
  866.  
  867. self openMenu( game["menu_endgameupdate"] );
  868. }
  869.  
  870. self closeMenu( game["menu_endgameupdate"] );
  871. }
  872.  
  873. hostMigrationEndTimer_dev()
  874. {
  875. level endon( "host_migration_begin" );
  876. wait randomfloat( 20 );
  877. level notify( "hostmigration_enoughplayers" );
  878. }
  879.  
  880.  
  881. testLowerMessage()
  882. {
  883. self setLowerMessage( "spawn_info", game["strings"]["waiting_to_spawn"], 10 );
  884. wait ( 3.0 );
  885.  
  886. self setLowerMessage( "last_stand", &"PLATFORM_COWARDS_WAY_OUT", undefined, 50 );
  887. wait ( 3.0 );
  888.  
  889. self clearLowerMessage( "last_stand" );
  890. wait ( 10.0 );
  891.  
  892. self clearLowerMessage( "spawn_info" );
  893. }
  894.  
  895.  
  896. giveExtraPerks()
  897. {
  898. if ( !isdefined( self.extraPerks ) )
  899. return;
  900.  
  901. perks = getArrayKeys( self.extraPerks );
  902.  
  903. for ( i = 0; i < perks.size; i++ )
  904. self givePerk( perks[i], false );
  905. }
  906.  
  907. xKillsY( attackerName, victimName )
  908. {
  909. attacker = undefined;
  910. victim = undefined;
  911.  
  912. for ( index = 0; index < level.players.size; index++ )
  913. {
  914. if ( level.players[index].name == attackerName )
  915. attacker = level.players[index];
  916. else if ( level.players[index].name == victimName )
  917. victim = level.players[index];
  918. }
  919.  
  920. if ( !isAlive( attacker ) || !isAlive( victim ) )
  921. return;
  922.  
  923. victim thread [[level.callbackPlayerDamage]](
  924. attacker, // eInflictor The entity that causes the damage.(e.g. a turret)
  925. attacker, // eAttacker The entity that is attacking.
  926. 500, // iDamage Integer specifying the amount of damage done
  927. 0, // iDFlags Integer specifying flags that are to be applied to the damage
  928. "MOD_RIFLE_BULLET", // sMeansOfDeath Integer specifying the method of death
  929. "scar_mp", // sWeapon The weapon number of the weapon used to inflict the damage
  930. (0,0,0), // vPoint The point the damage is from?
  931. (0,0,0), // vDir The direction of the damage
  932. "none", // sHitLoc The location of the hit
  933. 0 // psOffsetTime The time offset for the damage
  934. );
  935. }
  936.  
  937.  
  938. updateMinimapSetting()
  939. {
  940. // use 0 for no required map aspect ratio.
  941. requiredMapAspectRatio = getdvarfloat("scr_requiredMapAspectRatio", 1);
  942.  
  943. if (!isdefined(level.minimapheight)) {
  944. SetDevDvar("scr_minimap_height", "0");
  945. level.minimapheight = 0;
  946. }
  947. minimapheight = getdvarfloat("scr_minimap_height");
  948. if (minimapheight != level.minimapheight)
  949. {
  950. if (isdefined(level.minimaporigin)) {
  951. level.minimapplayer unlink();
  952. level.minimaporigin delete();
  953. level notify("end_draw_map_bounds");
  954. }
  955.  
  956. if (minimapheight > 0)
  957. {
  958. level.minimapheight = minimapheight;
  959.  
  960. players = getentarray("player", "classname");
  961. if (players.size > 0)
  962. {
  963. player = players[0];
  964.  
  965. corners = getentarray("minimap_corner", "targetname");
  966. if (corners.size == 2)
  967. {
  968. viewpos = (corners[0].origin + corners[1].origin);
  969. viewpos = (viewpos[0]*.5, viewpos[1]*.5, viewpos[2]*.5);
  970.  
  971. maxcorner = (corners[0].origin[0], corners[0].origin[1], viewpos[2]);
  972. mincorner = (corners[0].origin[0], corners[0].origin[1], viewpos[2]);
  973. if (corners[1].origin[0] > corners[0].origin[0])
  974. maxcorner = (corners[1].origin[0], maxcorner[1], maxcorner[2]);
  975. else
  976. mincorner = (corners[1].origin[0], mincorner[1], mincorner[2]);
  977. if (corners[1].origin[1] > corners[0].origin[1])
  978. maxcorner = (maxcorner[0], corners[1].origin[1], maxcorner[2]);
  979. else
  980. mincorner = (mincorner[0], corners[1].origin[1], mincorner[2]);
  981.  
  982. viewpostocorner = maxcorner - viewpos;
  983. viewpos = (viewpos[0], viewpos[1], viewpos[2] + minimapheight);
  984.  
  985. origin = spawn("script_origin", player.origin);
  986.  
  987. northvector = (cos(getnorthyaw()), sin(getnorthyaw()), 0);
  988. eastvector = (northvector[1], 0 - northvector[0], 0);
  989. disttotop = vectordot(northvector, viewpostocorner);
  990. if (disttotop < 0)
  991. disttotop = 0 - disttotop;
  992. disttoside = vectordot(eastvector, viewpostocorner);
  993. if (disttoside < 0)
  994. disttoside = 0 - disttoside;
  995.  
  996. // extend map bounds to meet the required aspect ratio
  997. if ( requiredMapAspectRatio > 0 )
  998. {
  999. mapAspectRatio = disttoside / disttotop;
  1000. if ( mapAspectRatio < requiredMapAspectRatio )
  1001. {
  1002. incr = requiredMapAspectRatio / mapAspectRatio;
  1003. disttoside *= incr;
  1004. addvec = vecscale( eastvector, vectordot( eastvector, maxcorner - viewpos ) * (incr - 1) );
  1005. mincorner -= addvec;
  1006. maxcorner += addvec;
  1007. }
  1008. else
  1009. {
  1010. incr = mapAspectRatio / requiredMapAspectRatio;
  1011. disttotop *= incr;
  1012. addvec = vecscale( northvector, vectordot( northvector, maxcorner - viewpos ) * (incr - 1) );
  1013. mincorner -= addvec;
  1014. maxcorner += addvec;
  1015. }
  1016. }
  1017.  
  1018. if ( level.console )
  1019. {
  1020. aspectratioguess = 16.0/9.0;
  1021. // .8 would be .75 but it needs to be bigger because of safe area
  1022. angleside = 2 * atan(disttoside * .8 / minimapheight);
  1023. angletop = 2 * atan(disttotop * aspectratioguess * .8 / minimapheight);
  1024. }
  1025. else
  1026. {
  1027. aspectratioguess = 4.0/3.0;
  1028. angleside = 2 * atan(disttoside / minimapheight);
  1029. angletop = 2 * atan(disttotop * aspectratioguess / minimapheight);
  1030. }
  1031. if (angleside > angletop)
  1032. angle = angleside;
  1033. else
  1034. angle = angletop;
  1035.  
  1036. znear = minimapheight - 1000;
  1037. if (znear < 16) znear = 16;
  1038. if (znear > 10000) znear = 10000;
  1039.  
  1040. player playerlinkto(origin);
  1041. origin.origin = viewpos + (0,0,-62);
  1042. origin.angles = (90, getnorthyaw(), 0);
  1043.  
  1044.  
  1045. player TakeAllWeapons();
  1046. player _giveWeapon( "defaultweapon_mp" );
  1047. player setclientdvar("cg_drawgun", "0");
  1048. player setclientdvar("cg_draw2d", "0");
  1049. player setclientdvar("cg_drawfps", "0");
  1050. player setclientdvar("fx_enable", "0");
  1051. player setclientdvar("r_fog", "0");
  1052. player setclientdvar("r_highLodDist", "0"); // (turns of lods)
  1053. player setclientdvar("r_znear", znear); // (reduces z-fighting)
  1054. player setclientdvar("r_lodscale", "0");
  1055. player setclientdvar("cg_drawversion", "0");
  1056. player setclientdvar("sm_enable", "1");
  1057. SetDevDvar("player_view_pitch_down", "90");
  1058. SetDevDvar("player_view_pitch_up", "0");
  1059. player setclientdvar("cg_fov", angle);
  1060. player setclientdvar("cg_fovmin", "1");
  1061.  
  1062. // hide 3D icons
  1063. if ( isdefined( level.objPoints ) )
  1064. {
  1065. for ( i = 0; i < level.objPointNames.size; i++ )
  1066. {
  1067. if ( isdefined( level.objPoints[level.objPointNames[i]] ) )
  1068. level.objPoints[level.objPointNames[i]] destroy();
  1069. }
  1070. level.objPoints = [];
  1071. level.objPointNames = [];
  1072. }
  1073.  
  1074. level.minimapplayer = player;
  1075. level.minimaporigin = origin;
  1076.  
  1077. thread drawMiniMapBounds(viewpos, mincorner, maxcorner);
  1078.  
  1079. wait .05;
  1080.  
  1081. player setplayerangles(origin.angles);
  1082. }
  1083. else
  1084. println("^1Error: There are not exactly 2 \"minimap_corner\" entities in the level.");
  1085. }
  1086. else
  1087. SetDevDvar("scr_minimap_height", "0");
  1088. }
  1089. }
  1090. }
  1091.  
  1092. vecscale(vec, scalar)
  1093. {
  1094. return (vec[0]*scalar, vec[1]*scalar, vec[2]*scalar);
  1095. }
  1096.  
  1097. drawMiniMapBounds(viewpos, mincorner, maxcorner)
  1098. {
  1099. level notify("end_draw_map_bounds");
  1100. level endon("end_draw_map_bounds");
  1101.  
  1102. viewheight = (viewpos[2] - maxcorner[2]);
  1103.  
  1104. north = (cos(getnorthyaw()), sin(getnorthyaw()), 0);
  1105.  
  1106. diaglen = length(mincorner - maxcorner);
  1107.  
  1108. /*diagonal = maxcorner - mincorner;
  1109. side = vecscale(north, vectordot(diagonal, north));
  1110.  
  1111. origcorner0 = mincorner;
  1112. origcorner1 = mincorner + side;
  1113. origcorner2 = maxcorner;
  1114. origcorner3 = maxcorner - side;*/
  1115.  
  1116. mincorneroffset = (mincorner - viewpos);
  1117. mincorneroffset = vectornormalize((mincorneroffset[0], mincorneroffset[1], 0));
  1118. mincorner = mincorner + vecscale(mincorneroffset, diaglen * 1/800);
  1119. maxcorneroffset = (maxcorner - viewpos);
  1120. maxcorneroffset = vectornormalize((maxcorneroffset[0], maxcorneroffset[1], 0));
  1121. maxcorner = maxcorner + vecscale(maxcorneroffset, diaglen * 1/800);
  1122.  
  1123. diagonal = maxcorner - mincorner;
  1124. side = vecscale(north, vectordot(diagonal, north));
  1125. sidenorth = vecscale(north, abs(vectordot(diagonal, north)));
  1126.  
  1127. corner0 = mincorner;
  1128. corner1 = mincorner + side;
  1129. corner2 = maxcorner;
  1130. corner3 = maxcorner - side;
  1131.  
  1132. toppos = vecscale(mincorner + maxcorner, .5) + vecscale(sidenorth, .51);
  1133. textscale = diaglen * .003;
  1134.  
  1135. while(1)
  1136. {
  1137. line(corner0, corner1, (0,1,0));
  1138. line(corner1, corner2, (0,1,0));
  1139. line(corner2, corner3, (0,1,0));
  1140. line(corner3, corner0, (0,1,0));
  1141.  
  1142. /*line(origcorner0, origcorner1, (1,0,0));
  1143. line(origcorner1, origcorner2, (1,0,0));
  1144. line(origcorner2, origcorner3, (1,0,0));
  1145. line(origcorner3, origcorner0, (1,0,0));*/
  1146.  
  1147. print3d(toppos, "This Side Up", (1,1,1), 1, textscale);
  1148.  
  1149. wait .05;
  1150. }
  1151. }
  1152.  
  1153. addTestClients()
  1154. {
  1155. wait 5;
  1156.  
  1157. for(;;)
  1158. {
  1159. if(getdvarInt("scr_testclients") > 0)
  1160. break;
  1161. wait 1;
  1162. }
  1163.  
  1164. // for ( index = 1; index < 24; index++ )
  1165. // kick( index );
  1166.  
  1167. testclients = getdvarInt("scr_testclients");
  1168. SetDevDvar( "scr_testclients", 0 );
  1169. for(i = 0; i < testclients; i++)
  1170. {
  1171. ent[i] = addtestclient();
  1172.  
  1173. if (!isdefined(ent[i])) {
  1174. println("Could not add test client");
  1175. wait 1;
  1176. continue;
  1177. }
  1178.  
  1179. ent[i].pers["isBot"] = true;
  1180. ent[i] TestClient( "autoassign" );
  1181. }
  1182.  
  1183. if ( matchMakingGame() )
  1184. setMatchData( "hasBots", true );
  1185.  
  1186. // default to not moving or firing
  1187. //SetDevDvar( "testClients_doMove", false );
  1188. //SetDevDvar( "testClients_doAttack", false );
  1189.  
  1190. thread addTestClients();
  1191. }
  1192.  
  1193.  
  1194. TestClient(team)
  1195. {
  1196. self endon( "disconnect" );
  1197.  
  1198. while(!isdefined(self.pers["team"]))
  1199. wait( 0.05 );
  1200.  
  1201. if ( allowTeamChoice() )
  1202. {
  1203. self notify("menuresponse", game["menu_team"], team);
  1204. wait( 0.5 );
  1205. }
  1206.  
  1207. if ( allowClassChoice() )
  1208. {
  1209. class = "class" + randomInt( 5 );
  1210. self notify("menuresponse", "changeclass", class);
  1211. }
  1212.  
  1213. self waittill_notify_or_timeout( "spawned_player", 0.5 );
  1214. wait( 0.10 );
  1215. }
  1216.  
  1217. haveTestClientKillPlayer()
  1218. {
  1219. // for testing deathstreaks quickly
  1220. for(;;)
  1221. {
  1222. if( getdvarInt( "scr_testclients_killplayer" ) > 0 )
  1223. break;
  1224. wait 1;
  1225. }
  1226.  
  1227. SetDevDvar( "scr_testclients_killplayer", 0 );
  1228.  
  1229. // get the first player and make them the "host"
  1230. notBot = level.players[0];
  1231. foreach( player in level.players )
  1232. {
  1233. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  1234. {
  1235. notBot = player;
  1236. break;
  1237. }
  1238. }
  1239.  
  1240. bot = getBot( notBot );
  1241.  
  1242. if( isDefined( bot ) )
  1243. {
  1244. notBot thread [[level.callbackPlayerDamage]](
  1245. bot, // eInflictor The entity that causes the damage.(e.g. a turret)
  1246. bot, // eAttacker The entity that is attacking.
  1247. 500, // iDamage Integer specifying the amount of damage done
  1248. 0, // iDFlags Integer specifying flags that are to be applied to the damage
  1249. "MOD_RIFLE_BULLET", // sMeansOfDeath Integer specifying the method of death
  1250. bot.primaryweapon, // sWeapon The weapon number of the weapon used to inflict the damage
  1251. bot.origin, // vPoint The point the damage is from?
  1252. (0, 0, 0), // vDir The direction of the damage
  1253. "none", // sHitLoc The location of the hit
  1254. 0 // psOffsetTime The time offset for the damage
  1255. );
  1256. }
  1257.  
  1258. wait( 1 );
  1259. thread haveTestClientKillPlayer();
  1260. }
  1261.  
  1262. haveTestClientCallKillstreak()
  1263. {
  1264. // for testing killstreaks quickly
  1265. for(;;)
  1266. {
  1267. if( getdvar( "scr_testclients_givekillstreak" ) != "" )
  1268. break;
  1269. wait 1;
  1270. }
  1271.  
  1272. killstreak = GetDvar( "scr_testclients_givekillstreak" );
  1273. SetDevDvar( "scr_testclients_givekillstreak", "" );
  1274.  
  1275. // get the first player and make them the "host"
  1276. notBot = level.players[0];
  1277. foreach( player in level.players )
  1278. {
  1279. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  1280. {
  1281. notBot = player;
  1282. break;
  1283. }
  1284. }
  1285.  
  1286. bot = getBot( notBot );
  1287.  
  1288. if( GetDvarInt( "scr_testclients_givekillstreak_toggleall" ) )
  1289. {
  1290. foreach( player in level.players )
  1291. {
  1292. if( isDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] )
  1293. {
  1294. bot = player;
  1295. }
  1296.  
  1297. if( isDefined( bot ) )
  1298. {
  1299. bot botUseKillstreak( killstreak );
  1300. }
  1301. }
  1302. }
  1303. else if( GetDvarInt( "scr_testclients_givekillstreak_toggleall_sametime" ) )
  1304. {
  1305. foreach( player in level.players )
  1306. {
  1307. if( isDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] )
  1308. {
  1309. bot = player;
  1310. }
  1311.  
  1312. if( isDefined( bot ) )
  1313. {
  1314. bot thread botUseKillstreak( killstreak );
  1315. }
  1316. }
  1317. }
  1318. else
  1319. {
  1320. if( isDefined( bot ) )
  1321. {
  1322. bot botUseKillstreak( killstreak );
  1323. }
  1324. }
  1325.  
  1326. thread haveTestClientCallKillstreak();
  1327. }
  1328.  
  1329. botUseKillstreak( killstreak ) // self == bot
  1330. {
  1331. resetEMPDvar = false;
  1332. EMPTime = undefined;
  1333. if( killstreak == "emp_quick" )
  1334. {
  1335. resetEMPDvar = true;
  1336. EMPTime = GetDvarFloat( "scr_emp_timeout" );
  1337. killstreak = "emp";
  1338. SetDevDvar( "scr_emp_timeout", 1.0 );
  1339. }
  1340.  
  1341. self maps\mp\killstreaks\_killstreaks::giveKillstreak( killstreak );
  1342. wait( 0.1 );
  1343.  
  1344. switch( killstreak )
  1345. {
  1346. case "littlebird_flock":
  1347. case "osprey_gunner":
  1348. case "precision_airstrike":
  1349. case "stealth_airstrike":
  1350. self thread maps\mp\killstreaks\_killstreaks::killstreakUsePressed();
  1351. wait( 1.0 );
  1352. self notify( "confirm_location", level.mapCenter, 0 );
  1353. break;
  1354. case "ims":
  1355. self thread maps\mp\killstreaks\_killstreaks::killstreakUsePressed();
  1356. wait( 1.0 );
  1357. self notify( "place_ims" );
  1358. break;
  1359. case "sentry":
  1360. case "sam_turret":
  1361. self thread maps\mp\killstreaks\_killstreaks::killstreakUsePressed();
  1362. wait( 1.0 );
  1363. self notify( "place_sentry" );
  1364. break;
  1365. case "remote_mg_turret":
  1366. self thread maps\mp\killstreaks\_killstreaks::killstreakUsePressed();
  1367. wait( 1.0 );
  1368. self notify( "place_turret" );
  1369. break;
  1370. case "remote_tank":
  1371. self thread maps\mp\killstreaks\_killstreaks::killstreakUsePressed();
  1372. wait( 1.0 );
  1373. self notify( "place_tank" );
  1374. case "remote_uav":
  1375. self thread maps\mp\killstreaks\_killstreaks::killstreakUsePressed();
  1376. wait( 1.0 );
  1377. self notify( "place_carryRemoteUAV" );
  1378. break;
  1379. case "airdrop_trap":
  1380. case "airdrop_assault":
  1381. result = self maps\mp\killstreaks\_killstreaks::killstreakUsePressed();
  1382. if( !result )
  1383. return;
  1384. wait( 1.0 );
  1385. level thread maps\mp\killstreaks\_airdrop::doFlyBy( self, self.origin, randomFloat( 360 ), killstreak );
  1386. break;
  1387. case "escort_airdrop":
  1388. result = self maps\mp\killstreaks\_killstreaks::killstreakUsePressed();
  1389. if( !result )
  1390. return;
  1391. wait( 1.0 );
  1392. self maps\mp\killstreaks\_escortairdrop::finishSupportEscortUsage( -1, self.origin, randomFloat( 360 ), killstreak );
  1393. break;
  1394. default:
  1395. self thread maps\mp\killstreaks\_killstreaks::killstreakUsePressed();
  1396. break;
  1397. }
  1398.  
  1399. if( resetEMPDvar )
  1400. {
  1401. level thread waitResetDvar( 1.0, "scr_emp_timeout", EMPTime );
  1402. }
  1403. }
  1404.  
  1405. waitResetDvar( waitTime, dvarName, dvarValue )
  1406. {
  1407. wait( waitTime );
  1408. SetDevDvar( dvarName, dvarValue );
  1409. }
  1410.  
  1411. haveTestClientPlantExplosive()
  1412. {
  1413. // for testing bouncing betty quickly
  1414. for(;;)
  1415. {
  1416. if( GetDvar( "scr_testclients_plantexplosive" ) != "" )
  1417. break;
  1418. wait 1;
  1419. }
  1420.  
  1421. explosive = GetDvar( "scr_testclients_plantexplosive" );
  1422. SetDevDvar( "scr_testclients_plantexplosive", "" );
  1423.  
  1424. // get the first player and make them the "host"
  1425. notBot = level.players[0];
  1426. foreach( player in level.players )
  1427. {
  1428. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  1429. {
  1430. notBot = player;
  1431. break;
  1432. }
  1433. }
  1434.  
  1435. bot = getBot( notBot );
  1436.  
  1437. if( isDefined( bot ) )
  1438. {
  1439. trace = bulletTrace( bot.origin + (0, 0, 4), bot.origin - (0, 0, 4), false, bot );
  1440. normal = vectornormalize( trace["normal"] );
  1441. plantAngles = vectortoangles( normal );
  1442. plantAngles += ( 90, 0, 0 );
  1443.  
  1444. switch( explosive )
  1445. {
  1446. case "bouncing_betty":
  1447. mine = maps\mp\gametypes\_weapons::spawnMine( bot.origin, bot, "equipment", plantAngles );
  1448. mine.trigger = spawn( "script_origin", mine.origin + (0,0,25) );
  1449. mine thread maps\mp\gametypes\_weapons::equipmentWatchUse( bot );
  1450. mine.killCamEnt = Spawn( "script_model", mine.origin + ( 0, 0, 5 ) );
  1451. break;
  1452.  
  1453. case "claymore":
  1454. // TODO: need a way to spawn a grenade, because a claymore is a grenade
  1455. //bot.claymorearray = array_removeUndefined( bot.claymorearray );
  1456.  
  1457. //if( bot.claymoreArray.size >= level.maxPerPlayerExplosives )
  1458. // bot.claymoreArray[0] detonate();
  1459.  
  1460. //claymore = Spawn( "script_model", bot.origin );
  1461. //claymore.angles = bot.angles;
  1462. //claymore SetModel( "weapon_claymore" );
  1463. //bot.claymorearray[ bot.claymorearray.size ] = claymore;
  1464. //claymore.owner = bot;
  1465. //claymore.team = bot.team;
  1466. //claymore.weaponName = "claymore_mp";
  1467. //claymore.trigger = spawn( "script_origin", claymore.origin );
  1468.  
  1469. //level.mines[level.mines.size] = claymore;
  1470. //claymore thread maps\mp\gametypes\_weapons::c4Damage();
  1471. //claymore thread maps\mp\gametypes\_weapons::c4EMPDamage();
  1472. //claymore thread maps\mp\gametypes\_weapons::c4EMPKillstreakWait();
  1473. //claymore thread maps\mp\gametypes\_weapons::claymoreDetonation();
  1474. //claymore thread maps\mp\gametypes\_weapons::equipmentWatchUse( bot );
  1475. //claymore thread maps\mp\gametypes\_weapons::setClaymoreTeamHeadIcon( bot.pers[ "team" ] );
  1476. break;
  1477. }
  1478. }
  1479.  
  1480. thread haveTestClientPlantExplosive();
  1481. }
  1482.  
  1483. haveTestClientThrowDeployableVest()
  1484. {
  1485. // for testing bouncing betty quickly
  1486. for(;;)
  1487. {
  1488. if( GetDvarInt( "scr_testclients_throw_deployable_vest" ) > 0 )
  1489. break;
  1490. wait 1;
  1491. }
  1492.  
  1493. SetDevDvar( "scr_testclients_throw_deployable_vest", 0 );
  1494.  
  1495. // get the first player and make them the "host"
  1496. notBot = level.players[0];
  1497. foreach( player in level.players )
  1498. {
  1499. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  1500. {
  1501. notBot = player;
  1502. break;
  1503. }
  1504. }
  1505.  
  1506. bot = getBot( notBot );
  1507.  
  1508. if( isDefined( bot ) )
  1509. {
  1510. trace = bulletTrace( bot.origin + (0, 0, 4), bot.origin - (0, 0, 4), false, bot );
  1511. box = maps\mp\killstreaks\_deployablebox::createBoxForPlayer( "deployable_vest", trace[ "position" ], bot );
  1512. wait 0.05;
  1513. box thread maps\mp\killstreaks\_deployablebox::box_setActive();
  1514. }
  1515.  
  1516. thread haveTestClientThrowDeployableVest();
  1517. }
  1518.  
  1519. addTestClientJuggernaut()
  1520. {
  1521. // for testing juggernauts quickly
  1522. for(;;)
  1523. {
  1524. if( GetDvar( "scr_testclients_jugg" ) != "" )
  1525. break;
  1526. wait 1;
  1527. }
  1528.  
  1529. juggType = GetDvar( "scr_testclients_jugg" );
  1530. SetDevDvar( "scr_testclients_jugg", "" );
  1531.  
  1532. // get the first player and make them the "host"
  1533. notBot = level.players[0];
  1534. foreach( player in level.players )
  1535. {
  1536. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  1537. {
  1538. notBot = player;
  1539. break;
  1540. }
  1541. }
  1542.  
  1543. bot = getBot( notBot );
  1544.  
  1545. if( isDefined( bot ) )
  1546. bot thread maps\mp\killstreaks\_juggernaut::giveJuggernaut( juggType );
  1547.  
  1548. thread addTestClientJuggernaut();
  1549. }
  1550.  
  1551. addTestClientSpawnPoint()
  1552. {
  1553. // let you pick the spot where the test client will spawn, so you can put the test client in one particular spot
  1554. for(;;)
  1555. {
  1556. if( GetDvarInt( "scr_testclients_spawnpoint" ) > 0 )
  1557. break;
  1558. wait 1;
  1559. }
  1560.  
  1561. // get the first player and make them the "host"
  1562. notBot = level.players[0];
  1563. foreach( player in level.players )
  1564. {
  1565. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  1566. {
  1567. notBot = player;
  1568. break;
  1569. }
  1570. }
  1571.  
  1572. if( !IsDefined( notBot ) )
  1573. {
  1574. SetDevDvar( "scr_testclients_spawnpoint", 0 );
  1575. thread addTestClientSpawnPoint();
  1576. return;
  1577. }
  1578. if( !IsAlive( notBot ) )
  1579. {
  1580. SetDevDvar( "scr_testclients_spawnpoint", 0 );
  1581. thread addTestClientSpawnPoint();
  1582. return;
  1583. }
  1584.  
  1585. // show a marker in the ground
  1586. markerPos = BulletTrace( notBot GetEye(), notBot.origin + ( AnglesToForward( notBot GetPlayerAngles() ) * 10000 ), false, notBot );
  1587. marker = Spawn( "script_model", markerPos[ "position" ] );
  1588. //markerPos = notBot.origin + ( AnglesToForward( notBot.angles ) * 200 );
  1589. //marker = Spawn( "script_model", markerPos );
  1590. marker SetModel( "projectile_bouncing_betty_grenade" );
  1591.  
  1592. // keep it on the ground
  1593. trace = BulletTrace( marker.origin + ( 0, 0, 50 ), marker.origin + ( 0, 0, -100 ), false, marker );
  1594. marker.origin = trace[ "position" ];
  1595.  
  1596. marker thread showFX();
  1597.  
  1598. while( GetDvarInt( "scr_testclients_spawnpoint" ) > 0 )
  1599. {
  1600. markerPos = BulletTrace( notBot GetEye(), notBot.origin + ( AnglesToForward( notBot GetPlayerAngles() ) * 10000 ), false, marker );
  1601. marker.origin = markerPos[ "position" ];
  1602. //markerPos = notBot.origin + ( AnglesToForward( notBot.angles ) * 200 );
  1603. //marker.origin = markerPos;
  1604.  
  1605. // keep it on the ground
  1606. trace = BulletTrace( marker.origin + ( 0, 0, 50 ), marker.origin + ( 0, 0, -100 ), false, marker );
  1607. marker.origin = trace[ "position" ];
  1608.  
  1609. if( notBot UseButtonPressed() )
  1610. {
  1611. ent = addtestclient();
  1612.  
  1613. if( !IsDefined( ent ) )
  1614. {
  1615. PrintLn("Could not add test client");
  1616. wait 1;
  1617. continue;
  1618. }
  1619.  
  1620. ent.pers[ "isBot" ] = true;
  1621. ent thread TestClient( getOtherTeam( notBot.team ) );
  1622. ent waittill_notify_or_timeout( "spawned_player", 3.0 );
  1623. ent setOrigin( marker.origin );
  1624.  
  1625. if( matchMakingGame() )
  1626. setMatchData( "hasBots", true );
  1627.  
  1628. break;
  1629. }
  1630.  
  1631. wait( 0.05 );
  1632. }
  1633.  
  1634. marker delete();
  1635. SetDevDvar( "scr_testclients_spawnpoint", 0 );
  1636. thread addTestClientSpawnPoint();
  1637. }
  1638.  
  1639. showFX()
  1640. {
  1641. self endon( "death" );
  1642. wait( 1.0 );
  1643. PlayFXOnTag( level.devSpawnFXid, self, "tag_fx" );
  1644. }
  1645.  
  1646. warpEnemies()
  1647. {
  1648. // warp enemies to the host
  1649. for(;;)
  1650. {
  1651. if( getdvarInt( "scr_warpenemies" ) > 0 )
  1652. break;
  1653. wait 1;
  1654. }
  1655.  
  1656. SetDevDvar( "scr_warpenemies", 0 );
  1657.  
  1658. // get the first player and make them the "host"
  1659. notBot = level.players[0];
  1660. foreach( player in level.players )
  1661. {
  1662. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  1663. {
  1664. notBot = player;
  1665. break;
  1666. }
  1667. }
  1668.  
  1669. foreach( player in level.players )
  1670. {
  1671. if( level.teambased )
  1672. {
  1673. if( player.team != notBot.team )
  1674. {
  1675. player setOrigin( notBot.origin );
  1676. }
  1677. }
  1678. else
  1679. player setOrigin( notBot.origin );
  1680. }
  1681.  
  1682. thread warpEnemies();
  1683. }
  1684.  
  1685. warpFriendlies()
  1686. {
  1687. // warp friendlies to the host
  1688. for(;;)
  1689. {
  1690. if( getdvarInt( "scr_warpfriendlies" ) > 0 )
  1691. break;
  1692. wait 1;
  1693. }
  1694.  
  1695. SetDevDvar( "scr_warpfriendlies", 0 );
  1696.  
  1697. // get the first player and make them the "host"
  1698. notBot = level.players[0];
  1699. foreach( player in level.players )
  1700. {
  1701. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  1702. {
  1703. notBot = player;
  1704. break;
  1705. }
  1706. }
  1707.  
  1708. foreach( player in level.players )
  1709. {
  1710. if( level.teambased )
  1711. {
  1712. if( player.team == notBot.team )
  1713. {
  1714. player setOrigin( notBot.origin );
  1715. }
  1716. }
  1717. else
  1718. player setOrigin( notBot.origin );
  1719. }
  1720.  
  1721. thread warpFriendlies();
  1722. }
  1723.  
  1724. giveEquipment()
  1725. {
  1726. for(;;)
  1727. {
  1728. if( GetDvar( "scr_giveequipment" ) != "" )
  1729. break;
  1730. wait 1;
  1731. }
  1732.  
  1733. equipment = GetDvar( "scr_giveequipment" );
  1734.  
  1735. if( IsDefined( equipment ) )
  1736. {
  1737. foreach( player in level.players )
  1738. {
  1739. currentWeapon = player GetCurrentOffhand();
  1740. player TakeWeapon( currentWeapon );
  1741. player SetOffhandPrimaryClass( "other" );
  1742. equipment = maps\mp\perks\_perks::validatePerk( 1, equipment );
  1743. player givePerk( equipment, true );
  1744. }
  1745. }
  1746.  
  1747. SetDevDvar( "scr_giveequipment", "" );
  1748.  
  1749. thread giveEquipment();
  1750. }
  1751.  
  1752. giveSpecialGrenade()
  1753. {
  1754. for(;;)
  1755. {
  1756. if( GetDvar( "scr_givespecialgrenade" ) != "" )
  1757. break;
  1758. wait 1;
  1759. }
  1760.  
  1761. equipment = GetDvar( "scr_givespecialgrenade" );
  1762.  
  1763. if( IsDefined( equipment ) )
  1764. {
  1765. foreach( player in level.players )
  1766. {
  1767. weaponList = player GetWeaponsListOffhands();
  1768. foreach( weapon in weaponList )
  1769. {
  1770. switch( weapon )
  1771. {
  1772. case "flash_grenade_mp":
  1773. case "concussion_grenade_mp":
  1774. case "smoke_grenade_mp":
  1775. case "flare_mp":
  1776. case "trophy_mp":
  1777. case "scrambler_mp":
  1778. case "portable_radar_mp":
  1779. case "emp_grenade_mp":
  1780. player TakeWeapon( weapon );
  1781. break;
  1782. }
  1783. }
  1784.  
  1785. if ( equipment == "flash_grenade_mp" )
  1786. player SetOffhandSecondaryClass( "flash" );
  1787. else if ( equipment == "smoke_grenade_mp" || equipment == "concussion_grenade_mp" )
  1788. player SetOffhandSecondaryClass( "smoke" );
  1789. else
  1790. player SetOffhandSecondaryClass( "flash" );
  1791.  
  1792. switch( equipment )
  1793. {
  1794. case "smoke_grenade_mp":
  1795. player giveWeapon( equipment );
  1796. player setWeaponAmmoClip( equipment, 1 );
  1797. break;
  1798. case "flash_grenade_mp":
  1799. player giveWeapon( equipment );
  1800. player setWeaponAmmoClip( equipment, 2 );
  1801. break;
  1802. case "concussion_grenade_mp":
  1803. player giveWeapon( equipment );
  1804. player setWeaponAmmoClip( equipment, 2 );
  1805. break;
  1806. case "emp_grenade_mp":
  1807. player giveWeapon( equipment );
  1808. player setWeaponAmmoClip( equipment, 1 );
  1809. break;
  1810. case "specialty_portable_radar":
  1811. player givePerk( equipment, false );
  1812. player setWeaponAmmoClip( "portable_radar_mp", 1 );
  1813. break;
  1814. case "specialty_scrambler":
  1815. player givePerk( equipment, false );
  1816. player setWeaponAmmoClip( "scrambler_mp", 1 );
  1817. break;
  1818. case "specialty_tacticalinsertion":
  1819. player givePerk( equipment, false );
  1820. player setWeaponAmmoClip( "flare_mp", 1 );
  1821. break;
  1822. case "trophy_mp":
  1823. player givePerk( equipment, false );
  1824. player setWeaponAmmoClip( equipment, 1 );
  1825. break;
  1826. default:
  1827. player giveWeapon( equipment );
  1828. player setWeaponAmmoClip( equipment, 1 );
  1829. break;
  1830. }
  1831. }
  1832. }
  1833.  
  1834. SetDevDvar( "scr_givespecialgrenade", "" );
  1835.  
  1836. thread giveSpecialGrenade();
  1837. }
  1838.  
  1839. initForWeaponTests()
  1840. {
  1841. if ( isDefined( self.initForWeaponTests ) )
  1842. return;
  1843.  
  1844. self.initForWeaponTests = true;
  1845.  
  1846. self thread changeCamoListener();
  1847. self thread thirdPersonToggle();
  1848.  
  1849. self waittill ( "death" );
  1850. self.initForWeaponTests = undefined;
  1851. }
  1852.  
  1853.  
  1854. setTestWeapon( weaponName )
  1855. {
  1856. if ( !isDefined( level.baseWeaponList[weaponName] ) )
  1857. {
  1858. self iPrintLnBold( "Unknown weapon: " + weaponName );
  1859. return;
  1860. }
  1861.  
  1862. self notify ( "new_test_weapon" );
  1863. self.baseWeapon = weaponName;
  1864. self thread weaponChangeListener();
  1865.  
  1866. self updateTestWeapon();
  1867. }
  1868.  
  1869.  
  1870. thirdPersonToggle()
  1871. {
  1872. self endon ( "death" );
  1873. self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" );
  1874.  
  1875. thirdPersonElem = self createFontString( "default", 1.5 );
  1876. thirdPersonElem setPoint( "TOPRIGHT", "TOPRIGHT", 0, 72 + 260 );
  1877. thirdPersonElem setText( "3rd Person: " + getDvarInt( "camera_thirdPerson" ) + " [{+actionslot 2}]" );
  1878. self thread destroyOnDeath( thirdPersonElem );
  1879.  
  1880. for ( ;; )
  1881. {
  1882. self waittill( "dpad_down" );
  1883.  
  1884. setDvar( "camera_thirdPerson", !getDvarInt( "camera_thirdPerson" ) );
  1885.  
  1886. thirdPersonElem setText( "3rd Person: " + getDvarInt( "camera_thirdPerson" ) + " [{+actionslot 2}]" );
  1887. }
  1888. }
  1889.  
  1890.  
  1891. changeCamoListener()
  1892. {
  1893. self endon ( "death" );
  1894. self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" );
  1895.  
  1896. camoList = [];
  1897.  
  1898. for ( rowIndex = 0; tableLookupByRow( "mp/camoTable.csv", rowIndex, 1 ) != ""; rowIndex++ )
  1899. camoList[camoList.size] = tableLookupByRow( "mp/camoTable.csv", rowIndex, 1 );
  1900.  
  1901. self.camoIndex = 0;
  1902.  
  1903. camoElem = self createFontString( "default", 1.5 );
  1904. camoElem setPoint( "TOPRIGHT", "TOPRIGHT", 0, 52 + 260 );
  1905. camoElem setText( "Camo: " + tableLookup( "mp/camoTable.csv", 0, self.camoIndex, 1 ) + " [{+actionslot 1}]" );
  1906. self thread destroyOnDeath( camoElem );
  1907.  
  1908. for ( ;; )
  1909. {
  1910. self waittill( "dpad_up" );
  1911.  
  1912. self.camoIndex++;
  1913. if ( self.camoIndex > (camoList.size - 1) )
  1914. self.camoIndex = 0;
  1915.  
  1916. camoElem setText( "Camo: " + tableLookup( "mp/camoTable.csv", 0, self.camoIndex, 1 ) + " [{+actionslot 1}]" );
  1917. self updateTestWeapon();
  1918. }
  1919. }
  1920.  
  1921.  
  1922. weaponChangeListener()
  1923. {
  1924. self endon ( "death" );
  1925. self endon ( "new_test_weapon" );
  1926.  
  1927. self notifyOnPlayerCommand( "next_weapon", "weapnext" );
  1928.  
  1929. if ( !isDefined( self.weaponElem ) )
  1930. {
  1931. self.weaponElem = self createFontString( "default", 1.5 );
  1932. self.weaponElem setPoint( "TOPRIGHT", "TOPRIGHT", 0, 32 + 260 );
  1933. self thread destroyOnDeath( self.weaponElem );
  1934. }
  1935. self.variantIndex = 0;
  1936.  
  1937. self.weaponElem setText( "Weapon: " + level.baseWeaponList[self.baseWeapon].variants[self.variantIndex] + " [{weapnext}]" );
  1938.  
  1939. for ( ;; )
  1940. {
  1941. self waittill ( "next_weapon" );
  1942.  
  1943. self.variantIndex++;
  1944. if ( self.variantIndex > (level.baseWeaponList[self.baseWeapon].variants.size - 1) )
  1945. self.variantIndex = 0;
  1946.  
  1947. self.weaponElem setText( "Weapon: " + level.baseWeaponList[self.baseWeapon].variants[self.variantIndex] + " [{weapnext}]" );
  1948. self updateTestWeapon();
  1949. }
  1950. }
  1951.  
  1952.  
  1953. destroyOnDeath( hudElem )
  1954. {
  1955. self waittill ( "death" );
  1956.  
  1957. hudElem destroy();
  1958. }
  1959.  
  1960. updateTestWeapon()
  1961. {
  1962. self takeAllWeapons();
  1963.  
  1964. wait ( 0.05 );
  1965.  
  1966. weaponName = level.baseWeaponList[self.baseWeapon].variants[self.variantIndex];
  1967.  
  1968. self _giveWeapon( weaponName, int(self.camoIndex) );
  1969. self switchToWeapon( weaponName );
  1970. self giveMaxAmmo( weaponName );
  1971. }
  1972.  
  1973. watchNoClip()
  1974. {
  1975. // when a player is spawned thread them
  1976. level waittill( "player_spawned", player );
  1977. if( !IsDefined( player.pers[ "isBot" ] ) )
  1978. {
  1979. player NotifyOnPlayerCommand( "ls_down_noclip", "+breath_sprint" );
  1980. player NotifyOnPlayerCommand( "dpad_down_noclip", "+actionslot 2" );
  1981. player thread playerNoClip();
  1982. }
  1983. level thread watchNoClip();
  1984. }
  1985.  
  1986. playerNoClip() // self == player
  1987. {
  1988. self endon( "disconnect" );
  1989. self endon( "death" );
  1990.  
  1991. self.devNoClipLS = false;
  1992. self.devNoClipDpad = false;
  1993. self thread watchNoClipLS();
  1994. self thread watchNoClipDpad();
  1995.  
  1996. while( true )
  1997. {
  1998. if( GetDvarInt( "scr_devnoclip" ) > 0 )
  1999. {
  2000. if( self.devNoClipLS && self.devNoClipDpad )
  2001. self noclip();
  2002. }
  2003.  
  2004. wait( 0.2 );
  2005. }
  2006. }
  2007.  
  2008. watchNoClipLS() // self == player
  2009. {
  2010. self endon( "disconnect" );
  2011. self endon( "death" );
  2012.  
  2013. while( true )
  2014. {
  2015. self waittill( "ls_down_noclip" );
  2016.  
  2017. self.devNoClipLS = true;
  2018.  
  2019. wait( 0.2 );
  2020.  
  2021. self.devNoClipLS = false;
  2022. }
  2023. }
  2024.  
  2025. watchNoClipDpad() // self == player
  2026. {
  2027. self endon( "disconnect" );
  2028. self endon( "death" );
  2029.  
  2030. while( true )
  2031. {
  2032. self waittill( "dpad_down_noclip" );
  2033.  
  2034. self.devNoClipDpad = true;
  2035.  
  2036. wait( 0.2 );
  2037.  
  2038. self.devNoClipDpad = false;
  2039. }
  2040. }
  2041.  
  2042. watchUFO()
  2043. {
  2044. // when a player is spawned thread them
  2045. level waittill( "player_spawned", player );
  2046. if( !IsDefined( player.pers[ "isBot" ] ) )
  2047. {
  2048. player NotifyOnPlayerCommand( "ls_down_ufo", "+breath_sprint" );
  2049. player NotifyOnPlayerCommand( "dpad_up_ufo", "+actionslot 1" );
  2050. player thread playerUFO();
  2051. }
  2052. level thread watchUFO();
  2053. }
  2054.  
  2055. playerUFO() // self == player
  2056. {
  2057. self endon( "disconnect" );
  2058. self endon( "death" );
  2059.  
  2060. self.devUFOLS = false;
  2061. self.devUFODpad = false;
  2062. self thread watchUFOLS();
  2063. self thread watchUFODpad();
  2064.  
  2065. while( true )
  2066. {
  2067. if( GetDvarInt( "scr_devufo" ) > 0 )
  2068. {
  2069. if( self.devUFOLS && self.devUFODpad )
  2070. self ufo();
  2071. }
  2072.  
  2073. wait( 0.2 );
  2074. }
  2075. }
  2076.  
  2077. watchUFOLS() // self == player
  2078. {
  2079. self endon( "disconnect" );
  2080. self endon( "death" );
  2081.  
  2082. while( true )
  2083. {
  2084. self waittill( "ls_down_ufo" );
  2085.  
  2086. self.devUFOLS = true;
  2087.  
  2088. wait( 0.2 );
  2089.  
  2090. self.devUFOLS = false;
  2091. }
  2092. }
  2093.  
  2094. watchUFODpad() // self == player
  2095. {
  2096. self endon( "disconnect" );
  2097. self endon( "death" );
  2098.  
  2099. while( true )
  2100. {
  2101. self waittill( "dpad_up_ufo" );
  2102.  
  2103. self.devUFODpad = true;
  2104.  
  2105. wait( 0.2 );
  2106.  
  2107. self.devUFODpad = false;
  2108. }
  2109. }
  2110.  
  2111. printPerks()
  2112. {
  2113. while( true )
  2114. {
  2115. if( GetDvarInt( "scr_printperks" ) > 0 )
  2116. break;
  2117. wait 1;
  2118. }
  2119.  
  2120. foreach( player in level.players )
  2121. {
  2122. // just players
  2123. if( GetDvarInt( "scr_printperks" ) == 1 && !isDefined( player.pers[ "isBot" ] ) )
  2124. {
  2125. PrintLn( player.name );
  2126. foreach( perk, value in player.perks )
  2127. {
  2128. PrintLn( perk );
  2129. }
  2130. }
  2131. // just bots
  2132. else if( GetDvarInt( "scr_printperks" ) == 2 && isDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] )
  2133. {
  2134. PrintLn( player.name );
  2135. foreach( perk, value in player.perks )
  2136. {
  2137. PrintLn( perk );
  2138. }
  2139. }
  2140. }
  2141.  
  2142. SetDevDvar( "scr_printperks", 0 );
  2143. thread printPerks();
  2144. }
  2145.  
  2146. devGivePerks()
  2147. {
  2148. while( true )
  2149. {
  2150. if( GetDvar( "scr_devgiveperk" ) != "" )
  2151. break;
  2152. wait 1;
  2153. }
  2154.  
  2155. perk = GetDvar( "scr_devgiveperk" );
  2156. foreach( player in level.players )
  2157. {
  2158. player thread givePerk( perk, false );
  2159. }
  2160.  
  2161. SetDevDvar( "scr_devgiveperk", "" );
  2162.  
  2163. thread devGivePerks();
  2164. }
  2165.  
  2166. devClearPerks()
  2167. {
  2168. while( true )
  2169. {
  2170. if( GetDvarInt( "scr_devclearperks" ) > 0 )
  2171. break;
  2172. wait 1;
  2173. }
  2174.  
  2175. SetDevDvar( "scr_devclearperks", 0 );
  2176.  
  2177. foreach( player in level.players )
  2178. {
  2179. player thread _clearPerks();
  2180. }
  2181.  
  2182. thread devClearPerks();
  2183. }
  2184.  
  2185. devHurtPlayer()
  2186. {
  2187. while( true )
  2188. {
  2189. if( GetDvarInt( "scr_devhurtplayer" ) > 0 )
  2190. break;
  2191. wait 1;
  2192. }
  2193.  
  2194. damageVal = GetDvarInt( "scr_devhurtplayer" );
  2195.  
  2196. // get the first player and make them the "host"
  2197. notBot = level.players[0];
  2198. foreach( player in level.players )
  2199. {
  2200. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  2201. {
  2202. notBot = player;
  2203. break;
  2204. }
  2205. }
  2206.  
  2207. if( damageVal >= 100 )
  2208. {
  2209. damageVal = notBot.health - 1;
  2210. }
  2211.  
  2212. bot = getBot( notBot );
  2213.  
  2214. if( IsDefined( bot ) )
  2215. {
  2216. notBot thread [[level.callbackPlayerDamage]](
  2217. bot, // eInflictor The entity that causes the damage.(e.g. a turret)
  2218. bot, // eAttacker The entity that is attacking.
  2219. damageVal, // iDamage Integer specifying the amount of damage done
  2220. 0, // iDFlags Integer specifying flags that are to be applied to the damage
  2221. "MOD_RIFLE_BULLET", // sMeansOfDeath Integer specifying the method of death
  2222. bot.primaryweapon, // sWeapon The weapon number of the weapon used to inflict the damage
  2223. bot.origin, // vPoint The point the damage is from?
  2224. (0, 0, 0), // vDir The direction of the damage
  2225. "none", // sHitLoc The location of the hit
  2226. 0 // psOffsetTime The time offset for the damage
  2227. );
  2228. }
  2229.  
  2230. SetDevDvar( "scr_devhurtplayer", 0 );
  2231.  
  2232. thread devHurtPlayer();
  2233. }
  2234.  
  2235. devHurtPlayerReset()
  2236. {
  2237. while( true )
  2238. {
  2239. if( GetDvarInt( "scr_devhurtplayerreset" ) > 0 )
  2240. break;
  2241. wait 1;
  2242. }
  2243.  
  2244. // get the first player and make them the "host"
  2245. notBot = level.players[0];
  2246. foreach( player in level.players )
  2247. {
  2248. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  2249. {
  2250. notBot = player;
  2251. break;
  2252. }
  2253. }
  2254.  
  2255. notBot.health = 100;
  2256.  
  2257. SetDevDvar( "scr_devhurtplayerreset", 0 );
  2258.  
  2259. thread devHurtPlayerReset();
  2260. }
  2261.  
  2262. devHurtPlayerDirectional()
  2263. {
  2264. while( true )
  2265. {
  2266. if( GetDvar( "scr_devhurtplayerdirectional" ) != "" )
  2267. break;
  2268. wait 1;
  2269. }
  2270.  
  2271. bot = undefined;
  2272. // get the first player and make them the "host"
  2273. notBot = level.players[0];
  2274. foreach( player in level.players )
  2275. {
  2276. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  2277. {
  2278. notBot = player;
  2279. break;
  2280. }
  2281. }
  2282.  
  2283. bot = getBot( notBot );
  2284.  
  2285. if( IsDefined( bot ) )
  2286. {
  2287. switch( GetDvar( "scr_devhurtplayerdirectional" ) )
  2288. {
  2289. case "right100":
  2290. bot SetOrigin( notbot.origin + ( 0, 0, 5 ) + ( AnglesToRight( notbot.angles ) * 100 ) );
  2291. break;
  2292. case "left100":
  2293. bot SetOrigin( notbot.origin + ( 0, 0, 5 ) + ( ( AnglesToRight( notbot.angles ) * 100 ) * -1 ) );
  2294. break;
  2295. case "center100":
  2296. bot SetOrigin( notbot.origin + ( 0, 0, 5 ) + ( AnglesToForward( notbot.angles ) * 100 ) );
  2297. break;
  2298. case "right600":
  2299. bot SetOrigin( notbot.origin + ( 0, 0, 5 ) + ( AnglesToRight( notbot.angles ) * 600 ) );
  2300. break;
  2301. case "left600":
  2302. bot SetOrigin( notbot.origin + ( 0, 0, 5 ) + ( ( AnglesToRight( notbot.angles ) * 600 ) * -1 ) );
  2303. break;
  2304. case "center600":
  2305. bot SetOrigin( notbot.origin + ( 0, 0, 5 ) + ( AnglesToForward( notbot.angles ) * 600 ) );
  2306. break;
  2307. }
  2308.  
  2309. wait( 0.1 );
  2310. MagicBullet( "iw5_usp45_mp", bot.origin + ( 0, 0, 35 ), notbot.origin + ( 0, 0, 35 ), bot );
  2311. }
  2312.  
  2313. SetDevDvar( "scr_devhurtplayerdirectional", "" );
  2314.  
  2315. thread devHurtPlayerDirectional();
  2316. }
  2317.  
  2318. getBot( notBot )
  2319. {
  2320. bot = undefined;
  2321. foreach( player in level.players )
  2322. {
  2323. if( IsDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] )
  2324. {
  2325. bot = player;
  2326. }
  2327.  
  2328. if( IsDefined( bot ) && IsDefined( notBot ) )
  2329. {
  2330. if( level.teambased )
  2331. {
  2332. if( bot.team != notBot.team )
  2333. break;
  2334. }
  2335. else // ffa
  2336. break;
  2337. }
  2338. }
  2339.  
  2340. // if there is no bot, then make one
  2341. if( !IsDefined( bot ) )
  2342. {
  2343. SetDevDvar( "scr_testclients", 1 );
  2344. wait( 3.0 );
  2345.  
  2346. foreach( player in level.players )
  2347. {
  2348. if( IsDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] )
  2349. {
  2350. bot = player;
  2351. }
  2352.  
  2353. if( IsDefined( bot ) )
  2354. {
  2355. if( level.teambased )
  2356. {
  2357. if( bot.team != notBot.team )
  2358. break;
  2359. }
  2360. else // ffa
  2361. break;
  2362. }
  2363. }
  2364. }
  2365.  
  2366. return bot;
  2367. }
  2368.  
  2369. devChangeTimeLimit()
  2370. {
  2371. while( true )
  2372. {
  2373. if( GetDvarFloat( "scr_devchangetimelimit" ) > 0.0 )
  2374. break;
  2375. wait 1;
  2376. }
  2377.  
  2378. timelimit = GetDvarFloat( "scr_devchangetimelimit" ) / 60;
  2379. level.startTime = getTime();
  2380. gameMode = "scr_" + level.gametype + "_timelimit";
  2381. level.watchDvars[ gameMode ].value = timelimit;
  2382. SetDevDvar( gameMode, timelimit );
  2383.  
  2384. SetDevDvar( "scr_devchangetimelimit", 0 );
  2385.  
  2386. thread devChangeTimeLimit();
  2387. }
  2388.  
  2389. devWeaponXP()
  2390. {
  2391. prev = GetDvarInt( "scr_devweaponxp" );
  2392. while( true )
  2393. {
  2394. if( GetDvarInt( "scr_devweaponxp" ) != prev )
  2395. break;
  2396. wait 1;
  2397. }
  2398.  
  2399. // get the first player and make them the "host"
  2400. notBot = level.players[0];
  2401. foreach( player in level.players )
  2402. {
  2403. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  2404. {
  2405. notBot = player;
  2406. break;
  2407. }
  2408. }
  2409.  
  2410. switch( GetDvarInt( "scr_devweaponxp" ) )
  2411. {
  2412. case 0:
  2413. notBot notify( "devStopWeaponXP" );
  2414. if( IsDefined( notBot.devWeaponXPBar ) )
  2415. notBot.devWeaponXPBar destroyElem();
  2416. if( IsDefined( notBot.devWeaponXPBarText ) )
  2417. notBot.devWeaponXPBarText destroyElem();
  2418. break;
  2419. case 1:
  2420. notBot.devWeaponXPBar = notBot createPrimaryProgressBar( 200, 250 );
  2421. notBot.devWeaponXPBarText = notBot createPrimaryProgressBarText( 200, 250 );
  2422. notBot.devWeaponXPBarText setPoint("RIGHT", undefined, level.primaryProgressBarTextX - 150, level.primaryProgressBarTextY + 250 );
  2423. notBot.devWeaponXPBarText SetText( "weapon xp" );
  2424. notBot thread devWatchWeaponXP();
  2425. break;
  2426. }
  2427.  
  2428. thread devWeaponXP();
  2429. }
  2430.  
  2431. devWatchWeaponXP() // self == player (host only for now)
  2432. {
  2433. level endon( "game_ended" );
  2434. self endon( "devStopWeaponXP" );
  2435.  
  2436. // we just want the weapon name up to the first underscore
  2437. weapon = self GetCurrentWeapon();
  2438. weaponTokens = StrTok( weapon, "_" );
  2439.  
  2440. if ( weaponTokens[0] == "iw5" )
  2441. weaponName = weaponTokens[0] + "_" + weaponTokens[1];
  2442. else if ( weaponTokens[0] == "alt" )
  2443. weaponName = weaponTokens[1] + "_" + weaponTokens[2];
  2444. else
  2445. weaponName = weaponTokens[0];
  2446.  
  2447. if( weaponTokens[0] == "gl" )
  2448. weaponName = weaponTokens[1];
  2449.  
  2450. prevXP = self maps\mp\gametypes\_rank::getWeaponRankXP( weaponName );
  2451.  
  2452. while( true )
  2453. {
  2454. weapon = self GetCurrentWeapon();
  2455. if( weapon != "none" && !self isJuggernaut() )
  2456. {
  2457. weaponInvType = weaponInventoryType( weapon );
  2458.  
  2459. if( weaponInvType == "primary" || weaponInvType == "altmode" )
  2460. {
  2461. weapon = self GetCurrentWeapon();
  2462. weaponTokens = StrTok( weapon, "_" );
  2463.  
  2464. if ( weaponTokens[0] == "iw5" )
  2465. weaponName = weaponTokens[0] + "_" + weaponTokens[1];
  2466. else if ( weaponTokens[0] == "alt" )
  2467. weaponName = weaponTokens[1] + "_" + weaponTokens[2];
  2468. else
  2469. weaponName = weaponTokens[0];
  2470.  
  2471. if( weaponTokens[0] == "gl" )
  2472. weaponName = weaponTokens[1];
  2473.  
  2474. currXP = self maps\mp\gametypes\_rank::getWeaponRankXP( weaponName );
  2475.  
  2476. if( prevXP != currXP )
  2477. {
  2478. rank = maps\mp\gametypes\_rank::getWeaponRankForXp( currXP, weaponName );
  2479. minXP = maps\mp\gametypes\_rank::getWeaponRankInfoMinXP( rank );
  2480. nextXP = maps\mp\gametypes\_rank::getWeaponRankInfoXPAmt( rank );
  2481. barFrac = ( currXP - minXP ) / nextXP;
  2482. if( barFrac > 1.0 )
  2483. barFrac = 1.0;
  2484. self.devWeaponXPBar updateBar( barFrac, 0 );
  2485. prevXP = currXP;
  2486.  
  2487. self.devWeaponXPBarText SetText( weapon + " xp:" + currXP + " xp to next:" + nextXP + " rank:" + ( rank + 1 ) );
  2488. }
  2489. }
  2490. }
  2491.  
  2492. wait ( 0.05 );
  2493. }
  2494. }
  2495.  
  2496. devPlayerXP()
  2497. {
  2498. prev = GetDvarInt( "scr_devplayerxp" );
  2499. while( true )
  2500. {
  2501. if( GetDvarInt( "scr_devplayerxp" ) != prev )
  2502. break;
  2503. wait 1;
  2504. }
  2505.  
  2506. // get the first player and make them the "host"
  2507. notBot = level.players[0];
  2508. foreach( player in level.players )
  2509. {
  2510. if( !isDefined( player.pers[ "isBot" ] ) || ( IsDefined( player.pers[ "isBot" ] )&& !player.pers[ "isBot" ] ) )
  2511. {
  2512. notBot = player;
  2513. break;
  2514. }
  2515. }
  2516.  
  2517. switch( GetDvarInt( "scr_devplayerxp" ) )
  2518. {
  2519. case 0:
  2520. notBot notify( "devStopPlayerXP" );
  2521. if( IsDefined( notBot.devPlayerXPBar ) )
  2522. notBot.devPlayerXPBar destroyElem();
  2523. if( IsDefined( notBot.devPlayerXPBarText ) )
  2524. notBot.devPlayerXPBarText destroyElem();
  2525. break;
  2526. case 1:
  2527. notBot.devPlayerXPBar = notBot createPrimaryProgressBar( 200, 200 );
  2528. notBot.devPlayerXPBarText = notBot createPrimaryProgressBarText( 200, 200 );
  2529. notBot.devPlayerXPBarText SetText( "player xp" );
  2530. notBot thread devWatchPlayerXP();
  2531. break;
  2532. }
  2533.  
  2534. thread devPlayerXP();
  2535. }
  2536.  
  2537. devWatchPlayerXP() // self == player (host only for now)
  2538. {
  2539. level endon( "game_ended" );
  2540. self endon( "devStopPlayerXP" );
  2541.  
  2542. prevXP = self maps\mp\gametypes\_rank::getRankXP();
  2543.  
  2544. while( true )
  2545. {
  2546. currXP = self maps\mp\gametypes\_rank::getRankXP();
  2547.  
  2548. if( prevXP != currXP )
  2549. {
  2550. rank = maps\mp\gametypes\_rank::getRankForXp( currXP );
  2551. minXP = maps\mp\gametypes\_rank::getRankInfoMinXP( rank );
  2552. nextXP = maps\mp\gametypes\_rank::getRankInfoXPAmt( rank );
  2553. barFrac = ( currXP - minXP ) / nextXP;
  2554. if( barFrac > 1.0 )
  2555. barFrac = 1.0;
  2556. self.devPlayerXPBar updateBar( barFrac, 0 );
  2557. prevXP = currXP;
  2558.  
  2559. self.devPlayerXPBarText SetText( "player xp:" + currXP + " xp to next:" + nextXP + " rank:" + ( rank + 1 ) );
  2560. }
  2561.  
  2562. wait ( 0.05 );
  2563. }
  2564. }
  2565.  
  2566. devScriptMoversDebugDraw()
  2567. {
  2568. white = ( 1, 1, 1 );
  2569. red = ( 1, 0, 0 );
  2570. green = ( 0, 1, 0 );
  2571. blue = ( 0, 0, 1 );
  2572.  
  2573. while( true )
  2574. {
  2575. if( GetDvarInt( "scr_devScriptMoversDebugDraw" ) > 0 )
  2576. {
  2577. // get all script_models, script_origins, what ever else is a script mover, and show them
  2578. script_models = GetEntArray( "script_model", "classname" );
  2579. script_origins = GetEntArray( "script_origin", "classname" );
  2580.  
  2581. foreach( ent in script_models )
  2582. {
  2583. Line( ent.origin, ent.origin + ( AnglesToForward( ent.angles ) * 10 ), red );
  2584. Line( ent.origin, ent.origin + ( AnglesToRight( ent.angles ) * 10 ), green );
  2585. Line( ent.origin, ent.origin + ( AnglesToUp( ent.angles ) * 10 ), blue );
  2586.  
  2587. if( IsDefined( ent.targetname ) )
  2588. Print3d( ent.origin, ent.targetname );
  2589. }
  2590.  
  2591. foreach( ent in script_origins )
  2592. {
  2593. Line( ent.origin, ent.origin + ( AnglesToForward( ent.angles ) * 10 ), red );
  2594. Line( ent.origin, ent.origin + ( AnglesToRight( ent.angles ) * 10 ), green );
  2595. Line( ent.origin, ent.origin + ( AnglesToUp( ent.angles ) * 10 ), blue );
  2596.  
  2597. if( IsDefined( ent.targetname ) )
  2598. {
  2599. color = white;
  2600. alpha = 1;
  2601. scale = 1;
  2602. switch( ent.targetname )
  2603. {
  2604. case "airstrikeheight":
  2605. color = red;
  2606. scale = 3;
  2607. break;
  2608. case "heli_start":
  2609. case "heli_leave":
  2610. color = green;
  2611. scale = 3;
  2612. break;
  2613. }
  2614.  
  2615. originString = "(" + ent.origin[0] + ", " + ent.origin[1] + ", " + ent.origin[2] + ")";
  2616. Print3d( ent.origin, ent.targetname + originString, color, alpha, scale );
  2617. }
  2618. }
  2619. }
  2620. wait 0.05;
  2621. }
  2622. }
  2623.  
  2624. devHeliPathDebugDraw()
  2625. {
  2626. white = ( 1, 1, 1 );
  2627. red = ( 1, 0, 0 );
  2628. green = ( 0, 1, 0 );
  2629. blue = ( 0, 0, 1 );
  2630.  
  2631. textColor = white;
  2632. textAlpha = 1;
  2633. textScale = 1;
  2634.  
  2635. maxDrawTime = 10;
  2636. drawTime = maxDrawTime;
  2637.  
  2638. originTextOffset = ( 0, 0, -30 );
  2639.  
  2640. endonMsg = "devStopHeliPathsDebugDraw";
  2641.  
  2642. while( true )
  2643. {
  2644. if( GetDvarInt( "scr_devHeliPathsDebugDraw" ) > 0 )
  2645. {
  2646. // get all script_models, script_origins, what ever else is a script mover, and show them
  2647. script_origins = GetEntArray( "script_origin", "classname" );
  2648.  
  2649. foreach( ent in script_origins )
  2650. {
  2651. if( IsDefined( ent.targetname ) )
  2652. {
  2653. switch( ent.targetname )
  2654. {
  2655. case "heli_start":
  2656. textColor = blue;
  2657. textAlpha = 1;
  2658. textScale = 3;
  2659. break;
  2660. case "heli_loop_start":
  2661. textColor = green;
  2662. textAlpha = 1;
  2663. textScale = 3;
  2664. break;
  2665. case "heli_attack_area":
  2666. textColor = red;
  2667. textAlpha = 1;
  2668. textScale = 3;
  2669. break;
  2670. case "heli_leave":
  2671. textColor = white;
  2672. textAlpha = 1;
  2673. textScale = 3;
  2674. break;
  2675. }
  2676.  
  2677. switch( ent.targetname )
  2678. {
  2679. case "heli_start":
  2680. case "heli_loop_start":
  2681. case "heli_attack_area":
  2682. case "heli_leave":
  2683. // only call this thread every N time
  2684. if( drawTime == maxDrawTime )
  2685. ent thread drawPath( textColor, white, textAlpha, textScale, originTextOffset, drawTime, endonMsg );
  2686.  
  2687. ent drawOriginLines();
  2688. ent drawTargetNameText( textColor, textAlpha, textScale );
  2689. ent drawOriginText( textColor, textAlpha, textScale, originTextOffset );
  2690. break;
  2691. }
  2692. }
  2693. }
  2694.  
  2695. drawTime -= 0.05;
  2696. if( drawTime < 0 )
  2697. drawTime = maxDrawTime;
  2698. }
  2699.  
  2700. if( GetDvarInt( "scr_devHeliPathsDebugDraw" ) == 0 )
  2701. {
  2702. level notify( endonMsg );
  2703. drawTime = maxDrawTime;
  2704. }
  2705.  
  2706. wait 0.05;
  2707. }
  2708. }
  2709.  
  2710. drawOriginLines()
  2711. {
  2712. red = ( 1, 0, 0 );
  2713. green = ( 0, 1, 0 );
  2714. blue = ( 0, 0, 1 );
  2715.  
  2716. Line( self.origin, self.origin + ( AnglesToForward( self.angles ) * 10 ), red );
  2717. Line( self.origin, self.origin + ( AnglesToRight( self.angles ) * 10 ), green );
  2718. Line( self.origin, self.origin + ( AnglesToUp( self.angles ) * 10 ), blue );
  2719. }
  2720.  
  2721. drawTargetNameText( textColor, textAlpha, textScale, textOffset )
  2722. {
  2723. if( !IsDefined( textOffset ) )
  2724. textOffset = ( 0, 0, 0 );
  2725. Print3d( self.origin + textOffset, self.targetname, textColor, textAlpha, textScale );
  2726. }
  2727.  
  2728. drawOriginText( textColor, textAlpha, textScale, textOffset )
  2729. {
  2730. if( !IsDefined( textOffset ) )
  2731. textOffset = ( 0, 0, 0 );
  2732. originString = "(" + self.origin[0] + ", " + self.origin[1] + ", " + self.origin[2] + ")";
  2733. Print3d( self.origin + textOffset, originString, textColor, textAlpha, textScale );
  2734. }
  2735.  
  2736. drawSpeedAccelText( textColor, textAlpha, textScale, textOffset )
  2737. {
  2738. if( IsDefined( self.script_airspeed ) )
  2739. Print3d( self.origin + ( 0, 0, textOffset[2] * 2 ), "script_airspeed:" + self.script_airspeed, textColor, textAlpha, textScale );
  2740. if( IsDefined( self.script_accel ) )
  2741. Print3d( self.origin + ( 0, 0, textOffset[2] * 3 ), "script_accel:" + self.script_accel, textColor, textAlpha, textScale );
  2742. }
  2743.  
  2744. drawPath( lineColor, textColor, textAlpha, textScale, textOffset, drawTime, endonMsg ) // self == starting node
  2745. {
  2746. level endon( endonMsg );
  2747.  
  2748. // draw lines from origin to origin until there is no target
  2749. ent = self;
  2750. entFirstTarget = ent.targetname;
  2751.  
  2752. while( IsDefined( ent.target ) )
  2753. {
  2754. entTarget = GetEnt( ent.target, "targetname" );
  2755. ent thread drawPathSegment( entTarget, lineColor, textColor, textAlpha, textScale, textOffset, drawTime, endonMsg );
  2756.  
  2757. // store the first target because we have the loop nodes that will always have a target
  2758. if( ent.targetname == "heli_loop_start" )
  2759. entFirstTarget = ent.target;
  2760. else if( ent.target == entFirstTarget )
  2761. break;
  2762.  
  2763. ent = entTarget;
  2764. wait( 0.05 );
  2765. }
  2766. }
  2767.  
  2768. drawPathSegment( entTarget, lineColor, textColor, textAlpha, textScale, textOffset, drawTime, endonMsg )
  2769. {
  2770. level endon( endonMsg );
  2771.  
  2772. // Di$oRdER was here. /
  2773. while( drawTime > 0 )
  2774. {
  2775. Line( self.origin, entTarget.origin, lineColor );
  2776. self drawSpeedAccelText( textColor, textAlpha, textScale, textOffset );
  2777. drawTime -= 0.05;
  2778. wait( 0.05 );
  2779. }
  2780. }
  2781.  
  2782. devPredatorMissileDebugDraw()
  2783. {
  2784. white = ( 1, 1, 1 );
  2785. red = ( 1, 0, 0 );
  2786. green = ( 0, 1, 0 );
  2787. blue = ( 0, 0, 1 );
  2788.  
  2789. textColor = white;
  2790. textAlpha = 1;
  2791. textScale = 1;
  2792.  
  2793. maxDrawTime = 10;
  2794. drawTime = maxDrawTime;
  2795.  
  2796. originTextOffset = ( 0, 0, -30 );
  2797.  
  2798. endonMsg = "devStopPredatorMissileDebugDraw";
  2799.  
  2800. while( true )
  2801. {
  2802. if( GetDvarInt( "scr_devPredatorMissileDebugDraw" ) > 0 )
  2803. {
  2804. script_origins = GetEntArray( "remoteMissileSpawn", "targetname" );
  2805.  
  2806. foreach( ent in script_origins )
  2807. {
  2808. textColor = red;
  2809. textAlpha = 1;
  2810. textScale = 1;
  2811.  
  2812. if( drawTime == maxDrawTime )
  2813. ent thread drawPath( textColor, white, textAlpha, textScale, originTextOffset, drawTime, endonMsg );
  2814.  
  2815. ent drawOriginLines();
  2816. ent drawTargetNameText( textColor, textAlpha, textScale );
  2817. ent drawOriginText( textColor, textAlpha, textScale, originTextOffset );
  2818. }
  2819.  
  2820. drawTime -= 0.05;
  2821. if( drawTime < 0 )
  2822. drawTime = maxDrawTime;
  2823. }
  2824.  
  2825. if( GetDvarInt( "scr_devPredatorMissileDebugDraw" ) == 0 )
  2826. {
  2827. level notify( endonMsg );
  2828. drawTime = maxDrawTime;
  2829. }
  2830.  
  2831. wait 0.05;
  2832. }
  2833. }
  2834.  
  2835. devPrintDailyWeeklyChallenges()
  2836. {
  2837. while( true )
  2838. {
  2839. if( GetDvar( "scr_devPrintDailyWeeklyChallenges" ) != "" )
  2840. break;
  2841. wait 1;
  2842. }
  2843.  
  2844. foreach( player in level.players )
  2845. {
  2846. if( IsDefined( player.pers[ "isBot" ] ) && player.pers[ "isBot" ] )
  2847. continue;
  2848.  
  2849. // Di$oRdER
  2850. if( GetDvar( "scr_devPrintDailyWeeklyChallenges" ) == "daily" )
  2851. {
  2852. PrintLn( player.name );
  2853. foreach( challenge, value in player.challengedata )
  2854. {
  2855. if( IsSubStr( challenge, "_daily" ) && value )
  2856. PrintLn( "Daily: " + challenge );
  2857. }
  2858. }
  2859. else if( GetDvar( "scr_devPrintDailyWeeklyChallenges" ) == "weekly" )
  2860. {
  2861. PrintLn( player.name );
  2862. foreach( challenge, value in player.challengedata )
  2863. {
  2864. if( IsSubStr( challenge, "_weekly" ) && value )
  2865. PrintLn( "Weekly: " + challenge );
  2866. }
  2867. }
  2868. }
  2869.  
  2870. SetDevDvar( "scr_devPrintDailyWeeklyChallenges", "" );
  2871. thread devPrintDailyWeeklyChallenges();
  2872. }
  2873. #/
  2874.  
  2875. onPlayerConnect()
  2876. {
  2877. for(;;)
  2878. {
  2879. level waittill( "connected", player );
  2880.  
  2881. player thread updateReflectionProbe();
  2882. }
  2883. }
  2884.  
  2885. showSpawnpoint( spawnpoint, classname, color )
  2886. {
  2887. /#
  2888. center = spawnpoint.origin;
  2889. forward = anglestoforward(spawnpoint.angles);
  2890. right = anglestoright(spawnpoint.angles);
  2891.  
  2892. forward *= 16;
  2893. right *= 16;
  2894.  
  2895. a = center + forward - right;
  2896. b = center + forward + right;
  2897. c = center - forward + right;
  2898. d = center - forward - right;
  2899.  
  2900. thread lineUntilNotified(a, b, color, 0);
  2901. thread lineUntilNotified(b, c, color, 0);
  2902. thread lineUntilNotified(c, d, color, 0);
  2903. thread lineUntilNotified(d, a, color, 0);
  2904.  
  2905. thread lineUntilNotified(a, a + (0, 0, 72), color, 0);
  2906. thread lineUntilNotified(b, b + (0, 0, 72), color, 0);
  2907. thread lineUntilNotified(c, c + (0, 0, 72), color, 0);
  2908. thread lineUntilNotified(d, d + (0, 0, 72), color, 0);
  2909.  
  2910. a = a + (0, 0, 72);
  2911. b = b + (0, 0, 72);
  2912. c = c + (0, 0, 72);
  2913. d = d + (0, 0, 72);
  2914.  
  2915. thread lineUntilNotified(a, b, color, 0);
  2916. thread lineUntilNotified(b, c, color, 0);
  2917. thread lineUntilNotified(c, d, color, 0);
  2918. thread lineUntilNotified(d, a, color, 0);
  2919.  
  2920. center = center + (0, 0, 36);
  2921. arrow_forward = anglestoforward(spawnpoint.angles);
  2922. arrowhead_forward = anglestoforward(spawnpoint.angles);
  2923. arrowhead_right = anglestoright(spawnpoint.angles);
  2924.  
  2925. arrow_forward *= 32;
  2926. arrowhead_forward *= 24;
  2927. arrowhead_right *= 8;
  2928. a = center + arrow_forward;
  2929. b = center + arrowhead_forward - arrowhead_right;
  2930. c = center + arrowhead_forward + arrowhead_right;
  2931.  
  2932. thread lineUntilNotified(center, a, (1, 1, 1), 0);
  2933. thread lineUntilNotified(a, b, (1, 1, 1), 0);
  2934. thread lineUntilNotified(a, c, (1, 1, 1), 0);
  2935.  
  2936. foreach ( alternate in spawnpoint.alternates )
  2937. {
  2938. thread lineUntilNotified( spawnpoint.origin, alternate, color, 0);
  2939. }
  2940.  
  2941. thread print3DUntilNotified(spawnpoint.origin + (0, 0, 72), classname, color, 1, 1);
  2942. #/
  2943. }
  2944.  
  2945. showSpawnpoints()
  2946. {
  2947. /#
  2948. if ( isdefined( level.spawnpoints ) )
  2949. {
  2950. foreach ( spawnpoint in level.spawnpoints )
  2951. {
  2952. showSpawnpoint( spawnpoint, spawnpoint.classname, (1,1,1) );
  2953. }
  2954. }
  2955. if ( isdefined( level.extraspawnpointsused ) )
  2956. {
  2957. foreach ( spawnpoint in level.extraspawnpointsused )
  2958. {
  2959. showSpawnpoint( spawnpoint, spawnpoint.fakeclassname, (.5,.5,.5) );
  2960. }
  2961. }
  2962. #/
  2963. }
  2964.  
  2965. print3DUntilNotified(origin, text, color, alpha, scale)
  2966. {
  2967. /#
  2968. level endon("hide_spawnpoints");
  2969.  
  2970. for(;;)
  2971. {
  2972. print3d(origin, text, color, alpha, scale);
  2973. wait .05;
  2974. }
  2975. #/
  2976. }
  2977.  
  2978. lineUntilNotified(start, end, color, depthTest)
  2979. {
  2980. /#
  2981. level endon("hide_spawnpoints");
  2982.  
  2983. for(;;)
  2984. {
  2985. line(start, end, color, depthTest);
  2986. wait .05;
  2987. }
  2988. #/
  2989. }
  2990.  
  2991. hideSpawnpoints()
  2992. {
  2993. /#
  2994. level notify("hide_spawnpoints");
  2995. #/
  2996. }
  2997.  
  2998. updateReflectionProbe()
  2999. {
  3000. /#
  3001. for(;;)
  3002. {
  3003. if ( getDvarInt( "debug_reflection" ) == 1 )
  3004. {
  3005. if ( !isDefined( self.debug_reflectionobject ) )
  3006. {
  3007. self.debug_reflectionobject = spawn( "script_model", self geteye() + ( ( anglestoforward( self.angles ) * 100 ) ) );
  3008. self.debug_reflectionobject setmodel( "test_sphere_silver" );
  3009. self.debug_reflectionobject.origin = self geteye() + ( ( anglestoforward( self getplayerangles() ) * 100 ) );
  3010. self thread reflectionProbeButtons();
  3011. }
  3012. }
  3013. else if ( getDvarInt( "debug_reflection" ) == 0 )
  3014. {
  3015. if ( isDefined( self.debug_reflectionobject ) )
  3016. self.debug_reflectionobject delete();
  3017. }
  3018.  
  3019. wait( 0.05 );
  3020. }
  3021. #/
  3022. }
  3023.  
  3024. reflectionProbeButtons()
  3025. {
  3026. /#
  3027. offset = 100;
  3028. offsetinc = 50;
  3029.  
  3030. while ( getDvarInt( "debug_reflection" ) == 1 )
  3031. {
  3032. if ( self buttonpressed( "BUTTON_X" ) )
  3033. offset += offsetinc;
  3034. if ( self buttonpressed( "BUTTON_Y" ) )
  3035. offset -= offsetinc;
  3036. if ( offset > 1000 )
  3037. offset = 1000;
  3038. if ( offset < 64 )
  3039. offset = 64;
  3040.  
  3041. self.debug_reflectionobject.origin = self GetEye() + ( ( AnglesToForward( self GetPlayerAngles() ) * offset ) );
  3042.  
  3043. wait .05;
  3044. }
  3045. #/
  3046. }
  3047.  
  3048. gotoNextSpawn()
  3049. {
  3050. /#
  3051. if ( isDefined( level.spawnpoints ) )
  3052. {
  3053. foreach( player in level.players )
  3054. {
  3055. if ( !isDefined( player.debug_next_spawnpoint ) )
  3056. player.debug_next_spawnpoint = 0;
  3057.  
  3058. player.spawnPos = level.spawnpoints[player.debug_next_spawnpoint].origin;
  3059. player spawn( level.spawnpoints[player.debug_next_spawnpoint].origin, level.spawnpoints[player.debug_next_spawnpoint].angles );
  3060.  
  3061. player.debug_prev_spawnpoint = player.debug_next_spawnpoint-1;
  3062. if ( player.debug_prev_spawnpoint < 0 )
  3063. player.debug_prev_spawnpoint = level.spawnpoints.size-1;
  3064. player.debug_next_spawnpoint++;
  3065. if ( player.debug_next_spawnpoint == level.spawnpoints.size )
  3066. player.debug_next_spawnpoint = 0;
  3067. }
  3068. }
  3069. #/
  3070. }
  3071.  
  3072. gotoPrevSpawn()
  3073. {
  3074. /#
  3075. if ( isDefined( level.spawnpoints ) )
  3076. {
  3077. foreach( player in level.players )
  3078. {
  3079. if ( !isDefined( player.debug_prev_spawnpoint ) )
  3080. player.debug_prev_spawnpoint = level.spawnpoints.size-1;
  3081.  
  3082. player.spawnPos = level.spawnpoints[player.debug_prev_spawnpoint].origin;
  3083. player spawn( level.spawnpoints[player.debug_prev_spawnpoint].origin, level.spawnpoints[player.debug_prev_spawnpoint].angles );
  3084.  
  3085. player.debug_next_spawnpoint = player.debug_prev_spawnpoint+1;
  3086. if ( player.debug_next_spawnpoint == level.spawnpoints.size )
  3087. player.debug_next_spawnpoint = 0;
  3088. player.debug_prev_spawnpoint--;
  3089. if ( player.debug_prev_spawnpoint < 0 )
  3090. player.debug_prev_spawnpoint = level.spawnpoints.size-1;
  3091. }
  3092. }
  3093. #/
  3094. }
  3095.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement