diff --git a/help.md b/help.md
index e91f648c..baa21eec 100644
--- a/help.md
+++ b/help.md
@@ -6,8 +6,8 @@ Copy the URL directly to share the Formation, or add a Bookmark to archives. You
* 使用后退即可撤销上一次修改。
Use back to undo the last edit.

-* 拖拽怪物头像即可快速切换位置,也支持手机触屏。
-Drag monster avatars to quickly switch positions, also supports mobile touch screen.
+* 拖拽怪物头像即可快速交换位置或复制怪物,也支持手机触屏。
+Drag monster avatars to quickly swap positions or copy monster, also supports mobile touch screen.

* 可以在编辑界面的怪物ID输入怪物名称来搜索怪物。
You can search for monsters by entering the monster name in the monster ID of the editing interface.
diff --git a/languages/en.css b/languages/en.css
index d04dc838..a7839645 100644
--- a/languages/en.css
+++ b/languages/en.css
@@ -211,17 +211,14 @@
.control-box .btn-swap-ABC-team::before{
content: "🔄Rotating ABC Team";
}
-.control-box .btn-show-mon-id::before{
- content: "⬜Hide monster ID";
+.control-box .show-mon-id-lbl::after{
+ content:"🆔Show monster ID";
}
-.not-show-mon-id .control-box .btn-show-mon-id::before{
- content: "🆔Show monster ID";
+.control-box .btn-show-mon-skill-cd-lbl::after{
+ content:"❄️Show full skill's cooldown";
}
-.show-mon-skill-cd .control-box .btn-show-mon-skill-cd::before{
- content: "⬜Hide full skill's cooldown";
-}
-.control-box .btn-show-mon-skill-cd::before{
- content: "❄️Show full skill's cooldown";
+.control-box .change-swap-to-copy-lbl::after{
+ content:"Change \"Swap\" to \"Copy\" when dragging";
}
.team-total-info .tIf-total-hp::before{
content: "Team HP(Team Awoken & Badge): ";
diff --git a/languages/ja.css b/languages/ja.css
index d121e3a0..e3bf83f9 100644
--- a/languages/ja.css
+++ b/languages/ja.css
@@ -204,17 +204,14 @@
.control-box .btn-swap-AB-team::before{
content: "🔄ローテーションABチーム";
}
-.control-box .btn-show-mon-id::before{
- content: "⬜隠しモンスターID";
+.control-box .show-mon-id-lbl::after{
+ content:"🆔モンスターIDを表示";
}
-.not-show-mon-id .control-box .btn-show-mon-id::before{
- content: "🆔モンスターIDを表示";
+.control-box .btn-show-mon-skill-cd-lbl::after{
+ content:"❄️フル スキル クールを表示";
}
-.show-mon-skill-cd .control-box .btn-show-mon-skill-cd::before{
- content: "⬜フル スキル クールを非表示";
-}
-.control-box .btn-show-mon-skill-cd::before{
- content: "❄️フル スキル クールを表示";
+.control-box .change-swap-to-copy-lbl::after{
+ content:"ドラッグ時に「スワップ」を「コピー」に変更";
}
.team-total-info .tIf-total-hp::before{
content: "チームHP(チーム覚醒とバッジ):";
diff --git a/languages/ko.css b/languages/ko.css
index ff56eedc..73abe832 100644
--- a/languages/ko.css
+++ b/languages/ko.css
@@ -204,17 +204,14 @@
.control-box .btn-swap-AB-team::before{
content: "🔄로테이션 AB 팀";
}
-.control-box .btn-show-mon-id::before{
- content: "⬜몬스터 ID 숨기기";
+.control-box .show-mon-id-lbl::after{
+ content:"🆔몬스터 ID 표시";
}
-.not-show-mon-id .control-box .btn-show-mon-id::before{
- content: "🆔⬜몬스터 ID 표시";
+.control-box .btn-show-mon-skill-cd-lbl::after{
+ content:"❄️전체 스킬 쿨을 표시";
}
-.show-mon-skill-cd .control-box .btn-show-mon-skill-cd::before{
- content: "⬜전체 스킬 쿨을 숨기기";
-}
-.control-box .btn-show-mon-skill-cd::before{
- content: "❄️전체 스킬 쿨을 표시";
+.control-box .change-swap-to-copy-lbl::after{
+ content:"드래그할 때 \"바꾸기\"를 \"복사\"로 변경";
}
.team-total-info .tIf-total-hp::before{
content: "팀 HP(팀 각성 및 배지):";
diff --git a/languages/zh-TW.css b/languages/zh-TW.css
index 6b35df33..dc848bd5 100644
--- a/languages/zh-TW.css
+++ b/languages/zh-TW.css
@@ -210,17 +210,14 @@
.control-box .btn-swap-ABC-team::before{
content: "🔄輪換AB隊";
}
-.control-box .btn-show-mon-id::before{
- content: "⬜隱藏怪物ID";
+.control-box .show-mon-id-lbl::after{
+ content:"🆔顯示怪物ID";
}
-.not-show-mon-id .control-box .btn-show-mon-id::before{
- content: "🆔顯示怪物ID";
+.control-box .btn-show-mon-skill-cd-lbl::after{
+ content:"❄️顯示已滿技能冷卻";
}
-.show-mon-skill-cd .control-box .btn-show-mon-skill-cd::before{
- content: "⬜隱藏已滿技能冷卻";
-}
-.control-box .btn-show-mon-skill-cd::before{
- content: "❄️顯示已滿技能冷卻";
+.control-box .change-swap-to-copy-lbl::after{
+ content:"拖拽時使用“複製”而不是“替換”";
}
.team-total-info .tIf-total-hp::before{
content: "隊伍HP(隊伍覺醒和徽章):";
diff --git a/languages/zh.css b/languages/zh.css
index fb96310d..82983942 100644
--- a/languages/zh.css
+++ b/languages/zh.css
@@ -210,17 +210,14 @@
.control-box .btn-swap-ABC-team::before{
content: "🔄轮换ABC队";
}
-.control-box .btn-show-mon-id::before{
- content: "⬜隐藏怪物ID";
+.control-box .show-mon-id-lbl::after{
+ content:"🆔显示怪物ID";
}
-.not-show-mon-id .control-box .btn-show-mon-id::before{
- content: "🆔显示怪物ID";
+.control-box .btn-show-mon-skill-cd-lbl::after{
+ content:"❄️显示已满技能冷却";
}
-.show-mon-skill-cd .control-box .btn-show-mon-skill-cd::before{
- content: "⬜隐藏已满技能冷却";
-}
-.control-box .btn-show-mon-skill-cd::before{
- content: "❄️显示已满技能冷却";
+.control-box .change-swap-to-copy-lbl::after{
+ content:"拖拽时使用“复制”而不是“替换”";
}
.team-total-info .tIf-total-hp::before{
content: "队伍HP(队伍觉醒和徽章):";
diff --git a/multi.html b/multi.html
index f462aed7..93cc363b 100644
--- a/multi.html
+++ b/multi.html
@@ -29,12 +29,14 @@ var formation = new Formation(teamsCount,5);
diff --git a/script.js b/script.js
index 4e903686..a20f3c0b 100644
--- a/script.js
+++ b/script.js
@@ -19,6 +19,7 @@ var currentLanguage; //当前语言
var currentDataSource; //当前数据
var interchangeSvg; //储存划线的SVG
var interchangePath; //储存划线的线
+var changeSwapToCopy; //储存交换“复制”和“替换”
var controlBox; //储存整个controlBox
var statusLine; //储存状态栏
var formationBox; //储存整个formationBox
@@ -84,6 +85,13 @@ Member.prototype.loadObj = function(m,dataVersion){
this.sawoken = dataVersion>1 ? m[5] : m.sawoken;
this.skilllevel = m[6] || null;
};
+Member.prototype.loadFromMember = function(m){
+ if (m == undefined) //如果没有提供数据,直接返回默认
+ {
+ return;
+ }
+ this.id = m.id;
+};
//只用来防坐的任何队员
var MemberDelay = function(){
this.id=-1;
@@ -108,6 +116,7 @@ MemberAssist.prototype.loadFromMember = function(m){
if (m.level != undefined) this.level = m.level;
if (m.awoken != undefined) this.awoken = m.awoken;
if (m.plus != undefined && m.plus instanceof Array && m.plus.length>=3 && (m.plus[0]+m.plus[1]+m.plus[2])>0) this.plus = m.plus;
+ if (m.skilllevel != undefined) this.skilllevel = m.skilllevel;
};
//正式队伍
var MemberTeam = function(){
@@ -130,6 +139,7 @@ MemberTeam.prototype.loadFromMember = function(m){
if (m.latent != undefined && m.latent instanceof Array && m.latent.length>=1) this.latent = m.latent;
if (m.sawoken != undefined) this.sawoken = m.sawoken;
if (m.ability != undefined && m.ability instanceof Array && m.plus.length>=3) this.ability = m.ability;
+ if (m.skilllevel != undefined) this.skilllevel = m.skilllevel;
};
var Formation = function(teamCount,memberCount){
@@ -193,12 +203,24 @@ function getMaxLatentCount(id)
//切换怪物ID显示
function toggleShowMonId()
{
- document.body.classList.toggle('not-show-mon-id');
+ if (controlBox.querySelector("#show-mon-id").checked)
+ {
+ document.body.classList.remove("not-show-mon-id");
+ }else
+ {
+ document.body.classList.add("not-show-mon-id");
+ }
}
//切换怪物技能CD显示
function toggleShowMonSkillCd()
{
- document.body.classList.toggle('show-mon-skill-cd');
+ if (controlBox.querySelector("#btn-show-mon-skill-cd").checked)
+ {
+ document.body.classList.add("show-mon-skill-cd");
+ }else
+ {
+ document.body.classList.remove("show-mon-skill-cd");
+ }
}
//清除数据
function clearData()
@@ -273,13 +295,16 @@ window.onload = function()
controlBox = document.body.querySelector(".control-box");
statusLine = controlBox.querySelector(".status"); //显示当前状态的
const helpLink = controlBox.querySelector(".help-link");
+ changeSwapToCopy = controlBox.querySelector("#change-swap-to-copy");
+ interchangeSVG = document.body.querySelector("#interchange-line");
+ interchangePath = interchangeSVG.querySelector("g line");
+ toggleShowMonId();
+ toggleShowMonSkillCd();
formationBox = document.body.querySelector(".formation-box");
editBox = document.body.querySelector(".edit-box");
- interchangeSVG = document.body.querySelector("#interchange-line");
- interchangePath = interchangeSVG.querySelector("g line");
if (location.hostname.indexOf("gitee")>=0)
{
@@ -418,7 +443,6 @@ function reloadFormationData()
}
if (formationData)
{
- //formation = idata;
formation.loadObj(formationData);
refreshAll(formation);
}
@@ -440,7 +464,8 @@ function creatNewUrl(arg){
'd=' + encodeURIComponent(JSON.stringify(outObj));
if (!arg.notPushState) history.pushState(null, null, newUrl);
- return newUrl;
+ if (arg.returnObj) return outObj;
+ else return newUrl;
}
}
//截图
@@ -528,11 +553,11 @@ function initialize()
txtTitleDisplay.onclick = function(){
titleBox.classList.add("edit");
txtTitle.focus();
- }
+ };
txtDetailDisplay.onclick = function(){
detailBox.classList.add("edit");
txtDetail.focus();
- }
+ };
for (let ti=0,ti_len=formationBox.querySelectorAll(".team-bigbox").length;ti99?` + ${parseBigNumber(needExp[1])}` : "") : "";
- };
+ }
editBox.reCalculateExp = reCalculateExp;
//加蛋
const monEditAddHpLi = settingBox.querySelector(".row-mon-plus .m-plus-hp-li");
@@ -1016,13 +1041,13 @@ function initialize()
plus:plus,
awoken:awoken,
latent:latent
- }
+ };
const abilitys = calculateAbility(tempMon, null, true) || [0,0,0];
monEditHpValue.innerHTML = abilitys[0];
monEditAtkValue.innerHTML = abilitys[1];
monEditRcvValue.innerHTML = abilitys[2];
- };
+ }
editBox.reCalculateAbility = reCalculateAbility;
const btnCancel = editBox.querySelector(".button-cancel");
@@ -1317,22 +1342,29 @@ function interchangeCard(formArr,toArr)
return new Member();
}else
{
- let newMember = isAssist ? new MemberTeam() : new MemberAssist();
+ const newMember = isAssist ? new MemberTeam() : new MemberAssist();
newMember.loadFromMember(member);
return newMember;
}
}
+ const isCopy = changeSwapToCopy.checked;
let from = formation.teams[formArr[0]][formArr[1]][formArr[2]];
let to = formation.teams[toArr[0]][toArr[1]][toArr[2]];
if(formArr[1] != toArr[1]) //从武器拖到非武器才改变类型
{
from = changeType(from,formArr[1]);
- to = changeType(to,toArr[1]);
+ if (!isCopy) to = ichangeType(to,toArr[1]);
+ }else if (isCopy)
+ {
+ const newFrom = new from.constructor();
+ newFrom.loadFromMember(from);
+ from = newFrom;
}
formation.teams[toArr[0]][toArr[1]][toArr[2]] = from;
- formation.teams[formArr[0]][formArr[1]][formArr[2]] = to;
+ if (!isCopy) formation.teams[formArr[0]][formArr[1]][formArr[2]] = to;
- creatNewUrl(); //刷新URL
+ const formationData = creatNewUrl({returnObj:true}); //刷新URL
+ formation.loadObj(formationData);
refreshAll(formation); //刷新全部
}
//改变一个怪物头像
diff --git a/solo.html b/solo.html
index bc7c9e26..fc0fadbe 100644
--- a/solo.html
+++ b/solo.html
@@ -29,11 +29,13 @@ var formation = new Formation(teamsCount,6);
diff --git a/style.css b/style.css
index 77d775ca..e6011f9e 100644
--- a/style.css
+++ b/style.css
@@ -87,6 +87,45 @@ body{
{
display: none;
}
+
+.config-checkbox-ipt{
+ display:none;
+}
+.config-checkbox-lbl .config-checkbox-lbl-cicle{
+ width: 28px;
+ height: 12px;
+ display: inline-block;
+ position: relative;
+ background-color: #8884;
+ border-radius: 16px;
+ margin-right: 5px;
+}
+.config-checkbox-lbl .config-checkbox-lbl-cicle::before{
+ content:"";
+ width: 20px;
+ height: 20px;
+ position: absolute;
+ transition: .2s ease-out;
+ background-color: #c6c6c6;
+ box-shadow: 0 2px 4px 0 #0003;
+ border-radius: 50%;
+ left: -4px;
+ top: -4px;
+}
+.config-checkbox-ipt:checked+.config-checkbox-lbl .config-checkbox-lbl-cicle {
+ background: rgba(0,160,216,0.8);
+}
+.config-checkbox-ipt:checked+.config-checkbox-lbl .config-checkbox-lbl-cicle::before {
+ background: #00A0D8;
+ box-shadow: 0 2px 4px 0 rgba(0,160,216,0.4);
+ left: calc(100% - 16px);
+}
+.config-checkbox-lbl{
+ cursor: pointer;
+ line-height: 25px;
+ margin-right: 20px;
+}
+
.status{
line-height: 16px;
}
@@ -908,9 +947,9 @@ ul{
line-height: 22px;
}
-.edit-box .setting-box .row-mon-level::before{
- /*content: "▼怪物等级";*/
-}
+/*.edit-box .setting-box .row-mon-level::before{
+ content: "▼怪物等级";
+}*/
.edit-box .setting-box .m-level{
font-size: 25px;
height: 40px;
diff --git a/triple.html b/triple.html
index 9d0d4854..1803b096 100644
--- a/triple.html
+++ b/triple.html
@@ -41,12 +41,14 @@ var formation = new Formation(teamsCount,6);