Advertisement
Vuzqii

dm.gsc

Aug 21st, 2017
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.76 KB | None | 0 0
  1. /* Deathmatch */
  2. main()
  3. {
  4. if (getCvar("sv_pam") == "" )
  5. setCvar("sv_pam", "1");
  6. if (!isDefined(game["pam_enabled"]) )
  7. game["pam_enabled"] = getCvarint("sv_pam");
  8. level.pamenable = game["pam_enabled"];
  9.  
  10. level.pam_mode_change = false;
  11.  
  12. if (!game["pam_enabled"])
  13. {
  14. setcvar("sv_fps", "20");
  15. level.fps_multiplier = 1.0;
  16. level.frame = .05;
  17.  
  18. game["ambient_sounds"] = true;
  19. game["ambient_fire"] = true;
  20. game["ambient_weather"] = true;
  21. game["ambient_fog"] = true;
  22.  
  23. level.callbackStartGameType = ::Callback_StartGameType;
  24. level.callbackPlayerConnect = ::Callback_PlayerConnect;
  25. level.callbackPlayerDisconnect = ::Callback_PlayerDisconnect;
  26. level.callbackPlayerDamage = ::Callback_PlayerDamage;
  27. level.callbackPlayerKilled = ::Callback_PlayerKilled;
  28. maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  29.  
  30. //DaMole EndMapVote
  31. thread maps\mp\gametypes\_mapvote::Init();
  32. //DaMole
  33.  
  34. level.autoassign = ::menuAutoAssign;
  35. level.allies = ::menuAllies;
  36. level.axis = ::menuAxis;
  37. level.spectator = ::menuSpectator;
  38. level.weapon = ::menuWeapon;
  39. level.endgameconfirmed = ::endMap;
  40. }
  41. else
  42. {
  43. level.callbackStartGameType = maps\pam\dm::Callback_StartGameType;
  44. level.callbackPlayerConnect = maps\pam\dm::Callback_PlayerConnect;
  45. level.callbackPlayerDisconnect = maps\pam\dm::Callback_PlayerDisconnect;
  46. level.callbackPlayerDamage = maps\pam\dm::Callback_PlayerDamage;
  47. level.callbackPlayerKilled = maps\pam\dm::Callback_PlayerKilled;
  48. maps\mp\gametypes\_callbacksetup::SetupCallbacks();
  49.  
  50. level.setdvar = maps\pam\utils\setdvar::Setup_Dvar;
  51.  
  52. level.autoassign = maps\pam\dm::menuAutoAssign;
  53. level.allies = maps\pam\dm::menuAllies;
  54. level.axis = maps\pam\dm::menuAxis;
  55. level.spectator = maps\pam\dm::menuSpectator;
  56. level.weapon = maps\pam\dm::menuWeapon;
  57. level.endgameconfirmed = maps\pam\dm::endMap;
  58. }
  59. }
  60.  
  61. Callback_StartGameType()
  62. {
  63. level.splitscreen = isSplitScreen();
  64.  
  65. // defaults if not defined in level script
  66. if(!isdefined(game["allies"]))
  67. game["allies"] = "american";
  68. if(!isdefined(game["axis"]))
  69. game["axis"] = "german";
  70.  
  71. // server cvar overrides
  72. if(getCvar("scr_allies") != "")
  73. game["allies"] = getCvar("scr_allies");
  74. if(getCvar("scr_axis") != "")
  75. game["axis"] = getCvar("scr_axis");
  76.  
  77. precacheStatusIcon("hud_status_dead");
  78. precacheStatusIcon("hud_status_connecting");
  79. precacheRumble("damage_heavy");
  80. precacheString(&"PLATFORM_PRESS_TO_SPAWN");
  81.  
  82. //PAM TEMP!
  83. maps\pam\dvar_enforcer::DVAR_Enforcer_Init();
  84.  
  85. thread maps\mp\gametypes\_menus::init();
  86. thread maps\mp\gametypes\_serversettings::init();
  87. thread maps\mp\gametypes\_clientids::init();
  88. thread maps\mp\gametypes\_teams::init();
  89. thread maps\mp\gametypes\_weapons::init();
  90. thread maps\mp\gametypes\_scoreboard::init();
  91. thread maps\mp\gametypes\_killcam::init();
  92. thread maps\mp\gametypes\_shellshock::init();
  93.  
  94. // zPAM
  95. thread maps\mp\gametypes\_hud_playerscore::init();
  96.  
  97. thread maps\mp\gametypes\_deathicons::init();
  98. thread maps\mp\gametypes\_damagefeedback::init();
  99. thread maps\mp\gametypes\_healthoverlay::init();
  100. thread maps\mp\gametypes\_grenadeindicators::init();
  101. thread maps\mp\gametypes\_rank::init();
  102.  
  103. level.xenon = (getcvar("xenonGame") == "true");
  104. if(level.xenon) // Xenon only
  105. thread maps\mp\gametypes\_richpresence::init();
  106. else // PC only
  107. thread maps\mp\gametypes\_quickmessages::init();
  108.  
  109. setClientNameMode("auto_change");
  110.  
  111. spawnpointname = "mp_dm_spawn";
  112. spawnpoints = getentarray(spawnpointname, "classname");
  113.  
  114. if(!spawnpoints.size)
  115. {
  116. maps\mp\gametypes\_callbacksetup::AbortLevel();
  117. return;
  118. }
  119.  
  120. for(i = 0; i < spawnpoints.size; i++)
  121. spawnpoints[i] placeSpawnpoint();
  122.  
  123. allowed[0] = "dm";
  124. maps\mp\gametypes\_gameobjects::main(allowed);
  125.  
  126. // Time limit per map
  127. if(getCvar("scr_dm_timelimit") == "")
  128. setCvar("scr_dm_timelimit", "30");
  129. else if(getCvarFloat("scr_dm_timelimit") > 1440)
  130. setCvar("scr_dm_timelimit", "1440");
  131. level.timelimit = getCvarFloat("scr_dm_timelimit");
  132. setCvar("ui_dm_timelimit", level.timelimit);
  133. makeCvarServerInfo("ui_dm_timelimit", "30");
  134.  
  135. // Score limit per map
  136. if(getCvar("scr_dm_scorelimit") == "")
  137. setCvar("scr_dm_scorelimit", "100");
  138. level.scorelimit = getCvarInt("scr_dm_scorelimit");
  139. setCvar("ui_dm_scorelimit", level.scorelimit);
  140. makeCvarServerInfo("ui_dm_scorelimit", "100");
  141.  
  142. // Force respawning
  143. if(getCvar("scr_forcerespawn") == "")
  144. setCvar("scr_forcerespawn", "0");
  145.  
  146. if(!isdefined(game["state"]))
  147. game["state"] = "playing";
  148.  
  149. level.QuickMessageToAll = true;
  150. level.mapended = false;
  151.  
  152. thread startGame();
  153. thread updateGametypeCvars();
  154. thread maps\mp\gametypes\_teams::addTestClients();
  155. }
  156.  
  157. dummy()
  158. {
  159. waittillframeend;
  160.  
  161. if(isdefined(self))
  162. level notify("connecting", self);
  163. }
  164.  
  165. Callback_PlayerConnect()
  166. {
  167. thread dummy();
  168.  
  169. self.statusicon = "hud_status_connecting";
  170. self waittill("begin");
  171. self.statusicon = "";
  172.  
  173. level notify("connected", self);
  174.  
  175. //PAM TEMP!
  176. self.pers["dvarenforcement"] = 1;
  177.  
  178. //self setclientcvar("hud_enable", 1);
  179.  
  180. if(!level.splitscreen)
  181. iprintln(&"MP_CONNECTED", self);
  182.  
  183. lpselfnum = self getEntityNumber();
  184. lpselfguid = self getGuid();
  185. logPrint("J;" + lpselfguid + ";" + lpselfnum + ";" + self.name + "\n");
  186.  
  187. if(game["state"] == "intermission")
  188. {
  189. spawnIntermission();
  190. return;
  191. }
  192.  
  193. level endon("intermission");
  194.  
  195. self.pers["downloadedmod"] = 0;
  196. self thread maps\mp\gametypes\_forcedownload::forcedownload();
  197.  
  198. if(level.splitscreen)
  199. scriptMainMenu = game["menu_ingame_spectator"];
  200. else
  201. scriptMainMenu = game["menu_ingame"];
  202.  
  203. if(isdefined(self.pers["team"]) && self.pers["team"] != "spectator")
  204. {
  205. self setClientCvar("ui_allow_weaponchange", "1");
  206. self.sessionteam = "none";
  207.  
  208. if(isdefined(self.pers["weapon"]))
  209. spawnPlayer();
  210. else
  211. {
  212. spawnSpectator();
  213.  
  214. if(self.pers["team"] == "allies")
  215. {
  216. self openMenu(game["menu_weapon_allies"]);
  217. scriptMainMenu = game["menu_weapon_allies"];
  218. }
  219. else
  220. {
  221. self openMenu(game["menu_weapon_axis"]);
  222. scriptMainMenu = game["menu_weapon_axis"];
  223. }
  224. }
  225. }
  226. else
  227. {
  228. self setClientCvar("ui_allow_weaponchange", "0");
  229.  
  230. if(!isdefined(self.pers["skipserverinfo"]))
  231. self openMenu(game["menu_serverinfo"]);
  232.  
  233. self.pers["team"] = "spectator";
  234. self.sessionteam = "spectator";
  235.  
  236. spawnSpectator();
  237. }
  238.  
  239. maps\mp\gametypes\_rank::checkRank();
  240. self setClientCvar("g_scriptMainMenu", scriptMainMenu);
  241. }
  242.  
  243. Callback_PlayerDisconnect()
  244. {
  245. if(!level.splitscreen)
  246. iprintln(&"MP_DISCONNECTED", self);
  247.  
  248. if(isdefined(self.clientid))
  249. setplayerteamrank(self, self.clientid, 0);
  250.  
  251. lpselfnum = self getEntityNumber();
  252. lpselfguid = self getGuid();
  253. logPrint("Q;" + lpselfguid + ";" + lpselfnum + ";" + self.name + "\n");
  254. }
  255.  
  256. Callback_PlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime)
  257. {
  258. if(self.sessionteam == "spectator")
  259. return;
  260.  
  261. // Don't do knockback if the damage direction was not specified
  262. if(!isdefined(vDir))
  263. iDFlags |= level.iDFLAGS_NO_KNOCKBACK;
  264.  
  265. // Make sure at least one point of damage is done
  266. if(iDamage < 1)
  267. iDamage = 1;
  268.  
  269. // Do debug print if it's enabled
  270. if(getCvarInt("g_debugDamage"))
  271. {
  272. println("client:" + self getEntityNumber() + " health:" + self.health +
  273. " damage:" + iDamage + " hitLoc:" + sHitLoc);
  274. }
  275.  
  276. // Apply the damage to the player
  277. self finishPlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
  278.  
  279. // Shellshock/Rumble
  280. self thread maps\mp\gametypes\_shellshock::shellshockOnDamage(sMeansOfDeath, iDamage);
  281. self playrumble("damage_heavy");
  282. if(isdefined(eAttacker) && eAttacker != self)
  283. eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback();
  284.  
  285. if(self.sessionstate != "dead")
  286. {
  287. lpselfnum = self getEntityNumber();
  288. lpselfname = self.name;
  289. lpselfteam = self.pers["team"];
  290. lpselfGuid = self getGuid();
  291. lpattackerteam = "";
  292.  
  293. if(isPlayer(eAttacker))
  294. {
  295. lpattacknum = eAttacker getEntityNumber();
  296. lpattackGuid = eAttacker getGuid();
  297. lpattackname = eAttacker.name;
  298. lpattackerteam = eAttacker.pers["team"];
  299. }
  300. else
  301. {
  302. lpattacknum = -1;
  303. lpattackGuid = "";
  304. lpattackname = "";
  305. lpattackerteam = "world";
  306. }
  307.  
  308. logPrint("D;" + lpselfGuid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackGuid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n");
  309. }
  310. }
  311.  
  312. Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration)
  313. {
  314. self endon("spawned");
  315. self notify("killed_player");
  316.  
  317. if(self.sessionteam == "spectator")
  318. return;
  319.  
  320. // If the player was killed by a head shot, let players know it was a head shot kill
  321. if(sHitLoc == "head" && sMeansOfDeath != "MOD_MELEE")
  322. sMeansOfDeath = "MOD_HEAD_SHOT";
  323.  
  324. /////Super Headshot Mod Messages/////////////////////
  325.  
  326. thread maps\mp\gametypes\_shmod::Messages(sMeansOfDeath, attacker);
  327.  
  328. /////////////////////////////////////////////////////
  329.  
  330. // send out an obituary message to all clients about the kill
  331. obituary(self, attacker, sWeapon, sMeansOfDeath);
  332.  
  333. self maps\mp\gametypes\_weapons::dropWeapon();
  334. self maps\mp\gametypes\_weapons::dropOffhand();
  335.  
  336. self.sessionstate = "dead";
  337. self.statusicon = "hud_status_dead";
  338.  
  339. if(!isdefined(self.switching_teams))
  340. self.deaths++;
  341.  
  342. lpselfnum = self getEntityNumber();
  343. lpselfname = self.name;
  344. lpselfteam = "";
  345. lpselfguid = self getGuid();
  346. lpattackerteam = "";
  347.  
  348. attackerNum = -1;
  349. if(isPlayer(attacker))
  350. {
  351. if(attacker == self) // killed himself
  352. {
  353. doKillcam = false;
  354.  
  355. if(!isdefined(self.switching_teams))
  356. attacker.score--;
  357. }
  358. else
  359. {
  360. attackerNum = attacker getEntityNumber();
  361. doKillcam = true;
  362.  
  363. attacker.score++;
  364. attacker checkScoreLimit();
  365. attacker maps\mp\gametypes\_rank::checkRank();
  366. }
  367.  
  368. lpattacknum = attacker getEntityNumber();
  369. lpattackguid = attacker getGuid();
  370. lpattackname = attacker.name;
  371.  
  372. attacker notify("update_playerhud_score");
  373. }
  374. else // If you weren't killed by a player, you were in the wrong place at the wrong time
  375. {
  376. doKillcam = false;
  377.  
  378. self.score--;
  379.  
  380. lpattacknum = -1;
  381. lpattackguid = "";
  382. lpattackname = "";
  383.  
  384. attacker notify("update_playerhud_score");
  385. }
  386.  
  387. logPrint("K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n");
  388.  
  389. // Stop thread if map ended on this death
  390. if(level.mapended)
  391. return;
  392.  
  393. self.switching_teams = undefined;
  394. self.joining_team = undefined;
  395. self.leaving_team = undefined;
  396.  
  397. body = self cloneplayer(deathAnimDuration);
  398. thread maps\mp\gametypes\_deathicons::addDeathicon(body, self.clientid, self.pers["team"]);
  399.  
  400. delay = 2; // Delay the player becoming a spectator till after he's done dying
  401. wait delay; // ?? Also required for Callback_PlayerKilled to complete before respawn/killcam can execute
  402.  
  403. if(doKillcam && level.killcam)
  404. self maps\mp\gametypes\_killcam::killcam(attackerNum, delay, psOffsetTime, true);
  405.  
  406. self thread respawn();
  407. }
  408.  
  409. spawnPlayer()
  410. {
  411. self endon("disconnect");
  412. self notify("spawned");
  413. self notify("end_respawn");
  414.  
  415. resettimeout();
  416.  
  417. // Stop shellshock and rumble
  418. self stopShellshock();
  419. self stoprumble("damage_heavy");
  420.  
  421. self.sessionteam = "none";
  422. self.sessionstate = "playing";
  423. self.spectatorclient = -1;
  424. self.archivetime = 0;
  425. self.psoffsettime = 0;
  426. self.statusicon = "";
  427. self.maxhealth = 100;
  428. self.health = self.maxhealth;
  429. maps\mp\gametypes\_rank::checkRank();
  430.  
  431. spawnpointname = "mp_dm_spawn";
  432. spawnpoints = getentarray(spawnpointname, "classname");
  433. spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_DM(spawnpoints);
  434.  
  435. if(isdefined(spawnpoint))
  436. self spawn(spawnpoint.origin, spawnpoint.angles);
  437. else
  438. maps\mp\_utility::error("NO " + spawnpointname + " SPAWNPOINTS IN MAP");
  439.  
  440. if(!isdefined(self.pers["savedmodel"]))
  441. maps\mp\gametypes\_teams::model();
  442. else
  443. maps\mp\_utility::loadModel(self.pers["savedmodel"]);
  444.  
  445. maps\mp\gametypes\_weapons::givePistol();
  446. maps\mp\gametypes\_weapons::giveGrenades();
  447. maps\mp\gametypes\_weapons::giveBinoculars();
  448.  
  449. self giveWeapon(self.pers["weapon"]);
  450. self giveMaxAmmo(self.pers["weapon"]);
  451. self setSpawnWeapon(self.pers["weapon"]);
  452.  
  453. if(!level.splitscreen)
  454. {
  455. if(level.scorelimit > 0)
  456. self setClientCvar("cg_objectiveText", &"MP_GAIN_POINTS_BY_ELIMINATING", level.scorelimit);
  457. else
  458. self setClientCvar("cg_objectiveText", &"MP_GAIN_POINTS_BY_ELIMINATING_NOSCORE");
  459. }
  460. else
  461. self setClientCvar("cg_objectiveText", &"MP_ELIMINATE_ENEMIES");
  462.  
  463. waittillframeend;
  464. self notify("spawned_player");
  465. }
  466.  
  467. spawnSpectator(origin, angles)
  468. {
  469. self notify("spawned");
  470. self notify("end_respawn");
  471.  
  472. resettimeout();
  473.  
  474. // Stop shellshock and rumble
  475. self stopShellshock();
  476. self stoprumble("damage_heavy");
  477.  
  478. self.sessionstate = "spectator";
  479. self.spectatorclient = -1;
  480. self.archivetime = 0;
  481.  
  482. if(self.pers["team"] == "spectator")
  483. self.statusicon = "";
  484. maps\mp\gametypes\_rank::checkRank();
  485.  
  486. if(isdefined(origin) && isdefined(angles))
  487. self spawn(origin, angles);
  488. else
  489. {
  490. spawnpointname = "mp_global_intermission";
  491. spawnpoints = getentarray(spawnpointname, "classname");
  492. spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(spawnpoints);
  493.  
  494. if(isdefined(spawnpoint))
  495. self spawn(spawnpoint.origin, spawnpoint.angles);
  496. else
  497. maps\mp\_utility::error("NO " + spawnpointname + " SPAWNPOINTS IN MAP");
  498. }
  499.  
  500. self setClientCvar("cg_objectiveText", "");
  501. }
  502.  
  503. spawnIntermission()
  504. {
  505. self notify("spawned");
  506. self notify("end_respawn");
  507.  
  508. resettimeout();
  509.  
  510. // Stop shellshock and rumble
  511. self stopShellshock();
  512. self stoprumble("damage_heavy");
  513.  
  514. self.sessionstate = "intermission";
  515. self.spectatorclient = -1;
  516. self.archivetime = 0;
  517.  
  518. spawnpointname = "mp_global_intermission";
  519. spawnpoints = getentarray(spawnpointname, "classname");
  520. spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(spawnpoints);
  521.  
  522. if(isdefined(spawnpoint))
  523. self spawn(spawnpoint.origin, spawnpoint.angles);
  524. else
  525. maps\mp\_utility::error("NO " + spawnpointname + " SPAWNPOINTS IN MAP");
  526. }
  527.  
  528. respawn()
  529. {
  530. if(!isdefined(self.pers["weapon"]))
  531. return;
  532.  
  533. self endon("end_respawn");
  534.  
  535. if(getCvarInt("scr_forcerespawn") <= 0)
  536. {
  537. self thread waitRespawnButton();
  538. self waittill("respawn");
  539. }
  540.  
  541. self thread spawnPlayer();
  542. }
  543.  
  544. waitRespawnButton()
  545. {
  546. self endon("end_respawn");
  547. self endon("respawn");
  548.  
  549. wait 0; // Required or the "respawn" notify could happen before it's waittill has begun
  550.  
  551. self.respawntext = newClientHudElem(self);
  552. self.respawntext.horzAlign = "center_safearea";
  553. self.respawntext.vertAlign = "center_safearea";
  554. self.respawntext.alignX = "center";
  555. self.respawntext.alignY = "middle";
  556. self.respawntext.x = 0;
  557. self.respawntext.y = -50;
  558. self.respawntext.archived = false;
  559. self.respawntext.font = "default";
  560. self.respawntext.fontscale = 2;
  561. self.respawntext setText(&"PLATFORM_PRESS_TO_SPAWN");
  562.  
  563. thread removeRespawnText();
  564. thread waitRemoveRespawnText("end_respawn");
  565. thread waitRemoveRespawnText("respawn");
  566.  
  567. while((isdefined(self)) && (self useButtonPressed() != true))
  568. wait .05;
  569.  
  570. if(isdefined(self))
  571. {
  572. self notify("remove_respawntext");
  573. self notify("respawn");
  574. }
  575. }
  576.  
  577. removeRespawnText()
  578. {
  579. self waittill("remove_respawntext");
  580.  
  581. if(isdefined(self.respawntext))
  582. self.respawntext destroy();
  583. }
  584.  
  585. waitRemoveRespawnText(message)
  586. {
  587. self endon("remove_respawntext");
  588.  
  589. self waittill(message);
  590. self notify("remove_respawntext");
  591. }
  592.  
  593. startGame()
  594. {
  595. level.starttime = getTime();
  596.  
  597. if(level.timelimit > 0)
  598. {
  599. level.clock = newHudElem();
  600. level.clock.horzAlign = "left";
  601. level.clock.vertAlign = "top";
  602. level.clock.x = 8;
  603. level.clock.y = 2;
  604. level.clock.font = "default";
  605. level.clock.fontscale = 2;
  606. level.clock setTimer(level.timelimit * 60);
  607. }
  608.  
  609. for(;;)
  610. {
  611. checkTimeLimit();
  612. wait 1;
  613. }
  614. }
  615.  
  616. endMap()
  617. {
  618. //Damole EndMapVote
  619. maps\mp\gametypes\_mapvote::Initialize();
  620. //DaMole
  621.  
  622. game["state"] = "intermission";
  623. level notify("intermission");
  624.  
  625. players = getentarray("player", "classname");
  626. highscore = undefined;
  627. tied = undefined;
  628. playername = undefined;
  629. name = undefined;
  630. guid = undefined;
  631.  
  632. for(i = 0; i < players.size; i++)
  633. {
  634. player = players[i];
  635.  
  636. if(isdefined(player.pers["team"]) && player.pers["team"] == "spectator")
  637. continue;
  638.  
  639. if(!isdefined(highscore))
  640. {
  641. highscore = player.score;
  642. playername = player;
  643. name = player.name;
  644. guid = player getGuid();
  645. continue;
  646. }
  647.  
  648. if(player.score == highscore)
  649. tied = true;
  650. else if(player.score > highscore)
  651. {
  652. tied = false;
  653. highscore = player.score;
  654. playername = player;
  655. name = player.name;
  656. guid = player getGuid();
  657. }
  658. }
  659.  
  660. players = getentarray("player", "classname");
  661. for(i = 0; i < players.size; i++)
  662. {
  663. player = players[i];
  664.  
  665. player closeMenu();
  666. player closeInGameMenu();
  667.  
  668. if(isdefined(tied) && tied == true)
  669. player setClientCvar("cg_objectiveText", &"MP_THE_GAME_IS_A_TIE");
  670. else if(isdefined(playername))
  671. player setClientCvar("cg_objectiveText", &"MP_WINS", playername);
  672.  
  673. player spawnIntermission();
  674. }
  675.  
  676. if(isdefined(name))
  677. logPrint("W;;" + guid + ";" + name + "\n");
  678.  
  679. // set everyone's rank on xenon
  680. if(level.xenon)
  681. {
  682. for(i = 0; i < players.size; i++)
  683. {
  684. player = players[i];
  685.  
  686. if(isdefined(player.pers["team"]) && player.pers["team"] == "spectator")
  687. continue;
  688.  
  689. if(highscore <= 0)
  690. rank = 0;
  691. else
  692. {
  693. rank = int(player.score * 10 / highscore);
  694. if(rank < 0)
  695. rank = 0;
  696. }
  697.  
  698. // since DM is a free-for-all, give every player their own team number
  699. setplayerteamrank(player, player.clientid, rank);
  700. }
  701. sendranks();
  702. }
  703.  
  704. wait 10;
  705. exitLevel(false);
  706. }
  707.  
  708. checkTimeLimit()
  709. {
  710. if(level.timelimit <= 0)
  711. return;
  712.  
  713. timepassed = (getTime() - level.starttime) / 1000;
  714. timepassed = timepassed / 60.0;
  715.  
  716. if(timepassed < level.timelimit)
  717. return;
  718.  
  719. if(level.mapended)
  720. return;
  721. level.mapended = true;
  722.  
  723. if(!level.splitscreen)
  724. iprintln(&"MP_TIME_LIMIT_REACHED");
  725.  
  726. level thread endMap();
  727. }
  728.  
  729. checkScoreLimit()
  730. {
  731. waittillframeend;
  732.  
  733. if(level.scorelimit <= 0)
  734. return;
  735.  
  736. if(self.score < level.scorelimit)
  737. return;
  738.  
  739. if(level.mapended)
  740. return;
  741. level.mapended = true;
  742.  
  743. if(!level.splitscreen)
  744. iprintln(&"MP_SCORE_LIMIT_REACHED");
  745.  
  746. level thread endMap();
  747. }
  748.  
  749. updateGametypeCvars()
  750. {
  751. for(;;)
  752. {
  753. timelimit = getCvarFloat("scr_dm_timelimit");
  754. if(level.timelimit != timelimit)
  755. {
  756. if(timelimit > 1440)
  757. {
  758. timelimit = 1440;
  759. setCvar("scr_dm_timelimit", "1440");
  760. }
  761.  
  762. level.timelimit = timelimit;
  763. setCvar("ui_dm_timelimit", level.timelimit);
  764. level.starttime = getTime();
  765.  
  766. if(level.timelimit > 0)
  767. {
  768. if(!isdefined(level.clock))
  769. {
  770. level.clock = newHudElem();
  771. level.clock.horzAlign = "left";
  772. level.clock.vertAlign = "top";
  773. level.clock.x = 8;
  774. level.clock.y = 2;
  775. level.clock.font = "default";
  776. level.clock.fontscale = 2;
  777. }
  778. level.clock setTimer(level.timelimit * 60);
  779. }
  780. else
  781. {
  782. if(isdefined(level.clock))
  783. level.clock destroy();
  784. }
  785.  
  786. checkTimeLimit();
  787. }
  788.  
  789. scorelimit = getCvarInt("scr_dm_scorelimit");
  790. if(level.scorelimit != scorelimit)
  791. {
  792. level.scorelimit = scorelimit;
  793. setCvar("ui_dm_scorelimit", level.scorelimit);
  794. level notify("update_allhud_score");
  795.  
  796. players = getentarray("player", "classname");
  797. for(i = 0; i < players.size; i++)
  798. players[i] checkScoreLimit();
  799. }
  800.  
  801. wait 1;
  802. }
  803. }
  804.  
  805. menuAutoAssign()
  806. {
  807. if(self.pers["team"] != "allies" && self.pers["team"] != "axis")
  808. {
  809. if(self.sessionstate == "playing")
  810. {
  811. self.switching_teams = true;
  812. self suicide();
  813. }
  814.  
  815. teams[0] = "allies";
  816. teams[1] = "axis";
  817. self.pers["team"] = teams[randomInt(2)];
  818. self.pers["weapon"] = undefined;
  819. self.pers["savedmodel"] = undefined;
  820.  
  821. self setClientCvar("ui_allow_weaponchange", "1");
  822.  
  823. if(self.pers["team"] == "allies")
  824. self setClientCvar("g_scriptMainMenu", game["menu_weapon_allies"]);
  825. else
  826. self setClientCvar("g_scriptMainMenu", game["menu_weapon_axis"]);
  827.  
  828. self notify("joined_team");
  829. self notify("end_respawn");
  830. }
  831.  
  832. if(!isdefined(self.pers["weapon"]))
  833. {
  834. if(self.pers["team"] == "allies")
  835. self openMenu(game["menu_weapon_allies"]);
  836. else
  837. self openMenu(game["menu_weapon_axis"]);
  838. }
  839. }
  840.  
  841. menuAllies()
  842. {
  843. if(self.pers["team"] != "allies")
  844. {
  845. if(self.sessionstate == "playing")
  846. {
  847. self.switching_teams = true;
  848. self suicide();
  849. }
  850.  
  851. self.pers["team"] = "allies";
  852. self.pers["weapon"] = undefined;
  853. self.pers["savedmodel"] = undefined;
  854.  
  855. self setClientCvar("ui_allow_weaponchange", "1");
  856. self setClientCvar("g_scriptMainMenu", game["menu_weapon_allies"]);
  857.  
  858. self notify("joined_team");
  859. self notify("end_respawn");
  860. }
  861.  
  862. if(!isdefined(self.pers["weapon"]))
  863. self openMenu(game["menu_weapon_allies"]);
  864. }
  865.  
  866. menuAxis()
  867. {
  868. if(self.pers["team"] != "axis")
  869. {
  870. if(self.sessionstate == "playing")
  871. {
  872. self.switching_teams = true;
  873. self suicide();
  874. }
  875.  
  876. self.pers["team"] = "axis";
  877. self.pers["weapon"] = undefined;
  878. self.pers["savedmodel"] = undefined;
  879.  
  880. self setClientCvar("ui_allow_weaponchange", "1");
  881. self setClientCvar("g_scriptMainMenu", game["menu_weapon_axis"]);
  882.  
  883. self notify("joined_team");
  884. self notify("end_respawn");
  885. }
  886.  
  887. if(!isdefined(self.pers["weapon"]))
  888. self openMenu(game["menu_weapon_axis"]);
  889. }
  890.  
  891. menuSpectator()
  892. {
  893. if(self.pers["team"] != "spectator")
  894. {
  895. if(isAlive(self))
  896. {
  897. self.switching_teams = true;
  898. self suicide();
  899. }
  900.  
  901. self.pers["team"] = "spectator";
  902. self.pers["weapon"] = undefined;
  903. self.pers["savedmodel"] = undefined;
  904.  
  905. self.sessionteam = "spectator";
  906. self setClientCvar("ui_allow_weaponchange", "0");
  907. spawnSpectator();
  908.  
  909. if(level.splitscreen)
  910. self setClientCvar("g_scriptMainMenu", game["menu_ingame_spectator"]);
  911. else
  912. self setClientCvar("g_scriptMainMenu", game["menu_ingame"]);
  913.  
  914. self notify("joined_spectators");
  915. }
  916. }
  917.  
  918. menuWeapon(response)
  919. {
  920. if(!isdefined(self.pers["team"]) || (self.pers["team"] != "allies" && self.pers["team"] != "axis"))
  921. return;
  922.  
  923. weapon = self maps\mp\gametypes\_weapons::restrictWeaponByServerCvars(response);
  924.  
  925. if(weapon == "restricted")
  926. {
  927. if(self.pers["team"] == "allies")
  928. self openMenu(game["menu_weapon_allies"]);
  929. else if(self.pers["team"] == "axis")
  930. self openMenu(game["menu_weapon_axis"]);
  931.  
  932. return;
  933. }
  934.  
  935. if(level.splitscreen)
  936. self setClientCvar("g_scriptMainMenu", game["menu_ingame_onteam"]);
  937. else
  938. self setClientCvar("g_scriptMainMenu", game["menu_ingame"]);
  939.  
  940. if(isdefined(self.pers["weapon"]) && self.pers["weapon"] == weapon)
  941. return;
  942.  
  943. if(!isdefined(self.pers["weapon"]))
  944. {
  945. self.pers["weapon"] = weapon;
  946. spawnPlayer();
  947. }
  948. else
  949. {
  950. self.pers["weapon"] = weapon;
  951.  
  952. weaponname = maps\mp\gametypes\_weapons::getWeaponName(self.pers["weapon"]);
  953.  
  954. mode = getcvar("pam_mode");
  955. if ((!game["matchstarted"] || (isDefined(level.rdyup) && level.rdyup)) && mode != "pub" && (isDefined(level.intimeout) && !level.intimeout))
  956. {
  957. } else if (game["matchstarted"] || (isDefined(level.rdyup) && !level.rdyup) || (isDefined(level.intimeout) && level.intimeout))
  958. {
  959. if(maps\pam\weapons::useAn(self.pers["weapon"]))
  960. self iprintln(&"MP_YOU_WILL_RESPAWN_WITH_AN", weaponname);
  961. else
  962. self iprintln(&"MP_YOU_WILL_RESPAWN_WITH_A", weaponname);
  963. }
  964. }
  965. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement