2024年8月30日 v21.7

This commit is contained in:
枫谷剑仙 2024-08-30 19:12:30 +08:00
parent a5c8898214
commit 72ad95776c
43 changed files with 181 additions and 53 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 901 KiB

After

Width:  |  Height:  |  Size: 901 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 529 KiB

After

Width:  |  Height:  |  Size: 905 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 327 KiB

After

Width:  |  Height:  |  Size: 328 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 KiB

After

Width:  |  Height:  |  Size: 196 KiB

View File

@ -137,6 +137,7 @@ const _localTranslating = {
board_size_change: tp`板面大小改变为${'icon'}${'size'}`,
remove_assist: tp`${'icon'}移除自身的辅助宠物(直到地下城结束)`,
prediction_falling: tp`盘面上可以${'icon'}预知宝珠掉落`,
play_voice: tp`使用技能时播放另一段语音 ${'icon'}`,
},
power: {
unknown: tp`[ 未知能力提升: ${'type'} ]`,

View File

@ -137,6 +137,7 @@ const _localTranslating = {
board_size_change: tp`板面大小改變為${'icon'}${'size'}`,
remove_assist: tp`${'icon'}移除自身的輔助寵物(直到地下城結束)`,
prediction_falling: tp`盤面上可以${'icon'}預知寶珠掉落`,
play_voice: tp`使用技能時播放另一段語音 ${'icon'}`,
},
power: {
unknown: tp`[ 未知能力提升: ${'type'} ]`,

View File

@ -2,25 +2,25 @@
{
"code": "ja",
"ckey": {
"card": "727e5409cc1c07700ab6dd2ae17431f6",
"skill": "fe311ecfa21bc04cf655b812b21573bb"
"card": "d79277370c92b64a967fb22fc2869d18",
"skill": "b80f35449f8944bce5aa4da63f507cc8"
},
"updateTime": 1724927572917
"updateTime": 1725010459970
},
{
"code": "en",
"ckey": {
"card": "36de0374240c36ac9a51cebc6a9f9e87",
"card": "21eae8050736ee60cb1f0d853d934324",
"skill": "06e1307ec1c9fc8962bcc64811cd3b81"
},
"updateTime": 1724927572917
"updateTime": 1725010459970
},
{
"code": "ko",
"ckey": {
"card": "c4ef12b5b7435ee81bd03a465c6b04ca",
"card": "7daa616ab7362fbbd3fae976ca0a0778",
"skill": "7a874a037b896eea33984d2dfb43a2ae"
},
"updateTime": 1724927572917
"updateTime": 1725010459970
}
]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -152,6 +152,7 @@ let localTranslating = {
board_size_change: tp`Board size changed to ${'icon'}${'size'}`,
remove_assist: tp`${'icon'}Remove this assist card (until end of dungeon)`,
prediction_falling: tp`${'icon'}Prediction of falling on board`,
play_voice: tp`Play another voice while using the skill ${'icon'}`,
},
power: {
unknown: tp`[ Unkonwn power up: ${'type'} ]`,
@ -553,7 +554,7 @@ const official_badge_sorting = [
1, 22, 23, 2, 3, 4, 5, 6,
7, 8, 9, 11, 17, 18, 19, 20,
21, 10, 12, 13, 14, 24, 25, 26,
27, 28, 29, 30, 31, 15, 16,
27, 28, 29, 30, 31, 15, 16, 32,
PAD_PASS_BADGE,
]
//官方的觉醒排列顺序
@ -1254,11 +1255,22 @@ const specialSearchFunctions = (function() {
}
function gravity_Addition(card)
{
const searchTypeArray = [6, 161];
const searchTypeArray = [6, 161, 261];
const skill = getCardActiveSkill(card, searchTypeArray);
if (!skill) return;
const sk = skill.params;
return `${skill.type==6?"当前":"最大"}${sk[0]}%`;
const denominator = skill.type === 161 ?
localTranslating.skill_parse.stats.maxhp() :
localTranslating.skill_parse.stats.chp();
const percent = `${sk[0]}%`;
const target = skill.type === 261 ?
localTranslating.skill_parse.target.enemy_one() :
localTranslating.skill_parse.target.enemy_all();
const fragment = document.createDocumentFragment();
//fragment.append(target, denominator, percent);
return [target, denominator, percent].nodeJoin(" ");
}
function healImmediately_Rate(card)
@ -3314,7 +3326,7 @@ const specialSearchFunctions = (function() {
{group:true,name:"Damage Enemy - Gravity",otLangName:{chs:"对敌直接伤害类-重力",cht:"對敵直接傷害類-重力"}, functions: [
{name:"Any",otLangName:{chs:"任意",cht:"任意"},
function:cards=>{
const searchTypeArray = [6, 161];
const searchTypeArray = [6, 161, 261];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
@ -3324,7 +3336,7 @@ const specialSearchFunctions = (function() {
},
{name:"Current HP",otLangName:{chs:"敌人当前血量",cht:"敵人當前血量"},
function:cards=>{
const searchTypeArray = [6];
const searchTypeArray = [6, 261];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;

View File

@ -476,11 +476,12 @@ const SkillKinds = {
SkillProviso: "skill-proviso",
ImpartAwakenings: "impart-awakenings",
ObstructOpponent: "obstruct-opponent",
IncreaseDamageCap: "increase-damage-cap",
IncreaseDamageCapacity: "increase-damage-cap",
BoardJammingStates: "board-jamming-states",
RemoveAssist: "remove-assist",
PredictionFalling: "prediction-falling",
BreakingShield: "breaking-shield",
PlayVoice: "play-voice",
}
function skillParser(skillId)
@ -950,7 +951,7 @@ function delayActiveTurns(turns, ...skills) {
return skills.length ? { kind: SkillKinds.DelayActiveTurns, turns, skills } : null;
}
function damageEnemy(target, attr, damage) {
return { kind: SkillKinds.DamageEnemy, target: target, attr: attr, damage: damage };
return { kind: SkillKinds.DamageEnemy, target, attr, damage };
}
function vampire(attr, damageValue, healValue) {
return { kind: SkillKinds.Vampire, attr: attr, damage: damageValue, heal: healValue };
@ -1018,8 +1019,8 @@ function evolvedSkills(loop, skills) {
function changeAttr(target, attr) {
return { kind: SkillKinds.ChangeAttribute, target: target, attr: attr ?? 0 };
}
function gravity(value) {
return { kind: SkillKinds.Gravity, value: value };
function gravity(value, target = "all") {
return { kind: SkillKinds.Gravity, value, target };
}
function voidEnemyBuff(buffs) {
return { kind: SkillKinds.VoidEnemyBuff, buffs: buffs };
@ -1052,6 +1053,9 @@ function henshin(id, random = false) {
random: random
};
}
function skillPlayVoice(id) {
return { kind: SkillKinds.PlayVoice, id };
}
function voidPoison() { return { kind: SkillKinds.VoidPoison }; }
function skillProviso(cond) { return { kind: SkillKinds.SkillProviso, cond: cond }; }
function impartAwakenings(attrs, types, awakenings) {
@ -1060,8 +1064,8 @@ function impartAwakenings(attrs, types, awakenings) {
function obstructOpponent(typeName, pos, ids) {
return { kind: SkillKinds.ObstructOpponent, typeName: typeName, pos: pos, enemy_skills: ids };
}
function increaseDamageCap(cap, targets) {
return { kind: SkillKinds.IncreaseDamageCap, cap: cap, targets: targets};
function increaseDamageCapacity(cap, targets) {
return { kind: SkillKinds.IncreaseDamageCapacity, cap: cap, targets: targets};
}
function boardJammingStates(state, posType, options) {
return { kind: SkillKinds.BoardJammingStates, state: state, posType: posType, ...options};
@ -1632,7 +1636,7 @@ const skillObjectParsers = {
// const targetTypes = ["self","leader-self","leader-helper","sub-members"];
// const typeArr = Bin.unflags(target).map(n => targetTypes[n]);
return activeTurns(turns,
increaseDamageCap(cap * 1e8, ["self"])
increaseDamageCapacity(cap * 1e8, ["self"])
);
},
[243](turns, attrs, hpPercent, probPercent) { //掉落荆棘珠
@ -1667,10 +1671,10 @@ const skillObjectParsers = {
return powerUp(Bin.unflags(_2), Bin.unflags(_3), p.mul({ hp: hp || 100, atk: atk || 100, rcv: rcv || 100 }), c.compo('team-same-rarity', rarity));
},
[246](time, combo, cap) { //限定时间内转出多少C提高伤害上限
return CTW(v.constant(time), c.combos(combo) , increaseDamageCap(cap * 1e8, ["self"]));
return CTW(v.constant(time), c.combos(combo) , increaseDamageCapacity(cap * 1e8, ["self"]));
},
[247](time, attr, min, cap) { //限定时间内转出多少色提高伤害上限
return CTW(v.constant(time), c.attrs(Bin.unflags(attr), min) , increaseDamageCap(cap * 1e8, ["self"]));
return CTW(v.constant(time), c.attrs(Bin.unflags(attr), min) , increaseDamageCapacity(cap * 1e8, ["self"]));
},
[248](turns, ...ids) { //几回合后才生效的技能
return delayActiveTurns(turns,
@ -1719,10 +1723,12 @@ const skillObjectParsers = {
const targetTypes = ["self","leader-self","leader-helper","sub-members"];
const typeArr = Bin.unflags(target).map(n => targetTypes[n]);
return activeTurns(turns,
increaseDamageCap(cap * 1e8, typeArr)
increaseDamageCapacity(cap * 1e8, typeArr)
);
},
[259](percent) { return breakingShield(v.xShield(percent)); },
[260](_, voiceId) { return skillPlayVoice(voiceId); },
[261](percent) { return gravity(v.xCHP(percent), 'single'); },
[1000](type, pos, ...ids) {
const posType = (type=>{
switch (type) {
@ -2125,10 +2131,11 @@ function renderSkill(skill, option = {})
break;
}
case SkillKinds.Gravity: { //重力
let {value, target} = skill;
let dict = {
icon: createIcon(skill.kind),
target: tsp.target.enemy(),
value: renderValue(skill.value, { percent:true }),
target: target === 'all' ? tsp.target.enemy_all() : tsp.target.enemy_one(),
value: renderValue(value, { percent:true }),
};
frg.ap(tsp.skill.gravity(dict));
break;
@ -2677,10 +2684,10 @@ function renderSkill(skill, option = {})
frg.ap(tsp.skill.obstruct_opponent(dict));
break;
}
case SkillKinds.IncreaseDamageCap: { //增加伤害上限
case SkillKinds.IncreaseDamageCapacity: { //增加伤害上限
const {cap, targets} = skill;
let dict = {
icon: createIcon(skill.kind),
icon: createIcon(skill.kind, cap > 0x7FFFFFFF ? "cap-incr" : "cap-decr"),
targets: document.createDocumentFragment(),
cap: cap.bigNumberToString(),
};
@ -2799,6 +2806,19 @@ function renderSkill(skill, option = {})
frg.ap(tsp.skill.gravity(dict));
break;
}
case SkillKinds.PlayVoice: { //播放技能语音
const { id } = skill;
const icon = document.createElement("icon");
icon.className = "awoken-icon";
icon.setAttribute("data-awoken-icon", 63);
icon.onclick = ()=>playVoiceById(id);
let dict = {
icon,
};
frg.ap(tsp.skill.play_voice(dict));
break;
}
default: {
console.log("未处理的技能类型",skill.kind, skill);

View File

@ -513,6 +513,16 @@ fetch("library/jy4340132-aaa/adpcm.wasm").then((response) => response.arrayBuffe
decodeAudio("demo.adpcm", decoder.decode.bind(decoder));
}*/
});
function playVoiceById(id) { //点击label才播放语音
if (!Number.isInteger(id)) {
throw new TypeError("传入的音频 ID 不是整数");
}
const sndURL = `sound/voice/${currentDataSource.code}/padv${id.toString().padStart(3,'0')}.wav`;
const decoder = new Adpcm(adpcm_wasm, pcmImportObj);
decoder.resetDecodeState(new Adpcm.State(0, 0));
decodeAudio(sndURL, decoder.decode.bind(decoder));
}
//▲ADPCM播放相关
// 加载 image

View File

@ -1085,6 +1085,7 @@ Formation.pdcBadgeMap = [
{pdf:31,pdc:29}, //叛逆的鲁鲁修
{pdf:15,pdc:30}, //漫威
{pdf:16,pdc:31}, //泳装
{pdf:32,pdc:32}, //怪物猎人
];
//pdc的潜觉对应数字
Formation.pdcLatentMap = [
@ -5292,10 +5293,7 @@ function initialize() {
function playVoiceAwoken() { //点击label才播放语音
if (parseInt(this.getAttribute("data-awoken-icon"), 10) === 63) {
const card = Cards[editBox.mid];
const sndURL = `sound/voice/${currentDataSource.code}/padv${card.voiceId.toString().padStart(3,'0')}.wav`;
const decoder = new Adpcm(adpcm_wasm, pcmImportObj);
decoder.resetDecodeState(new Adpcm.State(0, 0));
decodeAudio(sndURL, decoder.decode.bind(decoder));
playVoiceById(card.voiceId);
}
}
monEditAwokensLabel.forEach(akDom => akDom.onclick = playVoiceAwoken);
@ -7462,6 +7460,7 @@ function refreshTeamTotalHP(totalDom, team, teamIdx) {
case 31: return member.card.collabId === 113 ? 1.15 : 1; //叛逆的鲁鲁修
case 15: return member.card.collabId === 96 ? 1.15 : 1; //漫威
case 16: return member.card.gachaIds.includes(9) ? 1.15 : 1; //泳装
case 32: return [21, 61].includes(member.card.collabId) ? 1.15 : 1; //怪物猎人
default: return 1;
}
}

View File

@ -383,7 +383,7 @@ const cachesMap = new Map([
],
[
"images/cards_ja/CARDS_096.PNG",
"d425f977c2b6dfff0f043fbb39ff6212"
"1657e9661abb29030e1fc10d68fe553e"
],
[
"images/cards_ja/CARDS_097.PNG",
@ -459,11 +459,11 @@ const cachesMap = new Map([
],
[
"images/cards_ja/CARDS_115.PNG",
"9acf4cda3de50366a22ed18759aa25ea"
"d3ad4455ab19e162e7d7a14e4626b197"
],
[
"images/cards_ja/CARDS_116.PNG",
"350e2a8953aa750096d18786f9aa56ce"
"6dca25988e27f6d357d69c4fdc21c857"
],
[
"sound/voice/ja/padv001.wav",
@ -9797,14 +9797,90 @@ const cachesMap = new Map([
"sound/voice/ja/padv3040.wav",
"2bbed674b6abb334ed282cb7e4a0fda3"
],
[
"sound/voice/ja/padv3047.wav",
"69ccd09336a1c2d842346257a8c6c399"
],
[
"sound/voice/ja/padv3048.wav",
"3aa8cae8bd14371ef6b34fa76b8db66f"
],
[
"sound/voice/ja/padv3049.wav",
"b94152a3a6300dcee2d32b47b33ddac7"
],
[
"sound/voice/ja/padv305.wav",
"4b055905368445f71648ad1ae73e482d"
],
[
"sound/voice/ja/padv3050.wav",
"b4fc8dfccb450f88716adb42d51efd0a"
],
[
"sound/voice/ja/padv3051.wav",
"af8ed49fa68eef5941f2aa0972625570"
],
[
"sound/voice/ja/padv3052.wav",
"d22ac40ce882d1c1f41fa50ac7560fc1"
],
[
"sound/voice/ja/padv3053.wav",
"1bcdec170a343010da6523a1a80e8832"
],
[
"sound/voice/ja/padv3054.wav",
"4171dd852d7b5399ff404f68286ee13e"
],
[
"sound/voice/ja/padv3055.wav",
"5e6a7df65ed4ce0ef8c3c8e367e4af08"
],
[
"sound/voice/ja/padv3056.wav",
"b52d2d3ce939afdc74ca70a468fe0d27"
],
[
"sound/voice/ja/padv3057.wav",
"47fea6517922ec0b98e8b63c4f1ff106"
],
[
"sound/voice/ja/padv3058.wav",
"8602c356ae9d2fa486b97f6a8d4f7c6b"
],
[
"sound/voice/ja/padv3059.wav",
"3fcc9235a947dcc37b9738b79b50c740"
],
[
"sound/voice/ja/padv306.wav",
"b9be2b0b26ace6b7cf3b7d923dcb2a84"
],
[
"sound/voice/ja/padv3060.wav",
"f62b86279ad9860e733a0c83f100f0fd"
],
[
"sound/voice/ja/padv3061.wav",
"e7d188b1c2678a831000b48bcc6cc64b"
],
[
"sound/voice/ja/padv3062.wav",
"fd3f7ead41287cf079d5de18d0efa5ae"
],
[
"sound/voice/ja/padv3063.wav",
"00d6113b762d9fd6658d56175a825bae"
],
[
"sound/voice/ja/padv3064.wav",
"c779c6aa1bf2ed58bb4b5645cb4d2305"
],
[
"sound/voice/ja/padv3065.wav",
"7e10e85221193026472eb206920ee85c"
],
[
"sound/voice/ja/padv307.wav",
"5ec44da179f28b3d1235ea19a22aeeae"
@ -33515,19 +33591,19 @@ const cachesMap = new Map([
],
[
"script-json_data.js",
"83cf35668e6e90e02785ea5ee60a19dc"
"7073b6d1696260d3841dee8aa09ddc2b"
],
[
"script-skill-parser.js",
"5b5ccf1faedeca0c508b72af22bbf2f4"
"af39cebd44f8fe27209466487dfbb8d5"
],
[
"script-universal_function.js",
"c83d738d57f3bdccde0a7c00b98875a8"
"0ae4adef70dab8dd183d393f431a528e"
],
[
"script.js",
"6dc8cc2b928c021a1f132ef59c65b009"
"480d5520a7c21c03f10732b32287864e"
],
[
"solo.html",
@ -33543,7 +33619,7 @@ const cachesMap = new Map([
],
[
"style.css",
"3ede134e5181a445ec308f446dd46d3a"
"adb8947011329a7bb8b44d26cd578b71"
],
[
"temp.js",
@ -33587,7 +33663,7 @@ const cachesMap = new Map([
],
[
"languages/zh-hans.js",
"01d21cbc97e43c62b72e45aaf3da33f4"
"e17c9e42e1def0ea098b2726dde7809a"
],
[
"languages/zh-hant.css",
@ -33595,7 +33671,7 @@ const cachesMap = new Map([
],
[
"languages/zh-hant.js",
"b155fe6ad390f1ee581f487c6ee0dd5a"
"78f6a3649d0be85e6936b30e7f2dac96"
],
[
"images/attrs.png",
@ -33619,7 +33695,7 @@ const cachesMap = new Map([
],
[
"images/badge.png",
"ddff292e6d77e8a7a1e763a9119e0824"
"e595fa16fb6b2e78d07393f220aef29c"
],
[
"images/brown-button.svg",
@ -33715,7 +33791,7 @@ const cachesMap = new Map([
],
[
"images/icon-latent.png",
"e04bc59355d699bea78c729a15c4d0ae"
"ba0243746d1f4cbcc54e201a647f657b"
],
[
"images/icon-MP.png",
@ -33747,7 +33823,7 @@ const cachesMap = new Map([
],
[
"images/icon-skills.png",
"d9244ad4fa64ac7ad55481b278e0ef9a"
"fae3e58d36a30373bf184d1c4b9e78d5"
],
[
"images/icon-switch-leader.png",

BIN
sound/voice/ja/padv3047.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3048.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3049.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3050.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3051.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3052.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3053.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3054.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3055.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3056.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3057.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3058.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3059.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3060.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3061.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3062.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3063.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3064.wav Normal file

Binary file not shown.

BIN
sound/voice/ja/padv3065.wav Normal file

Binary file not shown.

View File

@ -1432,12 +1432,13 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after
box-shadow:inset 1px 2px 1px -1px rgba(0,0,0,0.5);
}
.latent-icon[data-latent-icon]{
/*background-image: linear-gradient(#4499EE 33%, #2277EE 80%);
background-image: linear-gradient(#4499EE 33%, #2277EE 80%);
border-color: #CCEEFF;
box-shadow: 1px 1px 1px 0 black, inset 2px 2px 1px -1px black ;*/
border-image-source: url(images/icon-latent-bg.png);
box-shadow: 1px 1px 1px 0 black, inset 2px 2px 1px -1px black ;
/*html2canvas 不支持*/
/*border-image-source: url(images/icon-latent-bg.png);
border-image-slice: 5 5 6 5 fill;
border-image-width: 5px 5px 6px 5px;
border-image-width: 5px 5px 6px 5px;*/
}
/*队伍的潜觉*/
@ -4975,6 +4976,10 @@ body.external-link-support #external-support{
transform: scale(0.75);
background-position-y: calc(-36px * 36);
}
.icon-skill[data-icon-type="increase-damage-cap"].cap-decr::after
{
background-position-x: -36px;
}
.icon-skill[data-icon-type="orb-thorn"]
{
background-position-y:calc(-36px * 37);
@ -5019,6 +5024,10 @@ body.external-link-support #external-support{
background-position-y:calc(-36px * 43);
}
.card-skill-list .play-voice [data-awoken-icon="63"] {
cursor: pointer;
}
:where(:lang(en), :lang(ko)) .icon-skill:where(
[data-icon-type="mass-attack"],
[data-icon-type="unbind-awakenings"],