From 5dffc03b147170a3cc2afc45acf515967564096b Mon Sep 17 00:00:00 2001 From: kuangthree Date: Sat, 20 Apr 2024 13:01:41 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E5=A2=9Eui.create.toast=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E5=BC=B9=E5=87=BA=E6=96=87=E5=AD=97=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- layout/default/toast.css | 38 ++ noname/ui/create/index.js | 1198 +++++++++++++++++++++++++++---------- noname/ui/index.js | 5 + 3 files changed, 910 insertions(+), 331 deletions(-) create mode 100644 layout/default/toast.css diff --git a/layout/default/toast.css b/layout/default/toast.css new file mode 100644 index 000000000..ca4d5be32 --- /dev/null +++ b/layout/default/toast.css @@ -0,0 +1,38 @@ +.toast-container { + position: fixed; + top: 15%; + left: 50%; + transform: translateX(-50%); + z-index: 9999; +} + + +.toast { + display: none; + background-color: rgba(255, 165, 0, 0.7); + border-radius: 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); + color: white; + font-weight: bold; + padding: 10px 20px; + text-align: center; + white-space: nowrap; + width: max-content; + animation: fadeInOut 1500ms ease-in-out forwards; +} + + +@keyframes fadeInOut { + 0% { + opacity: 0; + } + 20% { + opacity: 1; + } + 80% { + opacity: 1; + } + 100% { + opacity: 0; + } +} \ No newline at end of file diff --git a/noname/ui/create/index.js b/noname/ui/create/index.js index 109b031a1..33b7283f9 100644 --- a/noname/ui/create/index.js +++ b/noname/ui/create/index.js @@ -21,9 +21,13 @@ export class Create { */ identityCard(identity, position, noclick) { const card = ui.create.card(position, "noclick", noclick); - card.removeEventListener(lib.config.touchscreen ? "touchend" : "click", ui.click.card); + card.removeEventListener( + lib.config.touchscreen ? "touchend" : "click", + ui.click.card + ); card.classList.add("button"); - card._customintro = (uiintro) => uiintro.add(`${get.translation(`${identity}${2}`)}的身份牌`); + card._customintro = (uiintro) => + uiintro.add(`${get.translation(`${identity}${2}`)}的身份牌`); const fileName = `image/card/identity_${identity}.jpg`; new Promise((resolve, reject) => { const image = new Image(); @@ -35,7 +39,8 @@ export class Create { card.classList.add("fullskin"); card.node.image.setBackgroundImage(fileName); }, - () => (card.node.background.innerHTML = get.translation(identity)[0]) + () => + (card.node.background.innerHTML = get.translation(identity)[0]) ); return card; } @@ -53,16 +58,19 @@ export class Create { card.classList.add("infohidden"); } card.style.transition = "all 0s"; - card.style.transform = "perspective(600px) rotateY(180deg) translateX(0)"; + card.style.transform = + "perspective(600px) rotateY(180deg) translateX(0)"; const onEnd01 = function () { setTimeout(function () { card.style.transition = "all ease-in 0.3s"; - card.style.transform = "perspective(600px) rotateY(270deg) translateX(52px)"; + card.style.transform = + "perspective(600px) rotateY(270deg) translateX(52px)"; var onEnd = function () { card.classList.remove("infohidden"); card.style.transition = "all 0s"; ui.refresh(card); - card.style.transform = "perspective(600px) rotateY(-90deg) translateX(52px)"; + card.style.transform = + "perspective(600px) rotateY(-90deg) translateX(52px)"; ui.refresh(card); card.style.transition = ""; ui.refresh(card); @@ -97,7 +105,8 @@ export class Create { //删除container的时候,删除创建的ul列表 container.delete = function () { for (let i = createList.length - 1; i >= 0; i--) { - createList[i].parentNode && createList[i].parentNode.removeChild(createList[i]); + createList[i].parentNode && + createList[i].parentNode.removeChild(createList[i]); } Array.from(editorpage.children).forEach((v) => { v.style.background = ""; @@ -132,7 +141,9 @@ export class Create { width: (pos.width * 4) / game.documentZoom + "px", //'font-family':'shousha', "font-size": - (lib.config.codeMirror_fontSize ? lib.config.codeMirror_fontSize.slice(0, -2) : 16) / + (lib.config.codeMirror_fontSize + ? lib.config.codeMirror_fontSize.slice(0, -2) + : 16) / game.documentZoom + "px", }); @@ -143,13 +154,20 @@ export class Create { const getActive = () => { let i = 0; while (i < ul.childElementCount) { - if (ul.childNodes[i].classList.contains("CodeMirror-hint-active")) break; + if ( + ul.childNodes[i].classList.contains( + "CodeMirror-hint-active" + ) + ) + break; else i++; } return i; }; const setActive = (i) => { - ul.childNodes[getActive()].classList.remove("CodeMirror-hint-active"); + ul.childNodes[getActive()].classList.remove( + "CodeMirror-hint-active" + ); ul.childNodes[i].classList.add("CodeMirror-hint-active"); return i; }; @@ -164,8 +182,11 @@ export class Create { } else { elt.innerHTML = cur; } - let className = "CodeMirror-hint" + (i != 0 ? "" : " " + "CodeMirror-hint-active"); - if (cur.className != null) className = cur.className + " " + className; + let className = + "CodeMirror-hint" + + (i != 0 ? "" : " " + "CodeMirror-hint-active"); + if (cur.className != null) + className = cur.className + " " + className; elt.className = className; elt.hintId = i; ui.window.listen.call(elt, function () { @@ -193,121 +214,201 @@ export class Create { createList.remove(ul); return ul; }; - const discardConfig = ui.create.div(".editbutton", "取消", editorpage, function () { - ui.window.classList.remove("shortcutpaused"); - ui.window.classList.remove("systempaused"); - container.delete(null); - delete window.saveNonameInput; - }); - const saveConfig = ui.create.div(".editbutton", "保存", editorpage, saveInput); - const theme = ui.create.div(".editbutton", "主题", editorpage, function () { - if (!this || this == window) return; - if (this.ul && this.ul.parentNode) { - return closeMenu.call(this); + const discardConfig = ui.create.div( + ".editbutton", + "取消", + editorpage, + function () { + ui.window.classList.remove("shortcutpaused"); + ui.window.classList.remove("systempaused"); + container.delete(null); + delete window.saveNonameInput; } - //this - const self = this; - if (!this.ul) { - //主题列表 - const list = ["mdn-like", "mbo"]; - //正在使用的主题 - const active = container.editor.options.theme; - //排个序 - list.remove(active).splice(0, 0, active); - //元素位置 - const pos = self.getBoundingClientRect(); - //点击事件 - const click = function (e) { - const theme = this.innerHTML; - container.editor.setOption("theme", theme); - setTimeout(() => container.editor.refresh(), 0); - game.saveConfig("codeMirror_theme", theme); - closeMenu.call(self); - }; - const ul = createMenu(pos, self, list, click); - self.ul = ul; - } else { - createMenu(null, self); + ); + const saveConfig = ui.create.div( + ".editbutton", + "保存", + editorpage, + saveInput + ); + const theme = ui.create.div( + ".editbutton", + "主题", + editorpage, + function () { + if (!this || this == window) return; + if (this.ul && this.ul.parentNode) { + return closeMenu.call(this); + } + //this + const self = this; + if (!this.ul) { + //主题列表 + const list = ["mdn-like", "mbo"]; + //正在使用的主题 + const active = container.editor.options.theme; + //排个序 + list.remove(active).splice(0, 0, active); + //元素位置 + const pos = self.getBoundingClientRect(); + //点击事件 + const click = function (e) { + const theme = this.innerHTML; + container.editor.setOption("theme", theme); + setTimeout(() => container.editor.refresh(), 0); + game.saveConfig("codeMirror_theme", theme); + closeMenu.call(self); + }; + const ul = createMenu(pos, self, list, click); + self.ul = ul; + } else { + createMenu(null, self); + } } - }); - const edit = ui.create.div(".editbutton", "编辑", editorpage, function () { - if (!this || this == window) return; - if (this.ul && this.ul.parentNode) { - return closeMenu.call(this); + ); + const edit = ui.create.div( + ".editbutton", + "编辑", + editorpage, + function () { + if (!this || this == window) return; + if (this.ul && this.ul.parentNode) { + return closeMenu.call(this); + } + const self = this; + if (!this.ul) { + const pos = this.getBoundingClientRect(); + const list = ["撤销 Ctrl+Z", "恢复撤销 Ctrl+Y"]; + const click = function (e) { + const num = this.innerHTML.indexOf("Ctrl"); + const inner = this.innerHTML + .slice(num) + .replace("+", "-"); + container.editor.execCommand( + container.editor.options.extraKeys[inner] + ); + setTimeout(() => container.editor.refresh(), 0); + closeMenu.call(self); + }; + const ul = createMenu(pos, self, list, click); + this.ul = ul; + } else { + createMenu(null, self); + } } - const self = this; - if (!this.ul) { - const pos = this.getBoundingClientRect(); - const list = ["撤销 Ctrl+Z", "恢复撤销 Ctrl+Y"]; - const click = function (e) { - const num = this.innerHTML.indexOf("Ctrl"); - const inner = this.innerHTML.slice(num).replace("+", "-"); - container.editor.execCommand(container.editor.options.extraKeys[inner]); - setTimeout(() => container.editor.refresh(), 0); - closeMenu.call(self); - }; - const ul = createMenu(pos, self, list, click); - this.ul = ul; - } else { - createMenu(null, self); + ); + const fontSize = ui.create.div( + ".editbutton", + "字号", + editorpage, + function () { + if (!this || this == window) return; + if (this.ul && this.ul.parentNode) { + return closeMenu.call(this); + } + const self = this; + if (!this.ul) { + const pos = this.getBoundingClientRect(); + const list = [ + "16px", + "18px", + "20px", + "22px", + "24px", + "26px", + ]; + const click = function (e) { + const size = this.innerHTML; + container.style.fontSize = + size.slice(0, -2) / game.documentZoom + "px"; + Array.from(self.parentElement.children) + .map((v) => v.ul) + .filter(Boolean) + .forEach((v) => { + v.style.fontSize = + size.slice(0, -2) / game.documentZoom + + "px"; + }); + setTimeout(() => container.editor.refresh(), 0); + game.saveConfig("codeMirror_fontSize", size); + closeMenu.call(self); + }; + const ul = createMenu(pos, self, list, click); + this.ul = ul; + } else { + createMenu(null, self); + } } - }); - const fontSize = ui.create.div(".editbutton", "字号", editorpage, function () { - if (!this || this == window) return; - if (this.ul && this.ul.parentNode) { - return closeMenu.call(this); - } - const self = this; - if (!this.ul) { - const pos = this.getBoundingClientRect(); - const list = ["16px", "18px", "20px", "22px", "24px", "26px"]; - const click = function (e) { - const size = this.innerHTML; - container.style.fontSize = size.slice(0, -2) / game.documentZoom + "px"; - Array.from(self.parentElement.children) - .map((v) => v.ul) - .filter(Boolean) - .forEach((v) => { - v.style.fontSize = size.slice(0, -2) / game.documentZoom + "px"; - }); - setTimeout(() => container.editor.refresh(), 0); - game.saveConfig("codeMirror_fontSize", size); - closeMenu.call(self); - }; - const ul = createMenu(pos, self, list, click); - this.ul = ul; - } else { - createMenu(null, self); - } - }); + ); const editor = ui.create.div(editorpage); return editor; } + /** + * 弹出提示。 + * @param {string} message 弹出的文字 + */ + toast(message) { + if(!ui.toastStyle){ + ui.toastStyle = lib.init.css(lib.assetURL+"layout/default/toast.css"); + } + const toastContainer = + document.querySelector(".toast-container") || + (() => { + const container = document.createElement("div"); + container.classList.add("toast-container"); + document.body.appendChild(container); + return container; + })(); + const toast = document.createElement("div"); + toast.textContent = message; + toast.classList.add("toast"); + toastContainer.appendChild(toast); + ui.toastQueue.push(toast); + ui.create.showNextToast(); + return toast; + } + showNextToast() { + const toast = ui.toastQueue.shift(); + if(!toast)return; + toast.style.display = "block"; + toast.addEventListener("animationend", () => { + toast.remove(); + ui.create.showNextToast(); + }); + return toast; + } cardTempName(card, applyNode) { let getApplyNode = applyNode || card; let cardName = get.name(card); let cardNature = get.nature(card); let tempname = get.translation(cardName); let cardTempNameConfig = lib.config.cardtempname; - let node = getApplyNode._tempName || ui.create.div(".tempname", getApplyNode); + let node = + getApplyNode._tempName || ui.create.div(".tempname", getApplyNode); let datasetNature = ""; getApplyNode._tempName = node; if (cardTempNameConfig != "image") { //清空,避免和下面的image部分有冲突 node.innerHTML = ""; datasetNature = "fire"; - if (get.position(card) == "j" && card.viewAs && card.viewAs != card.name) { + if ( + get.position(card) == "j" && + card.viewAs && + card.viewAs != card.name + ) { datasetNature = "wood"; tempname = get.translation(card.viewAs); } else { if (cardName == "sha") { - if (cardNature) tempname = get.translation(cardNature) + tempname; + if (cardNature) + tempname = get.translation(cardNature) + tempname; if (cardNature == "thunder") datasetNature = "thunder"; if (cardNature == "kami") datasetNature = "kami"; if (cardNature == "ice") datasetNature = "ice"; } } - if (cardTempNameConfig == "default") getApplyNode._tempName.classList.add("vertical"); + if (cardTempNameConfig == "default") + getApplyNode._tempName.classList.add("vertical"); if (datasetNature.length > 0) { node.dataset.nature = datasetNature; } else { @@ -315,12 +416,17 @@ export class Create { node.classList.add(datasetNature); } } else { - if (get.position(card) == "j" && card.viewAs && card.viewAs != card.name) { + if ( + get.position(card) == "j" && + card.viewAs && + card.viewAs != card.name + ) { cardName = card.viewAs; tempname = get.translation(card.viewAs); } if (cardName == "sha") { - if (cardNature) tempname = get.translation(cardNature) + tempname; + if (cardNature) + tempname = get.translation(cardNature) + tempname; if (cardNature == "fire") datasetNature = "fire"; if (cardNature == "thunder") datasetNature = "thunder"; if (cardNature == "kami") datasetNature = "kami"; @@ -344,65 +450,103 @@ export class Create { if (lib.card[cardName].fullskin) { if (img) { if (img.startsWith("ext:")) { - bg.setBackgroundImage(img.replace(/^ext:/, "extension/")); + bg.setBackgroundImage( + img.replace(/^ext:/, "extension/") + ); } else { bg.setBackgroundDB(img); } } else { if (lib.card[cardName].modeimage) { bg.setBackgroundImage( - "image/mode/" + lib.card[cardName].modeimage + "/card/" + cardName + ".png" + "image/mode/" + + lib.card[cardName].modeimage + + "/card/" + + cardName + + ".png" ); } else { if (cardName == "sha" && cardNature == "stab") bg.setBackgroundImage("image/card/cisha.png"); - else bg.setBackgroundImage("image/card/" + cardName + ".png"); + else + bg.setBackgroundImage( + "image/card/" + cardName + ".png" + ); } } - } else if (get.dynamicVariable(lib.card[cardName].image, card) == "background") { - if (cardNature) bg.setBackground(cardName + "_" + cardNature, "card"); + } else if ( + get.dynamicVariable(lib.card[cardName].image, card) == + "background" + ) { + if (cardNature) + bg.setBackground(cardName + "_" + cardNature, "card"); else bg.setBackground(cardName, "card"); } else if (lib.card[cardName].fullimage) { if (img) { if (img.startsWith("ext:")) { - bg.setBackgroundImage(img.replace(/^ext:/, "extension/")); + bg.setBackgroundImage( + img.replace(/^ext:/, "extension/") + ); bg.style.backgroundSize = "cover"; } else { bg.setBackgroundDB(img); } - } else if (get.dynamicVariable(lib.card[cardName].image, card)) { - if (get.dynamicVariable(lib.card[cardName].image, card).startsWith("character:")) { + } else if ( + get.dynamicVariable(lib.card[cardName].image, card) + ) { + if ( + get + .dynamicVariable(lib.card[cardName].image, card) + .startsWith("character:") + ) { bg.setBackground( - get.dynamicVariable(lib.card[cardName].image, card).slice(10), + get + .dynamicVariable(lib.card[cardName].image, card) + .slice(10), "character" ); } else { - bg.setBackground(get.dynamicVariable(lib.card[cardName].image, card)); + bg.setBackground( + get.dynamicVariable(lib.card[cardName].image, card) + ); } } else { let cardPack = lib.cardPack["mode_" + get.mode()]; - if (Array.isArray(cardPack) && cardPack.includes(cardName)) { - bg.setBackground("mode/" + get.mode() + "/card/" + cardName); + if ( + Array.isArray(cardPack) && + cardPack.includes(cardName) + ) { + bg.setBackground( + "mode/" + get.mode() + "/card/" + cardName + ); } else { bg.setBackground("card/" + cardName); } } - } else if (get.dynamicVariable(lib.card[cardName].image, card) == "card") { - if (cardNature) bg.setBackground(cardName + "_" + cardNature, "card"); + } else if ( + get.dynamicVariable(lib.card[cardName].image, card) == "card" + ) { + if (cardNature) + bg.setBackground(cardName + "_" + cardNature, "card"); else bg.setBackground(cardName, "card"); } else if ( - typeof get.dynamicVariable(lib.card[cardName].image, card) == "string" && + typeof get.dynamicVariable(lib.card[cardName].image, card) == + "string" && !lib.card[cardName].fullskin ) { if (img) { if (img.startsWith("ext:")) { - bg.setBackgroundImage(img.replace(/^ext:/, "extension/")); + bg.setBackgroundImage( + img.replace(/^ext:/, "extension/") + ); bg.style.backgroundSize = "cover"; } else { bg.setBackgroundDB(img); } } else { - bg.setBackground(get.dynamicVariable(lib.card[cardName].image, card)); + bg.setBackground( + get.dynamicVariable(lib.card[cardName].image, card) + ); } } else { console.warn("卡牌图片解析失败"); @@ -413,7 +557,9 @@ export class Create { delete node.dataset.nature; } node.innerHTML += `${ - cardTempNameConfig == "default" ? get.verticalStr(tempname) : tempname + cardTempNameConfig == "default" + ? get.verticalStr(tempname) + : tempname }`; node.tempname = tempname; return node; @@ -433,7 +579,10 @@ export class Create { ); player.roomindex = i; player.initRoom = lib.element.Player.prototype.initRoom; - player.addEventListener(lib.config.touchscreen ? "touchend" : "click", ui.click.connectroom); + player.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + ui.click.connectroom + ); player.initRoom(list[i]); ui.rooms.push(player); } @@ -480,10 +629,15 @@ export class Create { } else { str = arguments[i]; } - } else if (["div", "table", "tr", "td", "body", "fragment"].includes(get.objtype(arguments[i]))) + } else if ( + ["div", "table", "tr", "td", "body", "fragment"].includes( + get.objtype(arguments[i]) + ) + ) position = arguments[i]; else if (typeof arguments[i] == "number") position2 = arguments[i]; - else if (get.itemtype(arguments[i]) == "divposition") divposition = arguments[i]; + else if (get.itemtype(arguments[i]) == "divposition") + divposition = arguments[i]; else if (typeof arguments[i] == "object") style = arguments[i]; else if (typeof arguments[i] == "function") listen = arguments[i]; } @@ -494,19 +648,30 @@ export class Create { if (node.className.length != 0) { node.className += " "; } - while (str[i + 1] != "." && str[i + 1] != "#" && i + 1 < str.length) { + while ( + str[i + 1] != "." && + str[i + 1] != "#" && + i + 1 < str.length + ) { node.className += str[i + 1]; i++; } } else if (str[i] == "#") { - while (str[i + 1] != "." && str[i + 1] != "#" && i + 1 < str.length) { + while ( + str[i + 1] != "." && + str[i + 1] != "#" && + i + 1 < str.length + ) { node.id += str[i + 1]; i++; } } } if (position) { - if (typeof position2 == "number" && position.childNodes.length > position2) { + if ( + typeof position2 == "number" && + position.childNodes.length > position2 + ) { position.insertBefore(node, position.childNodes[position2]); } else { position.appendChild(node); @@ -539,7 +704,14 @@ export class Create { return div; } node() { - var tagName, str, innerHTML, position, position2, style, divposition, listen; + var tagName, + str, + innerHTML, + position, + position2, + style, + divposition, + listen; for (var i = 0; i < arguments.length; i++) { if (typeof arguments[i] == "string") { if (typeof tagName == "string") { @@ -547,10 +719,15 @@ export class Create { } else { tagName = arguments[i]; } - } else if (["div", "table", "tr", "td", "body", "fragment"].includes(get.objtype(arguments[i]))) + } else if ( + ["div", "table", "tr", "td", "body", "fragment"].includes( + get.objtype(arguments[i]) + ) + ) position = arguments[i]; else if (typeof arguments[i] == "number") position2 = arguments[i]; - else if (get.itemtype(arguments[i]) == "divposition") divposition = arguments[i]; + else if (get.itemtype(arguments[i]) == "divposition") + divposition = arguments[i]; else if (typeof arguments[i] == "object") style = arguments[i]; else if (typeof arguments[i] == "function") listen = arguments[i]; } @@ -574,12 +751,20 @@ export class Create { if (node.className.length != 0) { node.className += " "; } - while (str[i + 1] != "." && str[i + 1] != "#" && i + 1 < str.length) { + while ( + str[i + 1] != "." && + str[i + 1] != "#" && + i + 1 < str.length + ) { node.className += str[i + 1]; i++; } } else if (str[i] == "#") { - while (str[i + 1] != "." && str[i + 1] != "#" && i + 1 < str.length) { + while ( + str[i + 1] != "." && + str[i + 1] != "#" && + i + 1 < str.length + ) { node.id += str[i + 1]; i++; } @@ -587,14 +772,18 @@ export class Create { } } if (position) { - if (typeof position2 == "number" && position.childNodes.length > position2) { + if ( + typeof position2 == "number" && + position.childNodes.length > position2 + ) { position.insertBefore(node, position.childNodes[position2]); } else { position.appendChild(node); } } if (style) HTMLDivElement.prototype.css.call(node, style); - if (divposition) HTMLDivElement.prototype.setPosition.call(node, divposition); + if (divposition) + HTMLDivElement.prototype.setPosition.call(node, divposition); if (innerHTML) node.innerHTML = innerHTML; if (listen) node.onclick = listen; return node; @@ -618,15 +807,21 @@ export class Create { webview.style.border = "none"; layer.appendChild(webview); - var backbutton = ui.create.div(".menubutton.round", "返", layer, function () { - layer.remove(); - }); + var backbutton = ui.create.div( + ".menubutton.round", + "返", + layer, + function () { + layer.remove(); + } + ); backbutton.style.bottom = "10px"; backbutton.style.right = "10px"; backbutton.style.background = "rgba(0,0,0,0.4)"; backbutton.style.color = "white"; backbutton.style.textShadow = "rgba(0,0,0,0.5) 0px 0px 2px"; - backbutton.style.boxShadow = "rgba(0, 0, 0, 0.3) 0 0 0 1px, rgba(0, 0, 0, 0.3) 0 3px 10px"; + backbutton.style.boxShadow = + "rgba(0, 0, 0, 0.3) 0 0 0 1px, rgba(0, 0, 0, 0.3) 0 3px 10px"; backbutton.style.position = "fixed"; ui.window.appendChild(layer); @@ -764,10 +959,15 @@ export class Create { if (typeof col == "number") position2 = arguments[i]; else col = arguments[i]; } else row = arguments[i]; - } else if (["div", "table", "tr", "td", "body", "fragment"].includes(get.objtype(arguments[i]))) + } else if ( + ["div", "table", "tr", "td", "body", "fragment"].includes( + get.objtype(arguments[i]) + ) + ) position = arguments[i]; else if (typeof arguments[i] == "boolean") fixed = arguments[i]; - else if (get.itemtype(arguments[i]) == "divposition") divposition = arguments[i]; + else if (get.itemtype(arguments[i]) == "divposition") + divposition = arguments[i]; else if (typeof arguments[i] == "object") style = arguments[i]; } if (str == undefined) str = ""; @@ -777,12 +977,20 @@ export class Create { if (node.className.length != 0) { node.className += " "; } - while (str[i + 1] != "." && str[i + 1] != "#" && i + 1 < str.length) { + while ( + str[i + 1] != "." && + str[i + 1] != "#" && + i + 1 < str.length + ) { node.className += str[i + 1]; i++; } } else if (str[i] == "#") { - while (str[i + 1] != "." && str[i + 1] != "#" && i + 1 < str.length) { + while ( + str[i + 1] != "." && + str[i + 1] != "#" && + i + 1 < str.length + ) { node.id += str[i + 1]; i++; } @@ -799,7 +1007,10 @@ export class Create { } } if (position) { - if (typeof position2 == "number" && position.childNodes.length > position2) { + if ( + typeof position2 == "number" && + position.childNodes.length > position2 + ) { position.insertBefore(node, position.childNodes[position2]); } else { position.appendChild(node); @@ -837,51 +1048,68 @@ export class Create { ); } groupControl(dialog) { - return ui.create.control("wei", "shu", "wu", "qun", "jin", "western", "key", function (link, node) { - if (link == "全部") { - dialog.currentcapt = ""; - dialog.currentgroup = ""; - for (var i = 0; i < dialog.buttons.length; i++) { - dialog.buttons[i].style.display = ""; - } - } else { - if (node.classList.contains("thundertext")) { - dialog.currentgroup = null; - dialog.currentgroupnode = null; - node.classList.remove("thundertext"); + return ui.create.control( + "wei", + "shu", + "wu", + "qun", + "jin", + "western", + "key", + function (link, node) { + if (link == "全部") { + dialog.currentcapt = ""; + dialog.currentgroup = ""; for (var i = 0; i < dialog.buttons.length; i++) { - if ( - dialog.currentcapt && - dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt) - ) { - dialog.buttons[i].classList.add("nodisplay"); - } else { - dialog.buttons[i].classList.remove("nodisplay"); - } + dialog.buttons[i].style.display = ""; } } else { - if (dialog.currentgroupnode) { - dialog.currentgroupnode.classList.remove("thundertext"); - } - dialog.currentgroup = link; - dialog.currentgroupnode = node; - node.classList.add("thundertext"); - for (var i = 0; i < dialog.buttons.length; i++) { - if ( - dialog.buttons[i].group != link || - (dialog.currentcapt && + if (node.classList.contains("thundertext")) { + dialog.currentgroup = null; + dialog.currentgroupnode = null; + node.classList.remove("thundertext"); + for (var i = 0; i < dialog.buttons.length; i++) { + if ( + dialog.currentcapt && dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt)) - ) { - dialog.buttons[i].classList.add("nodisplay"); - } else { - dialog.buttons[i].classList.remove("nodisplay"); + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt + ) + ) { + dialog.buttons[i].classList.add("nodisplay"); + } else { + dialog.buttons[i].classList.remove("nodisplay"); + } + } + } else { + if (dialog.currentgroupnode) { + dialog.currentgroupnode.classList.remove( + "thundertext" + ); + } + dialog.currentgroup = link; + dialog.currentgroupnode = node; + node.classList.add("thundertext"); + for (var i = 0; i < dialog.buttons.length; i++) { + if ( + dialog.buttons[i].group != link || + (dialog.currentcapt && + dialog.buttons[i].capt != + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt + )) + ) { + dialog.buttons[i].classList.add("nodisplay"); + } else { + dialog.buttons[i].classList.remove("nodisplay"); + } } } } } - }); + ); } cardDialog() { var args = ["thisiscard"]; @@ -894,7 +1122,10 @@ export class Create { var list = []; for (var i in lib.character) { if (lib.character[i][4].includes("minskin")) continue; - if (lib.character[i][4].includes("boss") || lib.character[i][4].includes("hiddenboss")) { + if ( + lib.character[i][4].includes("boss") || + lib.character[i][4].includes("hiddenboss") + ) { if (lib.config.mode == "boss") continue; if (!lib.character[i][4].includes("bossallowed")) continue; } @@ -943,7 +1174,12 @@ export class Create { } else if (packname == "收藏") { pack = lib.config.favouriteCharacter; } - var node = ui.create.div(".dialogbutton.menubutton.large", packname, packnode, clickCapt); + var node = ui.create.div( + ".dialogbutton.menubutton.large", + packname, + packnode, + clickCapt + ); node.pack = pack; return node; }; @@ -974,7 +1210,11 @@ export class Create { clickCapt.call(packnode.firstChild); } - var node = ui.create.div(".dialogbutton.menubutton.large", "筛选", packnode); + var node = ui.create.div( + ".dialogbutton.menubutton.large", + "筛选", + packnode + ); return dialog; } characterDialog() { @@ -1009,9 +1249,15 @@ export class Create { precharacter = true; } else if (arguments[i] == "characterx") { characterx = true; - } else if (typeof arguments[i] == "string" && arguments[i].startsWith("onlypack:")) { + } else if ( + typeof arguments[i] == "string" && + arguments[i].startsWith("onlypack:") + ) { onlypack = arguments[i].slice(9); - } else if (typeof arguments[i] == "object" && typeof arguments[i].seperate == "function") { + } else if ( + typeof arguments[i] == "object" && + typeof arguments[i].seperate == "function" + ) { seperate = arguments[i].seperate; } else if (typeof arguments[i] === "string") { str = arguments[i]; @@ -1054,7 +1300,10 @@ export class Create { } else { for (var i in lib.character) { if (lib.character[i][4].includes("minskin")) continue; - if (lib.character[i][4].includes("boss") || lib.character[i][4].includes("hiddenboss")) { + if ( + lib.character[i][4].includes("boss") || + lib.character[i][4].includes("hiddenboss") + ) { if (lib.config.mode == "boss") continue; if (!lib.character[i][4].includes("bossallowed")) continue; } @@ -1062,7 +1311,11 @@ export class Create { if (lib.character[i][4].includes("stonehidden")) continue; if (lib.character[i][4].includes("unseen")) continue; if (lib.config.banned.includes(i)) continue; - if (lib.characterFilter[i] && !lib.characterFilter[i](get.mode())) continue; + if ( + lib.characterFilter[i] && + !lib.characterFilter[i](get.mode()) + ) + continue; if (filter && filter(i)) continue; list.push(i); if (get.is.double(i)) { @@ -1108,12 +1361,19 @@ export class Create { this.touchlink.classList.remove("active"); } for (var i = 0; i < dialog.buttons.length; i++) { - if (dialog.currentgroup && dialog.buttons[i].group != dialog.currentgroup) { + if ( + dialog.currentgroup && + dialog.buttons[i].group != dialog.currentgroup + ) { dialog.buttons[i].classList.add("nodisplay"); } else if ( dialog.currentcapt2 && dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt, true) + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt, + true + ) ) { dialog.buttons[i].classList.add("nodisplay"); } else { @@ -1124,7 +1384,9 @@ export class Create { if (dialog.currentcaptnode) { dialog.currentcaptnode.classList.remove("thundertext"); if (dialog.currentcaptnode.touchlink) { - dialog.currentcaptnode.touchlink.classList.remove("active"); + dialog.currentcaptnode.touchlink.classList.remove( + "active" + ); } } dialog.currentcapt = this.link; @@ -1136,16 +1398,26 @@ export class Create { for (var i = 0; i < dialog.buttons.length; i++) { if ( dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt) + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt + ) ) { dialog.buttons[i].classList.add("nodisplay"); } else if ( dialog.currentcapt2 && dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt, true) + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt, + true + ) ) { dialog.buttons[i].classList.add("nodisplay"); - } else if (dialog.currentgroup && dialog.buttons[i].group != dialog.currentgroup) { + } else if ( + dialog.currentgroup && + dialog.buttons[i].group != dialog.currentgroup + ) { dialog.buttons[i].classList.add("nodisplay"); } else { dialog.buttons[i].classList.remove("nodisplay"); @@ -1157,7 +1429,10 @@ export class Create { newlined2.style.display = "none"; if (!packsource.onlypack) { packsource.classList.remove("thundertext"); - if (!get.is.phoneLayout() || !lib.config.filternode_button) { + if ( + !get.is.phoneLayout() || + !lib.config.filternode_button + ) { packsource.innerHTML = "武将包"; } } @@ -1170,12 +1445,18 @@ export class Create { this.touchlink.classList.remove("active"); } for (var i = 0; i < dialog.buttons.length; i++) { - if (dialog.currentgroup && dialog.buttons[i].group != dialog.currentgroup) { + if ( + dialog.currentgroup && + dialog.buttons[i].group != dialog.currentgroup + ) { dialog.buttons[i].classList.add("nodisplay"); } else if ( dialog.currentcapt && dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt) + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt + ) ) { dialog.buttons[i].classList.add("nodisplay"); } else { @@ -1186,7 +1467,9 @@ export class Create { if (dialog.currentcaptnode2) { dialog.currentcaptnode2.classList.remove("thundertext"); if (dialog.currentcaptnode2.touchlink) { - dialog.currentcaptnode2.touchlink.classList.remove("active"); + dialog.currentcaptnode2.touchlink.classList.remove( + "active" + ); } } dialog.currentcapt2 = this.link; @@ -1202,15 +1485,25 @@ export class Create { if ( dialog.currentcapt && dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt) + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt + ) ) { dialog.buttons[i].classList.add("nodisplay"); } else if ( dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt, true) + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt, + true + ) ) { dialog.buttons[i].classList.add("nodisplay"); - } else if (dialog.currentgroup && dialog.buttons[i].group != dialog.currentgroup) { + } else if ( + dialog.currentgroup && + dialog.buttons[i].group != dialog.currentgroup + ) { dialog.buttons[i].classList.add("nodisplay"); } else { if (dialog.buttons[i].activate) { @@ -1223,7 +1516,11 @@ export class Create { } if (dialog.seperate) { for (var i = 0; i < dialog.seperate.length; i++) { - if (!dialog.seperate[i].nextSibling.querySelector(".button:not(.nodisplay)")) { + if ( + !dialog.seperate[i].nextSibling.querySelector( + ".button:not(.nodisplay)" + ) + ) { dialog.seperate[i].style.display = "none"; dialog.seperate[i].nextSibling.style.display = "none"; } else { @@ -1255,12 +1552,17 @@ export class Create { newlined.style.textAlign = "center"; node.appendChild(newlined); } else if (newlined) { - var span = ui.create.div(".tdnode.pointerdiv.shadowed.reduce_radius"); + var span = ui.create.div( + ".tdnode.pointerdiv.shadowed.reduce_radius" + ); span.style.margin = "3px"; span.style.width = "auto"; span.innerHTML = " " + namecapt[i].toUpperCase() + " "; span.link = namecapt[i]; - span.addEventListener(lib.config.touchscreen ? "touchend" : "click", clickCapt); + span.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + clickCapt + ); newlined.appendChild(span); node[namecapt[i]] = span; if (namecapt[i] == "收藏") { @@ -1273,7 +1575,10 @@ export class Create { span.innerHTML = " " + namecapt[i].toUpperCase() + " "; span.link = namecapt[i]; span.alphabet = true; - span.addEventListener(lib.config.touchscreen ? "touchend" : "click", clickCapt); + span.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + clickCapt + ); node.appendChild(span); } } @@ -1304,13 +1609,20 @@ export class Create { if ( dialog.currentcapt && dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt) + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt + ) ) { dialog.buttons[i].classList.add("nodisplay"); } else if ( dialog.currentcapt2 && dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt, true) + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt, + true + ) ) { dialog.buttons[i].classList.add("nodisplay"); } else { @@ -1328,13 +1640,20 @@ export class Create { if ( dialog.currentcapt && dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt) + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt + ) ) { dialog.buttons[i].classList.add("nodisplay"); } else if ( dialog.currentcapt2 && dialog.buttons[i].capt != - dialog.getCurrentCapt(dialog.buttons[i].link, dialog.buttons[i].capt, true) + dialog.getCurrentCapt( + dialog.buttons[i].link, + dialog.buttons[i].capt, + true + ) ) { dialog.buttons[i].classList.add("nodisplay"); } else if (dialog.currentgroup == "double") { @@ -1359,20 +1678,27 @@ export class Create { } }; for (var i = 0; i < groups.length; i++) { - var span = ui.create.div(".tdnode.pointerdiv.shadowed.reduce_radius.reduce_margin"); + var span = ui.create.div( + ".tdnode.pointerdiv.shadowed.reduce_radius.reduce_margin" + ); span.style.margin = "3px"; newlined.appendChild(span); span.innerHTML = get.translation(groups[i]); span.link = groups[i]; span._nature = natures[i]; - span.addEventListener(lib.config.touchscreen ? "touchend" : "click", clickGroup); + span.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + clickGroup + ); } var span = document.createElement("span"); newlined.appendChild(span); span.style.margin = "8px"; - packsource = ui.create.div(".tdnode.pointerdiv.shadowed.reduce_radius.reduce_margin"); + packsource = ui.create.div( + ".tdnode.pointerdiv.shadowed.reduce_radius.reduce_margin" + ); packsource.style.margin = "3px"; newlined.appendChild(packsource); var filternode = null; @@ -1386,7 +1712,9 @@ export class Create { if (get.is.phoneLayout() && lib.config.filternode_button) { newlined.style.marginTop = ""; packsource.innerHTML = "筛选"; - filternode = ui.create.div(".popup-container.filter-character.modenopause"); + filternode = ui.create.div( + ".popup-container.filter-character.modenopause" + ); ui.create.div(filternode); filternode.listen(function (e) { if (this.classList.contains("removing")) return; @@ -1412,7 +1740,9 @@ export class Create { } else { if (onlypack) { packsource.onlypack = true; - packsource.innerHTML = get.translation(onlypack + "_character_config"); + packsource.innerHTML = get.translation( + onlypack + "_character_config" + ); packsource.style.display = "none"; packsource.previousSibling.style.display = "none"; } else { @@ -1433,32 +1763,46 @@ export class Create { newlined2.style.textAlign = "center"; node.appendChild(newlined2); - packsource.addEventListener(lib.config.touchscreen ? "touchend" : "click", function () { - if (packsource.onlypack) return; - if (_status.dragged) return; - if (get.is.phoneLayout() && lib.config.filternode_button && filternode) { - _status.filterCharacter = true; - ui.window.classList.add("shortcutpaused"); - ui.window.appendChild(filternode); - ui.refresh(filternode); - filternode.classList.add("shown"); - var dh = filternode.offsetHeight - filternode.firstChild.offsetHeight; - if (dh > 0) { - filternode.firstChild.style.top = dh / 2 + "px"; + packsource.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + function () { + if (packsource.onlypack) return; + if (_status.dragged) return; + if ( + get.is.phoneLayout() && + lib.config.filternode_button && + filternode + ) { + _status.filterCharacter = true; + ui.window.classList.add("shortcutpaused"); + ui.window.appendChild(filternode); + ui.refresh(filternode); + filternode.classList.add("shown"); + var dh = + filternode.offsetHeight - + filternode.firstChild.offsetHeight; + if (dh > 0) { + filternode.firstChild.style.top = dh / 2 + "px"; + } else { + filternode.firstChild.style.top = ""; + } } else { - filternode.firstChild.style.top = ""; - } - } else { - if (newlined2.style.display == "none") { - newlined2.style.display = "block"; - } else { - newlined2.style.display = "none"; + if (newlined2.style.display == "none") { + newlined2.style.display = "block"; + } else { + newlined2.style.display = "none"; + } } } - }); + ); var packlist = []; for (var i = 0; i < lib.config.all.characters.length; i++) { - if (!lib.config.characters.includes(lib.config.all.characters[i])) continue; + if ( + !lib.config.characters.includes( + lib.config.all.characters[i] + ) + ) + continue; packlist.add(lib.config.all.characters[i]); } Object.keys(lib.characterPack) @@ -1466,7 +1810,10 @@ export class Create { if (key.indexOf("mode_extension") != 0) return false; const extName = key.slice(15); //if (!game.hasExtension(extName) || !game.hasExtensionLoaded(extName)) return false; - return lib.config[`extension_${extName}_characters_enable`] === true; + return ( + lib.config[`extension_${extName}_characters_enable`] === + true + ); }) .forEach((key) => packlist.add(key)); for (var i = 0; i < packlist.length; i++) { @@ -1479,9 +1826,13 @@ export class Create { } else { span.style.fontSize = "22px"; } - span.innerHTML = lib.translate[packlist[i] + "_character_config"]; + span.innerHTML = + lib.translate[packlist[i] + "_character_config"]; span.link = packlist[i]; - span.addEventListener(lib.config.touchscreen ? "touchend" : "click", clickCapt); + span.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + clickCapt + ); newlined2.appendChild(span); if (filternode && !onlypack) { span.touchlink = ui.create.div( @@ -1543,11 +1894,16 @@ export class Create { dialog.classList.add("scroll1"); dialog.classList.add("scroll2"); dialog.classList.add("scroll3"); - dialog.addEventListener(lib.config.touchscreen ? "touchend" : "mouseup", function () { - _status.clicked2 = true; - }); + dialog.addEventListener( + lib.config.touchscreen ? "touchend" : "mouseup", + function () { + _status.clicked2 = true; + } + ); if (heightset) { - dialog.style.height = (game.layout == "long2" || game.layout == "nova" ? 380 : 350) + "px"; + dialog.style.height = + (game.layout == "long2" || game.layout == "nova" ? 380 : 350) + + "px"; dialog._scrollset = true; } dialog.getCurrentCapt = function (link, capt, noalph) { @@ -1594,7 +1950,10 @@ export class Create { span.innerHTML = i; span.link = i; span.seperate = true; - span.addEventListener(lib.config.touchscreen ? "touchend" : "click", clickCapt); + span.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + clickCapt + ); newlined.appendChild(span); } } @@ -1628,7 +1987,8 @@ export class Create { if (thisiscard) { dialog.buttons[i].capt = getCapt(dialog.buttons[i].link[2]); } else { - dialog.buttons[i].group = lib.character[dialog.buttons[i].link][1]; + dialog.buttons[i].group = + lib.character[dialog.buttons[i].link][1]; dialog.buttons[i].capt = getCapt(dialog.buttons[i].link); } } @@ -1698,8 +2058,12 @@ export class Create { func; var node = ui.create.div(".config"); for (var i = 0; i < arguments.length; i++) { - if (typeof arguments[i] == "string" || typeof arguments[i] == "number") { - if (two) ui.create.div(".toggle", node).innerHTML = arguments[i]; + if ( + typeof arguments[i] == "string" || + typeof arguments[i] == "number" + ) { + if (two) + ui.create.div(".toggle", node).innerHTML = arguments[i]; else { ui.create.div(node).innerHTML = arguments[i]; two = true; @@ -1707,7 +2071,8 @@ export class Create { } else if (typeof arguments[i] == "function") func = arguments[i]; } if (func) { - for (var i = 0; i < node.childNodes.length; i++) node.childNodes[i].listen(func); + for (var i = 0; i < node.childNodes.length; i++) + node.childNodes[i].listen(func); } return node; } @@ -1728,12 +2093,18 @@ export class Create { switcher.innerHTML = get.translation(current); switcher.contentEditable = true; switcher.style.webkitUserSelect = "text"; - switcher.addEventListener(lib.config.touchscreen ? "touchend" : "click", ui.click.editor); + switcher.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + ui.click.editor + ); } else if (typeof current == "object") { switcher.link = current2 || current[0]; switcher.innerHTML = get.translation(switcher.link); switcher.choice = current; - switcher.addEventListener(lib.config.touchscreen ? "touchend" : "click", ui.click.switcher); + switcher.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + ui.click.switcher + ); } else { if (current) { switcher.classList.add("on"); @@ -1741,7 +2112,10 @@ export class Create { switcher.classList.add("onoff"); ui.create.div(ui.create.div(switcher)); switcher.link = current ? true : false; - switcher.addEventListener(lib.config.touchscreen ? "touchend" : "click", ui.click.toggle); + switcher.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + ui.click.toggle + ); } if (func) switcher.additionalCommand = func; return node; @@ -1789,7 +2163,10 @@ export class Create { skills(skills) { var i, same; if (ui.skills) { - if (ui.skills.skills.length == skills.length && ui.skills.style.display != "none") { + if ( + ui.skills.skills.length == skills.length && + ui.skills.style.display != "none" + ) { same = true; for (i = 0; i < skills.length; i++) { if (ui.skills.skills.includes(skills[i]) == false) { @@ -1825,7 +2202,10 @@ export class Create { skills2(skills) { var i, same; if (ui.skills2) { - if (ui.skills2.skills.length == skills.length && ui.skills2.style.display != "none") { + if ( + ui.skills2.skills.length == skills.length && + ui.skills2.style.display != "none" + ) { same = true; for (i = 0; i < skills.length; i++) { if (ui.skills2.skills.includes(skills[i]) == false) { @@ -1861,7 +2241,10 @@ export class Create { skills3(skills) { var i, same; if (ui.skills3) { - if (ui.skills3.skills.length == skills.length && ui.skills3.style.display != "none") { + if ( + ui.skills3.skills.length == skills.length && + ui.skills3.style.display != "none" + ) { same = true; for (i = 0; i < skills.length; i++) { if (ui.skills3.skills.includes(skills[i]) == false) { @@ -1911,7 +2294,11 @@ export class Create { ui.window.classList.add("server"); var serverinfo = ui.create.div(".serverinfo", ui.window); ui.create.div("", "服务器正在运行", serverinfo); - var serverinfotable = ui.create.table(2, 2, ui.create.div(serverinfo)); + var serverinfotable = ui.create.table( + 2, + 2, + ui.create.div(serverinfo) + ); serverinfotable.style.display = "inline-block"; serverinfotable.firstChild.firstChild.innerHTML = "房间人数:"; serverinfotable.firstChild.lastChild.id = "server_count"; @@ -1925,7 +2312,9 @@ export class Create { function () { if ( _status.gameStarted && - !confirm("关闭服务器当前进行的游戏将终止且不可恢复,是否确定关闭?") + !confirm( + "关闭服务器当前进行的游戏将终止且不可恢复,是否确定关闭?" + ) ) { return; } @@ -1936,7 +2325,10 @@ export class Create { ); } - ui.window.addEventListener(lib.config.touchscreen ? "touchend" : "click", ui.click.window); + ui.window.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + ui.click.window + ); ui.system = ui.create.div("#system.", ui.window); ui.arena = ui.create.div("#arena.nome", ui.window); if (lib.device == "ios" && !get.is.phoneLayout()) { @@ -1971,7 +2363,11 @@ export class Create { if (game.layout == "default") { ui.arena.classList.add("oldlayout"); } - if (lib.config.player_border != "wide" || game.layout == "long" || game.layout == "long2") { + if ( + lib.config.player_border != "wide" || + game.layout == "long" || + game.layout == "long2" + ) { ui.arena.classList.add("slim_player"); } if (lib.config.player_border == "slim") { @@ -2021,7 +2417,8 @@ export class Create { document.body.classList.add("statusbar"); } if (lib.config.keep_awake) { - if (window.plugins && window.plugins.insomnia) window.plugins.insomnia.keepAwake(); + if (window.plugins && window.plugins.insomnia) + window.plugins.insomnia.keepAwake(); else { lib.init.js(lib.assetURL + "game", "NoSleep", function () { var noSleep = new NoSleep(); @@ -2044,12 +2441,14 @@ export class Create { lib.init.js(lib.assetURL + "game", "pinyinjs", function () {}); lib.init.js(lib.assetURL + "game", "keyWords", function () {}); - lib.updateURL = lib.updateURLS[lib.config.update_link] || lib.updateURLS.coding; + lib.updateURL = + lib.updateURLS[lib.config.update_link] || lib.updateURLS.coding; lib.init.cssstyles(); ui.arena.dataset.player_height = lib.config.player_height || "default"; - ui.arena.dataset.player_height_nova = lib.config.player_height_nova || "default"; + ui.arena.dataset.player_height_nova = + lib.config.player_height_nova || "default"; // if(lib.config.player_height_nova=='long') ui.arena.classList.add('player_autolong'); ui.arena.dataset.target_shake = lib.config.target_shake || "off"; ui.backgroundMusic = document.createElement("audio"); @@ -2083,9 +2482,15 @@ export class Create { ui.arena.classList.add("hide_name"); } if (lib.config.change_skin_auto != "off") { - _status.skintimeout = setTimeout(ui.click.autoskin, parseInt(lib.config.change_skin_auto)); + _status.skintimeout = setTimeout( + ui.click.autoskin, + parseInt(lib.config.change_skin_auto) + ); } - if (lib.config.border_style && lib.config.border_style.startsWith("dragon_")) { + if ( + lib.config.border_style && + lib.config.border_style.startsWith("dragon_") + ) { ui.arena.dataset.framedecoration = lib.config.border_style.slice(7); } @@ -2100,7 +2505,10 @@ export class Create { ui.historybar = ui.create.div("#historybar.shadowed", ui.window); lib.setScroll(ui.historybar); - ui.roundmenu = ui.create.div("#roundmenu.roundarenabutton.menubutton.round", ui.arena); + ui.roundmenu = ui.create.div( + "#roundmenu.roundarenabutton.menubutton.round", + ui.arena + ); ui.roundmenu._position = [180, 210]; ui.create.div(ui.roundmenu); ui.create.div(ui.roundmenu); @@ -2198,7 +2606,8 @@ export class Create { if (!ui.roundmenu._dragtransform) { ui.roundmenu._dragtransform = [0, 0]; } - ui.roundmenu._dragorigintransform = ui.roundmenu._dragtransform.slice(0); + ui.roundmenu._dragorigintransform = + ui.roundmenu._dragtransform.slice(0); ui.roundmenu._resetTimeout = setTimeout(function () { resetround(); delete ui.roundmenu._resetTimeout; @@ -2213,7 +2622,8 @@ export class Create { if (lib.config.roundmenu_transform) { var translate = lib.config.roundmenu_transform; ui.roundmenu._dragtransform = translate; - ui.roundmenu.style.transform = "translate(" + translate[0] + "px," + translate[1] + "px)"; + ui.roundmenu.style.transform = + "translate(" + translate[0] + "px," + translate[1] + "px)"; ui.click.checkroundtranslate(); } if (get.is.phoneLayout()) { @@ -2281,7 +2691,14 @@ export class Create { ui.pause.hide(); } if (!lib.config.touchscreen) { - lib.setPopped(ui.pause, ui.click.pausehistory, 220, 400, null, true); + lib.setPopped( + ui.pause, + ui.click.pausehistory, + 220, + 400, + null, + true + ); } if (!lib.config.show_pause) { ui.pause.style.display = "none"; @@ -2309,7 +2726,11 @@ export class Create { }); } ui.auto.id = "autobutton"; - ui.autonode = ui.create.div("#autonode", "
托管中...
", ui.arena); + ui.autonode = ui.create.div( + "#autonode", + "
托管中...
", + ui.arena + ); ui.autonode.listen(ui.click.auto); if (lib.config.mode == "connect") { ui.auto.hide(); @@ -2317,11 +2738,16 @@ export class Create { } if (lib.forcehide) { - if (lib.forcehide.includes("replay")) ui.replay.classList.add("forcehide"); - if (lib.forcehide.includes("auto")) ui.auto.classList.add("forcehide"); - if (lib.forcehide.includes("pause")) ui.pause.classList.add("forcehide"); - if (lib.forcehide.includes("wuxie")) ui.wuxie.classList.add("forcehide"); - if (lib.forcehide.includes("cardPileButton")) ui.cardPileButton.classList.add("forcehide"); + if (lib.forcehide.includes("replay")) + ui.replay.classList.add("forcehide"); + if (lib.forcehide.includes("auto")) + ui.auto.classList.add("forcehide"); + if (lib.forcehide.includes("pause")) + ui.pause.classList.add("forcehide"); + if (lib.forcehide.includes("wuxie")) + ui.wuxie.classList.add("forcehide"); + if (lib.forcehide.includes("cardPileButton")) + ui.cardPileButton.classList.add("forcehide"); } ui.volumn = ui.create.system("♫"); lib.setPopped(ui.volumn, ui.click.volumn, 200); @@ -2357,7 +2783,8 @@ export class Create { } else hs.sort(function (b, a) { if (a.name != b.name) return lib.sort.card(a.name, b.name); - else if (a.suit != b.suit) return lib.suit.indexOf(a) - lib.suit.indexOf(b); + else if (a.suit != b.suit) + return lib.suit.indexOf(a) - lib.suit.indexOf(b); else return a.number - b.number; }); game.me.directgain(hs, false); @@ -2400,9 +2827,12 @@ export class Create { "rotate(" + get.round((hours + 9) * 30, 2) + "deg)"; } else { ui.roundmenu.childNodes[13].style.transform = - "rotate(" + get.round((hours + minutes / 60 + 9) * 30, 2) + "deg)"; + "rotate(" + + get.round((hours + minutes / 60 + 9) * 30, 2) + + "deg)"; } - ui.roundmenu.childNodes[12].style.transform = "rotate(" + (minutes + 45) * 6 + "deg)"; + ui.roundmenu.childNodes[12].style.transform = + "rotate(" + (minutes + 45) * 6 + "deg)"; if (minutes < 10) { minutes = "0" + minutes.toString(); } @@ -2468,7 +2898,12 @@ export class Create { ui.shortcut, game.reload ).dataset.position = 1; - ui.create.div(".menubutton.round", "退出", ui.shortcut, game.exit).dataset.position = 3; + ui.create.div( + ".menubutton.round", + "退出", + ui.shortcut, + game.exit + ).dataset.position = 3; ui.create.div( ".menubutton.round", "记录", @@ -2493,7 +2928,9 @@ export class Create { } if (removed) game.saveConfigValue("favouriteMode"); this.innerHTML = ""; - favouriteMode.slice(0, 6).forEach((value, index) => this.add(value, index)); + favouriteMode + .slice(0, 6) + .forEach((value, index) => this.add(value, index)); let mode = lib.config.mode; const config = get.config(`${mode}_mode`); if (typeof config == "string") mode += `|${config}`; @@ -2506,7 +2943,10 @@ export class Create { submode = info[1], node = ui.create.div(".menubutton.large", this), dataset = node.dataset; - dataset.type = Math.min(6, lib.config.favouriteMode.length) % 2 == 0 ? "even" : "odd"; + dataset.type = + Math.min(6, lib.config.favouriteMode.length) % 2 == 0 + ? "even" + : "odd"; dataset.position = index; let str = lib.translate[name] || lib.translate[mode] || ""; if (str.length == 2) str += "模式"; @@ -2519,7 +2959,9 @@ export class Create { }; ui.favmode = ui.create.system("收藏", function () { const mode = - typeof _status.mode == "string" ? `${lib.config.mode}|${_status.mode}` : lib.config.mode; + typeof _status.mode == "string" + ? `${lib.config.mode}|${_status.mode}` + : lib.config.mode; if (this.classList.contains("glow")) { this.classList.remove("glow"); lib.config.favouriteMode.remove(mode); @@ -2561,9 +3003,12 @@ export class Create { // @ts-ignore while (lib.arenaReady.length) lib.arenaReady.shift()(); delete lib.arenaReady; - if (lib.config.auto_check_update && !sessionStorage.getItem("auto_check_update")) { + if ( + lib.config.auto_check_update && + !sessionStorage.getItem("auto_check_update") + ) { setTimeout(() => { - sessionStorage.setItem("auto_check_update", '1'); + sessionStorage.setItem("auto_check_update", "1"); game.checkForUpdate(false); }, 3000); } @@ -2574,8 +3019,12 @@ export class Create { game.saveConfig("asset_version", "无"); } else { var func = function () { - if (confirm("是否下载图片和字体素材?(约386.6MB)")) { - if (!ui.arena.classList.contains("menupaused")) { + if ( + confirm("是否下载图片和字体素材?(约386.6MB)") + ) { + if ( + !ui.arena.classList.contains("menupaused") + ) { ui.click.configMenu(); ui.click.menuTab("其它"); } @@ -2625,15 +3074,25 @@ export class Create { node.listen(func); } if (lib.config.button_press) { - node.addEventListener(lib.config.touchscreen ? "touchstart" : "mousedown", function (e) { - if (!node.classList.contains("hidden")) node.classList.add("pressdown"); - }); - node.addEventListener(lib.config.touchscreen ? "touchend" : "mouseup", function (e) { - node.classList.remove("pressdown"); - }); - node.addEventListener(lib.config.touchscreen ? "touchmove" : "mousemove", function (e) { - node.classList.remove("pressdown"); - }); + node.addEventListener( + lib.config.touchscreen ? "touchstart" : "mousedown", + function (e) { + if (!node.classList.contains("hidden")) + node.classList.add("pressdown"); + } + ); + node.addEventListener( + lib.config.touchscreen ? "touchend" : "mouseup", + function (e) { + node.classList.remove("pressdown"); + } + ); + node.addEventListener( + lib.config.touchscreen ? "touchmove" : "mousemove", + function (e) { + node.classList.remove("pressdown"); + } + ); } return node; } @@ -2692,7 +3151,10 @@ export class Create { * @returns { import("../library/index.js").Button } */ tdnodes: (item, type, position, noclick, node) => { - node = ui.create.div(".shadowed.reduce_radius.pointerdiv.tdnode.tdnodes", position); + node = ui.create.div( + ".shadowed.reduce_radius.pointerdiv.tdnode.tdnodes", + position + ); if (Array.isArray(item)) { node.innerHTML = "" + item[1] + ""; node.link = item[0]; @@ -2708,10 +3170,16 @@ export class Create { blank: (item, type, position, noclick, node) => { node = ui.create.div(".button.card", position); node.link = item; - if (get.position(item) == "j" && item.viewAs && lib.config.cardtempname != "off") { + if ( + get.position(item) == "j" && + item.viewAs && + lib.config.cardtempname != "off" + ) { node.classList.add("infoflip"); node.classList.add("infohidden"); - ui.create.cardTempName(item, node).style.setProperty("display", "block", "important"); + ui.create + .cardTempName(item, node) + .style.setProperty("display", "block", "important"); } return node; }, @@ -2776,9 +3244,13 @@ export class Create { node = ui.create.div(".button.character", position); } node._link = item; - if (_status.noReplaceCharacter && type == "characterx") type = "character"; + if (_status.noReplaceCharacter && type == "characterx") + type = "character"; if (type == "characterx") { - if (lib.characterReplace[item] && lib.characterReplace[item].length) + if ( + lib.characterReplace[item] && + lib.characterReplace[item].length + ) item = lib.characterReplace[item].randomGet(); } node.link = item; @@ -2798,7 +3270,8 @@ export class Create { node.node.hp.remove(); node.node.group.remove(); node.node.intro.remove(); - if (node.node.replaceButton) node.node.replaceButton.remove(); + if (node.node.replaceButton) + node.node.replaceButton.remove(); } node.node = { name: ui.create.div(".name", node), @@ -2824,8 +3297,13 @@ export class Create { node.node.group.style.display = "none"; } node.classList.add("newstyle"); - node.node.name.dataset.nature = get.groupnature(get.bordergroup(infoitem)); - node.node.group.dataset.nature = get.groupnature(get.bordergroup(infoitem), "raw"); + node.node.name.dataset.nature = get.groupnature( + get.bordergroup(infoitem) + ); + node.node.group.dataset.nature = get.groupnature( + get.bordergroup(infoitem), + "raw" + ); ui.create.div(node.node.hp); var hp = get.infoHp(infoitem[2]), maxHp = get.infoMaxHp(infoitem[2]), @@ -2852,7 +3330,8 @@ export class Create { var maxHp = get.infoMaxHp(infoitem[2]); var shield = get.infoHujia(infoitem[2]); if (maxHp > 14) { - if (typeof infoitem[2] == "string") node.node.hp.innerHTML = infoitem[2]; + if (typeof infoitem[2] == "string") + node.node.hp.innerHTML = infoitem[2]; else node.node.hp.innerHTML = get.numStr(infoitem[2]); node.node.hp.classList.add("text"); } else { @@ -2871,8 +3350,14 @@ export class Create { if (node.node.name.querySelectorAll("br").length >= 4) { node.node.name.classList.add("long"); if (lib.config.buttoncharacter_style == "old") { - node.addEventListener("mouseenter", ui.click.buttonnameenter); - node.addEventListener("mouseleave", ui.click.buttonnameleave); + node.addEventListener( + "mouseenter", + ui.click.buttonnameenter + ); + node.addEventListener( + "mouseleave", + ui.click.buttonnameleave + ); } } node.node.intro.innerHTML = lib.config.intro; @@ -2889,9 +3374,13 @@ export class Create { "" ); if (double.length > 4) - if (new Set([5, 6, 9]).has(double.length)) node.node.group.style.height = "48px"; + if (new Set([5, 6, 9]).has(double.length)) + node.node.group.style.height = "48px"; else node.node.group.style.height = "64px"; - } else node.node.group.innerHTML = `
${get.translation(infoitem[1])}
`; + } else + node.node.group.innerHTML = `
${get.translation( + infoitem[1] + )}
`; node.node.group.style.backgroundColor = get.translation( `${get.bordergroup(infoitem)}Color` ); @@ -2904,21 +3393,24 @@ export class Create { node.node.replaceButton = intro; intro.innerHTML = "切换"; intro._node = node; - intro.addEventListener(lib.config.touchscreen ? "touchend" : "click", function () { - _status.tempNoButton = true; - var node = this._node; - var list = lib.characterReplace[node._link]; - var link = node.link; - var index = list.indexOf(link); - if (index == list.length - 1) index = 0; - else index++; - link = list[index]; - node.link = link; - node.refresh(node, link); - setTimeout(function () { - delete _status.tempNoButton; - }, 200); - }); + intro.addEventListener( + lib.config.touchscreen ? "touchend" : "click", + function () { + _status.tempNoButton = true; + var node = this._node; + var list = lib.characterReplace[node._link]; + var link = node.link; + var index = list.indexOf(link); + if (index == list.length - 1) index = 0; + else index++; + link = list[index]; + node.link = link; + node.refresh(node, link); + setTimeout(function () { + delete _status.tempNoButton; + }, 200); + } + ); } }; node.refresh = func; @@ -2930,7 +3422,13 @@ export class Create { * @returns { import("../library/index.js").Button } */ characterx: (item, type, position, noclick, node) => { - return ui.create.buttonPresets.character(item, type, position, noclick, node); + return ui.create.buttonPresets.character( + item, + type, + position, + noclick, + node + ); }, /** * @returns { import("../library/index.js").Button } @@ -2952,7 +3450,11 @@ export class Create { if (item.name && item.name.startsWith("unknown")) { if (item.node && item.node.name_seat) { node.classList.add("cardbg"); - ui.create.div(".avatar_name", node, get.translation(item.name)); + ui.create.div( + ".avatar_name", + node, + get.translation(item.name) + ); } else { node.setBackground(item.name1, "character"); } @@ -2984,9 +3486,18 @@ export class Create { var fragment = document.createDocumentFragment(); for (var i = 0; i < list.length; i++) { if (pre) { - buttons.push(ui.create.prebutton(list[i], type.slice(3), fragment, noclick)); + buttons.push( + ui.create.prebutton( + list[i], + type.slice(3), + fragment, + noclick + ) + ); } else { - buttons.push(ui.create.button(list[i], type, fragment, noclick)); + buttons.push( + ui.create.button(list[i], type, fragment, noclick) + ); } } if (position) position.appendChild(fragment); @@ -3002,7 +3513,8 @@ export class Create { str = item; link = item; } - if (!str.startsWith(""; + if (!str.startsWith(""; var next = dialog.add(str); if (!noclick) next.firstChild.addEventListener( @@ -3021,7 +3533,8 @@ export class Create { ui.updateConnectPlayerPositions(); game.connectPlayers = []; const configOL = lib.configOL; - const numberOfPlayers = parseInt(configOL.player_number) || configOL.number; + const numberOfPlayers = + parseInt(configOL.player_number) || configOL.number; for (let position = 0; position < numberOfPlayers; position++) { const player = ui.create.player(ui.window); player.dataset.position = position; @@ -3058,7 +3571,11 @@ export class Create { } else { var num = 0; for (var i of game.connectPlayers) { - if (!i.nickname && !i.classList.contains("unselectable2")) num++; + if ( + !i.nickname && + !i.classList.contains("unselectable2") + ) + num++; } if (num >= lib.configOL.number - 1) { alert("至少要有两名玩家才能开始游戏!"); @@ -3084,8 +3601,12 @@ export class Create { var text = `无名杀-联机-${lib.translate[get.mode()]}-${ game.connectPlayers.filter((p) => p.avatar).length }/${ - game.connectPlayers.filter((p) => !p.classList.contains("unselectable2")).length - }\n${get.connectNickname()}邀请你加入${game.roomId}房间\n联机地址:${ + game.connectPlayers.filter( + (p) => !p.classList.contains("unselectable2") + ).length + }\n${get.connectNickname()}邀请你加入${ + game.roomId + }房间\n联机地址:${ game.ip }\n请先通过游戏内菜单-开始-联机中启用“读取邀请链接”选项`; window.focus(); @@ -3099,7 +3620,9 @@ export class Create { game.alert(`分享内容复制失败${e || ""}`); }); } else { - var input = ui.create.node("textarea", ui.window, { opacity: "0" }); + var input = ui.create.node("textarea", ui.window, { + opacity: "0", + }); input.value = text; input.focus(); input.select(); @@ -3213,11 +3736,23 @@ export class Create { if (lib.card[lib.card.list[i][2]]) { if (!lib.card.list[i]._replaced) { if (!_status.connectMode) { - if (lib.config.bannedcards.includes(lib.card.list[i][2])) continue; + if ( + lib.config.bannedcards.includes(lib.card.list[i][2]) + ) + continue; } else { - if (lib.configOL.bannedcards.includes(lib.card.list[i][2])) continue; + if ( + lib.configOL.bannedcards.includes( + lib.card.list[i][2] + ) + ) + continue; } - if (game.bannedcards && game.bannedcards.includes(lib.card.list[i][2])) continue; + if ( + game.bannedcards && + game.bannedcards.includes(lib.card.list[i][2]) + ) + continue; } lib.inpile.add(lib.card.list[i][2]); if (lib.card.list[i][2] == "sha" && lib.card.list[i][3]) @@ -3235,7 +3770,8 @@ export class Create { } game.broadcastAll( function (num, pile, top, cardtag, inpile2) { - if (ui.cardPileNumber) ui.cardPileNumber.innerHTML = "0轮 剩余牌: " + num; + if (ui.cardPileNumber) + ui.cardPileNumber.innerHTML = "0轮 剩余牌: " + num; lib.inpile = pile; _status.pileTop = top; _status.cardtag = cardtag; diff --git a/noname/ui/index.js b/noname/ui/index.js index 638e0ca9d..b57bc9361 100644 --- a/noname/ui/index.js +++ b/noname/ui/index.js @@ -136,6 +136,11 @@ export class UI { * @type {HTMLDivElement} */ tempnowuxie; + /** + * @type {HTMLDivElement[]} + */ + toastQueue = []; + refresh(node) { void window.getComputedStyle(node, null).getPropertyValue("opacity"); } From 16a391f74aa9048edd87aed0c52e94096cfe8dd3 Mon Sep 17 00:00:00 2001 From: kuangthree Date: Sat, 20 Apr 2024 13:23:28 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=8C=E7=94=B2?= =?UTF-8?q?=E5=A4=A9=E4=B8=8B=E8=87=AA=E7=94=B1=E7=82=B9=E5=B0=86=E6=97=A0?= =?UTF-8?q?=E9=99=90=E5=88=B7=E9=87=91=E5=B8=81BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- audio/effect/coin.mp3 | Bin 0 -> 10074 bytes audio/effect/coin_cost.mp3 | Bin 0 -> 36614 bytes extension/coin/extension.js | 6 +++++- layout/default/toast.css | 2 +- mode/boss.js | 2 +- mode/brawl.js | 2 +- mode/chess.js | 2 +- mode/doudizhu.js | 2 +- mode/guozhan.js | 2 +- mode/identity.js | 2 +- mode/stone.js | 2 +- mode/versus.js | 8 ++++---- noname/ui/create/index.js | 2 +- 13 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 audio/effect/coin.mp3 create mode 100644 audio/effect/coin_cost.mp3 diff --git a/audio/effect/coin.mp3 b/audio/effect/coin.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c5be25569726ea38d74e0f6c6bf847e60f082140 GIT binary patch literal 10074 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 u-Jk#Ua$GB)!tlmj4&#Jb&5% literal 0 HcmV?d00001 diff --git a/audio/effect/coin_cost.mp3 b/audio/effect/coin_cost.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1bed546bb044bffaa2306b827bc00b5ea4cea0dd GIT binary patch literal 36614 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 ZWs7D`mzW_DN;Lpa##A$L)Sw|00sz1~4Ilsj literal 0 HcmV?d00001 diff --git a/extension/coin/extension.js b/extension/coin/extension.js index 0e59440fe..cf5aaa005 100644 --- a/extension/coin/extension.js +++ b/extension/coin/extension.js @@ -131,8 +131,12 @@ game.import("play", function () { } }, game: { - changeCoin: function (num) { + changeCoin: function (num,toast) { if (typeof num == "number" && ui.coin) { + if(num!=0 && toast!== false){ + game.playAudio('effect',num > 0?"coin":"coin_cost"); + ui.create.toast(`${num > 0 ? "获得":"花费"} ${num} 金币`); + } game.saveConfig("coin", lib.config.coin + num); var str; if (lib.config.coin_display_playpackconfig == "text") { diff --git a/layout/default/toast.css b/layout/default/toast.css index ca4d5be32..f177242c8 100644 --- a/layout/default/toast.css +++ b/layout/default/toast.css @@ -1,5 +1,5 @@ .toast-container { - position: fixed; + position: absolute; top: 15%; left: 50%; transform: translateX(-50%); diff --git a/mode/boss.js b/mode/boss.js index dc1b569a1..673a86cd2 100644 --- a/mode/boss.js +++ b/mode/boss.js @@ -1718,7 +1718,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; diff --git a/mode/brawl.js b/mode/brawl.js index 1ddbb59d8..7963c93b7 100644 --- a/mode/brawl.js +++ b/mode/brawl.js @@ -3420,7 +3420,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; diff --git a/mode/chess.js b/mode/chess.js index ca13e949d..16326c333 100644 --- a/mode/chess.js +++ b/mode/chess.js @@ -4306,7 +4306,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; diff --git a/mode/doudizhu.js b/mode/doudizhu.js index 9acb775e0..a0b6e7e94 100644 --- a/mode/doudizhu.js +++ b/mode/doudizhu.js @@ -1094,7 +1094,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; diff --git a/mode/guozhan.js b/mode/guozhan.js index b979e592c..5ef523cb5 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -22429,7 +22429,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; diff --git a/mode/identity.js b/mode/identity.js index 15c00e139..4bbd46f23 100644 --- a/mode/identity.js +++ b/mode/identity.js @@ -2303,7 +2303,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; diff --git a/mode/stone.js b/mode/stone.js index 9d7de1f9a..1a5ebf5f5 100644 --- a/mode/stone.js +++ b/mode/stone.js @@ -2486,7 +2486,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; diff --git a/mode/versus.js b/mode/versus.js index 8a1967da4..2ee231b97 100644 --- a/mode/versus.js +++ b/mode/versus.js @@ -841,7 +841,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; @@ -1115,7 +1115,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; @@ -1446,7 +1446,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; @@ -1637,7 +1637,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) { ui.cheat2 = ui.create.control("自由选将", function () { if (this.dialog == _status.event.dialog) { if (game.changeCoin) { - game.changeCoin(50); + game.changeCoin(10); } this.dialog.close(); _status.event.dialog = this.backup; diff --git a/noname/ui/create/index.js b/noname/ui/create/index.js index 33b7283f9..235a5cbc9 100644 --- a/noname/ui/create/index.js +++ b/noname/ui/create/index.js @@ -360,7 +360,7 @@ export class Create { return container; })(); const toast = document.createElement("div"); - toast.textContent = message; + toast.innerHTML = message; toast.classList.add("toast"); toastContainer.appendChild(toast); ui.toastQueue.push(toast); From 9a0d853afa36bbcd4a46a64a9bbbc8afee613040 Mon Sep 17 00:00:00 2001 From: kuangthree Date: Sat, 20 Apr 2024 13:35:48 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- layout/default/toast.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/layout/default/toast.css b/layout/default/toast.css index f177242c8..b5486fb0b 100644 --- a/layout/default/toast.css +++ b/layout/default/toast.css @@ -1,4 +1,5 @@ .toast-container { + display:block; position: absolute; top: 15%; left: 50%; @@ -8,7 +9,10 @@ .toast { - display: none; + display: block; + position: absolute; + left: 50%; + transform: translateX(-50%); background-color: rgba(255, 165, 0, 0.7); border-radius: 10px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); From b5b9bac2ff5a6b0cd9b512f9eab917a73b49f2ed Mon Sep 17 00:00:00 2001 From: kuangthree Date: Sat, 20 Apr 2024 15:06:44 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension/coin/extension.js | 17 +++++++++++++---- layout/default/toast.css | 7 ++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/extension/coin/extension.js b/extension/coin/extension.js index cf5aaa005..3e5e1293c 100644 --- a/extension/coin/extension.js +++ b/extension/coin/extension.js @@ -131,11 +131,20 @@ game.import("play", function () { } }, game: { - changeCoin: function (num,toast) { + changeCoin: function (num, toast, audio) { if (typeof num == "number" && ui.coin) { - if(num!=0 && toast!== false){ - game.playAudio('effect',num > 0?"coin":"coin_cost"); - ui.create.toast(`${num > 0 ? "获得":"花费"} ${num} 金币`); + if (num != 0 && toast !== false) { + ui.create.toast( + `${num > 0 ? "获得" : "花费"} ${Math.abs( + num + )} 金币` + ); + } + if (audio !== false) { + game.playAudio( + "effect", + num > 0 ? "coin" : "coin_cost" + ); } game.saveConfig("coin", lib.config.coin + num); var str; diff --git a/layout/default/toast.css b/layout/default/toast.css index b5486fb0b..b5f3d60bb 100644 --- a/layout/default/toast.css +++ b/layout/default/toast.css @@ -1,5 +1,5 @@ .toast-container { - display:block; + display: block; position: absolute; top: 15%; left: 50%; @@ -7,7 +7,6 @@ z-index: 9999; } - .toast { display: block; position: absolute; @@ -25,17 +24,19 @@ animation: fadeInOut 1500ms ease-in-out forwards; } - @keyframes fadeInOut { 0% { opacity: 0; } + 20% { opacity: 1; } + 80% { opacity: 1; } + 100% { opacity: 0; }