diff --git a/backend/core/basic/character.py b/backend/core/basic/character.py index 3e5a0360..90095692 100644 --- a/backend/core/basic/character.py +++ b/backend/core/basic/character.py @@ -557,6 +557,10 @@ class Character(CharacterProperty): skill = self.GetSkillByID(key) if skill is not None: skill.lv += skills[key].get('lv', 0) + if skill.hasReinforce: + skill.reinforce = skills[key].get('reinforce', 0) + if skill.hasVP: + skill.vp = skills[key].get('vp', 0) pass def load_skills(self) -> None: diff --git a/backend/core/basic/skill.py b/backend/core/basic/skill.py index 51a87e95..ac22a79b 100644 --- a/backend/core/basic/skill.py +++ b/backend/core/basic/skill.py @@ -212,6 +212,7 @@ class ActiveSkill(Skill): def skillInfo(self, mode: str | None = None): basic = deepcopy(self) + basic.setReinforce() if mode is not None: basic.currentMode = mode basic.setMode(mode) diff --git a/frontend/src/components/calc/tabs/index.vue b/frontend/src/components/calc/tabs/index.vue index f1f40188..db807be5 100644 --- a/frontend/src/components/calc/tabs/index.vue +++ b/frontend/src/components/calc/tabs/index.vue @@ -69,8 +69,9 @@ export default defineComponent({ display: flex; list-style: none; align-items: flex-end; - border-bottom: 1px solid #4f4838; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); width: 100%; + height: 25px; font-size: 14px; @@ -97,12 +98,17 @@ export default defineComponent({ .i-tab { // font-size: 12px; margin-left: 1px; - - width: 120px; + width: fit-content; + padding:0px 10px; + padding-bottom: 2px; height: 20px; - line-height: 20px; text-align: center; text-decoration: none; + display: flex; + align-items: end; + box-sizing: border-box; + + text-shadow: none; &:visited { color: currentColor; @@ -119,8 +125,10 @@ export default defineComponent({ } &.active { + margin-bottom: -1px; background: linear-gradient(#574d38, #25221d); border-image: url('@/assets/img/control/active_top.png') 1 fill stretch; + height: 22px; // color: #ffb400; } } diff --git a/frontend/src/pages/Character/Skill/components/SkillReinforce/img/bg.png b/frontend/src/pages/Character/Skill/components/SkillReinforce/img/bg.png index 89e0bfc6..c225b4ec 100644 Binary files a/frontend/src/pages/Character/Skill/components/SkillReinforce/img/bg.png and b/frontend/src/pages/Character/Skill/components/SkillReinforce/img/bg.png differ diff --git a/frontend/src/pages/Character/Skill/components/SkillReinforce/img/bgBack.png b/frontend/src/pages/Character/Skill/components/SkillReinforce/img/bgBack.png new file mode 100644 index 00000000..89e0bfc6 Binary files /dev/null and b/frontend/src/pages/Character/Skill/components/SkillReinforce/img/bgBack.png differ diff --git a/frontend/src/pages/Character/Skill/components/SkillReinforce/index.tsx b/frontend/src/pages/Character/Skill/components/SkillReinforce/index.tsx index 3f6a6a0e..b6ddb500 100644 --- a/frontend/src/pages/Character/Skill/components/SkillReinforce/index.tsx +++ b/frontend/src/pages/Character/Skill/components/SkillReinforce/index.tsx @@ -22,68 +22,156 @@ export default defineComponent({ }, setup(props) { const lvInfo = useVModel(props, 'lvInfo') - const skills = computed(() => - props.skills.filter((a) => a.hasReinforce && (!lvInfo.value[a.id]?.reinforce || lvInfo.value[a.id]?.reinforce == 0)).sort((a, b) => a.learnLv - b.learnLv), - ) - const reinforce = (type: number, id: number) => { - return computed({ + const skills = (index: number = 0) => { + index -= 1 + const reinforceList = Object.keys(lvInfo.value).filter( + (a) => !!lvInfo.value[a].reinforce && lvInfo.value[a].reinforce > 0, + ) + const currentReinforceSkill = index >= 0 ? reinforceList[index] : undefined + return computed(() => + props.skills + .filter( + (a) => + a.id.toString() === currentReinforceSkill || + (a.hasReinforce && + (!lvInfo.value[a.id]?.reinforce || lvInfo.value[a.id]?.reinforce == 0) && lvInfo.value[a.id].lv > 0), + ) + .sort((a, b) => a.learnLv - b.learnLv), + ) + } + + const itemChecked = (index: number, reinforce: number) => { + index -= 1 + return computed({ get() { - return lvInfo.value[id].reinforce + const reinforceList = Object.keys(lvInfo.value).filter( + (a) => !!lvInfo.value[a].reinforce && lvInfo.value[a].reinforce > 0, + ) + const currentReinforceSkill = reinforceList[index] + const currentReinforce = lvInfo.value[currentReinforceSkill]?.reinforce + console.log(currentReinforce, reinforce) + return currentReinforce == reinforce ? currentReinforceSkill : undefined + }, + set(value: string | undefined) { + if (!value) return + const reinforceList = Object.keys(lvInfo.value).filter( + (a) => !!lvInfo.value[a].reinforce && lvInfo.value[a].reinforce > 0, + ) + const currentReinforceSkill = reinforceList[index] + currentReinforceSkill && (lvInfo.value[currentReinforceSkill].reinforce = 0) + if (!value) { + currentReinforceSkill && (lvInfo.value[currentReinforceSkill].reinforce = 0) + } else { + lvInfo.value[value].reinforce = reinforce + } }, - set(value) {}, }) } + const exchange = (index: number) => { + const skill = itemChecked(index, 1).value || itemChecked(index, 2).value + if (!skill) return + lvInfo.value[skill].reinforce = lvInfo.value[skill].reinforce == 1 ? 2 : 1 + } + return () => ( <> -
-
-
- {renderList(3, (index) => ( - <> -
- - {renderList(skills.value, (item) => ( - <> - - {item.name} - - - ))} - - - - {renderList(skills.value, (item) => ( - <> - - {item.name} - - - ))} - -
- - ))} -
-
- {renderList(skills.value, (item) => ( -
- {item.name} + {lvInfo.value && Object.keys(lvInfo.value).length > 0 ? ( +
+
+
+ {renderList(3, (index) => ( + <> +
+
+ + {renderList(skills(index).value, (item) => ( + <> + + {item.name} + + + ))} + +
+ exchange(index)}> +
+ + {renderList(skills(index).value, (item) => ( + <> + + {item.name} + + + ))} + +
+
+ + ))} +
+
+
+ {renderList(skills().value, (item) => ( +
+ {item.name} +
+ ))} + {renderList(36 - skills().value.length, (item) => ( +
+ ))}
- ))} - {renderList(36 - skills.value.length, (item) => ( -
- ))} +
+ {renderList( + Object.keys(lvInfo.value).filter( + (a) => !!lvInfo.value[a].reinforce && lvInfo.value[a].reinforce > 0, + ), + (index) => { + const skill = props.skills.find((a) => a.id.toString() === index) + let tooltip = '' + if (skill) { + if (lvInfo.value[skill.id.toString()].reinforce == 1) { + tooltip = `技能攻击力 +${skill.learnLv < 35 ? '60' : 55}%` + } + if (lvInfo.value[skill.id.toString()].reinforce == 2) { + tooltip = `技能攻击力 +${skill.learnLv < 35 ? '43' : 38}%
技能冷却时间 -15%` + } + } + + return skill ? ( +
+
+ {skill.name} +
+
+
+ ) : ( + <> + ) + }, + )} +
+
-
+ ) : ( + <> + )} ) }, diff --git a/frontend/src/pages/Character/Skill/components/SkillReinforce/style.scss b/frontend/src/pages/Character/Skill/components/SkillReinforce/style.scss index ad34f4da..8219755d 100644 --- a/frontend/src/pages/Character/Skill/components/SkillReinforce/style.scss +++ b/frontend/src/pages/Character/Skill/components/SkillReinforce/style.scss @@ -1,6 +1,6 @@ .skill-reinforce { width: 620px; - height: 375px; + height: 334px; background-image: url('./img/bg.png'); background-size: 100% 100%; background-color: black; diff --git a/frontend/src/pages/Character/Skill/components/SkillVP/index.tsx b/frontend/src/pages/Character/Skill/components/SkillVP/index.tsx index 6fcc1880..01d0b82e 100644 --- a/frontend/src/pages/Character/Skill/components/SkillVP/index.tsx +++ b/frontend/src/pages/Character/Skill/components/SkillVP/index.tsx @@ -55,7 +55,7 @@ export default defineComponent({ <>
{renderList(skills.value, (item) => ( -
+
{item.learnLv}
@@ -65,7 +65,7 @@ export default defineComponent({
{renderList(2, (index) => (
{ itemChecked(item.id.toString(), index).value = !itemChecked( item.id.toString(), diff --git a/frontend/src/pages/Character/Skill/index.vue b/frontend/src/pages/Character/Skill/index.vue index 096a6df4..c33af03e 100644 --- a/frontend/src/pages/Character/Skill/index.vue +++ b/frontend/src/pages/Character/Skill/index.vue @@ -39,8 +39,8 @@ >
-