Advertisement
Guest User

Untitled

a guest
Sep 29th, 2010
512
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.46 KB | None | 0 0
  1. #include maps\mp\_utility;
  2.  
  3. init()
  4. {
  5. if ( !isDefined( game["gamestarted"] ) )
  6. {
  7. game["menu_team"] = "team_marinesopfor";
  8. game["menu_class_allies"] = "class_marines";
  9. game["menu_changeclass_allies"] = "changeclass_marines";
  10. game["menu_initteam_allies"] = "initteam_marines";
  11. game["menu_class_axis"] = "class_opfor";
  12. game["menu_changeclass_axis"] = "changeclass_opfor";
  13. game["menu_initteam_axis"] = "initteam_opfor";
  14. game["menu_class"] = "class";
  15. game["menu_changeclass"] = "changeclass";
  16. game["menu_onemanarmy"] = "onemanarmy";
  17. game["menu_controls"] = "ingame_controls";
  18.  
  19. if ( !level.console )
  20. {
  21. game["menu_muteplayer"] = "muteplayer";
  22. precacheMenu(game["menu_muteplayer"]);
  23. }
  24. else
  25. {
  26. //game["menu_options"] = "ingame_options";
  27. game["menu_leavegame"] = "popup_leavegame";
  28.  
  29. if(level.splitscreen)
  30. {
  31. game["menu_team"] += "_splitscreen";
  32. game["menu_class_allies"] += "_splitscreen";
  33. game["menu_changeclass_allies"] += "_splitscreen";
  34. game["menu_class_axis"] += "_splitscreen";
  35. game["menu_changeclass_axis"] += "_splitscreen";
  36. game["menu_class"] += "_splitscreen";
  37. game["menu_controls"] += "_splitscreen";
  38. //game["menu_options"] += "_splitscreen";
  39. game["menu_leavegame"] += "_splitscreen";
  40. game["menu_onemanarmy"] += "_splitscreen";
  41.  
  42. game["menu_changeclass_defaults_splitscreen"] = "changeclass_defaults_splitscreen";
  43. game["menu_changeclass_custom_splitscreen"] = "changeclass_custom_splitscreen";
  44. game["menu_onemanarmy_defaults_splitscreen"] = "onemanarmy_defaults_splitscreen";
  45. game["menu_onemanarmy_custom_splitscreen"] = "onemanarmy_custom_splitscreen";
  46.  
  47. precacheMenu(game["menu_changeclass_defaults_splitscreen"]);
  48. precacheMenu(game["menu_changeclass_custom_splitscreen"]);
  49. precacheMenu(game["menu_onemanarmy_defaults_splitscreen"]);
  50. precacheMenu(game["menu_onemanarmy_custom_splitscreen"]);
  51. }
  52.  
  53. precacheMenu(game["menu_controls"]);
  54. //precacheMenu(game["menu_options"]);
  55. precacheMenu(game["menu_leavegame"]);
  56.  
  57. //precacheMenu("status_update");
  58. }
  59.  
  60. precacheMenu("scoreboard");
  61. precacheMenu(game["menu_team"]);
  62. precacheMenu(game["menu_class_allies"]);
  63. precacheMenu(game["menu_changeclass_allies"]);
  64. precacheMenu(game["menu_initteam_allies"]);
  65. precacheMenu(game["menu_class_axis"]);
  66. precacheMenu(game["menu_changeclass_axis"]);
  67. precacheMenu(game["menu_class"]);
  68. precacheMenu(game["menu_changeclass"]);
  69. precacheMenu(game["menu_initteam_axis"]);
  70. precacheMenu(game["menu_onemanarmy"]);
  71.  
  72. precacheString( &"MP_HOST_ENDED_GAME" );
  73. precacheString( &"MP_HOST_ENDGAME_RESPONSE" );
  74. }
  75.  
  76. level thread onPlayerConnect();
  77. }
  78.  
  79. onPlayerConnect()
  80. {
  81. for(;;)
  82. {
  83. level waittill("connected", player);
  84.  
  85. player thread onMenuResponse();
  86. }
  87. }
  88.  
  89.  
  90. isOptionsMenu( menu )
  91. {
  92. if ( menu == game["menu_changeclass"] )
  93. return true;
  94.  
  95. if ( menu == game["menu_team"] )
  96. return true;
  97.  
  98. if ( menu == game["menu_controls"] )
  99. return true;
  100.  
  101. if ( isSubStr( menu, "pc_options" ) )
  102. return true;
  103.  
  104. return false;
  105. }
  106.  
  107.  
  108. onMenuResponse()
  109. {
  110. self endon("disconnect");
  111.  
  112. for(;;)
  113. {
  114. self waittill("menuresponse", menu, response);
  115.  
  116. if ( response == "back" )
  117. {
  118. self closepopupMenu();
  119. self closeInGameMenu();
  120.  
  121. if ( isOptionsMenu( menu ) )
  122. {
  123. if( self.pers["team"] == "allies" )
  124. self openpopupMenu( game["menu_class_allies"] );
  125. if( self.pers["team"] == "axis" )
  126. self openpopupMenu( game["menu_class_axis"] );
  127. }
  128. continue;
  129. }
  130.  
  131. if(response == "changeteam")
  132. {
  133. self closepopupMenu();
  134. self closeInGameMenu();
  135. self openpopupMenu(game["menu_team"]);
  136. }
  137.  
  138. if(response == "changeclass_marines" )
  139. {
  140. self closepopupMenu();
  141. self closeInGameMenu();
  142. self openpopupMenu( game["menu_changeclass_allies"] );
  143. continue;
  144. }
  145.  
  146. if(response == "changeclass_opfor" )
  147. {
  148. self closepopupMenu();
  149. self closeInGameMenu();
  150. self openpopupMenu( game["menu_changeclass_axis"] );
  151. continue;
  152. }
  153.  
  154. if(response == "changeclass_marines_splitscreen" )
  155. self openpopupMenu( "changeclass_marines_splitscreen" );
  156.  
  157. if(response == "changeclass_opfor_splitscreen" )
  158. self openpopupMenu( "changeclass_opfor_splitscreen" );
  159.  
  160. if(response == "endgame")
  161. {
  162. if(level.splitscreen)
  163. {
  164. endparty();
  165.  
  166. if ( !level.gameEnded )
  167. {
  168. level thread maps\mp\gametypes\_gamelogic::forceEnd();
  169. }
  170. }
  171.  
  172. continue;
  173. }
  174.  
  175. if ( response == "endround" )
  176. {
  177. if ( !level.gameEnded )
  178. {
  179. level thread maps\mp\gametypes\_gamelogic::forceEnd();
  180. }
  181. else
  182. {
  183. self closepopupMenu();
  184. self closeInGameMenu();
  185. self iprintln( &"MP_HOST_ENDGAME_RESPONSE" );
  186. }
  187. continue;
  188. }
  189.  
  190. if(menu == game["menu_team"])
  191. {
  192. switch(response)
  193. {
  194. case "allies":
  195. self [[level.allies]]();
  196. break;
  197.  
  198. case "axis":
  199. self [[level.axis]]();
  200. break;
  201.  
  202. case "autoassign":
  203. self [[level.autoassign]]();
  204. break;
  205.  
  206. case "spectator":
  207. self [[level.spectator]]();
  208. break;
  209. }
  210. } // the only responses remain are change class events
  211. else if ( menu == game["menu_changeclass"] ||
  212. ( isDefined( game["menu_changeclass_defaults_splitscreen"] ) && menu == game["menu_changeclass_defaults_splitscreen"] ) ||
  213. ( isDefined( game["menu_changeclass_custom_splitscreen"] ) && menu == game["menu_changeclass_custom_splitscreen"] ) )
  214. {
  215. self closepopupMenu();
  216. self closeInGameMenu();
  217.  
  218. self.selectedClass = true;
  219. self [[level.class]](response);
  220. }
  221. else if ( !level.console )
  222. {
  223. if(menu == game["menu_quickcommands"])
  224. maps\mp\gametypes\_quickmessages::quickcommands(response);
  225. else if(menu == game["menu_quickstatements"])
  226. maps\mp\gametypes\_quickmessages::quickstatements(response);
  227. else if(menu == game["menu_quickresponses"])
  228. maps\mp\gametypes\_quickmessages::quickresponses(response);
  229. }
  230. }
  231. }
  232.  
  233.  
  234. getTeamAssignment()
  235. {
  236. teams[0] = "allies";
  237. teams[1] = "axis";
  238.  
  239. if ( !level.teamBased )
  240. return teams[randomInt(2)];
  241.  
  242. if ( self.sessionteam != "none" && self.sessionteam != "spectator" && self.sessionstate != "playing" && self.sessionstate != "dead" )
  243. {
  244. assignment = self.sessionteam;
  245. }
  246. else
  247. {
  248. playerCounts = self maps\mp\gametypes\_teams::CountPlayers();
  249.  
  250. // if teams are equal return the team with the lowest score
  251. if ( playerCounts["allies"] == playerCounts["axis"] )
  252. {
  253. if( getTeamScore( "allies" ) == getTeamScore( "axis" ) )
  254. assignment = teams[randomInt(2)];
  255. else if ( getTeamScore( "allies" ) < getTeamScore( "axis" ) )
  256. assignment = "allies";
  257. else
  258. assignment = "axis";
  259. }
  260. else if( playerCounts["allies"] < playerCounts["axis"] )
  261. {
  262. assignment = "allies";
  263. }
  264. else
  265. {
  266. assignment = "axis";
  267. }
  268. }
  269.  
  270. return assignment;
  271. }
  272.  
  273.  
  274. menuAutoAssign()
  275. {
  276. self closeMenus();
  277.  
  278. assignment = getTeamAssignment();
  279.  
  280. if ( isDefined( self.pers["team"] ) && (self.sessionstate == "playing" || self.sessionstate == "dead") )
  281. {
  282. if ( assignment == self.pers["team"] )
  283. {
  284. self beginClassChoice();
  285. return;
  286. }
  287. else
  288. {
  289. self.switching_teams = true;
  290. self.joining_team = assignment;
  291. self.leaving_team = self.pers["team"];
  292. self suicide();
  293. }
  294. }
  295.  
  296. self addToTeam( assignment );
  297. self.pers["class"] = undefined;
  298. self.class = undefined;
  299.  
  300. if ( !isAlive( self ) )
  301. self.statusicon = "hud_status_dead";
  302.  
  303. self notify("end_respawn");
  304.  
  305. self beginClassChoice();
  306. }
  307.  
  308.  
  309. beginClassChoice( forceNewChoice )
  310. {
  311. assert( self.pers["team"] == "axis" || self.pers["team"] == "allies" );
  312.  
  313. team = self.pers["team"];
  314.  
  315. // menu_changeclass_team is the one where you choose one of the n classes to play as.
  316. // menu_class_team is where you can choose to change your team, class, controls, or leave game.
  317. self openpopupMenu( game[ "menu_changeclass_" + team ] );
  318.  
  319. if ( !isAlive( self ) )
  320. self thread maps\mp\gametypes\_playerlogic::predictAboutToSpawnPlayerOverTime( 0.1 );
  321. }
  322.  
  323.  
  324. beginTeamChoice()
  325. {
  326. self openpopupMenu( game["menu_team"] );
  327. }
  328.  
  329.  
  330. showMainMenuForTeam()
  331. {
  332. assert( self.pers["team"] == "axis" || self.pers["team"] == "allies" );
  333.  
  334. team = self.pers["team"];
  335.  
  336. // menu_changeclass_team is the one where you choose one of the n classes to play as.
  337. // menu_class_team is where you can choose to change your team, class, controls, or leave game.
  338. self openpopupMenu( game[ "menu_class_" + team ] );
  339. }
  340.  
  341. menuAllies()
  342. {
  343. self closeMenus();
  344.  
  345. if(self.pers["team"] != "allies")
  346. {
  347. if( level.teamBased && !maps\mp\gametypes\_teams::getJoinTeamPermissions( "allies" ) )
  348. {
  349. self openpopupMenu(game["menu_team"]);
  350. return;
  351. }
  352.  
  353. // allow respawn when switching teams during grace period.
  354. if ( level.inGracePeriod && !self.hasDoneCombat )
  355. self.hasSpawned = false;
  356.  
  357. if(self.sessionstate == "playing")
  358. {
  359. self.switching_teams = true;
  360. self.joining_team = "allies";
  361. self.leaving_team = self.pers["team"];
  362. self suicide();
  363. }
  364.  
  365. self addToTeam( "allies" );
  366. self.pers["class"] = undefined;
  367. self.class = undefined;
  368.  
  369. self notify("end_respawn");
  370. }
  371.  
  372. self beginClassChoice();
  373. }
  374.  
  375.  
  376. menuAxis()
  377. {
  378. self closeMenus();
  379.  
  380. if(self.pers["team"] != "axis")
  381. {
  382. if( level.teamBased && !maps\mp\gametypes\_teams::getJoinTeamPermissions( "axis" ) )
  383. {
  384. self openpopupMenu(game["menu_team"]);
  385. return;
  386. }
  387.  
  388. // allow respawn when switching teams during grace period.
  389. if ( level.inGracePeriod && !self.hasDoneCombat )
  390. self.hasSpawned = false;
  391.  
  392. if(self.sessionstate == "playing")
  393. {
  394. self.switching_teams = true;
  395. self.joining_team = "axis";
  396. self.leaving_team = self.pers["team"];
  397. self suicide();
  398. }
  399.  
  400. self addToTeam( "axis" );
  401. self.pers["class"] = undefined;
  402. self.class = undefined;
  403.  
  404. self notify("end_respawn");
  405. }
  406.  
  407. self beginClassChoice();
  408. }
  409.  
  410.  
  411. menuSpectator()
  412. {
  413. self closeMenus();
  414.  
  415. if( isDefined( self.pers["team"] ) && self.pers["team"] == "spectator" )
  416. return;
  417.  
  418. if( isAlive( self ) )
  419. {
  420. assert( isDefined( self.pers["team"] ) );
  421. self.switching_teams = true;
  422. self.joining_team = "spectator";
  423. self.leaving_team = self.pers["team"];
  424. self suicide();
  425. }
  426.  
  427. self addToTeam( "spectator" );
  428. self.pers["class"] = undefined;
  429. self.class = undefined;
  430.  
  431. self thread maps\mp\gametypes\_playerlogic::spawnSpectator();
  432. }
  433.  
  434.  
  435. menuClass( response )
  436. {
  437. self closeMenus();
  438.  
  439. // clear new status of unlocked classes
  440. if ( response == "demolitions_mp,0" && self getPlayerData( "featureNew", "demolitions" ) )
  441. {
  442. self setPlayerData( "featureNew", "demolitions", false );
  443. }
  444. if ( response == "sniper_mp,0" && self getPlayerData( "featureNew", "sniper" ) )
  445. {
  446. self setPlayerData( "featureNew", "sniper", false );
  447. }
  448.  
  449. // this should probably be an assert
  450. if(!isDefined(self.pers["team"]) || (self.pers["team"] != "allies" && self.pers["team"] != "axis"))
  451. return;
  452.  
  453. class = self maps\mp\gametypes\_class::getClassChoice( response );
  454. primary = self maps\mp\gametypes\_class::getWeaponChoice( response );
  455.  
  456. if ( class == "restricted" )
  457. {
  458. self beginClassChoice();
  459. return;
  460. }
  461.  
  462. if( (isDefined( self.pers["class"] ) && self.pers["class"] == class) &&
  463. (isDefined( self.pers["primary"] ) && self.pers["primary"] == primary) )
  464. return;
  465.  
  466. if ( self.sessionstate == "playing" )
  467. {
  468. self.pers["class"] = class;
  469. self.class = class;
  470. self.pers["primary"] = primary;
  471.  
  472. if ( game["state"] == "postgame" )
  473. return;
  474.  
  475. if ( level.inGracePeriod && !self.hasDoneCombat ) // used weapons check?
  476. {
  477. self maps\mp\gametypes\_class::setClass( self.pers["class"] );
  478. self.tag_stowed_back = undefined;
  479. self.tag_stowed_hip = undefined;
  480. self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], self.pers["class"] );
  481. }
  482. else
  483. {
  484. self iPrintLnBold( game["strings"]["change_class"] );
  485. }
  486. }
  487. else
  488. {
  489. self.pers["class"] = class;
  490. self.class = class;
  491. self.pers["primary"] = primary;
  492.  
  493. if ( game["state"] == "postgame" )
  494. return;
  495.  
  496. if ( game["state"] == "playing" && !isInKillcam() )
  497. self thread maps\mp\gametypes\_playerlogic::spawnClient();
  498. }
  499.  
  500. self thread maps\mp\gametypes\_spectating::setSpectatePermissions();
  501. }
  502.  
  503.  
  504.  
  505. addToTeam( team, firstConnect )
  506. {
  507. // UTS update playerCount remove from team
  508. if ( isDefined( self.team ) )
  509. self maps\mp\gametypes\_playerlogic::removeFromTeamCount();
  510.  
  511. self.pers["team"] = team;
  512. // this is the only place self.team should ever be set
  513. self.team = team;
  514.  
  515. // session team is readonly in ranked matches on console
  516. if ( !matchMakingGame() || isDefined( self.pers["isBot"] ) )
  517. {
  518. if ( level.teamBased )
  519. {
  520. self.sessionteam = team;
  521. }
  522. else
  523. {
  524. if ( team == "spectator" )
  525. self.sessionteam = "spectator";
  526. else
  527. self.sessionteam = "none";
  528. }
  529. }
  530.  
  531. // UTS update playerCount add to team
  532. if ( game["state"] != "postgame" )
  533. self maps\mp\gametypes\_playerlogic::addToTeamCount();
  534.  
  535. self updateObjectiveText();
  536.  
  537. // give "joined_team" and "joined_spectators" handlers a chance to start
  538. // these are generally triggered from the "connected" notify, which can happen on the same
  539. // frame as these notifies
  540. if ( isDefined( firstConnect ) && firstConnect )
  541. waittillframeend;
  542.  
  543. self updateMainMenu();
  544.  
  545. if ( team == "spectator" )
  546. {
  547. self notify( "joined_spectators" );
  548. level notify( "joined_team" );
  549. }
  550. else
  551. {
  552. self notify( "joined_team" );
  553. level notify( "joined_team" );
  554. }
  555. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement