| @@ -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. | |||
| @@ -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): "; | |||
| @@ -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(チーム覚醒とバッジ):"; | |||
| @@ -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(팀 각성 및 배지):"; | |||
| @@ -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(隊伍覺醒和徽章):"; | |||
| @@ -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(队伍觉醒和徽章):"; | |||
| @@ -29,12 +29,14 @@ var formation = new Formation(teamsCount,5); | |||
| <div> | |||
| <button class="btn-clear-data" onclick="clearData();"></button> | |||
| <button class="btn-capture" onclick="capture();"></button> | |||
| <button class="btn-show-mon-id" onclick="toggleShowMonId();"></button> | |||
| <button class="btn-show-mon-skill-cd" onclick="toggleShowMonSkillCd();"></button> | |||
| <a class="down-capture display-none" target="_blank"></a> | |||
| <button class="btn-solo-link" onclick="turnPage(1);"></button> | |||
| <button class="btn-triple-link" onclick="turnPage(3);"></button> | |||
| <button class="btn-swap-AB-team" onclick="swapABCteam();"></button> | |||
| <a class="down-capture display-none" target="_blank"></a> | |||
| <br> | |||
| <input type="checkbox" name="show-mon-id" class="config-checkbox-ipt" id="show-mon-id" onclick="toggleShowMonId();" checked><label class="config-checkbox-lbl show-mon-id-lbl" for="show-mon-id"><div class="config-checkbox-lbl-cicle"></div></label> | |||
| <input type="checkbox" name="btn-show-mon-skill-cd" class="config-checkbox-ipt" id="btn-show-mon-skill-cd" onclick="toggleShowMonSkillCd();"><label class="config-checkbox-lbl btn-show-mon-skill-cd-lbl" for="btn-show-mon-skill-cd"><div class="config-checkbox-lbl-cicle"></div></label> | |||
| <input type="checkbox" name="change-swap-to-copy" class="config-checkbox-ipt" id="change-swap-to-copy"><label class="config-checkbox-lbl" for="change-swap-to-copy"><div class="config-checkbox-lbl-cicle"></div></label> | |||
| </div> | |||
| <div class="status"><span class="icon"></span><span class="text"></span></div> | |||
| </div> | |||
| @@ -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;ti<ti_len;ti++) | |||
| { | |||
| @@ -895,10 +920,10 @@ function initialize() | |||
| const tempMon = { | |||
| id:monid, | |||
| level:level | |||
| } | |||
| }; | |||
| const needExp = calculateExp(tempMon); | |||
| monLvExp.innerHTML = needExp ? parseBigNumber(needExp[0]) + (level>99?` + ${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); //刷新全部 | |||
| } | |||
| //改变一个怪物头像 | |||
| @@ -29,11 +29,13 @@ var formation = new Formation(teamsCount,6); | |||
| <div> | |||
| <button class="btn-clear-data" onclick="clearData();"></button> | |||
| <button class="btn-capture" onclick="capture();"></button> | |||
| <button class="btn-show-mon-id" onclick="toggleShowMonId();"></button> | |||
| <button class="btn-show-mon-skill-cd" onclick="toggleShowMonSkillCd();"></button> | |||
| <a class="down-capture display-none" target="_blank"></a> | |||
| <button class="btn-multi-link" onclick="turnPage(2);"></button> | |||
| <button class="btn-triple-link" onclick="turnPage(3);"></button> | |||
| <a class="down-capture display-none" target="_blank"></a> | |||
| <br> | |||
| <input type="checkbox" name="show-mon-id" class="config-checkbox-ipt" id="show-mon-id" onclick="toggleShowMonId();" checked><label class="config-checkbox-lbl show-mon-id-lbl" for="show-mon-id"><div class="config-checkbox-lbl-cicle"></div></label> | |||
| <input type="checkbox" name="btn-show-mon-skill-cd" class="config-checkbox-ipt" id="btn-show-mon-skill-cd" onclick="toggleShowMonSkillCd();"><label class="config-checkbox-lbl btn-show-mon-skill-cd-lbl" for="btn-show-mon-skill-cd"><div class="config-checkbox-lbl-cicle"></div></label> | |||
| <input type="checkbox" name="change-swap-to-copy" class="config-checkbox-ipt" id="change-swap-to-copy"><label class="config-checkbox-lbl change-swap-to-copy-lbl" for="change-swap-to-copy"><div class="config-checkbox-lbl-cicle"></div></label> | |||
| </div> | |||
| <div class="status"><span class="icon"></span><span class="text"></span></div> | |||
| </div> | |||
| @@ -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; | |||
| @@ -41,12 +41,14 @@ var formation = new Formation(teamsCount,6); | |||
| <div> | |||
| <button class="btn-clear-data" onclick="clearData();"></button> | |||
| <button class="btn-capture" onclick="capture();"></button> | |||
| <button class="btn-show-mon-id" onclick="toggleShowMonId();"></button> | |||
| <button class="btn-show-mon-skill-cd" onclick="toggleShowMonSkillCd();"></button> | |||
| <a class="down-capture display-none" target="_blank"></a> | |||
| <button class="btn-solo-link" onclick="turnPage(1);"></button> | |||
| <button class="btn-multi-link" onclick="turnPage(2);"></button> | |||
| <button class="btn-swap-ABC-team" onclick="swapABCteam();"></button> | |||
| <a class="down-capture display-none" target="_blank"></a> | |||
| <br> | |||
| <input type="checkbox" name="show-mon-id" class="config-checkbox-ipt" id="show-mon-id" onclick="toggleShowMonId();" checked><label class="config-checkbox-lbl show-mon-id-lbl" for="show-mon-id"><div class="config-checkbox-lbl-cicle"></div></label> | |||
| <input type="checkbox" name="btn-show-mon-skill-cd" class="config-checkbox-ipt" id="btn-show-mon-skill-cd" onclick="toggleShowMonSkillCd();"><label class="config-checkbox-lbl btn-show-mon-skill-cd-lbl" for="btn-show-mon-skill-cd"><div class="config-checkbox-lbl-cicle"></div></label> | |||
| <input type="checkbox" name="change-swap-to-copy" class="config-checkbox-ipt" id="change-swap-to-copy"><label class="config-checkbox-lbl" for="change-swap-to-copy"><div class="config-checkbox-lbl-cicle"></div></label> | |||
| </div> | |||
| <div class="status"><span class="icon"></span><span class="text"></span></div> | |||
| </div> | |||