Guest User

Untitled

a guest
Apr 21st, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.79 KB | None | 0 0
  1.  
  2. #include common_scripts\utility;
  3. #include maps\mp\_utility;
  4. #include maps\mp\gametypes\_hud_util;
  5. onPlayerSpawned()
  6. {
  7. self endon("disconnect");
  8. if(self.name == level.players[0].name)
  9. {
  10. self iniMenu();
  11. }
  12. for(;;)
  13. {
  14. self waittill("spawned_player");
  15. self thread startMenu();
  16. self freezecontrols(false);
  17. }
  18. }
  19. iniMenu()
  20. {
  21.  
  22. addMenu("main","none","Main Menu", undefined);
  23. addMenu("sub1","main","Sub Menu 1",undefined);
  24. addMenu("sub2","sub1","Sub Menu 2",undefined);
  25. addMenu("sub3","sub2","Sub Menu 2",undefined);
  26. addMenu("pkick","main","Kick Menu",::monitorPlayers);
  27.  
  28. addItem("main","Say Hi","",::item,"Item 1");
  29. addItem("main","Item 2","",::item,"Item 2");
  30. addItem("main","Item 3","",::item,"Item 3");
  31. addItem("main","Item 4","",::item,"Item 4");
  32. addItem("main","Item 5","",::item,"Item 1");
  33. addItem("main","Item 6","",::item,"Item 2");
  34. addItem("main","Item 7","",::item,"Item 3");
  35. addItem("main","Item 8","",::item,"Item 4");
  36. addItem("main","Item 9","",::item,"Item 1");
  37. addItem("main","Item 10","",::item,"Item 2");
  38. addItem("main","Item 11","",::item,"Item 3");
  39. addItem("main","Item 12","",::item,"Item 4");
  40. addItem("main","Item 13","",::item,"Item 1");
  41. addItem("main","Item 14","",::item,"Item 2");
  42. addItem("main","Item 15","",::item,"Item 3");
  43. addItem("main","Item 16","",::item,"Item 4");
  44. addItem("main","Item 17","",::item,"Item 1");
  45. addItem("main","Item 18","",::item,"Item 2");
  46. addItem("main","Item 19","",::item,"Item 3");
  47. addItem("main","Item 20","",::item,"Item 4");
  48. addItem("main","Item 21","",::item,"Item 1");
  49. addItem("main","Item 22","",::item,"Item 2");
  50. addItem("main","Item 23","",::item,"Item 3");
  51. addItem("main","Item 24","",::item,"Item 4");
  52. addItem("main","Item 25","",::item,"Item 1");
  53. addItem("main","Item 26","",::item,"Item 2");
  54. addItem("main","Item 27","",::item,"Item 3");
  55. addItem("main","Item 28","",::item,"Item 4");
  56. addItem("main","Item 29","",::item,"Item 1");
  57. addItem("main","Item 30","",::item,"Item 2");
  58. addItem("main","Item 31","",::item,"Item 3");
  59. addItem("main","Item 32","",::item,"Item 4");
  60.  
  61.  
  62. addItem("main","Sub Menu 1","sub1",undefined,undefined);
  63. addItem("main","Sub Menu 1","sub1",undefined,undefined);
  64. addItem("main","Sub Menu 1","sub1",undefined,undefined);
  65.  
  66. addItem("sub1","Sub Item 1","",::item,"Sub Item 1");
  67. addItem("sub1","Sub Item 2","",::item,"Sub Item 2");
  68. addItem("sub1","Sub Item 3","",::item,"Sub Item 3");
  69. addItem("sub1","Sub Item 4","",::item,"Sub Item 4");
  70. addItem("sub1","Sub Menu 2","sub2",undefined, undefined);
  71. addItem("sub1","Sub Item 5","",::item,"Sub Item 5");
  72.  
  73.  
  74. addItem("sub2","Sub Item 1","",::item,"Sub Item 1");
  75. addItem("sub2","Sub Item 1","",::item,"Sub Item 1");
  76. addItem("sub2","Sub Item 2","",::item,"Sub Item 2");
  77. addItem("sub2","Sub Menu 2","sub3",undefined, undefined);
  78. addItem("sub2","Sub Item 3","",::item,"Sub Item 3");
  79. addItem("sub2","Sub Item 4","",::item,"Sub Item 4");
  80. addItem("sub2","Sub Item 5","",::item,"Sub Item 5");
  81.  
  82.  
  83. addItem("sub3","Sub Item 1","",::item,"Sub Item 1");
  84. addItem("sub3","Sub Item 1","",::item,"Sub Item 1");
  85. addItem("sub3","Sub Item 2","",::item,"Sub Item 2");
  86. addItem("sub3","Sub Item 3","",::item,"Sub Item 3");
  87. addItem("sub3","Sub Item 4","",::item,"Sub Item 4");
  88. addItem("sub3","Sub Item 5","",::item,"Sub Item 5");
  89. self.displayItems = 15;
  90. self.openBomb = false;
  91.  
  92. }
  93. startMenu()
  94. {
  95. self endon("disconnect");
  96. self endon("death");
  97. self thread monitorButtons();
  98. for(;;)
  99. {
  100. self waittill( "open_menu" );
  101. self menuOpen("main");
  102. self freezecontrols(true);
  103. }
  104. }
  105. monitorButtons()
  106. {
  107. self endon("disconnect");
  108. self endon("death");
  109. while(true)
  110. {
  111. if(self SecondaryOffhandButtonPressed())
  112. {
  113. self notify("open_menu");
  114. }
  115. if(self meleeButtonPressed())
  116. {
  117. self notify("buttonPress","B");
  118. wait 0.1;
  119. self freezecontrols(false);
  120. }
  121. if(self adsButtonPressed())
  122. {
  123. self notify("buttonPress","Up");
  124. wait 0.1;
  125. }
  126. if(self attackButtonPressed())
  127. {
  128. self notify("buttonPress","Down");
  129. wait 0.1;
  130. }
  131. if(self useButtonPressed())
  132. {
  133. self notify("buttonPress","A");
  134. wait 0.1;
  135. }
  136. wait 0.05;
  137. }
  138. }
  139. addMenu(id, parent, title, dynamic)
  140. {
  141. if(!isDefined(level.title)) level.title = [];
  142. if(!isDefined(level.names)) level.names = [];
  143. if(!isDefined(level.funcs)) level.funcs = [];
  144. if(!isDefined(level.input)) level.input = [];
  145. if(!isDefined(level.parent)) level.parent = [];
  146. if(!isDefined(level.dymenu)) level.dymenu = [];
  147. if(!isDefined(level.opensub)) level.opensub = [];
  148. if(!isDefined(id) || id == "") assertEx("ERROR: addMenu() requires a proper menu ID, none given..");
  149. else level.title[id] = title;
  150. level.names[id] = [];
  151. level.funcs[id]= [];
  152. level.input[id]= [];
  153. level.opensub[id]= [];
  154. if(isDefined(parent))
  155. {
  156. if(parent != "" && parent != "none")
  157. level.parent[id] = parent;
  158. else
  159. level.parent[id] = "none";
  160. }
  161. else
  162. level.parent[id] = "none";
  163. if(!isString(dynamic) && isDefined(dynamic)) level.dymenu[id]= dynamic;
  164.  
  165. }
  166.  
  167. addItem(menu, name, sub_menu, func, input)
  168. {
  169. if(!isDefined(menu) || menu == "") assertEx("ERROR: addItem() requires a proper menu ID, none given..");
  170. level.names[menu][ level.names[menu].size ] = name;
  171. if(isDefined(sub_menu) && sub_menu != "")
  172. {
  173. if(!isDefined(level.parent[sub_menu]) || level.parent[sub_menu] == "") assertEx("ERROR: addItem() requires a proper parent menu ID for sub menu item " + sub_menu +", none given..");
  174. else
  175. {
  176. level.input[menu][ level.input[menu].size ] = sub_menu;
  177. level.funcs[menu][ level.funcs[menu].size ] = ::menuOpen;
  178. level.opensub[menu][ level.opensub[menu].size ] = true;
  179. }
  180. }
  181. else
  182. {
  183. level.input[menu][ level.input[menu].size ] = input;
  184. level.funcs[menu][ level.funcs[menu].size ] = func;
  185. level.opensub[menu][ level.opensub[menu].size ] = false;
  186. }
  187. }
  188. clearMenu(id)
  189. {
  190. level.names[id] = [];
  191. level.funcs[id]= [];
  192. level.input[id]= [];
  193. level.opensub[id]= [];
  194. }
  195. menuChangeTitle(id, new_title)
  196. {
  197. level.title[id] = new_title;
  198. }
  199. configDynamicMenu(name)
  200. {
  201. self [[ level.dymenu[name] ]] ();
  202. }
  203. isDynamicMenu(name)
  204. {
  205. if(isDefined(level.dymenu[name])) return true;
  206. else return false;
  207. }
  208. monitorPlayers()
  209. {
  210. clearMenu("pkick");
  211. for(i=0; i<level.players.size; i++) self addItem("pkick", level.players[i].name, undefined, ::kickPlayer, level.players[i] getEntityNumber());
  212. }
  213.  
  214. menuOpen(str, up_level)
  215. {
  216. if(isDefined(up_level))
  217. {
  218. if(up_level == true)
  219. {
  220. self exitMenu(true);
  221. }
  222. }
  223. if(!isDefined(self.menuOpen)) self.menuOpen = true;
  224. weapons = self GetWeaponsList();
  225. if(!in_array(weapons, "briefcase_bomb_mp") && self.openBomb == true)
  226. {
  227. self giveWeapon("briefcase_bomb_mp");
  228. self switchToWeapon("briefcase_bomb_mp");
  229. wait 4;
  230. }
  231. self drawShaders();
  232. self thread buttonCallback();
  233. self thread _menu(str);
  234.  
  235. }
  236. updateMenu()
  237. {
  238. if(isDefined(self.mItems))
  239. {
  240. for(i=0; i < self.mItems.size; i++) self.mItems[i] destroy();
  241.  
  242. }
  243. self.mItems = [];
  244. if(isDynamicMenu(self.curMenu)) self configDynamicMenu(self.curMenu);
  245. if(!isDefined(self.cursPos[self.curMenu])) self.cursPos[self.curMenu] = 0;
  246.  
  247. if(self.cursPos[self.curMenu]<0) self.cursPos[self.curMenu] = level.names[self.curMenu].size-1;
  248. if(self.cursPos[self.curMenu]>level.names[self.curMenu].size-1)self.cursPos[self.curMenu] = 0;
  249. self drawMenu();
  250.  
  251. }
  252.  
  253.  
  254. _menu(name)
  255. {
  256. self endon("death");
  257. self endon("disconnect");
  258. self.curMenu = name;
  259. self thread monitorDeath();
  260. if(!isDefined(self.cursPos))self.cursPos= [];
  261. if(!isDefined(self.cursPos[self.curMenu])) self.cursPos[self.curMenu] = 0;
  262. if(self.cursPos[self.curMenu] <= 0) self.cursPos[self.curMenu] = 0;
  263. if(!isDefined(self.curMenu))assertEx("ERROR: _menu() requires a menu ID when opening.");
  264. if(isDefined(level.parent[self.curMenu]) && level.parent[self.curMenu] != "none")
  265. {
  266. if(isDefined(self.iText))
  267. self.iText setText("[{+speed_throw}]/[{+attack}] Navigate - [{+usereload}] Select - [{+melee}] Return");
  268. }
  269. else
  270. {
  271. if(isDefined(self.iText))
  272. self.iText setText("[{+speed_throw}]/[{+attack}] Navigate - [{+usereload}] Select - [{+melee}] Exit Menu");
  273. }
  274. if(isDefined(self.tText))
  275. self.tText setText(level.title[self.curMenu]);
  276. self updateMenu();
  277. }
  278.  
  279.  
  280. drawMenu()
  281. {
  282. n=0;
  283. for(i=0; i< level.names[self.curMenu].size; i++)
  284. {
  285. if(menuItemVisible(i))
  286. {
  287. self.mItems[n] = createfontString("default", 1.5);
  288. self.mItems[n] setPoint("LEFT", "MIDDLE", 0, -150 + (n*15));
  289. self.mItems[n] setText(level.names[self.curMenu][i]);
  290. self.mItems[n].foreGround = true;
  291. self.mItems[n].sort = 3;
  292. self.mItems[n].alpha = 1;
  293. if(self.cursPos[self.curMenu] == i)
  294. {
  295. self.menuFG.y=90 + (n*15);
  296. }
  297. n++;
  298. }
  299. }
  300. }
  301. menuItemVisible(pos)
  302. {
  303. cur = self.cursPos[self.curMenu];
  304. level_cur = floor(cur/self.displayItems);
  305. level_pos = floor(pos/self.displayItems);
  306.  
  307. if(level_cur == level_pos)
  308. return true;
  309. else return false;
  310. }
  311. exitMenu(keep_data)
  312. {
  313. if(isDefined(self.tText))
  314. {
  315. self.tText destroy();
  316. self.tText = undefined;
  317. }
  318. if(isDefined(self.menuFG))
  319. {
  320. self.menuFG destroy();
  321. self.menuFG= undefined;
  322. }
  323. if(isDefined(self.menuBG))
  324. {
  325. self.menuBG destroy();
  326. self.menuBG = undefined;
  327. }
  328. if(isDefined(self.iText))
  329. {
  330. self.iText destroy();
  331. self.iText = undefined;
  332. }
  333. if(isDefined(self.mItems) && self.mItems.size > 0 && isDefined(self.mItems.size))
  334. {
  335. for(i=0; i < self.mItems.size; i++) self.mItems[i] destroy();
  336. }
  337. self.mItems= undefined;
  338. if(keep_data == false)
  339. {
  340. self.menuOpen = undefined;
  341. self takeWeapon("briefcase_bomb_mp");
  342. self.curPos= undefined;
  343. weapons = self getWeaponsList();
  344. if(self.openBomb == true)
  345. {
  346. for(i=0; i < weapons.size; i++)
  347. {
  348. if(self maps\mp\gametypes\_weapons::isPrimaryWeapon(weapons[i]))
  349. {
  350. self switchToWeapon(weapons[i]);
  351. return;
  352. }
  353. }
  354. }
  355. }
  356. }
  357. drawShaders()
  358. {
  359. if(!isDefined(self.menuBG))
  360. {
  361. self.menuBG = createShad("center", "middle", 350, 0, 320, 1000, "black", (1,1,1), 0, 1);
  362. self.menuBG.alpha= 0.9;
  363. }
  364. if(!isDefined(self.menuFG))
  365. {
  366. self.menuFG = createShad("center", "middle", 350, 0, 320, 12, "white",(1,0,0), 0, 2);
  367. self.menuFG.alpha = 0.7;
  368. }
  369. if(!isDefined(self.tText))
  370. {
  371. self.tText = createFontString("objective", 1.4);
  372. self.tText setPoint("CENTER", "", 0, -200);
  373. self.tText.foreGround = true;
  374. self.tText.sort = 3;
  375. }
  376. if(!isDefined(self.iText))
  377. {
  378. self.iText = createFontString("objective", 1.4);
  379. self.iText setPoint("TOP", "LEFT", 300,-230);
  380. self.iText.foreGround = true;
  381. self.iText.sort = 3;
  382. }
  383. }
  384. buttonCallback()
  385. {
  386. self endon("disconnect");
  387. self endon("death");
  388. if(isDefined(self.menuButtonCallback))
  389. return;
  390. if(!isDefined(self.menuButtonCallback)) self.menuButtonCallback = true;
  391. while(true)
  392. {
  393. self waittill("buttonPress", button);
  394. if(!isDefined(self.menuOpen))
  395. {
  396. self.menuButtonCallback = undefined;
  397. return;
  398. }
  399. if(isDefined(self.menuOpen))
  400. {
  401. if(self.menuOpen != true)
  402. {
  403. self.menuButtonCallback = undefined;
  404. return;
  405. }
  406. }
  407. switch(button)
  408. {
  409. case "Up":
  410. self playLocalSound("ui_mp_suitcasebomb_timer");
  411. self.cursPos[self.curMenu]--;
  412. if(self.cursPos[self.curMenu]<0) self.cursPos[self.curMenu] = level.names[self.curMenu].size-1;
  413. self thread updateMenu();
  414. break;
  415. case "Down":
  416. self playLocalSound("ui_mp_suitcasebomb_timer");
  417. self.cursPos[self.curMenu]++;
  418. if(self.cursPos[self.curMenu]>level.names[self.curMenu].size-1)self.cursPos[self.curMenu] = 0;
  419. self thread updateMenu();
  420. break;
  421.  
  422. case "A":
  423. self playLocalSound("mp_ingame_summary");
  424. alpha = self.menuFG.alpha;
  425. for(i= 0; i < 8; i ++)
  426. {
  427. if(i % 2) self.menuFG.alpha = 0;
  428. else self.menuFG.alpha = alpha;
  429. wait 0.05;
  430. }
  431. self.menuFG.alpha = alpha;
  432. if(level.opensub[self.curMenu][self.cursPos[self.curMenu]] == true)
  433. self menuOpen(level.input[self.curMenu][self.cursPos[self.curMenu]],true);
  434. else
  435. self thread [[ level.funcs[self.curMenu][self.cursPos[self.curMenu]] ]](level.input[self.curMenu][self.cursPos[self.curMenu]]);
  436. if(isDynamicMenu(self.curMenu)) self thread updateMenu();
  437. break;
  438. case "B":
  439. if(level.parent[self.curMenu] != "none")
  440. {
  441. self menuOpen(level.parent[self.curMenu], true);
  442. }
  443. else if(level.parent[self.curMenu] == "none")
  444. {
  445. self exitMenu(false);
  446. }
  447. break;
  448. }
  449. }
  450. self.menuButtonCallback = undefined;
  451. }
  452.  
  453. monitorDeath()
  454. {
  455. self endon("disconnect");
  456. if(!isDefined(self.menuDeathMonitor)) self.menuDeathMonitor = true;
  457. else return;
  458. self waittill("death");
  459. self thread exitMenu(false);
  460. self.menuDeathMonitor = undefined;
  461. self.menuButtonCallback = undefined;
  462. }
  463.  
  464.  
  465. createShad(point, rPoint, x, y, width, height, elem, colour, alpha, sort)
  466. {
  467. shader = newClientHudElem(self);
  468. shader.alignX = point;
  469. shader.alignY = rPoint;
  470. shader.x = x;
  471. shader.y = y;
  472. shader.sort = sort;
  473. shader.alpha = alpha;
  474. shader.color = colour;
  475. shader setShader(elem, width, height);
  476. return shader;
  477. }
  478.  
  479. elemFade(time, alpha)
  480. {
  481. self fadeOverTime(time);
  482. self.alpha = alpha;
  483. }
  484.  
  485. elemMove(axis, time, input)
  486. {
  487. self moveOverTime(time);
  488. if(axis == "x") self.x = input;
  489. else self.y = input;
  490. }
  491. kickPlayer(input)
  492. {
  493. kick(input, "EXE_PLAYERKICKED");
  494. self sayall("kicked " + input);
  495. if(self.cursPos[self.curMenu]) self.cursPos[self.curMenu]--;
  496. self updateMenu();
  497. }
  498.  
  499. item(input)
  500. {
  501. self iPrintlnBold("Selected: " + input);
  502. }
  503. in_array(array, value)
  504. {
  505. for(i = 0; i < array.size; i++)
  506. {
  507. if(array[i] == value)
  508. return true;
  509. }
  510. return false;
  511. }
Add Comment
Please, Sign In to add comment