2024-04-15 18:46:41 +00:00
|
|
|
"use strict";
|
|
|
|
game.import("mode", function (lib, game, ui, get, ai, _status) {
|
|
|
|
return {
|
|
|
|
name: "connect",
|
|
|
|
start: function () {
|
|
|
|
var directstartmode = lib.config.directstartmode;
|
|
|
|
ui.create.menu(true);
|
|
|
|
event.textnode = ui.create.div("", "输入联机地址");
|
|
|
|
var createNode = function () {
|
|
|
|
if (event.created) return;
|
|
|
|
if (directstartmode && lib.node) {
|
|
|
|
ui.exitroom = ui.create.system(
|
|
|
|
"退出房间",
|
|
|
|
function () {
|
|
|
|
game.saveConfig("directstartmode");
|
|
|
|
game.reload();
|
|
|
|
},
|
|
|
|
true
|
|
|
|
);
|
|
|
|
game.switchMode(directstartmode);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (lib.node && window.require) {
|
|
|
|
ui.startServer = ui.create.system(
|
|
|
|
"启动服务器",
|
|
|
|
function (e) {
|
|
|
|
ui.click.shortcut(false);
|
|
|
|
e.stopPropagation();
|
|
|
|
ui.click.connectMenu();
|
|
|
|
},
|
|
|
|
true
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
event.created = true;
|
|
|
|
var node = ui.create.div(".shadowed");
|
|
|
|
node.style.width = "400px";
|
|
|
|
node.style.height = "30px";
|
|
|
|
node.style.lineHeight = "30px";
|
|
|
|
node.style.fontFamily = "xinwei";
|
|
|
|
node.style.fontSize = "30px";
|
|
|
|
node.style.padding = "10px";
|
|
|
|
node.style.left = "calc(50% - 210px)";
|
|
|
|
node.style.top = "calc(50% - 20px)";
|
|
|
|
node.style.whiteSpace = "nowrap";
|
|
|
|
node.textContent = lib.config.last_ip || lib.hallURL;
|
|
|
|
node.contentEditable = true;
|
|
|
|
node.style.webkitUserSelect = "text";
|
|
|
|
node.style.textAlign = "center";
|
|
|
|
node.style.overflow = "hidden";
|
|
|
|
|
|
|
|
var connect = function (e) {
|
|
|
|
event.textnode.textContent = "正在连接...";
|
|
|
|
clearTimeout(event.timeout);
|
|
|
|
if (e) e.preventDefault();
|
|
|
|
game.saveConfig("last_ip", node.textContent);
|
|
|
|
game.connect(node.textContent, function (success) {
|
|
|
|
if (success) {
|
|
|
|
var info = lib.config.reconnect_info;
|
|
|
|
if (info && info[0] == _status.ip) {
|
|
|
|
game.onlineID = info[1];
|
|
|
|
if (typeof (game.roomId = info[2]) == "string") game.roomIdServer = true;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (event.textnode) {
|
|
|
|
alert("连接失败");
|
|
|
|
event.textnode.textContent = "输入联机地址";
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
node.addEventListener("keydown", function (e) {
|
|
|
|
if (e.keyCode == 13) {
|
|
|
|
connect(e);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
ui.window.appendChild(node);
|
|
|
|
ui.ipnode = node;
|
|
|
|
|
|
|
|
var text = event.textnode;
|
|
|
|
text.style.width = "400px";
|
|
|
|
text.style.height = "30px";
|
|
|
|
text.style.lineHeight = "30px";
|
|
|
|
text.style.fontFamily = "xinwei";
|
|
|
|
text.style.fontSize = "30px";
|
|
|
|
text.style.padding = "10px";
|
|
|
|
text.style.left = "calc(50% - 200px)";
|
|
|
|
text.style.top = "calc(50% - 80px)";
|
|
|
|
text.style.textAlign = "center";
|
|
|
|
ui.window.appendChild(text);
|
|
|
|
ui.iptext = text;
|
|
|
|
|
|
|
|
var button = ui.create.div(".menubutton.highlight.large.pointerdiv", "连接", connect);
|
|
|
|
button.style.width = "70px";
|
|
|
|
button.style.left = "calc(50% - 35px)";
|
|
|
|
button.style.top = "calc(50% + 60px)";
|
|
|
|
ui.window.appendChild(button);
|
|
|
|
ui.ipbutton = button;
|
|
|
|
|
|
|
|
ui.hall_button = ui.create.system(
|
|
|
|
"联机大厅",
|
|
|
|
function () {
|
|
|
|
node.textContent = get.config("hall_ip") || lib.hallURL;
|
|
|
|
connect();
|
|
|
|
},
|
|
|
|
true
|
|
|
|
);
|
|
|
|
if (!get.config("hall_button")) {
|
|
|
|
ui.hall_button.style.display = "none";
|
|
|
|
}
|
|
|
|
ui.recentIP = ui.create.system("最近连接", null, true);
|
|
|
|
var clickLink = function () {
|
|
|
|
node.textContent = this.textContent;
|
|
|
|
connect();
|
|
|
|
};
|
|
|
|
lib.setPopped(
|
|
|
|
ui.recentIP,
|
|
|
|
function () {
|
|
|
|
if (!lib.config.recentIP.length) return;
|
|
|
|
var uiintro = ui.create.dialog("hidden");
|
|
|
|
uiintro.listen(function (e) {
|
|
|
|
e.stopPropagation();
|
|
|
|
});
|
|
|
|
var list = ui.create.div(".caption");
|
|
|
|
for (var i = 0; i < lib.config.recentIP.length; i++) {
|
|
|
|
ui.create.div(".text.textlink", list, clickLink).textContent = get.trimip(
|
|
|
|
lib.config.recentIP[i]
|
|
|
|
);
|
|
|
|
}
|
|
|
|
uiintro.add(list);
|
|
|
|
var clear = uiintro.add('<div class="text center">清除</div>');
|
|
|
|
clear.style.paddingTop = 0;
|
|
|
|
clear.style.paddingBottom = "3px";
|
|
|
|
clear.listen(function () {
|
|
|
|
lib.config.recentIP.length = 0;
|
|
|
|
game.saveConfig("recentIP", []);
|
|
|
|
uiintro.delete();
|
|
|
|
});
|
|
|
|
return uiintro;
|
|
|
|
},
|
|
|
|
220
|
|
|
|
);
|
|
|
|
if (get.config("read_clipboard", "connect")) {
|
|
|
|
var ced = false;
|
|
|
|
var read = (text) => {
|
|
|
|
try {
|
|
|
|
var text2 = text.split("\n")[2];
|
|
|
|
var ip = text2.slice(5);
|
|
|
|
if (
|
|
|
|
ip.length > 0 &&
|
|
|
|
text2.startsWith("联机地址:") &&
|
|
|
|
(ced || confirm("是否根据剪贴板的邀请链接以进入联机地址和房间?"))
|
|
|
|
) {
|
|
|
|
node.innerHTML = ip;
|
|
|
|
event.textnode.innerHTML = "正在连接...";
|
|
|
|
clearTimeout(event.timeout);
|
|
|
|
game.saveConfig("last_ip", node.innerHTML);
|
|
|
|
game.connect(node.innerHTML, function (success) {
|
|
|
|
if (!success && event.textnode) {
|
|
|
|
alert("邀请链接解析失败");
|
|
|
|
event.textnode.innerHTML = "输入联机地址";
|
|
|
|
}
|
|
|
|
if (success) _status.read_clipboard_text = text;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
console.log(e);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
window.focus();
|
|
|
|
if (navigator.clipboard && lib.node) {
|
|
|
|
navigator.clipboard
|
|
|
|
.readText()
|
|
|
|
.then(read)
|
|
|
|
.catch((_) => {});
|
|
|
|
} else {
|
|
|
|
var input = ui.create.node("textarea", ui.window, { opacity: "0" });
|
|
|
|
input.select();
|
|
|
|
var result = document.execCommand("paste");
|
|
|
|
input.blur();
|
|
|
|
ui.window.removeChild(input);
|
|
|
|
if (result || input.value.length > 0) read(input.value);
|
|
|
|
else if (confirm("是否输入邀请链接以进入联机地址和房间?")) {
|
|
|
|
ced = true;
|
|
|
|
var text = prompt("请输入邀请链接");
|
|
|
|
if (typeof text == "string" && text.length > 0) read(text);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
lib.init.onfree();
|
|
|
|
};
|
|
|
|
if (window.isNonameServer) {
|
|
|
|
game.connect(window.isNonameServerIp || "localhost");
|
|
|
|
} else {
|
|
|
|
createNode();
|
|
|
|
}
|
|
|
|
if (!game.onlineKey) {
|
|
|
|
game.onlineKey = localStorage.getItem(lib.configprefix + "key");
|
|
|
|
if (!game.onlineKey) {
|
|
|
|
game.onlineKey = get.id();
|
|
|
|
localStorage.setItem(lib.configprefix + "key", game.onlineKey);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_status.connectDenied = createNode;
|
|
|
|
setTimeout(lib.init.onfree, 1000);
|
|
|
|
},
|
|
|
|
};
|
|
|
|
});
|