增加地下城强化设定

This commit is contained in:
枫谷剑仙 2021-08-23 11:54:00 +08:00
parent a98788691e
commit 238e3a2cf7
22 changed files with 1245 additions and 873 deletions

View File

@ -104,13 +104,19 @@
.edit-box .setting-box .row-mon-plus::before{
content: "▼Monster Plus";
}
.row-mon-ability .m-hp-li::before{
.row-mon-ability .m-hp-li::before,
.dialog-dungeon-enchance label[for="dungeon-hp"]::before
{
content: "HP:";
}
.row-mon-ability .m-atk-li::before{
.row-mon-ability .m-atk-li::before,
.dialog-dungeon-enchance label[for="dungeon-atk"]::before
{
content: "ATK:";
}
.row-mon-ability .m-rcv-li::before{
.row-mon-ability .m-rcv-li::before,
.dialog-dungeon-enchance label[for="dungeon-rcv"]::before
{
content: "RCV:";
}
@ -339,7 +345,7 @@ label[for="merge-skill"]::after{
content: "Use the official Awoken sorting";
}
.search-box .search-list-length::before{
content: "Number of results:";
content: "Number of results:";
}
.search-box .sort-div::before{
content: "Sort by:";
@ -383,7 +389,8 @@ label[for="merge-skill"]::after{
}
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before,
.special-div .special-clear::before
.special-div .special-clear::before,
.dialog-dungeon-enchance .dialog-clear::before
{
content: "Clear";
}
@ -397,7 +404,7 @@ label[for="merge-skill"]::after{
content: "▼Special Search";
}
.special-div .special-add::before {
content: "";
content: "";
}
.control-div .search-start::before{
content: "🔍Start Search";
@ -436,37 +443,37 @@ label[for="merge-skill"]::after{
.base .evo-type::before,
.base .evo-type::after
{
content: "Base";
content: "Base";
}
.evolution .evo-type::before,
.evolution .evo-type::after
{
content: "Evolution";
content: "Evolution";
}
.ult-evo .evo-type::before,
.ult-evo .evo-type::after
{
content: "Ult Evo";
content: "Ult Evo";
}
.reincarnation .evo-type::before,
.reincarnation .evo-type::after
{
content: "Reincarnation";
content: "Reincarnation";
}
.pixel-evo .evo-type::before,
.pixel-evo .evo-type::after
{
content: "Pixel Evo";
content: "Pixel Evo";
}
.assist-evo .evo-type::before,
.assist-evo .evo-type::after
{
content: "Assist Evo";
content: "Assist Evo";
}
.super-reincarnation .evo-type::before,
.super-reincarnation .evo-type::after
{
content: "Super Reincarnation";
content: "Super Reincarnation";
}
.super-ult-evo .evo-type::before,
.super-ult-evo .evo-type::after
@ -477,50 +484,50 @@ label[for="merge-skill"]::after{
.evolution .evo-type
{
transform: scaleX(0.90);
margin: calc(-100px * (1 - 0.90) / 2);
margin: calc(-100px * (1 - 0.90) / 2);
}
.pixel-evo .evo-type
{
transform: scaleX(0.95);
margin: calc(-100px * (1 - 0.95) / 2);
margin: calc(-100px * (1 - 0.95) / 2);
}
.super-ult-evo .evo-type
{
transform: scaleX(0.65);
margin: calc(-100px * (1 - 0.63) / 2);
margin: calc(-100px * (1 - 0.63) / 2);
}
.reincarnation .evo-type
{
transform: scaleX(0.60);
margin: calc(-100px * (1 - 0.55) / 2);
margin: calc(-100px * (1 - 0.55) / 2);
}
.assist-evo .evo-type
{
transform: scaleX(0.85);
margin: calc(-100px * (1 - 0.85) / 2);
margin: calc(-100px * (1 - 0.85) / 2);
}
.super-reincarnation .evo-type
{
transform: scaleX(0.43);
margin: calc(-100px * 1 / 2);
margin: calc(-100px * 1 / 2);
}
.henshin .evo-type::before,
.henshin .evo-type::after
{
content: "Henshin";
content: "Henshin";
}
.henshin-loop .evo-type::before,
.henshin-loop .evo-type::after
{
content: "Loop Henshin";
content: "Loop Henshin";
}
.henshin-loop .evo-type
{
transform: scaleX(0.6);
margin: calc(-100px * (1 - 0.6) / 2);
margin: calc(-100px * (1 - 0.6) / 2);
}
.icon-skill[data-icon-type="resolve"] {
background-position-x: calc(-36px * 1);
background-position-x: calc(-36px * 1);
}
.control-box .btn-qrcode::before{
content: "\f029 QR Code";
@ -537,27 +544,27 @@ label[for="merge-skill"]::after{
.formation-from-string::before
{
content: "A formation link read from string";
content: "A formation link read from string";
}
label[for="sourceSelect"]::before
{
content: "Video source selection:";
content: "Video source selection:";
}
#qr-code-frame .save-qr-img::before
{
content: "\f0c7 Save QR code image";
content: "\f0c7 Save QR code image";
}
#qr-code-frame .read-qr-camera::before
{
content: "\f030 Scan with camera";
content: "\f030 Scan with camera";
}
#qr-code-frame .read-qr-camera.running::before
{
content: "\f28d Stop using camera";
content: "\f28d Stop using camera";
}
#qr-code-frame .read-qr-file::before
{
content: "\f1c5 Read image file";
content: "\f1c5 Read image file";
}
#qr-code-frame .read-string::before {
content: "\f891 Read string";
@ -573,4 +580,28 @@ label[for="qr-data-type-pdc"]::before
}
label[for="qr-data-type-pdchu"]::before {
content: "Valeria(pdchu)";
}
.btn-set-dungeon-enchance::before
{
content: "\f6d9 Dungeon Enchanced";
}
.dialog-dungeon-enchance .dialog-title::before
{
content: "Dungeon Enchancement Setting";
}
.dialog-dungeon-enchance .dialog-confirm::before
{
content: "Confirm";
}
.dialog-dungeon-enchance .attr-list::before
{
content: "Effective Attr.:";
}
.dialog-dungeon-enchance .type-list::before
{
content: "Effective Types:";
}
.dialog-dungeon-enchance .stats-list::before
{
content: "Enhancement Rate:";
}

View File

@ -1,54 +1,54 @@
const _localTranslating = {
webpage_title: `P&D ${teamsCount}P Formation Maker`,
webpage_title: `P&D ${teamsCount}P Formation Maker`,
addition_display: "Additional display",
title_blank: "Input Formation Title",
detail_blank: "Input Detail",
sort_name:{
sort_none: "Nope",
sort_id: "Cards Id",
sort_attrs : "Attribute",
sort_evoRootId: "Cards Evolution Root",
sort_evoRoot_Attrs : "Cards Evolution Root's Attribute",
sort_rarity: "Rarity",
sort_cost: "Cost",
sort_skillLv1: "Maximum Skill Turn",
sort_skillLvMax: "Minimum Skill Turn",
sort_hpMax110: "Max HP",
sort_atkMax110: "Max ATK",
sort_rcvMax110: "Max RCV",
sort_hpMax110_awoken: "Max HP (+Awoken)",
sort_atkMax110_awoken: "Max ATK (+Awoken)",
sort_rcvMax110_awoken: "Max RCV (+Awoken)",
sort_abilityIndex_awoken: "Maximum Weighted Ability Index (+Awakening)",
},
force_reload_data: `Force refresh data`,
skill_parse: {
skill: {
title_blank: "Input Formation Title",
detail_blank: "Input Detail",
sort_name:{
sort_none: "Nope",
sort_id: "Cards Id",
sort_attrs : "Attribute",
sort_evoRootId: "Cards Evolution Root",
sort_evoRoot_Attrs : "Cards Evolution Root's Attribute",
sort_rarity: "Rarity",
sort_cost: "Cost",
sort_skillLv1: "Maximum Skill Turn",
sort_skillLvMax: "Minimum Skill Turn",
sort_hpMax110: "Max HP",
sort_atkMax110: "Max ATK",
sort_rcvMax110: "Max RCV",
sort_hpMax110_awoken: "Max HP (+Awoken)",
sort_atkMax110_awoken: "Max ATK (+Awoken)",
sort_rcvMax110_awoken: "Max RCV (+Awoken)",
sort_abilityIndex_awoken: "Maximum Weighted Ability Index (+Awakening)",
},
force_reload_data: `Force refresh data`,
skill_parse: {
skill: {
unknown: tp`Unkonwn skill type: ${'type'}`,
active_turns: tp`${'actionSkill'}, for ${'turns'} turns`,
random_skills: tp`Random Activates these skills:${'skills'}`,
damage_enemy: tp`Inflicts ${'times'}${'damage'} ${'attr'} attack on ${'target'}${'totalDamage'}`,
damage_enemy_times: tp`${'times'} `,
damage_enemy_count: tp` (${'damage'} in total)`,
//Inflicts a 50x attack to 1 enemy and recover 100% of the damage. Reduces unmatchable orb status by 9999 turns. 9999 turn awoken bind recovery.
//Inflicts a 50x attack to 1 enemy and recover 100% of the damage. Reduces unmatchable orb status by 9999 turns. 9999 turn awoken bind recovery.
vampire: tp`${'damage_enemy'} and ${'icon'}recover ${'heal'} of the damage`,
delay: tp`${'icon'}Delays enemies' next move`,
mass_attack: tp`${'icon'}Mass attacks`,
leader_change: tp`${'icon'}Switches ${'target'} with Leader Monster, use again to switch back`,
no_skyfall: tp`${'icon'}No Skyfall Combos`,
self_harm: tp`${'icon'}Reduces ${'stats'} by ${'value'}`,
heal: tp`${'icon'}Recover ${'value'} ${'stats'}`,
heal: tp`${'icon'}Recover ${'value'} ${'stats'}`,
unbind: tp`Recovery ${'stats'} by ${'turns'} turns`,
unbind_normal: tp`${'icon'}Bind`,
unbind_awakenings: tp`${'icon'}Awoken bind`,
unbind_matches: tp`${'icon'}Unmatchable orb`,
bind_skill: tp`${'icon'}Unable to use skills`,
defense_break: tp`${'icon'}Reduce enemy defense by ${'value'}`,
poison: tp`${'icon'}Poisons ${'target'}, reduce ${'stats'} with ${'belong_to'} ${'value'} per turns`,
defense_break: tp`${'icon'}Reduce enemy defense by ${'value'}`,
poison: tp`${'icon'}Poisons ${'target'}, reduce ${'stats'} with ${'belong_to'} ${'value'} per turns`,
time_extend: tp`${'icon'}Orb move time ${'value'}`,
follow_attack: tp`${'icon'}Bonus attack equal to ${'belong_to'} ${'value'} when matching Orbs (Consider the ${'target'}'s defense)`,
follow_attack_fixed: tp`inflicts ${'damage'} ${'attr'} damage`,
auto_heal_buff: tp`${'icon'}Heal ${'value'} ${'stats'} every turn`,
auto_heal_buff: tp`${'icon'}Heal ${'value'} ${'stats'} every turn`,
auto_heal: tp`${'icon'}Heal ${'stats'} by ${'belong_to'} ${'value'} after matching orbs`,
ctw: tp`${'icon'}Move orbs freely for ${'value'}`,
gravity: tp`${'icon'}Reduce ${'target'} ${'value'}`,
@ -86,7 +86,7 @@
reduce_damage: tp`${'condition'}${'icon'}Reduces ${'attrs'} damage taken by ${'value'}`,
power_up: tp`${'condition'}${'targets'}${'value'}${'reduceDamage'}${'addCombo'}${'followAttack'}`,
power_up_targets: tp`[${'attrs_types'}]'s `, //attrs, types, attrs_types
henshin: tp`Transforms into ${'card'}`,
henshin: tp`Transforms into ${'card'}`,
void_poison: tp`Voids ${'poison'} damage`,
skill_proviso: tp`The follow-up effect can only be activates ${'condition'}`,
obstruct_opponent: tp`Apply obstruct skill effect to ${'target'}: ${'skills'}`,
@ -95,7 +95,7 @@
obstruct_opponent_designated_position: tp`No.${'positions'} ranked opponents`,
},
power: {
unknown: tp`[ Unkonwn power up: ${'type'} ]`,
unknown: tp`[ Unkonwn power up: ${'type'} ]`,
scale_attributes: tp`When matching ${'min'} attr. of ${'orbs'} ${'stats'}${'bonus'}`,
scale_attributes_bonus: tp`, ${'bonus'} per attr. additional, up to ${'stats_max'} for ${'max'} attr.`,
scale_combos: tp`When ${'min'} combos ${'stats'}${'bonus'}`,
@ -109,7 +109,7 @@
scale_state_kind_count: tp`${'stats'} for each [${'awakenings'}${'attrs'}${'types'}] in team`,
},
cond: {
unknown: tp`[ Unknown condition ]`,
unknown: tp`[ Unknown condition ]`,
hp_equal: tp`When ${'hp'} == ${'min'} `,
hp_less_or_equal: tp`When ${'hp'}${'max'} `,
hp_greater_or_equal: tp`When ${'hp'}${'min'} `,
@ -136,8 +136,8 @@
right: tp`${'pos'} of right columns`,
shape: tp`specified location`,
},
value: {
unknown: tp`[ Unknown value: ${'type'}]`, //type
value: {
unknown: tp`[ Unknown value: ${'type'}]`, //type
const: tp`${'value'} ${'unit'}`,
const_to: tp`to ${'value'}`,
mul_percent: tp`${'value'}%`,
@ -158,17 +158,17 @@
enemy_one: tp`1 enemy`,
enemy_attr: tp`${'attr'} enemy`,
},
stats: {
unknown: tp`[ Unknown: ${'type'}]`, //type
maxhp: tp`Max HP`,
hp: tp`HP`,
chp: tp`current HP`,
atk: tp`ATK`,
stats: {
unknown: tp`[ Unknown: ${'type'}]`, //type
maxhp: tp`Max HP`,
hp: tp`HP`,
chp: tp`current HP`,
atk: tp`ATK`,
rcv: tp`RCV`,
teamhp: tp`Team HP`,
teamatk: tp`Team ${'attrs'} ATK`,
teamrcv: tp`Team RCV`,
},
teamhp: tp`Team HP`,
teamatk: tp`Team ${'attrs'} ATK`,
teamrcv: tp`Team RCV`,
},
unit: {
orbs: tp``,
times: tp` times`,
@ -321,7 +321,7 @@
[80]: tp`${'icon'}Enhanced 4 colors`,
[81]: tp`${'icon'}Enhanced 5 colors`,
}
},
},
}
deepMerge(localTranslating, _localTranslating);
localisation(localTranslating);

View File

@ -25,12 +25,12 @@
.tIf-total-move .awoken-bind::before,
.tIf-total-hp .reduce .reduce-scale::before
{
background-position-x: -20px;
background-position-x: -20px;
}
.icon-skill[data-icon-type="mass-attack"],
.icon-skill[data-icon-type="reduce-damage"],
.icon-skill[data-icon-type="damage-absorb"],
.icon-skill[data-icon-type="damage-void"]
{
background-position-x: calc(-36px * 1);
background-position-x: calc(-36px * 1);
}

View File

@ -3,11 +3,11 @@
.awoken-icon[data-awoken-icon='46'],
.awoken-icon[data-awoken-icon='47']
{
background-position-x: calc(-32px * 2);
background-position-x: calc(-32px * 2);
}
.badge[data-badge-icon='0']::before,
.badge[data-badge-icon='14']::before,
.badge[data-badge-icon='18']::before
{
background-position-x: calc(-36px * 2);
background-position-x: calc(-36px * 2);
}

View File

@ -102,13 +102,19 @@
.edit-box .setting-box .row-mon-plus::before{
content: "▼モンスタープラス";
}
.row-mon-ability .m-hp-li::before{
.row-mon-ability .m-hp-li::before,
.dialog-dungeon-enchance label[for="dungeon-hp"]::before
{
content: "HP:";
}
.row-mon-ability .m-atk-li::before{
.row-mon-ability .m-atk-li::before,
.dialog-dungeon-enchance label[for="dungeon-atk"]::before
{
content: "攻撃:";
}
.row-mon-ability .m-rcv-li::before{
.row-mon-ability .m-rcv-li::before,
.dialog-dungeon-enchance label[for="dungeon-rcv"]::before
{
content: "回復:";
}
@ -331,7 +337,7 @@ label[for="merge-skill"]::after{
content: "公式の覚醒ソートを使用";
}
.search-box .search-list-length::before{
content: "結果の数:";
content: "結果の数:";
}
.search-box .sort-div::before{
content: "並べ替え:";
@ -375,7 +381,8 @@ label[for="merge-skill"]::after{
}
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before,
.special-div .special-clear::before
.special-div .special-clear::before,
.dialog-dungeon-enchance .dialog-clear::before
{
content: "クリア";
}
@ -389,7 +396,7 @@ label[for="merge-skill"]::after{
content: "▼特別な検索";
}
.special-div .special-add::before {
content: "";
content: "";
}
.control-div .search-start::before{
content: "🔍検索の開始";
@ -428,62 +435,62 @@ label[for="merge-skill"]::after{
.base .evo-type::before,
.base .evo-type::after
{
content: "ベース";
content: "ベース";
}
.evolution .evo-type::before,
.evolution .evo-type::after
{
content: "進化";
content: "進化";
}
.ult-evo .evo-type::before,
.ult-evo .evo-type::after
{
content: "究極進化";
content: "究極進化";
}
.reincarnation .evo-type::before,
.reincarnation .evo-type::after
{
content: "転生進化";
content: "転生進化";
}
.pixel-evo .evo-type::before,
.pixel-evo .evo-type::after
{
content: "ドット進化";
content: "ドット進化";
}
.assist-evo .evo-type::before,
.assist-evo .evo-type::after
{
content: "アシスト進化";
content: "アシスト進化";
}
.super-reincarnation .evo-type::before,
.super-reincarnation .evo-type::after
{
content: "超転生進化";
content: "超転生進化";
}
.super-ult-evo .evo-type::before,
.super-ult-evo .evo-type::after
{
content: "超究極進化";
content: "超究極進化";
}
.pixel-evo .evo-type
{
transform: scaleX(0.90);
margin: calc(-100px * (1 - 0.90) / 2);
margin: calc(-100px * (1 - 0.90) / 2);
}
.assist-evo .evo-type
{
transform: scaleX(0.80);
margin: calc(-100px * (1 - 0.80) / 2);
margin: calc(-100px * (1 - 0.80) / 2);
}
.henshin .evo-type::before,
.henshin .evo-type::after
{
content: "変身";
content: "変身";
}
.henshin-loop .evo-type::before,
.henshin-loop .evo-type::after
{
content: "ループ変身";
content: "ループ変身";
}
.control-box .btn-qrcode::before{
@ -501,27 +508,27 @@ label[for="merge-skill"]::after{
.formation-from-string::before
{
content: "文字列から読み取られた列リンク";
content: "文字列から読み取られた列リンク";
}
label[for="sourceSelect"]::before
{
content: "ビデオ ソースの選択:";
content: "ビデオ ソースの選択:";
}
#qr-code-frame .save-qr-img::before
{
content: "\f0c7 QRコードイメージを保存";
content: "\f0c7 QRコードイメージを保存";
}
#qr-code-frame .read-qr-camera::before
{
content: "\f030 カメラでスキャンする";
content: "\f030 カメラでスキャンする";
}
#qr-code-frame .read-qr-camera.running::before
{
content: "\f28d カメラの使用を停止します";
content: "\f28d カメラの使用を停止します";
}
#qr-code-frame .read-qr-file::before
{
content: "\f1c5 画像ファイルを読み取る";
content: "\f1c5 画像ファイルを読み取る";
}
#qr-code-frame .read-string::before {
content: "\f891 文字列を読み取ります";
@ -537,4 +544,28 @@ label[for="qr-data-type-pdc"]::before
}
label[for="qr-data-type-pdchu"]::before {
content: "Valeria(pdchu)";
}
.btn-set-dungeon-enchance::before
{
content: "\f6d9 ダンジョン強化";
}
.dialog-dungeon-enchance .dialog-title::before
{
content: "ダンジョン強化倍率設定";
}
.dialog-dungeon-enchance .dialog-confirm::before
{
content: "確認";
}
.dialog-dungeon-enchance .attr-list::before
{
content: "有効な属性:";
}
.dialog-dungeon-enchance .type-list::before
{
content: "有効なタイプ:";
}
.dialog-dungeon-enchance .stats-list::before
{
content: "強化倍率:";
}

View File

@ -1,28 +1,28 @@
const _localTranslating = {
webpage_title: `パズル&ドラゴンズ${teamsCount}人のチーム図作成ツール`,
webpage_title: `パズル&ドラゴンズ${teamsCount}人のチーム図作成ツール`,
addition_display: "追加の表示",
title_blank: "入力タイトル",
detail_blank: "入力詳細",
sort_name:{
sort_none: "いいえ",
sort_id: "カード ID",
sort_attrs : "属性",
sort_evoRootId: "カード進化ルート",
sort_evoRoot_Attrs : "カード進化ルートの属性",
sort_rarity: "レアリティ",
sort_cost: "コスト",
sort_mp: "MP",
sort_skillLv1: "最大スキルターン",
sort_skillLvMax: "最小スキルターン",
sort_hpMax110: "最大 HP",
sort_atkMax110: "最大攻撃",
sort_rcvMax110: "最大回復",
sort_hpMax110_awoken: "最大 HP (+覚醒)",
sort_atkMax110_awoken: "最大攻撃 (+覚醒)",
sort_rcvMax110_awoken: "最大回復 (+覚醒)",
sort_abilityIndex_awoken: "最大加重能力指数 (+覚醒)",
},
force_reload_data: "データの強制更新",
title_blank: "入力タイトル",
detail_blank: "入力詳細",
sort_name:{
sort_none: "いいえ",
sort_id: "カード ID",
sort_attrs : "属性",
sort_evoRootId: "カード進化ルート",
sort_evoRoot_Attrs : "カード進化ルートの属性",
sort_rarity: "レアリティ",
sort_cost: "コスト",
sort_mp: "MP",
sort_skillLv1: "最大スキルターン",
sort_skillLvMax: "最小スキルターン",
sort_hpMax110: "最大 HP",
sort_atkMax110: "最大攻撃",
sort_rcvMax110: "最大回復",
sort_hpMax110_awoken: "最大 HP (+覚醒)",
sort_atkMax110_awoken: "最大攻撃 (+覚醒)",
sort_rcvMax110_awoken: "最大回復 (+覚醒)",
sort_abilityIndex_awoken: "最大加重能力指数 (+覚醒)",
},
force_reload_data: "データの強制更新",
}
deepMerge(localTranslating, _localTranslating);
localisation(localTranslating);

View File

@ -103,13 +103,19 @@
.edit-box .setting-box .row-mon-plus::before{
content: "▼몬스터 플러스";
}
.row-mon-ability .m-hp-li::before{
.row-mon-ability .m-hp-li::before,
.dialog-dungeon-enchance label[for="dungeon-hp"]::before
{
content: "HP:";
}
.row-mon-ability .m-atk-li::before{
.row-mon-ability .m-atk-li::before,
.dialog-dungeon-enchance label[for="dungeon-atk"]::before
{
content: "공격:";
}
.row-mon-ability .m-rcv-li::before{
.row-mon-ability .m-rcv-li::before,
.dialog-dungeon-enchance label[for="dungeon-rcv"]::before
{
content: "회복:";
}
@ -328,7 +334,7 @@ label[for="merge-skill"]::after{
content: "공식 각성 순서를 사용합니다";
}
.search-box .search-list-length::before{
content: "결과 수:";
content: "결과 수:";
}
.search-box .sort-div::before{
content: "정렬:";
@ -372,7 +378,8 @@ label[for="merge-skill"]::after{
}
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before,
.special-div .special-clear::before
.special-div .special-clear::before,
.dialog-dungeon-enchance .dialog-clear::before
{
content: "명확한";
}
@ -386,7 +393,7 @@ label[for="merge-skill"]::after{
content: "▼특별 검색";
}
.special-div .special-add::before {
content: "";
content: "";
}
.control-div .search-start::before{
content: "🔍검색 시작";
@ -425,42 +432,42 @@ label[for="merge-skill"]::after{
.base .evo-type::before,
.base .evo-type::after
{
content: "베이스";
content: "베이스";
}
.evolution .evo-type::before,
.evolution .evo-type::after
{
content: "진 화";
content: "진 화";
}
.ult-evo .evo-type::before,
.ult-evo .evo-type::after
{
content: "궁극진화";
content: "궁극진화";
}
.reincarnation .evo-type::before,
.reincarnation .evo-type::after
{
content: "환생 진와";
content: "환생 진와";
}
.pixel-evo .evo-type::before,
.pixel-evo .evo-type::after
{
content: "도트 진화";
content: "도트 진화";
}
.assist-evo .evo-type::before,
.assist-evo .evo-type::after
{
content: "어시스트 진화";
content: "어시스트 진화";
}
.super-reincarnation .evo-type::before,
.super-reincarnation .evo-type::after
{
content: "초 환색진화";
content: "초 환색진화";
}
.super-ult-evo .evo-type::before,
.super-ult-evo .evo-type::after
{
content: "초 궁극진화";
content: "초 궁극진화";
}
.evo-type
{
@ -469,15 +476,15 @@ label[for="merge-skill"]::after{
.henshin .evo-type::before,
.henshin .evo-type::after
{
content: "변신";
content: "변신";
}
.henshin-loop .evo-type::before,
.henshin-loop .evo-type::after
{
content: "루프 변신";
content: "루프 변신";
}
.icon-skill[data-icon-type="resolve"] {
background-position-x: calc(-36px * 2);
background-position-x: calc(-36px * 2);
}
.control-box .btn-qrcode::before{
@ -495,27 +502,27 @@ label[for="merge-skill"]::after{
.formation-from-string::before
{
content: "문자열에서 읽은 팀 링크입니다";
content: "문자열에서 읽은 팀 링크입니다";
}
label[for="sourceSelect"]::before
{
content: "비디오 소스 선택:";
content: "비디오 소스 선택:";
}
#qr-code-frame .save-qr-img::before
{
content: "\f0c7 QR 코드 이미지 저장";
content: "\f0c7 QR 코드 이미지 저장";
}
#qr-code-frame .read-qr-camera::before
{
content: "\f030 카메라로 스캔";
content: "\f030 카메라로 스캔";
}
#qr-code-frame .read-qr-camera.running::before
{
content: "\f28d 카메라 사용을 중지합니다";
content: "\f28d 카메라 사용을 중지합니다";
}
#qr-code-frame .read-qr-file::before
{
content: "\f1c5 이미지 파일 읽기";
content: "\f1c5 이미지 파일 읽기";
}
#qr-code-frame .read-string::before {
content: "\f891 문자열을 읽습니다";
@ -531,4 +538,28 @@ label[for="qr-data-type-pdc"]::before
}
label[for="qr-data-type-pdchu"]::before {
content: "Valeria(pdchu)";
}
.btn-set-dungeon-enchance::before
{
content: "\f6d9 던전 강화";
}
.dialog-dungeon-enchance .dialog-title::before
{
content: "지하성 강화 배율 설정";
}
.dialog-dungeon-enchance .dialog-confirm::before
{
content: "확인";
}
.dialog-dungeon-enchance .attr-list::before
{
content: "유효한 속성:";
}
.dialog-dungeon-enchance .type-list::before
{
content: "유효한 형식:";
}
.dialog-dungeon-enchance .stats-list::before
{
content: "배율을 강화합니다:";
}

View File

@ -1,28 +1,28 @@
const _localTranslating = {
webpage_title: `퍼즐앤드래곤 ${teamsCount} 명의 팀 다이어그램 작성 도구`,
webpage_title: `퍼즐앤드래곤 ${teamsCount} 명의 팀 다이어그램 작성 도구`,
addition_display: "추가 표시입니다",
title_blank: "입력 제목",
detail_blank: "입력 내용",
sort_name:{
sort_none: "없음",
sort_id: "카드 ID",
sort_attrs : "속성",
sort_evoRootId: "카드 진화 루트",
sort_evoRoot_Attrs : "카드 진화 루트의 특성",
sort_rarity: "래리티",
sort_cost: "비용",
sort_mp: "MP",
sort_skillLv1: "최대 스킬 턴",
sort_skillLvMax: "최소 스킬 턴",
sort_hpMax110: "최대 HP",
sort_atkMax110: "최대 공격",
sort_rcvMax110: "최대 회복",
sort_hpMax110_awoken: "최대 HP (+각성)",
sort_atkMax110_awoken: "최대 공격 (+각성)",
sort_rcvMax110_awoken: "최대 회복 (+각성)",
sort_abilityIndex_awoken: "최대 가중 능력 지수 (+각성)",
},
force_reload_data: "데이터 강제 새로 고침",
title_blank: "입력 제목",
detail_blank: "입력 내용",
sort_name:{
sort_none: "없음",
sort_id: "카드 ID",
sort_attrs : "속성",
sort_evoRootId: "카드 진화 루트",
sort_evoRoot_Attrs : "카드 진화 루트의 특성",
sort_rarity: "래리티",
sort_cost: "비용",
sort_mp: "MP",
sort_skillLv1: "최대 스킬 턴",
sort_skillLvMax: "최소 스킬 턴",
sort_hpMax110: "최대 HP",
sort_atkMax110: "최대 공격",
sort_rcvMax110: "최대 회복",
sort_hpMax110_awoken: "최대 HP (+각성)",
sort_atkMax110_awoken: "최대 공격 (+각성)",
sort_rcvMax110_awoken: "최대 회복 (+각성)",
sort_abilityIndex_awoken: "최대 가중 능력 지수 (+각성)",
},
force_reload_data: "데이터 강제 새로 고침",
}
deepMerge(localTranslating, _localTranslating);
localisation(localTranslating);

View File

@ -1,26 +1,26 @@
const languageList = [
{
name:"English",i18n:"en",searchlist:["en","ja"],
guideURL:id=>`http://www.puzzledragonx.com/en/monster.asp?n=${id}` //or (id,name)=>`http://www.puzzledragonx.com/en/search.asp?q=${name}`
},
{
name:"中文(繁體)",i18n:"zh-TW",i18n_RegExp:/^zh-(?:hant-)?TW/i,searchlist:["cht","ja"],
guideURL:id=>`https://pad.skyozora.com/pets/${id}`
},
{
name:"中文(简体)技能解析",i18n:"zh-CN",i18n_RegExp:/^zh-(?:hans-)?/i,searchlist:["chs","ja"],
guideURL:id=>`https://pad.skyozora.com/pets/${id}`
},
{
name:"中文(简体)原版技能",i18n:"zh",searchlist:["chs","ja"],
guideURL:id=>`https://pad.skyozora.com/pets/${id}`
},
{
name:"日本語",i18n:"ja",searchlist:["ja"],
guideURL:id=>`https://pd.appbank.net/m${id}` //or id=>`https://pd.appbank.net/m${id}`
},
{
name:"한국어",i18n:"ko",searchlist:["ko","ja"],
guideURL:id=>`http://www.thisisgame.com/pad/info/monster/detail.php?code=${id}`
},
{
name:"English",i18n:"en",searchlist:["en","ja"],
guideURL:id=>`http://www.puzzledragonx.com/en/monster.asp?n=${id}` //or (id,name)=>`http://www.puzzledragonx.com/en/search.asp?q=${name}`
},
{
name:"中文(繁體)",i18n:"zh-TW",i18n_RegExp:/^zh-(?:hant-)?TW/i,searchlist:["cht","ja"],
guideURL:id=>`https://pad.skyozora.com/pets/${id}`
},
{
name:"中文(简体)技能解析",i18n:"zh-CN",i18n_RegExp:/^zh-(?:hans-)?/i,searchlist:["chs","ja"],
guideURL:id=>`https://pad.skyozora.com/pets/${id}`
},
{
name:"中文(简体)原版技能",i18n:"zh",searchlist:["chs","ja"],
guideURL:id=>`https://pad.skyozora.com/pets/${id}`
},
{
name:"日本語",i18n:"ja",searchlist:["ja"],
guideURL:id=>`https://pd.appbank.net/m${id}` //or id=>`https://pd.appbank.net/m${id}`
},
{
name:"한국어",i18n:"ko",searchlist:["ko","ja"],
guideURL:id=>`http://www.thisisgame.com/pad/info/monster/detail.php?code=${id}`
},
];

View File

@ -6,37 +6,37 @@ localisation(localTranslating);
Number.prototype.bigNumberToString = function() {
const negative = this < 0;
let numTemp = negative ? Math.abs(this) : this.valueOf();
if (!numTemp) return "0";
const grouping = 1e4;
const unit = ['', '万', '亿', '兆', '京', '垓'];
const numParts = [];
do {
numParts.push(numTemp % grouping);
numTemp = Math.floor(numTemp / grouping);
} while (numTemp > 0 && numParts.length < (unit.length - 1))
if (numTemp > 0) {
numParts.push(numTemp);
}
let numPartsStr = numParts.map((num, idx) => {
if (num > 0) {
return (num < 1e3 ? "零" : "") + num + unit[idx];
} else
return "零";
});
let numTemp = negative ? Math.abs(this) : this.valueOf();
if (!numTemp) return "0";
const grouping = 1e4;
const unit = ['', '万', '亿', '兆', '京', '垓'];
const numParts = [];
do {
numParts.push(numTemp % grouping);
numTemp = Math.floor(numTemp / grouping);
} while (numTemp > 0 && numParts.length < (unit.length - 1))
if (numTemp > 0) {
numParts.push(numTemp);
}
let numPartsStr = numParts.map((num, idx) => {
if (num > 0) {
return (num < 1e3 ? "零" : "") + num + unit[idx];
} else
return "零";
});
numPartsStr.reverse(); //反向
let outStr = numPartsStr.join("");
outStr = outStr.replace(/(^零+|零+$)/g, ''); //去除开头的零
outStr = outStr.replace(/零{2,}/g, '零'); //去除多个连续的零
return (negative ? "-" : "") + outStr;
numPartsStr.reverse(); //反向
let outStr = numPartsStr.join("");
outStr = outStr.replace(/(^零+|零+$)/g, ''); //去除开头的零
outStr = outStr.replace(/零{2,}/g, '零'); //去除多个连续的零
return (negative ? "-" : "") + outStr;
}
//查找原先完整技能
function findFullSkill(subSkill) {
const parentSkill = Skills.find(ss => (ss.type === 116 || ss.type === 118 || ss.type === 138) && ss.params.includes(subSkill.id)) || subSkill;3
const aCard = Cards.find(card => card?.activeSkillId == parentSkill.id || card?.leaderSkillId == parentSkill.id);
return { skill: parentSkill, card: aCard };
const parentSkill = Skills.find(ss => (ss.type === 116 || ss.type === 118 || ss.type === 138) && ss.params.includes(subSkill.id)) || subSkill;3
const aCard = Cards.find(card => card?.activeSkillId == parentSkill.id || card?.leaderSkillId == parentSkill.id);
return { skill: parentSkill, card: aCard };
}
//document.querySelector(".edit-box .row-mon-id .m-id").type = "number";
/*
@ -49,215 +49,215 @@ console.table(result);
//insertAdjacentHTML 可以只增加部分 HTML
//高级技能解释
function parseSkillDescription(skill) {
const id = skill?.id;
let fragment = document.createDocumentFragment(); //创建节点用的临时空间
if (!id) return fragment;
const sk = skill.params;
const id = skill?.id;
let fragment = document.createDocumentFragment(); //创建节点用的临时空间
if (!id) return fragment;
const sk = skill.params;
//珠子名和属性名数组
const attrsName = ["火", "水", "木", "光", "暗", "回复", "废", "毒", "剧毒", "炸弹"];
//类型名数组
const typeName = ["进化", "平衡", "体力", "回复", "龙", "神", "攻击", "恶魔", "机械", "特别保护", "10", "11", "觉醒", "13", "强化", "卖钱"];
//觉醒名数组
const awokenName = ["HP+", "攻击+", "回复+", "火盾", "水盾", "木盾", "光盾", "暗盾", "自回", "防封", "防暗", "防废", "防毒", "火+", "水+", "木+", "光+", "暗+", "手指", "心解", "SB", "火横", "水横", "木横", "光横", "暗横", "U", "SX", "心+", "协力", "龙杀", "神杀", "恶魔杀", "机杀", "平衡杀", "攻击杀", "体力杀", "回复杀", "进化杀", "觉醒杀", "强化杀", "卖钱杀", "7c", "5色破防", "心追", "全体 HP ", "全体回复", "破无效", "武器", "方块心追", "5色溜", "大防封", "大手指", "防云", "防封条", "大SB", "上血", "下血", "L盾", "L解锁", "10c", "c珠", "语音", "奖励增加", " HP -", "攻击-", "回复-", "大防暗", "大防废", "大防毒", "掉废", "掉毒", "火串", "水串", "木串", "光串", "暗串", "十字", "3色", "4色", "5色"];
const ClumsN = ["左边第1竖列", "左边第2竖列", "左边第3竖列", "右边第3竖列", "右边第2竖列", "右边第1竖列"];
const RowsN = ["最上1横行", "上方第2横行", "下方第3横行", "下方第2横行", "最下1横行"];
//返回属性名
function attrN(i) { return attrsName[i || 0] || ("未知属性" + i); }
//返回类型名
function typeN(i) { return typeName[i || 0] || ("未知类型" + i); }
//返回觉醒名
function awokenN(i) { return awokenName[(i || 0) - 1] || ("未知觉醒" + i); }
//从二进制的数字中获得有哪些内容
function getNamesFromBinary(num, dataArr) {
/*num2N21N0
如果num和2的N次方同时存在某位1则返回这个数逻辑上转换为true
filter就可以返回所有有这个数的数据*/
/*num10465=>111010001
二进制数从低位到高位表示火水木光暗
用逻辑运算AND序号来获得有没有这个值*/
var results = dataArr.filter(function(pn, pi) {
return num & Math.pow(2, pi); //Math.pow(x,y)计算以x为底的y次方值
});
return results;
}
//珠子名和属性名数组
const attrsName = ["火", "水", "木", "光", "暗", "回复", "废", "毒", "剧毒", "炸弹"];
//类型名数组
const typeName = ["进化", "平衡", "体力", "回复", "龙", "神", "攻击", "恶魔", "机械", "特别保护", "10", "11", "觉醒", "13", "强化", "卖钱"];
//觉醒名数组
const awokenName = ["HP+", "攻击+", "回复+", "火盾", "水盾", "木盾", "光盾", "暗盾", "自回", "防封", "防暗", "防废", "防毒", "火+", "水+", "木+", "光+", "暗+", "手指", "心解", "SB", "火横", "水横", "木横", "光横", "暗横", "U", "SX", "心+", "协力", "龙杀", "神杀", "恶魔杀", "机杀", "平衡杀", "攻击杀", "体力杀", "回复杀", "进化杀", "觉醒杀", "强化杀", "卖钱杀", "7c", "5色破防", "心追", "全体 HP ", "全体回复", "破无效", "武器", "方块心追", "5色溜", "大防封", "大手指", "防云", "防封条", "大SB", "上血", "下血", "L盾", "L解锁", "10c", "c珠", "语音", "奖励增加", " HP -", "攻击-", "回复-", "大防暗", "大防废", "大防毒", "掉废", "掉毒", "火串", "水串", "木串", "光串", "暗串", "十字", "3色", "4色", "5色"];
const ClumsN = ["左边第1竖列", "左边第2竖列", "左边第3竖列", "右边第3竖列", "右边第2竖列", "右边第1竖列"];
const RowsN = ["最上1横行", "上方第2横行", "下方第3横行", "下方第2横行", "最下1横行"];
//返回属性名
function attrN(i) { return attrsName[i || 0] || ("未知属性" + i); }
//返回类型名
function typeN(i) { return typeName[i || 0] || ("未知类型" + i); }
//返回觉醒名
function awokenN(i) { return awokenName[(i || 0) - 1] || ("未知觉醒" + i); }
//从二进制的数字中获得有哪些内容
function getNamesFromBinary(num, dataArr) {
/*num2N21N0
如果num和2的N次方同时存在某位1则返回这个数逻辑上转换为true
filter就可以返回所有有这个数的数据*/
/*num10465=>111010001
二进制数从低位到高位表示火水木光暗
用逻辑运算AND序号来获得有没有这个值*/
var results = dataArr.filter(function(pn, pi) {
return num & Math.pow(2, pi); //Math.pow(x,y)计算以x为底的y次方值
});
return results;
}
const nb = getNamesFromBinary; //化简名称
const nb = getNamesFromBinary; //化简名称
function getAttrTypeString(attrsArray = [], typesArray = []) {
let outArr = [];
if (attrsArray && attrsArray.indexOf(0) >= 0 &&
attrsArray.indexOf(1) >= 0 &&
attrsArray.indexOf(2) >= 0 &&
attrsArray.indexOf(3) >= 0 &&
attrsArray.indexOf(4) >= 0) {
return "所有属性";
}
if (attrsArray && attrsArray.length) {
outArr.push(attrsArray.map(attrN).join("、") + "属性");
}
if (typesArray && typesArray.length) {
outArr.push(typesArray.map(typeN).join("、") + "类型");
}
return outArr.join("和");
}
function getAttrTypeString(attrsArray = [], typesArray = []) {
let outArr = [];
if (attrsArray && attrsArray.indexOf(0) >= 0 &&
attrsArray.indexOf(1) >= 0 &&
attrsArray.indexOf(2) >= 0 &&
attrsArray.indexOf(3) >= 0 &&
attrsArray.indexOf(4) >= 0) {
return "所有属性";
}
if (attrsArray && attrsArray.length) {
outArr.push(attrsArray.map(attrN).join("、") + "属性");
}
if (typesArray && typesArray.length) {
outArr.push(typesArray.map(typeN).join("、") + "类型");
}
return outArr.join("和");
}
function getOrbsAttrString(orbFlag, isOr = false) {
let outStr = ``;
if ((orbFlag & 1023) == 1023) //1023-1111111111
{ //单纯5色
outStr += '任何';
} else if (orbFlag == 31) //31-11111
{ //单纯5色
outStr += '5色';
} else if ((orbFlag & 31) == 31) { //5色加其他色
outStr += `5色+${nb(orbFlag ^ 31, attrsName).join(isOr?"或":"、")}`;
} else {
outStr += `${nb(orbFlag, attrsName).join(isOr?"或":"、")}`;
}
return outStr;
}
function getOrbsAttrString(orbFlag, isOr = false) {
let outStr = ``;
if ((orbFlag & 1023) == 1023) //1023-1111111111
{ //单纯5色
outStr += '任何';
} else if (orbFlag == 31) //31-11111
{ //单纯5色
outStr += '5色';
} else if ((orbFlag & 31) == 31) { //5色加其他色
outStr += `5色+${nb(orbFlag ^ 31, attrsName).join(isOr?"或":"、")}`;
} else {
outStr += `${nb(orbFlag, attrsName).join(isOr?"或":"、")}`;
}
return outStr;
}
function stats(value, statTypes) {
return [
statTypes.indexOf(1) >= 0 ? value : 100, //攻击
statTypes.indexOf(2) >= 0 ? value : 100 //回复
];
}
const mulName = ["HP", "攻击力", "回复力"];
//获取固定的三维成长的名称
function getFixedHpAtkRcvString(values, scale = true) {
let mulArr = null;
if (Array.isArray(values)) {
mulArr = [
100,
values[0],
values[1],
];
} else {
mulArr = [
(values.hp || 100),
(values.atk || 100),
(values.rcv || 100)
];
}
function stats(value, statTypes) {
return [
statTypes.indexOf(1) >= 0 ? value : 100, //攻击
statTypes.indexOf(2) >= 0 ? value : 100 //回复
];
}
const mulName = ["HP", "攻击力", "回复力"];
//获取固定的三维成长的名称
function getFixedHpAtkRcvString(values, scale = true) {
let mulArr = null;
if (Array.isArray(values)) {
mulArr = [
100,
values[0],
values[1],
];
} else {
mulArr = [
(values.hp || 100),
(values.atk || 100),
(values.rcv || 100)
];
}
let hasMul = new Set(mulArr);
hasMul.delete(100);
hasMul = Array.from(hasMul);
let str = "";
if (hasMul.length > 0) {
if (hasMul.length > 1) { //存在不一样的值
str += mulArr.map((m, i) => (m > 0 && m != 100) ? (mulName[i] + (scale ? (m >= 1 ? `×${m/100}` : `变为${m}%`) : `增加${m}%`)) : null).filter(s => s != null).join("");
} else {
let hasMulName = mulName.filter((n, i) => mulArr[i] != 100);
if (hasMulName.length >= 3) {
str += hasMulName.slice(0, hasMulName.length - 1).join("、") + "和" + hasMulName[hasMulName.length - 1];
} else {
str += hasMulName.join("和");
}
str += scale ? (hasMul[0] >= 1 ? `×${hasMul[0]/100}` : `变为${hasMul[0]}%`) : `增加${hasMul[0]}%`;
}
} else {
str += "能力值没有变化";
}
return str;
}
const mul = getFixedHpAtkRcvString;
//技能介绍里的头像的切换
function createBoard(boardData) {
const table = document.createElement("table");
table.className = "board fixed-shape-orb";
//console.table(boardData);
boardData.forEach((rowData, ri, rArr) => {
const row = table.insertRow();
if (ri == 2 && rArr.length > 5) row.classList.add("board-row4");
let str = "";
if (hasMul.length > 0) {
if (hasMul.length > 1) { //存在不一样的值
str += mulArr.map((m, i) => (m > 0 && m != 100) ? (mulName[i] + (scale ? (m >= 1 ? `×${m/100}` : `变为${m}%`) : `增加${m}%`)) : null).filter(s => s != null).join("");
} else {
let hasMulName = mulName.filter((n, i) => mulArr[i] != 100);
if (hasMulName.length >= 3) {
str += hasMulName.slice(0, hasMulName.length - 1).join("、") + "和" + hasMulName[hasMulName.length - 1];
} else {
str += hasMulName.join("和");
}
str += scale ? (hasMul[0] >= 1 ? `×${hasMul[0]/100}` : `变为${hasMul[0]}%`) : `增加${hasMul[0]}%`;
}
} else {
str += "能力值没有变化";
}
return str;
}
const mul = getFixedHpAtkRcvString;
//技能介绍里的头像的切换
function createBoard(boardData) {
const table = document.createElement("table");
table.className = "board fixed-shape-orb";
//console.table(boardData);
boardData.forEach((rowData, ri, rArr) => {
const row = table.insertRow();
if (ri == 2 && rArr.length > 5) row.classList.add("board-row4");
rowData.forEach((orbType, ci, cArr) => {
const cell = row.insertCell();
cell.className = "orb-icon";
if (orbType != null) {
cell.setAttribute("data-orb-icon", orbType);
}
if (ci == 3 && cArr.length > 6) cell.classList.add("board-cell5");
});
});
table.onclick = function() {
this.classList.toggle("board-76");
};
return table;
}
rowData.forEach((orbType, ci, cArr) => {
const cell = row.insertCell();
cell.className = "orb-icon";
if (orbType != null) {
cell.setAttribute("data-orb-icon", orbType);
}
if (ci == 3 && cArr.length > 6) cell.classList.add("board-cell5");
});
});
table.onclick = function() {
this.classList.toggle("board-76");
};
return table;
}
function boardData_fixed(dataArr, orbType) {
const data = dataArr.map(flag => new Array(6).fill(null).map((a, i) => (1 << i & flag) ? (orbType || 0) : null));
data.splice(3, 0, data[2].concat()); //将第2行复制插入为第3行
data.forEach(rowData =>
rowData.splice(4, 0, rowData[3]) //将第3个复制插入为第4个
);
return data;
}
function boardData_fixed(dataArr, orbType) {
const data = dataArr.map(flag => new Array(6).fill(null).map((a, i) => (1 << i & flag) ? (orbType || 0) : null));
data.splice(3, 0, data[2].concat()); //将第2行复制插入为第3行
data.forEach(rowData =>
rowData.splice(4, 0, rowData[3]) //将第3个复制插入为第4个
);
return data;
}
function boardData_line(data) {
data.splice(3, 0, data[2].concat()); //将第2行复制插入为第3行
data.forEach(row => row.splice(3, 0, null)); //插入全空为第4个
return data;
}
function boardData_line(data) {
data.splice(3, 0, data[2].concat()); //将第2行复制插入为第3行
data.forEach(row => row.splice(3, 0, null)); //插入全空为第4个
return data;
}
function boardData_row(data) {
data.splice(2, 0, new Array(6).fill(null)); //插入全空为第3行
data.forEach(row => row.splice(4, 0, row[3])); //将第3个复制插入为第4个
return data;
}
function boardData_row(data) {
data.splice(2, 0, new Array(6).fill(null)); //插入全空为第3行
data.forEach(row => row.splice(4, 0, row[3])); //将第3个复制插入为第4个
return data;
}
let str = null;
let strArr = null,
fullColor = null,
atSameTime = null,
hasDiffOrbs = null;
switch (skill.type) {
case 0:
str = `对敌方全体造成自身攻击力×${sk[1]/100}倍的${attrN(sk[0])}属性伤害`;
break;
case 1:
str = `对敌方全体造成${sk[1].bigNumberToString()}${attrN(sk[0])}属性伤害`;
break;
case 2:
str = `对敌方1体造成自身攻击力×${sk[0]/100}${sk[1]&&sk[1]!=sk[0]?'~'+sk[1]/100:''}倍的自身属性伤害`;
break;
case 3:
str = `${sk[0]}回合内,受到的伤害减少${sk[1]}%`;
break;
case 4:
str = `使敌方全体中毒,每回合损失宠物自身攻击力×${sk[0]/100}倍的 HP `;
break;
case 5:
str = `${sk[0]}秒内时间停止,可以任意移动宝珠`;
break;
case 6:
str = `敌人的 HP 减少${sk[0]}%`;
break;
case 7:
str = `回复宠物自身回复力×${sk[0]/100}倍的 HP`;
break;
case 8:
str = `回复 ${sk[0]} 点 HP `;
break;
case 9:
str = `${attrN(sk[0])}宝珠变为${attrN(sk[1])}宝珠`;
break;
case 10:
str = `全版刷新`;
break;
case 11:
str = `${attrN(sk[0])}属性宠物的攻击力×${sk[1]/100}`;
break;
case 12:
str = `消除宝珠的回合,以自身攻击力×${sk[0]/100}倍的伤害追打敌人`;
break;
case 13:
str = `消除宝珠的回合,回复自身回复力×${sk[0]/100}倍的 HP `;
break;
case 14:
str = `如当前 HP 在 HP 上限的${sk[0]}%以上的话,受到单一次致命攻击时,${sk[1]<100?`${sk[1]}的几率`:"将"}会以1点 HP 生还`;
let str = null;
let strArr = null,
fullColor = null,
atSameTime = null,
hasDiffOrbs = null;
switch (skill.type) {
case 0:
str = `对敌方全体造成自身攻击力×${sk[1]/100}倍的${attrN(sk[0])}属性伤害`;
break;
case 1:
str = `对敌方全体造成${sk[1].bigNumberToString()}${attrN(sk[0])}属性伤害`;
break;
case 2:
str = `对敌方1体造成自身攻击力×${sk[0]/100}${sk[1]&&sk[1]!=sk[0]?'~'+sk[1]/100:''}倍的自身属性伤害`;
break;
case 3:
str = `${sk[0]}回合内,受到的伤害减少${sk[1]}%`;
break;
case 4:
str = `使敌方全体中毒,每回合损失宠物自身攻击力×${sk[0]/100}倍的 HP `;
break;
case 5:
str = `${sk[0]}秒内时间停止,可以任意移动宝珠`;
break;
case 6:
str = `敌人的 HP 减少${sk[0]}%`;
break;
case 7:
str = `回复宠物自身回复力×${sk[0]/100}倍的 HP`;
break;
case 8:
str = `回复 ${sk[0]} 点 HP `;
break;
case 9:
str = `${attrN(sk[0])}宝珠变为${attrN(sk[1])}宝珠`;
break;
case 10:
str = `全版刷新`;
break;
case 11:
str = `${attrN(sk[0])}属性宠物的攻击力×${sk[1]/100}`;
break;
case 12:
str = `消除宝珠的回合,以自身攻击力×${sk[0]/100}倍的伤害追打敌人`;
break;
case 13:
str = `消除宝珠的回合,回复自身回复力×${sk[0]/100}倍的 HP `;
break;
case 14:
str = `如当前 HP 在 HP 上限的${sk[0]}%以上的话,受到单一次致命攻击时,${sk[1]<100?`${sk[1]}的几率`:"将"}会以1点 HP 生还`;
break;
case 15:
str = `操作时间${sk[0]>0?`延长`:`减少`}${Math.abs(sk[0]/100)}`;

View File

@ -106,13 +106,19 @@
.edit-box .setting-box .row-mon-plus::before{
content: "▼怪物加值";
}
.row-mon-ability .m-hp-li::before{
.row-mon-ability .m-hp-li::before,
.dialog-dungeon-enchance label[for="dungeon-hp"]::before
{
content: "HP:";
}
.row-mon-ability .m-atk-li::before{
.row-mon-ability .m-atk-li::before,
.dialog-dungeon-enchance label[for="dungeon-atk"]::before
{
content: "攻撃:";
}
.row-mon-ability .m-rcv-li::before{
.row-mon-ability .m-rcv-li::before,
.dialog-dungeon-enchance label[for="dungeon-rcv"]::before
{
content: "回復:";
}
@ -378,7 +384,8 @@ label[for="merge-skill"]::after{
}
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before,
.special-div .special-clear::before
.special-div .special-clear::before,
.dialog-dungeon-enchance .dialog-clear::before
{
content: "清除";
}
@ -530,4 +537,28 @@ label[for="qr-data-type-pdc"]::before
}
label[for="qr-data-type-pdchu"]::before {
content: "Valeria(pdchu)";
}
.btn-set-dungeon-enchance::before
{
content: "\f6d9 地下城强化";
}
.dialog-dungeon-enchance .dialog-title::before
{
content: "地下城強化倍率設定";
}
.dialog-dungeon-enchance .dialog-confirm::before
{
content: "確認";
}
.dialog-dungeon-enchance .attr-list::before
{
content: "生效属性:";
}
.dialog-dungeon-enchance .type-list::before
{
content: "生效類型:";
}
.dialog-dungeon-enchance .stats-list::before
{
content: "強化倍率:";
}

View File

@ -1,28 +1,28 @@
const _localTranslating = {
webpage_title: `龍族拼圖${teamsCount}人隊伍圖製作工具`,
webpage_title: `龍族拼圖${teamsCount}人隊伍圖製作工具`,
addition_display: "附加顯示",
title_blank: "輸入隊伍標題",
detail_blank: "輸入說明",
sort_name:{
sort_none: "無",
sort_id: "怪物ID",
sort_attrs : "屬性",
sort_evoRootId: "進化樹",
sort_evoRoot_Attrs : "進化根怪物的屬性",
sort_rarity: "稀有度",
sort_cost: "消耗",
sort_mp: "MP",
sort_skillLv1: "技能最大冷卻時間",
sort_skillLvMax: "技能最小冷卻時間",
sort_hpMax110: "最大 HP",
sort_atkMax110: "最大攻擊",
sort_rcvMax110: "最大回復",
sort_hpMax110_awoken: "最大 HP(+覺醒)",
sort_atkMax110_awoken: "最大攻擊(+覺醒)",
sort_rcvMax110_awoken: "最大回復(+覺醒)",
sort_abilityIndex_awoken: "最大加權能力指數(+覺醒)",
},
force_reload_data: "強制刷新數據",
title_blank: "輸入隊伍標題",
detail_blank: "輸入說明",
sort_name:{
sort_none: "無",
sort_id: "怪物ID",
sort_attrs : "屬性",
sort_evoRootId: "進化樹",
sort_evoRoot_Attrs : "進化根怪物的屬性",
sort_rarity: "稀有度",
sort_cost: "消耗",
sort_mp: "MP",
sort_skillLv1: "技能最大冷卻時間",
sort_skillLvMax: "技能最小冷卻時間",
sort_hpMax110: "最大 HP",
sort_atkMax110: "最大攻擊",
sort_rcvMax110: "最大回復",
sort_hpMax110_awoken: "最大 HP(+覺醒)",
sort_atkMax110_awoken: "最大攻擊(+覺醒)",
sort_rcvMax110_awoken: "最大回復(+覺醒)",
sort_abilityIndex_awoken: "最大加權能力指數(+覺醒)",
},
force_reload_data: "強制刷新數據",
};
deepMerge(localTranslating, _localTranslating);
localisation(localTranslating);
@ -32,7 +32,7 @@ Number.prototype.bigNumberToString = function()
{
let numTemp = this.valueOf();
if (!numTemp) return "0";
const grouping = 1e4;
const grouping = 1e4;
const unit = ['','萬','億','兆','京','垓'];
const numParts = [];
do{

View File

@ -106,13 +106,19 @@
.edit-box .setting-box .row-mon-plus::before{
content: "▼怪物加值";
}
.row-mon-ability .m-hp-li::before{
.row-mon-ability .m-hp-li::before,
.dialog-dungeon-enchance label[for="dungeon-hp"]::before
{
content: "HP:";
}
.row-mon-ability .m-atk-li::before{
.row-mon-ability .m-atk-li::before,
.dialog-dungeon-enchance label[for="dungeon-atk"]::before
{
content: "攻撃:";
}
.row-mon-ability .m-rcv-li::before{
.row-mon-ability .m-rcv-li::before,
.dialog-dungeon-enchance label[for="dungeon-rcv"]::before
{
content: "回復:";
}
.edit-box .setting-box .row-mon-level::before{
@ -378,7 +384,8 @@ label[for="merge-skill"]::after{
}
.search-box .awoken-clear::before,
.search-box .sawoken-clear::before,
.special-div .special-clear::before
.special-div .special-clear::before,
.dialog-dungeon-enchance .dialog-clear::before
{
content: "清除";
}
@ -530,4 +537,28 @@ label[for="qr-data-type-pdc"]::before
}
label[for="qr-data-type-pdchu"]::before {
content: "Valeria(pdchu)";
}
.btn-set-dungeon-enchance::before
{
content: "\f6d9 地下城强化";
}
.dialog-dungeon-enchance .dialog-title::before
{
content: "地下城強化倍率設定";
}
.dialog-dungeon-enchance .dialog-confirm::before
{
content: "確認";
}
.dialog-dungeon-enchance .attr-list::before
{
content: "生效属性:";
}
.dialog-dungeon-enchance .type-list::before
{
content: "生效類型:";
}
.dialog-dungeon-enchance .stats-list::before
{
content: "強化倍率:";
}

View File

@ -63,6 +63,7 @@ var formation = new Formation(teamsCount,5);
<a class="down-capture display-none" target="_blank"></a>
<button class="btn-solo-link" onclick="turnPage(1,arguments[0]);"></button>
<button class="btn-triple-link" onclick="turnPage(3,arguments[0]);"></button>
<button class="btn-set-dungeon-enchance"></button>
<button class="btn-swap-AB-team" onclick="swapABCteam();"></button>
<a class="help-link" target="_blank" href="https://github.com/Mapaler/PADDashFormation/blob/master/help.md"></a>
</div>
@ -1162,7 +1163,7 @@ var formation = new Formation(teamsCount,5);
<line />
</g>
</svg>
<div id="qr-code-frame" class="mask display-none">
<div id="qr-code-frame" class="mask display-none">
<button class="mask-close brown-button"></button>
<div class="mask-content">
<div class="read-qr-box">
@ -1192,5 +1193,38 @@ var formation = new Formation(teamsCount,5);
</div>
</div>
</div>
<div class="dialog dialog-dungeon-enchance display-none">
<div class="dialog-title"></div>
<div class="dialog-content">
<ul class="attr-list">
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="0" id="dungeon-attr-0" /><label class="attr" data-attr-icon="0" for="dungeon-attr-0"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="1" id="dungeon-attr-1" /><label class="attr" data-attr-icon="1" for="dungeon-attr-1"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="2" id="dungeon-attr-2" /><label class="attr" data-attr-icon="2" for="dungeon-attr-2"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="3" id="dungeon-attr-3" /><label class="attr" data-attr-icon="3" for="dungeon-attr-3"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="4" id="dungeon-attr-4" /><label class="attr" data-attr-icon="4" for="dungeon-attr-4"></label></li><!---->
</ul>
<ul class="type-list">
<li><input type="checkbox" class="type-check" name="dungeon-types" value="4" id="dungeon-type-4" /><label class="type-icon" data-type-icon="4" for="dungeon-type-4"><!----></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="5" id="dungeon-type-5" /><label class="type-icon" data-type-icon="5" for="dungeon-type-5"><!----></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="7" id="dungeon-type-7" /><label class="type-icon" data-type-icon="7" for="dungeon-type-7"><!--惡魔--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="8" id="dungeon-type-8" /><label class="type-icon" data-type-icon="8" for="dungeon-type-8"><!--机械--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="1" id="dungeon-type-1" /><label class="type-icon" data-type-icon="1" for="dungeon-type-1"><!--平衡--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="6" id="dungeon-type-6" /><label class="type-icon" data-type-icon="6" for="dungeon-type-6"><!--攻撃--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="2" id="dungeon-type-2" /><label class="type-icon" data-type-icon="2" for="dungeon-type-2"><!--体力--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="3" id="dungeon-type-3" /><label class="type-icon" data-type-icon="3" for="dungeon-type-3"><!--回復--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="0" id="dungeon-type-0" /><label class="type-icon" data-type-icon="0" for="dungeon-type-0"><!--進化用--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="12" id="dungeon-type-12" /><label class="type-icon" data-type-icon="12" for="dungeon-type-12"><!--能力覺醒用--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="14" id="dungeon-type-14" /><label class="type-icon" data-type-icon="14" for="dungeon-type-14"><!--強化合成用--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="15" id="dungeon-type-15" /><label class="type-icon" data-type-icon="15" for="dungeon-type-15"><!--販賣用--></label></li>
</ul>
<ul class="stats-list">
<li><label for="dungeon-hp"></label><input id="dungeon-hp" type="number" min=0 step=1 value=1 /></li>
<li><label for="dungeon-atk"></label><input id="dungeon-atk" type="number" min=0 step=1 value=1 /></li>
<li><label for="dungeon-rcv"></label><input id="dungeon-rcv" type="number" min=0 step=1 value=1 /></li>
</ul>
</div>
<div class="dialog-control"><button class="dialog-clear brown-button"></button><button class="dialog-confirm brown-button"></button></div>
</div>
</body>
</html>

View File

@ -13,32 +13,32 @@
},
];
let localTranslating = {
webpage_title: `智龙迷城${teamsCount}人队伍图制作`,
webpage_title: `智龙迷城${teamsCount}人队伍图制作`,
addition_display: "💬",
title_blank: "输入队伍标题",
detail_blank: "输入说明",
sort_name:{
sort_none: "无",
sort_id: "怪物ID",
sort_attrs: "属性",
sort_evoRootId: "进化树",
sort_evoRoot_Attrs : "进化根怪物的属性",
sort_rarity: "稀有度",
sort_cost: "消耗",
sort_mp: "MP",
sort_skillLv1: "技能最大冷却时间",
sort_skillLvMax: "技能最小冷却时间",
sort_hpMax110: "最大 HP",
sort_atkMax110: "最大攻击",
sort_rcvMax110: "最大回复",
sort_hpMax110_awoken: "最大 HP+觉醒)",
sort_atkMax110_awoken: "最大攻击(+觉醒)",
sort_rcvMax110_awoken: "最大回复(+觉醒)",
sort_abilityIndex_awoken: "最大加权能力指数(+觉醒)",
},
force_reload_data: "强制刷新数据",
skill_parse: {
skill: {
title_blank: "输入队伍标题",
detail_blank: "输入说明",
sort_name:{
sort_none: "无",
sort_id: "怪物ID",
sort_attrs: "属性",
sort_evoRootId: "进化树",
sort_evoRoot_Attrs : "进化根怪物的属性",
sort_rarity: "稀有度",
sort_cost: "消耗",
sort_mp: "MP",
sort_skillLv1: "技能最大冷却时间",
sort_skillLvMax: "技能最小冷却时间",
sort_hpMax110: "最大 HP",
sort_atkMax110: "最大攻击",
sort_rcvMax110: "最大回复",
sort_hpMax110_awoken: "最大 HP+觉醒)",
sort_atkMax110_awoken: "最大攻击(+觉醒)",
sort_rcvMax110_awoken: "最大回复(+觉醒)",
sort_abilityIndex_awoken: "最大加权能力指数(+觉醒)",
},
force_reload_data: "强制刷新数据",
skill_parse: {
skill: {
unknown: tp`未知的技能类型:${'type'}`, //type
active_turns: tp`${'turns'} 回合内,${'actionSkill'}`, //turns, actionSkill
random_skills: tp`随机发动以下技能:${'skills'}`, //skills
@ -51,18 +51,18 @@ let localTranslating = {
leader_change: tp`${'icon'}${'target'}换为队长,再次使用则换回来`,
no_skyfall: tp`${'icon'}天降的宝珠不会消除`,
self_harm: tp`${'icon'}${'stats'}减少${'value'}`,
heal: tp`${'icon'}回复 ${'value'}${'stats'}`,
heal: tp`${'icon'}回复 ${'value'}${'stats'}`,
unbind: tp`${'stats'}状态减少 ${'turns'} 回合`,
unbind_normal: tp`${'icon'}封锁`,
unbind_awakenings: tp`${'icon'}觉醒无效`,
unbind_matches: tp`${'icon'}无法消除宝珠`,
bind_skill: tp`${'icon'}自身无法使用技能`,
defense_break: tp`${'icon'}敌方的防御力减少${'value'}`,
poison: tp`${'icon'}使${'target'}中毒,每回合损失${'belong_to'} ${'value'}${'stats'}`,
defense_break: tp`${'icon'}敌方的防御力减少${'value'}`,
poison: tp`${'icon'}使${'target'}中毒,每回合损失${'belong_to'} ${'value'}${'stats'}`,
time_extend: tp`${'icon'}宝珠移动时间 ${'value'}`,
follow_attack: tp`${'icon'}消除宝珠的回合,以${'belong_to'}${'value'}的伤害追打${'target'}(计算防御力)`,
follow_attack_fixed: tp`追加${'damage'}${'attr'}伤害`,
auto_heal_buff: tp`行动结束后${'icon'}回复${'value'}${'stats'}`,
auto_heal_buff: tp`行动结束后${'icon'}回复${'value'}${'stats'}`,
auto_heal: tp`${'icon'}消除宝珠的回合,回复${'belong_to'}${'value'}${'stats'}`,
ctw: tp`${'icon'}${'value'}内时间停止,可以任意移动宝珠`,
gravity: tp`${'icon'}造成${'target'}${'value'}的伤害`,
@ -108,7 +108,7 @@ let localTranslating = {
obstruct_opponent_designated_position: tp`${'positions'}排位的对手`,
},
power: {
unknown: tp`[ 未知能力提升: ${'type'} ]`,
unknown: tp`[ 未知能力提升: ${'type'} ]`,
scale_attributes: tp`${'orbs'}${'min'}种属性同时攻击时${'stats'}${'bonus'}`,
scale_attributes_bonus: tp`每多1种${'bonus'},最大${'max'}种时${'stats_max'}`,
scale_combos: tp`${'min'}连击以上时${'stats'}${'bonus'}`,
@ -122,7 +122,7 @@ let localTranslating = {
scale_state_kind_count: tp`以队伍中[${'awakenings'}${'attrs'}${'types'}]的数量提升,每个${'stats'}`,
},
cond: {
unknown: tp`[ 未知条件 ]`,
unknown: tp`[ 未知条件 ]`,
hp_equal: tp`${'hp'} == ${'min'}`,
hp_less_or_equal: tp`${'hp'}${'max'}`,
hp_greater_or_equal: tp`${'hp'}${'min'}`,
@ -148,8 +148,8 @@ let localTranslating = {
right: tp`右方第${'pos'}竖列`,
shape: tp`指定位置`,
},
value: {
unknown: tp`[ 未知数值: ${'type'}]`, //type
value: {
unknown: tp`[ 未知数值: ${'type'}]`, //type
const: tp`${'value'}${'unit'}`,
const_to: tp`${'value'}`,
mul_percent: tp`${'value'}%`,
@ -170,17 +170,17 @@ let localTranslating = {
enemy_one: tp`敌方1体`,
enemy_attr: tp`${'attr'}敌人`,
},
stats: {
unknown: tp`[ 未知状态: ${'type'}]`, //type
maxhp: tp`最大HP`,
hp: tp`HP`,
chp: tp`当前HP`,
atk: tp`攻击力`,
stats: {
unknown: tp`[ 未知状态: ${'type'}]`, //type
maxhp: tp`最大HP`,
hp: tp`HP`,
chp: tp`当前HP`,
atk: tp`攻击力`,
rcv: tp`回复力`,
teamhp: tp`队伍总HP`,
teamatk: tp`队伍${'attrs'}总攻击力`,
teamrcv: tp`队伍回复力`,
},
teamhp: tp`队伍总HP`,
teamatk: tp`队伍${'attrs'}总攻击力`,
teamrcv: tp`队伍回复力`,
},
unit: {
orbs: tp``,
times: tp``,
@ -333,7 +333,7 @@ let localTranslating = {
[80]: tp`${'icon'}4色`,
[81]: tp`${'icon'}5色`,
}
},
},
}
//类型和觉醒杀和潜觉杀的对应编号,还有类型可以打什么类型的潜觉杀
@ -384,15 +384,15 @@ const equivalent_awoken = [
];
//官方的觉醒排列顺序
const official_awoken_sorting = [
21, 19, 43, 45, 10, 11, 12, 13, 49,
56, 53, 61, 50, 52, 68, 69, 70, 28,
27, 48, 62, 57, 58, 60, 59, 54, 55,
14, 15, 16, 17, 18, 29, 20, 44, 51,
22, 23, 24, 25, 26, 32, 31, 33, 34,
4, 5, 6, 7, 8, 35, 36, 37, 38,
1, 2, 3, 46, 47, 39, 40, 41, 42,
65, 66, 67, 9, 71, 72, 30, 64, 63,
73, 74, 75, 76, 77, 78, 79, 80, 81
21, 19, 43, 45, 10, 11, 12, 13, 49,
56, 53, 61, 50, 52, 68, 69, 70, 28,
27, 48, 62, 57, 58, 60, 59, 54, 55,
14, 15, 16, 17, 18, 29, 20, 44, 51,
22, 23, 24, 25, 26, 32, 31, 33, 34,
4, 5, 6, 7, 8, 35, 36, 37, 38,
1, 2, 3, 46, 47, 39, 40, 41, 42,
65, 66, 67, 9, 71, 72, 30, 64, 63,
73, 74, 75, 76, 77, 78, 79, 80, 81
];
//pdc的徽章对应数字

View File

@ -1,25 +1,25 @@
let merge_skill = false;
const Attributes = {
/*0: "Fire",
1: "Water",
2: "Wood",
3: "Light",
4: "Dark",
5: "Heart",
6: "Jammer",
7: "Poison",
8: "MPoison",
/*0: "Fire",
1: "Water",
2: "Wood",
3: "Light",
4: "Dark",
5: "Heart",
6: "Jammer",
7: "Poison",
8: "MPoison",
9: "Bomb",*/
Fire: 0,
Water: 1,
Wood: 2,
Light: 3,
Dark: 4,
Heart: 5,
Jammer: 6,
Poison: 7,
MPoison: 8,
Fire: 0,
Water: 1,
Wood: 2,
Light: 3,
Dark: 4,
Heart: 5,
Jammer: 6,
Poison: 7,
MPoison: 8,
Bomb: 9,
}
for (let name in Attributes)
@ -322,50 +322,50 @@ const SkillPowerUpKind = {
};
const SkillKinds = {
Unknown: "unknown",
ActiveTurns: "active-turns",
DamageEnemy: "damage-enemy",
Vampire: "vampire",
ReduceDamage: "reduce-damage",
SelfHarm: "self-harm",
Heal: "heal",
AutoHealBuff: "auto-heal-buff",
ChangeOrbs: "change-orbs",
GenerateOrbs: "generate-orbs",
FixedOrbs: "fixed-orbs",
PowerUp: "power-up",
CounterAttack: "counter-attack",
SetOrbState: "set-orb-state",
RateMultiply: "rate-mul",
OrbDropIncrease: "orb-drop-incr",
Resolve: "resolve",
Delay: "delay",
DefenseBreak: "def-break",
MassAttack: "mass-attack",
BoardChange: "board-change",
Unbind: "unbind",
BindSkill: "bind-skill",
RandomSkills: "random-skills",
Unknown: "unknown",
ActiveTurns: "active-turns",
DamageEnemy: "damage-enemy",
Vampire: "vampire",
ReduceDamage: "reduce-damage",
SelfHarm: "self-harm",
Heal: "heal",
AutoHealBuff: "auto-heal-buff",
ChangeOrbs: "change-orbs",
GenerateOrbs: "generate-orbs",
FixedOrbs: "fixed-orbs",
PowerUp: "power-up",
CounterAttack: "counter-attack",
SetOrbState: "set-orb-state",
RateMultiply: "rate-mul",
OrbDropIncrease: "orb-drop-incr",
Resolve: "resolve",
Delay: "delay",
DefenseBreak: "def-break",
MassAttack: "mass-attack",
BoardChange: "board-change",
Unbind: "unbind",
BindSkill: "bind-skill",
RandomSkills: "random-skills",
SkillProviso: "skill-proviso",
ChangeAttribute: "change-attr",
SkillBoost: "skill-boost",
AddCombo: "add-combo",
VoidEnemyBuff: "void-enemy-buff",
Poison: "poison",
CTW: "ctw",
Gravity: "gravity",
FollowAttack: "follow-attack",
FollowAttackFixed: "follow-attack-fixed",
AutoHeal: "auto-heal",
TimeExtend: "time-extend",
DropRefresh: "drop-refresh",
LeaderChange: "leader-change",
MinMatchLength: "min-match-len",
FixedTime: "fixed-time",
Drum: "drum",
AutoPath: "auto-path",
Board7x6: "7x6-board",
NoSkyfall: "no-skyfall",
ChangeAttribute: "change-attr",
SkillBoost: "skill-boost",
AddCombo: "add-combo",
VoidEnemyBuff: "void-enemy-buff",
Poison: "poison",
CTW: "ctw",
Gravity: "gravity",
FollowAttack: "follow-attack",
FollowAttackFixed: "follow-attack-fixed",
AutoHeal: "auto-heal",
TimeExtend: "time-extend",
DropRefresh: "drop-refresh",
LeaderChange: "leader-change",
MinMatchLength: "min-match-len",
FixedTime: "fixed-time",
Drum: "drum",
AutoPath: "auto-path",
Board7x6: "7x6-board",
NoSkyfall: "no-skyfall",
Henshin: "henshin",
VoidPoison: "void-poison",
SkillProviso: "skill-proviso",
@ -674,206 +674,206 @@ function flags(num){
}
const v = {
percent: function(value) {
return { kind: SkillValueKind.Percent, value: (value / 100) ?? 1 };
},
constant: function(value) {
return { kind: SkillValueKind.Constant, value: value ?? 0 };
},
constantTo: function(value) {
return { kind: SkillValueKind.ConstantTo, value: value ?? 1 };
},
xMaxHP: function(value) {
return { kind: SkillValueKind.xMaxHP, value: (value / 100) ?? 1 };
},
xHP: function(value) {
return { kind: SkillValueKind.xHP, value: (value / 100) ?? 1 };
},
xCHP: function(value) {
return { kind: SkillValueKind.xCHP, value: (value / 100) ?? 1 };
},
xATK: function(value) {
return { kind: SkillValueKind.xATK, value: (value / 100) ?? 1 };
},
xRCV: function(value) {
return { kind: SkillValueKind.xRCV, value: (value / 100) ?? 1 };
},
randomATK: function(min, max) {
return { kind: SkillValueKind.RandomATK, min: (min / 100) ?? 1, max: (max / 100) ?? 1, scale: 1 };
},
hpScale: function(min, max, scale) {
return { kind: SkillValueKind.HPScale, min: (min / 100) ?? 1, max: (max / 100) ?? 1, scale: (scale / 100) ?? 1 };
},
xTeamHP: function(value) {
return { kind: SkillValueKind.xTeamHP, value: (value / 100) ?? 1 };
},
xTeamATK: function(attrs, value) {
return { kind: SkillValueKind.xTeamATK, attrs: attrs, value: (value / 100) ?? 1 };
},
xTeamRCV: function(value) {
return { kind: SkillValueKind.xTeamRCV, value: (value / 100) ?? 1 };
},
percentAwakenings: function(awakenings, value) {
return { kind: SkillValueKind.xAwakenings, awakenings: awakenings, value: value };
},
percent: function(value) {
return { kind: SkillValueKind.Percent, value: (value / 100) ?? 1 };
},
constant: function(value) {
return { kind: SkillValueKind.Constant, value: value ?? 0 };
},
constantTo: function(value) {
return { kind: SkillValueKind.ConstantTo, value: value ?? 1 };
},
xMaxHP: function(value) {
return { kind: SkillValueKind.xMaxHP, value: (value / 100) ?? 1 };
},
xHP: function(value) {
return { kind: SkillValueKind.xHP, value: (value / 100) ?? 1 };
},
xCHP: function(value) {
return { kind: SkillValueKind.xCHP, value: (value / 100) ?? 1 };
},
xATK: function(value) {
return { kind: SkillValueKind.xATK, value: (value / 100) ?? 1 };
},
xRCV: function(value) {
return { kind: SkillValueKind.xRCV, value: (value / 100) ?? 1 };
},
randomATK: function(min, max) {
return { kind: SkillValueKind.RandomATK, min: (min / 100) ?? 1, max: (max / 100) ?? 1, scale: 1 };
},
hpScale: function(min, max, scale) {
return { kind: SkillValueKind.HPScale, min: (min / 100) ?? 1, max: (max / 100) ?? 1, scale: (scale / 100) ?? 1 };
},
xTeamHP: function(value) {
return { kind: SkillValueKind.xTeamHP, value: (value / 100) ?? 1 };
},
xTeamATK: function(attrs, value) {
return { kind: SkillValueKind.xTeamATK, attrs: attrs, value: (value / 100) ?? 1 };
},
xTeamRCV: function(value) {
return { kind: SkillValueKind.xTeamRCV, value: (value / 100) ?? 1 };
},
percentAwakenings: function(awakenings, value) {
return { kind: SkillValueKind.xAwakenings, awakenings: awakenings, value: value };
},
};
const c = {
hp: function (min, max) {
return { hp: { min: min / 100, max: max / 100 } };
return { hp: { min: min / 100, max: max / 100 } };
},
exact: function (type, value, attrs) {
if (attrs === void 0) { attrs = Attributes.all(); }
return { exact: { type: type, value: value, attrs: attrs } };
if (attrs === void 0) { attrs = Attributes.all(); }
return { exact: { type: type, value: value, attrs: attrs } };
},
compo: function (type, ids) {
return { compo: { type: type, ids: ids } };
return { compo: { type: type, ids: ids } };
},
remainOrbs: function (count) { return { remainOrbs: { count: count } }; },
useSkill: function () { return { useSkill: true }; },
remainOrbs: function (count) { return { remainOrbs: { count: count } }; },
useSkill: function () { return { useSkill: true }; },
multiplayer: function () { return { multiplayer: true }; },
prob: function (percent) { return { prob: percent }; },
LShape: function (attrs) { return { LShape: { attrs: attrs } }; },
LShape: function (attrs) { return { LShape: { attrs: attrs } }; },
heal: function (min) { return { heal: { min: min } }; },
}
const p = {
mul: function (values) {
if (Array.isArray(values)) {
return {
kind: SkillPowerUpKind.Multiplier,
hp: 1,
atk: values[0] / 100,
rcv: values[1] / 100
};
}
else {
return {
kind: SkillPowerUpKind.Multiplier,
hp: (values.hp ?? 100) / 100,
atk: (values.atk ?? 100) / 100,
rcv: (values.rcv ?? 100) / 100
};
}
},
stats: function (value) {
let statTypes = Array.from(arguments).slice(1);
return [
statTypes.indexOf(1) >= 0 ? value : 100,
statTypes.indexOf(2) >= 0 ? value : 100
];
},
scale: function (min, max, baseMul, bonusMul) {
return {
min: min,
max: max ?? min,
baseAtk: (baseMul[0] / 100) ?? 1,
baseRcv: (baseMul[1] / 100) ?? 1,
bonusAtk: (bonusMul[0] / 100) ?? 0,
bonusRcv: (bonusMul[1] / 100) ?? 0
};
},
scaleAttrs: function (attrs, min, max, baseMul, bonusMul) {
return { kind: SkillPowerUpKind.ScaleAttributes, attrs: attrs ,...this.scale(min, max, baseMul, bonusMul) };
},
scaleCombos: function (min, max, baseMul, bonusMul) {
return { kind: SkillPowerUpKind.ScaleCombos ,...this.scale(min, max, baseMul, bonusMul) };
},
scaleMatchLength: function (attrs, min, max, baseMul, bonusMul, matchAll = false) {
mul: function (values) {
if (Array.isArray(values)) {
return {
kind: SkillPowerUpKind.Multiplier,
hp: 1,
atk: values[0] / 100,
rcv: values[1] / 100
};
}
else {
return {
kind: SkillPowerUpKind.Multiplier,
hp: (values.hp ?? 100) / 100,
atk: (values.atk ?? 100) / 100,
rcv: (values.rcv ?? 100) / 100
};
}
},
stats: function (value) {
let statTypes = Array.from(arguments).slice(1);
return [
statTypes.indexOf(1) >= 0 ? value : 100,
statTypes.indexOf(2) >= 0 ? value : 100
];
},
scale: function (min, max, baseMul, bonusMul) {
return {
min: min,
max: max ?? min,
baseAtk: (baseMul[0] / 100) ?? 1,
baseRcv: (baseMul[1] / 100) ?? 1,
bonusAtk: (bonusMul[0] / 100) ?? 0,
bonusRcv: (bonusMul[1] / 100) ?? 0
};
},
scaleAttrs: function (attrs, min, max, baseMul, bonusMul) {
return { kind: SkillPowerUpKind.ScaleAttributes, attrs: attrs ,...this.scale(min, max, baseMul, bonusMul) };
},
scaleCombos: function (min, max, baseMul, bonusMul) {
return { kind: SkillPowerUpKind.ScaleCombos ,...this.scale(min, max, baseMul, bonusMul) };
},
scaleMatchLength: function (attrs, min, max, baseMul, bonusMul, matchAll = false) {
/*if (min <= 3 && min === max)
return this.scaleAttrs(attrs, matchAll ? attrs.length : 1, matchAll ? attrs.length : 1, baseMul, bonusMul);
return this.scaleAttrs(attrs, matchAll ? attrs.length : 1, matchAll ? attrs.length : 1, baseMul, bonusMul);
else*/
return { kind: SkillPowerUpKind.ScaleMatchLength, attrs: attrs, matchAll: matchAll ,...this.scale(min, max, baseMul, bonusMul) };
},
scaleMatchAttrs: function (matches, min, max, baseMul, bonusMul) {
return { kind: SkillPowerUpKind.ScaleMatchLength, attrs: attrs, matchAll: matchAll ,...this.scale(min, max, baseMul, bonusMul) };
},
scaleMatchAttrs: function (matches, min, max, baseMul, bonusMul) {
const flatMatches = matches.flat(); //当匹配的全是不同颜色时,切换成匹配颜色的技能
if (new Set(flatMatches).size === flatMatches.length)
return this.scaleAttrs(matches, min, max, baseMul, bonusMul);
return this.scaleAttrs(matches, min, max, baseMul, bonusMul);
else
return { kind: SkillPowerUpKind.ScaleMatchAttrs, matches: matches ,...this.scale(min, max, baseMul, bonusMul) };
},
scaleCross: function (crosses) {
return { kind: SkillPowerUpKind.ScaleCross, crosses: crosses.map(cross => ({ ...cross, atk: ((cross.atk ?? 100) / 100), rcv: ((cross.rcv ?? 100) / 100)})) };
},
scaleStateKindCount: function (awakenings, attrs, types, value) {
return { kind: SkillPowerUpKind.ScaleStateKindCount, awakenings: awakenings, attrs: attrs, types: types, value: value };
},
return { kind: SkillPowerUpKind.ScaleMatchAttrs, matches: matches ,...this.scale(min, max, baseMul, bonusMul) };
},
scaleCross: function (crosses) {
return { kind: SkillPowerUpKind.ScaleCross, crosses: crosses.map(cross => ({ ...cross, atk: ((cross.atk ?? 100) / 100), rcv: ((cross.rcv ?? 100) / 100)})) };
},
scaleStateKindCount: function (awakenings, attrs, types, value) {
return { kind: SkillPowerUpKind.ScaleStateKindCount, awakenings: awakenings, attrs: attrs, types: types, value: value };
},
}
function activeTurns(turns, skill) {
return skill ? { kind: SkillKinds.ActiveTurns, turns: turns, skill: skill } : null;
return skill ? { kind: SkillKinds.ActiveTurns, turns: turns, skill: skill } : null;
}
function damageEnemy(target, attr, damage) {
return { kind: SkillKinds.DamageEnemy, target: target, attr: attr, damage: damage };
return { kind: SkillKinds.DamageEnemy, target: target, attr: attr, damage: damage };
}
function vampire(attr, damageValue, healValue) {
return { kind: SkillKinds.Vampire, attr: attr, damage: damageValue, heal: healValue };
return { kind: SkillKinds.Vampire, attr: attr, damage: damageValue, heal: healValue };
}
function reduceDamage(attrs, percent, condition) {
return { kind: SkillKinds.ReduceDamage, attrs: attrs, percent: percent, condition: condition };
return { kind: SkillKinds.ReduceDamage, attrs: attrs, percent: percent, condition: condition };
}
function selfHarm(value) {
return { kind: SkillKinds.SelfHarm, value: value };
return { kind: SkillKinds.SelfHarm, value: value };
}
function heal(value) {
return { kind: SkillKinds.Heal, value: value };
return { kind: SkillKinds.Heal, value: value };
}
function autoHealBuff(value) {
return { kind: SkillKinds.AutoHealBuff, value: value };
}
function fromTo(from, to) {
return { from: from, to: to };
return { from: from, to: to };
}
function changeOrbs() {
return { kind: SkillKinds.ChangeOrbs, changes: Array.from(arguments) };
return { kind: SkillKinds.ChangeOrbs, changes: Array.from(arguments) };
}
function generateOrbs(orbs, exclude, count, time) {
return { kind: SkillKinds.GenerateOrbs, orbs: orbs, exclude: exclude, count: count, time: time};
return { kind: SkillKinds.GenerateOrbs, orbs: orbs, exclude: exclude, count: count, time: time};
}
function fixedOrbs() {
return { kind: SkillKinds.FixedOrbs, generates: Array.from(arguments) };
return { kind: SkillKinds.FixedOrbs, generates: Array.from(arguments) };
}
function powerUp(attrs, types, value, condition = null, reduceDamageValue = null, additional = []) {
if (value.kind === SkillPowerUpKind.Multiplier) {
let hp = value.hp, atk = value.atk, rcv = value.rcv;
if (hp === 1 && atk === 1 && rcv === 1 && !reduceDamage)
return null;
}
return { kind: SkillKinds.PowerUp, attrs: attrs, types: types, condition: condition, value: value, reduceDamage: reduceDamageValue, additional: additional};
if (value.kind === SkillPowerUpKind.Multiplier) {
let hp = value.hp, atk = value.atk, rcv = value.rcv;
if (hp === 1 && atk === 1 && rcv === 1 && !reduceDamage)
return null;
}
return { kind: SkillKinds.PowerUp, attrs: attrs, types: types, condition: condition, value: value, reduceDamage: reduceDamageValue, additional: additional};
}
function counterAttack(attr, prob, value) {
return { kind: SkillKinds.CounterAttack, attr: attr, prob: prob, value: value };
return { kind: SkillKinds.CounterAttack, attr: attr, prob: prob, value: value };
}
function setOrbState(orbs, state, arg) {
return { kind: SkillKinds.SetOrbState, orbs: orbs, state: state, arg: arg};
return { kind: SkillKinds.SetOrbState, orbs: orbs, state: state, arg: arg};
}
function rateMultiply(value, rate) {
return { kind: SkillKinds.RateMultiply, value: value, rate: rate };
return { kind: SkillKinds.RateMultiply, value: value, rate: rate };
}
function orbDropIncrease(value, attrs, flag) {
return { kind: SkillKinds.OrbDropIncrease, value: value, attrs: attrs, flag: flag };
return { kind: SkillKinds.OrbDropIncrease, value: value, attrs: attrs, flag: flag };
}
function resolve(min, max) {
return { kind: SkillKinds.Resolve, min: min, max: max };
return { kind: SkillKinds.Resolve, min: min, max: max };
}
function unbind(normal, awakenings, matches) {
return { kind: SkillKinds.Unbind, normal: normal, awakenings: awakenings , matches: matches};
return { kind: SkillKinds.Unbind, normal: normal, awakenings: awakenings , matches: matches};
}
function bindSkill() { return { kind: SkillKinds.BindSkill}; }
function boardChange(attrs) {
return { kind: SkillKinds.BoardChange, attrs: attrs };
return { kind: SkillKinds.BoardChange, attrs: attrs };
}
function randomSkills(skills) {
return { kind: SkillKinds.RandomSkills, skills: skills };
return { kind: SkillKinds.RandomSkills, skills: skills };
}
function changeAttr(target, attr) {
return { kind: SkillKinds.ChangeAttribute, target: target, attr: attr ?? 0 };
return { kind: SkillKinds.ChangeAttribute, target: target, attr: attr ?? 0 };
}
function gravity(value) {
return { kind: SkillKinds.Gravity, value: value };
return { kind: SkillKinds.Gravity, value: value };
}
function voidEnemyBuff(buffs) {
return { kind: SkillKinds.VoidEnemyBuff, buffs: buffs };
return { kind: SkillKinds.VoidEnemyBuff, buffs: buffs };
}
function skillBoost(value) { return { kind: SkillKinds.SkillBoost, value: value }; }
function minMatch(value) { return { kind: SkillKinds.MinMatchLength, value: value }; }
@ -1420,9 +1420,9 @@ Array.prototype.nodeJoin = function(separator)
}
//按住Ctrl点击技能在控制台输出技能的对象
function showParsedSkill(event) {
if (event.ctrlKey) {
console.log(this.skill);
}
if (event.ctrlKey) {
console.log(this.skill);
}
}
function renderSkillEntry(skills)

View File

@ -405,6 +405,9 @@ function calculateAbility(member, assist = null, solo = true, teamsCount = 1) {
const memberCurves = [memberCard.hp, memberCard.atk, memberCard.rcv];
const assistCurves = assistCard ? [assistCard.hp, assistCard.atk, assistCard.rcv] : null;
const dge = formation.dungeonEnchance;
const dgeRate = [dge.rate.hp, dge.rate.atk, dge.rate.rcv];
const isDge = memberCard.attrs.some(attr=>dge.attrs.includes(attr)) || memberCard.types.some(type=>dge.types.includes(type));
const abilitys = memberCurves.map((ab, idx) => {
const n_base = Math.round(curve(ab, member.level, memberCard.maxLevel, memberCard.limitBreakIncr, limitBreakIncr120[idx])); //等级基础三维
@ -468,9 +471,9 @@ function calculateAbility(member, assist = null, solo = true, teamsCount = 1) {
reValue = reValue * latterAwokenScale[idx].reduce(calculateAwokenScale, 1);
//都要做四舍五入
if (formation.dungeonEnchance.rate !== 1)
if (isDge && dgeRate[idx] != 1)
{
let rate = (memberCard.attrs.some(attr=>formation.dungeonEnchance.attrs.includes(attr)) || memberCard.types.some(type=>formation.dungeonEnchance.types.includes(type))) ? formation.dungeonEnchance.rate : 1;
let rate = dgeRate[idx];
reValue = Math.round(reValue * rate);
reValueNoAwoken = Math.round(reValueNoAwoken * rate);
}else
@ -667,12 +670,12 @@ function cardN(id) {
}
//技能介绍里的头像的切换
function changeToIdInSkillDetail(event) {
const settingBox = editBox.querySelector(".setting-box");
const monstersID = settingBox.querySelector(".row-mon-id .m-id");
const mid = this.getAttribute("data-cardid");
monstersID.value = mid;
monstersID.onchange();
return false; //取消链接的默认操作
const settingBox = editBox.querySelector(".setting-box");
const monstersID = settingBox.querySelector(".row-mon-id .m-id");
const mid = this.getAttribute("data-cardid");
monstersID.value = mid;
monstersID.onchange();
return false; //取消链接的默认操作
}
//搜索并显示合作
function searchCollab(event) {

145
script.js
View File

@ -252,7 +252,11 @@ var Formation = function(teamCount, memberCount) {
this.dungeonEnchance = {
attrs: [],
types: [],
rate: 1,
rate: {
hp: 1,
atk: 1,
rcv: 1
}
}
for (let ti = 0; ti < teamCount; ti++) {
const team = [
@ -284,11 +288,14 @@ Formation.prototype.outObj = function() {
if (t[3]) teamArr[3] = t[3];
return teamArr;
});
if (this.dungeonEnchance.rate != 1) obj.r = [
this.dungeonEnchance.rate, //比例
reflags(this.dungeonEnchance.types) //优先添加Type
let dge = this.dungeonEnchance;
if (Object.values(dge.rate).some(rate => rate != 1)) obj.r = [
reflags(dge.attrs), //属性
reflags(dge.types), //类型
dge.rate.hp,
dge.rate.atk,
dge.rate.rcv
];
if (this.dungeonEnchance.attrs.length) obj.r.push(reflags(this.dungeonEnchance.attrs)); //有Attr.才添加
obj.v = dataStructure;
/*if (obj.f.every(team=>team[0].length == 0 && team[1].length == 0 && team[2] == undefined) &&
!obj.t &&
@ -297,6 +304,7 @@ Formation.prototype.outObj = function() {
return obj;
};
Formation.prototype.loadObj = function(f) {
let dge = this.dungeonEnchance;
if (f == undefined) //如果没有提供数据,要返回空的
{
this.title = "";
@ -311,9 +319,11 @@ Formation.prototype.loadObj = function(f) {
t[2] = 0;
t[3] = 0;
});
this.dungeonEnchance.rate = 1;
this.dungeonEnchance.attrs.length = 0;
this.dungeonEnchance.types.length = 0;
dge.attrs.length = 0;
dge.types.length = 0;
dge.rate.hp = 1;
dge.rate.atk = 1;
dge.rate.rcv = 1;
return;
}
const dataVeision = f.v ? f.v : (f.f ? 2 : 1); //是第几版格式
@ -337,9 +347,11 @@ Formation.prototype.loadObj = function(f) {
});
if (f.r)
{
this.dungeonEnchance.rate = f.r[0] ?? 1;
this.dungeonEnchance.types = flags(f.r[1] ?? 0);
this.dungeonEnchance.attrs = flags(f.r[2] ?? 0);
dge.attrs = flags(f.r[0] ?? 0);
dge.types = flags(f.r[1] ?? 0);
dge.rate.hp = f.r[2] ?? 1;
dge.rate.atk = f.r[3] ?? 1;
dge.rate.rcv = f.r[4] ?? 1;
}
if (f.b)
this.teams[0][2] = f.b; //原来模式的徽章
@ -451,6 +463,7 @@ class EvoTree
//mid = Cards[mid].evoRootId;
function returnRootId(mid)
{
console.log(mid)
mid = Cards[mid].evoRootId;
const m = Cards[mid];
if (m.henshinFrom && m.henshinFrom < m.id)
@ -1307,28 +1320,36 @@ function initialize() {
line.setAttribute("y2", p2.y);
};
//初始化所有mask的关闭按钮
const masks = document.body.querySelectorAll(".mask");
for (const mask of masks)
{
mask.show = function(arg){
this?.initialize?.(arg);
this.classList.remove(className_displayNone);
};
mask.btnClose = mask.querySelector(".mask-close");
mask.btnClose.onclick = function(){
mask?.hide?.();
mask.classList.add(className_displayNone);
};
}
const qrCodeFrame = document.body.querySelector("#qr-code-frame");
const btnQrCode = controlBox.querySelector(`.btn-qrcode`);
btnQrCode.onclick = function(){
qrCodeFrame.show();
};
qrCodeFrame.show = function(){
qrCodeFrame.initialize = function(){
const saveBox = this.content.saveBox;
const readBox = this.content.readBox;
readBox.info.textContent = "";
readBox.videoBox.classList.add(className_displayNone);
this.classList.remove(className_displayNone);
let qrTypeRadio = saveBox.qrDataType.find(radio=>radio.checked);
if (qrTypeRadio) qrTypeRadio.onclick(); //打开二维码窗口就先产生二维码
};
qrCodeFrame.hide = function(){
qrcodeReader.reset();
this.classList.add(className_displayNone);
};
qrCodeFrame.close = qrCodeFrame.querySelector(".mask-close");
qrCodeFrame.close.onclick = function(){qrCodeFrame.hide()};
qrCodeFrame.hide = function(){qrcodeReader.reset();};
const qrContent = qrCodeFrame.content = qrCodeFrame.querySelector(".mask-content");
const qrReadBox = qrContent.readBox = qrContent.querySelector(".read-qr-box");
@ -1939,6 +1960,74 @@ function initialize() {
hpDetailDialog.show(this.reduceAttrRanges, this.tHP, this.tHPNoAwoken);
};
});
//设置地下城倍率
const dungeonEnchanceDialog = document.body.querySelector(".dialog-dungeon-enchance");
dungeonEnchanceDialog.show = function(formation)
{
const dialogContent = this.querySelector(".dialog-content");
const attrDoms = Array.from(dialogContent.querySelectorAll(".attr-list .attr-check"));
const typeDoms = Array.from(dialogContent.querySelectorAll(".type-list .type-check"));
let dge = formation.dungeonEnchance;
for (const attrDom of attrDoms)
{
attrDom.checked = dge.attrs.includes(parseInt(attrDom.value));
}
for (const typeDom of typeDoms)
{
typeDom.checked = dge.types.includes(parseInt(typeDom.value));
}
dialogContent.querySelector("#dungeon-hp").value = dge.rate.hp;
dialogContent.querySelector("#dungeon-atk").value = dge.rate.atk;
dialogContent.querySelector("#dungeon-rcv").value = dge.rate.rcv;
this.classList.remove(className_displayNone);
}
dungeonEnchanceDialog.close = function()
{
this.classList.add(className_displayNone);
}
const dungeonEnchanceDialogConfirm = dungeonEnchanceDialog.querySelector(".dialog-confirm");
dungeonEnchanceDialogConfirm.onclick = function(){
const dialogContent = dungeonEnchanceDialog.querySelector(".dialog-content");
const attrDoms = Array.from(dialogContent.querySelectorAll(".attr-list .attr-check"));
const typeDoms = Array.from(dialogContent.querySelectorAll(".type-list .type-check"));
const attrs = attrDoms.map(attrDom=>attrDom.checked ? parseInt(attrDom.value) : undefined).filter(v=>!isNaN(v));
const types = typeDoms.map(typeDom=>typeDom.checked ? parseInt(typeDom.value) : undefined).filter(v=>!isNaN(v));
let dge = formation.dungeonEnchance;
dge.attrs = attrs;
console.log(attrs, types);
dge.types = types;
dge.rate.hp = parseInt(dialogContent.querySelector("#dungeon-hp").value);
dge.rate.atk = parseInt(dialogContent.querySelector("#dungeon-atk").value);
dge.rate.rcv = parseInt(dialogContent.querySelector("#dungeon-rcv").value);
dungeonEnchanceDialog.close();
creatNewUrl();
refreshAll(formation);
};
const dungeonEnchanceDialogClear = dungeonEnchanceDialog.querySelector(".dialog-clear");
dungeonEnchanceDialogClear.onclick = function(){
const dialogContent = dungeonEnchanceDialog.querySelector(".dialog-content");
const attrDoms = Array.from(dialogContent.querySelectorAll(".attr-list .attr-check"));
const typeDoms = Array.from(dialogContent.querySelectorAll(".type-list .type-check"));
for (const attrDom of attrDoms)
{
attrDom.checked = false;
}
for (const typeDom of typeDoms)
{
typeDom.checked = false;
}
dialogContent.querySelector("#dungeon-hp").value = 1;
dialogContent.querySelector("#dungeon-atk").value = 1;
dialogContent.querySelector("#dungeon-rcv").value = 1;
};
const dungeonEnchanceDialogOpen = controlBox.querySelector(".btn-set-dungeon-enchance");
dungeonEnchanceDialogOpen.onclick = function(){
dungeonEnchanceDialog.show(formation);
};
//编辑框
editBox.mid = null; //储存怪物id
@ -2190,7 +2279,7 @@ function initialize() {
//显示进化树
const evolutionaryTreeMask = settingBox.querySelector(".mask-evolutionary-tree");
evolutionaryTreeMask.show = function(monid)
evolutionaryTreeMask.initialize = function(monid)
{
const maskContent = this.querySelector(".mask-content");
const fragment = document.createDocumentFragment();
@ -2199,14 +2288,7 @@ function initialize() {
fragment.appendChild(evoTree.toListNode());
maskContent.innerHTML = "";
maskContent.appendChild(fragment);
this.classList.remove(className_displayNone);
}
evolutionaryTreeMask.hide = function()
{
this.classList.add(className_displayNone);
}
const evolutionaryTreeMask_Close = evolutionaryTreeMask.querySelector(".mask-close");
evolutionaryTreeMask_Close.onclick = function(){evolutionaryTreeMask.hide();};
const openEvolutionaryTree = settingBox.querySelector(".row-mon-id .open-evolutionary-tree");
openEvolutionaryTree.onclick = function() {evolutionaryTreeMask.show(editBox.mid)};
const searchEvolutionByThis = settingBox.querySelector(".row-mon-id .search-evolution-by-this");
@ -3747,16 +3829,11 @@ function refreshAll(formationData) {
detailBox.classList.remove("edit");
let dge = formationData.dungeonEnchance;
if (dge.rate !== 1)
if (Object.values(dge.rate).some(rate => rate != 1))
{
dungeonEnchanceDom.innerHTML = '';
//if (formationData.dungeonEnchance.attrs.length) dungeonEnchanceDom.appendChild(renderAttrs(formationData.dungeonEnchance.attrs));
//if (formationData.dungeonEnchance.types.length) dungeonEnchanceDom.appendChild(renderTypes(formationData.dungeonEnchance.types));
let rate = dge.rate * 100;
let skill = powerUp(dge.attrs, dge.types, p.mul({hp: rate, atk: rate, rcv: rate}));
let skill = powerUp(dge.attrs, dge.types, p.mul({hp: dge.rate.hp * 100, atk: dge.rate.atk * 100, rcv: dge.rate.rcv * 100}));
dungeonEnchanceDom.appendChild(renderSkill(skill));
//tsp.skill.reduce_damage(dict)
//dungeonEnchanceDom.appendChild(renderTypes(formationData.dungeonEnchance.types));
dungeonEnchanceDom.classList.remove(className_displayNone);
}else
{

View File

@ -44,6 +44,7 @@ var formation = new Formation(teamsCount,6);
<a class="down-capture display-none" target="_blank"></a>
<button class="btn-multi-link" onclick="turnPage(2,arguments[0]);"></button>
<button class="btn-triple-link" onclick="turnPage(3,arguments[0]);"></button>
<button class="btn-set-dungeon-enchance"></button>
<a class="help-link" target="_blank" href="https://github.com/Mapaler/PADDashFormation/blob/master/help.md"></a>
</div>
<div>
@ -1016,7 +1017,7 @@ var formation = new Formation(teamsCount,6);
<line />
</g>
</svg>
<div id="qr-code-frame" class="mask display-none">
<div id="qr-code-frame" class="mask display-none">
<button class="mask-close brown-button"></button>
<div class="mask-content">
<div class="read-qr-box">
@ -1046,5 +1047,38 @@ var formation = new Formation(teamsCount,6);
</div>
</div>
</div>
<div class="dialog dialog-dungeon-enchance display-none">
<div class="dialog-title"></div>
<div class="dialog-content">
<ul class="attr-list">
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="0" id="dungeon-attr-0" /><label class="attr" data-attr-icon="0" for="dungeon-attr-0"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="1" id="dungeon-attr-1" /><label class="attr" data-attr-icon="1" for="dungeon-attr-1"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="2" id="dungeon-attr-2" /><label class="attr" data-attr-icon="2" for="dungeon-attr-2"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="3" id="dungeon-attr-3" /><label class="attr" data-attr-icon="3" for="dungeon-attr-3"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="4" id="dungeon-attr-4" /><label class="attr" data-attr-icon="4" for="dungeon-attr-4"></label></li><!---->
</ul>
<ul class="type-list">
<li><input type="checkbox" class="type-check" name="dungeon-types" value="4" id="dungeon-type-4" /><label class="type-icon" data-type-icon="4" for="dungeon-type-4"><!----></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="5" id="dungeon-type-5" /><label class="type-icon" data-type-icon="5" for="dungeon-type-5"><!----></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="7" id="dungeon-type-7" /><label class="type-icon" data-type-icon="7" for="dungeon-type-7"><!--惡魔--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="8" id="dungeon-type-8" /><label class="type-icon" data-type-icon="8" for="dungeon-type-8"><!--机械--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="1" id="dungeon-type-1" /><label class="type-icon" data-type-icon="1" for="dungeon-type-1"><!--平衡--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="6" id="dungeon-type-6" /><label class="type-icon" data-type-icon="6" for="dungeon-type-6"><!--攻撃--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="2" id="dungeon-type-2" /><label class="type-icon" data-type-icon="2" for="dungeon-type-2"><!--体力--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="3" id="dungeon-type-3" /><label class="type-icon" data-type-icon="3" for="dungeon-type-3"><!--回復--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="0" id="dungeon-type-0" /><label class="type-icon" data-type-icon="0" for="dungeon-type-0"><!--進化用--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="12" id="dungeon-type-12" /><label class="type-icon" data-type-icon="12" for="dungeon-type-12"><!--能力覺醒用--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="14" id="dungeon-type-14" /><label class="type-icon" data-type-icon="14" for="dungeon-type-14"><!--強化合成用--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="15" id="dungeon-type-15" /><label class="type-icon" data-type-icon="15" for="dungeon-type-15"><!--販賣用--></label></li>
</ul>
<ul class="stats-list">
<li><label for="dungeon-hp"></label><input id="dungeon-hp" type="number" min=0 step=1 value=1 /></li>
<li><label for="dungeon-atk"></label><input id="dungeon-atk" type="number" min=0 step=1 value=1 /></li>
<li><label for="dungeon-rcv"></label><input id="dungeon-rcv" type="number" min=0 step=1 value=1 /></li>
</ul>
</div>
<div class="dialog-control"><button class="dialog-clear brown-button"></button><button class="dialog-confirm brown-button"></button></div>
</div>
</body>
</html>

View File

@ -371,12 +371,12 @@ icon.type
{
display:inline-block;
width:32px;height:32px;
vertical-align: middle;
vertical-align: middle;
background-repeat: no-repeat;
}
/*觉醒*/
.awoken-icon{
background-image: url(images/awoken.png);
background-image: url(images/awoken.png);
background-position-x: 0;
}
.awoken-icon[data-awoken-icon='0']{/*问号*/
@ -701,8 +701,8 @@ icon.type
/*潜在觉醒*/
.latent-icon{
display:inline-block;
background: rgba(33,28,21,0.5);
border: 2px ridge rgba(82,82,60,0.5);
background: rgba(33,28,21,0.5);
border: 2px ridge rgba(82,82,60,0.5);
border-radius: 5px;
box-sizing: border-box;
box-shadow:inset 0 2px 1px -1px rgba(0,0,0,0.5);
@ -915,7 +915,7 @@ icon.type
.badge::before{
content: "";
display: inline-block;
vertical-align: middle;
vertical-align: middle;
background-repeat: no-repeat;
background-image: url(images/badge.png);
width: 36px; height: 30px;

287
style.css
View File

@ -749,7 +749,7 @@ icon.poison-no-effect::after,
.hp-range-table th::before
{
content: " ";
background-size: cover;
background-size: cover;
display: inline-block;
width: 20px;
height: 20px;
@ -857,19 +857,19 @@ icon.poison-no-effect::after,
display: none;
}
.tIf-total-move.fixed-move-time{
position: relative;
position: relative;
}
.tIf-total-move.fixed-move-time::after {
content: " ";
display: inline-block;
width: 32px;
height: 32px;
background-image: url(images/latent.png);
background-image: url(images/latent.png);
background-position-x: -32px;
transform: scale(0.5);
position: absolute;
left: 0;
top: 0;
position: absolute;
left: 0;
top: 0;
}
@keyframes hidden-visible-animate{
@ -883,9 +883,9 @@ icon.poison-no-effect::after,
icon.poison-no-effect::after
{
background-image: url(images/icon-bind.png);
position: absolute;
left: 0;
top: 0;
position: absolute;
left: 0;
top: 0;
animation: hidden-visible-animate 0.5s infinite ease-in alternate;
}
/*单人时的协力觉醒和多人时的掉落觉醒显示无效*/
@ -1530,11 +1530,16 @@ icon.inflicts::after
{
display: inline-block;
}
.types-div .type-list input+label
.types-div .type-list input+label,
.sawoken-div .sawoken-ul input+label,
.dialog-dungeon-enchance input[type="checkbox"]+label
{
opacity: var(--search-icon-unchecked);
cursor: pointer;
}
.types-div .type-list input:checked+label
.types-div .type-list input:checked+label,
.sawoken-div .sawoken-ul input:checked+label,
.dialog-dungeon-enchance input[type="checkbox"]:checked+label
{
opacity: 1;
}
@ -1654,10 +1659,10 @@ icon.inflicts::after
.search-box .awoken-option .selected-awokens{
min-height: 32px;
box-sizing: border-box;
width: calc(100% - 90px);
min-width: 320px;
background-color: #00000044;
border-radius: 6px;
width: calc(100% - 90px);
min-width: 320px;
background-color: #00000044;
border-radius: 6px;
box-shadow: inset black 0 0 3px;
display: inline-block;
vertical-align: top;
@ -1821,12 +1826,7 @@ icon.inflicts::after
/*.search-box .sawoken-div::before{
content: "超觉醒";
}*/
.sawoken-div .sawoken-ul li label{
opacity: var(--search-icon-unchecked);
}
.sawoken-div .sawoken-ul input:checked+label{
opacity: 1;
}
.sawoken-div .sawoken-ul .awoken-count
{
margin-right: 5px;
@ -1869,7 +1869,7 @@ icon.inflicts::after
}
.search-box .search-list-length
{
float: right;
float: right;
}
.search-box .search-list-length[data-search-result-count="0"]
{
@ -2033,8 +2033,11 @@ icon.inflicts::after
/*选中的觉醒后面部分半透明,前面的不透明*/
.row-mon-awoken .awoken-number{display:none;}
.row-mon-awoken .awoken-number:checked~label
.row-mon-awoken input[type="radio"]
{
display: none;
}
.row-mon-awoken input[type="radio"]:checked~label
{
opacity: var(--search-icon-unchecked);
}
@ -2770,122 +2773,122 @@ table .orb-icon
}
.mask-content
{
text-align: center;
text-align: center;
}
.evo-box
{
display: inline-block;
text-align: left;
display: inline-block;
text-align: left;
}
.evo-panel,
.evo-panel-left,
.evo-panel-right
{
display: inline-block;
display: inline-block;
}
.mask-evolutionary-tree .evo-panel-left>.monster-head
{
display: inline-block;
display: inline-block;
}
.evo-materials>li
{
display: inline-block;
display: inline-block;
}
.mask-evolutionary-tree .evo-materials .monster
{
transform: scale(0.60);
margin: calc(-100px * (1 - 0.60) / 2);
transform: scale(0.60);
margin: calc(-100px * (1 - 0.60) / 2);
}
.mask-evolutionary-tree .evo-panel-left>.monster-head>.monster .id
{
bottom: 5px;
font-size: 20px;
bottom: 5px;
font-size: 20px;
}
.mask-evolutionary-tree .evo-materials .monster .id
{
bottom: 5px;
font-size: 22px;
bottom: 5px;
font-size: 22px;
}
.evo-panel
{
border:black 2px solid;
border-radius: 7px;
border:black 2px solid;
border-radius: 7px;
}
.evo-panel-left,
.evo-panel-right
{
border:#D19635 2px solid;
border-radius: 4px;
height: 100px;
vertical-align: top;
border:#D19635 2px solid;
border-radius: 4px;
height: 100px;
vertical-align: top;
}
.evo-panel-left
{
border-top-right-radius: unset;
border-bottom-right-radius: unset;
border-right: none;
background-image: linear-gradient(#A16928, #5F3D16);
padding: 0 2px;
text-align: center;
border-top-right-radius: unset;
border-bottom-right-radius: unset;
border-right: none;
background-image: linear-gradient(#A16928, #5F3D16);
padding: 0 2px;
text-align: center;
}
.evo-panel-right
{
border-top-left-radius: unset;
border-bottom-left-radius: unset;
border-left: none;
background-image: url(images/slate.svg);
background-size: 200px;
border-top-left-radius: unset;
border-bottom-left-radius: unset;
border-left: none;
background-image: url(images/slate.svg);
background-size: 200px;
}
.evo-panel-right .monster-name
{
font-family: var(--game-font-family);
font-size: 15px;
line-height: 15px;
background: #42341F;
border: 2px inset #F4F18E;
border-radius: 5px;
margin: 4px;
padding: 5px;
font-size: 15px;
line-height: 15px;
background: #42341F;
border: 2px inset #F4F18E;
border-radius: 5px;
margin: 4px;
padding: 5px;
}
.evo-materials
{
margin: 0 4px;
margin: 0 4px;
}
.evo-materials .null .monster
{
opacity: 0.5;
opacity: 0.5;
}
.evo-materials>li
{
margin: 1px;
margin: 1px;
}
.evo-subevo
{
padding-left: 35px;
padding-top: 5px;
padding-left: 35px;
padding-top: 5px;
}
.evo-subevo>li
{
position:relative;
position:relative;
}
.evo-subevo>li::before
{
content:' ';
position:absolute;
top:0;
left:-20px;
width:15px;
height:100%;
border-left:3px solid #E88230;
content:' ';
position:absolute;
top:0;
left:-20px;
width:15px;
height:100%;
border-left:3px solid #E88230;
}
.evo-subevo>li::after
{
content:' ';
position:absolute;
top:43px;
left:-10px;
content:' ';
position:absolute;
top:43px;
left:-10px;
width:0;
height:0;
border-top: 8px solid transparent;
@ -2894,33 +2897,33 @@ table .orb-icon
}
.evo-subevo>li:last-child::before
{
border-bottom: 3px solid #F3B750;
border-bottom-left-radius: 8px;
height:50px;
border-bottom: 3px solid #F3B750;
border-bottom-left-radius: 8px;
height:50px;
}
.evo-subevo>li:last-child>.evo-box::before
{
display: none;
display: none;
}
.evo-subevo>li>.evo-box::before
{
content:' ';
position:absolute;
top:50px;
left:-20px;
width:18px;
border:none;
border-top:3px solid #E88230;
content:' ';
position:absolute;
top:50px;
left:-20px;
width:18px;
border:none;
border-top:3px solid #E88230;
}
.evo-panel-left .evo-type
{
font-family: var(--game-font-family);
font-size: 15px;
line-height: 15px;
display: inline-block;
position: relative;
font-size: 15px;
line-height: 15px;
display: inline-block;
position: relative;
}
.evo-panel-left .evo-type::after
{
@ -2928,10 +2931,10 @@ table .orb-icon
background-clip: text;
color: transparent;
font-family: var(--game-font-family);
font-size: 15px;
line-height: 15px;
position: absolute;
left: 0;
font-size: 15px;
line-height: 15px;
position: absolute;
left: 0;
}
.evo-panel-left .evo-type::before
{
@ -2939,6 +2942,10 @@ table .orb-icon
-webkit-text-stroke: 3px black;
}
.control-box .btn-set-dungeon-enchance::before{
font-family: 'Font Awesome 5 Free';
font-weight: normal;
}
.control-box .btn-qrcode::before{
font-family: 'Font Awesome 5 Free';
font-weight: normal;
@ -2972,7 +2979,7 @@ table .orb-icon
}
.save-qr-box
{
padding-bottom: 10px;
padding-bottom: 10px;
}
.read-qr-box::before,
@ -3012,50 +3019,50 @@ table .orb-icon
/*.base .evo-type::before,
.base .evo-type::after
{
content: "基礎";
content: "基礎";
}
.evolution .evo-type::before,
.evolution .evo-type::after
{
content: "進化";
content: "進化";
}
.ult-evo .evo-type::before,
.ult-evo .evo-type::after
{
content: "究極進化";
content: "究極進化";
}
.reincarnation .evo-type::before,
.reincarnation .evo-type::after
{
content: "轉生進化";
content: "轉生進化";
}
.pixel-evo .evo-type::before,
.pixel-evo .evo-type::after
{
content: "像素進化";
font-family: "zpix";
font-weight: bold;
content: "像素進化";
font-family: "zpix";
font-weight: bold;
}
.assist-evo .evo-type::before,
.assist-evo .evo-type::after
{
content: "輔助進化";
content: "輔助進化";
}
.super-reincarnation .evo-type::before,
.super-reincarnation .evo-type::after
{
content: "超轉生進化";
content: "超轉生進化";
}
.super-ult-evo .evo-type::before,
.super-ult-evo .evo-type::after
{
content: "超究極進化";
content: "超究極進化";
}*/
.pixel-evo .evo-type::before,
.pixel-evo .evo-type::after
{
font-family: "zpix";
font-weight: bold;
font-family: "zpix";
font-weight: bold;
}
.base .evo-type::after
@ -3064,11 +3071,11 @@ table .orb-icon
}
.base
{
background-color: #DCB476;
background-color: #DCB476;
}
.base .evo-panel-right
{
border-color: #FDC686;
border-color: #FDC686;
}
.evolution .evo-type::after
{ /*進化*/
@ -3076,11 +3083,11 @@ table .orb-icon
}
.evolution
{
background-color: #C49669;
background-color: #C49669;
}
.evolution .evo-panel-right
{
border-color: #DEAA76;
border-color: #DEAA76;
}
.ult-evo .evo-type::after
{ /*究極進化*/
@ -3088,11 +3095,11 @@ table .orb-icon
}
.ult-evo
{
background-color: #DDD844;
background-color: #DDD844;
}
.ult-evo .evo-panel-right
{
border-color: #FEF84F;
border-color: #FEF84F;
}
.reincarnation .evo-type::after
{ /*轉生進化*/
@ -3100,11 +3107,11 @@ table .orb-icon
}
.reincarnation
{
background-color: #579889;
background-color: #579889;
}
.reincarnation .evo-panel-right
{
border-color: #78B89A;
border-color: #78B89A;
}
.pixel-evo .evo-type::after
{ /*像素進化*/
@ -3112,11 +3119,11 @@ table .orb-icon
}
.pixel-evo
{
background-color: #B1AB94;
background-color: #B1AB94;
}
.pixel-evo .evo-panel-right
{
border-color: #CBC4AA;
border-color: #CBC4AA;
}
.assist-evo .evo-type::after
{ /*輔助進化*/
@ -3124,11 +3131,11 @@ table .orb-icon
}
.assist-evo
{
background-color: #607F38;
background-color: #607F38;
}
.assist-evo .evo-panel-right
{
border-color: #6F9241;
border-color: #6F9241;
}
.super-reincarnation .evo-type::after
{ /*超轉生進化*/
@ -3136,11 +3143,11 @@ table .orb-icon
}
.super-reincarnation
{
background-color: #C15644;
background-color: #C15644;
}
.super-reincarnation .evo-panel-right
{
border-color: #DE634F;
border-color: #DE634F;
}
.super-ult-evo .evo-type::after
{ /*超究極進化*/
@ -3152,7 +3159,7 @@ table .orb-icon
}
.super-ult-evo .evo-panel-right
{
border-color: #DBE721;
border-color: #DBE721;
}
.evo-panel.henshin .evo-type::after,
.evo-panel.henshin-loop .evo-type::after
@ -3167,7 +3174,35 @@ table .orb-icon
.evo-panel.henshin .evo-panel-right,
.evo-panel.henshin-loop .evo-panel-right
{
border-color: #7F00FF;
border-color: #7F00FF;
}
.dialog-dungeon-enchance
{
margin-top: 100px;
margin-left: calc(50% - 270px);
}
.dialog-dungeon-enchance .attr-list>li,
.dialog-dungeon-enchance .type-list>li,
.dialog-dungeon-enchance .stats-list>li
{
display: inline-block;
}
.dialog-dungeon-enchance .stats-list input
{
width: 50px;
}
.dialog-dungeon-enchance .dialog-content>*
{
margin-top: 5px;
}
.dialog-dungeon-enchance .stats-list>li
{
margin-right: 5px;
}
.dialog-dungeon-enchance .dialog-control>button
{
margin-right: 5px;
}
.icon-skill,
@ -3182,7 +3217,7 @@ table .orb-icon
background-repeat: no-repeat;
}
.icon-skill,
.attr-list .attr,
.attrs-div .attr-list .attr,
.skill-datail-parsed icon.attr,
.skill-datail-parsed icon.orb,
.skill-datail-parsed icon.type,

View File

@ -57,6 +57,7 @@ var formation = new Formation(teamsCount,6);
<a class="down-capture display-none" target="_blank"></a>
<button class="btn-solo-link" onclick="turnPage(1,arguments[0]);"></button>
<button class="btn-multi-link" onclick="turnPage(2,arguments[0]);"></button>
<button class="btn-set-dungeon-enchance"></button>
<button class="btn-swap-ABC-team" onclick="swapABCteam();"></button>
<a class="help-link" target="_blank" href="https://github.com/Mapaler/PADDashFormation/blob/master/help.md"></a>
</div>
@ -1949,7 +1950,7 @@ var formation = new Formation(teamsCount,6);
<line />
</g>
</svg>
<div id="qr-code-frame" class="mask display-none">
<div id="qr-code-frame" class="mask display-none">
<button class="mask-close brown-button"></button>
<div class="mask-content">
<div class="read-qr-box">
@ -1979,5 +1980,38 @@ var formation = new Formation(teamsCount,6);
</div>
</div>
</div>
<div class="dialog dialog-dungeon-enchance display-none">
<div class="dialog-title"></div>
<div class="dialog-content">
<ul class="attr-list">
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="0" id="dungeon-attr-0" /><label class="attr" data-attr-icon="0" for="dungeon-attr-0"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="1" id="dungeon-attr-1" /><label class="attr" data-attr-icon="1" for="dungeon-attr-1"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="2" id="dungeon-attr-2" /><label class="attr" data-attr-icon="2" for="dungeon-attr-2"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="3" id="dungeon-attr-3" /><label class="attr" data-attr-icon="3" for="dungeon-attr-3"></label></li><!---->
<li><input type="checkbox" class="attr-check" name="dungeon-attrs" value="4" id="dungeon-attr-4" /><label class="attr" data-attr-icon="4" for="dungeon-attr-4"></label></li><!---->
</ul>
<ul class="type-list">
<li><input type="checkbox" class="type-check" name="dungeon-types" value="4" id="dungeon-type-4" /><label class="type-icon" data-type-icon="4" for="dungeon-type-4"><!----></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="5" id="dungeon-type-5" /><label class="type-icon" data-type-icon="5" for="dungeon-type-5"><!----></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="7" id="dungeon-type-7" /><label class="type-icon" data-type-icon="7" for="dungeon-type-7"><!--惡魔--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="8" id="dungeon-type-8" /><label class="type-icon" data-type-icon="8" for="dungeon-type-8"><!--机械--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="1" id="dungeon-type-1" /><label class="type-icon" data-type-icon="1" for="dungeon-type-1"><!--平衡--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="6" id="dungeon-type-6" /><label class="type-icon" data-type-icon="6" for="dungeon-type-6"><!--攻撃--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="2" id="dungeon-type-2" /><label class="type-icon" data-type-icon="2" for="dungeon-type-2"><!--体力--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="3" id="dungeon-type-3" /><label class="type-icon" data-type-icon="3" for="dungeon-type-3"><!--回復--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="0" id="dungeon-type-0" /><label class="type-icon" data-type-icon="0" for="dungeon-type-0"><!--進化用--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="12" id="dungeon-type-12" /><label class="type-icon" data-type-icon="12" for="dungeon-type-12"><!--能力覺醒用--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="14" id="dungeon-type-14" /><label class="type-icon" data-type-icon="14" for="dungeon-type-14"><!--強化合成用--></label></li>
<li><input type="checkbox" class="type-check" name="dungeon-types" value="15" id="dungeon-type-15" /><label class="type-icon" data-type-icon="15" for="dungeon-type-15"><!--販賣用--></label></li>
</ul>
<ul class="stats-list">
<li><label for="dungeon-hp"></label><input id="dungeon-hp" type="number" min=0 step=1 value=1 /></li>
<li><label for="dungeon-atk"></label><input id="dungeon-atk" type="number" min=0 step=1 value=1 /></li>
<li><label for="dungeon-rcv"></label><input id="dungeon-rcv" type="number" min=0 step=1 value=1 /></li>
</ul>
</div>
<div class="dialog-control"><button class="dialog-clear brown-button"></button><button class="dialog-confirm brown-button"></button></div>
</div>
</body>
</html>