增加地下城强化设定
This commit is contained in:
parent
a98788691e
commit
238e3a2cf7
|
@ -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:";
|
||||
}
|
|
@ -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);
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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: "強化倍率:";
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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: "배율을 강화합니다:";
|
||||
}
|
|
@ -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);
|
|
@ -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}`
|
||||
},
|
||||
];
|
|
@ -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) {
|
||||
/*num是输入的数字,2的N次方在2进制下表示1后面跟着N个0。
|
||||
如果num和2的N次方同时存在某位1,则返回这个数,逻辑上转换为true。
|
||||
filter就可以返回所有有这个数的数据*/
|
||||
/*以珠子名称为例,num是输入的数字,比如10进制465转二进制=>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) {
|
||||
/*num是输入的数字,2的N次方在2进制下表示1后面跟着N个0。
|
||||
如果num和2的N次方同时存在某位1,则返回这个数,逻辑上转换为true。
|
||||
filter就可以返回所有有这个数的数据*/
|
||||
/*以珠子名称为例,num是输入的数字,比如10进制465转二进制=>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)}秒`;
|
||||
|
|
|
@ -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: "強化倍率:";
|
||||
}
|
|
@ -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{
|
||||
|
|
|
@ -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: "強化倍率:";
|
||||
}
|
36
multi.html
36
multi.html
|
@ -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>
|
||||
|
|
|
@ -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的徽章对应数字
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
145
script.js
|
@ -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
|
||||
{
|
||||
|
|
36
solo.html
36
solo.html
|
@ -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>
|
||||
|
|
|
@ -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
287
style.css
|
@ -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,
|
||||
|
|
36
triple.html
36
triple.html
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue