add new content end game
All checks were successful
Gitea Auto Deploy / Deploy-Container (push) Successful in 2m2s

This commit is contained in:
2025-08-15 21:29:41 +07:00
parent f40a403ea2
commit 55f1415e2f
51 changed files with 67356 additions and 2765 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

593
data/peak.cn.json Normal file
View File

@@ -0,0 +1,593 @@
{
"1": {
"Id": 1,
"Name": "智械残局",
"PreLevel": [
{
"Id": 101,
"Name": "骑士(一)",
"DamageType": [
"Fire",
"Imaginary"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
3003041
],
"EventIDList": [
{
"StageID": 30501011,
"StageType": "Challenge",
"StageName": 14930047325621619000,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501011"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 3012020,
"Monster1": 3013010,
"Monster2": 3013010,
"Monster3": 3012020
},
{
"$type": "StageMonsterWave",
"Monster0": 3004012
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033001,
"Name": "韧甲",
"Desc": "敌方目标初始拥有<color=#f29e38ff><unbreak>#1[i]</unbreak></color>层【韧甲】,每层使敌方目标受到的伤害降低<color=#f29e38ff><unbreak>#2[i]%</unbreak></color>敌方目标每次韧性被削减为0时降低1层【韧甲】。",
"Param": [
2,
0.1500000001396984
]
}
],
"InfiniteList": {
"305010111": {
"InfiniteWaveID": 305010111,
"MonsterGroupIDList": [
3012020,
3013010,
3013010,
3012020
],
"MaxMonsterCount": 4,
"MaxTeammateCount": 4,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 340
},
"305010112": {
"InfiniteWaveID": 305010112,
"MonsterGroupIDList": [
3004012
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 340
}
}
},
{
"Id": 102,
"Name": "骑士(二)",
"DamageType": [
"Physical",
"Wind",
"Thunder"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
3014020
],
"EventIDList": [
{
"StageID": 30501012,
"StageType": "Challenge",
"StageName": 4641986684160114000,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501012"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4053010,
"Monster1": 4053010
},
{
"$type": "StageMonsterWave",
"Monster0": 3014020
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033002,
"Name": "淬火",
"Desc": "敌方目标生命值每降低1%,我方对其造成的暴击伤害降低<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>。",
"Param": [
0.030000000027939677
]
}
],
"InfiniteList": {
"305010121": {
"InfiniteWaveID": 305010121,
"MonsterGroupIDList": [
4052010,
4053010,
4052010,
4052010,
4053010
],
"MaxMonsterCount": 5,
"MaxTeammateCount": 3,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 341
},
"305010122": {
"InfiniteWaveID": 305010122,
"MonsterGroupIDList": [
3014020
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 341
}
}
},
{
"Id": 103,
"Name": "骑士(三)",
"DamageType": [
"Physical",
"Ice",
"Quantum"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
4033030
],
"EventIDList": [
{
"StageID": 30501013,
"StageType": "Challenge",
"StageName": 1605669051038619400,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501013"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4032050,
"Monster1": 4033010,
"Monster2": 4032010,
"Monster3": 4032050
},
{
"$type": "StageMonsterWave",
"Monster0": 4033010,
"Monster1": 4033030,
"Monster2": 4033010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033003,
"Name": "反相",
"Desc": "敌方目标每次受到攻击时,都会对攻击者造成相当于敌方目标<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>攻击力的物理伤害,该伤害不致命。",
"Param": [
0.40000000037252903
]
},
{
"Id": 3033004,
"Name": "守护",
"Desc": "所有非精英敌方目标不会被削减生命值和韧性,且效果抵抗提高<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>。当所有精英敌方目标被消灭时,剩余敌方目标也会被消灭。",
"Param": [
1
]
}
],
"InfiniteList": {
"305010131": {
"InfiniteWaveID": 305010131,
"MonsterGroupIDList": [
4032050,
4033010,
4032010,
4032050
],
"MaxMonsterCount": 4,
"MaxTeammateCount": 4,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 342
},
"305010132": {
"InfiniteWaveID": 305010132,
"MonsterGroupIDList": [
4033010,
4033030,
4033010
],
"MaxMonsterCount": 3,
"MaxTeammateCount": 3,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 342
}
}
}
],
"BossLevel": {
"Id": 104,
"Name": "将杀王棋",
"DamageType": [
"Physical",
"Ice",
"Quantum"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
4044010
],
"EventIDList": [
{
"StageID": 30501021,
"StageType": "Challenge",
"StageName": 7318916243052571000,
"HardLevelGroup": 3,
"Level": 100,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501021"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30503"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4023010,
"Monster1": 4023020
},
{
"$type": "StageMonsterWave",
"Monster0": 4044010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033010,
"Name": "反相+",
"Desc": "敌方目标每次受到攻击时,都会对攻击者造成相当于敌方目标<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>攻击力的物理伤害,该伤害不致命。",
"Param": [
0.6000000005587935
]
},
{
"Id": 3033005,
"Name": "吸能",
"Desc": "敌方目标每次受到攻击时都会使攻击者能量降低<color=#f29e38ff><unbreak>#1[i]</unbreak></color>点,但攻击者能量达到上限时不会降低;敌方目标被消灭时固定恢复攻击者<color=#f29e38ff><unbreak>#2[i]</unbreak></color>点能量。",
"Param": [
2,
10
]
},
{
"Id": 3033017,
"Name": "龟裂",
"Desc": "我方目标受到敌方攻击时会被施加【龟裂】效果,每层使持有者受到的伤害提高<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>,最多叠加<color=#f29e38ff><unbreak>#2[i]</unbreak></color>层,该效果不可驱散。持有【龟裂】的目标获得除自身外的友方目标施加的护盾效果或治疗后,双方均解除<color=#f29e38ff><unbreak>#3[i]</unbreak></color>层该效果。",
"Param": [
0.060000000055879354,
10,
3
]
}
],
"InfiniteList": {
"305010211": {
"InfiniteWaveID": 305010211,
"MonsterGroupIDList": [
4023010,
4023020
],
"MaxMonsterCount": 2,
"MaxTeammateCount": 2,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 343
},
"305010212": {
"InfiniteWaveID": 305010212,
"MonsterGroupIDList": [
4044010
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 343
}
}
},
"BossConfig": {
"HardName": "将杀王棋•绝境",
"BuffList": [
{
"Id": 3033006,
"Name": "出奇制胜",
"Desc": "队伍中当前在场的我方目标数量不等于4时提升我方全体<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>伤害。",
"Param": [
0.6000000005587935
]
},
{
"Id": 3033007,
"Name": "步骑协同",
"Desc": "我方全体释放终结技时无视目标<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>防御,终结技造成伤害后,下一次战技无视目标<color=#f29e38ff><unbreak>#2[i]%</unbreak></color>防御。",
"Param": [
0.40000000037252903,
0.40000000037252903
]
},
{
"Id": 3033008,
"Name": "锤砧战术",
"Desc": "获得除自身外的友方目标施加的护盾效果或治疗后,自身受到的伤害降低<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>,同时全属性抗性穿透提升<color=#f29e38ff><unbreak>#2[i]%</unbreak></color>,持续<color=#f29e38ff><unbreak>#3[i]</unbreak></color>回合。",
"Param": [
0.25000000023283064,
0.20000000018626451,
2
]
}
],
"EventIDList": [
{
"StageID": 30501022,
"StageType": "Challenge",
"StageName": 7318916243052571000,
"HardLevelGroup": 3,
"Level": 120,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501022"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30504"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4023010,
"Monster1": 4023020
},
{
"$type": "StageMonsterWave",
"Monster0": 4044010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033014,
"Name": "反相++",
"Desc": "敌方目标每次受到攻击时,都会对攻击者造成相当于敌方目标<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>攻击力的物理伤害,该伤害不致命。",
"Param": [
0.8000000007450581
]
},
{
"Id": 3033013,
"Name": "吸能++",
"Desc": "敌方目标每次受到攻击时都会使攻击者能量降低<color=#f29e38ff><unbreak>#1[i]</unbreak></color>点,但攻击者能量达到上限时不会降低;敌方目标被消灭时固定恢复攻击者<color=#f29e38ff><unbreak>#2[i]</unbreak></color>点能量。",
"Param": [
4,
10
]
},
{
"Id": 3033019,
"Name": "龟裂++",
"Desc": "我方目标受到敌方攻击时会被施加【龟裂++】效果,每层使持有者受到的伤害提高<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>,最多叠加<color=#f29e38ff><unbreak>#2[i]</unbreak></color>层,该效果不可驱散。持有【龟裂++】的目标获得除自身外的友方目标施加的护盾效果或治疗后,双方均解除<color=#f29e38ff><unbreak>#3[i]</unbreak></color>层该效果。",
"Param": [
0.12000000011175871,
10,
3
]
}
],
"InfiniteList": {
"305010221": {
"InfiniteWaveID": 305010221,
"MonsterGroupIDList": [
4023010,
4023020
],
"MaxMonsterCount": 2,
"MaxTeammateCount": 2,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 344
},
"305010222": {
"InfiniteWaveID": 305010222,
"MonsterGroupIDList": [
4044010
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 344
}
}
}
}
}

593
data/peak.en.json Normal file
View File

@@ -0,0 +1,593 @@
{
"1": {
"Id": 1,
"Name": "Intellitron Endgame",
"PreLevel": [
{
"Id": 101,
"Name": "Knight (I)",
"DamageType": [
"Fire",
"Imaginary"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
3003041
],
"EventIDList": [
{
"StageID": 30501011,
"StageType": "Challenge",
"StageName": 14930047325621619000,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501011"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 3012020,
"Monster1": 3013010,
"Monster2": 3013010,
"Monster3": 3012020
},
{
"$type": "StageMonsterWave",
"Monster0": 3004012
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033001,
"Name": "Resilient Armor",
"Desc": "Enemy target initially has <color=#f29e38ff><unbreak>#1[i]</unbreak></color> stacks of \"Resilient Armor\", and each stack reduces damage taken by <color=#f29e38ff><unbreak>#2[i]%</unbreak></color>. Enemy targets lose 1 stack of \"Resilient Armor\" each time their Toughness is reduced to 0.",
"Param": [
2,
0.1500000001396984
]
}
],
"InfiniteList": {
"305010111": {
"InfiniteWaveID": 305010111,
"MonsterGroupIDList": [
3012020,
3013010,
3013010,
3012020
],
"MaxMonsterCount": 4,
"MaxTeammateCount": 4,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 340
},
"305010112": {
"InfiniteWaveID": 305010112,
"MonsterGroupIDList": [
3004012
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 340
}
}
},
{
"Id": 102,
"Name": "Knight (II)",
"DamageType": [
"Physical",
"Wind",
"Thunder"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
3014020
],
"EventIDList": [
{
"StageID": 30501012,
"StageType": "Challenge",
"StageName": 4641986684160114000,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501012"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4053010,
"Monster1": 4053010
},
{
"$type": "StageMonsterWave",
"Monster0": 3014020
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033002,
"Name": "Tempering",
"Desc": "For every 1% HP the enemy target loses, CRIT DMG dealt to them is reduced by <color=#f29e38ff><unbreak>#1[i]%</unbreak></color>.",
"Param": [
0.030000000027939677
]
}
],
"InfiniteList": {
"305010121": {
"InfiniteWaveID": 305010121,
"MonsterGroupIDList": [
4052010,
4053010,
4052010,
4052010,
4053010
],
"MaxMonsterCount": 5,
"MaxTeammateCount": 3,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 341
},
"305010122": {
"InfiniteWaveID": 305010122,
"MonsterGroupIDList": [
3014020
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 341
}
}
},
{
"Id": 103,
"Name": "Knight (III)",
"DamageType": [
"Physical",
"Ice",
"Quantum"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
4033030
],
"EventIDList": [
{
"StageID": 30501013,
"StageType": "Challenge",
"StageName": 1605669051038619400,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501013"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4032050,
"Monster1": 4033010,
"Monster2": 4032010,
"Monster3": 4032050
},
{
"$type": "StageMonsterWave",
"Monster0": 4033010,
"Monster1": 4033030,
"Monster2": 4033010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033003,
"Name": "Inversion",
"Desc": "Each time an enemy target receives an attack, they deal Physical DMG equal to <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> of their ATK to the attacker. This damage is non-fatal.",
"Param": [
0.40000000037252903
]
},
{
"Id": 3033004,
"Name": "Under Protection",
"Desc": "All non-elite enemy targets won't have their HP and Toughness reduced, and increases their Effect RES by <color=#f29e38ff><unbreak>#1[i]%</unbreak></color>. When all elite enemy targets are defeated, remaining enemy targets will also be eliminated.",
"Param": [
1
]
}
],
"InfiniteList": {
"305010131": {
"InfiniteWaveID": 305010131,
"MonsterGroupIDList": [
4032050,
4033010,
4032010,
4032050
],
"MaxMonsterCount": 4,
"MaxTeammateCount": 4,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 342
},
"305010132": {
"InfiniteWaveID": 305010132,
"MonsterGroupIDList": [
4033010,
4033030,
4033010
],
"MaxMonsterCount": 3,
"MaxTeammateCount": 3,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 342
}
}
}
],
"BossLevel": {
"Id": 104,
"Name": "Checkmate",
"DamageType": [
"Physical",
"Ice",
"Quantum"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
4044010
],
"EventIDList": [
{
"StageID": 30501021,
"StageType": "Challenge",
"StageName": 7318916243052571000,
"HardLevelGroup": 3,
"Level": 100,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501021"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30503"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4023010,
"Monster1": 4023020
},
{
"$type": "StageMonsterWave",
"Monster0": 4044010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033010,
"Name": "Inversion+",
"Desc": "Each time an enemy target receives an attack, they deal Physical DMG equal to <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> of their ATK to the attacker. This damage is non-fatal.",
"Param": [
0.6000000005587935
]
},
{
"Id": 3033005,
"Name": "Energy Absorption",
"Desc": "When an enemy target receives an attack, reduces the attacker's Energy by <color=#f29e38ff><unbreak>#1[i]</unbreak></color> points, except when the attacker's Energy is maxed. When an enemy target is defeated, the attacker regenerates <color=#f29e38ff><unbreak>#2[i]</unbreak></color> Energy.",
"Param": [
2,
10
]
},
{
"Id": 3033017,
"Name": "Sunder",
"Desc": "When ally targets are being attacked by enemies, the \"Sunder\" effect will be inflicted on them. Each stack increases the DMG received by the holders by <color=#f29e38ff><unbreak>#1[i]%</unbreak></color>, stacking up to <color=#f29e38ff><unbreak>#2[i]</unbreak></color> times. This effect cannot be dissipated. After targets with \"Sunder\" received a Shield from an ally target other than themselves or healing, <color=#f29e38ff><unbreak>#3[i]</unbreak></color> stack(s) of the effect is dispelled on both targets.",
"Param": [
0.060000000055879354,
10,
3
]
}
],
"InfiniteList": {
"305010211": {
"InfiniteWaveID": 305010211,
"MonsterGroupIDList": [
4023010,
4023020
],
"MaxMonsterCount": 2,
"MaxTeammateCount": 2,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 343
},
"305010212": {
"InfiniteWaveID": 305010212,
"MonsterGroupIDList": [
4044010
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 343
}
}
},
"BossConfig": {
"HardName": "Checkmate: Zugzwang",
"BuffList": [
{
"Id": 3033006,
"Name": "Think Outside the Box",
"Desc": "When the number of ally targets currently on the field is not equal to 4, increases all allies' DMG by <color=#f29e38ff><unbreak>#1[i]%</unbreak></color>.",
"Param": [
0.6000000005587935
]
},
{
"Id": 3033007,
"Name": "Infantry and Calvary",
"Desc": "When all allies release their Ultimate, ignore <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> of target's DEF. After Ultimate deals damage, the next Skill will ignore <color=#f29e38ff><unbreak>#2[i]%</unbreak></color> of target's DEF.",
"Param": [
0.40000000037252903,
0.40000000037252903
]
},
{
"Id": 3033008,
"Name": "Hammer and Anvil",
"Desc": "After receiving Shield effects or healing from friendly targets (excluding this unit), damage taken is reduced by <color=#f29e38ff><unbreak>#1[i]%</unbreak></color>, and increases All-Type RES penetration by <color=#f29e38ff><unbreak>#2[i]%</unbreak></color> for <color=#f29e38ff><unbreak>#3[i]</unbreak></color> turns.",
"Param": [
0.25000000023283064,
0.20000000018626451,
2
]
}
],
"EventIDList": [
{
"StageID": 30501022,
"StageType": "Challenge",
"StageName": 7318916243052571000,
"HardLevelGroup": 3,
"Level": 120,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501022"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30504"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4023010,
"Monster1": 4023020
},
{
"$type": "StageMonsterWave",
"Monster0": 4044010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033014,
"Name": "Inversion++",
"Desc": "Each time an enemy target receives an attack, they deal Physical DMG equal to <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> of their ATK to the attacker. This damage is non-fatal.",
"Param": [
0.8000000007450581
]
},
{
"Id": 3033013,
"Name": "Energy Absorption++",
"Desc": "When an enemy target receives an attack, reduces the attacker's Energy by <color=#f29e38ff><unbreak>#1[i]</unbreak></color> points, except when the attacker's Energy is maxed. When an enemy target is defeated, the attacker regenerates <color=#f29e38ff><unbreak>#2[i]</unbreak></color> Energy.",
"Param": [
4,
10
]
},
{
"Id": 3033019,
"Name": "Sunder++",
"Desc": "When ally targets are being attacked by enemies, the \"Sunder++\" effect will be inflicted on them. Each stack increases the DMG received by the holders by <color=#f29e38ff><unbreak>#1[i]%</unbreak></color>, stacking up to <color=#f29e38ff><unbreak>#2[i]</unbreak></color> times. This effect cannot be dissipated. After targets with \"Sunder++\" received a Shield from an ally target other than themselves or healing, <color=#f29e38ff><unbreak>#3[i]</unbreak></color> stack(s) of the effect is dispelled on both targets.",
"Param": [
0.12000000011175871,
10,
3
]
}
],
"InfiniteList": {
"305010221": {
"InfiniteWaveID": 305010221,
"MonsterGroupIDList": [
4023010,
4023020
],
"MaxMonsterCount": 2,
"MaxTeammateCount": 2,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 344
},
"305010222": {
"InfiniteWaveID": 305010222,
"MonsterGroupIDList": [
4044010
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 344
}
}
}
}
}

593
data/peak.jp.json Normal file
View File

@@ -0,0 +1,593 @@
{
"1": {
"Id": 1,
"Name": "オムニックの終局",
"PreLevel": [
{
"Id": 101,
"Name": "ナイト(一)",
"DamageType": [
"Fire",
"Imaginary"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
3003041
],
"EventIDList": [
{
"StageID": 30501011,
"StageType": "Challenge",
"StageName": 14930047325621619000,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501011"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 3012020,
"Monster1": 3013010,
"Monster2": 3013010,
"Monster3": 3012020
},
{
"$type": "StageMonsterWave",
"Monster0": 3004012
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033001,
"Name": "靭甲",
"Desc": "敵は初期状態で「靭甲」を<color=#f29e38ff><unbreak>#1[i]</unbreak></color>層持ち、1層につき敵の受けるダメージ-<color=#f29e38ff><unbreak>#2[i]%</unbreak></color>。敵の靭性が0になるたびに「靭甲」が1層減少する。",
"Param": [
2,
0.1500000001396984
]
}
],
"InfiniteList": {
"305010111": {
"InfiniteWaveID": 305010111,
"MonsterGroupIDList": [
3012020,
3013010,
3013010,
3012020
],
"MaxMonsterCount": 4,
"MaxTeammateCount": 4,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 340
},
"305010112": {
"InfiniteWaveID": 305010112,
"MonsterGroupIDList": [
3004012
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 340
}
}
},
{
"Id": 102,
"Name": "ナイト(二)",
"DamageType": [
"Physical",
"Wind",
"Thunder"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
3014020
],
"EventIDList": [
{
"StageID": 30501012,
"StageType": "Challenge",
"StageName": 4641986684160114000,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501012"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4053010,
"Monster1": 4053010
},
{
"$type": "StageMonsterWave",
"Monster0": 3014020
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033002,
"Name": "焼入れ",
"Desc": "敵のHPが1%減少するにつき、味方がその敵に与える会心ダメージ-<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>。",
"Param": [
0.030000000027939677
]
}
],
"InfiniteList": {
"305010121": {
"InfiniteWaveID": 305010121,
"MonsterGroupIDList": [
4052010,
4053010,
4052010,
4052010,
4053010
],
"MaxMonsterCount": 5,
"MaxTeammateCount": 3,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 341
},
"305010122": {
"InfiniteWaveID": 305010122,
"MonsterGroupIDList": [
3014020
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 341
}
}
},
{
"Id": 103,
"Name": "ナイト(三)",
"DamageType": [
"Physical",
"Ice",
"Quantum"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
4033030
],
"EventIDList": [
{
"StageID": 30501013,
"StageType": "Challenge",
"StageName": 1605669051038619400,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501013"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4032050,
"Monster1": 4033010,
"Monster2": 4032010,
"Monster3": 4032050
},
{
"$type": "StageMonsterWave",
"Monster0": 4033010,
"Monster1": 4033030,
"Monster2": 4033010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033003,
"Name": "反相",
"Desc": "敵が攻撃を受けるたびに、攻撃者に自身の攻撃力<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>分の物理属性ダメージを与える。このダメージは非致死性である。",
"Param": [
0.40000000037252903
]
},
{
"Id": 3033004,
"Name": "守護",
"Desc": "精鋭エネミー以外の敵のHPと靭性は減少せず、効果抵抗+<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>。すべての精鋭エネミーが倒されると、ほかの敵も倒される。",
"Param": [
1
]
}
],
"InfiniteList": {
"305010131": {
"InfiniteWaveID": 305010131,
"MonsterGroupIDList": [
4032050,
4033010,
4032010,
4032050
],
"MaxMonsterCount": 4,
"MaxTeammateCount": 4,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 342
},
"305010132": {
"InfiniteWaveID": 305010132,
"MonsterGroupIDList": [
4033010,
4033030,
4033010
],
"MaxMonsterCount": 3,
"MaxTeammateCount": 3,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 342
}
}
}
],
"BossLevel": {
"Id": 104,
"Name": "チェックメイト",
"DamageType": [
"Physical",
"Ice",
"Quantum"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
4044010
],
"EventIDList": [
{
"StageID": 30501021,
"StageType": "Challenge",
"StageName": 7318916243052571000,
"HardLevelGroup": 3,
"Level": 100,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501021"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30503"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4023010,
"Monster1": 4023020
},
{
"$type": "StageMonsterWave",
"Monster0": 4044010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033010,
"Name": "反相+",
"Desc": "敵が攻撃を受けるたびに、攻撃者に自身の攻撃力<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>分の物理属性ダメージを与える。このダメージは非致死性である。",
"Param": [
0.6000000005587935
]
},
{
"Id": 3033005,
"Name": "エネルギー吸収",
"Desc": "敵が攻撃を受けるたびに、攻撃者のEP-<color=#f29e38ff><unbreak>#1[i]</unbreak></color>。ただし、攻撃者のEPが満タンの場合はEPは減らない。敵が倒された時、攻撃者のEPを固定で<color=#f29e38ff><unbreak>#2[i]</unbreak></color>回復する。",
"Param": [
2,
10
]
},
{
"Id": 3033017,
"Name": "亀裂",
"Desc": "味方が敵の攻撃を受ける時、「亀裂」効果が付与され、1層につき受けるダメージ+<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>、この効果は最大で<color=#f29e38ff><unbreak>#2[i]</unbreak></color>層累積できる。この効果は解除不能であり、「亀裂」を持つターゲットは自身以外の味方によるバリアを獲得、または治癒を受けた後、自身とその味方はこの効果を<color=#f29e38ff><unbreak>#3[i]</unbreak></color>層解除する。",
"Param": [
0.060000000055879354,
10,
3
]
}
],
"InfiniteList": {
"305010211": {
"InfiniteWaveID": 305010211,
"MonsterGroupIDList": [
4023010,
4023020
],
"MaxMonsterCount": 2,
"MaxTeammateCount": 2,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 343
},
"305010212": {
"InfiniteWaveID": 305010212,
"MonsterGroupIDList": [
4044010
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 343
}
}
},
"BossConfig": {
"HardName": "チェックメイト・絶境",
"BuffList": [
{
"Id": 3033006,
"Name": "奇策勝ち",
"Desc": "フィールド上にいる味方の数が4でない場合、味方全体のダメージ+<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>。",
"Param": [
0.6000000005587935
]
},
{
"Id": 3033007,
"Name": "歩騎連携",
"Desc": "味方が必殺技を発動する時、ターゲットの防御力を<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>無視する。必殺技でダメージを与えた後、次に発動する戦闘スキルはターゲットの防御力を<color=#f29e38ff><unbreak>#2[i]%</unbreak></color>無視する。",
"Param": [
0.40000000037252903,
0.40000000037252903
]
},
{
"Id": 3033008,
"Name": "鉄床戦術",
"Desc": "自身以外の味方によるバリアを獲得、または治癒を受けた後、受けるダメージ-<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>。同時に全属性耐性貫通+<color=#f29e38ff><unbreak>#2[i]%</unbreak></color>、<color=#f29e38ff><unbreak>#3[i]</unbreak></color>ターン継続。",
"Param": [
0.25000000023283064,
0.20000000018626451,
2
]
}
],
"EventIDList": [
{
"StageID": 30501022,
"StageType": "Challenge",
"StageName": 7318916243052571000,
"HardLevelGroup": 3,
"Level": 120,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501022"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30504"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4023010,
"Monster1": 4023020
},
{
"$type": "StageMonsterWave",
"Monster0": 4044010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033014,
"Name": "反相++",
"Desc": "敵が攻撃を受けるたびに、攻撃者に自身の攻撃力<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>分の物理属性ダメージを与える。このダメージは非致死性である。",
"Param": [
0.8000000007450581
]
},
{
"Id": 3033013,
"Name": "エネルギー吸収++",
"Desc": "敵が攻撃を受けるたびに、攻撃者のEP-<color=#f29e38ff><unbreak>#1[i]</unbreak></color>。ただし、攻撃者のEPが満タンの場合はEPは減らない。敵が倒された時、攻撃者のEPを固定で<color=#f29e38ff><unbreak>#2[i]</unbreak></color>回復する。",
"Param": [
4,
10
]
},
{
"Id": 3033019,
"Name": "亀裂++",
"Desc": "味方が敵の攻撃を受ける時、「亀裂++」効果が付与され、1層につき受けるダメージ+<color=#f29e38ff><unbreak>#1[i]%</unbreak></color>、この効果は最大で<color=#f29e38ff><unbreak>#2[i]</unbreak></color>層累積できる。この効果は解除不能であり、「亀裂++」を持つターゲットは自身以外の味方によるバリアを獲得、または治癒を受けた後、自身とその味方はこの効果を<color=#f29e38ff><unbreak>#3[i]</unbreak></color>層解除する。",
"Param": [
0.12000000011175871,
10,
3
]
}
],
"InfiniteList": {
"305010221": {
"InfiniteWaveID": 305010221,
"MonsterGroupIDList": [
4023010,
4023020
],
"MaxMonsterCount": 2,
"MaxTeammateCount": 2,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 344
},
"305010222": {
"InfiniteWaveID": 305010222,
"MonsterGroupIDList": [
4044010
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 344
}
}
}
}
}

593
data/peak.kr.json Normal file
View File

@@ -0,0 +1,593 @@
{
"1": {
"Id": 1,
"Name": "지능 기계 종반전",
"PreLevel": [
{
"Id": 101,
"Name": "나이트•1",
"DamageType": [
"Fire",
"Imaginary"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
3003041
],
"EventIDList": [
{
"StageID": 30501011,
"StageType": "Challenge",
"StageName": 14930047325621619000,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501011"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 3012020,
"Monster1": 3013010,
"Monster2": 3013010,
"Monster3": 3012020
},
{
"$type": "StageMonsterWave",
"Monster0": 3004012
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033001,
"Name": "단단한 갑옷",
"Desc": "적은 기본 상태에서 [단단한 갑옷]을 <color=#f29e38ff><unbreak>#1[i]</unbreak></color>스택 보유하며, 스택마다 적이 받는 피해가 <color=#f29e38ff><unbreak>#2[i]%</unbreak></color> 감소한다. 적의 강인성이 0으로 감소할 때마다 [단단한 갑옷]이 1스택 감소한다",
"Param": [
2,
0.1500000001396984
]
}
],
"InfiniteList": {
"305010111": {
"InfiniteWaveID": 305010111,
"MonsterGroupIDList": [
3012020,
3013010,
3013010,
3012020
],
"MaxMonsterCount": 4,
"MaxTeammateCount": 4,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 340
},
"305010112": {
"InfiniteWaveID": 305010112,
"MonsterGroupIDList": [
3004012
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 340
}
}
},
{
"Id": 102,
"Name": "나이트•2",
"DamageType": [
"Physical",
"Wind",
"Thunder"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
3014020
],
"EventIDList": [
{
"StageID": 30501012,
"StageType": "Challenge",
"StageName": 4641986684160114000,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501012"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4053010,
"Monster1": 4053010
},
{
"$type": "StageMonsterWave",
"Monster0": 3014020
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033002,
"Name": "담금질",
"Desc": "적의 HP가 1% 감소할 때마다 아군이 대상에게 가하는 치명타 피해가 <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> 감소한다",
"Param": [
0.030000000027939677
]
}
],
"InfiniteList": {
"305010121": {
"InfiniteWaveID": 305010121,
"MonsterGroupIDList": [
4052010,
4053010,
4052010,
4052010,
4053010
],
"MaxMonsterCount": 5,
"MaxTeammateCount": 3,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 341
},
"305010122": {
"InfiniteWaveID": 305010122,
"MonsterGroupIDList": [
3014020
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 341
}
}
},
{
"Id": 103,
"Name": "나이트•3",
"DamageType": [
"Physical",
"Ice",
"Quantum"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
4033030
],
"EventIDList": [
{
"StageID": 30501013,
"StageType": "Challenge",
"StageName": 1605669051038619400,
"HardLevelGroup": 3,
"Level": 95,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501013"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30502"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4032050,
"Monster1": 4033010,
"Monster2": 4032010,
"Monster3": 4032050
},
{
"$type": "StageMonsterWave",
"Monster0": 4033010,
"Monster1": 4033030,
"Monster2": 4033010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033003,
"Name": "반상",
"Desc": "적이 피격될 때마다 공격자에게 적 공격력의 <color=#f29e38ff><unbreak>#1[i]%</unbreak></color>만큼 물리 피해를 가한다. 해당 피해는 비치명적이다",
"Param": [
0.40000000037252903
]
},
{
"Id": 3033004,
"Name": "수호",
"Desc": "모든 비정예 적의 HP와 강인성이 감소하지 않으며, 효과 저항이 <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> 증가한다. 모든 정예 적이 처치되면 남은 적도 함께 처치된다",
"Param": [
1
]
}
],
"InfiniteList": {
"305010131": {
"InfiniteWaveID": 305010131,
"MonsterGroupIDList": [
4032050,
4033010,
4032010,
4032050
],
"MaxMonsterCount": 4,
"MaxTeammateCount": 4,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 342
},
"305010132": {
"InfiniteWaveID": 305010132,
"MonsterGroupIDList": [
4033010,
4033030,
4033010
],
"MaxMonsterCount": 3,
"MaxTeammateCount": 3,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 342
}
}
}
],
"BossLevel": {
"Id": 104,
"Name": "체크메이트",
"DamageType": [
"Physical",
"Ice",
"Quantum"
],
"MazeGroupID": 8,
"NpcMonsterIDList": [
4044010
],
"EventIDList": [
{
"StageID": 30501021,
"StageType": "Challenge",
"StageName": 7318916243052571000,
"HardLevelGroup": 3,
"Level": 100,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501021"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30503"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4023010,
"Monster1": 4023020
},
{
"$type": "StageMonsterWave",
"Monster0": 4044010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033010,
"Name": "반상+",
"Desc": "적이 피격될 때마다 공격자에게 적 공격력의 <color=#f29e38ff><unbreak>#1[i]%</unbreak></color>만큼 물리 피해를 가한다. 해당 피해는 비치명적이다",
"Param": [
0.6000000005587935
]
},
{
"Id": 3033005,
"Name": "에너지 흡수",
"Desc": "적이 피격될 때마다 공격자의 에너지가 <color=#f29e38ff><unbreak>#1[i]</unbreak></color>pt 감소하지만, 공격자의 에너지가 최대치 도달 시 감소하지 않는다. 적이 처치될 시 공격자의 에너지를 <color=#f29e38ff><unbreak>#2[i]</unbreak></color>pt 고정으로 회복한다",
"Param": [
2,
10
]
},
{
"Id": 3033017,
"Name": "균열",
"Desc": "아군이 적에게 피격될 시 [균열] 효과가 부여되며, 스택마다 보유자가 받는 피해가 <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> 증가하고, 최대 <color=#f29e38ff><unbreak>#2[i]</unbreak></color>스택 중첩되며, 해당 효과는 제거할 수 없다. [균열]을 보유한 목표가 자신 이외의 아군이 부여한 실드 효과 또는 치유를 받으면 양측 모두 해당 효과를 <color=#f29e38ff><unbreak>#3[i]</unbreak></color>스택 해제한다",
"Param": [
0.060000000055879354,
10,
3
]
}
],
"InfiniteList": {
"305010211": {
"InfiniteWaveID": 305010211,
"MonsterGroupIDList": [
4023010,
4023020
],
"MaxMonsterCount": 2,
"MaxTeammateCount": 2,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 343
},
"305010212": {
"InfiniteWaveID": 305010212,
"MonsterGroupIDList": [
4044010
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 343
}
}
},
"BossConfig": {
"HardName": "체크메이트•절망",
"BuffList": [
{
"Id": 3033006,
"Name": "기묘한 승리의 전술",
"Desc": "파티 내 현재 필드에 있는 아군의 수가 4명이 아닐 시, 모든 아군의 피해가 <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> 증가한다",
"Param": [
0.6000000005587935
]
},
{
"Id": 3033007,
"Name": "기보 협공",
"Desc": "모든 아군이 필살기 발동 시 목표의 방어력을 <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> 무시하며, 필살기로 피해를 가한 후 다음 전투 스킬이 목표의 방어력을 <color=#f29e38ff><unbreak>#2[i]%</unbreak></color> 무시한다",
"Param": [
0.40000000037252903,
0.40000000037252903
]
},
{
"Id": 3033008,
"Name": "망치와 모루 전술",
"Desc": "자신을 제외한 아군이 부여한 실드 효과 또는 치유를 받으면 자신이 받는 피해가 <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> 감소하고, 동시에 모든 속성 저항 관통이 <color=#f29e38ff><unbreak>#2[i]%</unbreak></color> 증가한다, 지속 시간: <color=#f29e38ff><unbreak>#3[i]</unbreak></color>턴",
"Param": [
0.25000000023283064,
0.20000000018626451,
2
]
}
],
"EventIDList": [
{
"StageID": 30501022,
"StageType": "Challenge",
"StageName": 7318916243052571000,
"HardLevelGroup": 3,
"Level": 120,
"LevelGraphPath": "Config/Level/StageCommonTemplate.json",
"StageAbilityConfig": [],
"SubLevelGraphs": [],
"StageConfigData": [
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_Wave",
"MOJJBFBKBNC": "2"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_IsEliteBattle",
"MOJJBFBKBNC": "1"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_StageInfiniteGroup",
"MOJJBFBKBNC": "30501022"
},
{
"$type": "ILKEMJNAEKE",
"JDKAMOANICM": "_CreateBattleEvent",
"MOJJBFBKBNC": "30504"
}
],
"MonsterList": [
{
"$type": "StageMonsterWave",
"Monster0": 4023010,
"Monster1": 4023020
},
{
"$type": "StageMonsterWave",
"Monster0": 4044010
}
],
"LevelLoseCondition": [],
"LevelWinCondition": [],
"Release": true,
"ForbidExitBattle": true,
"MonsterWarningRatio": 1.1000000238419,
"TrialAvatarList": []
}
],
"TagList": [
{
"Id": 3033014,
"Name": "반상++",
"Desc": "적이 피격될 때마다 공격자에게 적 공격력의 <color=#f29e38ff><unbreak>#1[i]%</unbreak></color>만큼 물리 피해를 가한다. 해당 피해는 비치명적이다",
"Param": [
0.8000000007450581
]
},
{
"Id": 3033013,
"Name": "에너지 흡수++",
"Desc": "적이 피격될 때마다 공격자의 에너지가 <color=#f29e38ff><unbreak>#1[i]</unbreak></color>pt 감소하지만, 공격자의 에너지가 최대치 도달 시 감소하지 않는다. 적이 처치될 시 공격자의 에너지를 <color=#f29e38ff><unbreak>#2[i]</unbreak></color>pt 고정으로 회복한다",
"Param": [
4,
10
]
},
{
"Id": 3033019,
"Name": "균열++",
"Desc": "아군이 적에게 피격될 시 [균열] 효과가 부여되며, 스택마다 보유자가 받는 피해가 <color=#f29e38ff><unbreak>#1[i]%</unbreak></color> 증가하고, 최대 <color=#f29e38ff><unbreak>#2[i]</unbreak></color>스택 중첩되며, 해당 효과는 제거할 수 없다. [균열++]을 보유한 목표가 자신 이외의 아군이 부여한 실드 효과 또는 치유를 받으면 양측 모두 해당 효과를 <color=#f29e38ff><unbreak>#3[i]</unbreak></color>스택 해제한다",
"Param": [
0.12000000011175871,
10,
3
]
}
],
"InfiniteList": {
"305010221": {
"InfiniteWaveID": 305010221,
"MonsterGroupIDList": [
4023010,
4023020
],
"MaxMonsterCount": 2,
"MaxTeammateCount": 2,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 344
},
"305010222": {
"InfiniteWaveID": 305010222,
"MonsterGroupIDList": [
4044010
],
"MaxMonsterCount": 1,
"MaxTeammateCount": 1,
"Ability": "",
"ParamList": [],
"ClearPreviousAbility": true,
"EliteGroup": 344
}
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -35,6 +35,15 @@
"Desc": "在战斗开始时立即为我方恢复1个战技点。",
"ParamList": []
}
},
"Bonus": {
"2": [
{
"type": "HealRatioBase",
"value": 0.10000000149011612
}
],
"4": []
}
},
"102": {
@@ -76,6 +85,20 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
]
}
},
"103": {
@@ -116,6 +139,15 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "DefenceAddedRatio",
"value": 0.15000000596046448
}
],
"4": []
}
},
"104": {
@@ -157,6 +189,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "IceAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"105": {
@@ -198,6 +239,15 @@
5
]
}
},
"Bonus": {
"2": [
{
"type": "PhysicalAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"106": {
@@ -240,6 +290,10 @@
5
]
}
},
"Bonus": {
"2": [],
"4": []
}
},
"107": {
@@ -281,6 +335,15 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "FireAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"108": {
@@ -322,6 +385,15 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "QuantumAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"109": {
@@ -363,6 +435,15 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "ThunderAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"110": {
@@ -403,6 +484,15 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": [
{
"type": "WindAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"111": {
@@ -444,6 +534,20 @@
3
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
],
"4": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
]
}
},
"112": {
@@ -485,6 +589,15 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "ImaginaryAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"113": {
@@ -527,6 +640,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "HPAddedRatio",
"value": 0.119999997317791
}
],
"4": []
}
},
"114": {
@@ -568,6 +690,15 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
],
"4": []
}
},
"115": {
@@ -610,6 +741,10 @@
3
]
}
},
"Bonus": {
"2": [],
"4": []
}
},
"116": {
@@ -651,6 +786,15 @@
3
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": []
}
},
"117": {
@@ -696,6 +840,15 @@
1
]
}
},
"Bonus": {
"2": [],
"4": [
{
"type": "CriticalChanceBase",
"value": 0.03999999910593033
}
]
}
},
"118": {
@@ -737,6 +890,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
],
"4": []
}
},
"119": {
@@ -780,6 +942,15 @@
0.1500000001396984
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
],
"4": []
}
},
"120": {
@@ -822,6 +993,20 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": [
{
"type": "CriticalChanceBase",
"value": 0.05999999865889549
}
]
}
},
"121": {
@@ -864,6 +1049,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
],
"4": []
}
},
"122": {
@@ -905,6 +1099,15 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.07999999821186066
}
],
"4": []
}
},
"123": {
@@ -947,6 +1150,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": []
}
},
"124": {
@@ -992,6 +1204,20 @@
0.0800000000745058
]
}
},
"Bonus": {
"2": [
{
"type": "QuantumAddedRatio",
"value": 0.10000000149011612
}
],
"4": [
{
"type": "SpeedAddedRatio",
"value": -0.07999999821186066
}
]
}
},
"125": {
@@ -1034,6 +1260,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
],
"4": []
}
},
"126": {
@@ -1076,6 +1311,121 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
],
"4": []
}
},
"127": {
"Name": "再创天地的救世主",
"Icon": "SpriteOutput/ItemIcon/71048.png",
"Parts": {
"31271": {
"Name": "救世主的登程风帽",
"Desc": "传说中救世主遮风避雨时会使用的风帽,实际穿着可能与吟游诗人的描述不同。",
"Story": "欧洛尼斯的夜雾缠绕月桂树枝,\\n救世的英雄随着黑匣一同自天外降临命运重渊。\\n\\n{F#她}{M#他}应神谕而来,然而那时祭司们却畏惧着谈论天外。\\n<i>「切莫高声谈论天空,那多疑的艾格勒从不犹疑降下阳雷的责罚。」</i>\\n听罢这番话自信的救世主怒气咻咻答道\\n<i>「灾难的预卜者,你从未考虑过,神明也应担忧来自人子的责罚。」</i>\\n\\n在城垣之上救世主见证玫瑰色的黎明在地平线上升起\\n<i>「首先是那执掌『纷争』的尼卡多利,</i>\\n<i>我祈求它能为自己带来荣耀,而并非疯狂。」</i>\\n救世主摘开风帽将一柄长枪掷出\\n那迅驰的飞影好似初春的独狼冲向了悬锋城在街巷间奔突。\\n\\n<i>「以墨涅塔之名!若命运纺线已断,我会重续篇章。」</i>\\n远方响起了疯王的怒吼那长枪先于脚步宣告了启程。\\n<i>「那与我为伴的黄金裔伙伴将在旅程中等候,我必须出发了。」</i>\\n\\n雅努斯祭司们望向救世主披散的灰发高声欢呼\\n就像得到滋养的干枯草种一般欢欣。"
},
"31272": {
"Name": "救世主的执剑护手",
"Desc": "传说中救世主披荆斩棘时会穿戴的护手,实际穿着可能与吟游诗人的描述不同。",
"Story": "法吉娜的冰海刻蚀着斯缇科西亚的长岸,\\n救世的英雄已来到冥河渡口幽色的巨龙化身为冥府渡船。\\n\\n冥河沿途的亡魂化作甜蜜的低语劝告英雄不必重返世间。\\n<i>「你已经令那世间的泰坦们臣服,将伟业留于你的传承者们如何?」</i>\\n听罢这番话哀伤的救世主痛心疾首地答道\\n<i>「沉沦于此的死者,你从未考虑过,我那救世的愿望胜过团聚的心。」</i>\\n\\n在渡船之上救世主回想起逐火旅程的一幕幕过往\\n<i>「再见了,『死亡』的塞纳托斯,</i>\\n<i>我祈盼你能照顾好我最好的朋友们,哪怕他们从未畏惧死亡。」</i>\\n救世主抚摸着麂皮护手仍然留有故友们的温度\\n从那开满安提宁花的海岸乘着温暖湿润的西风吹向人间。\\n\\n<i>「瑟希斯,请你捍卫我的理性,让我不必再蓦然回首。」</i>\\n那起死回生的经历足以向任何人证明其英雄的资质。\\n<i>「不会再漫长了,我的黄金裔伙伴们,我将兑现那不被磨灭的誓言。」</i>\\n\\n吉奥里亚的大地迎来了{F#她}{M#他}的回归,逐火的旅途继续。\\n就像乌云散去的黑夜启明之星再次闪烁。"
},
"31273": {
"Name": "救世主的传承战袍",
"Desc": "传说中救世主兵刃相接时会披戴的战袍,实际穿着可能与吟游诗人的描述不同。",
"Story": "艾格勒的黑云滚滚蕴压着盛怒,\\n救世的英雄踏上彩虹构筑的桥梁击坠那原本触不可及的天空。\\n\\n与救世的英雄并肩的正是{F#她}{M#他}出生入死的伙伴。\\n<i>「逐火是不断失却的旅途,在那一切当中,生命也微不足惜。」</i>\\n听罢这番话决然的救世主冷静地答道\\n<i>「我早已明白你们的决心,千千万万次,我绝不会背叛它。」</i>\\n\\n奔赴再创世仪式的途中救世主与捍卫归途的战友们逐一告别\\n<i>「那是持续千年的征途与史诗,</i>\\n<i>那是无数前人交予你我,今日必将在此地完成的故事。」</i>\\n最后的搭档将斗篷挂在救世主护肩之上转身面对潮水般的强敌。\\n那是并肩作战的象征既是托付也是传承。\\n\\n<i>「倘若塔兰顿你能听见,如此壮烈的牺牲,值得更好的明天。」</i>\\n<i>「诚然,我等付之一炬——」</i>\\n<i>「只为在创世的史诗中,镌写下开篇的一笔。」</i>\\n\\n在刻法勒温柔的注视下救世主会带着所有的人愿望再创天地——"
},
"31274": {
"Name": "救世主的拓荒长靴",
"Desc": "传说中救世主跋山涉水时会穿戴的长靴,实际穿着可能与吟游诗人的描述不同。",
"Story": "<i>「『黄金之茧』,你将亲眼见证浪漫的终局,重织无瑕的命运。」</i>\\n<i>「『万径之门』,你会敞开万千归途,实现明日相见的预言。」</i>\\n<i>「『裂分之枝』,你埋下那『怀疑』的智种,终将在众人的智慧中发芽。」</i>\\n<i>「『晨昏之眼』,看啊!那天空无缺无隙,尽头便是治愈的虹光。」</i>\\n\\n<i>「归乡吧,『天谴之矛』,你会登上众人簇拥的王座,为世间誓约和平。」</i>\\n<i>「畅所欲言吧,『翻飞之币』,无论是狡黠玩笑,还是真诚言语,你无需隐瞒。」</i>\\n<i>「尽情拥抱吧,『灰黯之手』,冥河的主人……」</i>\\n<i>「你的温柔足以温暖彼岸的花海,人们每次离别都值得重逢的期待。」</i>\\n\\n<i>「世人会听见,『满溢之杯』的歌声在欢宴中不息。」</i>\\n<i>「世人会看见,『永夜之帷』珍藏永不忘却的岁月。」</i>\\n<i>「不朽的『磐岩之脊』将托举众生的远行,直至旅途的终点。」</i> \\n<i>「『公正之秤』将赠予无私的律法,为逐火之旅的万千英杰加冕……」 </i>\\n\\n<i>「『全世之座』 ,不必再孤独地背负起一切。</i>\\n<i>你看,燃烧不灭的烈阳已然升起……」</i>\\n\\n那由遗憾铸就的词句将在重写的诗篇中圆满。\\n那遥不可及的终点将在「开拓」中抵达。"
}
},
"RequireNum": {
"2": {
"Desc": "暴击率提高<unbreak>#1[i]%</unbreak>。",
"ParamList": [
0.0800000000745058
]
},
"4": {
"Desc": "装备者施放普攻或战技后,若装备者的忆灵在场,使装备者及其忆灵生命上限提高<unbreak>#1[i]%</unbreak>,我方全体造成的伤害提高<unbreak>#2[i]%</unbreak>,持续至装备者下次施放普攻或战技后。",
"ParamList": [
0.24000000022351742,
0.0800000000745058
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.0800000000745058
}
],
"4": []
}
},
"128": {
"Name": "自匿星芒的隐士",
"Icon": "SpriteOutput/ItemIcon/71049.png",
"Parts": {
"31281": {
"Name": "隐士的宽檐呢帽",
"Desc": "一顶经典的、宽檐可卷起的软呢帽。在知识分子、艺术家、专业人士中非常流行。",
"Story": "..."
},
"31282": {
"Name": "隐士的简雅腕表",
"Desc": "漂亮的金属编织链带,以及简约的圆形表盘。冷静、精密、工业化;低调、实用、不张扬。",
"Story": "..."
},
"31283": {
"Name": "隐士的驼色夹克",
"Desc": "一件棕色灯芯绒夹克。他常将这件夹克敞开穿,来打破一丝不苟的框架。",
"Story": "..."
},
"31284": {
"Name": "隐士的麂皮软鞋",
"Desc": "出现在不太正式的场合里,更加结实耐磨的皮质高帮系带软鞋。依然可见其优雅的一面。",
"Story": "..."
}
},
"RequireNum": {
"2": {
"Desc": "暴击伤害提高<unbreak>#1[i]%</unbreak>。",
"ParamList": [
0.1600000001490116
]
},
"4": {
"Desc": "使装备者的暴击伤害提高<unbreak>#3[i]%</unbreak>任意我方目标在每回合内首次消耗战技点后恢复1点战技点该效果每场战斗最多触发<unbreak>#1[i]</unbreak>次,后续每个波次开始后恢复<unbreak>#2[i]</unbreak>次可触发次数。恢复战技点的效果在同一队伍中最多生效1个。",
"ParamList": [
1,
1,
0.1600000001490116
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
],
"4": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
]
}
},
"301": {
@@ -1102,6 +1452,14 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
},
"302": {
@@ -1128,6 +1486,14 @@
0.0800000000745058
]
}
},
"Bonus": {
"2": [
{
"type": "HPAddedRatio",
"value": 0.119999997317791
}
]
}
},
"303": {
@@ -1154,6 +1520,14 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": [
{
"type": "StatusProbabilityBase",
"value": 0.10000000149011612
}
]
}
},
"304": {
@@ -1180,6 +1554,14 @@
0.1500000001396984
]
}
},
"Bonus": {
"2": [
{
"type": "DefenceAddedRatio",
"value": 0.15000000596046448
}
]
}
},
"305": {
@@ -1206,6 +1588,14 @@
0.6000000005587935
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
]
}
},
"306": {
@@ -1232,6 +1622,14 @@
0.1500000001396984
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.07999999821186066
}
]
}
},
"307": {
@@ -1258,6 +1656,14 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
]
}
},
"308": {
@@ -1284,6 +1690,14 @@
0.40000000037252903
]
}
},
"Bonus": {
"2": [
{
"type": "SPRatioBase",
"value": 0.05000000074505806
}
]
}
},
"309": {
@@ -1310,6 +1724,14 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.07999999821186066
}
]
}
},
"310": {
@@ -1336,6 +1758,14 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "StatusResistanceBase",
"value": 0.10000000149011612
}
]
}
},
"311": {
@@ -1364,6 +1794,14 @@
0.18000000016763806
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
},
"312": {
@@ -1389,6 +1827,14 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "SPRatioBase",
"value": 0.05000000074505806
}
]
}
},
"313": {
@@ -1415,6 +1861,14 @@
0.0400000000372529
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.03999999910593033
}
]
}
},
"314": {
@@ -1440,6 +1894,14 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
},
"315": {
@@ -1466,6 +1928,9 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": []
}
},
"316": {
@@ -1492,6 +1957,14 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
]
}
},
"317": {
@@ -1517,6 +1990,14 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "SPRatioBase",
"value": 0.05000000074505806
}
]
}
},
"318": {
@@ -1542,6 +2023,14 @@
0.3200000002980232
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
]
}
},
"319": {
@@ -1568,6 +2057,14 @@
0.2800000002607703
]
}
},
"Bonus": {
"2": [
{
"type": "HPAddedRatio",
"value": 0.119999997317791
}
]
}
},
"320": {
@@ -1596,6 +2093,14 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
]
}
},
"321": {
@@ -1623,6 +2128,9 @@
3
]
}
},
"Bonus": {
"2": []
}
},
"322": {
@@ -1637,7 +2145,7 @@
"33226": {
"Name": "酣歌海垠的歌咏步道",
"Desc": "斯缇科西亚人深信海妖如传说中一样以血肉守护此处安乐,而她们终有一日将循着灯塔不竭的歌咏赴约而来,得到永不止息的宴会作为犒赏。",
"Story": "孤独的水手与此前的到访者一样,徘徊在大海与城邦之间,驻足在尘世与欢乐的门槛上。他拭去搁浅的鲸鱼伤口中流溢的油脂,在夜幕时分点亮灯塔,然后在灯光前端坐,用水漫琴弹奏起那些尚未被奏响的歌曲。\\n\\n灯塔随着琴键奏鸣整个斯缇科西亚沉浸在乐曲之中。那些或和缓或急促的曲调激起了斯缇科西亚女王有关享乐的无穷遐想。水手从最后一个休止符开始倒着演奏使曲调诙谐跳跃。于是白色的长船载着杂耍艺人轻巧地穿过河道。盛装的男女拥挤在两岸以金箔和羽毛装饰的假面遮住面庞女王也混迹其间徜徉在丁香和杏仁的香气里。\\n\\n水手整顿节奏使音符急促而激昂。于是以整座城邦为舞台的戏剧中扮演海盗的民众挥舞黑旗攻陷从未设防的城墙劫掠美酒和金币将贵族们送上摆满鲜花的绞刑架然后用王冠给全城乞丐加冕。在谢幕时刻人们将高塔付之一炬再伴着琴声狂舞烂醉如泥。\\n\\n翻涌的海浪打湿乐谱洇开柔和舒缓的音符。女王在灯塔前的迷雾中迈入新的剧本她一袭鱼尾蓝裙出演法吉娜的眷从——海妖们的女王。\\n\\n在故事里海妖们受命在海洋深处抵御尘世难以想象的苦痛以血肉将漆黑的灾厄引入满溢之杯换取斯缇科西亚永世的欢乐。到了那应允的时刻海妖们终将循着灯塔的灯光和弦声沿着堤道步入斯缇科西亚。斯缇科西亚人将执起她们的手一同参加那永不歇止的宴会。\\n\\n斯缇科西亚女王步入水中享受一次想象中的死亡。在那月相无法约束波涛的夜晚大海深处海妖们空心的泪水如泡沫般上升她们期冀她们等待窥探此生未见的月光然后血肉消融。可惜此夜并没有月光只有灯塔明灭如故——泪水代替海妖们升上波光粼粼的海面漂泊的浮沫消散在浪潮之中。\\n\\n孤独的水手得偿所愿。宴饮者眼含幸福的泪水祝贺他得以步入斯缇科西亚当第一声欢歌响起死亡凋敝的羽翼便已经覆盖在这座永世欢乐的城邦之上。"
"Story": "孤独的水手与此前的到访者一样,徘徊在大海与城邦之间,驻足在尘世与欢乐的门槛上。他拭去搁浅的鲸鱼伤口中流溢的油脂,在夜幕时分点亮灯塔,然后在灯光前端坐,用水漫琴弹奏起那些尚未被奏响的歌曲。\\n\\n灯塔随着琴键奏鸣整个斯缇科西亚沉浸在乐曲之中。那些或和缓或急促的曲调激起了斯缇科西亚女王有关享乐的无穷遐想。水手从最后一个休止符开始倒着演奏使曲调诙谐跳跃。于是白色的长船载着杂耍艺人轻巧地穿过河道。盛装的男女拥挤在两岸以金箔和羽毛装饰的假面遮住面庞女王也混迹其间徜徉在丁香和杏仁的香气里。\\n\\n水手整顿节奏使音符急促而激昂。于是以整座城邦为舞台的戏剧中扮演海盗的民众挥舞黑旗攻陷从未设防的城墙劫掠美酒和金币将贵族们送上摆满鲜花的绞刑架然后用王冠给全城乞丐加冕。在谢幕时刻人们将高塔付之一炬再伴着琴声狂舞烂醉如泥。\\n\\n翻涌的海浪打湿乐谱洇开柔和舒缓的音符。女王在灯塔前的迷雾中迈入新的剧本她一袭鱼尾蓝裙出演法吉娜的眷从——海妖们的女王。\\n\\n在故事里海妖们受命在海洋深处抵御尘世难以想象的苦痛以血肉将漆黑的灾厄引入满溢之杯换取斯缇科西亚永世的欢乐。到了那应允的时刻海妖们终将循着灯塔的灯光和弦声沿着堤道步入斯缇科西亚。斯缇科西亚人将执起她们的手一同参加那永不歇止的宴会。\\n\\n斯缇科西亚女王步入水中享受一次想象中的死亡。在那月相无法约束波涛的夜晚大海深处海妖们空心的泪水如泡沫般上升她们期冀她们等待窥探此生未见的月光然后血肉消融。可惜此夜并没有月光只有灯塔明灭如故——泪水代替海妖们升上波光粼粼的海面漂泊的浮沫消散在浪潮之中。\\n\\n孤独的水手得偿所愿。宴饮者眼含幸福的泪水祝贺他得以步入斯缇科西亚当第一声欢歌响起死亡凋敝的羽翼便已经覆盖在这座永世欢乐的城邦之上。"
}
},
"RequireNum": {
@@ -1651,6 +2159,14 @@
0.24000000022351742
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
}
}

View File

@@ -35,6 +35,15 @@
"Desc": "戦闘開始時、SPを1回復する。",
"ParamList": []
}
},
"Bonus": {
"2": [
{
"type": "HealRatioBase",
"value": 0.10000000149011612
}
],
"4": []
}
},
"102": {
@@ -76,6 +85,20 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
]
}
},
"103": {
@@ -116,6 +139,15 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "DefenceAddedRatio",
"value": 0.15000000596046448
}
],
"4": []
}
},
"104": {
@@ -157,6 +189,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "IceAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"105": {
@@ -198,6 +239,15 @@
5
]
}
},
"Bonus": {
"2": [
{
"type": "PhysicalAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"106": {
@@ -240,6 +290,10 @@
5
]
}
},
"Bonus": {
"2": [],
"4": []
}
},
"107": {
@@ -281,6 +335,15 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "FireAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"108": {
@@ -322,6 +385,15 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "QuantumAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"109": {
@@ -363,6 +435,15 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "ThunderAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"110": {
@@ -403,6 +484,15 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": [
{
"type": "WindAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"111": {
@@ -444,6 +534,20 @@
3
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
],
"4": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
]
}
},
"112": {
@@ -485,6 +589,15 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "ImaginaryAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"113": {
@@ -527,6 +640,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "HPAddedRatio",
"value": 0.119999997317791
}
],
"4": []
}
},
"114": {
@@ -568,6 +690,15 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
],
"4": []
}
},
"115": {
@@ -610,6 +741,10 @@
3
]
}
},
"Bonus": {
"2": [],
"4": []
}
},
"116": {
@@ -651,6 +786,15 @@
3
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": []
}
},
"117": {
@@ -675,7 +819,7 @@
"31174": {
"Name": "先駆者の星に泊まるアンカー",
"Desc": "その重い靴は船の錨に似た形をしている。この靴の持ち主は二度と水面に戻らないつもりだった。",
"Story": "「舵輪を回して風向きを眺める君たちよ」\\n「彼女——フリバスのことを考えたまえ」\\n「かつては君たちのように美しく長身であった」\\n\\n錨のような鉛の靴は、少女をいつも落下させた。靴は設計当初に与えられた使命を忠実に果たしている。\\n\\n少女は目を決して閉じず、冷たく孤独な暗黒に頑として立ち向かう。彼女は初めてアキヴィリの物語を聞いた時のことを思い出した。旅立ちの日、自分のために作った「栄誉バッジ」のこと。仲間と一緒に旅した<unbreak>30</unbreak>日間のこと。最初で最後に会った林の空き地の空気がラズベリーの匂いだったこと。口笛、ギター、竹笛、そして一緒に歌った歌のこと。赤紫色の雪が少し焦げたマシュマロの上に落ちて、すぐに溶けたこと。\\n\\nありありと思い浮かぶ記憶の最後に、途方もない空虚が訪れようとした時、彼女は黒い世界の中心に真っ赤な閃光が突然現れては一瞬で消えるのを目撃した。\\n\\n小さなナナシビトは最後に、長い刀を身に着けた彼女からマシュマロを受け取り、心の底から笑った時のことを思い出した。\\n\\n「自分と同じような人に出会えるなんて思ってもみなかった。この『道』においては、あなたは私より長い距離を歩んでいる」\\n「だから、あなたは最後まで私と歩んでくれる、そうでしょ」\\n「もちろん、私たちの結末はとっくに決まってる…でも、あなたの言う通り——」\\n「たとえ、最終的に私が浅い死水になるのだとしても、そこに向かう途中でできることはたくさんある。だから、どんなことにも挑戦してみたいの」\\n「だって私は、アキヴィリよりもさらに深く遠い道を歩むつもりだから」"
"Story": "「舵輪を回して風向きを眺める君たちよ」\\n「彼女——フリバスのことを考えたまえ」\\n「かつては君たちのように美しく長身であった」\\n\\n錨のような鉛の靴は、少女をいつも落下させた。靴は設計当初に与えられた使命を忠実に果たしている。\\n\\n少女は目を決して閉じず、冷たく孤独な暗黒に頑として立ち向かう。彼女は初めてアキヴィリの物語を聞いた時のことを思い出した。旅立ちの日、自分のために作った「栄誉バッジ」のこと。仲間と一緒に旅した<unbreak>30</unbreak>日間のこと。最初で最後に会った林の空き地の空気がラズベリーの匂いだったこと。口笛、ギター、竹笛、そして一緒に歌った歌のこと。赤紫色の雪が少し焦げたマシュマロの上に落ちて、すぐに溶けたこと。\\n\\nありありと思い浮かぶ記憶の最後に、途方もない空虚が訪れようとした時、彼女は黒い世界の中心に真っ赤な閃光が突然現れては一瞬で消えるのを目撃した。\\n\\nそして、小さなナナシビトは長い刀を身に着けた彼女が最後にマシュマロを受け取ったことを思い出すと、心の底から笑った。\\n\\n「自分と同じような人に出会えるなんて思ってもみなかった。この『道』においては、あなたは私より長い距離を歩んでいる」\\n「だから、あなたは最後まで私と歩んでくれる、そうでしょ」\\n「もちろん、私たちの結末はとっくに決まってる…でも、あなたの言う通り——」\\n「たとえ、最終的に私が浅い死水になるのだとしても、そこに向かう途中でできることはたくさんある。だから、どんなことにも挑戦してみたいの」\\n「だって私は、アキヴィリよりもさらに深く遠い道を歩むつもりだから」"
}
},
"RequireNum": {
@@ -696,6 +840,15 @@
1
]
}
},
"Bonus": {
"2": [],
"4": [
{
"type": "CriticalChanceBase",
"value": 0.03999999910593033
}
]
}
},
"118": {
@@ -737,6 +890,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
],
"4": []
}
},
"119": {
@@ -780,6 +942,15 @@
0.1500000001396984
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
],
"4": []
}
},
"120": {
@@ -822,6 +993,20 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": [
{
"type": "CriticalChanceBase",
"value": 0.05999999865889549
}
]
}
},
"121": {
@@ -864,6 +1049,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
],
"4": []
}
},
"122": {
@@ -905,6 +1099,15 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.07999999821186066
}
],
"4": []
}
},
"123": {
@@ -947,6 +1150,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": []
}
},
"124": {
@@ -992,6 +1204,20 @@
0.0800000000745058
]
}
},
"Bonus": {
"2": [
{
"type": "QuantumAddedRatio",
"value": 0.10000000149011612
}
],
"4": [
{
"type": "SpeedAddedRatio",
"value": -0.07999999821186066
}
]
}
},
"125": {
@@ -1006,12 +1232,12 @@
"31252": {
"Name": "武神の騎兵手甲",
"Desc": "このガントレットは騎士のすべての勝利に付き添った。これがあれば最も攻撃力のある武器を握り締め、そして最もつらい裏切りにも耐えられる。",
"Story": "銀鱗の塊が炉の中で産声をあげる。年長の山の民は鍛えあげたガントレットに祝福を施し、そばに立つ武神に渡した。\\n\\n「柔らかいは、傷つく。騎士たる者、硬くあれ。雲母よりもしなやかに…その骨まで」\\n\\n彼女は精緻なガントレットを受け取り、氷のよう銀鱗の甲冑をそっと拭った。そして想像した——雷撃によって鍛えられた長槍と、炎が花開くようにして生まれた円盾を手に、すべての人を救うべく天空の戦場へと駆ける自らの姿を。強さとは、人を救うのに必要な条件の1つにすぎない。山の民は指の関節部分に真理の言葉を刻み、鉄のガントレットにも柔らかい部分があることを忘れないようにと、武神に言い含めた。\\n\\n「川床の小石を温めるなら、手のひらを使え。氷河は、剣にしてはならない」\\n\\nしかしその後、彼女の極端とも言える使命感と正義感は、その工匠の祝福を燃やし、二度と癒えない傷痕へと変えてしまった。"
"Story": "銀鱗の塊が炉の中で産声をあげる。年長の山の民は鍛えあげたガントレットに祝福を施し、そばに立つ武神に渡した。\\n\\n「柔らかいは、傷つく。騎士たる者、硬くあれ。雲母よりもしなやかに…その骨まで」\\n\\n彼女は精緻なガントレットを受け取り、氷のように冷たい銀鱗の甲冑をそっと拭った。そして想像した——雷撃によって鍛えられた長槍と、炎が花開くようにして生まれた円盾を手に、すべての人を救うべく天空の戦場へと駆ける自らの姿を。強さとは、人を救うのに必要な条件の1つにすぎない。山の民は指の関節部分に真理の言葉を刻み、鉄のガントレットにも柔らかい部分があることを忘れないようにと、武神に言い含めた。\\n\\n「川床の小石を温めるなら、手のひらを使え。氷河は、剣にしてはならない」\\n\\nしかしその後、彼女の極端とも言える使命感と正義感は、その工匠の祝福を燃やし、二度と癒えない傷痕へと変えてしまった。"
},
"31253": {
"Name": "武神の旅立ちの外衣",
"Desc": "このマントは陽雷の騎士を雨やほこりから守り、すべての冒険に付き従ってきた——そして何より、最も目を引く後ろ姿を空に残してきた。",
"Story": "まだ騎士ではなかった頃、少女は師匠が隠れ住む山の洞窟で、卓越した武芸を教わっていた。\\n\\n「よくやった。もうすぐ私が教えられることはなくなるだろう。ところで、その力は何のために使うつもりだ」\\n\\n神託を聞いてから、少女の心はすでに修行に集中できていなかった。温厚な師匠はその悩みを見抜き、彼女がいつも使っている短剣に松脂を塗りながら尋ねた。「師匠、私は真実の中で生きていきたいです。ヤヌサポリスの聖女、そして彼女が伝えた神託のこと…ご存じですか」少女は師匠に止められることを恐れていたが、心の中ではすでに決意を固めていた。\\n\\n「だが、真実とはなんだ」穏やかな口調で師匠が問い返した。「…それを見極めるには一生をかけることになる。簡単ではないのだよ」\\n\\n深夜、少女は静かに起き上がり、夜が明ける前に急いで去ろうとした。だが、折り畳まれたマントがすでに旅の荷物に忍ばされていることに気づいた。"
"Story": "まだ騎士ではなかった頃、少女は師匠が隠れ住む山の洞窟で、卓越した武芸を教わっていた。\\n\\n「よくやった。もうすぐ私が教えられることはなくなるだろう。ところで、お前はその力は何のために使うつもりだ?」\\n\\n神託を聞いてから、少女の心はすでに修行に集中できていなかった。温厚な師匠はその悩みを見抜き、彼女がいつも使っている短剣に松脂を塗りながら尋ねた。「師匠、私は真実の中で生きていきたいです。ヤヌサポリスの聖女、そして彼女が伝えた神託のこと…ご存じですか」少女は師匠に止められることを恐れていたが、心の中ではすでに決意を固めていた。\\n\\n「だが、真実とはなんだ」穏やかな口調で師匠が問い返した。「…それを見極めるには一生をかけることになる。簡単ではないのだよ」\\n\\n深夜、少女は静かに起き上がり、夜が明ける前に急いで去ろうとした。だが、折り畳まれたマントがすでに旅の荷物に忍ばされていることに気づいた。"
},
"31254": {
"Name": "武神の栄光の輪拍",
@@ -1034,6 +1260,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
],
"4": []
}
},
"126": {
@@ -1042,7 +1277,7 @@
"Parts": {
"31261": {
"Name": "船長の羅針ハット",
"Desc": "真珠のような光を放つ広いつ、つばの広い帽子。海を旅する船乗りたちは、これでエーグルの灼熱の陽射しを凌いでいる。",
"Desc": "真珠のような光を放つ、つばの広い帽子。海を旅する船乗りたちは、これでエーグルの灼熱の陽射しを凌いでいる。",
"Story": "岸辺の岩礁には、巨鯨のような三段櫂船の残骸が打ち上げられている。それはセイレーンを討伐するため出港した軍船であり、船は波によって海岸まで押し戻され、乗組員たちは大海原に取り残された。\\n\\n「ファジェイナの勇士よ。誰でも構わぬ。どうか立ち上がってスキアナを守ってくれ」国王は悲痛な声を上げたが、応える者はいなかった。セイレーンに立ち向かったところで屍になって海に浮かぶだけからだ。\\n\\n「頑丈で大きな船と、<unbreak>50</unbreak>人の船員を用意してくれ。俺がその忌々しい怪物を討ち取ってやる!」つば広の帽子をかぶった若き船長は、そう言って人混みの前に出た。彼の帽子は真珠のように輝いており、人々の青ざめた顔を一瞬で虹色の光で染めた。その登場はまるで夜明けの海のようで、一瞬にして地平線が白み始めた。\\n\\n「俺が世界一の船を造ってやる」若き船長の気迫に惹かれた工匠たちは、誰もが自らの技術を捧げることを誓った。船体には大海原でも朽ちることのない丈夫な木材が使われ、また船首には預言の力が宿ったサーシスの巨木の一部が使われた。\\n\\n「賢者の弟子よ、神々に選ばれし英雄よ、行くがいい。ファジェイナの狂乱を鎮めるのだ」3日後、船員を乗せたその軍船はスキアナから出航した。"
},
"31262": {
@@ -1076,6 +1311,121 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
],
"4": []
}
},
"127": {
"Name": "天地再創の救世主",
"Icon": "SpriteOutput/ItemIcon/71048.png",
"Parts": {
"31271": {
"Name": "救世主の旅立ちのフード",
"Desc": "伝説の救世主が雨風から身を守るために使っていたとされるフード。実際の服装は、吟遊詩人たちが語り継がれるものとは違うかもしれない。",
"Story": "オロニクスの夜霧が月桂樹の枝を濡らしている。\\nその時、運命の深淵に黒き箱を伴って、天外から救世の英雄が降り立っていた。\\n\\n{F#彼女}{M#彼}は神託に応え、やって来たのだ。しかし司祭たちは天外について語ることを恐れていた。\\n<i>「天空のことを声高に語ってはいけない。疑り深いエーグルが容赦なく神罰の雷を落とすに違いない」</i>\\n自信に満ちた救世主は、その言葉を耳にすると怒りをあらわにこう言った。\\n<i>「災いをもたらす預言者、{F#あんた}{M#お前}は神々だって人の子からの裁きを恐れるべきだと考えたことはないの{F#}{M#のか}?」</i>\\n\\n救世主は、城壁の上で地平線が薔薇色の黎明に染まるのを見つめていた。\\n<i>「まずはニカドリー…『紛争』を司る者よ、</i>\\n<i>{F#あんた}{M#お前}が狂気ではなく、栄光をもたらすことを願って」</i>\\n救世主はフードを脱ぐと、長槍を投げた。\\nその影は春先に疾走する1匹の狼のように街を、道を翔け、クレムスへと飛んでいった。\\n\\n<i>「もし運命の糸が絶たれたら、モネータの名において{F#私}{M#俺}が物語の続きを織り直そう!」</i>\\n遥か彼方から遠くから狂王の怒号が響いた。放たれたあの槍が、歩みに先んじて出立の時を告げたのだ。\\n<i>「黄金裔の仲間が旅路で{F#私}{M#俺}を待ってる。そろそろ行かないと。」</i>\\n\\n風になびく救世主の灰色の髪を目にしたヤーヌスの司祭たちは大きな歓声を上げた。\\nその様子はまるで干からびた草の種が、養分を得たかのように喜びに満ちていた。"
},
"31272": {
"Name": "救世主のグローブ",
"Desc": "伝説の救世主が棘を切り裂く時に身に着けていたとされるガントレット。実際の服装は、吟遊詩人たちが語り継がれるものとは違うかもしれない。",
"Story": "凍りついたファジェイナの海が、スティコシアの長い海岸線を蝕んでいく。\\n救世の英雄はステュクスの渡し場に辿り着いた。冥府への渡し舟は、紫色の巨竜が務めた。\\n\\nステュクスのほとりで、亡者たちは甘い囁きとなる。彼らは英雄たちが人界に帰らぬよう、引き留めようとした。\\n<i>「あなたはタイタンを屈服させた。その偉業はもう、伝承を語る者に託してもいいだろう?」</i>\\nその言葉を投げかけられた悲哀に満ちた救世主は、激しい憎しみとともにこう返した。\\n<i>「この場所に留まる亡者よ、{F#あんた}{M#お前}は考えたこともない{F#でしょ}{M#だろうな}。救世への願いが再会を望む思いよりも上だなんて」</i>\\n\\n渡し船に乗りながら、救世主は火追いの旅の数々の場面を思い返していた。\\n<i>「さようなら、『死』のタナトス。</i>\\n<i>たとえ{F#私}{M#俺}が一番愛する友人たちが、死を恐れない人たちだったとしても、どうかみんなを見守っていて{F#}{M#くれ}」</i>\\n救世主は鹿革でできたガントレットをそっと撫でた。そこには去っていった友たちの温もりがまだ残っていた。\\nアンティリン花が咲き乱れる海岸から、湿り気のある温かい西風に乗って、人の世へと吹かれていった。\\n\\n<i>「サーシス、どうか{F#私}{M#俺}の理性を守って{F#}{M#くれ}。もう二度と繰り返さないように。」</i>\\n死から舞い戻ったことこそ、英雄の資質がある者の証だった。\\n<i>「もうこれ以上、待たせたりしない。黄金裔のみんなとの、忘れられない誓いを果たすよ」</i>\\n\\nジョーリアの大地が帰還した{F#彼女}{M#彼}を迎え、火追いの旅路が続いていく。\\n夜空を覆い隠していた黒雲が散ったように、明けの明星が再び輝きを放った。"
},
"31273": {
"Name": "救世主の託されたマント",
"Desc": "伝説の救世主が刃を交える際に身に着けていたとされる戦衣。実際の服装は、吟遊詩人たちが語り継がれるものとは違うかもしれない。",
"Story": "エーグルの黒雲が怒りに渦巻いている。\\n救世の英雄は彩虹の橋架を渡り、かつては触れることすら叶わなかった天空を撃ち落とした。\\n\\n救世の英雄と肩を並べて戦うのは、生死をともにした仲間だ。「火を追う旅は喪失の道。その中では、命さえも些事となる。」</i>\\n\\nその言葉を聞いた救世主は、冷静にそしてきっぱりと答えた。\\n<i>「みんなの覚悟はわかってる。何千万回くり返すことになっても、その覚悟は裏切らない」</i>\\n\\n再創世の儀式へと向かいながら、救世主は帰路を守る戦友たち一人ひとりに別れを告げた。\\n<i>「これは千年も続いた征途と叙事詩。</i>\\n<i>数多の先人に託された、{F#私}{M#俺}が今日ここで必ず成し遂げないといけない物語だ」</i>\\n最後まで残っていた救世主の相棒は、救世主の肩にマントを掛けると、くるりと踵を返し、押し寄せる敵の大群に立ち向かっていった。\\n肩にあるそれは共に戦ってきた証。託された想いであり、伝承でもある。\\n\\n<i>「タレンタム、もし聞こえてるのなら、この壮絶な犠牲に報いて、より良い明日を築いて」</i>\\n<i>「…我らは『火』に身を投じる——」</i>\\n<i>「ただ創世の叙事詩に、最初の一筆を刻むために」</i>\\n\\nケファレの優しい眼差しの下、救世主は人々の願いを携えて、再び天地を創るだろう——"
},
"31274": {
"Name": "救世主の開拓ブーツ",
"Desc": "伝説の救世主が旅の途中で履いていたとされるブーツ。実際の服装は、吟遊詩人たちが語り継がれるものとは違うかもしれない。",
"Story": "<i>「『黄金の繭』、{F#あんた}{M#お前}は浪漫の結末をその目で見届けて、無瑕の運命を織り直すだろう」</i><i>「『万路の門』、{F#あんた}{M#お前}は数え切れないほどの帰途を開いて、また明日会う預言を叶えるだろう」</i><i>「『分裂する枝』、{F#あんた}{M#お前}が蒔いた『疑い』という知性の種は、いつか人々の知性から芽を出すだろう。」</i><i>「『晨昏の目』、見て{F#}{M#くれ}!傷一つない天空の果てには癒しの虹が架かってる」</i>\\n\\n<i>「故郷へ帰ろう、『天罰の矛』。万民が讃える玉座に登り、世界に約束された平和をもたらそう」</i><i>「その思いを思うままに。『飛翔する幣』、たとえそれが悪知恵を働かせた冗談であろうと、誠実な言葉であろうと、もう隠す必要はない。」</i><i>「『暗澹たる手』——ステュクスの守り人、強く抱きしめていいんだ{F#よ}{M#}……」</i><i>「{F#あんた}{M#お前}の優しさで向こう岸の花の海は温められるだろう。どんな別れも、再会の希望を孕んでいるのだから」</i>\\n\\n<i>「人々は聞くだろう、宴に響く『満たされた杯』の歌声が絶えないことを」</i><i>「人々は見るだろう──『永夜の帳』が、忘れられない歳月を大切に抱いていたことを」</i><i>「不朽なる『堅磐の脊髄』は全ての生命を、旅の終わりまで背負い、支え続けるだろう」</i><i>「『公正の秤』は、無私の法を贈り、無数の火を追う旅の英傑たちに冠を授けるだろう……」</i>\\n\\n<i>「『万象の座』、もう一人で世界を背負わなくていいんだ{F#よ}{M#}。</i>\\n<i>ほら、永久に燃え続ける烈日が、もう昇ってきてる……」</i>\\n\\n後悔によって紡がれてきた叙事詩は、書き直された詩の中で幸せな結末を迎えた。\\n手が届かないほど遥か遠くにあった終点は、「開拓」によって辿り着けたのだ。"
}
},
"RequireNum": {
"2": {
"Desc": "会心率+<unbreak>#1[i]%</unbreak>。",
"ParamList": [
0.0800000000745058
]
},
"4": {
"Desc": "装備キャラが通常攻撃または戦闘スキルを発動した後、装備キャラの記憶の精霊がフィールド上にいる場合、装備キャラとその記憶の精霊の最大HP+<unbreak>#1[i]%</unbreak>、味方全体の与ダメージ+<unbreak>#2[i]%</unbreak>、装備キャラが次に通常攻撃または戦闘スキルを発動した後まで継続。",
"ParamList": [
0.24000000022351742,
0.0800000000745058
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.0800000000745058
}
],
"4": []
}
},
"128": {
"Name": "星の光を隠せし隠者",
"Icon": "SpriteOutput/ItemIcon/71049.png",
"Parts": {
"31281": {
"Name": "隠者のつば広帽子",
"Desc": "つばを巻き上げられる、クラシックなニット帽。知識人や芸術家、専門家の間では非常に人気がある。",
"Story": "..."
},
"31282": {
"Name": "隠者のシンプルな腕時計",
"Desc": "美しい金属製のベルトと、シンプルな丸型の文字盤。工業化の過程で作られた、精密的なそれは冷静さを表し、控えめでありながらも実用的なものだ。",
"Story": "..."
},
"31283": {
"Name": "隠者の駱駝色ジャケット",
"Desc": "ブラウンのコーデュロイジャケット。その持ち主は枠にとらわれないことを表すように、ジャケットをいつも開けて着ている。",
"Story": "..."
},
"31284": {
"Name": "隠者の鹿革ブーツ",
"Desc": "より頑丈で摩耗に耐えられる革製の紐付きブーツ。あまり正式ではない場でしか履かれていないが、その優雅な一面が見て取れる。",
"Story": "..."
}
},
"RequireNum": {
"2": {
"Desc": "会心ダメージ+<unbreak>#1[i]%</unbreak>。",
"ParamList": [
0.1600000001490116
]
},
"4": {
"Desc": "装備キャラの会心ダメージ+<unbreak>#3[i]%</unbreak>。任意の味方キャラが1ターン内に初回SPを消費した時、SPを1回復する。この効果は1回の戦闘で最大<unbreak>#1[i]</unbreak>回まで発動できる。その後、各ウェーブ開始時に、発動可能回数が<unbreak>#2[i]</unbreak>回回復する。SP回復効果は同じチームでは重ねがけできない。",
"ParamList": [
1,
1,
0.1600000001490116
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
],
"4": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
]
}
},
"301": {
@@ -1102,6 +1452,14 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
},
"302": {
@@ -1128,6 +1486,14 @@
0.0800000000745058
]
}
},
"Bonus": {
"2": [
{
"type": "HPAddedRatio",
"value": 0.119999997317791
}
]
}
},
"303": {
@@ -1154,6 +1520,14 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": [
{
"type": "StatusProbabilityBase",
"value": 0.10000000149011612
}
]
}
},
"304": {
@@ -1180,6 +1554,14 @@
0.1500000001396984
]
}
},
"Bonus": {
"2": [
{
"type": "DefenceAddedRatio",
"value": 0.15000000596046448
}
]
}
},
"305": {
@@ -1206,6 +1588,14 @@
0.6000000005587935
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
]
}
},
"306": {
@@ -1232,6 +1622,14 @@
0.1500000001396984
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.07999999821186066
}
]
}
},
"307": {
@@ -1258,6 +1656,14 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
]
}
},
"308": {
@@ -1284,6 +1690,14 @@
0.40000000037252903
]
}
},
"Bonus": {
"2": [
{
"type": "SPRatioBase",
"value": 0.05000000074505806
}
]
}
},
"309": {
@@ -1310,6 +1724,14 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.07999999821186066
}
]
}
},
"310": {
@@ -1336,6 +1758,14 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "StatusResistanceBase",
"value": 0.10000000149011612
}
]
}
},
"311": {
@@ -1364,6 +1794,14 @@
0.18000000016763806
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
},
"312": {
@@ -1389,6 +1827,14 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "SPRatioBase",
"value": 0.05000000074505806
}
]
}
},
"313": {
@@ -1415,6 +1861,14 @@
0.0400000000372529
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.03999999910593033
}
]
}
},
"314": {
@@ -1440,6 +1894,14 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
},
"315": {
@@ -1466,6 +1928,9 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": []
}
},
"316": {
@@ -1492,6 +1957,14 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
]
}
},
"317": {
@@ -1517,6 +1990,14 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "SPRatioBase",
"value": 0.05000000074505806
}
]
}
},
"318": {
@@ -1542,6 +2023,14 @@
0.3200000002980232
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
]
}
},
"319": {
@@ -1568,6 +2057,14 @@
0.2800000002607703
]
}
},
"Bonus": {
"2": [
{
"type": "HPAddedRatio",
"value": 0.119999997317791
}
]
}
},
"320": {
@@ -1596,6 +2093,14 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
]
}
},
"321": {
@@ -1603,19 +2108,19 @@
"Icon": "SpriteOutput/ItemIcon/71046.png",
"Parts": {
"33215": {
"Name": "迷いと夢のツリーハウス",
"Name": "迷路迷境の夢のツリーハウス",
"Desc": "次元界オーブの中に封印されたエリュシオンの「迷路迷境」。黄金色の麦をかき分けた先で、あなたはとても深い木の穴に落ちてしまった。おや小さな妖精がたくさんいる。「1、2、3、4、5、6、7……」違う「ド、レ、ミ、ファ、ソ、ラ、シだ」",
"Story": "「ふふ、子供たち、迷路迷境は今年も収穫の季節を迎えた。何を準備すればいいか分かるね?」村長は白いひげを撫で、ニコニコしながら言った。\\n「ネクタール祭」妖精たちが歓声をあげた。\\n\\n当初、迷路迷境は何もない荒れた地だった。そこにエリュシオンの少年と少女が外から種を持ち込み、妖精たちに種まきを教えた。種から芽が出て花が咲くと、妖精たちも彼らの真似をし、ブドウ畑の傍を飛ぶ金色の蜜蜂を追いかけて蜜を集めた。そうして花が実を結ぶようになると、妖精たちは歌で収穫を祝い、夜遅くまで賑やかな宴を楽しむようになった。そして、彼らは夜が明けた後——その年にとれた蜜を瓶に詰め、地中深くへと埋めた。それはやがて熟成され、翌年には「成長」と「冬を癒す」不思議な妙薬となるのだ。\\n\\n毎年、ネクタール祭では同じことを繰り返している。\\n今年の祭りでは、村長が白いひげを揺らしながら、「誰かレラミュンを見なかった」と言っていた。\\n\\n妖精たちはあちこち探し回り、ついにツリーハウスの入口で「レラミュン」を見つけた。「レラミュン」はスヤスヤと寝息を立て、口元にはよだれを浮かべ、まるで楽しい夢でも見ているかのようだった。不思議に思った「ミュンラミ」が近づき、「レラミュン」の寝言を聞いた——「ファイちゃんキュレちゃん約束だよ。今度来たときは、去年埋めたトゲトゲの実のネクタールを一緒に飲もうね」\\n\\n「レラミュン」は、自分が「巨大なレラミュン」に変身して、迷路迷境につながる木の穴を完全に塞いでしまっている夢を見ていた。小さなファインとキュレネはどうやっても中に入るための道を見つけられず、イグサで「レラミュン」の耳をくすぐったり、お腹の上で跳ね回りながら名前を叫んだりしていた。しかし、ぐっすり眠っている「レラミュン」にはまったく届いていない。\\n「もしかして、ファイちゃんとキュレちゃんが迷路迷境に来れてないのは、あたしが道を塞いじゃってたせい……」\\n夢の中で、「レラミュン」の心臓がドキっと跳ねた。\\n\\n「ハ…ハクション」\\n「レラミュン」は大きなくしゃみをしてようやく目を覚ました。幸いにも道をふさぐ「巨大なレラミュン」にはなっていなかったが、自分の周りにいたのは妖精たちだけ。\\n「ファイちゃんとキュレちゃんはあの2人は来てないの」\\n妖精たちは首を横に振った。ファインとキュレネのいないネクタール祭はこれで何度目になるだろうか。\\n「レラミュン」は肩を落とした。そうと分かっていればもう少し夢を見ていたのに——\\n小さな「レラミュン」はこの気持ちをどう言い表せばいいか分からなかった。けれど、強いて言うなら…毎年の夏の終わりに、瓶に入っていたホタルたちを空に放してあげる時の気持ちに似ているかもしれない。"
"Story": "「ふふ、子供たち、迷路迷境は今年も収穫の季節を迎えた。何を準備すればいいか分かるね?」村長は白いひげを撫で、ニコニコしながら言った。\\n「ネクタール祭」妖精たちが歓声をあげた。\\n\\n当初、迷路迷境は何もない荒れた地だった。そこにエリュシオンの少年と少女が外から種を持ち込み、妖精たちに種まきを教えた。種から芽が出て花が咲くと、妖精たちも彼らの真似をし、ブドウ畑の傍を飛ぶ金色の蜜蜂を追いかけて蜜を集めた。そうして花が実を結ぶようになると、妖精たちは歌で収穫を祝い、夜遅くまで賑やかな宴を楽しむようになった。そして、彼らは夜が明けた後——その年にとれた蜜を瓶に詰め、地中深くへと埋めた。それはやがて熟成され、翌年には「成長」と「冬を癒す」不思議な妙薬となるのだ。\\n\\n毎年、ネクタール祭では同じことを繰り返している。\\n今年の祭りでは、村長が白いひげを揺らしながら、「誰かレラミュンを見なかった?」と言っていた。\\n\\n妖精たちはあちこち探し回り、ついにツリーハウスの入口で「レラミュン」を見つけた。「レラミュン」はスヤスヤと寝息を立て、口元にはよだれを浮かべ、まるで楽しい夢でも見ているかのようだった。不思議に思った「ミュンラミ」が近づき、「レラミュン」の寝言を聞いた——「ファイちゃんキュレちゃん約束だよ。今度来たときは、去年埋めたトゲトゲの実のネクタールを一緒に飲もうね」\\n\\n「レラミュン」は、自分が「巨大なレラミュン」に変身して、迷路迷境につながる木の穴を完全に塞いでしまっている夢を見ていた。小さなファインとキュレネはどうやっても中に入るための道を見つけられず、イグサで「レラミュン」の耳をくすぐったり、お腹の上で跳ね回りながら名前を叫んだりしていた。しかし、ぐっすり眠っている「レラミュン」にはまったく届いていない。\\n「もしかして、ファイちゃんとキュレちゃんが迷路迷境に来れてないのは、あたしが道を塞いじゃってたせい……」\\n夢の中で、「レラミュン」の心臓がドキっと跳ねた。\\n\\n「ハ…ハクション」\\n「レラミュン」は大きなくしゃみをしてようやく目を覚ました。幸いにも道をふさぐ「巨大なレラミュン」にはなっていなかったが、自分の周りにいたのは妖精たちだけ。\\n「ファイちゃんとキュレちゃんはあの2人は来てないの」\\n妖精たちは首を横に振った。ファインとキュレネのいないネクタール祭はこれで何度目になるだろうか。\\n「レラミュン」は肩を落とした。そうと分かっていればもう少し夢を見ていたのに——\\n小さな「レラミュン」はこの気持ちをどう言い表せばいいか分からなかった。けれど、強いて言うなら…毎年の夏の終わりに、瓶に入っていたホタルたちを空に放してあげる時の気持ちに似ているかもしれない。"
},
"33216": {
"Name": "迷路迷境の祈りの笛",
"Desc": "粘土で作られた笛。小さな妖精たちと二人の子供の約束を象徴している。少年と少女がその笛を吹くと、「ミュ?」という声を合図に、妖精たちが迷につながる木の穴を開き、彼らを招き入れてくれる。",
"Story": "「約束、忘れないでね!あなたたちがその祈りの笛を吹けば、どんなに遠くにいても、必ずあたしたちに聞こえるから」\\n\\nそれはエリュシオンの少年と少女が初めて迷路迷境を訪れ、妖精たちと出会った時のこと。彼らは友達と庭でかくれんぼをしていて、その際にうっかり茂みの奥にある深い木の穴にすべり落ちてしまった。木の穴はとても長く、底の見えない滑り台のようになっていて、彼らは真っすぐ滑り落ち、やがて地面に転がった。その際、予想していたような派手な転び方はしなかったが、彼らは妖精たちの山へと突っ込んでしまった。\\n「1、2、3、4、5、6、7…仔犬がたくさん…って、ウサギ」\\n「違うよ。ド、レ、ミ、ファ、ソ、ラ、シ、だよ。あたしたちはトラミュン、ソラミュン、レミュンっていうの!」\\n\\n子供たちと妖精の友情は、千の流れ星のようにたちまち輝きに包まれ、一緒に楽しい一日を過ごした。しかし、別れの時はすぐにやって来た。子供たちは心配している両親のところへ帰らなくてはならないのだ。\\n「離れ離れになっても、また会えるよね」少年が少しだけ寂しそうに尋ねた。\\n離ればなれ…また会える…妖精たちにはその言葉の意味がよく分からなかった。これまでの迷路迷境には別れも再会もなかったからだ。しかし、子供たちの表情を見て、それがとても辛いことなのは分かった。紫色の「レラミュン」は少し考えたあと、「ファイちゃん、キュレちゃん、ちょっと待ってて。あげたいものがあるの」と言った。\\n\\n少年と少女は「レラミュン」からの贈り物を受け取った。それは「レラミュン」が自分で作ったもので、7つの穴があいている妖精の耳の形をした笛だった。それを吹くと「ド、レ、ミ、ファ、ソ、ラ、シ」の美しい音色が奏でられるという。「レラミュン」は真剣な表情で、「また迷路迷境に遊びに来たくなったら、この笛を吹いて。あたしたちが寝てても、歌ってても、葉っぱの家を作ってても、この音は必ず聞こえるから。その時は入口の木の穴を開いて、すぐに迎え入れてあげるね」と言った。\\n\\n「つまり、妖精を目覚めさせる不思議な笛ってことね」少女はいたずらっぽく笑い、「約束だよ。きっとまた戻ってくるからね」と言った。\\nそれ以来、笛がなると「レラミュン」はこれ以上ないほどに喜んだ。そして、いつも大声で「聞こえたよ両耳ともちゃんと聞こえた」と叫ぶのだった。\\n\\nその後、ファインとキュレネはエリュシオンを離れたが、子供時代のことはすべて覚えていた。錆びたブリキのおもちゃ、納屋に転がっていた手足のない兵隊の人形、針で編んだフェルトの花飾り、一度も振らなかった雨、乾ききった血、焼け焦げた麦畑——\\nしかし、土に埋もれた笛と、果たされることのない約束だけは、忘れてしまっていた。"
"Desc": "粘土で作られた笛。小さな妖精たちと二人の子供の約束を象徴している。少年と少女がその笛を吹けば、「ミュ?」という声を合図に、妖精たちが迷につながる木の穴を開き、彼らを招き入れてくれる。",
"Story": "「約束、忘れないでね!あなたたちがその祈りの笛を吹けば、どんなに遠くにいても、必ずあたしたちに聞こえるから」\\n\\nそれはエリュシオンの少年と少女が初めて迷路迷境を訪れ、妖精たちと出会った時のこと。彼らは友達と庭でかくれんぼをしていて、その際にうっかり茂みの奥にある深い木の穴にすべり落ちてしまった。木の穴はとても長く、底の見えない滑り台のようになっていて、彼らは真っすぐ滑り落ち、やがて地面に転がった。その際、予想していたような派手な転び方はしなかったが、彼らは妖精たちの山へと突っ込んでしまった。\\n「1、2、3、4、5、6、7…仔犬がたくさん…って、ウサギ」\\n「違うよ。ド、レ、ミ、ファ、ソ、ラ、シ、だよ。あたしたちはトラミュン、ソラミュン、レミュンっていうの!」\\n\\n子供たちと妖精の友情は、千の流れ星のようにたちまち輝きに包まれ、一緒に楽しい一日を過ごした。しかし、別れの時はすぐにやって来た。子供たちは心配している両親のところへ帰らなくてはならないのだ。\\n「離れ離れになっても、また会えるよね」少年が少しだけ寂しそうに尋ねた。\\n離ればなれ…また会える…妖精たちにはその言葉の意味がよく分からなかった。これまでの迷路迷境には別れも再会もなかったからだ。しかし、子供たちの表情を見て、それがとても辛いことなのは分かった。紫色の「レラミュン」は少し考えたあと、「ファイちゃん、キュレちゃん、ちょっと待ってて。あげたいものがあるの」と言った。\\n\\n少年と少女は「レラミュン」からの贈り物を受け取った。それは「レラミュン」が自分で作ったもので、7つの穴があいている妖精の耳の形をした笛だった。それを吹くと「ド、レ、ミ、ファ、ソ、ラ、シ」の美しい音色が奏でられるという。「レラミュン」は真剣な表情で、「また迷路迷境に遊びに来たくなったら、この笛を吹いて。あたしたちが寝てても、歌ってても、葉っぱの家を作ってても、この音は必ず聞こえるから。その時は入口の木の穴を開いて、すぐに迎え入れてあげるね」と言った。\\n\\n「つまり、妖精を目覚めさせる不思議な笛ってことね」少女はいたずらっぽく笑い、「約束だよ。きっとまた戻ってくるからね」と言った。\\nそれ以来、笛がなると「レラミュン」はこれ以上ないほどに喜んだ。そして、いつも大声で「聞こえたよ両耳ともちゃんと聞こえた」と叫ぶのだった。\\n\\nその後、ファインとキュレネはエリュシオンを離れたが、子供時代のことはすべて覚えていた。錆びたブリキのおもちゃ、納屋に転がっていた手足のない兵隊の人形、針で編んだフェルトの花飾り、一度も降ることのなかった雨、乾ききった血、焼け焦げた麦畑——\\nしかし、土に埋もれた笛と、果たされることのない約束だけは、忘れてしまっていた。"
}
},
"RequireNum": {
"2": {
"Desc": "現在フィールド上にいる味方の数が4ではない時、1名増える/減るごとに、装備キャラおよびその記憶の精霊の与ダメージ+<unbreak>#1[i]%</unbreak>/<unbreak>#2[i]%</unbreak>、最大で<unbreak>#3[i]</unbreak>/<unbreak>#4[i]</unbreak>層累積できる。",
"Desc": "フィールド上にいる現在の味方の数が4ではない時、1名超過/不足するごとに、装備キャラおよびその記憶の精霊の与ダメージ+<unbreak>#1[i]%</unbreak>/<unbreak>#2[i]%</unbreak>、最大で<unbreak>#3[i]</unbreak>/<unbreak>#4[i]</unbreak>層累積できる。",
"ParamList": [
0.09000000008381903,
0.12000000011175871,
@@ -1623,6 +2128,9 @@
3
]
}
},
"Bonus": {
"2": []
}
},
"322": {
@@ -1642,7 +2150,7 @@
},
"RequireNum": {
"2": {
"Desc": "装備キャラの攻撃力+<unbreak>#1[i]%</unbreak>。装備キャラの攻撃力が<unbreak>#2[i]</unbreak>/<unbreak>#3[i]</unbreak>以上の場合、持続ダメージがさらに+<unbreak>#4[i]%</unbreak>/<unbreak>#5[i]%</unbreak>。",
"Desc": "装備キャラの攻撃力+<unbreak>#1[i]%</unbreak>。装備キャラの攻撃力が<unbreak>#2[i]</unbreak>/<unbreak>#3[i]</unbreak>以上の場合、与える持続ダメージがさらに+<unbreak>#4[i]%</unbreak>/<unbreak>#5[i]%</unbreak>。",
"ParamList": [
0.12000000011175871,
2400,
@@ -1651,6 +2159,14 @@
0.24000000022351742
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
}
}

View File

@@ -35,6 +35,15 @@
"Desc": "전투 시작 시 즉시 아군의 전투 스킬 포인트를 1pt 회복한다",
"ParamList": []
}
},
"Bonus": {
"2": [
{
"type": "HealRatioBase",
"value": 0.10000000149011612
}
],
"4": []
}
},
"102": {
@@ -76,6 +85,20 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
]
}
},
"103": {
@@ -116,6 +139,15 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "DefenceAddedRatio",
"value": 0.15000000596046448
}
],
"4": []
}
},
"104": {
@@ -157,6 +189,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "IceAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"105": {
@@ -198,6 +239,15 @@
5
]
}
},
"Bonus": {
"2": [
{
"type": "PhysicalAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"106": {
@@ -240,6 +290,10 @@
5
]
}
},
"Bonus": {
"2": [],
"4": []
}
},
"107": {
@@ -281,6 +335,15 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "FireAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"108": {
@@ -322,6 +385,15 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "QuantumAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"109": {
@@ -363,6 +435,15 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "ThunderAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"110": {
@@ -403,6 +484,15 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": [
{
"type": "WindAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"111": {
@@ -444,6 +534,20 @@
3
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
],
"4": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
]
}
},
"112": {
@@ -485,6 +589,15 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "ImaginaryAddedRatio",
"value": 0.10000000149011612
}
],
"4": []
}
},
"113": {
@@ -527,6 +640,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "HPAddedRatio",
"value": 0.119999997317791
}
],
"4": []
}
},
"114": {
@@ -568,6 +690,15 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
],
"4": []
}
},
"115": {
@@ -610,6 +741,10 @@
3
]
}
},
"Bonus": {
"2": [],
"4": []
}
},
"116": {
@@ -651,6 +786,15 @@
3
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": []
}
},
"117": {
@@ -696,6 +840,15 @@
1
]
}
},
"Bonus": {
"2": [],
"4": [
{
"type": "CriticalChanceBase",
"value": 0.03999999910593033
}
]
}
},
"118": {
@@ -737,6 +890,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
],
"4": []
}
},
"119": {
@@ -780,6 +942,15 @@
0.1500000001396984
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
],
"4": []
}
},
"120": {
@@ -822,6 +993,20 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": [
{
"type": "CriticalChanceBase",
"value": 0.05999999865889549
}
]
}
},
"121": {
@@ -864,6 +1049,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
],
"4": []
}
},
"122": {
@@ -905,6 +1099,15 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.07999999821186066
}
],
"4": []
}
},
"123": {
@@ -947,6 +1150,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
],
"4": []
}
},
"124": {
@@ -992,6 +1204,20 @@
0.0800000000745058
]
}
},
"Bonus": {
"2": [
{
"type": "QuantumAddedRatio",
"value": 0.10000000149011612
}
],
"4": [
{
"type": "SpeedAddedRatio",
"value": -0.07999999821186066
}
]
}
},
"125": {
@@ -1001,7 +1227,7 @@
"31251": {
"Name": "여전사의 날개 달린 투구",
"Desc": "이 날개 달린 투구는 태양과 번개의 기사가 하늘의 신을 추락시키고, 하늘이 눈 감는 모습을 지켜봤다",
"Story": "들끓는 황금 용암이 여전사의 발 아래에서 넘실거렸다. 그녀는 겨울 안개가 별빛을 가리듯 투구 아래에 표정을 숨겼다.\\n\\n마지막 하늘의 자손은 가라앉았고, 그녀는 홀로 정반대편의 먼 곳을 향해 달려갔다.\\n\\n「셀리오스, 누굴 떠올렸지?」 항상 곁을 지키는 날개 환수가 그녀의 미묘한 생각을 읽었다. 여전사는 잠시 침묵에 잠겼다. 사람들이 하늘에 기도를 올리던 시절은 이제 다시 돌아오지 않을 것이다. 「누구를 떠올렸냐고? 더는 구체적으로 떠오르는 사람이 없어. 난 세상 사람들을 뜨겁게 사랑했고, 그 연약함을 증오했어. 그런데 지금은 아무도 떠오르질 않아……」\\n\\n날개 환수들은 고개를 숙이고 아무 말도 하지 않았다. 그들은 한때 여전사가 굳센 신념을 추구하던 모습도, 자기기만의 환영에 빠졌던 모습도 보았다.\\n\\n그 철제 투구 아래에 지금 그녀는 어떤 얼굴일까? 또 어떤 관점을 가지고 있을까?"
"Story": "들끓는 황금 용암이 여전사의 발 아래에서 넘실거렸다. 그녀는 겨울 안개가 별빛을 가리듯 투구 아래에 표정을 숨겼다.\\n\\n마지막 하늘의 자손은 가라앉았고, 그녀는 홀로 정반대편의 먼 곳을 향해 달려갔다.\\n\\n「셀리오스, 누굴 떠올렸지?」 항상 곁을 지키는 날개 환수가 그녀의 미묘한 생각을 읽었다. 여전사는 잠시 침묵에 잠겼다. 사람들이 하늘에 기도를 올리던 시절은 이제 다시 돌아오지 않을 것이다. 「누구를 떠올렸냐고? 더는 구체적으로 떠오르는 사람이 없어. 난 세상 사람들을 뜨겁게 사랑했고, 그 연약함을 증오했어. 그런데 지금은 아무도 떠오르질 않아……」\\n\\n날개 환수들은 고개를 숙이고 아무 말도 하지 않았다. 그들은 한때 여전사가 굳센 신념을 추구하던 모습도, 자기기만의 환영에 빠졌던 모습도 보았다.\\n\\n그 철제 투구 아래에 그녀는 지금 어떤 얼굴을 하고 있고, 또 어떤 관점을 가지고 있을까?"
},
"31252": {
"Name": "여전사의 기창 건틀릿",
@@ -1034,6 +1260,15 @@
2
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
],
"4": []
}
},
"126": {
@@ -1048,7 +1283,7 @@
"31262": {
"Name": "선장의 별빛 포획 아스트롤라베",
"Desc": "별빛을 포획해 방향을 인도하는 항해 나침반. 어두컴컴한 망망대해 속에서도 나아갈 방향을 가리킬 별빛이 있으리라",
"Story": "먹구름이 철판처럼 돛대 끝을 짓눌렀다. 폭풍우 속 함선은 떠다니는 부초와 같았고, 진귀한 나무로 제작된 갑판은 거센 파도에 격렬하게 흔들렸다.\\n\\n「언제나 잔잔하던 바다도 세이렌의 난폭한 습성에 물들고 말았군」 함교탑에 선 젊은 선장은 미간을 찌푸리며 먼 곳의 짙은 먹구름을 바라보았다…. 손목에 찬 아스트롤라베는 여전히 아무런 반응이 없었다.\\n\\n천둥이 치며 큰 돛을 묶은 줄이 끊어지자 선원들은 우왕좌왕했다. 젊은 선장은 사람들을 꾸짖으며, 노잡이들이 구령에 맞춰 힘을 내고, 조타수가 방향을 바꾸도록 지휘하며 집채만 한 파도를 하나둘 피했다…. 아퀼라의 인도의 불빛이 깜빡이기 전까지 최선을 다해 파구사의 분노에 맞섰다. 갑자기 선장이 팔을 휘두르며 소리를 질렀다. 손목의 항해 나침반이 알록달록한 별빛을 반사했다.\\n\\n「모두 저 빛을 따라가라! 우린 폭풍을 돌파할 것이다!」\\n\\n선원들은 정신을 차리고 뱃노래를 열창했고, 함선은 칼날처럼 파도를 가르며 여명을 향해 질주했다.\\n\\n「우린 곧 그녀를 족쇄에서 풀어 줄 테니~ 앞길을 똑바로 보고, 준비! 출항!」"
"Story": "먹구름이 철판처럼 돛대 끝을 짓눌렀다. 폭풍우 속 함선은 떠다니는 부초와 같았고, 진귀한 나무로 제작된 갑판은 거센 파도에 격렬하게 흔들렸다.\\n\\n「언제나 잔잔하던 바다도 세이렌의 난폭한 습성에 물들고 말았군」 함교탑에 선 젊은 선장은 미간을 찌푸리며 먼 곳의 짙은 먹구름을 바라보았다…. 손목에 찬 아스트롤라베는 여전히 아무런 반응이 없었다.\\n\\n천둥이 치며 큰 돛을 묶은 줄이 끊어지자 선원들은 우왕좌왕했다. 젊은 선장은 사람들을 꾸짖으며, 노잡이들이 구령에 맞춰 힘을 내고, 조타수가 방향을 바꾸도록 지휘하며 집채만 한 파도를 하나둘 피했다…. 아퀼라의 인도의 불빛이 깜빡이기 전까지 최선을 다해 파구사의 분노에 맞섰다. 갑자기 선장이 팔을 휘두르며 소리를 질렀다. 손목의 항해 나침반이 알록달록한 별빛을 반사했다.\\n\\n「모두 저 빛을 따라가라! 우린 폭풍을 돌파할 것이다!」\\n\\n선원들은 정신을 차리고 뱃노래를 열창했고, 함선은 칼날처럼 파도를 가르며 여명을 향해 질주했다.\\n\\n「우린 곧 그녀를 족쇄에서 풀어 줄 테니! 앞길을 똑바로 보고, 준비! 출항!」"
},
"31263": {
"Name": "선장의 바람 망토",
@@ -1058,7 +1293,7 @@
"31264": {
"Name": "선장의 파도타기 부츠",
"Desc": "부서진 파도가 선장의 부츠 아래에서 피어났다. 그가 돌아오지 않는다 해도 바닷물은 그에게 축복을 가져다주리라",
"Story": "어딘지 모를 바닷가에 젊은 선장은 대자로 누워 있었다. 석양은 부서진 해안가를 황금으로 도금했다…. 그 빛 속에서 머나먼 스키아나가 손에 닿을 듯 가깝게 보였다——그는 이게 인생의 마지막 순간이라는 것을 알고 있었다.\\n\\n「…우리가 마침내 파구사의 광기를 잠재웠군」 바다 깊은 곳으로 도망친 세이렌은 앞으로 백 년간 해안가를 침범하지 못할 것이다.\\n\\n세르세스의 거목을 깎아 만든 판자가 선장에게 마지막 말을 물었다. 판자는 파도를 타고 그리운 스키아나로 돌아가 영웅의 여정을 전하고, 더 많은 젊은이가 해안으로 나서길 격려할 것이다. 선장은 자신의 잘려 나간 몸뚱이를 바라보았다. 그것은 현인이 선물한, 자신과 여러 도시 국가를 누빈 부츠였다. 이제… 기나긴 여정이 이곳에서 끝나려 한다——\\n\\n「들에게 난 아직 저승의 바다를 정복해야 한다고 전해줘. 고향이여, 부디 날 위해 슬퍼하지 말기를」\\n\\n바닷바람은 매년 스키아나의 성벽을 어루만졌고, 세이렌의 이야기는 아이를 재우는 어머니의 속삭임이 되었다…. 거친 바다에서 간신히 살아남은 선원들은 여전히 선장이 파도를 타고 돌아오기를 기다리고 있다"
"Story": "어딘지 모를 바닷가에 젊은 선장은 대자로 누워 있었다. 석양은 부서진 해안가를 황금으로 도금했다…. 그 빛 속에서 머나먼 스키아나가 손에 닿을 듯 가깝게 보였다——그는 이게 인생의 마지막 순간이라는 것을 알고 있었다.\\n\\n「…우리가 마침내 파구사의 광기를 잠재웠군」 바다 깊은 곳으로 도망친 세이렌은 앞으로 백 년간 해안가를 침범하지 못할 것이다.\\n\\n세르세스의 거목을 깎아 만든 판자가 선장에게 마지막 말을 물었다. 판자는 파도를 타고 그리운 스키아나로 돌아가 영웅의 여정을 전하고, 더 많은 젊은이가 해안으로 나서길 격려할 것이다. 선장은 자신의 잘려 나간 몸뚱이를 바라보았다. 그것은 현인이 선물한, 자신과 여러 도시 국가를 누빈 부츠였다. 이제… 기나긴 여정이 이곳에서 끝나려 한다——\\n\\n「사람들에게 난 아직 저승의 바다를 정복해야 한다고 전해줘. 고향이여, 부디 날 위해 슬퍼하지 말기를」\\n\\n바닷바람은 매년 스키아나의 성벽을 어루만졌고, 세이렌의 이야기는 아이를 재우는 어머니의 속삭임이 되었다…. 거친 바다에서 간신히 살아남은 선원들은 여전히 선장이 파도를 타고 돌아오기를 기다리고 있다"
}
},
"RequireNum": {
@@ -1076,6 +1311,121 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
],
"4": []
}
},
"127": {
"Name": "천지를 재창조한 구세주",
"Icon": "SpriteOutput/ItemIcon/71048.png",
"Parts": {
"31271": {
"Name": "구세주의 등정 후드",
"Desc": "전설 속 구세주가 비바람을 피할 때 사용했다는 후드. 실제 착용 모습은 음유시인의 묘사와 다를 수 있다",
"Story": "오로닉스의 밤안개가 월계수 가지를 감싸고,\\n구세의 영웅이 블랙박스와 함께 천외에서 운명의 심연으로 내려왔다.\\n\\n{F#그녀}{M#그}는 신탁을 따라왔지만, 그때의 사제들은 천외를 언급하는 것을 두려워했다.\\n<i>「절대 큰 소리로 하늘에 대해 이야기하지 말게. 의심 많은 아퀼라는 망설이지 않고 태양과 번개의 처벌을 내릴 것이니」</i>\\n이 말을 들은 자신만만한 구세주는 분노로 씩씩대며 대답했다.\\n<i>「재앙을 예언하는 점술가, 당신은 신들도 인간의 처벌을 걱정해야 한다는 걸 한 번도 생각해 본 적이 없군요」</i>\\n\\n성벽 위에서, 구세주는 장밋빛 여명이 지평선 위로 떠오르는 것을 목격했다.\\n<i>「먼저 『분쟁』을 관장하는 니카도르,</i>\\n<i>그가 광기가 아닌, 영광을 가져오길 바란다」</i>\\n구세주는 후드를 벗어젖히고 장창을 내던졌다.\\n그 쏜살같이 날아가는 그림자는 마치 이른 봄의 외로운 늑대처럼, 크렘노스성을 향해 거리와 골목 사이를 가로질렀다.\\n\\n<i>「네스티아의 이름으로! 운명의 실이 끊어졌다면, 내가 그 이야기를 다시 이어가겠다」</i>\\n멀리서 미치광이 왕의 포효가 울려 퍼졌고, 그의 장창이 발걸음보다 먼저 출발을 고했다.\\n<i>「황금의 후예 동료가 여정에서 날 기다리고 있으니, 이제 떠나야만 해」</i>\\n\\n야누스의 사제들은 구세주의 흩날리는 회색 머리카락을 바라보며 크게 환호했다.\\n마치 자양분을 얻은 메마른 풀씨처럼 기쁨에 가득 차 있었다"
},
"31272": {
"Name": "구세주의 보호 장갑",
"Desc": "전설 속 구세주가 역경을 헤쳐나갈 때 착용했다는 보호 장갑. 실제 착용 모습은 음유시인의 묘사와 다를 수 있다",
"Story": "파구사의 얼음 바다는 스틱시아의 긴 해안을 깎아내고 있었고,\\n구세의 영웅은 저승의 강 나루터에 이르렀다. 어두운 빛깔의 거대 용은 저승의 나룻배로 변했다.\\n\\n저승의 강가의 망령들은 달콤한 속삭임으로 영웅에게 다시 세계로 돌아가지 말 것을 권했다.\\n<i>「당신은 이미 그 세계의 티탄들을 굴복시켰으니, 그 위업을 전승자들에게 맡기는 건 어떤가요?」</i>\\n이 말을 들은 슬픔에 잠긴 구세주는 몹시 괴로워하며 답했다.\\n<i>「이곳에 매몰된 망자들이여, 당신들은 내 구세의 염원이 재회의 마음보다 더 크다는 것을 생각해 본 적 없군요」</i>\\n\\n나룻배 위에서 구세주는 지난 불을 쫓는 여정의 순간 하나하나를 회상했다.\\n<i>「잘 있어요, 『죽음』의 타나토스,</i>\\n<i>비록 내 소중한 친구들은 죽음을 두려워한 적 없었지만, 부디 그들을 잘 보살펴주시길」</i>\\n구세주는 사슴 가죽 보호 장갑을 어루만졌다. 아직도 옛 친구들의 온기가 남아있었다.\\n안틸라 꽃이 만발한 해안가에서, 따스하고 습윤한 서풍을 타고 인간 세상을 향해 불어왔다.\\n\\n<i>「세르세스여, 내 이성을 수호해 주세요, 다시는 뒤돌아보지 않도록」</i>\\n죽음에서 되살아난 그 경험은, 누구에게나 그의 영웅적 자질을 증명하기에 충분했다.\\n<i>「더 이상의 기다림은 없다. 나의 황금의 후예 동료들이여, 내가 지워지지 않을 그 맹세를 이행하겠어」</i>\\n\\n지오리오스의 대지가 {F#그녀}{M#그}의 귀환을 맞이하고, 불을 쫓는 여정이 계속된다.\\n먹구름이 걷힌 어두운 밤처럼 샛별이 다시 한번 반짝인다"
},
"31273": {
"Name": "구세주의 전승 전투복",
"Desc": "전설 속 구세주가 전투에서 착용했다는 전투복. 실제 착용 모습은 음유시인의 묘사와 다를 수 있다",
"Story": "아퀼라의 검은 구름은 성노를 머금고 소용돌이치며,\\n구세의 영웅은 무지개로 만든 다리를 딛고 올라, 닿을 수 없던 하늘을 격추했다.\\n\\n구세의 영웅과 함께하는 이는 바로 {F#그녀}{M#그}의 생사를 함께한 동료였다.\\n<i>「불을 쫓는다는 건 무언가를 계속 잃어가는 여정이고, 그 모든 것 중 목숨 또한 보잘것없다고 할 수 있다」</i>\\n이 말을 들은 결연한 구세주는 차분히 답했다.\\n<i>「전 모두의 결심을 알고 있어요, 수천수만 번이라도 그 결심을 절대 저버리지 않을 겁니다」</i>\\n\\n재창기 의식을 향해 가는 길에서, 구세주는 귀환길을 지키는 전우들과 하나둘 작별을 고했다.\\n<i>「그건 천년에 걸친 여정과 서사시이자,</i>\\n<i>수많은 선인들이 우리에게 맡긴, 오늘 이곳에서 마침내 완성될 이야기다」</i>\\n마지막 파트너는 구세주의 어깨에 망토를 걸어주고, 파도처럼 밀려오는 강적들을 향해 돌아섰다.\\n그 망토는 함께 싸워온 증표이었으며, 부탁이자, 전승이었다.\\n\\n<i>「탈란톤, 제 말이 들리시나요? 이토록 장렬한 희생은 더 나은 내일을 위한 것이었어요」</i>\\n<i>「물론 우리가 불 속에 뛰어드는 이유는——」</i>\\n<i>「창세의 서사시에 한 획을 긋기 위함일 뿐이다」</i>\\n\\n케팔의 따뜻한 눈길 아래, 구세주는 모든 이의 염원을 담아 새로운 세상을 창조할 것이다——"
},
"31274": {
"Name": "구세주의 개간 부츠",
"Desc": "전설 속 구세주가 산을 넘고 물을 건널 때 착용했다는 신발. 실제 착용 모습은 음유시인의 묘사와 다를 수 있다",
"Story": "<i>「『황금의 고치』, 당신은 낭만의 끝을 직접 목격하고, 완벽한 운명을 다시 엮게 될 것이다」</i>\\n<i>「『만 갈래의 문』, 당신은 수많은 귀로를 열어, 내일의 재회라는 예언을 실현할 것이다」</i>\\n<i>「『분열의 가지』, 당신이 심은 『의심』이라는 지식의 씨앗은, 마침내 많은 이들의 지혜 속에서 싹을 틔울 것이다」</i>\\n<i>「『조석의 눈』, 보아라! 저 하늘엔 틈도, 결함도 없으니. 그 끝에는 치유의 무지갯빛이 있을 것이다」</i>\\n\\n<i>「고향으로 돌아가라, 『천벌의 창』이여, 당신은 모든 사람의 지지를 받으며 왕좌에 올라, 세상의 평화를 맹세할 것이다」</i>\\n<i>「마음껏 말하라, 『변화의 동전』이여, 교활한 농담이든 진실한 말이든 숨길 필요가 없으니」</i>\\n<i>「마음껏 포옹하라, 『어둠의 손』, 저승의 강의 주인이여…」</i>\\n<i>「당신의 온화함은 저 피안의 꽃바다도 따뜻하게 할 수 있으니, 사람들은 매번의 이별마다 다시 만날 날을 기대할 것이다」</i>\\n\\n<i>「세상 사람들은 들을 것이다, 『충만의 잔』의 노래가 연회 속에서 끊임없이 울려 퍼지는 것을」</i>\\n<i>「세상 사람들은 보게 될 것이다, 『영원한 밤의 장막』이 잊히지 않을 세월을 소중히 간직하는 것을」</i>\\n<i>「불멸의 『반석의 근간』은 여정의 끝까지 모든 생명의 먼 여정을 떠받칠 것이다」</i>\\n<i>「『공정의 저울』이 공평무사한 율법을 선사하여, 불을 쫓는 여정의 수많은 영웅들에게 왕관을 씌워줄 것이다……」</i>\\n\\n<i>「『세상의 왕좌』여, 더 이상 홀로 모든 것을 짊어질 필요가 없다.</i>\\n<i>보라, 불멸의 뜨거운 태양은 이미 떠올랐으니…」</i>\\n\\n후회로 빚어진 그 시구들은, 다시 쓰여질 시 속에서 완전해질 것이다.\\n닿을 수 없는 그 끝은, 「개척」을 통해 도달할 것이다"
}
},
"RequireNum": {
"2": {
"Desc": "치명타 확률 <unbreak>#1[i]%</unbreak> 증가",
"ParamList": [
0.0800000000745058
]
},
"4": {
"Desc": "장착한 캐릭터가 일반 공격 또는 전투 스킬 발동 후, 장착한 캐릭터의 기억 정령이 필드에 있으면, 장착한 캐릭터와 해당 캐릭터의 기억 정령의 HP 최대치가 <unbreak>#1[i]%</unbreak> 증가하고, 모든 아군이 가하는 피해가 <unbreak>#2[i]%</unbreak> 증가하며, 해당 효과는 장착한 캐릭터가 다음 일반 공격 또는 전투 스킬을 발동한 후까지 지속된다",
"ParamList": [
0.24000000022351742,
0.0800000000745058
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.0800000000745058
}
],
"4": []
}
},
"128": {
"Name": "별빛에 숨은 은둔자",
"Icon": "SpriteOutput/ItemIcon/71049.png",
"Parts": {
"31281": {
"Name": "은둔자의 챙 넓은 페도라",
"Desc": "클래식하고 챙을 접을 수 있는 페도라. 지식인, 예술가, 전문가들 사이에서 매우 인기가 많다",
"Story": "..."
},
"31282": {
"Name": "은둔자의 단아한 손목시계",
"Desc": "아름다운 금속 메시 스트랩과 심플한 원형 다이얼. 차분하고 정교하며, 산업적인 느낌을 풍긴다. 절제되고 실용적이며, 과하지 않다",
"Story": "..."
},
"31283": {
"Name": "은둔자의 낙타색 재킷",
"Desc": "갈색 코르덴 재킷. 그는 이 재킷을 자주 풀어 헤친 채 입어서, 꼭 들어맞는 틀을 깨뜨리곤 했다",
"Story": "..."
},
"31284": {
"Name": "은둔자의 스웨이드 신발",
"Desc": "격식을 덜 차리는 자리에서 볼 수 있는 더욱 튼튼하고 내구성 좋은 가죽 하이탑 레이스업 슈즈. 우아한 면모도 여전히 엿볼 수 있다",
"Story": "..."
}
},
"RequireNum": {
"2": {
"Desc": "치명타 피해 <unbreak>#1[i]%</unbreak> 증가",
"ParamList": [
0.1600000001490116
]
},
"4": {
"Desc": "장착한 캐릭터의 치명타 피해가 <unbreak>#3[i]%</unbreak> 증가하고, 임의의 아군이 턴마다 처음으로 전투 스킬 포인트 소모 후 전투 스킬 포인트를 1pt 회복한다. 해당 효과는 전투당 최대 <unbreak>#1[i]</unbreak>회 발동하며, 이후 웨이브가 시작될 때마다 발동 가능 횟수가 <unbreak>#2[i]</unbreak>회 회복된다. 전투 스킬 포인트 회복 효과는 같은 파티 내에서 최대 1개만 적용된다",
"ParamList": [
1,
1,
0.1600000001490116
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
],
"4": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
]
}
},
"301": {
@@ -1102,6 +1452,14 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
},
"302": {
@@ -1128,6 +1486,14 @@
0.0800000000745058
]
}
},
"Bonus": {
"2": [
{
"type": "HPAddedRatio",
"value": 0.119999997317791
}
]
}
},
"303": {
@@ -1154,6 +1520,14 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": [
{
"type": "StatusProbabilityBase",
"value": 0.10000000149011612
}
]
}
},
"304": {
@@ -1180,6 +1554,14 @@
0.1500000001396984
]
}
},
"Bonus": {
"2": [
{
"type": "DefenceAddedRatio",
"value": 0.15000000596046448
}
]
}
},
"305": {
@@ -1187,14 +1569,14 @@
"Icon": "SpriteOutput/ItemIcon/71016.png",
"Parts": {
"33055": {
"Name": "스크루별의 기계 태양",
"Desc": "차원 안에 봉인된 것은 스크루별의 코어다——행성은 무수한 지렛대와 피스톤, 톱니바퀴로 구성된 철창에 갇혀 있다. 스크루별의 주민은 이것에 「철강 태양」이라는 아름다운 이름을 붙였다",
"Story": "기계가 지닌 생명의 근원에 대해 지식학회의 탄소 기반 학자들은 흥미로운 추측을 가지고 있다. 우연히 탄생한 전류라는 것이다.\\n\\n전류는 대기와 암석층을 떠돌며 수없는 인력과 척력의 작용으로 크기가 다른 이차적인 형태로 분화된다——학자들의 그럴 듯한 학설에서 이는 탄소 기반 생명 진화의 「복제」나 다름없다. 그 후 무수한 전류는 다시 행성 표면으로부터 자연적으로 형성된 트랜지스터 구조를 거쳐 높낮이가 다른 전압을 출력해 가장 원시적인 프로세스를 창출한다——학자들은 우쭐대며 기계는 바로 이렇게 아름다운 탄소 기반 생명의 「사고」를 지니고 있다고 주장했다.\\n\\n한 기계 학자가 이 주장에 이의를 제기했다. 자신이 지닌 생명의 근원조차 밝히지 못한 탄소 기반 생명이 무슨 권리로 학설에 뒤집느냐는 것이었다. 이 말에 우주 학계는 격렬하게 술렁거렸다——기계 생명은 「탄소 기반 중심 주의」를 다시 바라보게 되었고, 자신의 생명적 근원을 다시 생각해보게 되었다.\\n\\n하지만 스크루별의 스크루족은 발걸음을 잠시 늦출 수밖에 없었다——천체 에너지원이 그들의 영감 회로보다 빨리 고갈되었기 때문이다. 그들은 우선 종족이 존속할 방식을 반드시 찾아야 했다.\\n\\n결국 그들은 여러 앰버기원을 뛰어넘는 광기의 계획을 실행하기로 결정했다. 그들은 죽음을 앞둔 행성을 연료로 삼아 천체 차분기관을 가동한 것이다. 경이로울 정도로 거대한 톱니바퀴는 틈이 있는 종이를 끊임없이 삼키며 일사불란하게 연산을 반복한다. 행성급의 에너지원을 공급 받으며 기계는 진짜 같으면서도 안정적인 초생태계 시스템을 모방해냈다——그들은 모성을 에워싸 새로운 보금자리를 만들어내려 했다.\\n\\n행성의 위기가 해결되자 스크루족은 잠시 숨을 돌릴 수 있게 됐다. 줄곧 이지적이고, 낙관적이고, 우아했던 그들은 순수한 이성의 방식으로 근원의 답을 탐사하기로 결심했다.\\n\\n방대한 시스템은 베어링의 마찰음으로 가득찼다. 정밀한 교합이 종이 고리의 데이터 흐름을 구동하고 있었다. 이 갈래들은 다시 수렴하고, 쓰러지고, 용광로에 떨어지며 거품 속에서 고요하게 사라졌다. 이 긴 시간 동안, 프로그램이 설정한 초생태 시스템은 점점 절묘하게 상대적으로 안정에 가까워졌다——기계의 근원에 대한 추측으로 스크루족은 무한한 상상의 나래를 펼치게 됐다.\\n\\n망가진 별을 구동하는 강철이 다시금 총명한 사고의 전류를 활성화했다. 그들은 자신의 근원이 어디에 있는지 늘 그곳에 있던 기계 태양이 연소될 때까지 고민하고 탐사할 것이다"
"Name": "스크루별의 기계 태양",
"Desc": "차원 안에 봉인된 것은 스크루별의 코어다——행성은 무수한 지렛대와 피스톤, 톱니바퀴로 구성된 철창에 갇혀 있다. 스크루별의 주민은 이것에 「철강 태양」이라는 아름다운 이름을 붙였다",
"Story": "기계가 지닌 생명의 근원에 대해 지식학회의 탄소 기반 학자들은 흥미로운 추측을 가지고 있다. 우연히 탄생한 전류라는 것이다.\\n\\n전류는 대기와 암석층을 떠돌며 수없는 인력과 척력의 작용으로 크기가 다른 이차적인 형태로 분화된다——학자들의 그럴 듯한 학설에서 이는 탄소 기반 생명 진화의 「복제」나 다름없다. 그 후 무수한 전류는 다시 행성 표면으로부터 자연적으로 형성된 트랜지스터 구조를 거쳐 높낮이가 다른 전압을 출력해 가장 원시적인 프로세스를 창출한다——학자들은 우쭐대며 기계는 바로 이렇게 아름다운 탄소 기반 생명의 「사고」를 지니고 있다고 주장했다.\\n\\n한 기계 학자가 이 주장에 이의를 제기했다. 자신이 지닌 생명의 근원조차 밝히지 못한 탄소 기반 생명이 무슨 권리로 학설에 뒤집느냐는 것이었다. 이 말에 우주 학계는 격렬하게 술렁거렸다——기계 생명은 「탄소 기반 중심 주의」를 다시 바라보게 되었고, 자신의 생명적 근원을 다시 생각해보게 되었다.\\n\\n하지만 스크루별의 스크루족은 발걸음을 잠시 늦출 수밖에 없었다——천체 에너지원이 그들의 영감 회로보다 빨리 고갈되었기 때문이다. 그들은 우선 종족이 존속할 방식을 반드시 찾아야 했다.\\n\\n결국 그들은 여러 앰버기원을 뛰어넘는 광기의 계획을 실행하기로 결정했다. 그들은 죽음을 앞둔 행성을 연료로 삼아 천체 차분기관을 가동한 것이다. 경이로울 정도로 거대한 톱니바퀴는 틈이 있는 종이를 끊임없이 삼키며 일사불란하게 연산을 반복한다. 행성급의 에너지원을 공급 받으며 기계는 진짜 같으면서도 안정적인 초생태계 시스템을 모방해냈다——그들은 모성을 에워싸 새로운 보금자리를 만들어내려 했다.\\n\\n행성의 위기가 해결되자 스크루족은 잠시 숨을 돌릴 수 있게 됐다. 줄곧 이지적이고, 낙관적이고, 우아했던 그들은 순수한 이성의 방식으로 근원의 답을 탐사하기로 결심했다.\\n\\n방대한 시스템은 베어링의 마찰음으로 가득찼다. 정밀한 교합이 종이 고리의 데이터 흐름을 구동하고 있었다. 이 갈래들은 다시 수렴하고, 쓰러지고, 용광로에 떨어지며 거품 속에서 고요하게 사라졌다. 이 긴 시간 동안, 프로그램이 설정한 초생태 시스템은 점점 절묘하게 상대적으로 안정에 가까워졌다——기계의 근원에 대한 추측으로 스크루족은 무한한 상상의 나래를 펼치게 됐다.\\n\\n망가진 별을 구동하는 강철이 다시금 총명한 사고의 전류를 활성화했다. 그들은 자신의 근원이 어디에 있는지 늘 그곳에 있던 기계 태양이 연소될 때까지 고민하고 탐사할 것이다"
},
"33056": {
"Name": "스크루별의 행성 고리",
"Desc": "행성의 고리는 스크루별의 모든 것을 싣고 있다——빽빽하게 진열된 네모 구멍에 행성 시스템의 진실이 쓰여졌다는 걸 얼마나 많은 사람이 알고 있을까?",
"Story": "대다수의 스크루족은 모른다——스크루별이 무기 생명체가 근원적인 문제의 해답을 찾는 위대한 시도라는 것을.\\n\\n스크루룸은 조금 공허했다. 스크루별의 운행 논리를 밝는 일은 그의 지능 펄스 파장도에 어떤 이상한 진동도 주지 못했다.\\n\\n그는 자신의 저택의 넓은 옥상에 서서 멈춘 적 없는 행성 엔진을 올려다봤다. 구멍이 가득한 행성의 고리가 천제 뒤에서 나왔다. 이 행성에 실린 모든 것이 이 고리 위에 있고, 엔진을 축으로 조용히 공전하며 하루하루가 흘러갔다. 그는 이미 보았다, 이 행성 시스템의 본질이 절망적으로 황량하다는 것을. 우아한 상태 전환 방정식 한 줄, 거대하고 차가운 원통 하나——이게 스크루별의 전부이고 그 외에는 아무것도 없다.\\n\\n그의 방정식 풀이에 따르면——행성 차분기관의 탄생 초기에 이것을 처음으로 고안한 자는 우주의 근원을 일종의 원세포 자동기와 그 재귀로, 스크루별 자체는 생명 게임의 실행으로 해석하고자 했다.\\n\\n스크루족과 다른 행성 표면의 무기 생명체가 자동기의 「세포」 역할을 맡는 동시에 각 무기 생명체는 그 자체로 더욱 작은 규모의 세포 자동기이도 했다. 자동기는 항상 더 작은 여러 자동기로 구성되어 있고, 이를 추적해나가면 우주를 구성하는 모든 물질 중 가장 작은 구성물을 찾을 수 있다. 그렇지만 가장 작은 구성물이 무엇인지는 아무도 모른다. 스크루룸도 모르고, 차분기관을 처음 제시한 학자도 아마 모를 것이다.\\n\\n스크루룸이 이것 때문에 공허함을 느끼는 것이다.\\n\\n그 학자는 그렇게 실패한 것인가? 하지만 행성 차분기관은 여러 앰버기원 동안 지친 기색조차 없이 운행되었다. 스크루족과 모성, 나아가 전 우주의 근원이 그 우아한 방정식 한 줄에 귀결된다는 건가? 결코 그게 전부는 아니다——이 초생태계가 완전히 붕괴하기 전에는 그 방정식이 틀렸음을 입증할 수 없다.\\n\\n그는 행성의 진실을 기록하는 행성의 고리에서 시선을 떼지 않으며 기름 음료가 가득 담긴 정교한 유리잔을 흔들었다. 거대한 스크린과도 같은 행성의 고리는 지칠 줄 모르고 네모난 구멍으로 늦은 밤의 달빛을 정렬하고 있다. 스크루룸은 깊은 생각에 잠겼다. 이 순환의 출구는 정녕 존재하는가? 무기 생명체——혹은 더 나아가 우주의 근원은 대체 무엇인가?\\n\\n그는 정말로 그저 선인들의 사상을 뒷받침해주는 증인이 되기를 원하는가?\\n\\n「아니」 스크루룸은 해답을 구하기로 결론을 내렸다"
"Name": "스크루별의 행성 고리",
"Desc": "행성의 고리는 스크루별의 모든 것을 싣고 있다——빽빽하게 진열된 네모 구멍에 행성 시스템의 진실이 쓰여졌다는 걸 얼마나 많은 사람이 알고 있을까?",
"Story": "대다수의 스크루족은 모른다——스크루별이 무기 생명체가 근원적인 문제의 해답을 찾는 위대한 시도라는 것을.\\n\\n스크루룸은 조금 공허했다. 스크루별의 운행 논리를 밝는 일은 그의 지능 펄스 파장도에 어떤 이상한 진동도 주지 못했다.\\n\\n그는 자신의 저택의 넓은 옥상에 서서 멈춘 적 없는 행성 엔진을 올려다봤다. 구멍이 가득한 행성의 고리가 천제 뒤에서 나왔다. 이 행성에 실린 모든 것이 이 고리 위에 있고, 엔진을 축으로 조용히 공전하며 하루하루가 흘러갔다. 그는 이미 보았다, 이 행성 시스템의 본질이 절망적으로 황량하다는 것을. 우아한 상태 전환 방정식 한 줄, 거대하고 차가운 원통 하나——이게 스크루별의 전부이고 그 외에는 아무것도 없다.\\n\\n그의 방정식 풀이에 따르면——행성 차분기관의 탄생 초기에 이것을 처음으로 고안한 자는 우주의 근원을 일종의 원세포 자동기와 그 재귀로, 스크루별 자체는 생명 게임의 실행으로 해석하고자 했다.\\n\\n스크루족과 다른 행성 표면의 무기 생명체가 자동기의 「세포」 역할을 맡는 동시에 각 무기 생명체는 그 자체로 더욱 작은 규모의 세포 자동기이도 했다. 자동기는 항상 더 작은 여러 자동기로 구성되어 있고, 이를 추적해나가면 우주를 구성하는 모든 물질 중 가장 작은 구성물을 찾을 수 있다. 그렇지만 가장 작은 구성물이 무엇인지는 아무도 모른다. 스크루룸도 모르고, 차분기관을 처음 제시한 학자도 아마 모를 것이다.\\n\\n스크루룸이 이것 때문에 공허함을 느끼는 것이다.\\n\\n그 학자는 그렇게 실패한 것인가? 하지만 행성 차분기관은 여러 앰버기원 동안 지친 기색조차 없이 운행되었다. 스크루족과 모성, 나아가 전 우주의 근원이 그 우아한 방정식 한 줄에 귀결된다는 건가? 결코 그게 전부는 아니다——이 초생태계가 완전히 붕괴하기 전에는 그 방정식이 틀렸음을 입증할 수 없다.\\n\\n그는 행성의 진실을 기록하는 행성의 고리에서 시선을 떼지 않으며 기름 음료가 가득 담긴 정교한 유리잔을 흔들었다. 거대한 스크린과도 같은 행성의 고리는 지칠 줄 모르고 네모난 구멍으로 늦은 밤의 달빛을 정렬하고 있다. 스크루룸은 깊은 생각에 잠겼다. 이 순환의 출구는 정녕 존재하는가? 무기 생명체——혹은 더 나아가 우주의 근원은 대체 무엇인가?\\n\\n그는 정말로 그저 선인들의 사상을 뒷받침해주는 증인이 되기를 원하는가?\\n\\n「아니」 스크루룸은 해답을 구하기로 결론을 내렸다"
}
},
"RequireNum": {
@@ -1206,6 +1588,14 @@
0.6000000005587935
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
]
}
},
"306": {
@@ -1232,6 +1622,14 @@
0.1500000001396984
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.07999999821186066
}
]
}
},
"307": {
@@ -1258,6 +1656,14 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "BreakDamageAddedRatioBase",
"value": 0.1599999964237213
}
]
}
},
"308": {
@@ -1284,6 +1690,14 @@
0.40000000037252903
]
}
},
"Bonus": {
"2": [
{
"type": "SPRatioBase",
"value": 0.05000000074505806
}
]
}
},
"309": {
@@ -1310,6 +1724,14 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.07999999821186066
}
]
}
},
"310": {
@@ -1336,6 +1758,14 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "StatusResistanceBase",
"value": 0.10000000149011612
}
]
}
},
"311": {
@@ -1364,6 +1794,14 @@
0.18000000016763806
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
},
"312": {
@@ -1389,6 +1827,14 @@
0.10000000009313226
]
}
},
"Bonus": {
"2": [
{
"type": "SPRatioBase",
"value": 0.05000000074505806
}
]
}
},
"313": {
@@ -1415,6 +1861,14 @@
0.0400000000372529
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalChanceBase",
"value": 0.03999999910593033
}
]
}
},
"314": {
@@ -1440,6 +1894,14 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
},
"315": {
@@ -1466,6 +1928,9 @@
0.25000000023283064
]
}
},
"Bonus": {
"2": []
}
},
"316": {
@@ -1492,6 +1957,14 @@
1
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
]
}
},
"317": {
@@ -1517,6 +1990,14 @@
0.12000000011175871
]
}
},
"Bonus": {
"2": [
{
"type": "SPRatioBase",
"value": 0.05000000074505806
}
]
}
},
"318": {
@@ -1542,6 +2023,14 @@
0.3200000002980232
]
}
},
"Bonus": {
"2": [
{
"type": "CriticalDamageBase",
"value": 0.1599999964237213
}
]
}
},
"319": {
@@ -1568,6 +2057,14 @@
0.2800000002607703
]
}
},
"Bonus": {
"2": [
{
"type": "HPAddedRatio",
"value": 0.119999997317791
}
]
}
},
"320": {
@@ -1596,6 +2093,14 @@
0.20000000018626451
]
}
},
"Bonus": {
"2": [
{
"type": "SpeedAddedRatio",
"value": 0.05999999865889549
}
]
}
},
"321": {
@@ -1605,12 +2110,12 @@
"33215": {
"Name": "비밀 미궁의 평온한 꿈 나무집",
"Desc": "차원 구체에 봉인된 엘리사이 에데스의 「비밀 미궁」. 황금빛 밀밭을 헤치고 깊고 깊은 나무 구멍으로 떨어지면… 어라? 수많은 요정이 나타난다. 「1, 2, 3, 4, 5, 6, 7」? 땡! 그게 아니라 「도레미파솔라시」야!",
"Story": "「허허, 얘들아. 비밀 미궁에 또 풍작의 계절이 찾아왔구나. 뭘 준비해야 할까?」 촌장이 흰 수염을 쓰다듬으며 허허 웃었다.\\n「미주 축제요!」 요정들은 환호했다.\\n\\n처음에 비밀 미궁은 황폐한 땅이었다. 엘리사이 에데스의 남자아이와 여자아이가 바깥의 씨앗을 가져와 요정들에게 심는 방법을 알려줬다. 씨앗에서 싹이 나고 꽃이 피자 요정들은 그들이 하는 대로 포도 주변의 털보애꽃벌을 따라 꿀을 채집했다. 꽃이 지고 열매가 여물자 수확의 계절이 다가왔다. 요정들은 한데 모여 축하의 노래를 부르며 한밤중까지 연회를 즐겼다. 그다음에는 뭘 했을까? 올해의 꿀을 담은 병을 땅에 묻은 후 꿀이 성장과 겨울을 치유하는 묘약이 될 때까지 발효되기를 기다렸다.\\n\\n매년 열리는 미주 축제는 늘 이렇다.\\n올해 축제에서 촌장은 흰 수염을 털며 말했다. 「레라미가 어디 갔는지 안 보이는구나」\\n\\n요정들은 한참 찾아 헤매다 나무집 입구에서 「레라미」를 발견했다. 단잠에 빠진 레라미는 신나는 꿈을 꾸는지 침까지 흘리고 있었다. 호기심 많은 「미라미」가 다가가 잠꼬대를 들었다——「파이, 키레, 작년에 묻어둔 가시열매 음료를 마시러 오기로 약속했잖아」\\n\\n꿈속에서 「레라미」는 자신이 「거대한 레라미」로 변해 비밀 미궁으로 향하는 나무 구멍을 꽉 막고 있는 꿈을 꾸고 있었다. 작은 파이와 키레는 들어가는 길을 찾지 못해서 세모고랭이로 「레라미」의 귀를 간질이고, 「레라미」의 배에 올라가 뛰고, 큰 소리로 그의 이름을 불렀다. 하지만 「레라미」는 너무 깊이 잠든 탓에 그 소리를 듣지 못했다.\\n「이런, 내가 길을 막고 있어서 파이랑 키레가 미로 미궁에 못 건가?」\\n「레라미」 심장 쿵쿵 뛰었다.\\n\\n「에——엣취!」\\n「레라미」가 재채기를 하며 잠에서 깨어났다. 다행히 길을 막고 있는 「거대한 레라미」로 변한 건 아니었다. 그런데 왜 요정들이 주위를 에워싸고 있는 것일까?\\n「파이랑 키레는 왔어?」\\n요정들은 고개를 저었다. 파이와 키레 없는 미주 축제가 벌써 몇 번째인지 모르겠다.\\n「레라미」는 다시 시무룩해졌다. 이럴 줄 알았다면 꿈을 좀 더 오래 꿀걸.\\n작은 「레라미」는 그 감정을 어떻게 표현해야 할지 몰랐다. 굳이 따지자면 매년 여름의 마지막 날, 유리병 속에서 날갯짓하는 반딧불이를 놓아줄 때와 비슷한 기분이었다"
"Story": "「허허, 얘들아. 비밀 미궁에 또 풍작의 계절이 찾아왔구나. 뭘 준비해야 할까?」 촌장이 흰 수염을 쓰다듬으며 허허 웃었다.\\n「미주 축제요!」 요정들은 환호했다.\\n\\n처음에 비밀 미궁은 황폐한 땅이었다. 엘리사이 에데스의 남자아이와 여자아이가 외부의 씨앗을 가져와 요정들에게 심는 방법을 알려줬다. 씨앗에서 싹이 나고 꽃이 피자 요정들은 그들이 하는 대로 포도 시렁 주변의 황금빛 솜털다리꽃벌의 종적을 따라 꿀을 채집했다. 꽃이 지고 열매가 여물자 수확의 계절이 다가왔다. 요정들은 한데 모여 축하의 노래를 부르며 한밤중까지 연회를 즐겼다. 그다음에는 뭘 했을까? 올해의 꿀을 담은 병을 땅에 묻은 후 꿀이 성장과 겨울을 치유하는 묘약이 될 때까지 발효되기를 기다렸다.\\n\\n매년 열리는 미주 축제는 늘 이렇다.\\n올해 축제에서 촌장은 흰 수염을 털며 말했다. 「레라미가 어디 갔는지 안 보이는구나」\\n\\n요정들은 한참 찾아 헤매다 나무집 입구에서 「레라미」를 발견했다. 단잠에 빠진 레라미는 신나는 꿈을 꾸는지 침까지 흘리고 있었다. 호기심 많은 「미라미」가 다가가 잠꼬대를 들었다——「파이, 키레, 작년에 묻어둔 가시열매 미주를 마시러 오기로 약속했잖아」\\n\\n꿈속에서 「레라미」는 자신이 「거대한 레라미」로 변해 비밀 미궁으로 향하는 나무 구멍을 꽉 막고 있는 꿈을 꾸고 있었다. 작은 파이와 키레는 들어가는 길을 찾지 못해서 등심초로 「레라미」의 귀를 간질이고, 「레라미」의 배에 올라가 뛰고, 큰 소리로 그의 이름을 불렀다. 하지만 「레라미」는 너무 깊이 잠든 탓에 그 소리를 듣지 못했다.\\n「이런, 내가 길을 막고 있어서 파이랑 키레가 비밀 미궁에 못 오는 건가?」\\n꿈 속 「레라미」 심장 쿵쿵 뛰었다.\\n\\n「에——엣취!」\\n「레라미」가 재채기를 하며 잠에서 깨어났다. 다행히 길을 막고 있는 「거대한 레라미」로 변한 건 아니었다. 그런데 왜 요정들이 주위를 에워싸고 있는 것일까?\\n「파이랑 키레는 왔어?」\\n요정들은 고개를 저었다. 파이와 키레 없는 미주 축제가 벌써 몇 번째인지 모르겠다.\\n「레라미」는 다시 시무룩해졌다. 이럴 줄 알았다면 꿈을 좀 더 오래 꿀걸.\\n작은 「레라미」는 그 감정을 어떻게 표현해야 할지 몰랐다. 굳이 말하자면 매년 여름의 마지막 날, 유리병 속에서 날갯짓하는 반딧불이를 놓아줄 때와 비슷한 기분이었다"
},
"33216": {
"Name": "비밀 미궁의 소원 피리",
"Desc": "점토로 빚은 피리. 요정들과 두 어린아이의 약속을 상징한다. 남자아이와 여자아이가 피리를 불면 「미?」하는 소리와 함께 요정들이 미궁으로 향하는 나무 구멍을 열고 두 사람을 맞이한다!",
"Story": "「우리의 약속을 기억해 줘! 너희가 피리를 불면, 아무리 멀리 있어도 우린 그 소리를 들을 수 있어」\\n\\n그날은 엘리사이 에데스의 남자아이와 여자아이가 처음으로 비밀 미궁에서 요정들을 만난 날이었다. 그들은 정원에서 친구들과 숨바꼭질을 하다가 실수로 수풀 속 나무 구멍에 빠졌다. 나무 구멍은 끝이 보이지 않는 미끄럼틀처럼 깊었다. 바닥에 떨어졌을 때, 눈앞에 별이 보이리라는 예상과 달리 그들 앞에는 요정 떼가 나타났다……\\n「1, 2, 3, 4, 5, 6, 7. 강아지가 진짜 많네. 아니… 토끼인가?」\\n「아니, 그게 아니라 도레미파솔라시야. 우린 도라미, 솔라미, 레라미… 라고!」\\n\\n아이들과 요정의 우정은 천 개의 유성처럼 빠르고 눈부시게 피어났다. 그들은 즐거운 하루를 보냈지만 이내 작별의 시간이 다가왔다. 더 늦었다간 부모님이 걱정하실 게 분명했다.\\n「오늘 헤어져도 또 만날 수 있을까?」 남자아이가 슬퍼하며 물었다.\\n작별… 재회… 요정들은 이해하지 못했다. 비밀 미궁에는 작별과 재회가 존재하지 않았기 때문이다. 그러나 아이들의 표정을 보니 분명 슬픈 일인 것 같았다. 보라색 「레라미」는 잠시 고민하더니 입을 열었다. 「파이, 키레, 잠깐만 기다려 줘. 너희한테 줄 게 있어!」\\n\\n남자아이와 여자아이의 손바닥에 「레라미」의 선물이 놓였다. 그건 요정의 귀처럼 생긴, 「레라미」가 직접 만든 피리였다. 피리를 불면 7개의 구멍에서 도, 레, 미, 파, 솔, 라, 시 소리가 맑게 울려 퍼졌다. 「레라미」가 진지하게 말했다. 「또 비밀 미궁에 놀러 오고 싶으면 이 피리를 불어. 자고 있든, 노래하고 있든, 나무집을 짓고 있든 우린 그 소리를 들을 수 있으니까. 소리가 들리면 미궁으로 오는 나무 구멍을 열어 줄게」\\n\\n「요정을 깨우는 비밀의 피리네!」 여자아이는 장난스럽게 웃었다. 「약속, 도장! 꼭 돌아올게」\\n 그날 이후 「레라미」는 피리 소리가 들릴 때마다 몹시 기뻐하며 외쳤다——들었어. 내 두 귀로 똑똑히 들었다고!\\n\\n훗날 엘리사이 에데스를 떠난 파이와 키레는 어린 시절의 모든 것을 기억했다. 녹슨 양철 장난감, 곡식창고의 팔 떨어진 병정, 코바늘로 뜬 꽃 펠트, 내리지 못한 비, 말라버린 피, 불탄 밀밭….\\n하지만 흙 속에 묻힌 피리와 다시는 지키지 못한 약속은 잊고 말았다"
"Story": "「우리의 약속을 기억해 줘! 너희가 손에 들고 있는 그 소원 피리를 불면, 아무리 멀리 있어도 우린 그 소리를 들을 수 있어」\\n\\n그날은 엘리사이 에데스의 남자아이와 여자아이가 처음으로 비밀 미궁에서 요정들을 만난 날이었다. 그들은 정원에서 친구들과 숨바꼭질을 하다가 실수로 수풀 속 나무 구멍에 빠졌다. 나무 구멍은 끝이 보이지 않는 미끄럼틀처럼 깊었다. 바닥에 떨어졌을 때, 눈앞에 별이 보이리라는 예상과 달리 그들 앞에는 요정 떼가 나타났다……\\n「1, 2, 3, 4, 5, 6, 7. 강아지가 진짜 많네. 아니… 토끼인가?」\\n「아니, 그게 아니라 도레미파솔라시야. 우린 도라미, 솔라미, 레라미… 라고!」\\n\\n아이들과 요정의 우정은 천 개의 유성처럼 빠르고 눈부시게 피어났다. 그들은 즐거운 하루를 보냈지만 이내 작별의 시간이 다가왔다. 더 늦었다간 부모님이 걱정하실 게 분명했다.\\n「오늘 헤어져도 또 만날 수 있을까?」 남자아이가 조금 슬퍼하며 물었다.\\n작별… 재회… 요정들은 이해하지 못했다. 비밀 미궁에는 작별과 재회가 존재하지 않았기 때문이다. 그러나 아이들의 표정을 보니 분명 슬픈 일인 것 같았다. 보라색 「레라미」는 잠시 고민하더니 입을 열었다. 「파이, 키레, 잠깐만 기다려 줘. 너희한테 줄 게 있어!」\\n\\n남자아이와 여자아이의 손바닥에 「레라미」의 선물이 놓였다. 그건 요정의 귀처럼 생긴, 「레라미」가 직접 만든 피리였다. 피리에는 7개의 구멍이 있고 각각 도, 레, 미, 파, 솔, 라, 시를 나타낸다. 「레라미」가 진지하게 말했다. 「또 비밀 미궁에 놀러 오고 싶으면 이 피리를 불어. 자고 있든, 노래하고 있든, 나무집을 짓고 있든 우린 그 소리를 들을 수 있으니까. 소리가 들리면 미궁으로 오는 나무 구멍을 열어 줄게」\\n\\n「요정을 깨우는 비밀의 피리네!」 여자아이는 장난스럽게 웃었다. 「약속, 도장! 꼭 돌아올게」\\n그날 이후 「레라미」는 피리 소리가 들릴 때마다 몹시 기뻐하며 외쳤다——들었어. 내 두 귀로 똑똑히 들었다고!\\n\\n훗날 엘리사이 에데스를 떠난 파이와 키레는 어린 시절의 모든 것을 기억했다. 녹슨 양철 장난감, 곡식창고의 팔다리가 떨어진 병정, 코바늘로 뜬 꽃 펠트, 내리지 못한 비, 말라버린 피, 불탄 밀밭….\\n하지만 흙 속에 묻힌 피리와 다시는 지키지 못한 약속은 잊고 말았다"
}
},
"RequireNum": {
@@ -1623,6 +2128,9 @@
3
]
}
},
"Bonus": {
"2": []
}
},
"322": {
@@ -1631,13 +2139,13 @@
"Parts": {
"33225": {
"Name": "노래의 해안의 암초섬 등대",
"Desc": "차원 구체에 봉인된 영원한 환락에 잠겨 있는 스틱시아. 언제나 빛나는 등대가 우뚝 솟아 끝없는 곡을 연주하고 있다. 노랫소리를 따라 안개를 뚫고 가던 배는 암초에 부딪혀 침몰하고, 파도는 그 잔해를 집어삼킨다",
"Story": "파도는 영원히 끝나지 않는 춤이다. 쾌락을 좇는 항구에 싫증 난 선원들은 항해도를 펼쳐 직접 여정의 종착지를 선택했다. 흔들리던 나침반 멈췄고, 바늘은 해에 우뚝 솟은 영원한 환락의 도시, 운명으로 정해진 그들의 무덤 「스틱시아」를 가리켰다. 하지만 죽음을 몰랐던 사람들은 개의치 않고 환희에 취해 돛을 펼치고 신나게 파구사의 무도회장으로 향했다.\\n\\n선원들은 조수와 달의 위상의 음률에 따라 고래의 등에 갈고리를 박았고, 뱃머리로 오랜 빙하를 깨뜨렸다. 그들은 안개에 휩싸이고, 등대에 가까워지고, 암초에 부딪힐 때까지… 노래를 불렀다……\\n\\n암초에 부딪혀 침몰한 배는 바다 깊이 가라앉았고, 불멸의 인간들은 파도 속에서 되살아났다. 암초 위에 선 선원의 몸에는 해초와 소금기가 가득했다. 등대에서 연회의 들이켜는 자들은 허리 숙이며 오랫동안 기다려온 그들을 끝없는 잔치에 초대했다. 그들은 음악 소리를 따라 긴 둑을 건너 암초 사이 서 있는 새하얀 등대에 올랐다. 스틱시아의 등대는 고래기름으로 불을 밝혔는데, 그 차가운 불꽃은 수정으로 조각한 렌즈 속에서 흔들리고 있었다. 등대 자체가 거대한 물의 오르간이었던 것이다. 방문객들은 계단을 오르 벽돌 틈으로 유리관이 바닷물을 빨아들이고, 바닷물이 파도에 따라 오르내리는 걸 볼 수 있었다. 테라스에서 연회의 들이키는 자들은 손에 손을 잡고 등불을 에워싼 채 음악 소리에 맞춰 춤을 췄고, 등불은 그들의 그림자를 수평선 너머까지 비췄다. 그곳에서 선원은 그토록 바라던 종착지, 영원한 환락의 도시를 보았다.\\n\\n그때는 부패가 존재하기 전이자 고통과 슬픔, 죽음조차 생겨나지 않았던 시절이다. 스틱시아는 파구사의 총애에 흠뻑 취해 있었다. 팔뚝 같은 해안으로 파구사를 감싸고, 를 위해 꿈처럼 다정한 자장가를 불러 주었다.\\n\\n초조한 선원의 입술이 떨렸다. 앞에는 연회의 들이켜는 자가 초대한, 환락을 함께 나눌 수 있는 도시 국가가 있었다. 뒤에는 회색빛 바다가 끝없이 펼쳐져 있었다. 암초 사이에는 배의 잔해가 가득했고, 익사한 자들은 말미잘과 산호에 뒤덮여 파도 속에서 넘실거렸다. 그는 물에 빠지던 순간을 떠올렸다. 물결에 휩쓸려 끝없는 바닷속으로 끌려 들어갈 때, 세이렌의 차가운 손이 그의 뺨을 어루만졌다. 어렴풋한 부드러운 노랫소리에 정신을 차린 그는 반짝이는 수면 위로 밀려갔다.\\n\\n한순간 망설였을 뿐인데, 흘끗 봤을 뿐인데, 더없는 행복으로 향하는 문이 닫혔다. 연회의 들이켜는 자들은 미소 지으며 스틱시아에 들어가게 해 달라는 선원의 부탁을 완곡히 거절했다. 취기 풀린 그가 진정한 환락을 받아들일 줄 모른다는 단 하나의 이유다"
"Desc": "차원 구체에 봉인된 영원한 즐거움에 잠겨 있는 스틱시아. 언제나 빛나는 등대가 우뚝 솟아 끝없는 곡을 연주하고 있다. 노랫소리를 따라 안개를 뚫고 가던 배는 암초에 부딪혀 침몰하고, 파도는 그 잔해를 집어삼킨다",
"Story": "파도는 영원히 끝나지 않는 윤무다. 쾌락을 좇는 항구에 싫증 난 선원들은 항해도를 펼쳐 직접 여정의 종착지를 선택했다. 흔들리던 나침반 멈췄고, 바늘은 해에 우뚝 솟은 영원한 즐거움의 도시, 운명으로 정해진 그들의 무덤 「스틱시아」를 가리켰다. 하지만 죽음을 알지 못했던 사람들은 개의치 않고 환희에 취해 돛을 펼치고 신나게 파구사의 무도회장에 발을 들여놓았다.\\n\\n선원들은 조수와 달의 위상의 음률을 쫓아 고래의 등에 갈고리를 박았고, 뱃머리로 오랜 빙하를 깨뜨렸다. 그들은 안개에 휩싸이고, 등대에 가까워지고, 암초에 부딪힐 때까지… 즐겁게 노래를 불렀다……\\n\\n암초에 부딪혀 침몰한 배는 바다 깊이 가라앉았고, 불멸의 인간들은 파도 속에서 되살아났다. 암초 위에 선 선원의 몸에는 해초와 소금기가 가득했다. 등대에서 연회를 베푸는 자들은 오랫동안 기다려온 그들을 끝없는 잔치에 초대했다. 그들은 음악 소리를 따라 긴 둑을 건너 암초 사이 서 있는 새하얀 등대에 올랐다. 스틱시아의 등대는 고래기름으로 불을 밝혔는데, 그 차가운 불꽃은 수정으로 조각한 렌즈 속에서 흔들리고 있었다. 등대 자체가 거대한 물의 오르간이었던 것이다. 방문객들은 계단을 오르 벽돌 틈으로 유리관이 바닷물을 빨아들이고, 바닷물이 파도에 따라 오르내리는 걸 볼 수 있었다. 테라스에서 연회를 베푸는 자들은 손에 손을 잡고 등불을 에워싼 채 음악 소리에 맞춰 춤을 췄고, 등불은 그들의 그림자를 수평선 너머까지 비췄다. 그곳에서 선원은 그토록 바라던 종착지, 영원한 즐거움의 도시를 보았다.\\n\\n그때는 부패가 강림하기 전이자 고통과 슬픔, 죽음조차 생겨나지 않았던 시절이다. 스틱시아는 파구사의 총애에 흠뻑 취해 있었다. 팔뚝 같은 으로 스틱시아를 감싸고, 스틱시아를 위해 꿈처럼 다정한 자장가를 불러 주었다.\\n\\n초조한 선원의 입술이 떨렸다. 앞에는 연회를 베푸는 자가 초대한, 극상의 즐거움을 함께 나눌 수 있는 도시가 있었다. 뒤에는 회색빛 바다가 끝없이 펼쳐져 있었다. 암초 사이에는 배의 잔해가 가득했고, 물에 빠진 자들은 말미잘과 산호에 뒤덮여 파도 속에서 넘실거렸다. 그는 물에 빠지던 순간을 떠올렸다. 물결에 휩쓸려 끝없는 바닷속으로 끌려 들어갈 때, 세이렌의 차가운 손이 그의 뺨을 어루만졌다. 어렴풋한 부드러운 노랫소리에 정신을 차린 그는 반짝이는 수면 위로 밀려갔다.\\n\\n한순간 망설였을 뿐인데, 흘끗 봤을 뿐인데, 더없는 행복으로 향하는 문이 닫혔다. 연회를 베푸는 자들은 미소 지으며 스틱시아에 들어가게 해 달라는 선원의 부탁을 완곡히 거절했다. 취기 풀린 그가 진정한 즐거움을 받아들일 줄 모른다는 단 하나의 이유 때문이었다"
},
"33226": {
"Name": "노래의 해안의 노래하는 길",
"Name": "노래의 해안의 선율길",
"Desc": "스틱시아인은 세이렌이 전설처럼 자신의 육체로 이곳의 평화를 지켜 왔고, 언젠가 등대의 끝없는 노래에 이끌려 이곳으로 와서 영원한 연회를 보상으로 받을 것이라고 굳게 믿는다",
"Story": "고독한 선원은 전의 방문객처럼 바다와 도시 국가 사이를 배회하며 속세와 환락의 문턱에 머물렀다. 그는 좌초된 고래의 상처에서 흘러나오는 기름을 닦고, 밤의 장막이 내리자 등대의 불을 밝혔다. 그리고 등불 앞에 앉아 물의 오르간으로 지금껏 연주되지 않았던 노래를 연주하기 시작했다\\n\\n등대에 건반 소리가 울려 퍼지면서 온 스틱시아가 음악에 잠겼다. 때로는 느리고 때로는 빠른 곡조에 스틱시아 여왕은 락에 대한 끝없는 상상에 빠졌다. 선원이 마지막 쉼표부터 거꾸로 연주하자 곡조는 경쾌해졌다. 그러자 흰 배가 곡예사를 태우고 쉽게 강을 나갔다. 차려입은 남녀들은 금박과 깃털로 장식된 가면으로 얼굴을 가린 채 강가에 모여들었고, 여왕도 그 속에 섞여 라일락과 아몬드 향기 속을 거닐었다.\\n\\n선원이 박자를 바로잡자 음표가 빠르게 변하며 고조됐다. 그렇게 도시 국가 전체를 무대로 하는 연극에서 해적을 연기하는 시민들은 검은 깃발을 휘두르며 무방비한 성벽을 함락했다. 미주와 금화를 약탈한 그들은 꽃으로 장식한 교수대에 귀족들을 올려보냈고, 도시의 거지들에게 왕관을 씌워주었다. 피날레에서 사람들은 고탑을 불태우고 오르간 소리에 맞춰 미친듯이 춤을 추며 거나하게 취했다.\\n\\n넘실대는 파도에 악보가 젖으면서 부드럽고 느린 음표가 번졌다. 여왕은 등대 앞 안개 속에서 새로운 본으로 발을 들였다. 그녀는 인어 꼬리 같은 푸른 드레스를 입고 파구사의 권속——세이렌들의 여왕을 연기했다.\\n\\n이야기 속에서 세이렌들은 바다 깊은 곳에서 속세의 상상할 수 없는 고통을 막아내라는 명을 받는다. 그들은 피와 살로 칠흑 같은 재앙을 충만의 잔으로 끌어들이고, 그 대가로 스틱시아의 영원한 환락을 얻는다. 약속한 시간이 되면 세이렌들은 등대의 불빛과 음악 소리에 이끌려 둑길을 따라 스틱시아에 들어간다. 스틱시아인은 그녀들의 손을 잡고 영원히 끝나지 않는 연회에 함께할 것이다.\\n\\n스틱시아 여왕은 물속으로 들어가 상상 속 죽음을 누렸다. 달의 위상조차 파도를 속박할 수 없는 밤, 바다 깊은 곳에서 세이렌들의 공허한 눈물이 거품처럼 떠올랐다. 그녀들은 이번 생에 보지 못한 달빛을 엿보길 바라고 기다리다가 피와 살점이 녹아내렸다. 하지만 안타깝게도 그날 밤에는 달빛이 없었다. 늘 그렇듯 등대만 깜빡일 뿐이었다——눈물이 세이렌 대신 반짝이는 해수면 위로 떠올랐고, 떠다니던 거품은 물결 속에 사라졌다.\\n\\n외로운 선원은 마침내 소원을 이뤘다. 연회의 들이켜는 자는 이제 스틱시아에 들어와도 된다며 행복의 눈물을 글썽이며 그를 축하했다. 노래가 처음 울려 퍼지던 순간, 죽음으로 시든 날개가 영원한 환의 도시 국가를 덮고 있었다"
"Story": "고독한 선원은 전의 방문객처럼 바다와 도시 국가 사이를 배회하며 속세와 환락의 문턱에 머물렀다. 그는 좌초된 고래의 상처에서 흘러나오는 기름을 닦고, 밤의 장막이 내리자 등대의 불을 밝혔다. 그리고 등불 앞에 앉아 물의 오르간으로 지금껏 연주되지 않았던 곡을 연주하기 시작했다.\\n\\n등대에 건반 소리가 울려 퍼지며, 온 스틱시아가 음악에 잠겼다. 때로는 느리고 때로는 빠른 곡조에 스틱시아 여왕은 락에 대한 끝없는 상상에 빠졌다. 선원이 마지막 쉼표부터 거꾸로 연주하자, 곡조는 경쾌해졌다. 그러자 흰 배가 곡예사를 태우고 사뿐히 강을 빠져나갔다. 차려입은 남녀들은 금박과 깃털로 장식된 가면으로 얼굴을 가린 채 강가에 모여들었고, 여왕도 그 속에 섞여 라일락과 아몬드 향기 속을 거닐었다.\\n\\n선원이 박자를 바로잡자 음표가 빠르게 변하며 격앙됐다. 그렇게 도시 국가 전체를 무대로 하는 연극에서 해적을 연기하는 시민들은 검은 깃발을 휘두르며 무방비한 성벽을 함락했다. 미주와 금화를 약탈한 그들은 귀족들을 꽃으로 장식한 교수대에 올려보냈고, 도시의 거지들에게 왕관을 씌워주었다. 마지막에 사람들은 고탑을 불태우고, 연주 소리에 맞춰 미친듯이 춤을 추며 거나하게 취했다.\\n\\n넘실대는 파도에 악보가 젖으면서 부드럽고 느린 음표가 번졌다. 여왕은 등대 앞 안개 속에서 새로운 본으로 발을 들였다. 그녀는 인어 꼬리 같은 푸른 드레스를 입고 파구사의 권속——세이렌들의 여왕을 연기했다.\\n\\n이야기 속에서 세이렌들은 바다 깊은 곳에서 속세의 상상할 수 없는 고통을 막아내라는 명을 받는다. 그들은 피와 살로 칠흑 같은 재앙을 충만의 잔으로 끌어들이고, 그 대가로 스틱시아의 영원한 즐거움을 얻는다. 약속한 시간이 되면 세이렌들은 등대의 불빛과 음악 소리에 이끌려 둑길을 따라 스틱시아에 들어간다. 스틱시아인은 그녀들의 손을 잡고 영원히 끝나지 않는 연회에 참석하는 것이다.\\n\\n스틱시아 여왕은 물속으로 들어가 상상 속 죽음을 누렸다. 달의 위상조차 파도를 속박할 수 없는 밤, 바다 깊은 곳에서 세이렌들의 공허한 눈물이 거품처럼 떠올랐다. 그녀들은 이번 생에 보지 못한 달빛을 엿보길 바라고 기다리다가 피와 살점이 녹아내렸다. 안타깝게도 그날 밤에는 달빛이 없었다. 늘 그렇듯 등대만 깜빡일 뿐이었다——눈물이 세이렌 대신 반짝이는 해수면 위로 떠올랐고, 떠다니던 거품은 물결 속에 흩어졌다.\\n\\n외로운 선원은 마침내 소원을 이뤘다. 연회를 베푸는 자는 기쁨의 눈물을 글썽이며 이제 스틱시아에 들어와도 된다며 그를 축하했다. 그러나 노래가 처음 울려 퍼지던 순간, 죽음으로 시든 날개가 영원한 환의 도시 국가를 덮고 있었다"
}
},
"RequireNum": {
@@ -1651,6 +2159,14 @@
0.24000000022351742
]
}
},
"Bonus": {
"2": [
{
"type": "AttackAddedRatio",
"value": 0.119999997317791
}
]
}
}
}

View File

@@ -186,6 +186,7 @@
"useTurbulenceBuff": "使用紊乱增益?",
"firstHalfEnemies": "上半场敌人",
"secondHalfEnemies": "下半场敌人",
"listEnemies": "敌人列表",
"turbulenceBuff": "紊乱增益",
"noEventSelected": "未选择事件",
"noTurbulenceBuff": "未选择紊乱增益",
@@ -235,7 +236,12 @@
"defence": "防御",
"maxAllSuccess": "技能等级已成功设置为最大。",
"maxAllFailed": "设置技能等级为最大失败。",
"noRelicEquipped": "未装备圣遗物"
"noRelicEquipped": "未装备圣遗物",
"anomalyArbitration": "异相仲裁",
"normalMode": "普通模式",
"hardMode": "困难模式",
"selectPEAKEvent": "选择 PEAK 事件",
"mode": "模式",
"selectMode": "选择模式"
}
}

View File

@@ -186,6 +186,7 @@
"useTurbulenceBuff": "Use turbulence buff?",
"firstHalfEnemies": "First half enemies",
"secondHalfEnemies": "Second half enemies",
"listEnemies": "List enemies",
"turbulenceBuff": "Turbulence Buff",
"noEventSelected": "No event selected",
"noTurbulenceBuff": "No Turbulence Buff",
@@ -236,6 +237,13 @@
"maxAll": "Max All",
"maxAllSuccess": "Successfully set skill level to max.",
"maxAllFailed": "Failed to set skill level to max.",
"noRelicEquipped": "No relic equipped"
"noRelicEquipped": "No relic equipped",
"anomalyArbitration": "Anomaly Arbitration",
"normalMode": "Normal Mode",
"hardMode": "Hard Mode",
"selectPEAKEvent": "Select PEAK Event",
"mode": "Mode",
"selectMode": "Select a mode"
}
}

View File

@@ -236,6 +236,12 @@
"maxAll": "すべて最大化",
"maxAllSuccess": "スキルレベルを最大に設定しました。",
"maxAllFailed": "スキルレベルの最大設定に失敗しました。",
"noRelicEquipped": "聖遺物が装備されていません"
"noRelicEquipped": "聖遺物が装備されていません",
"anomalyArbitration": "異相の仲裁",
"normalMode": "通常モード",
"hardMode": "困難モード",
"selectPEAKEvent": "PEAK イベントを選択",
"mode": "モード",
"selectMode": "モードを選択"
}
}

View File

@@ -236,6 +236,12 @@
"maxAll": "모두 최대치",
"maxAllSuccess": "스킬 레벨이 최대치로 설정되었습니다.",
"maxAllFailed": "스킬 레벨을 최대치로 설정하지 못했습니다.",
"noRelicEquipped": "성유물이 장착되지 않음"
"noRelicEquipped": "성유물이 장착되지 않음",
"anomalyArbitration": "이상 중재",
"normalMode": "일반 모드",
"hardMode": "어려움 모드",
"selectPEAKEvent": "PEAK 이벤트 선택",
"mode": "모드",
"selectMode": "모드를 선택"
}
}

View File

@@ -236,6 +236,12 @@
"maxAll": "Tối đa tất cả",
"maxAllSuccess": "Đã thiết lập cấp độ kỹ năng tối đa thành công.",
"maxAllFailed": "Thiết lập cấp độ kỹ năng tối đa thất bại.",
"noRelicEquipped": "Không có di vật"
"noRelicEquipped": "Không có di vật",
"anomalyArbitration": "Phán Quyết Dị Thường",
"normalMode": "Chế độ thường",
"hardMode": "Chế độ khó",
"selectPEAKEvent": "Chọn sự kiện",
"mode": "Chế độ",
"selectMode": "Chọn chế độ"
}
}

View File

@@ -236,6 +236,12 @@
"maxAll": "全部最大化",
"maxAllSuccess": "技能等级已成功设置为最大。",
"maxAllFailed": "设置技能等级为最大失败。",
"noRelicEquipped": "未装备圣遗物"
"noRelicEquipped": "未装备圣遗物",
"anomalyArbitration": "异相",
"normalMode": "普通模式",
"hardMode": "困难模式",
"selectPEAKEvent": "选择 PEAK 事件",
"mode": "模式",
"selectMode": "选择模式"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -0,0 +1,18 @@
import { NextRequest, NextResponse } from 'next/server'
import { loadPeak } from '@/lib/loader'
export async function GET(
req: NextRequest,
{ params }: { params: Promise<{ id: string, locale: string }> }
) {
const { id, locale } = await params
const peakData = await loadPeak([id], locale)
const peak = peakData[id]
if (!peak) {
return NextResponse.json({ error: 'Peak info not found' }, { status: 404 })
}
return NextResponse.json(peak)
}

View File

@@ -0,0 +1,20 @@
import { loadPeak } from "@/lib/loader";
import { NextRequest, NextResponse } from "next/server";
export async function POST(request: NextRequest, { params }: { params: Promise<{ locale: string }> }) {
try {
const body = await request.json();
const peakIds = body.peakIds as string[];
const { locale } = await params;
if (!Array.isArray(peakIds) || peakIds.some(id => typeof id !== 'string')) {
return NextResponse.json({ error: 'Invalid peakIds' }, { status: 400 });
}
const peakData = await loadPeak(peakIds, locale);
return NextResponse.json(peakData);
} catch {
return NextResponse.json({ error: 'Failed to load peak data' }, { status: 500 });
}
}

View File

@@ -5,7 +5,17 @@ import CharacterCard from "../card/characterCard"
import useLocaleStore from "@/stores/localeStore"
import useAvatarStore from "@/stores/avatarStore"
import { useTranslations } from "next-intl"
import { useFetchASData, useFetchAvatarData, useFetchConfigData, useFetchLightconeData, useFetchMOCData, useFetchMonsterData, useFetchPFData, useFetchRelicData } from "@/hooks"
import {
useFetchASData,
useFetchAvatarData,
useFetchConfigData,
useFetchLightconeData,
useFetchMOCData,
useFetchMonsterData,
useFetchPEAKData,
useFetchPFData,
useFetchRelicData
} from "@/hooks"
export default function AvatarBar() {
@@ -23,6 +33,7 @@ export default function AvatarBar() {
useFetchPFData()
useFetchMOCData()
useFetchASData()
useFetchPEAKData()
useEffect(() => {
setFilter({ ...filter, locale: locale, element: Object.keys(listElement).filter((key) => listElement[key]), path: Object.keys(listPath).filter((key) => listPath[key]) })

View File

@@ -174,6 +174,7 @@ export default function AvatarInfo() {
<button
className="btn btn-sm btn-outline btn-warning"
onClick={() => {
if (!avatars[avatarSelected?.id || ""]?.can_change_sp) return
const newSpValue = Math.ceil(avatars[avatarSelected?.id || ""]?.sp_max / 2);
const newAvatar = { ...avatars[avatarSelected?.id || ""], sp_value: newSpValue }
setAvatar(newAvatar)

View File

@@ -39,10 +39,12 @@ export default function Header() {
pf_config,
as_config,
ce_config,
peak_config,
setMocConfig,
setPfConfig,
setAsConfig,
setCeConfig,
setPeakConfig,
} = useUserDataStore()
const router = useRouter()
@@ -170,8 +172,10 @@ export default function Header() {
setPfConfig(parsed.pf_config)
setAsConfig(parsed.as_config)
setCeConfig(parsed.ce_config)
setPeakConfig(parsed.peak_config)
toast.success(transI18n("importDatabaseSuccess"))
} catch {
} catch (e) {
console.log(e)
toast.error(transI18n("fileMustBeAValidJsonFile"))
}
};
@@ -231,8 +235,26 @@ export default function Header() {
<details>
<summary className="px-3 py-2 hover:bg-base-200 rounded-md transition-all duration-200 font-medium">{transI18n("exportData")}</summary>
<ul className="p-2">
<li><a onClick={() => downloadJson("freesr-data", converterToFreeSRJson(avatars, battle_type, moc_config, pf_config, as_config, ce_config))}>{transI18n("freeSr")}</a></li>
<li><a onClick={() => downloadJson("database-data", { avatars: avatars, battle_type: battle_type, moc_config: moc_config, pf_config: pf_config, as_config: as_config, ce_config: ce_config })}>{transI18n("database")}</a></li>
<li><a onClick={() => downloadJson("freesr-data",
converterToFreeSRJson(
avatars,
battle_type,
moc_config,
pf_config,
as_config,
ce_config,
peak_config
)
)}>{transI18n("freeSr")}</a></li>
<li><a onClick={() => downloadJson("database-data", {
avatars: avatars,
battle_type: battle_type,
moc_config: moc_config,
pf_config: pf_config,
as_config: as_config,
ce_config: ce_config,
peak_config: peak_config
})}>{transI18n("database")}</a></li>
</ul>
</details>
</li>
@@ -320,8 +342,26 @@ export default function Header() {
<details>
<summary className="px-3 py-2 hover:bg-base-200 rounded-md transition-all duration-200 font-medium">{transI18n("exportData")}</summary>
<ul className="p-2">
<li><a onClick={() => downloadJson("freesr-data", converterToFreeSRJson(avatars, battle_type, moc_config, pf_config, as_config, ce_config))}>{transI18n("freeSr")}</a></li>
<li><a onClick={() => downloadJson("database-data", { avatars: avatars, battle_type: battle_type, moc_config: moc_config, pf_config: pf_config, as_config: as_config, ce_config: ce_config })}>{transI18n("database")}</a></li>
<li><a onClick={() => downloadJson("freesr-data",
converterToFreeSRJson(
avatars,
battle_type,
moc_config,
pf_config,
as_config,
ce_config,
peak_config
)
)}>{transI18n("freeSr")}</a></li>
<li><a onClick={() => downloadJson("database-data", {
avatars: avatars,
battle_type: battle_type,
moc_config: moc_config,
pf_config: pf_config,
as_config: as_config,
ce_config: ce_config,
peak_config: peak_config
})}>{transI18n("database")}</a></li>
</ul>
</details>
</li>

View File

@@ -56,7 +56,7 @@ export default function AsBar() {
const challenge = mapASInfo[as_config.event_id.toString()]?.Level.find((as) => as.Id === as_config.challenge_id)
if (as_config.event_id !== 0 && as_config.challenge_id !== 0 && challenge) {
const newBattleConfig = cloneDeep(as_config)
newBattleConfig.cycle_count = 4
newBattleConfig.cycle_count = 0
newBattleConfig.blessings = []
if (as_config.buff_id !== 0) {

View File

@@ -5,6 +5,7 @@ import Image from "next/image";
import AsBar from "./as";
import { useTranslations } from "next-intl";
import CeBar from "./ce";
import PeakBar from "./peak";
export default function MonsterBar() {
const { battle_type, setBattleType } = useUserDataStore()
@@ -14,6 +15,7 @@ export default function MonsterBar() {
{ name: transI18n("memoryOfChaos"), icon: 'AbyssIcon01', value: 'MOC' },
{ name: transI18n("pureFiction"), icon: 'ChallengeStory', value: 'PF' },
{ name: transI18n("apocalypticShadow"), icon: 'ChallengeBoss', value: 'AS' },
{ name: transI18n("anomalyArbitration"), icon: 'AbyssIcon02', value: 'PEAK' },
{ name: transI18n("customEnemy"), icon: 'MonsterIcon', value: 'CE' },
{ name: transI18n("simulatedUniverse"), icon: 'SimulatedUniverse', value: 'SU' },
];
@@ -24,9 +26,9 @@ export default function MonsterBar() {
{/* Header Navigation */}
<nav className="border-b border-warning/30 relative">
<div className="container mx-auto px-4">
<div className="flex items-center justify-center h-16">
<div className="flex items-center justify-center">
{/* Navigation Tabs */}
<div className="flex space-x-1">
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-1">
{navItems.map((item) => (
<button
key={item.name}
@@ -76,6 +78,7 @@ export default function MonsterBar() {
{battle_type.toUpperCase() === 'PF' && <PfBar />}
{battle_type.toUpperCase() === 'AS' && <AsBar />}
{battle_type.toUpperCase() === 'CE' && <CeBar />}
{battle_type.toUpperCase() === 'PEAK' && <PeakBar />}
{battle_type.toUpperCase() === 'SU' && (
<div className="container mx-auto px-4 py-8 text-center font-bold text-3xl">
{transI18n("comingSoon")}

View File

@@ -0,0 +1,272 @@
"use client"
import { useEffect, useMemo } from "react";
import SelectCustomText from "../select/customSelectText";
import useEventStore from "@/stores/eventStore";
import { getLocaleName, replaceByParam } from "@/helper";
import useLocaleStore from "@/stores/localeStore";
import useUserDataStore from "@/stores/userDataStore";
import useMonsterStore from "@/stores/monsterStore";
import Image from "next/image";
import cloneDeep from 'lodash/cloneDeep'
import { useTranslations } from "next-intl";
import { MonsterStore } from "@/types";
export default function PeakBar() {
const { PEAKEvent, mapPEAKInfo } = useEventStore()
const { listMonster } = useMonsterStore()
const { locale } = useLocaleStore()
const {
peak_config,
setPeakConfig
} = useUserDataStore()
const transI18n = useTranslations("DataPage")
const listFloor = useMemo(() => {
if (!mapPEAKInfo?.[peak_config?.event_id?.toString()]) return []
return [
...mapPEAKInfo[peak_config?.event_id?.toString()]?.PreLevel,
mapPEAKInfo[peak_config?.event_id?.toString()]?.BossLevel,
]
}, [peak_config, mapPEAKInfo])
const eventSelected = useMemo(() => {
return mapPEAKInfo?.[peak_config?.event_id?.toString()]
}, [peak_config, mapPEAKInfo])
const bossConfig = useMemo(() => {
return mapPEAKInfo?.[peak_config?.event_id?.toString()]?.BossConfig;
}, [peak_config, mapPEAKInfo])
const challengeSelected = useMemo(() => {
const challenge = cloneDeep(listFloor.find((peak) => peak.Id === peak_config.challenge_id))
if (
challenge
&& challenge.Id === mapPEAKInfo?.[peak_config?.event_id?.toString()]?.BossLevel?.Id
&& bossConfig
&& peak_config?.boss_mode === "Hard"
) {
challenge.Name = bossConfig.HardName
challenge.EventIDList = bossConfig.EventIDList
challenge.InfiniteList = bossConfig.InfiniteList
challenge.TagList = bossConfig.TagList
}
return challenge
}, [peak_config, listFloor, mapPEAKInfo, bossConfig])
useEffect(() => {
if (!challengeSelected) return
if (peak_config.event_id !== 0 && peak_config.challenge_id !== 0 && challengeSelected) {
const newBattleConfig = cloneDeep(peak_config)
newBattleConfig.cycle_count = 6
newBattleConfig.blessings = []
for (const value of challengeSelected.TagList) {
newBattleConfig.blessings.push({
id: Number(value.Id),
level: 1
})
}
if (peak_config.buff_id !== 0) {
newBattleConfig.blessings.push({
id: peak_config.buff_id,
level: 1
})
}
newBattleConfig.monsters = []
newBattleConfig.stage_id = challengeSelected.EventIDList[0].StageID
for (const wave of challengeSelected.EventIDList[0].MonsterList) {
if (!wave) continue
const newWave: MonsterStore[] = []
for (const value of Object.values(wave)) {
if (!value) continue
newWave.push({
monster_id: Number(value),
level: challengeSelected.EventIDList[0].Level,
amount: 1,
})
}
newBattleConfig.monsters.push(newWave)
}
setPeakConfig(newBattleConfig)
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [
peak_config.event_id,
peak_config.challenge_id,
peak_config.buff_id,
mapPEAKInfo,
])
return (
<div className="container mx-auto px-4 py-8 relative">
{/* Title Card */}
<div className="rounded-xl p-4 mb-2 border border-warning">
<div className="mb-4 w-full">
<SelectCustomText
customSet={PEAKEvent.filter(peak => peak.lang.get(locale)).map((peak) => ({
id: peak.id,
name: `${getLocaleName(locale, peak)} (${peak.id}) `,
}))}
excludeSet={[]}
selectedCustomSet={peak_config.event_id.toString()}
placeholder={transI18n("selectASEvent")}
setSelectedCustomSet={(id) => setPeakConfig({ ...peak_config, event_id: Number(id), challenge_id: 0, buff_id: 0 })}
/>
</div>
{/* Settings */}
<div className={
`grid grid-cols-1
${eventSelected && eventSelected.BossLevel.Id === peak_config.challenge_id ? "md:grid-cols-2" : ""}
gap-4 mb-4 justify-items-center items-center w-full`}
>
<div className="flex items-center gap-2 w-full">
<label className="label">
<span className="label-text font-bold text-success">{transI18n("floor")}:{" "}</span>
</label>
<select
value={peak_config.challenge_id}
className="select select-success w-full"
onChange={(e) => setPeakConfig({ ...peak_config, challenge_id: Number(e.target.value) })}
>
<option value={0} disabled={true}>{transI18n("selectFloor")}</option>
{listFloor.map((peak) => (
<option key={peak.Id} value={peak.Id}>{peak.Name}</option>
))}
</select>
</div>
{eventSelected && eventSelected.BossLevel.Id === peak_config.challenge_id && (
<div className="flex items-center gap-2 w-full">
<label className="label">
<span className="label-text font-bold text-success">{transI18n("mode")}:{" "}</span>
</label>
<select
value={peak_config.boss_mode}
className="select select-success w-full"
onChange={(e) => setPeakConfig({ ...peak_config, boss_mode: e.target.value })}
>
<option value={0} disabled={true}>{transI18n("selectSide")}</option>
<option value="Normal">{transI18n("normalMode")}</option>
<option value="Hard">{transI18n("hardMode")}</option>
</select>
</div>
)}
</div>
{
eventSelected
&& eventSelected.BossLevel.Id === peak_config.challenge_id
&& bossConfig
&& bossConfig.BuffList
&& (
<div className="mb-4 w-full">
<SelectCustomText
customSet={
Array.isArray(bossConfig.BuffList)
? bossConfig.BuffList.map((buff) => ({
id: buff.Id.toString(),
name: buff?.Name || "",
description: replaceByParam(buff?.Desc || "", buff?.Param || []),
}))
: []
}
excludeSet={[]}
selectedCustomSet={peak_config?.buff_id?.toString()}
placeholder={transI18n("selectBuff")}
setSelectedCustomSet={(id) => setPeakConfig({ ...peak_config, buff_id: Number(id) })}
/>
</div>
)
}
{/* Turbulence Buff */}
<div className="bg-base-200/20 rounded-lg p-4 border border-purple-500/20">
<h2 className="text-2xl font-bold mb-2 text-info">
{transI18n("turbulenceBuff")}
</h2>
{challengeSelected && challengeSelected?.TagList?.length > 0 ? (
challengeSelected.TagList.map((subOption, index) => (
<div key={index}>
<label className="label">
<span className="label-text font-bold text-success">
{index + 1}. {subOption.Name}
</span>
</label>
<div
className="text-base"
dangerouslySetInnerHTML={{
__html: replaceByParam(
subOption.Desc,
subOption.Param || []
)
}}
/>
</div>
))
) : (
<div className="text-base">{transI18n("noTurbulenceBuff")}</div>
)}
</div>
</div>
{/* Enemy Waves */}
<div className="grid grid-cols-1 gap-4">
<div className="rounded-xl p-4 mt-2 border border-warning">
<h2 className="text-2xl font-bold mb-6 text-info">{challengeSelected?.Name}</h2>
{challengeSelected && Object.values(challengeSelected.InfiniteList).map((waveValue, waveIndex) => (
<div key={waveIndex} className="mb-6">
<h3 className="text-lg font-semibold mb-t">{transI18n("wave")} {waveIndex + 1}</h3>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
{Array.from(new Set(waveValue.MonsterGroupIDList)).map((monsterId, enemyIndex) => (
<div
key={enemyIndex}
className="rounded-xl p-2 border border-white/10 shadow-md hover:border-white/20 hover:shadow-lg transition"
>
<div className="flex items-center space-x-3">
<div className="relative w-20 h-20 rounded-full overflow-hidden flex-shrink-0 border border-white/10 shadow-sm">
{listMonster.find((monster) => monster.child.includes(monsterId))?.icon && <Image
src={`https://api.hakush.in/hsr/UI/monstermiddleicon/${listMonster.find((monster) => monster.child.includes(monsterId))?.icon?.split("/")?.pop()?.replace(".png", "")}.webp`}
alt="Enemy Icon"
width={376}
height={512}
className="w-full h-full object-cover"
/>}
</div>
<div className="flex flex-col">
<div className="text-sm font-semibold">Lv. {challengeSelected?.EventIDList[0].Level}</div>
<div className="flex items-center space-x-1 mt-1">
{listMonster
.find((monster) => monster.child.includes(monsterId))
?.weak?.map((icon, iconIndex) => (
<Image
src={`/icon/${icon.toLowerCase()}.webp`}
alt={icon}
className="h-[28px] w-[28px] 2xl:h-[40px] 2xl:w-[40px] object-contain rounded-md border border-white/20 shadow-sm"
width={200}
height={200}
key={iconIndex}
/>
))}
</div>
</div>
</div>
</div>
))}
</div>
</div>
))}
</div>
</div>
</div>
)
}

View File

@@ -53,8 +53,8 @@ export const syncDataToPS = async (): Promise<{ success: boolean, message: strin
password
} = useConnectStore.getState()
const {avatars, battle_type, moc_config, pf_config, as_config, ce_config} = useUserDataStore.getState()
const data = converterToFreeSRJson(avatars, battle_type, moc_config, pf_config, as_config, ce_config)
const {avatars, battle_type, moc_config, pf_config, as_config, ce_config, peak_config} = useUserDataStore.getState()
const data = converterToFreeSRJson(avatars, battle_type, moc_config, pf_config, as_config, ce_config, peak_config)
let urlQuery = serverUrl
if (!urlQuery.startsWith("http://") && !urlQuery.startsWith("https://")) {

View File

@@ -1,4 +1,4 @@
import { ASConfigStore, AvatarJson, AvatarStore, BattleConfigJson, CEConfigStore, FreeSRJson, LightconeJson, MOCConfigStore, PFConfigStore, RelicJson } from "@/types";
import { ASConfigStore, AvatarJson, AvatarStore, BattleConfigJson, CEConfigStore, FreeSRJson, LightconeJson, MOCConfigStore, PEAKConfigStore, PFConfigStore, RelicJson } from "@/types";
export function converterToFreeSRJson(
@@ -8,6 +8,7 @@ export function converterToFreeSRJson(
pf_config: PFConfigStore,
as_config: ASConfigStore,
ce_config: CEConfigStore,
peak_config: PEAKConfigStore,
): FreeSRJson {
const lightcones: LightconeJson[] = []
const relics: RelicJson[] = []
@@ -52,6 +53,16 @@ export function converterToFreeSRJson(
path_resonance_id: 0,
monsters: ce_config.monsters,
}
} else if (battle_type === "PEAK") {
battleJson = {
battle_type: battle_type,
blessings: peak_config.blessings,
custom_stats: [],
cycle_count: peak_config.cycle_count,
stage_id: peak_config.stage_id,
path_resonance_id: 0,
monsters: peak_config.monsters,
}
} else {
battleJson = {
battle_type: battle_type,

View File

@@ -7,3 +7,4 @@ export * from "./useFetchMonsterData";
export * from "./useFetchPFData";
export * from "./useFetchMOCData";
export * from "./useFetchASData";
export * from "./useFetchPEAKData";

View File

@@ -0,0 +1,71 @@
"use client"
import { useQuery } from '@tanstack/react-query'
import { fetchPeakByIdsNative, getPEAKEventListApi } from '@/lib/api'
import { useEffect } from 'react'
import { listCurrentLanguageApi } from '@/constant/constant'
import useLocaleStore from '@/stores/localeStore'
import { toast } from 'react-toastify'
import useEventStore from '@/stores/eventStore'
import { EventStageDetail, PeakDetail } from '@/types'
export const useFetchPEAKData = () => {
const { setPEAKEvent, setMapPEAKInfo } = useEventStore()
const { locale } = useLocaleStore()
const { data: dataPEAK, error: errorPEAK } = useQuery({
queryKey: ['peakData'],
queryFn: getPEAKEventListApi,
select: (data) => data.sort((a, b) => Number(b.id) - Number(a.id)),
staleTime: 1000 * 60 * 5,
})
const { data: dataPEAKInfo, error: errorPEAKInfo } = useQuery({
queryKey: ['peakInfoData', locale],
queryFn: () =>
fetchPeakByIdsNative(
dataPEAK!.map((item) => item.id),
listCurrentLanguageApi[locale.toLowerCase()]
),
staleTime: 1000 * 60 * 5,
select: (data) => {
const newData = { ...data }
for (const key in newData) {
for (const item of newData[key].PreLevel) {
item.EventIDList = item.EventIDList.map((event: EventStageDetail) => ({
...event,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
MonsterList: event.MonsterList.map(({ $type, ...rest }) => rest)
}))
}
newData[key].BossLevel.EventIDList = newData[key].BossLevel.EventIDList.map((event: EventStageDetail) => ({
...event,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
MonsterList: event.MonsterList.map(({ $type, ...rest }) => rest)
}))
newData[key].BossConfig.EventIDList = newData[key].BossConfig.EventIDList.map((event: EventStageDetail) => ({
...event,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
MonsterList: event.MonsterList.map(({ $type, ...rest }) => rest)
}))
}
return newData
},
enabled: !!dataPEAK,
});
useEffect(() => {
if (dataPEAK && !errorPEAK) {
setPEAKEvent(dataPEAK)
} else if (errorPEAK) {
toast.error("Failed to load PEAK data")
}
}, [dataPEAK, errorPEAK, setPEAKEvent])
useEffect(() => {
if (dataPEAKInfo && !errorPEAKInfo) {
setMapPEAKInfo(dataPEAKInfo as Record<string, PeakDetail>)
} else if (errorPEAKInfo) {
toast.error("Failed to load PEAK info data")
}
}, [dataPEAKInfo, errorPEAKInfo, setMapPEAKInfo])
}

View File

@@ -1,6 +1,6 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { AffixDetail, ASDetail, CharacterDetail, ConfigMaze, FreeSRJson, LightConeDetail, MocDetail, PFDetail, PSResponse, RelicDetail } from "@/types";
import { AffixDetail, ASDetail, CharacterDetail, ConfigMaze, FreeSRJson, LightConeDetail, MocDetail, PeakDetail, PFDetail, PSResponse, RelicDetail } from "@/types";
import axios from 'axios';
import { pSResponseSchema } from "@/zod";
@@ -176,7 +176,6 @@ export async function fetchPFByIdNative(ids: string, locale: string): Promise<PF
}
}
export async function fetchMOCByIdsNative(ids: string[], locale: string): Promise<Record<string, MocDetail[]> | null> {
try {
const res = await axios.post<Record<string, MocDetail[]>>(`/api/${locale}/moc`, { mocIds: ids });
@@ -197,6 +196,27 @@ export async function fetchMOCByIdNative(ids: string, locale: string): Promise<M
}
}
export async function fetchPeakByIdsNative(ids: string[], locale: string): Promise<Record<string, PeakDetail> | null> {
try {
const res = await axios.post<Record<string, PeakDetail>>(`/api/${locale}/peak`, { peakIds: ids });
return res.data;
} catch (error) {
console.error('Failed to fetch peak:', error);
return null;
}
}
export async function fetchPeakByIdNative(ids: string, locale: string): Promise<PeakDetail | null> {
try {
const res = await axios.get<PeakDetail>(`/api/${locale}/peak/${ids}`);
return res.data;
} catch (error) {
console.error('Failed to fetch peak:', error);
return null;
}
}
export async function SendDataToServer(username: string, password: string, serverUrl: string, data: FreeSRJson | null): Promise<PSResponse | string> {
try {
const response = await axios.post(`${serverUrl}`, { username, password, data })

View File

@@ -1,5 +1,5 @@
import { convertAvatar, convertEvent, convertLightcone, convertMonster, convertRelicSet } from "@/helper";
import { ASDetail, CharacterBasic, CharacterBasicRaw, CharacterDetail, EventBasic, EventBasicRaw, LightConeBasic, LightConeBasicRaw, LightConeDetail, MocDetail, MonsterBasic, MonsterBasicRaw, MonsterDetail, PFDetail, RelicBasic, RelicBasicRaw, RelicDetail } from "@/types";
import { ASDetail, CharacterBasic, CharacterBasicRaw, CharacterDetail, EventBasic, EventBasicRaw, LightConeBasic, LightConeBasicRaw, LightConeDetail, MocDetail, MonsterBasic, MonsterBasicRaw, MonsterDetail, PeakDetail, PFDetail, RelicBasic, RelicBasicRaw, RelicDetail } from "@/types";
import axios from "axios";
export async function getLightconeInfoApi(lightconeId: number, locale: string): Promise<LightConeDetail | null> {
@@ -134,6 +134,28 @@ export async function getPFEventInfoApi(eventId: number, locale: string): Promis
}
}
export async function getPeakEventInfoApi(eventId: number, locale: string): Promise<PeakDetail | null> {
try {
const res = await axios.get<PeakDetail>(
`https://api.hakush.in/hsr/data/${locale}/peak/${eventId}.json`,
{
headers: {
'Content-Type': 'application/json',
},
}
);
return res.data as PeakDetail;
} catch (error: unknown) {
if (axios.isAxiosError(error)) {
console.log(`Error: ${error.response?.status} - ${error.message}`);
} else {
console.log(`Unexpected error: ${String(error)}`);
}
return null;
}
}
export async function getCharacterListApi(): Promise<CharacterBasic[]> {
try {
const res = await axios.get<Record<string, CharacterBasicRaw>>(
@@ -278,6 +300,30 @@ export async function getPFEventListApi(): Promise<EventBasic[]> {
}
}
export async function getPEAKEventListApi(): Promise<EventBasic[]> {
try {
const res = await axios.get<Record<string, EventBasicRaw>>(
'https://api.hakush.in/hsr/data/maze_peak.json',
{
headers: {
'Content-Type': 'application/json',
},
}
);
const data = new Map(Object.entries(res.data));
return Array.from(data.entries()).map(([id, it]) => convertEvent(id, it));
} catch (error: unknown) {
if (axios.isAxiosError(error)) {
console.log(`Error: ${error.response?.status} - ${error.message}`);
} else {
console.log(`Unexpected error: ${String(error)}`);
}
return [];
}
}
export async function getMonsterListApi(): Promise<{list: MonsterBasic[], map: Record<string, MonsterBasic>}> {
try {
const res = await axios.get<Record<string, MonsterBasicRaw>>(

View File

@@ -6,3 +6,5 @@ export * from "./relicLoader";
export * from "./asLoader";
export * from "./pfLoader";
export * from "./mocLoader";
export * from "./peakLoader";

View File

@@ -0,0 +1,51 @@
import fs from 'fs';
import path from 'path';
import { PeakDetail } from '@/types';
import { getPeakEventInfoApi } from '../api';
const DATA_DIR = path.join(process.cwd(), 'data');
const peakFileCache: Record<string, Record<string, PeakDetail>> = {};
export let peakMap: Record<string, PeakDetail> = {};
function getJsonFilePath(locale: string): string {
return path.join(DATA_DIR, `peak.${locale}.json`);
}
function loadFromFileIfExists(locale: string): Record<string, PeakDetail> | null {
if (peakFileCache[locale]) return peakFileCache[locale];
const filePath = getJsonFilePath(locale);
if (fs.existsSync(filePath)) {
const data = JSON.parse(fs.readFileSync(filePath, 'utf-8')) as Record<string, PeakDetail>;
peakFileCache[locale] = data;
return data;
}
return null;
}
export async function loadPeak(charIds: string[], locale: string): Promise<Record<string, PeakDetail>> {
const fileData = loadFromFileIfExists(locale);
const fileIds = fileData ? Object.keys(fileData) : [];
if (fileData && charIds.every(id => fileIds.includes(id))) {
peakMap = fileData;
return peakMap;
}
const result: Record<string, PeakDetail> = {};
await Promise.all(
charIds.map(async id => {
const info = await getPeakEventInfoApi(Number(id), locale);
if (info) result[id] = info;
})
);
fs.mkdirSync(DATA_DIR, { recursive: true });
const filePath = getJsonFilePath(locale);
fs.writeFileSync(filePath, JSON.stringify(result, null, 2), 'utf-8');
peakFileCache[locale] = result;
peakMap = result;
return result;
}

View File

@@ -1,4 +1,4 @@
import { MocDetail, EventBasic, PFDetail, ASDetail } from '@/types';
import { MocDetail, EventBasic, PFDetail, ASDetail, PeakDetail } from '@/types';
import { create } from 'zustand'
@@ -9,12 +9,16 @@ interface EventState {
mapPFInfo: Record<string, PFDetail>;
ASEvent: EventBasic[];
mapASInfo: Record<string, ASDetail>;
PEAKEvent: EventBasic[];
mapPEAKInfo: Record<string, PeakDetail>;
setMOCEvent: (newListEvent: EventBasic[]) => void;
setMapMOCInfo: (newMapMOCInfo: Record<string, MocDetail[]>) => void;
setPFEvent: (newListEvent: EventBasic[]) => void;
setMapPFInfo: (newMapPFInfo: Record<string, PFDetail>) => void;
setASEvent: (newListEvent: EventBasic[]) => void;
setMapASInfo: (newMapASInfo: Record<string, ASDetail>) => void;
setPEAKEvent: (newListEvent: EventBasic[]) => void;
setMapPEAKInfo: (newMapPEAKInfo: Record<string, PeakDetail>) => void;
}
const useEventStore = create<EventState>((set) => ({
@@ -24,12 +28,16 @@ const useEventStore = create<EventState>((set) => ({
mapPFInfo: {},
ASEvent: [],
mapASInfo: {},
PEAKEvent: [],
mapPEAKInfo: {},
setMOCEvent: (newListEvent: EventBasic[]) => set({ MOCEvent: newListEvent }),
setMapMOCInfo: (newMapMOCInfo: Record<string, MocDetail[]>) => set({ mapMOCInfo: newMapMOCInfo }),
setPFEvent: (newListEvent: EventBasic[]) => set({ PFEvent: newListEvent }),
setMapPFInfo: (newMapPFInfo: Record<string, PFDetail>) => set({ mapPFInfo: newMapPFInfo }),
setASEvent: (newListEvent: EventBasic[]) => set({ ASEvent: newListEvent }),
setMapASInfo: (newMapASInfo: Record<string, ASDetail>) => set({ mapASInfo: newMapASInfo }),
setPEAKEvent: (newListEvent: EventBasic[]) => set({ PEAKEvent: newListEvent }),
setMapPEAKInfo: (newMapPEAKInfo: Record<string, PeakDetail>) => set({ mapPEAKInfo: newMapPEAKInfo }),
}));
export default useEventStore;

View File

@@ -1,4 +1,4 @@
import { ASConfigStore, AvatarStore, CEConfigStore, MOCConfigStore, PFConfigStore } from '@/types';
import { ASConfigStore, AvatarStore, CEConfigStore, MOCConfigStore, PEAKConfigStore, PFConfigStore } from '@/types';
import { create } from 'zustand'
import { createJSONStorage, persist } from 'zustand/middleware';
@@ -9,6 +9,7 @@ interface UserDataState {
moc_config: MOCConfigStore;
pf_config: PFConfigStore;
as_config: ASConfigStore;
peak_config: PEAKConfigStore;
ce_config: CEConfigStore;
setAvatars: (newAvatars: { [key: string]: AvatarStore }) => void;
setAvatar: (newAvatar: AvatarStore) => void;
@@ -16,6 +17,7 @@ interface UserDataState {
setMocConfig: (newMocConfig: MOCConfigStore) => void;
setPfConfig: (newPfConfig: PFConfigStore) => void;
setAsConfig: (newAsConfig: ASConfigStore) => void;
setPeakConfig: (newPeakConfig: PEAKConfigStore) => void;
setCeConfig: (newCeConfig: CEConfigStore) => void;
}
@@ -61,12 +63,23 @@ const useUserDataStore = create<UserDataState>()(
stage_id: 0,
monsters: [],
},
peak_config: {
event_id: 0,
challenge_id: 0,
buff_id: 0,
boss_mode: "Normal",
blessings: [],
cycle_count: 0,
stage_id: 0,
monsters: [],
},
setAvatars: (newAvatars: { [key: string]: AvatarStore }) => set({ avatars: newAvatars }),
setAvatar: (newAvatar: AvatarStore) => set((state) => ({ avatars: { ...state.avatars, [newAvatar.avatar_id.toString()]: newAvatar } })),
setBattleType: (newBattleType: string) => set({ battle_type: newBattleType }),
setMocConfig: (newMocConfig: MOCConfigStore) => set({ moc_config: newMocConfig }),
setPfConfig: (newPfConfig: PFConfigStore) => set({ pf_config: newPfConfig }),
setAsConfig: (newAsConfig: ASConfigStore) => set({ as_config: newAsConfig }),
setPeakConfig: (newPeakConfig: PEAKConfigStore) => set({ peak_config: newPeakConfig }),
setCeConfig: (newCeConfig: CEConfigStore) => set({ ce_config: newCeConfig }),
}),
{

View File

@@ -17,3 +17,4 @@ export * from "./pfDetail"
export * from "./asDetail"
export * from "./mocDetail"
export * from "./monsterDetail"
export * from "./peakDetail"

View File

@@ -93,8 +93,18 @@ export type ASConfigStore = {
monsters: MonsterStore[][];
}
export type CEConfigStore = {
export type PEAKConfigStore = {
event_id: number;
challenge_id: number;
buff_id: number;
boss_mode: string;
blessings: BattleBuffStore[]
cycle_count: number;
stage_id: number;
monsters: MonsterStore[][];
}
export type CEConfigStore = {
blessings: BattleBuffStore[]
cycle_count: number;
stage_id: number;

37
src/types/peakDetail.ts Normal file
View File

@@ -0,0 +1,37 @@
import { EventStageDetail } from "./mocDetail";
import { InfiniteWave } from "./pfDetail";
export interface PeakDetail {
Id: number;
Name: string;
PreLevel: PeakLevel[];
BossLevel: PeakLevel;
BossConfig: BossConfig;
}
export interface PeakLevel {
Id: number;
Name: string;
DamageType: string[];
MazeGroupID: number;
NpcMonsterIDList: number[];
EventIDList: EventStageDetail[];
TagList: ChallengeTag[];
InfiniteList: Record<string, InfiniteWave>;
}
export interface BossConfig {
HardName: string;
BuffList: ChallengeTag[];
EventIDList: EventStageDetail[];
TagList: ChallengeTag[];
InfiniteList: Record<string, InfiniteWave>;
}
export interface ChallengeTag {
Id: number;
Name: string;
Desc: string;
Param: number[];
}

View File

@@ -106,6 +106,17 @@ export const cEConfigStoreSchema = z.object({
monsters: z.array(z.array(monsterStoreSchema)),
});
export const pEAKConfigStoreSchema = z.object({
event_id: z.number(),
challenge_id: z.number(),
buff_id: z.number(),
boss_mode: z.string(),
blessings: z.array(battleBuffStoreSchema),
cycle_count: z.number(),
stage_id: z.number(),
monsters: z.array(z.array(monsterStoreSchema)),
});
export const micsSchema = z.object({
avatars: z.record(avatarStoreSchema),
battle_type: z.string(),
@@ -113,4 +124,5 @@ export const micsSchema = z.object({
pf_config: pFConfigStoreSchema,
as_config: aSConfigStoreSchema,
ce_config: cEConfigStoreSchema,
peak_config: pEAKConfigStoreSchema,
});