实现显示技能原文和技能合并
This commit is contained in:
parent
850f3650e0
commit
42c1a09551
|
@ -149,6 +149,12 @@
|
|||
{
|
||||
content: "Leader Skill";
|
||||
}
|
||||
label[for="show-skill-original"]::after{
|
||||
content: "Skill Original";
|
||||
}
|
||||
label[for="merge-skill"]::after{
|
||||
content: "Merge Skill";
|
||||
}
|
||||
|
||||
.edit-box .button-box .button-null::after{
|
||||
content: "Leave a blank";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
localTranslating = {
|
||||
const _localTranslating = {
|
||||
webpage_title: `P&D ${teamsCount}P Formation Maker`,
|
||||
addition_display: "Additional display",
|
||||
title_blank: "Input Formation Title",
|
||||
|
@ -22,7 +22,7 @@
|
|||
sort_abilityIndex_awoken: "Maximum Weighted Ability Index (+Awakening)",
|
||||
},
|
||||
force_reload_data: `Force refresh data`,
|
||||
skill_parse: {
|
||||
/*skill_parse: {
|
||||
skill: {
|
||||
unknown: ()=>`Unknown skill type.`,
|
||||
active_turns: (turns, activeElement)=> [activeElement,`, for ${turns} turns.`],
|
||||
|
@ -62,7 +62,7 @@
|
|||
unit: {
|
||||
seconds : `sec`,
|
||||
},
|
||||
},
|
||||
},*/
|
||||
}
|
||||
|
||||
deepMerge(localTranslating, _localTranslating);
|
||||
localisation(localTranslating);
|
|
@ -147,6 +147,12 @@
|
|||
{
|
||||
content: "リーダースキル";
|
||||
}
|
||||
label[for="show-skill-original"]::after{
|
||||
content: "スキルの原文";
|
||||
}
|
||||
label[for="merge-skill"]::after{
|
||||
content: "スキルのマージ";
|
||||
}
|
||||
|
||||
.edit-box .button-box .button-null::after{
|
||||
content: "空白のままに";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
localTranslating = {
|
||||
const _localTranslating = {
|
||||
webpage_title: `パズル&ドラゴンズ${teamsCount}人のチーム図作成ツール`,
|
||||
addition_display: "追加の表示",
|
||||
title_blank: "入力タイトル",
|
||||
|
@ -24,6 +24,8 @@
|
|||
},
|
||||
force_reload_data: "データの強制更新",
|
||||
}
|
||||
deepMerge(localTranslating, _localTranslating);
|
||||
localisation(localTranslating);
|
||||
|
||||
//大数字缩短长度
|
||||
Number.prototype.bigNumberToString = function()
|
||||
|
|
|
@ -144,6 +144,12 @@
|
|||
{
|
||||
content: "리더스킬";
|
||||
}
|
||||
label[for="show-skill-original"]::after{
|
||||
content: "기술 원본";
|
||||
}
|
||||
label[for="merge-skill"]::after{
|
||||
content: "기술 병합";
|
||||
}
|
||||
|
||||
.edit-box .button-box .button-null::after{
|
||||
content: "비워 둡니다";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
localTranslating = {
|
||||
const _localTranslating = {
|
||||
webpage_title: `퍼즐앤드래곤 ${teamsCount} 명의 팀 다이어그램 작성 도구`,
|
||||
addition_display: "추가 표시입니다",
|
||||
title_blank: "입력 제목",
|
||||
|
@ -24,5 +24,5 @@
|
|||
},
|
||||
force_reload_data: "데이터 강제 새로 고침",
|
||||
}
|
||||
|
||||
deepMerge(localTranslating, _localTranslating);
|
||||
localisation(localTranslating);
|
|
@ -1,233 +1,5 @@
|
|||
localTranslating = {
|
||||
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: {
|
||||
unknown: tp`未知的技能类型:${'type'}`, //type
|
||||
active_turns: tp`${'actionSkill'},效果 ${'turns'} 回合`, //turns, actionSkill
|
||||
random_skills: tp`随机发动以下技能:${'skills'}`, //skills
|
||||
damage_enemy: tp`对${'target'}造成${'damage'}的${'attr'}伤害`, //target, damage, attr
|
||||
vampire: tp`对${'target'}造成${'damage'}的${'attr'}伤害,并${'icon'}回复伤害值${'heal'}的HP`, //target, damage, attr
|
||||
delay: tp`${'icon'}延迟敌人的攻击`, //icon
|
||||
mass_attack: tp`所有攻击变为${'icon'}全体攻击`,
|
||||
leader_change: tp`${'icon'}将${'target'}换为队长,再次使用则换回来`,
|
||||
no_skyfall: tp`${'icon'}天降的宝珠不会消除`,
|
||||
self_harm: tp`${'icon'}${'stats'}减少${'value'}`,
|
||||
heal: tp`${'icon'}回复 ${'value'} 的 ${'stats'}`,
|
||||
unbind_normal: tp`${'icon'}封锁状态减少${'turns'}`,
|
||||
unbind_awakenings: tp`${'icon'}觉醒无效状态减少${'turns'}回合`,
|
||||
unbind_matches: tp`${'icon'}无法消除宝珠状态减少${'turns'}回合`,
|
||||
bind_skill: tp`${'icon'}自身无法使用技能`,
|
||||
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: tp`${'icon'}消除宝珠的回合,回复${'belong_to'}${'value'}的${'stats'}`,
|
||||
ctw: tp`${'icon'}${'value'}内时间停止,可以任意移动宝珠`,
|
||||
gravity: tp`${'icon'}造成${'target'}${'value'}的伤害`,
|
||||
resolve: tp`${'icon'}如${'stats'}≧${'value'},受到单一次致命攻击时,${'prob'}将会以1点 HP 生还`,
|
||||
board_change: tp`全画面的宝珠变为${'orbs'}`,
|
||||
skill_boost: tp`自身以外成员的技能冷却储备${'icon'}${'turns'}`,
|
||||
add_combo: tp`结算时连击数增加${'value'}${'icon'}`,
|
||||
fixed_time: tp`【${'icon'}操作时间固定${'value'}】`,
|
||||
min_match_length: tp`【限定≥${'value'}珠才能消除】`,
|
||||
drop_refresh: tp`全板刷新`,
|
||||
drum: tp`宝珠移动和消除的声音变成太鼓达人的音效`,
|
||||
auto_path: tp`显示3连击的转珠路径(只适用于普通地下城)`,
|
||||
board7x6: tp`【${'icon'}7×6版面】`,
|
||||
counter_attack: tp`受到${'target'}攻击时,${'prob'}进行受到伤害${'value'}的${'attr'}${'icon'}反击`,
|
||||
change_orbs: tp`${'from'}→${'to'}`,
|
||||
generate_orbs: tp`${'exclude'}生成${'orbs'}各${'value'}个`,
|
||||
fixed_orbs: tp`在${'position'}产生${'orbs'}`,
|
||||
orb_drop_increase: tp`${'orbs'}的掉落率提高到${'value'}`,
|
||||
orb_drop_increase_flag: tp`${'value'}掉落${'flag'}${'orbs'}`,
|
||||
attr_absorb: tp`${'icon'}属性吸收`,
|
||||
combo_absorb: tp`${'icon'}连击吸收`,
|
||||
damage_absorb: tp`${'icon'}伤害吸收`,
|
||||
damage_void: tp`${'icon'}伤害无效`,
|
||||
void_enemy_buff: tp`敌人的 ${'buff'} 无效化`,
|
||||
change_attribute: tp`将${'target'}变为${'attrs'}`,
|
||||
set_orb_state_enhanced: tp`${'icon'}强化${'orbs'}(每颗宝珠效力增加${'value'})`,
|
||||
set_orb_state_locked: tp`将${'orbs'}${'icon'}锁定${'value'}`,
|
||||
set_orb_state_unlocked: tp`${'icon'}解除所有宝珠的锁定状态`,
|
||||
set_orb_state_bound: tp`无法消除${'orbs'}`,
|
||||
rate_multiply: tp`作为队长进入地下城时,${'rate'}变为${'value'}`,
|
||||
rate_multiply_drop: tp`${'icon'}怪物蛋掉落率`,
|
||||
rate_multiply_coin: tp`${'icon'}金币掉落率`,
|
||||
rate_multiply_exp: tp`${'icon'}等级经验倍率`,
|
||||
reduce_damage: tp`${'condition'}受到的${'attrs'}伤害${'icon'}减少${'value'}`,
|
||||
power_up: tp`${'condition'}${'targets'}${'value'}${'reduceDamage'}${'addCombo'}${'followAttack'}`,
|
||||
henshin: tp`变身为${'card'}`,
|
||||
void_poison: tp`消除${'poison'}时不会受到毒伤害`,
|
||||
skill_proviso: tp`${'condition'}才能发动后续效果`,
|
||||
},
|
||||
power: {
|
||||
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'}`,
|
||||
scale_combos_bonus: tp`,每多1连击${'bonus'},最大${'max'}连击时${'stats_max'}`,
|
||||
scale_match_attrs: tp`${'matches'}中${'min'}串匹配时${'stats'}${'bonus'}`,
|
||||
scale_match_attrs_bonus: tp`,每多1串${'bonus'},最大${'max'}串时${'stats_max'}`,
|
||||
scale_match_length: tp`${'in_once'}相连消除${'min'}个${'orbs'}时${'stats'}${'bonus'}`,
|
||||
scale_match_length_bonus: tp`,每多1个${'bonus'},最大${'max'}个时${'stats_max'}`,
|
||||
scale_cross: tp`每以十字形式消除5个${'orbs'}时${'stats'}`,
|
||||
scale_cross_single: tp`以十字形式消除5个${'orbs'}时${'stats'}`,
|
||||
scale_state_kind_count: tp`以队伍中${'awakenings'}${'attrs'}${'types'}的数量提升,每个${'stats'}`,
|
||||
},
|
||||
cond: {
|
||||
unknown: tp`[ 未知条件 ]`,
|
||||
hp_equal: tp`${'hp'} == ${'min'} 时`,
|
||||
hp_less_or_equal: tp`${'hp'} ≤ ${'max'} 时`,
|
||||
hp_greater_or_equal: tp`${'hp'} ≥ ${'min'} 时`,
|
||||
hp_belong_to_range: tp`${'hp'} ∈ [${'min'},${'max'}] 时`,
|
||||
use_skill: tp`使用技能时`,
|
||||
multi_player: tp`协力时`,
|
||||
remain_orbs: tp`剩余宝珠 ≤ ${'value'} 时`,
|
||||
exact_combo: tp`刚好${'value'}连击时`,
|
||||
exact_match_length: tp`相连消除刚好${'value'}${'orbs'}时`,
|
||||
exact_match_enhanced: tp`并且其中包含至少一个强化宝珠`,
|
||||
|
||||
compo_type_card: tp`队伍中同时存在 ${'ids'} 时`,
|
||||
compo_type_series: tp`队员组成全为 ${'ids'} 合作时`,
|
||||
compo_type_evolution: tp`队员组成全为 ${'ids'} 进化时`,
|
||||
|
||||
L_shape: tp`以L字形式消除5个${'orbs'}时`,
|
||||
heal: tp`以${'orbs'}回复${'heal'}时`,
|
||||
},
|
||||
position: {
|
||||
top: tp`上方第${'pos'}横行`,
|
||||
bottom: tp`下方第${'pos'}横行`,
|
||||
left: tp`左方第${'pos'}竖列`,
|
||||
right: tp`右方第${'pos'}竖列`,
|
||||
shape: tp`指定位置`,
|
||||
},
|
||||
value: {
|
||||
unknown: tp`[ 未知数值: ${'type'}]`, //type
|
||||
const: tp`${'value'}${'unit'}`,
|
||||
const_to: tp`到${'value'}`,
|
||||
mul_percent: tp`${'value'}%`,
|
||||
mul_times: tp`×${'value'}倍`,
|
||||
mul_of_percent: tp`${'stats'}的${'value'}%`,
|
||||
mul_of_times: tp`${'stats'}×${'value'}倍`,
|
||||
hp_scale: tp`${'hp'}为100%时${'min'},${'hp'}为1时${'max'}`,
|
||||
random_atk: tp`${'atk'}×${'min'}${'max'}倍`,
|
||||
prob: tp`有${'value'}几率`,
|
||||
x_awakenings: tp`${'awakenings'}数量×${'value'}`,
|
||||
},
|
||||
target: {
|
||||
self: tp`发动者自身`,
|
||||
enemy: tp`敌人`,
|
||||
team: tp`队伍`,
|
||||
team_last: tp`队伍最后一位队员`,
|
||||
enemy_all: tp`敌方全体`,
|
||||
enemy_one: tp`敌方1体`,
|
||||
enemy_attr: tp`${'attr'}敌人`,
|
||||
},
|
||||
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`队伍回复力`,
|
||||
},
|
||||
unit: {
|
||||
unit: tp`个`,
|
||||
seconds: tp`秒`,
|
||||
point: tp`点`,
|
||||
turns: tp`回合`,
|
||||
},
|
||||
word: {
|
||||
comma: tp`,`, //逗号
|
||||
slight_pause: tp`、`, //顿号
|
||||
range_hyphen: tp`~`, //范围连字符
|
||||
in_once: tp`同时`,
|
||||
evo_type_pixel: tp`像素进化`,
|
||||
evo_type_reincarnation: tp`转生或超转生进化`,
|
||||
evo_type_unknow: tp`未知进化`,
|
||||
affix_attr: tp`${'cotent'}属性`, //词缀-属性
|
||||
affix_orb: tp`${'cotent'}宝珠`, //词缀-宝珠
|
||||
affix_type: tp`${'cotent'}类型`, //词缀-类型
|
||||
affix_awakening: tp`${'cotent'}觉醒`, //词缀-觉醒
|
||||
affix_exclude: tp`${'cotent'}以外`, //词缀-属性
|
||||
},
|
||||
attrs: {
|
||||
[0]: tp`${'icon'}火`,
|
||||
[1]: tp`${'icon'}水`,
|
||||
[2]: tp`${'icon'}木`,
|
||||
[3]: tp`${'icon'}光`,
|
||||
[4]: tp`${'icon'}暗`,
|
||||
[5]: tp`${'icon'}回复`,
|
||||
[6]: tp`${'icon'}空`,
|
||||
all: tp`所有`,
|
||||
self: tp`${'icon'}自身属性`,
|
||||
fixed: tp`${'icon'}无视防御固定`,
|
||||
},
|
||||
types: {
|
||||
[0]: tp`${'icon'}进化用`,
|
||||
[1]: tp`${'icon'}平衡`,
|
||||
[2]: tp`${'icon'}体力`,
|
||||
[3]: tp`${'icon'}回复`,
|
||||
[4]: tp`${'icon'}龙`,
|
||||
[5]: tp`${'icon'}神`,
|
||||
[6]: tp`${'icon'}攻击`,
|
||||
[7]: tp`${'icon'}恶魔`,
|
||||
[8]: tp`${'icon'}机械`,
|
||||
[9]: tp`${'icon'}特别保护`,
|
||||
[12]: tp`${'icon'}能力觉醒用`,
|
||||
[14]: tp`${'icon'}强化合成用`,
|
||||
[15]: tp`${'icon'}贩卖用`,
|
||||
},
|
||||
orbs: {
|
||||
[0]: tp`${'icon'}火`,
|
||||
[1]: tp`${'icon'}水`,
|
||||
[2]: tp`${'icon'}木`,
|
||||
[3]: tp`${'icon'}光`,
|
||||
[4]: tp`${'icon'}暗`,
|
||||
[5]: tp`${'icon'}回复`,
|
||||
[6]: tp`${'icon'}干扰`,
|
||||
[7]: tp`${'icon'}毒`,
|
||||
[8]: tp`${'icon'}剧毒`,
|
||||
[9]: tp`${'icon'}炸弹`,
|
||||
enhanced: tp`${'icon'}强化`,
|
||||
locked: tp`${'icon'}锁定`,
|
||||
nail: tp`${'icon'}钉子`,
|
||||
variation: tp`${'icon'}变换珠(每${'time'}秒变换)`,
|
||||
_5color: tp`${'icon'}5色`,
|
||||
_6color: tp`${'_5color'}+${'orb_rcv'}`,
|
||||
all: tp`所有`,
|
||||
any: tp`任何${'cotent'}`,
|
||||
},
|
||||
},
|
||||
}
|
||||
//const _localTranslating = {};
|
||||
//deepMerge(localTranslating, _localTranslating);
|
||||
localisation(localTranslating);
|
||||
|
||||
//大数字缩短长度
|
||||
|
@ -273,21 +45,6 @@ showSearch(result.map(o=>o.card).filter(c=>c));
|
|||
console.table(result);
|
||||
*/
|
||||
|
||||
//返回flag里值为true的数组,如[1,4,7]
|
||||
function flags(num) {
|
||||
/*
|
||||
return Array.from(new Array(32),(i,n)=>n).filter(n => num & (1 << n)); //性能太差
|
||||
return new Array(32).fill(null).map((i,n)=>n).filter(n => num & (1 << n)); //性能比上者好,但还是不够快
|
||||
*/
|
||||
const arr = [];
|
||||
for (let i = 0; i < 32; i++) {
|
||||
if (num & (1 << i)) {
|
||||
arr.push(i);
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
//按住Ctrl点击技能在控制台输出技能的对象
|
||||
function fastShowSkill(event) {
|
||||
if (event.ctrlKey) {
|
||||
|
|
|
@ -147,6 +147,12 @@
|
|||
{
|
||||
content: "隊長技能";
|
||||
}
|
||||
label[for="show-skill-original"]::after{
|
||||
content: "技能原文";
|
||||
}
|
||||
label[for="merge-skill"]::after{
|
||||
content: "合并技能";
|
||||
}
|
||||
|
||||
.edit-box .button-box .button-null::after{
|
||||
content: "留空格子";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
localTranslating = {
|
||||
const _localTranslating = {
|
||||
webpage_title: `龍族拼圖${teamsCount}人隊伍圖製作工具`,
|
||||
addition_display: "附加顯示",
|
||||
title_blank: "輸入隊伍標題",
|
||||
|
@ -23,7 +23,9 @@
|
|||
sort_abilityIndex_awoken: "最大加權能力指數(+覺醒)",
|
||||
},
|
||||
force_reload_data: "強制刷新數據",
|
||||
}
|
||||
};
|
||||
deepMerge(localTranslating, _localTranslating);
|
||||
localisation(localTranslating);
|
||||
|
||||
//大數字縮短長度
|
||||
Number.prototype.bigNumberToString = function()
|
||||
|
@ -54,6 +56,4 @@ Number.prototype.bigNumberToString = function()
|
|||
outStr = outStr.replace(/(^零+|零+$)/g,''); //去除開頭的零
|
||||
outStr = outStr.replace(/零{2,}/g,'零'); //去除多個連續的零
|
||||
return outStr;
|
||||
}
|
||||
|
||||
localisation(localTranslating);
|
||||
}
|
|
@ -146,6 +146,12 @@
|
|||
{
|
||||
content: "隊長技能";
|
||||
}
|
||||
label[for="show-skill-original"]::after{
|
||||
content: "技能原文";
|
||||
}
|
||||
label[for="merge-skill"]::after{
|
||||
content: "合并技能";
|
||||
}
|
||||
|
||||
.edit-box .button-box .button-null::after{
|
||||
content: "留空格子";
|
||||
|
|
|
@ -1,26 +1,2 @@
|
|||
localTranslating = {
|
||||
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: "强制刷新数据",
|
||||
}
|
||||
|
||||
localisation(localTranslating);
|
|
@ -1128,7 +1128,12 @@ var formation = new Formation(teamsCount,5);
|
|||
<div class="setting-row row-mon-leader-skill">
|
||||
<!--怪物队长技能-->
|
||||
<div class="skill-box">
|
||||
<div class="skill-title"><div class="type-title"></div><span class="skill-name"></span></div>
|
||||
<div class="skill-title"><div class="type-title"></div><span class="skill-name"></span>
|
||||
<div class="skill-parse-control">
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="show-skill-original" id="show-skill-original"><label class="config-checkbox-lbl" for="show-skill-original"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="merge-skill" id="merge-skill"><label class="config-checkbox-lbl" for="merge-skill"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="skill-datail-original"></div>
|
||||
<div class="skill-datail-parsed"></div>
|
||||
</div>
|
||||
|
|
|
@ -12,6 +12,239 @@
|
|||
source:"퍼즐앤드래곤"
|
||||
},
|
||||
];
|
||||
let localTranslating = {
|
||||
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: {
|
||||
unknown: tp`未知的技能类型:${'type'}`, //type
|
||||
active_turns: tp`${'actionSkill'},效果 ${'turns'} 回合`, //turns, actionSkill
|
||||
random_skills: tp`随机发动以下技能:${'skills'}`, //skills
|
||||
damage_enemy: tp`对${'target'}造成${'damage'}的${'attr'}伤害${'times'}${'totalDamage'}`, //target, damage, attr
|
||||
damage_enemy_count: tp`(共${'damage'})`,
|
||||
vampire: tp`对${'target'}造成${'damage'}的${'attr'}伤害,并${'icon'}回复伤害值${'heal'}的HP`, //target, damage, attr
|
||||
delay: tp`${'icon'}延迟敌人的攻击`, //icon
|
||||
mass_attack: tp`所有攻击变为${'icon'}全体攻击`,
|
||||
leader_change: tp`${'icon'}将${'target'}换为队长,再次使用则换回来`,
|
||||
no_skyfall: tp`${'icon'}天降的宝珠不会消除`,
|
||||
self_harm: tp`${'icon'}${'stats'}减少${'value'}`,
|
||||
heal: tp`${'icon'}回复 ${'value'} 的 ${'stats'}`,
|
||||
unbind_normal: tp`${'icon'}封锁状态减少${'turns'}`,
|
||||
unbind_awakenings: tp`${'icon'}觉醒无效状态减少${'turns'}回合`,
|
||||
unbind_matches: tp`${'icon'}无法消除宝珠状态减少${'turns'}回合`,
|
||||
bind_skill: tp`${'icon'}自身无法使用技能`,
|
||||
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: tp`${'icon'}消除宝珠的回合,回复${'belong_to'}${'value'}的${'stats'}`,
|
||||
ctw: tp`${'icon'}${'value'}内时间停止,可以任意移动宝珠`,
|
||||
gravity: tp`${'icon'}造成${'target'}${'value'}的伤害`,
|
||||
resolve: tp`${'icon'}如${'stats'}≧${'value'},受到单一次致命攻击时,${'prob'}将会以1点 HP 生还`,
|
||||
board_change: tp`全画面的宝珠变为${'orbs'}`,
|
||||
skill_boost: tp`自身以外成员的技能冷却储备${'icon'}${'turns'}`,
|
||||
add_combo: tp`结算时连击数增加${'value'}${'icon'}`,
|
||||
fixed_time: tp`【${'icon'}操作时间固定${'value'}】`,
|
||||
min_match_length: tp`【限定≥${'value'}珠才能消除】`,
|
||||
drop_refresh: tp`全板刷新`,
|
||||
drum: tp`宝珠移动和消除的声音变成太鼓达人的音效`,
|
||||
auto_path: tp`显示3连击的转珠路径(只适用于普通地下城)`,
|
||||
board7x6: tp`【${'icon'}7×6版面】`,
|
||||
counter_attack: tp`受到${'target'}攻击时,${'prob'}进行受到伤害${'value'}的${'attr'}${'icon'}反击`,
|
||||
change_orbs: tp`${'from'}→${'to'}`,
|
||||
generate_orbs: tp`${'exclude'}生成${'orbs'}各${'value'}个`,
|
||||
fixed_orbs: tp`在${'position'}产生${'orbs'}`,
|
||||
orb_drop_increase: tp`${'orbs'}的掉落率提高到${'value'}`,
|
||||
orb_drop_increase_flag: tp`${'value'}掉落${'flag'}${'orbs'}`,
|
||||
attr_absorb: tp`${'icon'}属性吸收`,
|
||||
combo_absorb: tp`${'icon'}连击吸收`,
|
||||
damage_absorb: tp`${'icon'}伤害吸收`,
|
||||
damage_void: tp`${'icon'}伤害无效`,
|
||||
void_enemy_buff: tp`敌人的 ${'buff'} 无效化`,
|
||||
change_attribute: tp`将${'target'}变为${'attrs'}`,
|
||||
set_orb_state_enhanced: tp`${'icon'}强化${'orbs'}(每颗宝珠效力增加${'value'})`,
|
||||
set_orb_state_locked: tp`将${'orbs'}${'icon'}锁定${'value'}`,
|
||||
set_orb_state_unlocked: tp`${'icon'}解除所有宝珠的锁定状态`,
|
||||
set_orb_state_bound: tp`无法消除${'orbs'}`,
|
||||
rate_multiply: tp`作为队长进入地下城时,${'rate'}变为${'value'}`,
|
||||
rate_multiply_drop: tp`${'icon'}怪物蛋掉落率`,
|
||||
rate_multiply_coin: tp`${'icon'}金币掉落率`,
|
||||
rate_multiply_exp: tp`${'icon'}等级经验倍率`,
|
||||
reduce_damage: tp`${'condition'}受到的${'attrs'}伤害${'icon'}减少${'value'}`,
|
||||
power_up: tp`${'condition'}${'targets'}${'value'}${'reduceDamage'}${'addCombo'}${'followAttack'}`,
|
||||
henshin: tp`变身为${'card'}`,
|
||||
void_poison: tp`消除${'poison'}时不会受到毒伤害`,
|
||||
skill_proviso: tp`${'condition'}才能发动后续效果`,
|
||||
},
|
||||
power: {
|
||||
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'}`,
|
||||
scale_combos_bonus: tp`,每多1连击${'bonus'},最大${'max'}连击时${'stats_max'}`,
|
||||
scale_match_attrs: tp`${'matches'}中${'min'}串匹配时${'stats'}${'bonus'}`,
|
||||
scale_match_attrs_bonus: tp`,每多1串${'bonus'},最大${'max'}串时${'stats_max'}`,
|
||||
scale_match_length: tp`${'in_once'}相连消除${'min'}个${'orbs'}时${'stats'}${'bonus'}`,
|
||||
scale_match_length_bonus: tp`,每多1个${'bonus'},最大${'max'}个时${'stats_max'}`,
|
||||
scale_cross: tp`每以十字形式消除5个${'orbs'}时${'stats'}`,
|
||||
scale_cross_single: tp`以十字形式消除5个${'orbs'}时${'stats'}`,
|
||||
scale_state_kind_count: tp`以队伍中${'awakenings'}${'attrs'}${'types'}的数量提升,每个${'stats'}`,
|
||||
},
|
||||
cond: {
|
||||
unknown: tp`[ 未知条件 ]`,
|
||||
hp_equal: tp`${'hp'} == ${'min'} 时`,
|
||||
hp_less_or_equal: tp`${'hp'} ≤ ${'max'} 时`,
|
||||
hp_greater_or_equal: tp`${'hp'} ≥ ${'min'} 时`,
|
||||
hp_belong_to_range: tp`${'hp'} ∈ [${'min'},${'max'}] 时`,
|
||||
use_skill: tp`使用技能时`,
|
||||
multi_player: tp`协力时`,
|
||||
remain_orbs: tp`剩余宝珠 ≤ ${'value'} 时`,
|
||||
exact_combo: tp`刚好${'value'}连击时`,
|
||||
exact_match_length: tp`相连消除刚好${'value'}${'orbs'}时`,
|
||||
exact_match_enhanced: tp`并且其中包含至少一个强化宝珠`,
|
||||
|
||||
compo_type_card: tp`队伍中同时存在 ${'ids'} 时`,
|
||||
compo_type_series: tp`队员组成全为 ${'ids'} 合作时`,
|
||||
compo_type_evolution: tp`队员组成全为 ${'ids'} 进化时`,
|
||||
|
||||
L_shape: tp`以L字形式消除5个${'orbs'}时`,
|
||||
heal: tp`以${'orbs'}回复${'heal'}时`,
|
||||
},
|
||||
position: {
|
||||
top: tp`上方第${'pos'}横行`,
|
||||
bottom: tp`下方第${'pos'}横行`,
|
||||
left: tp`左方第${'pos'}竖列`,
|
||||
right: tp`右方第${'pos'}竖列`,
|
||||
shape: tp`指定位置`,
|
||||
},
|
||||
value: {
|
||||
unknown: tp`[ 未知数值: ${'type'}]`, //type
|
||||
const: tp`${'value'}${'unit'}`,
|
||||
const_to: tp`到${'value'}`,
|
||||
mul_percent: tp`${'value'}%`,
|
||||
mul_times: tp`×${'value'}倍`,
|
||||
mul_of_percent: tp`${'stats'}的${'value'}%`,
|
||||
mul_of_times: tp`${'stats'}×${'value'}倍`,
|
||||
hp_scale: tp`${'hp'}为100%时${'min'},${'hp'}为1时${'max'}`,
|
||||
random_atk: tp`${'atk'}×${'min'}${'max'}倍`,
|
||||
prob: tp`有${'value'}几率`,
|
||||
x_awakenings: tp`${'awakenings'}数量×${'value'}`,
|
||||
},
|
||||
target: {
|
||||
self: tp`发动者自身`,
|
||||
enemy: tp`敌人`,
|
||||
team: tp`队伍`,
|
||||
team_last: tp`队伍最后一位队员`,
|
||||
enemy_all: tp`敌方全体`,
|
||||
enemy_one: tp`敌方1体`,
|
||||
enemy_attr: tp`${'attr'}敌人`,
|
||||
},
|
||||
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`队伍回复力`,
|
||||
},
|
||||
unit: {
|
||||
unit: tp`个`,
|
||||
times: tp`次`,
|
||||
seconds: tp`秒`,
|
||||
point: tp`点`,
|
||||
turns: tp`回合`,
|
||||
},
|
||||
word: {
|
||||
comma: tp`,`, //逗号
|
||||
slight_pause: tp`、`, //顿号
|
||||
range_hyphen: tp`~`, //范围连字符
|
||||
in_once: tp`同时`,
|
||||
evo_type_pixel: tp`像素进化`,
|
||||
evo_type_reincarnation: tp`转生或超转生进化`,
|
||||
evo_type_unknow: tp`未知进化`,
|
||||
affix_attr: tp`${'cotent'}属性`, //词缀-属性
|
||||
affix_orb: tp`${'cotent'}宝珠`, //词缀-宝珠
|
||||
affix_type: tp`${'cotent'}类型`, //词缀-类型
|
||||
affix_awakening: tp`${'cotent'}觉醒`, //词缀-觉醒
|
||||
affix_exclude: tp`${'cotent'}以外`, //词缀-属性
|
||||
},
|
||||
attrs: {
|
||||
[0]: tp`${'icon'}火`,
|
||||
[1]: tp`${'icon'}水`,
|
||||
[2]: tp`${'icon'}木`,
|
||||
[3]: tp`${'icon'}光`,
|
||||
[4]: tp`${'icon'}暗`,
|
||||
[5]: tp`${'icon'}回复`,
|
||||
[6]: tp`${'icon'}空`,
|
||||
all: tp`所有`,
|
||||
self: tp`${'icon'}自身属性`,
|
||||
fixed: tp`${'icon'}无视防御固定`,
|
||||
},
|
||||
types: {
|
||||
[0]: tp`${'icon'}进化用`,
|
||||
[1]: tp`${'icon'}平衡`,
|
||||
[2]: tp`${'icon'}体力`,
|
||||
[3]: tp`${'icon'}回复`,
|
||||
[4]: tp`${'icon'}龙`,
|
||||
[5]: tp`${'icon'}神`,
|
||||
[6]: tp`${'icon'}攻击`,
|
||||
[7]: tp`${'icon'}恶魔`,
|
||||
[8]: tp`${'icon'}机械`,
|
||||
[9]: tp`${'icon'}特别保护`,
|
||||
[12]: tp`${'icon'}能力觉醒用`,
|
||||
[14]: tp`${'icon'}强化合成用`,
|
||||
[15]: tp`${'icon'}贩卖用`,
|
||||
},
|
||||
orbs: {
|
||||
[0]: tp`${'icon'}火`,
|
||||
[1]: tp`${'icon'}水`,
|
||||
[2]: tp`${'icon'}木`,
|
||||
[3]: tp`${'icon'}光`,
|
||||
[4]: tp`${'icon'}暗`,
|
||||
[5]: tp`${'icon'}回复`,
|
||||
[6]: tp`${'icon'}干扰`,
|
||||
[7]: tp`${'icon'}毒`,
|
||||
[8]: tp`${'icon'}剧毒`,
|
||||
[9]: tp`${'icon'}炸弹`,
|
||||
enhanced: tp`${'icon'}强化`,
|
||||
locked: tp`${'icon'}锁定`,
|
||||
nail: tp`${'icon'}钉子`,
|
||||
variation: tp`${'icon'}变换珠(每${'time'}秒变换)`,
|
||||
_5color: tp`${'icon'}5色`,
|
||||
_6color: tp`${'_5color'}+${'orb_rcv'}`,
|
||||
all: tp`所有`,
|
||||
any: tp`任何${'cotent'}`,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
//类型和觉醒杀和潜觉杀的对应编号,还有类型可以打什么类型的潜觉杀
|
||||
const typekiller_for_type = [
|
||||
{type:0,awoken:39,latent:16,typeKiller:[]}, //0进化
|
||||
|
@ -399,7 +632,7 @@ const specialSearchFunctions = (function() {
|
|||
const searchTypeArray = [173];
|
||||
const skill = getCardActiveSkill(card, searchTypeArray);
|
||||
const sk = skill.params;
|
||||
if (sk[0] && sk[3])
|
||||
if (sk[1] && sk[3])
|
||||
{
|
||||
return `双吸×${sk[0]}T`;
|
||||
}else
|
||||
|
|
|
@ -1,34 +1,4 @@
|
|||
//带标签的模板字符串
|
||||
function tp(strings, ...keys) {
|
||||
return (function(...values) {
|
||||
let dict = values[values.length - 1] || {};
|
||||
let fragment = document.createDocumentFragment();
|
||||
fragment.appendChild(document.createTextNode(strings[0]));
|
||||
//let result = [strings[0]];
|
||||
keys.forEach(function(key, i, arr) {
|
||||
let value = Number.isInteger(key) ? values[key] : dict[key];
|
||||
if (value == undefined)
|
||||
{
|
||||
//console.debug("模板字符串中 %s 未找到输入数据",key);
|
||||
}else
|
||||
{
|
||||
if (!(value instanceof Node))
|
||||
{
|
||||
value = document.createTextNode(value);
|
||||
}
|
||||
try{
|
||||
fragment.appendChild(arr.lastIndexOf(key) == i ? value : value.cloneNode(true));
|
||||
}catch(e)
|
||||
{
|
||||
console.log(value, e);
|
||||
console.log(keys, values);
|
||||
}
|
||||
}
|
||||
fragment.appendChild(document.createTextNode(strings[i + 1]));
|
||||
});
|
||||
return fragment;
|
||||
});
|
||||
}
|
||||
let merge_skill = false;
|
||||
|
||||
const Attributes = {
|
||||
/*0: "Fire",
|
||||
|
@ -448,7 +418,7 @@ function skillParser(skillId)
|
|||
const skills = (Array.isArray(result) ? result : [result])
|
||||
.filter(s => Boolean(s))
|
||||
.map(s => ({ id: skillId, type: skill.type, params: skill.params, ...s }));
|
||||
//merge(skills);
|
||||
if (merge_skill) merge(skills);
|
||||
return skills;
|
||||
}
|
||||
|
||||
|
@ -1188,52 +1158,53 @@ function renderSkillEntry(skills)
|
|||
li.addEventListener("click", showParsedSkill);
|
||||
});
|
||||
|
||||
/*
|
||||
let boardChange = skills.filter(skill=>
|
||||
skill.kind == SkillKinds.BoardChange ||
|
||||
skill.kind == SkillKinds.GenerateOrbs ||
|
||||
skill.kind == SkillKinds.FixedOrbs
|
||||
);
|
||||
if (boardChange.length > 0)
|
||||
if (merge_skill)
|
||||
{
|
||||
const board = new Board();
|
||||
for (let skill of boardChange)
|
||||
let boardChange = skills.filter(skill=>
|
||||
skill.kind == SkillKinds.BoardChange ||
|
||||
skill.kind == SkillKinds.GenerateOrbs ||
|
||||
skill.kind == SkillKinds.FixedOrbs
|
||||
);
|
||||
if (boardChange.length > 0)
|
||||
{
|
||||
switch (skill.kind)
|
||||
const board = new Board();
|
||||
for (let skill of boardChange)
|
||||
{
|
||||
case SkillKinds.BoardChange: { //洗版
|
||||
const attrs = skill.attrs;
|
||||
board.randomFill(attrs);
|
||||
break;
|
||||
}
|
||||
case SkillKinds.GenerateOrbs: { //产生珠子
|
||||
let orbs = skill.orbs, exclude = skill.exclude, count = skill.count;
|
||||
board.generateOrbs(orbs, count, exclude);
|
||||
break;
|
||||
}
|
||||
case SkillKinds.FixedOrbs: { //固定位置产生珠子
|
||||
let generates = skill.generates;
|
||||
for (const generate of generates)
|
||||
{
|
||||
let orb = generate.orbs?.[0];
|
||||
if (generate.type == 'shape') {
|
||||
board.setShape(generate.positions, orb);
|
||||
} else {
|
||||
if (generate.type == 'row')
|
||||
board.setRow(generate.positions, orb);
|
||||
else
|
||||
board.setColumn(generate.positions, orb);
|
||||
}
|
||||
switch (skill.kind)
|
||||
{
|
||||
case SkillKinds.BoardChange: { //洗版
|
||||
const attrs = skill.attrs;
|
||||
board.randomFill(attrs);
|
||||
break;
|
||||
}
|
||||
case SkillKinds.GenerateOrbs: { //产生珠子
|
||||
let orbs = skill.orbs, exclude = skill.exclude, count = skill.count;
|
||||
board.generateOrbs(orbs, count, exclude);
|
||||
break;
|
||||
}
|
||||
case SkillKinds.FixedOrbs: { //固定位置产生珠子
|
||||
let generates = skill.generates;
|
||||
for (const generate of generates)
|
||||
{
|
||||
let orb = generate.orbs?.[0];
|
||||
if (generate.type == 'shape') {
|
||||
board.setShape(generate.positions, orb);
|
||||
} else {
|
||||
if (generate.type == 'row')
|
||||
board.setRow(generate.positions, orb);
|
||||
else
|
||||
board.setColumn(generate.positions, orb);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
const li = ul.appendChild(document.createElement("li"));
|
||||
li.appendChild(board.toTable());
|
||||
li.className = "merge-board";
|
||||
}
|
||||
const li = ul.appendChild(document.createElement("li"));
|
||||
li.appendChild(board.toTable());
|
||||
li.className = "merge-board";
|
||||
}
|
||||
*/
|
||||
|
||||
return ul;
|
||||
}
|
||||
|
@ -1434,13 +1405,20 @@ function renderSkill(skill, option = {})
|
|||
}
|
||||
|
||||
case SkillKinds.DamageEnemy: { //大炮和固伤
|
||||
let attr = skill.attr, target = skill.target, damage = skill.damage;
|
||||
let attr = skill.attr, target = skill.target, damage = skill.damage, times = skill.times;
|
||||
if (attr == null) break; //没有属性时,编号为0的空技能
|
||||
dict = {
|
||||
target: target === 'all' ? tsp.target.enemy_all() : target === 'single' ? tsp.target.enemy_one() : tsp.target.enemy_attr({attr: renderAttrs(target, {affix: true})}),
|
||||
damage: renderValue(damage, {unit: tsp.unit.point}),
|
||||
attr: renderAttrs(attr, {affix: (attr === 'self' || attr === 'fixed') ? false : true})
|
||||
attr: renderAttrs(attr, {affix: (attr === 'self' || attr === 'fixed') ? false : true}),
|
||||
};
|
||||
if (times)
|
||||
{
|
||||
dict.times = renderValue(v.constant(times), {unit: tsp.unit.times});
|
||||
dict.totalDamage = tsp.skill.damage_enemy_count({
|
||||
damage: renderValue(v.constant(damage.value * times), {unit: tsp.unit.point})
|
||||
});
|
||||
}
|
||||
frg.ap(tsp.skill.damage_enemy(dict));
|
||||
break;
|
||||
}
|
||||
|
@ -1468,9 +1446,12 @@ function renderSkill(skill, option = {})
|
|||
dict = {
|
||||
orbs: renderOrbs(attrs),
|
||||
};
|
||||
let board = new Board(attrs);
|
||||
frg.ap(tsp.skill.board_change(dict));
|
||||
frg.ap(board.toTable());
|
||||
if (!merge_skill)
|
||||
{
|
||||
let board = new Board(attrs);
|
||||
frg.ap(board.toTable());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SkillKinds.SkillBoost: { //溜
|
||||
|
@ -1578,17 +1559,20 @@ function renderSkill(skill, option = {})
|
|||
orbs: renderOrbs(orbs, {time}),
|
||||
value: count,
|
||||
};
|
||||
let board = new Board();
|
||||
board.generateOrbs(orbs, count, exclude);
|
||||
frg.ap(tsp.skill.generate_orbs(dict));
|
||||
frg.ap(board.toTable());
|
||||
if (!merge_skill)
|
||||
{
|
||||
let board = new Board();
|
||||
board.generateOrbs(orbs, count, exclude);
|
||||
frg.ap(board.toTable());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SkillKinds.FixedOrbs: { //固定位置产生珠子
|
||||
let generates = skill.generates;
|
||||
let slight_pause = tsp.word.slight_pause().textContent;
|
||||
let subDocument = [];
|
||||
let board = new Board();
|
||||
let board = merge_skill ? null : new Board();
|
||||
function posSplit(pos, max)
|
||||
{
|
||||
return {sequence: pos.filter(n=>n<=2).map(n=>n+1), reverse: pos.filter(n=>n>=3).reverse().map(n=>max-n)};
|
||||
|
@ -1602,7 +1586,7 @@ function renderSkill(skill, option = {})
|
|||
if (generate.type == 'shape')
|
||||
{
|
||||
dict.position = tsp.position.shape();
|
||||
board.setShape(generate.positions, orb);
|
||||
if (!merge_skill) board.setShape(generate.positions, orb);
|
||||
}else
|
||||
{
|
||||
let posFrgs = [];
|
||||
|
@ -1612,20 +1596,20 @@ function renderSkill(skill, option = {})
|
|||
const pos = posSplit(generate.positions, 5);
|
||||
if (pos.sequence.length) posFrgs.push(tsp.position.top({pos: pos.sequence.join(slight_pause)}));
|
||||
if (pos.reverse.length) posFrgs.push(tsp.position.bottom({pos: pos.reverse.join(slight_pause)}));
|
||||
board.setRow(generate.positions, orb);
|
||||
if (!merge_skill) board.setRow(generate.positions, orb);
|
||||
}else
|
||||
{
|
||||
const pos = posSplit(generate.positions, 6);
|
||||
if (pos.sequence.length) posFrgs.push(tsp.position.left({pos: pos.sequence.join(slight_pause)}));
|
||||
if (pos.reverse.length) posFrgs.push(tsp.position.right({pos: pos.reverse.join(slight_pause)}));
|
||||
board.setColumn(generate.positions, orb);
|
||||
if (!merge_skill) board.setColumn(generate.positions, orb);
|
||||
}
|
||||
dict.position = posFrgs.nodeJoin(tsp.word.slight_pause());
|
||||
}
|
||||
subDocument.push(tsp.skill.fixed_orbs(dict));
|
||||
}
|
||||
frg.ap(subDocument.nodeJoin(tsp.word.comma()));
|
||||
frg.ap(board.toTable());
|
||||
if (!merge_skill) frg.ap(board.toTable());
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -90,17 +90,6 @@ Number.prototype.keepCounts = function(decimalDigits = 2, plusSign = false)
|
|||
let newNumber = Number(this.toFixed(decimalDigits));
|
||||
return (plusSign && this > 0 ? '+' : '') + newNumber.bigNumberToString();
|
||||
}
|
||||
//将二进制flag转为数组
|
||||
function flags(num) {
|
||||
const arr = [];
|
||||
for (let i = 0; i < 32; i++) {
|
||||
if (num & (1 << i)) {
|
||||
arr.push(i);
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
//数组删除自己尾部的空元素
|
||||
Array.prototype.DeleteLatter = function(item = null) {
|
||||
let index = this.length - 1;
|
||||
|
@ -120,6 +109,64 @@ Math.randomInteger = function(max, min = 0) {
|
|||
return this.floor(this.random() * (max - min + 1) + min);
|
||||
}
|
||||
|
||||
//将二进制flag转为数组
|
||||
function flags(num) {
|
||||
const arr = [];
|
||||
for (let i = 0; i < 32; i++) {
|
||||
if (num & (1 << i)) {
|
||||
arr.push(i);
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
//带标签的模板字符串
|
||||
function tp(strings, ...keys) {
|
||||
return (function(...values) {
|
||||
let dict = values[values.length - 1] || {};
|
||||
let fragment = document.createDocumentFragment();
|
||||
fragment.appendChild(document.createTextNode(strings[0]));
|
||||
//let result = [strings[0]];
|
||||
keys.forEach(function(key, i, arr) {
|
||||
let value = Number.isInteger(key) ? values[key] : dict[key];
|
||||
if (value == undefined)
|
||||
{
|
||||
//console.debug("模板字符串中 %s 未找到输入数据",key);
|
||||
}else
|
||||
{
|
||||
if (!(value instanceof Node))
|
||||
{
|
||||
value = document.createTextNode(value);
|
||||
}
|
||||
try{
|
||||
fragment.appendChild(arr.lastIndexOf(key) == i ? value : value.cloneNode(true));
|
||||
}catch(e)
|
||||
{
|
||||
console.log(value, e);
|
||||
console.log(keys, values);
|
||||
}
|
||||
}
|
||||
fragment.appendChild(document.createTextNode(strings[i + 1]));
|
||||
});
|
||||
return fragment;
|
||||
});
|
||||
}
|
||||
|
||||
//来自于 https://www.cnblogs.com/zhenguo-chen/p/14672332.html
|
||||
function deepMerge(obj1, obj2) {
|
||||
let key;
|
||||
for (key in obj2) {
|
||||
// 如果target(也就是obj1[key])存在,且是对象的话再去调用deepMerge,否则就是obj1[key]里面没这个对象,需要与obj2[key]合并
|
||||
// 如果obj2[key]没有值或者值不是对象,此时直接替换obj1[key]
|
||||
obj1[key] =
|
||||
obj1[key] &&
|
||||
obj1[key].toString() === "[object Object]" &&
|
||||
(obj2[key] && obj2[key].toString() === "[object Object]")
|
||||
? deepMerge(obj1[key], obj2[key])
|
||||
: (obj1[key] = obj2[key]);
|
||||
}
|
||||
return obj1;
|
||||
}
|
||||
//▼ADPCM播放相关,来自 https://github.com/jy4340132/aaa
|
||||
const pcmMemory = new WebAssembly.Memory({ initial: 256, maximum: 256 });
|
||||
|
||||
|
|
70
script.js
70
script.js
|
@ -25,10 +25,6 @@ const isGuideMod = Boolean(Number(getQueryString("guide"))); //是否以图鉴
|
|||
if (location.search.includes('&')) {
|
||||
location.search = location.search.replace(/&/ig, '&');
|
||||
}
|
||||
let localTranslating = {
|
||||
webpage_title: `智龙迷城${teamsCount}人队伍图制作工具`,
|
||||
addition_display: "💬",
|
||||
}
|
||||
|
||||
//一开始就加载当前语言
|
||||
if (currentLanguage == undefined)
|
||||
|
@ -2842,7 +2838,6 @@ function initialize() {
|
|||
showSearch(s_cards); //显示
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
skillLevel.onchange = function() {
|
||||
const card = Cards[editBox.mid] || Cards[0]; //怪物固定数据
|
||||
|
@ -2854,6 +2849,49 @@ function initialize() {
|
|||
skillLevel_Max.ipt = skillLevel;
|
||||
skillLevel_Max.onclick = setIptToMyValue;
|
||||
|
||||
const rowLeaderSkill = settingBox.querySelector(".row-mon-leader-skill");
|
||||
const leaderSkillBox = rowLeaderSkill.querySelector(".skill-box");
|
||||
const showSkillOriginalClassName = 'show-skill-original';
|
||||
const showSkillOriginal = leaderSkillBox.querySelector(`#${showSkillOriginalClassName}`); //显示官方排序的觉醒
|
||||
showSkillOriginal.onchange = function(){
|
||||
localStorage.setItem(cfgPrefix + showSkillOriginalClassName, Number(this.checked));
|
||||
if (this.checked)
|
||||
{
|
||||
skillBox.classList.add(showSkillOriginalClassName);
|
||||
leaderSkillBox.classList.add(showSkillOriginalClassName);
|
||||
}else
|
||||
{
|
||||
skillBox.classList.remove(showSkillOriginalClassName);
|
||||
leaderSkillBox.classList.remove(showSkillOriginalClassName);
|
||||
}
|
||||
};
|
||||
showSkillOriginal.checked = Boolean(Number(localStorage.getItem(cfgPrefix + showSkillOriginalClassName)));
|
||||
showSkillOriginal.onchange();
|
||||
|
||||
editBox.refreshSkillParse = function(skp, lskp){
|
||||
const skillDetailParsed = skp ?? skillBox.querySelector(".skill-datail-parsed");
|
||||
const lskillDetailParsed = lskp ?? leaderSkillBox.querySelector(".skill-datail-parsed");
|
||||
|
||||
const card = Cards[this.mid] || Cards[0];
|
||||
if (!card) return;
|
||||
|
||||
skillDetailParsed.innerHTML = "";
|
||||
skillDetailParsed.appendChild(renderSkillEntry(skillParser(card.activeSkillId)));
|
||||
lskillDetailParsed.innerHTML = "";
|
||||
lskillDetailParsed.appendChild(renderSkillEntry(skillParser(card.leaderSkillId)));
|
||||
};
|
||||
|
||||
const mergeSillClassName = 'merge-skill';
|
||||
const mergeSill = leaderSkillBox.querySelector(`#${mergeSillClassName}`); //显示官方排序的觉醒
|
||||
mergeSill.onchange = function(){
|
||||
localStorage.setItem(cfgPrefix + mergeSillClassName, Number(this.checked));
|
||||
merge_skill = this.checked;
|
||||
editBox.refreshSkillParse();
|
||||
};
|
||||
mergeSill.checked = Boolean(Number(localStorage.getItem(cfgPrefix + mergeSillClassName)));
|
||||
mergeSill.onchange();
|
||||
|
||||
|
||||
//已有觉醒的去除
|
||||
function deleteLatent() {
|
||||
const aIdx = monEditLatents.filter(l => !l.classList.contains(className_displayNone)).findIndex(l => l == this);
|
||||
|
@ -3382,8 +3420,6 @@ function editBoxChangeMonId(id) {
|
|||
//const skill = Skills[card.activeSkillId];
|
||||
//const leaderSkill = Skills[card.leaderSkillId];
|
||||
|
||||
let fragment = null;
|
||||
|
||||
const monInfoBox = editBox.querySelector(".monsterinfo-box");
|
||||
const settingBox = editBox.querySelector(".setting-box");
|
||||
|
||||
|
@ -3471,7 +3507,7 @@ function editBoxChangeMonId(id) {
|
|||
evoCardUl.innerHTML = ""; //据说直接清空HTML性能更好
|
||||
const openEvolutionaryTree = settingBox.querySelector(".row-mon-id .open-evolutionary-tree");
|
||||
if (evoLinkCardsIdArray.length > 1) {
|
||||
fragment = document.createDocumentFragment(); //创建节点用的临时空间
|
||||
let fragment = document.createDocumentFragment(); //创建节点用的临时空间
|
||||
evoLinkCardsIdArray.forEach(function(mid) {
|
||||
const cli = createCardHead(mid);
|
||||
if (mid == id) {
|
||||
|
@ -3593,15 +3629,13 @@ function editBoxChangeMonId(id) {
|
|||
|
||||
const activeskill = Skills[card.activeSkillId];
|
||||
const leaderSkill = Skills[card.leaderSkillId];
|
||||
fragment = document.createDocumentFragment(); //创建节点用的临时空间
|
||||
fragment.appendChild(skillBox);
|
||||
let frg1 = document.createDocumentFragment(); //创建节点用的临时空间
|
||||
frg1.appendChild(skillBox);
|
||||
|
||||
skillTitle.textContent = activeskill.name;
|
||||
skillTitle.setAttribute("data-skillid", activeskill.id);
|
||||
skillDetailOriginal.innerHTML = "";
|
||||
skillDetailOriginal.appendChild(parseSkillDescription(activeskill));
|
||||
skillDetailParsed.innerHTML = "";
|
||||
skillDetailParsed.appendChild(renderSkillEntry(skillParser(card.activeSkillId)));
|
||||
|
||||
const t_maxLevel = card.overlay || card.types.includes(15) ? 1 : activeskill.maxLevel; //遇到不能升技的,最大等级强制为1
|
||||
skillLevel.max = t_maxLevel;
|
||||
|
@ -3610,8 +3644,6 @@ function editBoxChangeMonId(id) {
|
|||
//skillLevel_Max.textContent = activeskill.maxLevel;
|
||||
skillCD.textContent = activeskill.initialCooldown - t_maxLevel + 1;
|
||||
|
||||
rowSkill.appendChild(fragment);
|
||||
|
||||
//怪物队长技能
|
||||
const rowLederSkill = settingBox.querySelector(".row-mon-leader-skill");
|
||||
const lskillBox = rowLederSkill.querySelector(".skill-box");
|
||||
|
@ -3619,17 +3651,17 @@ function editBoxChangeMonId(id) {
|
|||
const lskillDetailParsed = lskillBox.querySelector(".skill-datail-parsed");
|
||||
const lskillDetailOriginal = lskillBox.querySelector(".skill-datail-original");
|
||||
|
||||
fragment = document.createDocumentFragment(); //创建节点用的临时空间
|
||||
fragment.appendChild(lskillBox);
|
||||
let frg2 = document.createDocumentFragment(); //创建节点用的临时空间
|
||||
frg2.appendChild(lskillBox);
|
||||
|
||||
lskillTitle.textContent = leaderSkill.name;
|
||||
lskillTitle.setAttribute("data-skillid", leaderSkill.id);
|
||||
lskillDetailOriginal.innerHTML = "";
|
||||
lskillDetailOriginal.appendChild(parseSkillDescription(leaderSkill));
|
||||
lskillDetailParsed.innerHTML = "";
|
||||
lskillDetailParsed.appendChild(renderSkillEntry(skillParser(card.leaderSkillId)));
|
||||
|
||||
rowLederSkill.appendChild(fragment);
|
||||
editBox.refreshSkillParse(skillDetailParsed, lskillDetailParsed);
|
||||
rowSkill.appendChild(frg1);
|
||||
rowLederSkill.appendChild(frg2);
|
||||
|
||||
if (card.overlay || card.types[0] == 15 && card.types[1] == -1) { //当可以叠加时,不能打297和潜觉
|
||||
rowPlus.classList.add("disabled");
|
||||
|
|
11
solo.html
11
solo.html
|
@ -12,9 +12,9 @@
|
|||
const solo = true;
|
||||
const teamsCount = 1;
|
||||
</script>
|
||||
<script type="text/javascript" src="languages/language-list.js"></script>
|
||||
<script type="text/javascript" src="script-json_data.js"></script>
|
||||
<script type="text/javascript" src="script-universal_function.js"></script>
|
||||
<script type="text/javascript" src="script-json_data.js"></script>
|
||||
<script type="text/javascript" src="languages/language-list.js"></script>
|
||||
<script type="text/javascript" src="script-skill-parser.js"></script>
|
||||
<script type="text/javascript" src="script.js"></script>
|
||||
<script type="text/javascript" src="library/html2canvas.min.js"></script>
|
||||
|
@ -982,7 +982,12 @@ var formation = new Formation(teamsCount,6);
|
|||
<div class="setting-row row-mon-leader-skill">
|
||||
<!--怪物队长技能-->
|
||||
<div class="skill-box">
|
||||
<div class="skill-title"><div class="type-title"></div><span class="skill-name"></span></div>
|
||||
<div class="skill-title"><div class="type-title"></div><span class="skill-name"></span>
|
||||
<div class="skill-parse-control">
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="show-skill-original" id="show-skill-original"><label class="config-checkbox-lbl" for="show-skill-original"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="merge-skill" id="merge-skill"><label class="config-checkbox-lbl" for="merge-skill"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="skill-datail-original"></div>
|
||||
<div class="skill-datail-parsed"></div>
|
||||
</div>
|
||||
|
|
|
@ -2477,12 +2477,18 @@ icon.inflicts::after
|
|||
.row-mon-leader-skill .skill-title .skill-name{
|
||||
color: #85FD80;
|
||||
}
|
||||
.skill-box .skill-cd-control{
|
||||
.skill-box .skill-cd-control,
|
||||
.skill-box .skill-parse-control
|
||||
{
|
||||
float: right;
|
||||
}
|
||||
.skill-box .skill-cd{
|
||||
margin-left: 10px;
|
||||
}
|
||||
.skill-box:not(.show-skill-original) .skill-datail-original
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
.skill-datail-original,
|
||||
.skill-datail-parsed{
|
||||
color: black;
|
||||
|
|
|
@ -1915,7 +1915,12 @@ var formation = new Formation(teamsCount,6);
|
|||
<div class="setting-row row-mon-leader-skill">
|
||||
<!--怪物队长技能-->
|
||||
<div class="skill-box">
|
||||
<div class="skill-title"><div class="type-title"></div><span class="skill-name"></span></div>
|
||||
<div class="skill-title"><div class="type-title"></div><span class="skill-name"></span>
|
||||
<div class="skill-parse-control">
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="show-skill-original" id="show-skill-original"><label class="config-checkbox-lbl" for="show-skill-original"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
<input type="checkbox" class="config-checkbox-ipt" name="merge-skill" id="merge-skill"><label class="config-checkbox-lbl" for="merge-skill"><div class="config-checkbox-lbl-cicle"></div></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="skill-datail-original"></div>
|
||||
<div class="skill-datail-parsed"></div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue