Advertisement
Guest User

Untitled

a guest
May 24th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 35.88 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include maps\mp\gametypes\_hud_util;
  3. #include common_scripts\utility;
  4.  
  5. main()
  6. {
  7.  
  8. maps\mp\_load::main();
  9.  
  10.  
  11. //-------------------------------------------------------------------------------------------
  12. //---THREAD-FUNCTIONS------------------------------------------------------------------------
  13. //-------------------------------------------------------------------------------------------
  14.  
  15. thread initTriggers();
  16. thread onPlayerConnect();
  17.  
  18. thread easyFinTrigger();
  19. thread hardFinTrigger();
  20. thread mainhardFinTrigger();
  21.  
  22. thread setupmsgTriggers();
  23.  
  24. //-------------------------------------------------------------------------------------------
  25. //---SET-DVARS-------------------------------------------------------------------------------
  26. //-------------------------------------------------------------------------------------------
  27.  
  28. setdvar("r_specularcolorscale", "9" );
  29. setdvar("r_glowbloomintensity0",".25");
  30. setdvar("r_glowbloomintensity1",".25");
  31. setdvar("r_glowskybleedintensity0",".3");
  32. setdvar("compassmaxrange","2000");
  33. setdvar("sm_enable", "1");
  34. setdvar("sm_sunSampleSizeNear", "3");
  35.  
  36. setdvar("bg_falldamageminheight","9999");
  37. setdvar("jump_slowdownenable","0");
  38. setdvar("player_sprintcamerabob","0");
  39. setdvar("player_sprinttime","12.8");
  40.  
  41. //-------------------------------------------------------------------------------------------
  42. //---PRECACHE-STUFF--------------------------------------------------------------------------
  43. //-------------------------------------------------------------------------------------------
  44.  
  45. //3xP Model FX
  46. level._effect[ "bolt_long" ] = loadfx( "Viruzfx/lightning_bolt_long_runner" );
  47. level._effect[ "bolt" ] = loadfx( "Viruzfx/lightning_bolt_runner" );
  48. level._effect[ "bolt_impact" ] = loadfx( "Viruzfx/lightning_bolt_impact_runner" );
  49. level._effect[ "particle_bg" ] = loadfx( "Viruzfx/particle_background" );
  50. level._effect[ "electrical_sparks" ] = loadfx( "Viruzfx/electrical_sparks" );
  51.  
  52. //Model Trail FX
  53. level._effect[ "sonic_trail_low" ] = loadfx("Viruzfx/sonic_trail_lowvelocity");
  54. level._effect[ "sonic_trail_med" ] = loadfx("Viruzfx/sonic_trail_mediumvelocity");
  55. level._effect[ "sonic_trail_high" ] = loadfx("Viruzfx/sonic_trail_highvelocity");
  56. level._effect[ "shadow_trail_low" ] = loadfx("Viruzfx/shadow_trail_lowvelocity");
  57. level._effect[ "shadow_trail_med" ] = loadfx("Viruzfx/shadow_trail_mediumvelocity");
  58. level._effect[ "shadow_trail_high" ] = loadfx("Viruzfx/shadow_trail_highvelocity");
  59. level._effect[ "ratchet_trail_low" ] = loadfx("Viruzfx/ratchet_trail_lowvelocity");
  60. level._effect[ "ratchet_trail_med" ] = loadfx("Viruzfx/ratchet_trail_mediumvelocity");
  61. level._effect[ "ratchet_trail_high" ] = loadfx("Viruzfx/ratchet_trail_highvelocity");
  62.  
  63. //Scoreboard BG
  64. precacheShader("vote_bg");
  65. precacheShader("vote_stange");
  66. precacheShader("vote_stange_left");
  67. precacheShader("votetext_easy");
  68. precacheShader("votetext_classic");
  69. precacheShader("votetext_combined");
  70.  
  71. //Shadow Model
  72. precacheShader("mtl_shadow_eyes");
  73. precacheShader("mtl_shadow_fur");
  74. precacheShader("mtl_shadow_shoes");
  75. precacheShader("mtl_shadow_clothes");
  76. precacheShader("mtl_shadow_body");
  77. precacheModel("shadow");
  78.  
  79. //Sonic Model
  80. precacheShader("mtl_sonic");
  81. precacheShader("mtl_sidney");
  82. precacheShader("mtl_corpo");
  83. precacheModel("sonic");
  84.  
  85. //Ratchet Model
  86. precacheShader("mtl_ratchet_body1");
  87. precacheShader("mtl_ratchet_body2");
  88. precacheShader("mtl_ratchet_eye");
  89. precacheShader("mtl_ratchet_head");
  90. precacheShader("mtl_ratchet_mouth");
  91. precacheShader("mtl_clank_body");
  92. precacheShader("mtl_clank_eyes");
  93. precacheShader("mtl_clank_hands");
  94. precacheModel("ratchet");
  95.  
  96. //Russian Farmer Model (Drizz)
  97. precacheShader("mtl_farmer_cloth");
  98. precacheShader("mtl_farmer_head");
  99. precacheShader("mtl_farmer_hands");
  100. precacheShader("mtl_eye_highlight");
  101. precacheModel("body_complete_mp_russian_farmer");
  102.  
  103. //CPT Price (Viruz & Vartazian)
  104. precacheShader("mtl_sas_woodland_body_sp");
  105. precacheShader("mtl_sas_woodland_hat_hands_sp");
  106. precacheShader("mtl_sas_woodland_price_sp");
  107. precacheModel("body_complete_mp_price_woodland");
  108.  
  109. //-------------------------------------------------------------------------------------------
  110. //---SPAWN-EFFECTS---------------------------------------------------------------------------
  111. //-------------------------------------------------------------------------------------------
  112.  
  113. self.spawndelay = 8;
  114. //electrical sparks links rechts
  115. thread triggerCustomFX("electrical_sparks", (12982,4166,26842), (270,0,0), self.spawndelay - 2);
  116. thread triggerCustomFX("electrical_sparks", (12983,5514,26842), (270,0,0), self.spawndelay - 2);
  117. //bolt rechts oben
  118. thread triggerCustomFX("bolt_long", (12982,5506,27000), (285,90,0), self.spawndelay + 0.3);
  119. thread triggerCustomFX("bolt_impact", (12982,5093,27107), (270,0,0), self.spawndelay + 0.3);
  120. //bolt rechts
  121. thread triggerCustomFX("bolt", (12982,5506,27000), (270,90,0), self.spawndelay + 0.15);
  122. thread triggerCustomFX("bolt_impact", (12982,5121,27000), (270,0,0), self.spawndelay + 0.15);
  123. //bolt rechts unten
  124. thread triggerCustomFX("bolt_long", (12982,5506,27000), (255,90,0), self.spawndelay);
  125. thread triggerCustomFX("bolt_impact", (12982,5093,26896), (270,0,0), self.spawndelay);
  126. //bolt links oben
  127. thread triggerCustomFX("bolt_long", (12983,4174,27000), (285,270,0), self.spawndelay + 0.3);
  128. thread triggerCustomFX("bolt_impact", (12982,4587,27107), (270,0,0), self.spawndelay + 0.3);
  129. //bolt links
  130. thread triggerCustomFX("bolt", (12983,4174,27000), (270,270,0), self.spawndelay + 0.15);
  131. thread triggerCustomFX("bolt_impact", (12982,4559,27000), (270,0,0), self.spawndelay + 0.15);
  132. //bolt links unten
  133. thread triggerCustomFX("bolt_long", (12983,4174,27000), (255,270,0), self.spawndelay);
  134. thread triggerCustomFX("bolt_impact", (12982,4578,26896), (270,0,0), self.spawndelay);
  135. //Logo Background center
  136. thread triggerCustomFX("particle_bg", (12982,4839,27000), (270,180,0), self.spawndelay + 4);
  137. }
  138.  
  139. //-------------------------------------------------------------------------------------------
  140. //---SR-SYSTEM-------------------------------------------------------------------------------
  141. //-------------------------------------------------------------------------------------------
  142.  
  143. onPlayerConnect() {
  144. level endon("game_ended");
  145.  
  146. while (1) {
  147. level waittill("connecting", player);
  148. player initPlayerStuff();
  149. player thread onPlayerSpawned();
  150. player thread vipMsg();
  151. }
  152. }
  153.  
  154. onPlayerSpawned() {
  155. self endon("disconnect");
  156. while (1) {
  157. self waittill("spawned_player");
  158. self thread rocketCheck();
  159. self thread changePlayermodelVIP();
  160. self.trailon = false;
  161. self.ismodel = false;
  162. self thread checkforFirst();
  163. }
  164. }
  165.  
  166. //Setup Triggers, Tps & Msgs
  167. initPlayerStuff() {
  168. self initTriggerForPlayer();
  169. self thread testTouching();
  170. self setupSpawnTeleports(6, (16410,4880,26696), (0,180,0));
  171. }
  172.  
  173. //Resets Everything to 0
  174. initTriggerForPlayer() {
  175. self.triggers = spawnStruct();
  176. self.triggers.hard = [];
  177. self.triggers.easy = [];
  178. self.triggers.combine = [];
  179. self.triggers.spawn = [];
  180. self.triggers.finish = [];
  181. self.triggers.mainhard = [];
  182. self.time = spawnStruct();
  183. self.time.start = 0;
  184. self.time.end = 0;
  185. self.time = calculateTimes(self.time);
  186. self.usedRocket = false;
  187. self.hudsOpen = false;
  188. }
  189.  
  190. //Check if used Rocketlaucher
  191. rocketCheck() {
  192. self endon("disconnect");
  193.  
  194. while (1) {
  195. if (!isDefined(self) || !IsAlive(self)) wait 0.05;
  196. wait 0.05;
  197.  
  198. if (self.triggers.spawn.size == 0)
  199. continue;
  200. if (self GetCurrentWeapon() == "rpg_mp" && self AttackButtonPressed() && self.usedRocket == false) {
  201. self.usedRocket = true;
  202. }
  203. }
  204. }
  205.  
  206. //inits Trigger
  207. initTriggers() {
  208. level.triggers = spawnStruct();
  209.  
  210. level.triggers.spawn = [];
  211. for (i = 0; i < 1024; i++) {
  212. ent = getEnt("spawn" + i, "targetname");
  213. if (!isDefined(ent))continue;
  214. // iprintlnbold("^2[DEBUG] ^3 Found trigger spawn " + i);
  215. level.triggers.spawn[level.triggers.spawn.size] = ent;
  216. }
  217.  
  218. level.triggers.easy = [];
  219. for (i = 0; i < 1024; i++) {
  220. ent = getEnt("easy" + i, "targetname");
  221. if (!isDefined(ent))continue;
  222. // iprintlnbold("^2[DEBUG] ^3 Found trigger easy " + i);
  223. level.triggers.easy[level.triggers.easy.size] = ent;
  224. }
  225.  
  226. level.triggers.combine = [];
  227. for (i = 0; i < 1024; i++) {
  228. ent = getEnt("combine" + i, "targetname");
  229. if (!isDefined(ent))continue;
  230. // iprintlnbold("^2[DEBUG] ^3 Found trigger combine " + i);
  231. level.triggers.combine[level.triggers.combine.size] = ent;
  232. }
  233.  
  234. level.triggers.hard = [];
  235. for (i = 0; i < 1024; i++) {
  236. ent = getEnt("hard" + i, "targetname");
  237. if (!isDefined(ent))continue;
  238. // iprintlnbold("^2[DEBUG] ^3 Found trigger hard " + i);
  239. level.triggers.hard[level.triggers.hard.size] = ent;
  240. }
  241.  
  242. level.triggers.mainhard = [];
  243. for (i = 0; i < 1024; i++) {
  244. ent = getEnt("mainhard" + i, "targetname");
  245. if (!isDefined(ent))continue;
  246. // iprintlnbold("^2[DEBUG] ^3 Found trigger mainhard " + i);
  247. level.triggers.mainhard[level.triggers.mainhard.size] = ent;
  248. }
  249.  
  250. level.triggers.finish = [];
  251. finishNames = [];
  252. finishNames[0] = "easyfin";
  253. finishNames[1] = "hardfin";
  254. finishNames[2] = "mainfin";
  255. for (j = 0; j < finishNames.size; j++) {
  256. ent = getEnt(finishNames[j], "targetname");
  257. if (!isDefined(ent))continue;
  258. //iprintlnbold("^2[DEBUG] ^3 Found trigger finish " + finishNames[j]);
  259. level.triggers.finish[level.triggers.finish.size] = ent;
  260. }
  261.  
  262. level.scores = spawnStruct();
  263. level.scores.easy = [];
  264. level.scores.hard = [];
  265. level.scores.mainhard = [];
  266. level.scores.rocket_easy = [];
  267. level.scores.rocket_hard = [];
  268. level.scores.rocket_mainhard = [];
  269. }
  270.  
  271. //is Touching
  272. testTouching() {
  273. self endon("disconnect");
  274. self endon("run_finished");
  275.  
  276. while (1) {
  277. for (i = 0; i < level.triggers.spawn.size; i++) {
  278. if (isDefined(level.triggers.spawn[i]) && self isTouching(level.triggers.spawn[i]) && self IsOnGround() && self.sessionstate == "playing") {
  279. self initTriggerForPlayer();
  280. //self iprintln("^1[DEBUG] ^2Touching Spawn " + i);
  281. self.triggers.spawn[i] = 1;
  282. self.time.start = getTime();
  283. }
  284. }
  285.  
  286. if (self.triggers.spawn.size == 0) {
  287. wait 0.05;
  288. continue;
  289. }
  290.  
  291. for (i = 0; i < level.triggers.hard.size; i++) {
  292. if (isDefined(level.triggers.hard[i]) && self isTouching(level.triggers.hard[i]) && self.sessionstate == "playing") {
  293. self.triggers.hard[i] = 1;
  294. //self iprintln("^1[DEBUG] ^2Touching Hard " + i);
  295. }
  296. }
  297. for (i = 0; i < level.triggers.combine.size; i++) {
  298. if (isDefined(level.triggers.combine[i]) && self isTouching(level.triggers.combine[i]) && self.sessionstate == "playing") {
  299. //self iprintln("^1[DEBUG] ^2Touching Combine " + i);
  300. self.triggers.combine[i] = 1;
  301. }
  302. }
  303. for (i = 0; i < level.triggers.easy.size; i++) {
  304. if (isDefined(level.triggers.easy[i]) && self isTouching(level.triggers.easy[i]) && self.sessionstate == "playing") {
  305. //self iprintln("^1[DEBUG] ^2Touching Easy " + i);
  306. self.triggers.easy[i] = 1;
  307. }
  308. }
  309.  
  310. for (i = 0; i < level.triggers.mainhard.size; i++) {
  311. if (isDefined(level.triggers.mainhard[i]) && self isTouching(level.triggers.mainhard[i]) && self.sessionstate == "playing") {
  312. //self iprintln("^1[DEBUG] ^2Touching mainhard " + i);
  313. self.triggers.mainhard[i] = 1;
  314. }
  315. }
  316. wait 0.05;
  317. }
  318. }
  319.  
  320. //Check if finished
  321. checkForFinish() {
  322. self endon("disconnect");
  323.  
  324. finishway = "";
  325.  
  326. if (self.triggers.mainhard.size == level.triggers.mainhard.size) {
  327. if (!self.usedRocket)
  328. finishway = "mainhard";
  329. else
  330. finishway = "rocket_mainhard";
  331. } else if (self.triggers.hard.size + self.triggers.combine.size == level.triggers.hard.size + level.triggers.combine.size && self.triggers.easy.size == 0) {
  332. if (!self.usedRocket)
  333. finishway = "hard";
  334. else
  335. finishway = "rocket_hard";
  336. } else if (self.triggers.easy.size + self.triggers.combine.size == level.triggers.easy.size + level.triggers.combine.size && self.triggers.hard.size == 0) {
  337. if (!self.usedRocket)
  338. finishway = "easy";
  339. else
  340. finishway = "rocket_easy";
  341. } else if (self.triggers.combine.size == level.triggers.combine.size && self.triggers.easy.size > 0 && self.triggers.hard.size > 0) {
  342. if (isDefined(self.triggers.hard[level.triggers.hard.size - 1]) && self.triggers.hard[level.triggers.hard.size - 1] == 1) {
  343. if (!self.usedRocket)
  344. finishway = "combine_hard";
  345. else
  346. finishway = "rocket_combine_hard";
  347. } else if (isDefined(self.triggers.easy[level.triggers.easy.size - 1]) && self.triggers.easy[level.triggers.easy.size - 1] == 1) {
  348. if (!self.usedRocket)
  349. finishway = "combine_easy";
  350. else
  351. finishway = "rocket_combine_easy";
  352. }
  353. }
  354.  
  355. if (finishway == "")
  356. return false;
  357.  
  358. self finishmsg(finishway);
  359.  
  360. if (finishway == "combine_hard" || finishway == "rocket_combine_hard" || finishway == "combine_easy" || finishway == "rocket_combine_easy")
  361. return true;
  362.  
  363. self addScore(finishway);
  364. self rankmsg(finishway);
  365. allplayers = getentarray("player","classname");
  366. for (i = 0; i < allplayers.size; i++){
  367. allplayers[i] thread checkforFirst();
  368. }
  369. return true;
  370. }
  371.  
  372. //Print out what time and way u did after finish speedrun
  373. finishmsg(waymsg) {
  374.  
  375. self.time calculateTimes(self.time);
  376. msg_way = "";
  377. msg_way_rpg = "";
  378. msg_combine = "";
  379.  
  380. switch (waymsg) {
  381. case "mainhard":
  382. msg_way = "^1Classic Hard^3";
  383. msg_way_rpg = "^2norpg run^3";
  384. msg_combine = "";
  385. break;
  386. case "rocket_mainhard":
  387. msg_way = "^1Classic Hard^3";
  388. msg_way_rpg = "^1rpg run^3";
  389. msg_combine = "";
  390. break;
  391. case "hard":
  392. msg_way = "^4Combine Hard^3";
  393. msg_way_rpg = "^2norpg run^3";
  394. msg_combine = "^3He used ^2only Hard ^3jumps";
  395. break;
  396. case "rocket_hard":
  397. msg_way = "^4Combine Hard^3";
  398. msg_way_rpg = "^1rpg run^3";
  399. msg_combine = "^3He used ^2only Hard ^3jumps";
  400. break;
  401. case "easy":
  402. msg_way = "^5Easy/Inter^3";
  403. msg_way_rpg = "^2norpg run^3";
  404. msg_combine = "^3He used ^2only Easy/Inter ^3jumps";
  405. break;
  406. case "rocket_easy":
  407. msg_way = "^5Easy/Inter^3";
  408. msg_way_rpg = "^1rpg run^3";
  409. msg_combine = "^3He used ^2only Easy/Inter ^3jumps";
  410. break;
  411. case "combine_hard":
  412. msg_way = "^4Combine Hard^3";
  413. msg_way_rpg = "^2norpg run^3";
  414. msg_combine = "^3He used ^1Hard & Easy/Inter ^3jumps";
  415. break;
  416. case "rocket_combine_hard":
  417. msg_way = "^4Combine Hard^3";
  418. msg_way_rpg = "^1rpg run^3";
  419. msg_combine = "^3He used ^1Hard & Easy/Inter ^3jumps";
  420. break;
  421. case "combine_easy":
  422. msg_way = "^5Easy/Inter^3";
  423. msg_way_rpg = "^2norpg run^3";
  424. msg_combine = "^3He used ^1Hard & Easy/Inter ^3jumps";
  425. break;
  426. case "rocket_combine_easy":
  427. msg_way = "^5Easy^3";
  428. msg_way_rpg = "^1rpg run^3";
  429. msg_combine = "^3He used ^1Hard & Easy/Inter ^3jumps";
  430. break;
  431. }
  432.  
  433. iprintlnbold("^2" + self.name + "^3 finished a " + msg_way_rpg + " in " + msg_way + " in^2 " + self.time.min + ":" + self.time.sec);
  434. iprintlnbold(msg_combine);
  435.  
  436. }
  437.  
  438. //Print out which rank you reached after finish speedrun
  439. rankMsg(way) {
  440. switch (way) {
  441. case "easy":
  442. score = level.scores.easy;
  443. finname = "norpg Easy/Inter";
  444. break;
  445. case "rocket_easy":
  446. score = level.scores.rocket_easy;
  447. finname = "rpg Easy/Inter";
  448. break;
  449. case "hard":
  450. score = level.scores.hard;
  451. finname = "norpg Combined";
  452. break;
  453. case "rocket_hard":
  454. score = level.scores.rocket_hard;
  455. finname = "rpg Combined";
  456. break;
  457. case "mainhard":
  458. score = level.scores.mainhard;
  459. finname = "norpg Classic";
  460. break;
  461. case "rocket_mainhard":
  462. score = level.scores.rocket_mainhard;
  463. finname = "rpg Classic";
  464. break;
  465. default:
  466. score = [];
  467. finname = "";
  468. return;
  469. }
  470.  
  471. reachedrank = "";
  472.  
  473. for (i = 0; i < 6; i++) {
  474. if (!isDefined(score[i])) {
  475. break;
  476. };
  477.  
  478. if (score[i]["guid"] == self getGuid() && score[i]["time"].diff == self.time.diff) {
  479. reachedrank = "^2" + self.name + "^7 reached ^2" + (i + 1) + "^7. Place in " + finname;
  480. break;
  481. } else {
  482. reachedrank = "^2" + self.name + "^7 is still^2 " + (i + 1) + "^7. Place in " + finname;
  483. break;
  484. }
  485. }
  486. iPrintLnBold(reachedrank);
  487. }
  488.  
  489. //check if first in Way and change model/activate trail
  490. checkforFirst() {
  491. score = level.scores.mainhard;
  492. score1 = level.scores.hard;
  493. score2 = level.scores.easy;
  494.  
  495. if (isDefined(score[0]) && score[0]["guid"] == self getguid()) {
  496. self iPrintLn("^2You have been set to SONIC");
  497. self thread changePlayermodel("sonic");
  498. self thread drawTrail("sonic");
  499. }
  500. else if (isDefined(score1[0]) && score1[0]["guid"] == self getguid()) {
  501. self iPrintLn("^2You have been set to SHADOW");
  502. self thread changePlayermodel("shadow");
  503. self thread drawTrail("shadow");
  504. }
  505. else if (isDefined(score2[0]) && score2[0]["guid"] == self getguid()) {
  506. self iPrintLn("^2You have been set to RATCHET");
  507. self thread changePlayermodel("ratchet");
  508. self thread drawTrail("ratchet");
  509. }
  510. }
  511.  
  512. //Activate Trail for First place
  513. drawTrail(modelname) {
  514. self endon("disconnect");
  515. self endon("joined_spectators");
  516.  
  517. switch (modelname) {
  518. case "sonic":
  519. self.effectnamelow = level._effect["sonic_trail_low"];
  520. self.effectnamemed = level._effect["sonic_trail_med"];
  521. self.effectnamehigh = level._effect["sonic_trail_high"];
  522. break;
  523. case "shadow":
  524. self.effectnamelow = level._effect["shadow_trail_low"];
  525. self.effectnamemed = level._effect["shadow_trail_med"];
  526. self.effectnamehigh = level._effect["shadow_trail_high"];
  527. break;
  528. case "ratchet":
  529. self.effectnamelow = level._effect["ratchet_trail_low"];
  530. self.effectnamemed = level._effect["ratchet_trail_med"];
  531. self.effectnamehigh = level._effect["ratchet_trail_high"];
  532. break;
  533. default:
  534. self.effectnamelow = "";
  535. self.effectnamemed = "";
  536. self.effectnamehigh = "";
  537. break;
  538. }
  539.  
  540. if (!self.trailon) {
  541. self.trailon = true;
  542. while (self isFirstInScoreList()) {
  543.  
  544. ursprungA = self.origin;
  545. wait 0.05;
  546. origin = self.origin;
  547.  
  548. angles = origin - ursprungA;
  549.  
  550. if (angles[0] == 0 && angles[1] == 0) continue;
  551.  
  552. clientVelocity = Int(Length(self GetVelocity()));
  553. if (clientVelocity > 130 && clientVelocity <= 240)
  554. effectname = self.effectnamelow;
  555. else if (clientVelocity > 240 && clientVelocity <= 500)
  556. effectname = self.effectnamemed;
  557. else if (clientVelocity > 500)
  558. effectname = self.effectnamehigh;
  559. else{
  560. continue;
  561. }
  562.  
  563. PlayFX(effectname, origin + (0, 0, 20), angles, angles + (0, 0, 1));
  564. }
  565. self.trailon = false;
  566. }
  567. }
  568.  
  569. //Checks self Got besttime
  570. isFirstInScoreList() {
  571.  
  572. score = level.scores.mainhard;
  573. score1 = level.scores.hard;
  574. score2 = level.scores.easy;
  575.  
  576. if (isDefined(score) && isDefined(score[0]) && score[0]["guid"] == self getGuid()) {
  577. return true;
  578. } else if (isDefined(score1) && isDefined(score1[0]) && score1[0]["guid"] == self getGuid()) {
  579. return true;
  580. } else if (isDefined(score2) && isDefined(score2[0]) && score2[0]["guid"] == self getGuid()) {
  581. return true;
  582. } else {
  583. return false;
  584. }
  585. }
  586.  
  587. //Checks if String strats with
  588. startsWith(string, pattern) {
  589. if (string == pattern)
  590. return true;
  591. if (pattern.size > string.size)
  592. return false;
  593.  
  594. for (index = 0; index < pattern.size; index++) {
  595. if (string[index] != pattern[index])
  596. return false;
  597. }
  598.  
  599. return true;
  600. }
  601.  
  602. //Detaches Head Model (So u can Change Bodymodel(alternativ to detachall()))
  603. detachHead() {
  604. self endon ("joined_spectators");
  605.  
  606. count = self getattachsize();
  607. for (index = 0; index < count; index++) {
  608. head = self getattachmodelname(index);
  609.  
  610. if (startsWith(head, "head")) {
  611. self detach(head);
  612. break;
  613. }
  614. }
  615. }
  616.  
  617. //Changes Playermodel
  618. changePlayermodel(modelname) {
  619. self endon("disconnect");
  620. self endon("joined_spectators");
  621.  
  622. self detachHead();
  623. self SetModel(modelname);
  624.  
  625. if (!self.ismodel) {
  626. self.ismodel = true;
  627. while (self isFirstInScoreList()) {
  628. wait 1;
  629. }
  630. self setModel("body_mp_usmc_specops");
  631. self attach("head_mp_usmc_tactical_mich_stripes_nomex", "", true);
  632. self.ismodel = false;
  633. }
  634. }
  635.  
  636. //Adds FinishtimeScore to Array
  637. addScore(way) {
  638. self endon("disconnect");
  639.  
  640. score = [];
  641. score["name"] = self.name;
  642. score["time"] = self.time;
  643. score["guid"] = self getGuid();
  644.  
  645. switch (way) {
  646. case "easy":
  647. level.scores.easy[level.scores.easy.size] = score;
  648. level.scores.easy = optimizedBubbleSort(level.scores.easy);
  649. break;
  650. case "rocket_easy":
  651. level.scores.rocket_easy[level.scores.rocket_easy.size] = score;
  652. level.scores.rocket_easy = optimizedBubbleSort(level.scores.rocket_easy);
  653. break;
  654. case "hard":
  655. level.scores.hard[level.scores.hard.size] = score;
  656. level.scores.hard = optimizedBubbleSort(level.scores.hard);
  657. break;
  658. case "rocket_hard":
  659. level.scores.rocket_hard[level.scores.rocket_hard.size] = score;
  660. level.scores.rocket_hard = optimizedBubbleSort(level.scores.rocket_hard);
  661. break;
  662. case "mainhard":
  663. level.scores.mainhard[level.scores.mainhard.size] = score;
  664. level.scores.mainhard = optimizedBubbleSort(level.scores.mainhard);
  665. break;
  666. case "rocket_mainhard":
  667. level.scores.rocket_mainhard[level.scores.rocket_mainhard.size] = score;
  668. level.scores.rocket_mainhard = optimizedBubbleSort(level.scores.rocket_mainhard);
  669. break;
  670. }
  671. }
  672.  
  673. //Sorting Array (Finish times in this case)
  674. optimizedBubbleSort(a) {
  675. n = a.size;
  676. temp = 0;
  677. j = 0;
  678. bound = n - 1;
  679. for (i = 0; i <= n - 2; i++) {
  680. for (j = 0; j < bound; j++) {
  681. if (a[j]["time"].diff > a[j + 1]["time"].diff) {
  682. temp = a[j];
  683. a[j] = a[j + 1];
  684. a[j + 1] = temp;
  685. }
  686. }
  687. bound = j - 1;
  688. }
  689. return a;
  690. }
  691.  
  692. //Calculates Time from milliseconds in hours:minutes:millisecons
  693. calculateTimes(time) {
  694. time.diff = time.end - time.start;
  695. time.min = int(time.diff / 1000 / 60);
  696. time.sec = int((time.diff - time.min * 60 * 1000) / 1000);
  697. time.msec = int((time.diff - (time.min * 60 * 1000) - (time.sec * 1000)));
  698. return time;
  699. }
  700.  
  701. //Eases Up Creation of Hudelements
  702. spawnClientHud(x, y) {
  703. hud = newClientHudElem(self);
  704. hud.alignX = "center";
  705. hud.alignY = "top";
  706. hud.horzAlign = "center";
  707. hud.vertAlign = "top";
  708. hud.hideWhenInMenu = true;
  709. hud.x = x;
  710. hud.y = y; //424
  711. hud.alpha = 1;
  712. hud.fontScale = 1.4;
  713.  
  714. return hud;
  715. }
  716.  
  717. //Creates Finish Scoreboard Hud
  718. doHudWay(way, ent) {
  719. self endon("disconnect");
  720.  
  721. //Dirty bugfix to avoid double trigger events in the same frame
  722. self.time.end = getTime();
  723. finished = self checkforFinish();
  724. if (finished) {
  725. self notify("run_finished");
  726. }
  727.  
  728. wait 0.1;
  729.  
  730. switch (way) {
  731. case "easy":
  732. case "rocket_easy":
  733. score = level.scores.easy;
  734. score1 = level.scores.rocket_easy;
  735. finname = 0;
  736. break;
  737. case "hard":
  738. case "rocket_hard":
  739. score = level.scores.hard;
  740. score1 = level.scores.rocket_hard;
  741. finname = 1;
  742. break;
  743. case "mainhard":
  744. case "rocket_mainhard":
  745. score = level.scores.mainhard;
  746. score1 = level.scores.rocket_mainhard;
  747. finname = 2;
  748. break;
  749. default:
  750. score = [];
  751. score1 = [];
  752. finname = 3;
  753. break;
  754. }
  755.  
  756. finishhuds = [];
  757.  
  758. wait 1;
  759.  
  760. finish_bg = self spawnClientHud(0, 570);
  761. finish_bg SetShader("vote_bg", 437, 250);
  762. finish_bg slideHud(.4, 0, -400);
  763.  
  764. wait .2;
  765.  
  766. finish_stange = self spawnClientHud(627, 210);
  767. finish_stange SetShader("vote_stange", 255, 170);
  768. finish_stange slideHud(.2, -300, 0);
  769.  
  770. finish_stange_left = self spawnClientHud(-628, 210);
  771. finish_stange_left SetShader("vote_stange_left", 255, 170);
  772. finish_stange_left slideHud(.2, 300, 0);
  773.  
  774. wait .2;
  775.  
  776. finish = self spawnClientHud(125, 250);
  777. finish.color = (0, 0, 0);
  778. finish.font = "default";
  779. finish setText("Top 6 of " + score.size + " runs");
  780.  
  781. finishrpg = self spawnClientHud(-125, 250);
  782. finishrpg.color = (0, 0, 0);
  783. finishrpg.font = "default";
  784. finishrpg setText("Top 6 of " + score1.size + " runs");
  785.  
  786. finishname = self spawnClientHud(0, 190);
  787. if (finname == 0) {
  788. finishname SetShader("votetext_easy", 225, 52);
  789. } else if (finname == 1) {
  790. finishname SetShader("votetext_combined", 225, 52);
  791. } else if (finname == 2) {
  792. finishname SetShader("votetext_classic", 225, 52);
  793. }
  794.  
  795. finishhuds[finishhuds.size] = finish_stange;
  796. finishhuds[finishhuds.size] = finish_stange_left;
  797. finishhuds[finishhuds.size] = finish_bg;
  798. finishhuds[finishhuds.size] = finish;
  799. finishhuds[finishhuds.size] = finishrpg;
  800. finishhuds[finishhuds.size] = finishname;
  801.  
  802. finish_stats = self spawnClientHud(125, 270);
  803. finish_stats.color = (0, 0, 0);
  804. finish_stats.font = "default";
  805.  
  806. text = "";
  807. for (i = 0; i < 6; i++) { //i = number of textlines
  808. if (!isDefined(score[i])) {
  809. break;
  810. }
  811.  
  812. if (score[i]["guid"] == self getGuid() && score[i]["time"].diff == self.time.diff) {
  813.  
  814. text += "^2" + (i + 1) + ". " + score[i]["time"].min + ":" + score[i]["time"].sec + ":" + score[i]["time"].msec + " by " + score[i]["name"] + "^0";
  815. } else
  816. text += (i + 1) + ". " + score[i]["time"].min + ":" + score[i]["time"].sec + ":" + score[i]["time"].msec + " by " + score[i]["name"];
  817. if (i < 5) text += "\n";
  818. }
  819.  
  820. finish_stats setText(text);
  821. finishhuds[finishhuds.size] = finish_stats;
  822.  
  823. finish_stats_left = self spawnClientHud(-125, 270);
  824. finish_stats_left.color = (0, 0, 0);
  825. finish_stats_left.font = "default";
  826.  
  827. text = "";
  828. for (i = 0; i < 6; i++) { //i = number of textlines
  829. if (!isDefined(score1[i])) {
  830. break;
  831. }
  832.  
  833. if (score1[i]["guid"] == self getGuid() && score1[i]["time"].diff == self.time.diff)
  834. text += "^2" + (i + 1) + ". " + score1[i]["time"].min + ":" + score1[i]["time"].sec + ":" + score1[i]["time"].msec + " by " + score1[i]["name"] + "^0";
  835. else
  836. text += (i + 1) + ". " + score1[i]["time"].min + ":" + score1[i]["time"].sec + ":" + score1[i]["time"].msec + " by " + score1[i]["name"];
  837. if (i < 5) text += "\n";
  838. }
  839.  
  840. finish_stats_left setText(text);
  841. finishhuds[finishhuds.size] = finish_stats_left;
  842.  
  843. while (1) {
  844. wait 0.05;
  845.  
  846. if (!self isTouching(ent)) {
  847. self RemoveHuds(finishhuds);
  848. self initTriggerForPlayer();
  849. self thread testTouching();
  850. self.hudsOpen = false;
  851. break;
  852. }
  853. }
  854. }
  855.  
  856. //Removes Finish Scoreboard Hud
  857. RemoveHuds(huds) {
  858. self endon("disconnect");
  859.  
  860. if (!isDefined(huds))
  861. return;
  862.  
  863. for (i = 0; i < huds.size; i++) {
  864. if (!isDefined(huds[i])) continue;
  865.  
  866. if (i != 0 && i != 1 && i != 2) {
  867. huds[i] destroy();
  868. } else if (i == 0) {
  869. huds[i] slideHud(.2, 300, 0);
  870. } else if (i == 1) {
  871. huds[i] slideHud(.2, -300, 0);
  872. } else if (i == 2) {
  873. huds[i] slideHud(.4, 0, 400);
  874. }
  875. }
  876.  
  877. wait 0.4;
  878. for (i = 0; i < 4; i++) {
  879. if (isDefined(huds[i]))
  880. huds[i] destroy();
  881. }
  882. }
  883.  
  884. //Slides Hud Elements
  885. slideHud(time, xmove, ymove) {
  886. if (isDefined(self)) {
  887. self MoveOverTime(time);
  888. self.y += ymove;
  889. self.x += xmove;
  890. }
  891. }
  892.  
  893. //-------------------------------------------------------------------------------------------
  894. //---FINISH-TRIGGER--------------------------------------------------------------------------
  895. //-------------------------------------------------------------------------------------------
  896.  
  897. easyFinTrigger() {
  898. ent = getEnt("easyfin", "targetname");
  899. if (!isDefined(ent)) return;
  900. while (1) {
  901. ent waittill("trigger", player);
  902. if (!player IsOnGround() || player.hudsOpen) continue;
  903. player thread doHudWay("easy", ent);
  904. player.hudsOpen = true;
  905. }
  906. }
  907.  
  908. hardFinTrigger() {
  909. ent = getEnt("hardfin", "targetname");
  910. if (!isDefined(ent)) return;
  911. while (1) {
  912. ent waittill("trigger", player);
  913. if (!player IsOnGround() || player.hudsOpen) continue;
  914. player thread doHudWay("hard", ent);
  915. player.hudsOpen = true;
  916. }
  917. }
  918.  
  919. mainhardFinTrigger() {
  920. ent = getEnt("mainfin", "targetname");
  921. if (!isDefined(ent)) return;
  922. while (1) {
  923. ent waittill("trigger", player);
  924. if (!player IsOnGround() || player.hudsOpen) continue;
  925. player thread doHudWay("mainhard", ent);
  926. player.hudsOpen = true;
  927. }
  928. }
  929.  
  930. //-------------------------------------------------------------------------------------------
  931. //---TELEPORT--------------------------------------------------------------------------------
  932. //-------------------------------------------------------------------------------------------
  933.  
  934. setupSpawnTeleports(count, pos, angle) {
  935. for (i = 0; i < count; i++) {
  936. thread teleport("spawntp" + i, pos, angle);
  937. }
  938. }
  939.  
  940. teleport(triggername, pos, angle) {
  941. ent = getent(triggername, "targetname");
  942. if (!isDefined(ent)) return;
  943.  
  944. while (1) {
  945. ent waittill("trigger", player);
  946.  
  947. if (player.sessionstate != "playing")
  948. continue;
  949.  
  950. player SetOrigin(pos);
  951. player setPlayerAngles(angle);
  952. }
  953. }
  954.  
  955. //-------------------------------------------------------------------------------------------
  956. //---MAPPER-CHECK----------------------------------------------------------------------------
  957. //-------------------------------------------------------------------------------------------
  958.  
  959. changePlayermodelVIP(){
  960. if (self isVip(self getGuid()) == "varta" || self isVip(self getGuid()) == "viruz"){
  961. self detachHead();
  962. self SetModel("body_complete_mp_price_woodland");
  963. }
  964. /*else if (self isVip(self getGuid()) == "drizz"){
  965. self detachHead();
  966. self SetModel("body_complete_mp_russian_farmer");
  967. }*/
  968. }
  969.  
  970. isVip(guid){
  971. if(self shortGuid(guid) == "959303ec")
  972. return "varta";
  973. else if (self shortGuid(guid) == "95b5e8d3")
  974. return "viruz";
  975. else if (self shortGuid(guid) == "7daf0d52")
  976. return "drizz";
  977. else
  978. return "false";
  979. }
  980.  
  981. shortGuid(guid){
  982. return getSubstr(guid, 24, 32);
  983. }
  984.  
  985. //-------------------------------------------------------------------------------------------
  986. //---SPAWN-FX-WITH-ANGLES--------------------------------------------------------------------
  987. //-------------------------------------------------------------------------------------------
  988.  
  989. playCustomFX(fxid, origin, angle, delay)
  990. {
  991. wait 0.05;
  992. if(delay > 0) wait delay;
  993.  
  994. up = AnglesToUp(angle);
  995. forward = AnglesToForward(angle);
  996.  
  997. PlayFX(level._effect[fxid], origin, forward, up);
  998. }
  999.  
  1000. triggerCustomFX(fxid, origin, angle, delay)
  1001. {
  1002. wait 0.05;
  1003. if(delay > 0) wait delay;
  1004.  
  1005. up = AnglesToUp(angle);
  1006. forward = AnglesToForward(angle);
  1007.  
  1008. level.fx = SpawnFX(level._effect[fxid], origin, forward, up);
  1009. TriggerFX(level.fx);
  1010. }
  1011.  
  1012. //-------------------------------------------------------------------------------------------
  1013. //---TEXT-MSG--------------------------------------------------------------------------------
  1014. //-------------------------------------------------------------------------------------------
  1015.  
  1016. vipMsg(){
  1017. wait 5;
  1018. if (self isVip(self getGuid()) == "varta")
  1019. iPrintLnBold("The Creator of descent_v1 & descent_v2^2 =.VaRtaZiaN.= ^7has joined");
  1020. else if (self isVip(self getGuid()) == "viruz")
  1021. iPrintLnBold("The Creator of descent_v3 ^2Viruz ^7has joined");
  1022. }
  1023.  
  1024. setupMsg() {
  1025. self.msg = [];
  1026. self.msg[0] = "^2" + self.name + " ^7is so nice and good looking!";
  1027. self.msg[1] = "Map by ^53xP' ^7Viruz!";
  1028. self.msg[2] = "Thanks to ^2-.VaRtaZiaN.- ^7for letting me continue his great mapseries!";
  1029. self.msg[3] = "Thanks to ^2Fr33g !t^7,^2 ZeeZ^7 & ^2Noob^7!";
  1030. self.msg[4] = "u do ^2hax, ^7i got much proof, omgee!";
  1031. self.msg[5] = "^2Drizzjeh ^7sucking much dickerinos!";
  1032. self.msg[6] = "^2" + self.name + " ^7landed ^1Classic Hard ^7Roof";
  1033. self.msg[7] = "^2" + self.name + " ^7landed ^4Combined Hard ^7Roof";
  1034. self.msg[8] = "^2" + self.name + " ^7landed ^5Easy/Inter ^7Roof";
  1035. }
  1036.  
  1037. setupmsgTriggers()
  1038. {
  1039. thread msg("mainhardroof", 6);
  1040. thread msg("hardroof", 7);
  1041. thread msg("easyroof", 8);
  1042.  
  1043. for (i = 0; i < 9; i++) {
  1044. thread msg("mainhardmsg" + (i+1), i);
  1045. thread msg("hardmsg" + (i+1), i);
  1046. thread msg("easymsg" + (i+1), i);
  1047. }
  1048. }
  1049.  
  1050. msg(triggername, msgnumber) {
  1051. ent = getent(triggername, "targetname");
  1052. if (!isDefined(ent)) return;
  1053. while (1) {
  1054. ent waittill("trigger", player);
  1055. if (player.sessionstate != "playing")
  1056. continue;
  1057.  
  1058. player setupMsg();
  1059. iPrintLnBold(player.msg[msgnumber]); //INSERT TEXT HERE
  1060. wait 5;
  1061. }
  1062. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement