Advertisement
Guest User

thing

a guest
Mar 22nd, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.81 KB | None | 0 0
  1. package com.mcleodgaming.ssf2.net
  2. {
  3. import com.mcleodgaming.mgn.events.MGNEvent;
  4. import com.mcleodgaming.mgn.events.MGNEventManager;
  5. import com.mcleodgaming.mgn.net.MGN_Socket;
  6. import com.mcleodgaming.mgn.net.PlayerConnectionInfo;
  7. import com.mcleodgaming.mgn.net.PlayerDataSyncStream;
  8. import com.mcleodgaming.ssf2.Main;
  9. import com.mcleodgaming.ssf2.audio.SoundQueue;
  10. import com.mcleodgaming.ssf2.controllers.Game;
  11. import com.mcleodgaming.ssf2.controllers.GameController;
  12. import com.mcleodgaming.ssf2.controllers.MenuController;
  13. import com.mcleodgaming.ssf2.controllers.PlayerSetting;
  14. import com.mcleodgaming.ssf2.enums.Mode;
  15. import com.mcleodgaming.ssf2.util.Controller;
  16. import com.mcleodgaming.ssf2.util.FrameTimer;
  17. import com.mcleodgaming.ssf2.util.ResourceManager;
  18. import com.mcleodgaming.ssf2.util.SaveData;
  19. import com.mcleodgaming.ssf2.util.Utils;
  20. import flash.display.MovieClip;
  21. import flash.text.TextField;
  22. import flash.utils.setTimeout;
  23.  
  24. public class MultiplayerManager
  25. {
  26.  
  27. private static const FPS_THRESHOLD:int = 5;
  28.  
  29. private static const FRAME_RATE_ADJUSTER:Boolean = false;
  30.  
  31. public static var NORMAL_FPS:int = 30;
  32.  
  33. public static var MAX_FPS:int = 35;
  34.  
  35. public static var INPUT_BUFFER:int = 3;
  36.  
  37. public static var joinRequestPlayerInfoQueue:Vector.<PlayerConnectionInfo> = new Vector.<PlayerConnectionInfo>();
  38.  
  39. private static var m_controllers:Vector.<Controller>;
  40.  
  41. private static var m_notifier:MovieClip;
  42.  
  43. private static var m_notifierText:TextField;
  44.  
  45. private static var m_permanentBox:Boolean;
  46.  
  47. private static var m_frameRateTimer:FrameTimer;
  48.  
  49. private static var m_lastUpdate:Date;
  50.  
  51. private static var m_pingCount:Number;
  52.  
  53. private static var m_pingTotal:Number;
  54.  
  55. private static var m_averagePing:Number;
  56.  
  57. private static var m_frameRateIncremented:Boolean;
  58.  
  59. private static var m_randomSeed:Number;
  60.  
  61. private static var m_matchReady:Boolean;
  62.  
  63. private static var m_matchEnded:Boolean;
  64.  
  65. private static var m_roomData:Object;
  66.  
  67. private static var m_promotionTimer:FrameTimer;
  68.  
  69. private static var m_readyToLock:Boolean;
  70.  
  71. private static var m_onlineInterface:MGN_Socket;
  72.  
  73.  
  74. public function MultiplayerManager()
  75. {
  76. super();
  77. }
  78.  
  79. public static function initializeMultiplayerManager() : void
  80. {
  81. var i:int = 0;
  82. m_matchReady = false;
  83. m_matchEnded = false;
  84. m_roomData = null;
  85. m_permanentBox = false;
  86. m_controllers = new Vector.<Controller>();
  87. i = 0;
  88. while(i < Main.MAXPLAYERS)
  89. {
  90. m_controllers.push(new Controller(i + 1,SaveData.Controllers[i].getControls()));
  91. i++;
  92. }
  93. m_notifier = null;
  94. m_notifierText = null;
  95. m_onlineInterface = new MGN_Socket(Main.MAXPLAYERS);
  96. MGNEventManager.dispatcher.addEventListener(MGNEvent.NOTIFY,handlemgn_NOTIFY);
  97. MGNEventManager.dispatcher.addEventListener(MGNEvent.PLAYER_JOINED,handlemgn_PLAYER_JOINED);
  98. MGNEventManager.dispatcher.addEventListener(MGNEvent.PLAYER_LEFT,handlemgn_PLAYER_LEFT);
  99. MGNEventManager.dispatcher.addEventListener(MGNEvent.DATA,handlemgn_DATA);
  100. MGNEventManager.dispatcher.addEventListener(MGNEvent.MATCH_READY_STATUS,onMatchReadyStatus);
  101. MGNEventManager.dispatcher.addEventListener(MGNEvent.MATCH_START,handlemgn_MATCH_START);
  102. MGNEventManager.dispatcher.addEventListener(MGNEvent.MATCH_FINISHED,handlemgn_MATCH_FINISHED);
  103. MGNEventManager.dispatcher.addEventListener(MGNEvent.MATCH_END,handlemgn_MATCH_END);
  104. MGNEventManager.dispatcher.addEventListener(MGNEvent.DISCONNECT,handlemgn_DISCONNECT);
  105. MGNEventManager.dispatcher.addEventListener(MGNEvent.ROOM_JOIN_REQUEST,onRoomJoinRequestReceived);
  106. MGNEventManager.dispatcher.addEventListener(MGNEvent.ROOM_DATA,roomDataSet);
  107. MGNEventManager.dispatcher.addEventListener(MGNEvent.ERROR_ROOM_DATA,roomDataSetError);
  108. MGNEventManager.dispatcher.addEventListener(MGNEvent.LOCK_ROOM,onRoomLocked);
  109. MGNEventManager.dispatcher.addEventListener(MGNEvent.ERROR_LOCK_ROOM,onRoomLockedError);
  110. MGNEventManager.dispatcher.addEventListener(MGNEvent.UNLOCK_ROOM,onRoomUnlocked);
  111. MGNEventManager.dispatcher.addEventListener(MGNEvent.ERROR_UNLOCK_ROOM,onRoomUnlockedError);
  112. MGNEventManager.dispatcher.addEventListener(MGNEvent.ERROR_PING,onPingError);
  113. MGNEventManager.dispatcher.addEventListener(MGNEvent.LEAVE_ROOM,onLeaveRoom);
  114. m_frameRateTimer = new FrameTimer(30);
  115. m_promotionTimer = new FrameTimer(30 * 5);
  116. m_lastUpdate = null;
  117. m_pingCount = Number(Number(Number(Number(0))));
  118. m_pingTotal = Number(Number(Number(Number(0))));
  119. m_averagePing = Number(Number(Number(Number(0))));
  120. m_frameRateIncremented = true;
  121. m_randomSeed = Number(Number(Number(Number(0))));
  122. m_readyToLock = false;
  123. resetMasterFrame();
  124. }
  125.  
  126. public static function get CurrentHostID() : String
  127. {
  128. return m_onlineInterface.CurrentHostID;
  129. }
  130.  
  131. public static function get Username() : String
  132. {
  133. return m_onlineInterface.Username;
  134. }
  135.  
  136. public static function get SocketID() : String
  137. {
  138. return m_onlineInterface.SocketID;
  139. }
  140.  
  141. public static function get RoomList() : Array
  142. {
  143. return m_onlineInterface.RoomList;
  144. }
  145.  
  146. public static function get MatchReady() : Boolean
  147. {
  148. return m_matchReady;
  149. }
  150.  
  151. public static function get MatchEnded() : Boolean
  152. {
  153. return m_matchEnded;
  154. }
  155.  
  156. public static function get RoomKey() : String
  157. {
  158. return m_onlineInterface.RoomKey;
  159. }
  160.  
  161. public static function get RoomData() : Object
  162. {
  163. return m_roomData;
  164. }
  165.  
  166. public static function get Controllers() : Vector.<Controller>
  167. {
  168. return m_controllers;
  169. }
  170.  
  171. public static function get Ping() : Number
  172. {
  173. return Math.round(m_averagePing);
  174. }
  175.  
  176. public static function get Connected() : Boolean
  177. {
  178. return m_onlineInterface.Connected;
  179. }
  180.  
  181. public static function get Active() : Boolean
  182. {
  183. return m_onlineInterface.Active;
  184. }
  185.  
  186. public static function set Active(value:Boolean) : void
  187. {
  188. m_onlineInterface.Active = value;
  189. }
  190.  
  191. public static function get MasterFrame() : int
  192. {
  193. return m_onlineInterface.MasterFrame;
  194. }
  195.  
  196. public static function set MasterFrame(value:int) : void
  197. {
  198. m_onlineInterface.MasterFrame = value;
  199. }
  200.  
  201. public static function get PlayerID() : int
  202. {
  203. return m_onlineInterface.PlayerID;
  204. }
  205.  
  206. public static function get RoomLocked() : Boolean
  207. {
  208. return m_onlineInterface.RoomLocked;
  209. }
  210.  
  211. public static function get IsHost() : Boolean
  212. {
  213. return m_onlineInterface.IsHost;
  214. }
  215.  
  216. public static function get P2PMode() : Boolean
  217. {
  218. return m_onlineInterface.P2PMode;
  219. }
  220.  
  221. public static function set P2PMode(value:Boolean) : void
  222. {
  223. m_onlineInterface.P2PMode = value;
  224. }
  225.  
  226. public static function get PromotionTimer() : FrameTimer
  227. {
  228. return m_promotionTimer;
  229. }
  230.  
  231. public static function get Players() : Vector.<PlayerConnectionInfo>
  232. {
  233. return m_onlineInterface.Players;
  234. }
  235.  
  236. public static function get PlayerSyncStream() : PlayerDataSyncStream
  237. {
  238. return m_onlineInterface.PlayerSyncStream;
  239. }
  240.  
  241. public static function reset() : void
  242. {
  243. m_roomData = null;
  244. m_matchReady = false;
  245. m_matchEnded = false;
  246. joinRequestPlayerInfoQueue.splice(0,joinRequestPlayerInfoQueue.length);
  247. m_onlineInterface.disconnect();
  248. initializeMultiplayerManager();
  249. }
  250.  
  251. public static function resetMasterFrame() : void
  252. {
  253. var i:int = 0;
  254. m_onlineInterface.resetMasterFrame();
  255. i = 0;
  256. while(i < m_onlineInterface.Players.length)
  257. {
  258. m_controllers[i].flushControlBits();
  259. i++;
  260. }
  261. }
  262.  
  263. public static function restoreOriginalGameSettings() : void
  264. {
  265. var i:int = 0;
  266. GameController.currentGame.importSettings(GameController.onlineModeMatchSettings);
  267. var wasRandom:Boolean = GameController.currentGame.PlayerSettings[0].isRandom;
  268. i = 0;
  269. while(i < GameController.currentGame.PlayerSettings.length)
  270. {
  271. GameController.currentGame.PlayerSettings[i].isRandom = false;
  272. i++;
  273. }
  274. if(wasRandom)
  275. {
  276. GameController.currentGame.PlayerSettings[0].character = "random";
  277. }
  278. }
  279.  
  280. public static function resetSeed() : void
  281. {
  282. m_randomSeed = Number(Number(Number(Number(Utils.random()))));
  283. }
  284.  
  285. public static function setSeed(seed:Number) : void
  286. {
  287. m_randomSeed = seed;
  288. }
  289.  
  290. public static function notify(msg:String, permanentBox:Boolean = false) : void
  291. {
  292. if(m_notifier != null)
  293. {
  294. if(m_notifier.currentFrame === 1)
  295. {
  296. m_notifierText.text = "";
  297. }
  298. m_notifierText.appendText(" > " + msg + "\n");
  299. m_notifierText.scrollV = m_notifierText.numLines;
  300. m_notifier.gotoAndPlay("showmsg");
  301. if(m_permanentBox || permanentBox)
  302. {
  303. m_permanentBox = true;
  304. m_notifier.stop();
  305. }
  306. }
  307. }
  308.  
  309. public static function makeNotifier() : void
  310. {
  311. if(m_notifier == null)
  312. {
  313. m_notifier = ResourceManager.getLibraryMC("onlineplay_notify");
  314. m_notifierText = m_notifier.txt_mc.txtbox;
  315. Main.Root.stage.addChild(m_notifier);
  316. m_notifier.x = Main.Width / 2;
  317. m_notifier.y = Main.Height;
  318. }
  319. }
  320.  
  321. public static function connect(userName:String, password:String, version:String) : void
  322. {
  323. m_onlineInterface.connect(userName,password,version);
  324. MultiplayerManager.makeNotifier();
  325. }
  326.  
  327. public static function disconnect() : void
  328. {
  329. m_onlineInterface.disconnect();
  330. }
  331.  
  332. public static function createRoom(roomName:String, roomPassword:String, roomData:Object) : void
  333. {
  334. m_onlineInterface.createRoom(roomName,roomPassword,roomData);
  335. }
  336.  
  337. public static function requestToJoinRoom(roomKey:String, roomPassword:String) : void
  338. {
  339. m_onlineInterface.requestToJoinRoom(roomKey,roomPassword);
  340. }
  341.  
  342. public static function createJoinRoom(roomName:String, roomPassword:String, roomData:Object) : void
  343. {
  344. m_onlineInterface.createJoinRoom(roomName,roomPassword,roomData);
  345. }
  346.  
  347. public static function lockRoom() : void
  348. {
  349. m_onlineInterface.lockRoom();
  350. }
  351.  
  352. public static function unlockRoom() : void
  353. {
  354. m_onlineInterface.unlockRoom();
  355. }
  356.  
  357. public static function leaveRoom() : void
  358. {
  359. m_onlineInterface.leaveRoom();
  360. }
  361.  
  362. private static function roomDataSet(e:MGNEvent) : void
  363. {
  364. }
  365.  
  366. private static function roomDataSetError(e:MGNEvent) : void
  367. {
  368. }
  369.  
  370. private static function onRoomLocked(e:MGNEvent) : void
  371. {
  372. m_readyToLock = false;
  373. }
  374.  
  375. private static function onRoomLockedError(e:MGNEvent) : void
  376. {
  377. MultiplayerManager.notify("There was a problem locking the room.");
  378. m_readyToLock = false;
  379. }
  380.  
  381. private static function onRoomUnlocked(e:MGNEvent) : void
  382. {
  383. m_readyToLock = false;
  384. }
  385.  
  386. private static function onRoomUnlockedError(e:MGNEvent) : void
  387. {
  388. MultiplayerManager.notify("There was a problem unlocking the room.");
  389. m_readyToLock = false;
  390. }
  391.  
  392. private static function onPingError(e:MGNEvent) : void
  393. {
  394. reset();
  395. MenuController.removeAllMenus();
  396. MenuController.onlineMenu.show();
  397. SoundQueue.instance.playMusic("menumusic",0);
  398. }
  399.  
  400. private static function onLeaveRoom(e:MGNEvent) : void
  401. {
  402. m_roomData = null;
  403. m_matchReady = false;
  404. m_matchEnded = false;
  405. }
  406.  
  407. public static function refreshRoomList(friendsOnly:Boolean = false) : void
  408. {
  409. m_onlineInterface.refreshRoomList(friendsOnly);
  410. }
  411.  
  412. public static function sendMyDataFrame(frame:int, data:Object) : void
  413. {
  414. m_onlineInterface.sendMyDataFrame(frame,data);
  415. }
  416.  
  417. public static function sendMatchReadySignal(data:Object) : void
  418. {
  419. m_onlineInterface.sendMatchReadySignal(data);
  420. }
  421.  
  422. public static function sendMatchFinishedSignal(data:Object) : void
  423. {
  424. m_onlineInterface.sendMatchFinishedSignal(data);
  425. }
  426.  
  427. public static function sendMatchEndSignal() : void
  428. {
  429. m_onlineInterface.sendMatchEndSignal();
  430. }
  431.  
  432. public static function sendMatchSettings(data:Object) : void
  433. {
  434. m_onlineInterface.sendMatchSettings(data);
  435. }
  436.  
  437. public static function onRoomJoinRequestReceived(e:MGNEvent) : void
  438. {
  439. MultiplayerManager.handleRoomJoinRequest(e.data.playerConnectionInfo);
  440. }
  441.  
  442. public static function handleRoomJoinRequest(playerInfo:PlayerConnectionInfo) : void
  443. {
  444. var username:String = null;
  445. if(RoomLocked)
  446. {
  447. m_onlineInterface.declineRoomJoinRequest(playerInfo);
  448. }
  449. else if(MenuController.onlinePromptMenu.isOnscreen())
  450. {
  451. MultiplayerManager.joinRequestPlayerInfoQueue.push(playerInfo);
  452. }
  453. else
  454. {
  455. username = !!playerInfo.is_dev?"+ " + playerInfo.username:playerInfo.username;
  456. MenuController.onlinePromptMenu.message = username + "\n" + "wants to join the match.\n\n" + "Accept?";
  457. MenuController.onlinePromptMenu.data = playerInfo;
  458. MenuController.onlinePromptMenu.onAccept = acceptRoomJoinRequest;
  459. MenuController.onlinePromptMenu.onDismiss = declineRoomJoinRequest;
  460. MenuController.onlinePromptMenu.show();
  461. }
  462. }
  463.  
  464. public static function acceptRoomJoinRequest() : void
  465. {
  466. m_onlineInterface.acceptRoomJoinRequest(MenuController.onlinePromptMenu.data as PlayerConnectionInfo);
  467. MenuController.onlinePromptMenu.removeSelf();
  468. if(MultiplayerManager.joinRequestPlayerInfoQueue.length > 0)
  469. {
  470. setTimeout(function():void
  471. {
  472. MultiplayerManager.handleRoomJoinRequest(MultiplayerManager.joinRequestPlayerInfoQueue.splice(0,1)[0]);
  473. },2000);
  474. }
  475. }
  476.  
  477. public static function declineRoomJoinRequest() : void
  478. {
  479. m_onlineInterface.declineRoomJoinRequest(MenuController.onlinePromptMenu.data as PlayerConnectionInfo);
  480. MenuController.onlinePromptMenu.removeSelf();
  481. if(MultiplayerManager.joinRequestPlayerInfoQueue.length > 0)
  482. {
  483. setTimeout(function():void
  484. {
  485. MultiplayerManager.handleRoomJoinRequest(MultiplayerManager.joinRequestPlayerInfoQueue.splice(0,1)[0]);
  486. },2000);
  487. }
  488. }
  489.  
  490. private static function updateControls() : void
  491. {
  492. var updated:Boolean = false;
  493. var i:int = 0;
  494. var currentUpdate:Date = null;
  495. var updatedPing:Number = NaN;
  496. var averagePing:Number = NaN;
  497. if(m_onlineInterface.Active && m_onlineInterface.Connected)
  498. {
  499. updated = false;
  500. while(m_onlineInterface.ControlBits[0].length > 0)
  501. {
  502. updated = true;
  503. i = 0;
  504. while(i < m_onlineInterface.Players.length)
  505. {
  506. m_controllers[i].queueControlBits(m_onlineInterface.ControlBits[i][0]);
  507. m_onlineInterface.ControlBits[i].splice(0,1);
  508. i++;
  509. }
  510. }
  511. m_frameRateTimer.tick();
  512. m_promotionTimer.tick();
  513. if(updated)
  514. {
  515. if(!m_lastUpdate)
  516. {
  517. m_lastUpdate = new Date();
  518. m_averagePing = Number(Number(Number(Number(1000 / MultiplayerManager.NORMAL_FPS))));
  519. m_pingTotal = m_averagePing;
  520. m_pingCount = Number(Number(Number(Number(1))));
  521. }
  522. else
  523. {
  524. currentUpdate = new Date();
  525. updatedPing = currentUpdate.time - m_lastUpdate.time;
  526. m_lastUpdate.setTime(currentUpdate.getTime());
  527. m_pingCount++;
  528. m_pingTotal = Number(Number(Number(Number(m_pingTotal + updatedPing))));
  529. if(m_frameRateTimer.IsComplete)
  530. {
  531. m_frameRateTimer.reset();
  532. averagePing = m_pingTotal / m_pingCount;
  533. if(MultiplayerManager.FRAME_RATE_ADJUSTER)
  534. {
  535. if(averagePing > 1000 / MultiplayerManager.NORMAL_FPS)
  536. {
  537. if(averagePing < 1000 / (MultiplayerManager.NORMAL_FPS + MultiplayerManager.FPS_THRESHOLD) && Main.Root.stage.frameRate > MultiplayerManager.NORMAL_FPS)
  538. {
  539. m_frameRateIncremented = false;
  540. Main.Root.stage.frameRate--;
  541. }
  542. else if(averagePing < m_averagePing + 2)
  543. {
  544. if(m_frameRateIncremented && Main.Root.stage.frameRate < MultiplayerManager.MAX_FPS)
  545. {
  546. Main.Root.stage.frameRate++;
  547. }
  548. else if(!m_frameRateIncremented && Main.Root.stage.frameRate > MultiplayerManager.NORMAL_FPS)
  549. {
  550. Main.Root.stage.frameRate--;
  551. }
  552. }
  553. else
  554. {
  555. m_frameRateIncremented = !m_frameRateIncremented;
  556. if(m_frameRateIncremented && Main.Root.stage.frameRate < MultiplayerManager.MAX_FPS)
  557. {
  558. Main.Root.stage.frameRate++;
  559. }
  560. else if(!m_frameRateIncremented && Main.Root.stage.frameRate > MultiplayerManager.NORMAL_FPS)
  561. {
  562. Main.Root.stage.frameRate--;
  563. }
  564. }
  565. }
  566. }
  567. if(Main.DEBUG && MenuController.debugConsole && MenuController.debugConsole.PingCapture)
  568. {
  569. MultiplayerManager.notify(Ping + " ms");
  570. }
  571. m_averagePing = averagePing;
  572. m_pingCount = Number(Number(Number(Number(0))));
  573. m_pingTotal = Number(Number(Number(Number(0))));
  574. }
  575. }
  576. }
  577. }
  578. }
  579.  
  580. private static function handlemgn_PLAYER_JOINED(e:MGNEvent) : void
  581. {
  582. SoundQueue.instance.playSoundEffect("menu_unlock");
  583. if(e.data.is_dev)
  584. {
  585. MultiplayerManager.notify("+ " + e.data.username + " has joined the match.");
  586. }
  587. else
  588. {
  589. MultiplayerManager.notify(e.data.username + " has joined the match.");
  590. }
  591. }
  592.  
  593. private static function handlemgn_PLAYER_LEFT(e:MGNEvent) : void
  594. {
  595. if(e.data.is_dev)
  596. {
  597. MultiplayerManager.notify("+ " + e.data.username + " has disconnected.");
  598. }
  599. else
  600. {
  601. MultiplayerManager.notify(e.data.username + " has disconnected.");
  602. }
  603. m_matchReady = false;
  604. if(e.data.host)
  605. {
  606. MultiplayerManager.leaveRoom();
  607. }
  608. else if(MultiplayerManager.RoomLocked && m_onlineInterface.IsHost)
  609. {
  610. MultiplayerManager.unlockRoom();
  611. }
  612. }
  613.  
  614. private static function handlemgn_NOTIFY(e:MGNEvent) : void
  615. {
  616. MultiplayerManager.notify(e.data.message);
  617. }
  618.  
  619. private static function handlemgn_DATA(e:MGNEvent) : void
  620. {
  621. }
  622.  
  623. private static function onMatchReadyStatus(e:MGNEvent) : void
  624. {
  625. }
  626.  
  627. private static function handlemgn_MATCH_START(e:MGNEvent) : void
  628. {
  629. var lastTeam:int = 0;
  630. var foundTeams:Array = null;
  631. var numTeams:int = 0;
  632. var possibleTeams:Array = null;
  633. m_matchEnded = false;
  634. if(GameController.currentGame && GameController.currentGame.SuddenDeath)
  635. {
  636. m_matchReady = true;
  637. return;
  638. }
  639. var i:int = 0;
  640. var j:int = 0;
  641. var k:int = 0;
  642. m_roomData = {};
  643. m_roomData.matchSettings = e.data.room_data.matchSettings;
  644. m_roomData.matchSettings.playerSettings = [];
  645. var playerSettings:Array = m_roomData.matchSettings.playerSettings;
  646. MultiplayerManager.INPUT_BUFFER = int(int(int(int(m_roomData.matchSettings.levelData.inputBuffer))));
  647. m_onlineInterface.PlayerID = 0;
  648. var playerData:Array = e.data.player_data;
  649. i = 0;
  650. while(i < playerData.length)
  651. {
  652. playerSettings.push(playerData[i].data.playerSettings);
  653. if(playerData[i].data.playerSettings.socket_id === m_onlineInterface.SocketID)
  654. {
  655. m_onlineInterface.PlayerID = int(int(int(int(i + 1))));
  656. }
  657. i++;
  658. }
  659. Utils.setRandSeed(m_roomData.matchSettings.levelData.randSeed);
  660. Utils.shuffleRandom();
  661. Main.prepRandomCharacters(playerSettings.length);
  662. ResourceManager.queueResources([m_roomData.matchSettings.levelData.stage]);
  663. if(m_roomData.matchSettings.levelData.teams)
  664. {
  665. lastTeam = -1;
  666. foundTeams = new Array();
  667. numTeams = 0;
  668. i = 0;
  669. while(i < playerSettings.length)
  670. {
  671. if(playerSettings[i].team < 0)
  672. {
  673. if(lastTeam < 0)
  674. {
  675. playerSettings[i].team = 1;
  676. lastTeam = 1;
  677. foundTeams[lastTeam] = true;
  678. numTeams++;
  679. }
  680. else
  681. {
  682. playerSettings[i].team = lastTeam;
  683. if(!foundTeams[lastTeam])
  684. {
  685. numTeams++;
  686. }
  687. foundTeams[lastTeam] = true;
  688. }
  689. }
  690. else
  691. {
  692. if(!foundTeams[playerSettings[i].team])
  693. {
  694. numTeams++;
  695. }
  696. lastTeam = playerSettings[i].team;
  697. foundTeams[lastTeam] = true;
  698. }
  699. i++;
  700. }
  701. if(numTeams <= 1)
  702. {
  703. possibleTeams = [1,2,3];
  704. i = 0;
  705. while(i < playerSettings.length)
  706. {
  707. if(possibleTeams.indexOf(playerSettings[i].team) >= 0)
  708. {
  709. possibleTeams.splice(possibleTeams.indexOf(playerSettings[i].team),1);
  710. }
  711. if(i == playerSettings.length - 1)
  712. {
  713. playerSettings[i].team = possibleTeams[0];
  714. }
  715. i++;
  716. }
  717. }
  718. }
  719. i = 0;
  720. while(i < playerSettings.length)
  721. {
  722. playerSettings[i].lives = m_roomData.matchSettings.levelData.lives;
  723. playerSettings[i].damageRatio = m_roomData.matchSettings.levelData.damageRatio;
  724. playerSettings[i].startDamage = m_roomData.matchSettings.levelData.startDamage;
  725. if(playerSettings[i].character != null && playerSettings[i].character != "xp")
  726. {
  727. ResourceManager.queueResources([playerSettings[i].character == "random"?Main.RandCharList[i].StatsName:playerSettings[i].character]);
  728. }
  729. i++;
  730. }
  731. ResourceManager.load({"oncomplete":onMatchReady});
  732. }
  733.  
  734. private static function onMatchReady() : void
  735. {
  736. m_matchReady = true;
  737. }
  738.  
  739. private static function handlemgn_MATCH_END(e:MGNEvent) : void
  740. {
  741. m_matchEnded = true;
  742. }
  743.  
  744. private static function handlemgn_DISCONNECT(e:MGNEvent) : void
  745. {
  746. reset();
  747. }
  748.  
  749. private static function handlemgn_MATCH_FINISHED(e:MGNEvent) : void
  750. {
  751. m_matchReady = false;
  752. }
  753.  
  754. public static function toWaitingRoom(game:Game, callback:Function) : void
  755. {
  756. var i:int = 0;
  757. game.LevelData.randSeed = Number(Number(Number(Number(Math.round(Math.random() * 1000000 + 1)))));
  758. game.PlayerSettings[0].name = game.PlayerSettings[0].name || MultiplayerManager.Username.substr(0,16) || null;
  759. game.PlayerSettings[0].socket_id = m_onlineInterface.SocketID;
  760. GameController.onlineModeMatchSettings = game.exportSettings();
  761. game.GameMode = Mode.ONLINE_WAITING_ROOM;
  762. game.LevelData.stage = "smashville";
  763. game.LevelData.usingLives = false;
  764. game.LevelData.usingTime = false;
  765. game.LevelData.teams = false;
  766. game.LevelData.showEntrances = false;
  767. game.PlayerSettings.push(new PlayerSetting());
  768. game.PlayerSettings[1].exist = true;
  769. game.PlayerSettings[1].character = "fox";
  770. game.PlayerSettings[0].team = -1;
  771. game.PlayerSettings[1].team = -1;
  772. game.PlayerSettings[1].level = 9;
  773. game.PlayerSettings[2].exist = true;
  774. game.PlayerSettings[2].character = β€œsonic”;
  775. game.PlayerSettings[2].team = -1;
  776. game.PlayerSettings[2].level = 9;
  777. Utils.setRandSeed(game.LevelData.randSeed);
  778. Utils.shuffleRandom();
  779. Main.prepRandomCharacters(game.PlayerSettings.length);
  780. if(game.PlayerSettings[0].character == "random")
  781. {
  782. GameController.onlineModeMatchSettings.playerSettings[0].character = Main.RandCharList[0].StatsName;
  783. game.PlayerSettings[0].character = GameController.onlineModeMatchSettings.playerSettings[0].character;
  784. game.PlayerSettings[0].isRandom = true;
  785. GameController.onlineModeMatchSettings.playerSettings[0].isRandom = true;
  786. }
  787. ResourceManager.queueResources([game.LevelData.stage]);
  788. ResourceManager.queueResources(["random"]);
  789. i = 1;
  790. while(i <= game.PlayerSettings.length)
  791. {
  792. if(game.PlayerSettings[i - 1] && game.PlayerSettings[i - 1].exist && game.PlayerSettings[i - 1].character != null && game.PlayerSettings[i - 1].character != "xp")
  793. {
  794. ResourceManager.queueResources([game.PlayerSettings[i - 1].character == "random"?Main.RandCharList[i - 1].StatsName:game.PlayerSettings[i - 1].character]);
  795. }
  796. i++;
  797. }
  798. ResourceManager.load({"oncomplete":callback});
  799. }
  800.  
  801. public static function PERFORMALL() : void
  802. {
  803. if(Active)
  804. {
  805. m_onlineInterface.PERFORMALL();
  806. updateControls();
  807. }
  808. }
  809. }
  810. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement