Project1

标题: 用了Online_Chat.js网络插件聊天白屏 [打印本页]

作者: 萌新一个人    时间: 2021-10-12 10:54
标题: 用了Online_Chat.js网络插件聊天白屏
用了这种Online_Chat.js网络插件,可以同屏,但是别人在打怪界面,我发消息打怪的就会白屏卡死,怎么解决啊,具体就是我在聊天框发个消息,别的处于待机的玩家没事,别的处于打怪界面的玩家集体白屏卡死

QQ截图20211012105121.png (33.99 KB, 下载次数: 139)

QQ截图20211012105121.png

作者: play337    时间: 2021-10-12 11:30
01. Online_Chat.js 你要發出來不然我們怎麼幫你看?
02. 不然發個範例工程來看.
03. 不然要有個連結可以看.

作者: 萌新一个人    时间: 2021-10-12 11:50
  1. var Imported = Imported || {};
  2. Imported.Online_Chat = true;

  3. (function () {
  4. var Nasty = Nasty || {};
  5. //=============================================================================
  6. // Online Chat
  7. // Version: 1.0.5 - Allows for chat to be retained on map transfer/menu/battle
  8. // Version: 1.0.4 - Add function to enable/disable chat and chat by leader name
  9. //=============================================================================

  10. //=============================================================================
  11. /*:
  12. * @plugindesc Online Chat for Neldersons Online Core
  13. * <Online_Chat>
  14. * @author Nelderson
  15. *
  16. * @param Chat Key Code
  17. * @desc Key code to toggle the chat on/off (Default F1 - 112)
  18. * @default 112
  19. *
  20. * @param Chat with Username or Character Name
  21. * @desc 0=Username 1=Character Name (Leader of party)
  22. * @default 0
  23. *
  24. * @param Input Character limit
  25. * @desc Limit the amount of characters per message
  26. * @default 80
  27. *
  28. * @param Room Name by Map
  29. * @desc Change the room name by map that you are on?
  30. * @default false
  31. *
  32. * @param Recall Message Limit
  33. * @desc Recalls this many messages when switching maps/battles/etc
  34. * @default 20
  35. *
  36. * @param Chat Username Color
  37. * @desc Color of usernames in chat window
  38. * @default #c92cac
  39. *
  40. * @param Chat Text Color
  41. * @desc Color of chat text in chat window
  42. * @default #000000
  43. *
  44. * @param Chat Text Window Width
  45. * @desc Chat Window width
  46. * @default 800
  47. *
  48. * @param Chat Text Window Height
  49. * @desc Chat Window Height
  50. * @default 500
  51. *
  52. * @param Chat Text Window Offset X
  53. * @desc Offset X Poisition of Chat Text Window from CENTER
  54. * @default 0
  55. *
  56. * @param Chat Text Window Offset Y
  57. * @desc Offset Y Poisition of Chat Text Window from CENTER
  58. * @default 0
  59. *
  60. * @param Chat Text Font
  61. * @desc Font for Chat Text (Defaults to game default)
  62. * @default
  63. *
  64. * @param Chat Text Font Size
  65. * @desc Font size for Chat Text
  66. * @default 15
  67. *
  68. * @param Chat Text Background Color
  69. * @desc Background color and transparency for Chat Window
  70. * @default rgba(255,255,255,0.7)
  71. *
  72. * @param Chat Text Background Picture
  73. * @desc Background Pic from img/pictures folder instead of Background Color
  74. * @default
  75. *
  76. * @param Chat Input Window Width
  77. * @desc Chat Input Window width
  78. * @default 600
  79. *
  80. * @param Chat Input Window Height
  81. * @desc Chat Input Window Height
  82. * @default 40
  83. *
  84. * @param Chat Input Window Offset X
  85. * @desc Offset X Poisition of Chat Input Window from CENTER
  86. * @default 0
  87. *
  88. * @param Chat Input Window Offset Y
  89. * @desc Offset Y Poisition of Chat Input Window from CENTER
  90. * @default 564
  91. *
  92. * @param Input Text Font
  93. * @desc Font for Input Text (Defaults to game default)
  94. * @default
  95. *
  96. * @param Input Text Font Size
  97. * @desc Font size for Input Text
  98. * @default 15
  99. *
  100. * @param Input Text Background Color
  101. * @desc Background color and transparency for Input Window
  102. * @default rgba(255,255,255,0.7)
  103. *
  104. * @param Input Text Background Picture
  105. * @desc Background Pic from img/pictures folder instead of Background Color
  106. * @default #FFFFFF
  107. *
  108. * @help
  109. * ============================================================================
  110. * Introduction and Instructions
  111. * ============================================================================
  112. * This plugin allows you to chat with other players.
  113. *
  114. * There are two ways to access the chat windows.  Either by plugin
  115. * command or the Key Code from the parameters(Default F1).
  116. *
  117. * The only thing that is overwritten are the defaults for the SPACEBAR
  118. * and Z key within the Input Keymapper so that they will not interfere
  119. * with typing in the chat input window
  120. *
  121. * =====================
  122. * ===Plugin Commands===
  123. * =====================
  124. *
  125. * ToggleChat - Turns Chat Windows On/Off
  126. * SendChatMessage - Sends the message in the chat input window.
  127. * EnableChat - Enables chat to be opened
  128. * DisableChat - Disables chat to be opened
  129. *
  130. */
  131. //=============================================================================
  132. var socket = null;
  133. var chatHistory = [];
  134. Nasty.Parameters = $plugins.filter(function(p)
  135.          { return p.description.contains('<Online_Chat>');})[0].parameters;

  136.   //Chat text window
  137.   var textWinWidth = Nasty.Parameters['Chat Text Window Width'];
  138.   var textWinHeight = Nasty.Parameters['Chat Text Window Height'];
  139.   var textWinOffsetX = Nasty.Parameters['Chat Text Window Offset X'];
  140.   var textWinOffsetY = Nasty.Parameters['Chat Text Window Offset Y'];
  141.   var textWinFont = Nasty.Parameters['Chat Text Font'];
  142.   var textWinFontSize = Nasty.Parameters['Chat Text Font Size'];
  143.   var textWinBack = Nasty.Parameters['Chat Text Background Color'];
  144.   var textWinBackPic = Nasty.Parameters['Chat Text Background Picture'];

  145.   //Chat input window
  146.   var inputWinWidth = Nasty.Parameters['Chat Input Window Width'];
  147.   var inputWinHeight = Nasty.Parameters['Chat Input Window Height'];
  148.   var inputWinOffsetX = Nasty.Parameters['Chat Input Window Offset X'];
  149.   var inputWinOffsetY = Nasty.Parameters['Chat Input Window Offset Y'];
  150.   var inputWinFont = Nasty.Parameters['Input Text Font'];
  151.   var inputWinFontSize = Nasty.Parameters['Input Text Font Size'];
  152.   var inputWinBack = Nasty.Parameters['Input Text Background Color'];
  153.   var inputWinBackPic = Nasty.Parameters['Input Text Background Picture'];
  154.   var inputCharLimit = Nasty.Parameters['Input Character limit'];

  155.   var chatKeyCode = Nasty.Parameters['Chat Key Code'];
  156.   var chatUserColor = Nasty.Parameters['Chat Username Color'];
  157.   var chatTextColor = Nasty.Parameters['Chat Text Color'];
  158.   var roomMapNameFlag = Nasty.Parameters['Room Name by Map'];
  159.   var NetPlayerChatNameType = Number(Nasty.Parameters['Chat with Username or Character Name']);
  160.   var recallMessageLimit = Number(Nasty.Parameters['Recall Message Limit']);

  161.   var networkName = '';

  162. var OnlineMV_ChatSystem_SocketConn_Alias = Game_Network.prototype.connectSocketsAfterLogin;
  163. Game_Network.prototype.connectSocketsAfterLogin = function(){
  164.   OnlineMV_ChatSystem_SocketConn_Alias.call(this);

  165.   $gameNetwork.connectSocket('chat','/chat',false);
  166.   socket = $gameNetwork._socket.chat;
  167.   Nasty.chatEnabled = true;

  168.   socket.on('MyID',function(data){
  169.     networkName = data.name;
  170.         });

  171.   socket.on('messageServer', function(data){
  172.     var chat = document.getElementById('txtarea');
  173.     var message = document.createElement('div');
  174.     var user = document.createElement('span');
  175.     var chatText = document.createElement('span');
  176.     //Combine user/text spans to div container
  177.     user.style.color = chatUserColor;
  178.     chatText.style.color = chatTextColor;
  179.     user.textContent = data.id+ ': ';
  180.     chatText.textContent = data.message;
  181.     message.appendChild(user);
  182.     message.appendChild(chatText);
  183.     chatHistory.push([user, chatText]);
  184.     //Append to chat text div
  185.     chat.appendChild(message);
  186.     chat.scrollTop = chat.scrollHeight;
  187.   });
  188. };

  189. //=============================================================================
  190. //  GAME CHAT code
  191. //=============================================================================

  192.   var OnlineChat_createDisplayObj_Scene_Map = Scene_Map.prototype.createDisplayObjects;
  193.   Scene_Map.prototype.createDisplayObjects = function() {
  194.     OnlineChat_createDisplayObj_Scene_Map.call(this);
  195.     this.createChatDOMElements();
  196.     this.appendChatHistory();
  197.   };

  198.   Scene_Map.prototype.appendChatHistory = function(){
  199.   var diff = chatHistory.length - recallMessageLimit;
  200.   if (diff>0) chatHistory.splice(0,diff);
  201.   var chat = document.getElementById('txtarea');
  202.     for (var i=0;i<chatHistory.length;i++){
  203.       var message = document.createElement('div');
  204.       message.appendChild(chatHistory[i][0]);
  205.       message.appendChild(chatHistory[i][1]);
  206.       chat.appendChild(message);
  207.     }
  208.   };

  209.    Scene_Map.prototype.createChatDOMElements = function(){
  210.      //Chat Bar for Inputing messages
  211.      this.chatinput = document.createElement('INPUT');
  212.      this.chatinput.id = 'chatInput';
  213.      this.chatinput.maxLength = inputCharLimit;
  214.      this.chatinput.style.fontSize = inputWinFont + 'px';
  215.      this.chatinput.style.fontStyle = inputWinFont;
  216.      this.chatinput.style.color = '#ffffff';
  217.      this.chatinput.style.fontStyle = '';
  218.      this.chatinput.style.position = 'absolute';
  219.      this.chatinput.style.textIndent = '15px';
  220.      this.chatinput.style.zIndex = 100;
  221.      this.chatinput.placeholder = '世界频道';
  222.      this.chatinput.style.color = '#FFFFFF';
  223.      this.chatinput.style.border = 'none';
  224.      this.chatinput.style.visibility = 'visible';
  225.      if (inputWinBackPic===''){
  226.        this.chatinput.style.background = inputWinBack;
  227.      }else{
  228.        this.chatinput.style.backgroundImage = "url('img/pictures/"+inputWinBackPic+".png')";
  229.      }
  230.      //Chat Message area
  231.      this.txtarea = document.createElement('div');
  232.      this.txtarea.id = 'txtarea';
  233.      this.txtarea.style.padding = '15px';
  234.      this.txtarea.style.fontSize = textWinFontSize + 'px';
  235.      this.txtarea.style.fontStyle = textWinFont;
  236.      this.txtarea.style.position = 'absolute';
  237.      this.txtarea.style.overflowY = 'auto';
  238.      this.txtarea.style.width = textWinWidth + 'px';
  239.      this.txtarea.style.height = textWinHeight + 'px';
  240.      this.txtarea.style.zIndex = 99;
  241.      this.txtarea.style.visibility = 'visible';
  242.      if (textWinBackPic===''){
  243.        this.txtarea.style.background = textWinBack;
  244.      }else{
  245.        this.txtarea.style.backgroundImage = "url('img/pictures/"+textWinBackPic+".png')";
  246.      }
  247.      //Add and adjust both DOM elements
  248.      document.body.appendChild(this.txtarea);
  249.      document.body.appendChild(this.chatinput);
  250.      //--Mobile fix for input--
  251.      $("#chatInput").tap(function(){$("#chatInput").focus();});
  252.      //-------------------------
  253.      Graphics._centerElement(this.chatinput);
  254.      Graphics._centerElement(this.txtarea);
  255.      this.chatinput.style.width = inputWinWidth +'px';
  256.      this.chatinput.style.height = inputWinHeight + 'px';
  257.      this.chatinput.style.top = inputWinOffsetY +'px';
  258.      this.chatinput.style.left = inputWinOffsetX +'px';
  259.      this.txtarea.style.left = textWinOffsetX + 'px';
  260.      this.txtarea.style.top = textWinOffsetY + 'px';

  261.      var that = this;
  262.      $("#chatInput").keypress(function(e){
  263.                         if (e.which == 13) { //enter
  264.                                 that.sendChatMessage();
  265.                         }
  266.                 });
  267.    };

  268.    var Online_Chat_SceneMap_isMenuCalled_alias = Scene_Map.prototype.isMenuCalled;
  269.    Scene_Map.prototype.isMenuCalled = function() {
  270.     if (document.activeElement===document.getElementById('chatInput')) return false;
  271.     return Online_Chat_SceneMap_isMenuCalled_alias.call(this);
  272.    };

  273.    var Online_Chat_SceneMap_ProcessTouch_alias = Scene_Map.prototype.processMapTouch;
  274.    Scene_Map.prototype.processMapTouch = function() {
  275.      if (document.activeElement!==document.getElementById('chatInput')){
  276.        Online_Chat_SceneMap_ProcessTouch_alias.call(this);
  277.      }
  278.    };

  279.    var Chat_Online_sceneMap_updtSceneAlias = Scene_Map.prototype.updateScene;
  280.    Scene_Map.prototype.updateScene = function() {
  281.      Chat_Online_sceneMap_updtSceneAlias.call(this);
  282.        if (!SceneManager.isSceneChanging()) {
  283.            this.updateChat();
  284.        }
  285.    };

  286.    Scene_Map.prototype.updateChat = function(){
  287.      if (document.activeElement===document.getElementById('chatInput')){
  288.        if (Input.isTriggered('ok')){
  289.          this.sendChatMessage();
  290.        }
  291.      }
  292.      //Toggle Chat Windows On/Off
  293.      if (Input.isTriggered('chat')){
  294.        this.toggleChat();
  295.      }
  296.    };

  297.    Scene_Map.prototype.sendChatMessage = function(){
  298.    if (NetPlayerChatNameType===1) networkName=$gameParty.leader()._name;
  299.      var value = document.getElementById('chatInput').value;
  300.      value = value.trim();
  301.      if (value==='') return;
  302.      //Emit message to server
  303.        socket.emit('clientMessage',{
  304.          id: networkName,
  305.          message: value
  306.        });
  307.      document.getElementById('chatInput').value = '';
  308.    };

  309.    Scene_Map.prototype.toggleChat = function(){
  310.      if (!Nasty.chatEnabled) {
  311.       document.getElementById('txtarea').style.visibility = 'hidden';
  312.       document.getElementById('chatInput').style.visibility = 'hidden';
  313.       return;
  314.      }
  315.      if (document.getElementById('txtarea').style.visibility ==='hidden'){
  316.        document.getElementById('txtarea').style.visibility = 'visible';
  317.        document.getElementById('chatInput').style.visibility = 'visible';
  318.        $("#chatInput").focus();
  319.      }else{
  320.        document.getElementById('txtarea').style.visibility = 'hidden';
  321.        document.getElementById('chatInput').style.visibility = 'hidden';
  322.      }
  323.    };

  324.    var NastySceneMapChat_Terminate = Scene_Map.prototype.terminate;
  325.    Scene_Map.prototype.terminate = function() {
  326.        NastySceneMapChat_Terminate.call(this);
  327.        document.body.removeChild(this.txtarea);
  328.        document.body.removeChild(this.chatinput);
  329.    };

  330.    var OnlineChat_gamePlayer_canMoveAlias = Game_Player.prototype.canMove;
  331.    Game_Player.prototype.canMove = function() {
  332.      if (document.activeElement===document.getElementById('chatInput')){
  333.        return false;
  334.      }
  335.      return OnlineChat_gamePlayer_canMoveAlias.call(this);
  336.    };

  337.    var Nel_OnlineChat_pluginCommands_alias = Game_Interpreter.prototype.pluginCommand;
  338.    Game_Interpreter.prototype.pluginCommand = function(command, args) {
  339.        Nel_OnlineChat_pluginCommands_alias.call(this, command, args);
  340.        if (command.toUpperCase() === 'TOGGLECHAT'){
  341.          if (SceneManager._scene instanceof Scene_Map){
  342.            SceneManager._scene.toggleChat();
  343.          }
  344.        }
  345.        if (command.toUpperCase() === 'SENDCHATMESSAGE'){
  346.          if (SceneManager._scene instanceof Scene_Map){
  347.            SceneManager._scene.sendChatMessage();
  348.          }
  349.        }
  350.        if (command.toUpperCase() === 'ENABLECHAT'){
  351.           Nasty.chatEnabled = true;
  352.        }
  353.        if (command.toUpperCase() === 'DISABLECHAT'){
  354.           Nasty.chatEnabled = false;
  355.           if (SceneManager._scene instanceof Scene_Map){
  356.             SceneManager._scene.toggleChat();
  357.           }
  358.        }
  359.      };

  360.   //Re-Map Input Keys
  361.   Input.keyMapper[chatKeyCode] = 'chat';
  362.   Input.keyMapper['90'] = 'none'; // Z
  363.   Input.keyMapper['32'] = 'none'; // SpaceBar
  364. })();
复制代码

作者: 萌新一个人    时间: 2021-10-12 11:56
play337 发表于 2021-10-12 11:30
01. Online_Chat.js 你要發出來不然我們怎麼幫你看?
02. 不然發個範例工程來看.
03. 不然要有個連結可以看. ...

大佬,代码在楼下,太多了,就如我说的那样,我发个聊天消息,其他在战斗界面的玩家立马白屏卡死,
作者: play337    时间: 2021-10-12 13:10
本帖最后由 play337 于 2021-10-12 13:12 编辑

這個我之前有裝阿!
https://forums.rpgmakerweb.com/i ... -online-core.79938/

你要先裝他要求的環境吧...
01.有很多插件要裝
02.最重要的是 你那個伺服環境要用起來
03.我測試的時候.發訊息不會當機阿. 我開兩個瀏覽器測試.都不會當機阿

所以程式應該是沒有問題的...
你有開瀏覽器測試嗎?

還是有另一種可能. 你在瀏覽器測試沒有問題. 但是其他人測試有問題...

是怎麼樣的情況呢?

對了! 測試的時候 你要用 http://localhost/
這樣下去測試...你可不能用RPG MAKER MV 的測試去測試...這樣是沒有網路連線環境的...你懂吧.... ^_^
作者: 萌新一个人    时间: 2021-10-12 13:33
play337 发表于 2021-10-12 13:10
這個我之前有裝阿!
https://forums.rpgmakerweb.com/index.php?threads/neldersons-mv-online-core.79938/
...

我什么都部署好了,包括服务器上面测试,本地测试,这套插件我也装了很久了,一直没什么问题,直到昨天,我一个客服端在战斗界面,另一个客服端发送消息才发现这个问题,后面开三个窗口,反复测试,就是只要有人发消息,在战斗界面的人会白屏卡死,其他没问题,然后我又把别人装这套插件的范例工程拿来测试,同样是这个问题
作者: 萌新一个人    时间: 2021-10-12 15:14
萌新一个人 发表于 2021-10-12 13:33
我什么都部署好了,包括服务器上面测试,本地测试,这套插件我也装了很久了,一直没什么问题,直到昨天, ...

谢谢,如果是这样就证实了是插件BUG,不是我设置的问题了,那问一下有办法加个开关吗?具体就是在传送到有怪的地图前关闭这个聊天的功能,这样在刷怪的时候,别人发信息就没有影响了,能实现吗?
作者: 百里_飞柳    时间: 2021-10-12 15:38
* =====================
* ===Plugin Commands===
* =====================
*
* ToggleChat - Turns Chat Windows On/Off
* SendChatMessage - Sends the message in the chat input window.
* EnableChat - Enables chat to be opened
* DisableChat - Disables chat to be opened

插件指令 DisableChat 没法关闭这个功能吗
作者: 萌新一个人    时间: 2021-10-12 16:06
百里_飞柳 发表于 2021-10-12 15:38
* =====================
* ===Plugin Commands===
* =====================

这个我试过了,不行。我也不懂代码,这个应该是禁用聊天窗口,所以别人发信息我这里还是能接收的,只是不显示了,所以还是白屏
作者: 百里_飞柳    时间: 2021-10-12 17:24
我觉得报错原因是 Scene_Battle 里面没有这个聊天框
但是它是实时接收更新聊天文本的
导致182行提取的chat对象不存在

具体怎么改我就不知道了,可能可以:如果chat不存在,就先把接收到的data存起来,回到地图上时再更新;直接扔掉
作者: 萌新一个人    时间: 2021-10-12 17:56
百里_飞柳 发表于 2021-10-12 17:24
我觉得报错原因是 Scene_Battle 里面没有这个聊天框
但是它是实时接收更新聊天文本的
导致182行提取的chat ...

有道理,如果按照你说的方法说,直接扔掉要怎么表达啊,代码   谢谢大佬了
作者: 萌新一个人    时间: 2021-10-13 14:07
  1. var Imported = Imported || {};
  2. Imported.Online_Login_Core = true;

  3. (function () {
  4. var Nasty = Nasty || {};
  5. //=============================================================================
  6. // Online Login Core
  7. // Version: 1.1.5 - Added Password Reset Logic
  8. // Version: 1.1.4 - Added event switches for when users login multiple times
  9. // Version: 1.1.3
  10. //=============================================================================

  11. //=============================================================================
  12. /*:
  13. * @plugindesc Login window for Neldersons Online Core
  14. *<Online_Login_Core>
  15. * @author Nelderson and SirMcPotato/Vinxce
  16. *
  17. * @param Force Login on Startup
  18. * @desc Make the title screen into a login screen
  19. * @default true
  20. *
  21. * @param socket.io connection
  22. * @desc Automatically connects to socket once signed in.
  23. * @default true
  24. *
  25. * @param Switch on First Shutdown
  26. * @desc Original user that is logged in will have this switch flipped
  27. * @default 1
  28. *
  29. * @param Switch on Second Shutdown
  30. * @desc Second user that is logged in will have this switch flipped
  31. * @default 2
  32. *
  33. * @help
  34. * ============================================================================
  35. * Introduction and Instructions
  36. * ============================================================================
  37. * You can use the login window in two ways.
  38. *
  39. *  1.  Set Force login on Startup parameter to true:
  40. *      This will force the login screen on startup.
  41. *
  42. *  2.  Set Force login on Startup parameter to false:
  43. *      You can use this plugin command to pop up the
  44. *      login window at any point in your game:
  45. *
  46. *         Online_Login
  47. *
  48. *   The socket.io connection parameter refers to if you
  49. *   want to automatically upgrade to sockets after login.
  50. *
  51. */
  52. //=============================================================================
  53. Nasty.Parameters = $plugins.filter(function(p)
  54.                 { return p.description.contains('<Online_Login_Core>');})[0].parameters;


  55.                 var Nel_online_login_core_plugincomm_alias = Game_Interpreter.prototype.pluginCommand;
  56.     Game_Interpreter.prototype.pluginCommand = function(command, args) {
  57.         Nel_online_login_core_plugincomm_alias.call(this, command, args);
  58.         if (command.toUpperCase() === 'ONLINE_LOGIN') {
  59.                                         if ($gameNetwork._token===0){
  60.                                                 SceneManager.goto(MMO_Scene_Title);
  61.                                         }
  62.         }
  63.       };

  64.         //----------------------------------------------------------------------------
  65.         // MMO_Scene_Title
  66.         //
  67.         // Title scene including login form.
  68.   //----------------------------------------------------------------------------

  69.         function MMO_Scene_Title() {
  70.             this.initialize.apply(this, arguments);
  71.         }

  72.         MMO_Scene_Title.prototype = Object.create(Scene_Base.prototype);
  73.         MMO_Scene_Title.prototype.constructor = MMO_Scene_Title;

  74.         MMO_Scene_Title.prototype.initialize = function() {
  75.             Scene_Base.prototype.initialize.call(this);
  76.         };

  77.         MMO_Scene_Title.prototype.reBindInput = function() {
  78.                 Input.initialize();
  79.         };

  80.         MMO_Scene_Title.prototype.create = function() {
  81.             Scene_Base.prototype.create.call(this);
  82.             this.createBackground();
  83.         };

  84.         MMO_Scene_Title.prototype.start = function() {
  85.             Scene_Base.prototype.start.call(this);
  86.             SceneManager.clearStack();
  87.             this.playTitleMusic();
  88.             this.startFadeIn(this.fadeSpeed(), false);
  89.             this.createLoginForm();
  90.         };

  91.         MMO_Scene_Title.prototype.update = function() {
  92.             Scene_Base.prototype.update.call(this);
  93.         };

  94.         MMO_Scene_Title.prototype.isBusy = function() {
  95.             return Scene_Base.prototype.isBusy.call(this);
  96.         };

  97.         MMO_Scene_Title.prototype.terminate = function() {
  98.             Scene_Base.prototype.terminate.call(this);
  99.             SceneManager.snapForBackground();
  100.         };


  101.         MMO_Scene_Title.prototype.createRegistrationForm = function() {
  102.                 $("#ErrorPrinter").html(
  103.                         '<div id="RegisterForm" class="panel panel-primary" style="width:'+(Graphics.boxWidth - (Graphics.boxWidth / 3))+'px">'+
  104.                                 '<div class="panel-heading">注册账号</div>'+
  105.                                 '<div class="panel-body">'+
  106.                                         '<div id="loginErrBox"></div>'+
  107.                                   '<div class="form-group">'+
  108.                                     '<input type="text" id="regUsername" name="username" placeholder="输入用户名" class="form-control"/>'+
  109.                                   '</div>'+
  110.                                           '<div class="form-group">'+
  111.                             '<input type="text" name="email" id="regEmail"  placeholder="电子邮件地址 随便填" class="form-control"/>'+
  112.                                   '</div>'+
  113.                                           '<div class="form-group">'+
  114.                             '<input type="password" name="password" id="regPassword" placeholder="输入密码" class="form-control"/>'+
  115.                                           '</div>'+
  116.                                           '<button id="btnSubmit"type="submit" class="btn btn-default">提交</button>'+
  117.                                                 '<button id ="btnCancel" type="button" class="btn btn-primary">取消</button>'+
  118.                                 '</div>'+
  119.                         '</div>');

  120.                         var that = this;
  121.                         $(".form-control").keypress(function(e){
  122.                                 if (e.which == 13) { //enter
  123.                                         that.registerAttempt();
  124.                                 }
  125.                         });
  126.       $("#regUsername").tap(function(){$("#regUsername").focus();});
  127.       $("#regEmail").tap(function(){$("#regEmail").focus();});
  128.       $("#regPassword").tap(function(){$("#regPassword").focus();});
  129.       $("#btnSubmit").bind("click touchstart",function(){that.registerAttempt();});
  130.       $("#btnCancel").bind("click touchstart",function(){that.createLoginForm();});

  131.                 };
  132.         // Testing purpose, need to be rewritten into something more modulable,
  133.         // maybe using template file?
  134.         // Can be wise to work on a set of sprite-based form inputs for
  135.         // a better visual integration.
  136.         MMO_Scene_Title.prototype.createLoginForm = function() {
  137.                 $("#ErrorPrinter").html(
  138.                         '<div id="LoginForm" class="panel panel-primary" style="width:'+(Graphics.boxWidth - (Graphics.boxWidth / 3))+'px">'+
  139.                                 '<div class="panel-heading">登陆</div>'+
  140.                                 '<div class="panel-body">'+
  141.                                         '<div id="loginErrBox"></div>'+
  142.                                         '<div class="input-group">'+
  143.                                                 '<span class="input-group-addon" id="username-addon"><i class="fa fa-user"></i></span>'+
  144.                                                 '<input type="text" class="form-control login-input" id="inputUsername" placeholder="用户名" aria-describedby="username-addon">'+
  145.                                         '</div><br>'+
  146.                                         '<div class="input-group">'+
  147.                                                 '<span class="input-group-addon" id="password-addon"><i class="fa fa-lock"></i></span>'+
  148.                                                 '<input type="password" class="form-control login-input" id="inputPassword" placeholder="密码" aria-describedby="password-addon">'+
  149.                                         '</div><br>'+
  150.                                         '<button id="btnConnect" class="btn btn-primary">登陆</button>'+
  151.                                         '<button id="btnRegister" class="btn btn-default">注册</button>'+
  152.           '<button id="btnForgotPassword" class="btn btn-link btn-sm">找回密码?</button>'+
  153.                                 '</div>'+
  154.                         '</div>');

  155.                 //Bind commands
  156.                 var that = this;
  157.                 $(".login-input").keypress(function(e){
  158.                         if (e.which == 13) { //enter
  159.                                 that.connectAttempt();
  160.                         }
  161.                 });
  162.     $("#inputUsername").tap(function(){$("#inputUsername").focus();});
  163.     $("#inputPassword").tap(function(){$("#inputPassword").focus();});
  164.                 $("#btnConnect").bind("click touchstart",function(){that.connectAttempt();});
  165.                 $("#btnRegister").bind("click touchstart",function(){that.createRegistrationForm();});
  166.     $("#btnForgotPassword").bind("click touchstart",function(){that.createLostPasswordForm();});
  167.     $("#inputUsername").focus();
  168.         };

  169.         MMO_Scene_Title.prototype.createActivationForm = function() {
  170.                 $("#ErrorPrinter").html(
  171.                         '<div id="ActivationForm" class="panel panel-primary" style="width:'+(Graphics.boxWidth - (Graphics.boxWidth / 3))+'px">'+
  172.                                 '<div class="panel-heading">Activation</div>'+
  173.                                 '<div class="panel-body">'+
  174.                                         '<div id="loginErrBox"></div>'+
  175.                                         '<div class="input-group">'+
  176.                                         '</div><br>'+
  177.                                         '<button id="btnActLogin" class="btn btn-primary">Login</button>'+
  178.                                 '</div>'+
  179.                         '</div>');

  180.                 //Bind commands
  181.                 var that = this;
  182.                 $(".login-input").keypress(function(e){
  183.                         if (e.which == 13) { //enter
  184.                                 that.createLoginForm();
  185.                         }
  186.                 });
  187.     $("#btnActLogin").bind("click touchstart",function(){that.createLoginForm();});
  188.         };

  189.         MMO_Scene_Title.prototype.displayError = function(msg) {
  190.                 $("#loginErrBox").html('<div class="alert alert-danger fade in">'+msg+'</div>');
  191.         };
复制代码

作者: 萌新一个人    时间: 2021-10-13 14:14
  1. var Imported = Imported || {};
  2. Imported.Online_Login_Core = true;

  3. (function () {
  4. var Nasty = Nasty || {};
  5. //=============================================================================
  6. // Online Login Core
  7. // Version: 1.1.5 - Added Password Reset Logic
  8. // Version: 1.1.4 - Added event switches for when users login multiple times
  9. // Version: 1.1.3
  10. //=============================================================================

  11. //=============================================================================
  12. /*:
  13. * @plugindesc Login window for Neldersons Online Core
  14. *<Online_Login_Core>
  15. * @author Nelderson and SirMcPotato/Vinxce
  16. *
  17. * @param Force Login on Startup
  18. * @desc Make the title screen into a login screen
  19. * @default true
  20. *
  21. * @param socket.io connection
  22. * @desc Automatically connects to socket once signed in.
  23. * @default true
  24. *
  25. * @param Switch on First Shutdown
  26. * @desc Original user that is logged in will have this switch flipped
  27. * @default 1
  28. *
  29. * @param Switch on Second Shutdown
  30. * @desc Second user that is logged in will have this switch flipped
  31. * @default 2
  32. *
  33. * @help
  34. * ============================================================================
  35. * Introduction and Instructions
  36. * ============================================================================
  37. * You can use the login window in two ways.
  38. *
  39. *  1.  Set Force login on Startup parameter to true:
  40. *      This will force the login screen on startup.
  41. *
  42. *  2.  Set Force login on Startup parameter to false:
  43. *      You can use this plugin command to pop up the
  44. *      login window at any point in your game:
  45. *
  46. *         Online_Login
  47. *
  48. *   The socket.io connection parameter refers to if you
  49. *   want to automatically upgrade to sockets after login.
  50. *
  51. */
  52. //=============================================================================
  53. Nasty.Parameters = $plugins.filter(function(p)
  54.                 { return p.description.contains('<Online_Login_Core>');})[0].parameters;


  55.                 var Nel_online_login_core_plugincomm_alias = Game_Interpreter.prototype.pluginCommand;
  56.     Game_Interpreter.prototype.pluginCommand = function(command, args) {
  57.         Nel_online_login_core_plugincomm_alias.call(this, command, args);
  58.         if (command.toUpperCase() === 'ONLINE_LOGIN') {
  59.                                         if ($gameNetwork._token===0){
  60.                                                 SceneManager.goto(MMO_Scene_Title);
  61.                                         }
  62.         }
  63.       };

  64.         //----------------------------------------------------------------------------
  65.         // MMO_Scene_Title
  66.         //
  67.         // Title scene including login form.
  68.   //----------------------------------------------------------------------------

  69.         function MMO_Scene_Title() {
  70.             this.initialize.apply(this, arguments);
  71.         }

  72.         MMO_Scene_Title.prototype = Object.create(Scene_Base.prototype);
  73.         MMO_Scene_Title.prototype.constructor = MMO_Scene_Title;

  74.         MMO_Scene_Title.prototype.initialize = function() {
  75.             Scene_Base.prototype.initialize.call(this);
  76.         };

  77.         MMO_Scene_Title.prototype.reBindInput = function() {
  78.                 Input.initialize();
  79.         };

  80.         MMO_Scene_Title.prototype.create = function() {
  81.             Scene_Base.prototype.create.call(this);
  82.             this.createBackground();
  83.         };

  84.         MMO_Scene_Title.prototype.start = function() {
  85.             Scene_Base.prototype.start.call(this);
  86.             SceneManager.clearStack();
  87.             this.playTitleMusic();
  88.             this.startFadeIn(this.fadeSpeed(), false);
  89.             this.createLoginForm();
  90.         };

  91.         MMO_Scene_Title.prototype.update = function() {
  92.             Scene_Base.prototype.update.call(this);
  93.         };

  94.         MMO_Scene_Title.prototype.isBusy = function() {
  95.             return Scene_Base.prototype.isBusy.call(this);
  96.         };

  97.         MMO_Scene_Title.prototype.terminate = function() {
  98.             Scene_Base.prototype.terminate.call(this);
  99.             SceneManager.snapForBackground();
  100.         };


  101.         MMO_Scene_Title.prototype.createRegistrationForm = function() {
  102.                 $("#ErrorPrinter").html(
  103.                         '<div id="RegisterForm" class="panel panel-primary" style="width:'+(Graphics.boxWidth - (Graphics.boxWidth / 3))+'px">'+
  104.                                 '<div class="panel-heading">注册账号</div>'+
  105.                                 '<div class="panel-body">'+
  106.                                         '<div id="loginErrBox"></div>'+
  107.                                   '<div class="form-group">'+
  108.                                     '<input type="text" id="regUsername" name="username" placeholder="输入用户名" class="form-control"/>'+
  109.                                   '</div>'+
  110.                                           '<div class="form-group">'+
  111.                             '<input type="text" name="email" id="regEmail"  placeholder="电子邮件地址 随便填" class="form-control"/>'+
  112.                                   '</div>'+
  113.                                           '<div class="form-group">'+
  114.                             '<input type="password" name="password" id="regPassword" placeholder="输入密码" class="form-control"/>'+
  115.                                           '</div>'+
  116.                                           '<button id="btnSubmit"type="submit" class="btn btn-default">提交</button>'+
  117.                                                 '<button id ="btnCancel" type="button" class="btn btn-primary">取消</button>'+
  118.                                 '</div>'+
  119.                         '</div>');

  120.                         var that = this;
  121.                         $(".form-control").keypress(function(e){
  122.                                 if (e.which == 13) { //enter
  123.                                         that.registerAttempt();
  124.                                 }
  125.                         });
  126.       $("#regUsername").tap(function(){$("#regUsername").focus();});
  127.       $("#regEmail").tap(function(){$("#regEmail").focus();});
  128.       $("#regPassword").tap(function(){$("#regPassword").focus();});
  129.       $("#btnSubmit").bind("click touchstart",function(){that.registerAttempt();});
  130.       $("#btnCancel").bind("click touchstart",function(){that.createLoginForm();});

  131.                 };
  132.         // Testing purpose, need to be rewritten into something more modulable,
  133.         // maybe using template file?
  134.         // Can be wise to work on a set of sprite-based form inputs for
  135.         // a better visual integration.
  136.         MMO_Scene_Title.prototype.createLoginForm = function() {
  137.                 $("#ErrorPrinter").html(
  138.                         '<div id="LoginForm" class="panel panel-primary" style="width:'+(Graphics.boxWidth - (Graphics.boxWidth / 3))+'px">'+
  139.                                 '<div class="panel-heading">登陆</div>'+
  140.                                 '<div class="panel-body">'+
  141.                                         '<div id="loginErrBox"></div>'+
  142.                                         '<div class="input-group">'+
  143.                                                 '<span class="input-group-addon" id="username-addon"><i class="fa fa-user"></i></span>'+
  144.                                                 '<input type="text" class="form-control login-input" id="inputUsername" placeholder="用户名" aria-describedby="username-addon">'+
  145.                                         '</div><br>'+
  146.                                         '<div class="input-group">'+
  147.                                                 '<span class="input-group-addon" id="password-addon"><i class="fa fa-lock"></i></span>'+
  148.                                                 '<input type="password" class="form-control login-input" id="inputPassword" placeholder="密码" aria-describedby="password-addon">'+
  149.                                         '</div><br>'+
  150.                                         '<button id="btnConnect" class="btn btn-primary">登陆</button>'+
  151.                                         '<button id="btnRegister" class="btn btn-default">注册</button>'+
  152.           '<button id="btnForgotPassword" class="btn btn-link btn-sm">找回密码?</button>'+
  153.                                 '</div>'+
  154.                         '</div>');

  155.                 //Bind commands
  156.                 var that = this;
  157.                 $(".login-input").keypress(function(e){
  158.                         if (e.which == 13) { //enter
  159.                                 that.connectAttempt();
  160.                         }
  161.                 });
  162.     $("#inputUsername").tap(function(){$("#inputUsername").focus();});
  163.     $("#inputPassword").tap(function(){$("#inputPassword").focus();});
  164.                 $("#btnConnect").bind("click touchstart",function(){that.connectAttempt();});
  165.                 $("#btnRegister").bind("click touchstart",function(){that.createRegistrationForm();});
  166.     $("#btnForgotPassword").bind("click touchstart",function(){that.createLostPasswordForm();});
  167.     $("#inputUsername").focus();
  168.         };

  169.         MMO_Scene_Title.prototype.createActivationForm = function() {
  170.                 $("#ErrorPrinter").html(
  171.                         '<div id="ActivationForm" class="panel panel-primary" style="width:'+(Graphics.boxWidth - (Graphics.boxWidth / 3))+'px">'+
  172.                                 '<div class="panel-heading">Activation</div>'+
  173.                                 '<div class="panel-body">'+
  174.                                         '<div id="loginErrBox"></div>'+
  175.                                         '<div class="input-group">'+
  176.                                         '</div><br>'+
  177.                                         '<button id="btnActLogin" class="btn btn-primary">Login</button>'+
  178.                                 '</div>'+
  179.                         '</div>');

  180.                 //Bind commands
  181.                 var that = this;
  182.                 $(".login-input").keypress(function(e){
  183.                         if (e.which == 13) { //enter
  184.                                 that.createLoginForm();
  185.                         }
  186.                 });
  187.     $("#btnActLogin").bind("click touchstart",function(){that.createLoginForm();});
  188.         };

  189.         MMO_Scene_Title.prototype.displayError = function(msg) {
  190.                 $("#loginErrBox").html('<div class="alert alert-danger fade in">'+msg+'</div>');
  191.         };

  192.         MMO_Scene_Title.prototype.displayInfo = function(msg) {
  193.                 $("#loginErrBox").html('<div class="alert alert-info fade in">'+msg+'</div>');
  194.         };

  195.   MMO_Scene_Title.prototype.displaySuccess = function(msg) {
  196.                 $("#loginErrBox").html('<div class="alert alert-success fade in">'+msg+'</div>');
  197.         };

  198.   MMO_Scene_Title.prototype.createLostPasswordForm = function() {
  199.                 $("#ErrorPrinter").html(
  200.                         '<div id="LostPasswordFrom" class="panel panel-primary" style="width:'+(Graphics.boxWidth - (Graphics.boxWidth / 3))+'px">'+
  201.                                 '<div class="panel-heading">忘记密码 输入电子邮件</div>'+
  202.                                 '<div class="panel-body">'+
  203.                                         '<div id="loginErrBox"></div>'+
  204.                                           '<div class="form-group">'+
  205.                             '<input type="text" name="email" id="inputEmailLP"  placeholder="电子邮件地址" class="form-control"/>'+
  206.                                   '</div>'+
  207.                                           '<button id="btnSubmitLP"type="submit" class="btn btn-primary">提交</button>'+
  208.                                                 '<button id ="btnCancelLP" type="button" class="btn btn-default">取消</button>'+
  209.                                 '</div>'+
  210.                         '</div>');

  211.                         var that = this;
  212.                         $(".form-control").keypress(function(e){
  213.                                 if (e.which == 13) { //enter
  214.                                         that.lostPasswordRequest();
  215.                                 }
  216.                         });
  217.       $("#inputEmailLP").tap(function(){$("#inputEmailLP").focus();});
  218.       $("#btnSubmitLP").bind("click touchstart",function(){that.lostPasswordRequest();});
  219.       $("#btnCancelLP").bind("click touchstart",function(){that.createLoginForm();});
  220.       $("#inputEmailLP").focus();
  221.                 };

  222.     MMO_Scene_Title.prototype.createResetPasswordForm = function() {
  223.                   $("#ErrorPrinter").html(
  224.                           '<div id="PasswordResetForm" class="panel panel-primary" style="width:'+(Graphics.boxWidth - (Graphics.boxWidth / 3))+'px">'+
  225.                                   '<div class="panel-heading">Password Reset</div>'+
  226.                                   '<div class="panel-body">'+
  227.                                           '<div id="loginErrBox"></div>'+
  228.                                             '<div class="form-group">'+
  229.                               '<input type="password" name="password" id="inputPasswordCP"  placeholder="New Password" class="form-control"/>'+
  230.                                     '</div>'+
  231.             '<div class="form-group">'+
  232.           '<input type="password" name="password" id="inputPasswordConfirmCP"  placeholder="Confirm Password" class="form-control"/>'+
  233.           '</div>'+
  234.                                             '<button id="btnChangeCP"type="submit" class="btn btn-primary">Change</button>'+
  235.                                                   '<button id ="btnCancelCP" type="button" class="btn btn-default">Cancel</button>'+
  236.                                   '</div>'+
  237.                           '</div>');

  238.                           var that = this;
  239.                           $(".form-control").keypress(function(e){
  240.                                   if (e.which == 13) { //enter
  241.                                           that.changePasswordRequest();
  242.                                   }
  243.                           });
  244.         $("#inputPasswordCP").tap(function(){$("#inputEmailLP").focus();});
  245.         $("#inputPasswordConfirmCP").tap(function(){$("#inputEmailLP").focus();});
  246.         $("#btnChangeCP").bind("click touchstart",function(){that.changePasswordRequest();});
  247.         $("#btnCancelCP").bind("click touchstart",function(){that.createLoginForm();});
  248.         $("#inputPasswordCP").focus();
  249.                   };

  250.       MMO_Scene_Title.prototype.changePasswordRequest = function(){
  251.                     var that = this;
  252.         var pass1 = $("#inputPasswordCP").val();
  253.         var pass2 = $("#inputPasswordConfirmCP").val();
  254.         if (pass1.length === 0)
  255.                             return this.displayError("You must provide a new password!");
  256.         if (pass2.length === 0)
  257.                       return this.displayError("You must confirm your password!");
  258.         if (pass1!==pass2)
  259.           return this.displayError("Passwords do not match!");
  260.         this.displayInfo('Connecting <i class="fa fa-spin fa-spinner"></i>');

  261.         shapwd = CryptoJS.SHA1(pass1+$gameNetwork._firstHash).toString(CryptoJS.enc.Hex);

  262.         $.post($gameNetwork._serverURL+'/resetpassword', {
  263.             password: shapwd,
  264.             tempHash: $gameSystem._tempPasswordHash,
  265.             tempName: $gameSystem._tempPasswordName
  266.           }).done(function (data) {
  267.             if (data.err) return that.displayError("Error : "+data.err);
  268.             that.createLoginForm();
  269.             that.displaySuccess("Password Changed Successfully");
  270.           });
  271.       };

  272.     MMO_Scene_Title.prototype.lostPasswordRequest = function(){
  273.                   var that = this;
  274.                   var email = $("#inputEmailLP").val();
  275.       if (email.length === 0)
  276.                           return this.displayError("You must provide a username!");
  277.       this.displayInfo('Connecting <i class="fa fa-spin fa-spinner"></i>');

  278.       $.post($gameNetwork._serverURL+'/lostpassword', {
  279.         email: email,
  280.       }).done(function (data) {
  281.         if (data.err) return that.displayError("Error : "+data.err);
  282.         that.createLoginForm();
  283.         that.displayInfo("Check email for temporary password");
  284.       });
  285.     };

  286.         MMO_Scene_Title.prototype.connectAttempt = function(){
  287.                 var that = this;
  288.                 var username = $("#inputUsername").val();
  289.                 var password = $("#inputPassword").val();

  290.                 if (username.length === 0)
  291.                         return this.displayError("You must provide a username!");
  292.                 if (password.length === 0)
  293.                         return this.displayError("You must provide a password!");

  294.                 shapwd = CryptoJS.SHA1(password+$gameNetwork._firstHash).toString(CryptoJS.enc.Hex);
  295.                 this.displayInfo('Connecting <i class="fa fa-spin fa-spinner"></i>');
  296.         $.post($gameNetwork._serverURL+'/login', {
  297.                                         username: username,
  298.                                         password: shapwd
  299.       }).done(function (data) {
  300.                                 if (data.err)
  301.                                                 return that.displayError("Error : "+data.err);
  302.         if (data.temp){
  303.           //Make Password reset form
  304.           $gameSystem._tempPasswordName = data.name;
  305.           $gameSystem._tempPasswordHash = data.temp;
  306.           that.createResetPasswordForm();
  307.         }
  308.                                         if (data.token) {
  309.                                                 $gameNetwork._token = data.token;
  310.                                                 var ioFlag = String(Nasty.Parameters['socket.io connection']);
  311.                                                 $("#ErrorPrinter").fadeOut({duration: 1000}).html("");
  312.             if (ioFlag==='true'){
  313.                                                         $gameNetwork.connectSocket('main','/');
  314.               $gameNetwork._socket.main.on('firstShutDown',function(data){
  315.                 $gameSwitches.setValue(Number(Nasty.Parameters['Switch on First Shutdown']),true);
  316.               });
  317.               $gameNetwork._socket.main.on('secondShutDown',function(data){
  318.                 $gameSwitches.setValue(Number(Nasty.Parameters['Switch on Second Shutdown']),true);
  319.               });
  320.                                                 }
  321.             $gameNetwork.connectSocketsAfterLogin();
  322.             that.fadeOutAll();
  323.                                           SceneManager.goto(Scene_Map);
  324.                                                 return that.displayInfo("Ok : "+data.msg);
  325.                                         }
  326.       });
  327.         };

  328.         MMO_Scene_Title.prototype.registerAttempt = function(){
  329.                 var that = this;
  330.                 var username = $("#regUsername").val();
  331.                 var password = $("#regPassword").val();
  332.                 var email = $("#regEmail").val();
  333.                 if (username.length === 0) return this.displayError("You must provide a username!");
  334.                 if (password.length === 0) return this.displayError("You must provide a password!");
  335.                 if (email.length === 0) return this.displayError("You must provide a valid Email!");

  336.                 this.displayInfo('Connecting <i class="fa fa-spin fa-spinner"></i>');

  337.                 //POST FOR REGISTER
  338.                 $.post($gameNetwork._serverURL + '/register', {
  339.                         username: username,
  340.                         password: password,
  341.                         email: email
  342.         }).done(function (result) {
  343.                 var data = result.pageData;
  344.                 if (data.err)
  345.                         return that.displayError("Error : "+data.err);
  346.                 if (data.msg) {
  347.                                 that.createActivationForm();
  348.                         that.displayInfo("Check your email for the activation link!");
  349.                 }
  350.         });
  351.         };

  352.         MMO_Scene_Title.prototype.createBackground = function() {
  353.                 var startupFlag = String(Nasty.Parameters['Force Login on Startup']);
  354.                 if (startupFlag==='true'){
  355.             this._backSprite1 = new Sprite(ImageManager.loadTitle1($dataSystem.title1Name));
  356.             this._backSprite2 = new Sprite(ImageManager.loadTitle2($dataSystem.title2Name));
  357.             this.addChild(this._backSprite1);
  358.             this.addChild(this._backSprite2);
  359.                         this.centerSprite(this._backSprite1);
  360.             this.centerSprite(this._backSprite2);
  361.                         this.createForeground();
  362.                 }else{
  363.                         this._backgroundSprite = new Sprite();
  364.             this._backgroundSprite.bitmap = SceneManager.backgroundBitmap();
  365.             this.addChild(this._backgroundSprite);
  366.                 }
  367.         };

  368.         MMO_Scene_Title.prototype.createForeground = function() {
  369.             this._gameTitleSprite = new Sprite(new Bitmap(Graphics.width, Graphics.height));
  370.             this.addChild(this._gameTitleSprite);
  371.             if ($dataSystem.optDrawTitle) {
  372.                 this.drawGameTitle();
  373.             }
  374.         };

  375.         MMO_Scene_Title.prototype.drawGameTitle = function() {
  376.             var x = 10;
  377.             var y = Graphics.height / 2;
  378.             var maxWidth = Graphics.width - x * 1;
  379.             var text = $dataSystem.gameTitle;
  380.             this._gameTitleSprite.bitmap.outlineColor = 'black';
  381.             this._gameTitleSprite.bitmap.outlineWidth = 8;
  382.             this._gameTitleSprite.bitmap.fontSize = 72;
  383.             this._gameTitleSprite.bitmap.drawText(text, x, y, maxWidth, 48, 'center');
  384.         };

  385.         MMO_Scene_Title.prototype.centerSprite = function(sprite) {
  386.             sprite.x = Graphics.width / 2;
  387.             sprite.y = Graphics.height / 2;
  388.             sprite.anchor.x = 0.5;
  389.             sprite.anchor.y = 0.5;
  390.         };

  391.         MMO_Scene_Title.prototype.playTitleMusic = function() {
  392.             AudioManager.playBgm($dataSystem.titleBgm);
  393.             AudioManager.stopBgs();
  394.             AudioManager.stopMe();
  395.         };

  396.   //----------------------------------------------------------------------------
  397.         //
  398.         // Override of Scene_Boot.start, for calling our own Scene_Title!
  399.         //

  400. var Nel__SceneBase_Boot_alias_MMO_Login = Scene_Boot.prototype.start;

  401.         Scene_Boot.prototype.start = function() {
  402.                 var startupFlag = String(Nasty.Parameters['Force Login on Startup']);
  403.                 if (startupFlag==='false'){
  404.                         Nel__SceneBase_Boot_alias_MMO_Login.call(this);
  405.                 }
  406.                 else{
  407.             Scene_Base.prototype.start.call(this);
  408.             SoundManager.preloadImportantSounds();
  409.             if (DataManager.isBattleTest()) {
  410.                 DataManager.setupBattleTest();
  411.                 SceneManager.goto(Scene_Battle);
  412.             } else if (DataManager.isEventTest()) {
  413.                 DataManager.setupEventTest();
  414.                 SceneManager.goto(Scene_Map);
  415.             } else {
  416.                 this.checkPlayerLocation();
  417.                 DataManager.setupNewGame();
  418.                 SceneManager.goto(MMO_Scene_Title);
  419.             }
  420.             this.updateDocumentTitle();
  421.                 }
  422.         };

  423.     //-----------------------------------------------------------------------------
  424.         //
  425.         // Overriding 'Input._onKeyDown' to pass 'event' as parameter
  426.         // to 'Input._shouldPreventDefault'
  427.         //

  428.         Input._onKeyDown = function(event) {
  429.             if (this._shouldPreventDefault(event)) {
  430.                 event.preventDefault();
  431.             }
  432.             if (event.keyCode === 144) {    // Numlock
  433.                 this.clear();
  434.             }
  435.             var buttonName = this.keyMapper[event.keyCode];
  436.             if (buttonName) {
  437.                 this._currentState[buttonName] = true;
  438.             }
  439.         };

  440.     //-----------------------------------------------------------------------------
  441.         //
  442.         // Overriding Input._shouldPreventDefault to allow the use of the 'backspace key'
  443.         // in input forms.
  444.         //

  445.         Input._shouldPreventDefault = function(e) {
  446.             switch (e.keyCode) {
  447.                     case 8:     // backspace
  448.                             if ($(e.target).is("input, textarea"))
  449.                                     break;
  450.                     case 33:    // pageup
  451.                     case 34:    // pagedown
  452.                     case 37:    // left arrow
  453.                     case 38:    // up arrow
  454.                     case 39:    // right arrow
  455.                     case 40:    // down arrow
  456.                         return true;
  457.             }
  458.             return false;
  459.         };


  460. })();
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1