Advertisement
Guest User

_menus - Notesblok

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