This commit is contained in:
2025-05-15 18:41:43 +08:00
parent 9d28225f92
commit 8e4e09aeed
7 changed files with 187 additions and 127 deletions
+14
View File
@@ -491,6 +491,7 @@ class Character(CharacterProperty):
info['emblems'] = [i for i in equInfos.emblems] info['emblems'] = [i for i in equInfos.emblems]
info['avatar'] = equInfos.funs.get_dress_list(skill_clothes) info['avatar'] = equInfos.funs.get_dress_list(skill_clothes)
info['jades'] = equInfos.jades info['jades'] = equInfos.jades
info['options'] = equInfos.funs.options
info['sundry'] = equInfos.funs.sundryList info['sundry'] = equInfos.funs.sundryList
for skill in platinum: for skill in platinum:
info['emblems'].append( info['emblems'].append(
@@ -686,6 +687,19 @@ class Character(CharacterProperty):
# 获取装备额外属性 # 获取装备额外属性
if fun is not None: if fun is not None:
fun(self) fun(self)
# 武器贴膜处理
weapon = self.charEquipInfo['武器']
if weapon.equInfo is None or weapon.weaponFusion is None or weapon.weaponFusion == 0:
return
adaptation = min(weapon.adaptation,weapon.equInfo.max_adaptation)
if weapon.weaponFusion == 1:
self.SetStatus(SkillAttack = 0.07 + adaptation * 0.01)
if weapon.weaponFusion == 2:
self.SetStatus(SkillAttack = 0.01 + adaptation * 0.01)
self.SetSkillCD(1, 100, 0.1)
if weapon.weaponFusion == 3:
self.SetStatus(SkillAttack = 0.055 + adaptation * 0.01)
self.SetStatus(SpeedA = 0.2,SpeedM = 0.2,SpeedR = 0.2)
def calc_avatar(self, avatar: dict): def calc_avatar(self, avatar: dict):
"""计算时装效果""" """计算时装效果"""
+3 -2
View File
@@ -21,8 +21,8 @@ class CharacterEquipInfo:
"""贴膜ID""" """贴膜ID"""
refine: int | None refine: int | None
"""锻造等级""" """锻造等级"""
fusionDetail: dict | None weaponFusion: int | None
"""贴膜详情""" """武器融合详情"""
adaptation: int adaptation: int
"""调适等级""" """调适等级"""
equInfo: Union['Equ', None] equInfo: Union['Equ', None]
@@ -35,6 +35,7 @@ class CharacterEquipInfo:
def __init__(self, info={}, equVerison=0, part='') -> None: def __init__(self, info={}, equVerison=0, part='') -> None:
info["fusion"] = info.get("fusion", None) info["fusion"] = info.get("fusion", None)
info["precision"] = info.get("precision", 0) info["precision"] = info.get("precision", 0)
info["weaponFusion"] = info.get("weaponFusion", None)
self.__dict__.update(info) self.__dict__.update(info)
equ = get_equipment(equVerison).equ_dict.get(self.id, None) equ = get_equipment(equVerison).equ_dict.get(self.id, None)
fusion = get_equipment(equVerison).stone_dict.get(self.fusion, None) fusion = get_equipment(equVerison).stone_dict.get(self.fusion, None)
+1 -1
View File
@@ -216,7 +216,7 @@ class ActiveSkill(Skill):
self.vp_2() self.vp_2()
def setReinforce(self): def setReinforce(self):
if self.learnLv in [50, 85, 100] and not self.damage: if self.learnLv in [50, 85, 100] or not self.damage:
return return
if self.reinforce == 1: if self.reinforce == 1:
if self.learnLv < 35: if self.learnLv < 35:
+2 -2
View File
@@ -3488,7 +3488,7 @@ def stone_298(char: CharacterProperty):
技能伤害+17% 技能伤害+17%
所有速度+25% 所有速度+25%
""" """
char.SetStatus(SkillAttack=0.17,SpeedA=0.25,SpeedM=0.25,SpeedR=0.25) char.SetStatus(SkillAttack=0.185,SpeedA=0.25,SpeedM=0.25,SpeedR=0.25)
pass pass
@@ -3512,7 +3512,7 @@ def stone_300(char: CharacterProperty):
技能伤害+17% 技能伤害+17%
800px范围内的队员所受物理/魔法伤害-15% 800px范围内的队员所受物理/魔法伤害-15%
""" """
char.SetStatus(SkillAttack=0.17) char.SetStatus(SkillAttack=0.185)
pass pass
Binary file not shown.
@@ -3,6 +3,7 @@ import { computed, defineComponent, ref, renderList } from 'vue'
import type { IEnchantingInfo } from '@/api/info/type' import type { IEnchantingInfo } from '@/api/info/type'
import { useInfoStore, useConfigStore } from '@/stores' import { useInfoStore, useConfigStore } from '@/stores'
import EquList from '@/components/dnf/Equipment/List/index.vue' import EquList from '@/components/dnf/Equipment/List/index.vue'
import { getImageURL } from '@/utils/images'
export default defineComponent({ export default defineComponent({
name: 'Equip', name: 'Equip',
setup(props) { setup(props) {
@@ -24,7 +25,7 @@ export default defineComponent({
) )
/** 是否可以设置秘宝精度 */ /** 是否可以设置秘宝精度 */
const can_set_secret = computed(() => { const can_set_secret = computed(() => {
return ['辅助装备', '魔法石','耳环'].includes(part.value as string) return ['辅助装备', '魔法石', '耳环'].includes(part.value as string)
}) })
const basicInfoStore = useInfoStore() const basicInfoStore = useInfoStore()
@@ -55,7 +56,7 @@ export default defineComponent({
) )
}, },
set(val) { set(val) {
if (val == undefined) { if (val == undefined && name !== 'weaponFusion') {
return return
} }
if (name == 'emblem_1' && !has_emblem_1.value) { if (name == 'emblem_1' && !has_emblem_1.value) {
@@ -65,7 +66,7 @@ export default defineComponent({
let parts: string[] = [] let parts: string[] = []
if (global_change.value) { if (global_change.value && name !== 'weaponFusion') {
if (name === 'enchant') { if (name === 'enchant') {
const enchant = basicInfoStore?.enchants?.find((item) => item.id == val) as const enchant = basicInfoStore?.enchants?.find((item) => item.id == val) as
| IEnchantingInfo | IEnchantingInfo
@@ -84,7 +85,7 @@ export default defineComponent({
) )
} }
} }
if (['reinforceType', 'reinforce','adaptation'].includes(name)) { if (['reinforceType', 'reinforce', 'adaptation'].includes(name)) {
parts = basicInfoStore.parts.filter((e) => !['称号', '宠物'].includes(e)) parts = basicInfoStore.parts.filter((e) => !['称号', '宠物'].includes(e))
} }
} else { } else {
@@ -92,7 +93,7 @@ export default defineComponent({
} }
for (const part of parts) { for (const part of parts) {
if (configStore.config.equips[part]) { if (configStore.config.equips[part]) {
(configStore.config.equips[part] as Record<string, any>)[name] = val ;(configStore.config.equips[part] as Record<string, any>)[name] = val
} }
} }
}, },
@@ -121,7 +122,10 @@ export default defineComponent({
const adaptation = currentInfo<string | number>('adaptation') const adaptation = currentInfo<string | number>('adaptation')
//精度 //精度
const precision = currentInfo<number>('precision',0) const precision = currentInfo<number>('precision', 0)
// 武器融合
const weaponFusion = currentInfo<string | number>('weaponFusion', 0)
/** /**
* 同步徽章1到徽章2 * 同步徽章1到徽章2
* @param val * @param val
@@ -132,103 +136,139 @@ export default defineComponent({
} }
} }
const setWeaponFusion = (val: number) => {
if (val == weaponFusion.value) {
weaponFusion.value = 0
} else {
weaponFusion.value = val
}
}
return () => { return () => {
return ( return (
<> <>
<div class="h-150px flex justify-center items-center"> <div class="h-150px flex justify-center items-center">
<EquList v-model:part={part.value} withBg={false} withPet={false} with-sub-weapon={useInfoStore().infos?.alter.includes('vegabond')}/></div> <EquList
v-model:part={part.value}
withBg={false}
withPet={false}
with-sub-weapon={useInfoStore().infos?.alter.includes('vegabond')}
/>
</div>
<div class="flex flex-wrap equ-profile"> <div class="flex flex-wrap equ-profile">
<div class="equ-profile-item"> <div class="equ-profile-item">
<div class="mr-10px row-name">当前部位</div> <div class="mr-10px row-name">当前部位</div>
<span> {part.value}</span> <span> {part.value}</span>
{can_upgrade.value ? ( {can_upgrade.value ? (
<calc-checkbox <calc-checkbox
style="margin-left:auto" style="margin-left:auto"
v-model={global_change.value} v-model={global_change.value}
label="全局修改" label="全局修改"
></calc-checkbox> ></calc-checkbox>
) : (
<div></div>
)}
</div>
{part.value == '武器' ? (
<div class="equ-profile-item">
<div class="row-name">武器融合</div>
<div class="flex">
{renderList(3, (i) => (
<img
onClick={() => setWeaponFusion(i)}
class="w-30px h-30px"
src={`${getImageURL(`/equipment/fusion/${i}.png`)}`}
style={weaponFusion.value == i ? '' : 'filter: grayscale(100%)'}
></img>
))}
</div>
</div>
) : ( ) : (
<div></div> <div></div>
)} )}
</div> {part.value == '副武器' ? (
{part.value == '副武器' ? (<> <>
<div class="equ-profile-item"> <div class="equ-profile-item">
<div class="row-name">强化</div> <div class="row-name">强化</div>
<calc-select v-model={reinforce.value} class="flex-1 !h-20px"> <calc-select v-model={reinforce.value} class="flex-1 !h-20px">
{renderList(31, (i) => ( {renderList(31, (i) => (
<calc-option value={i - 1}>{i - 1}</calc-option> <calc-option value={i - 1}>{i - 1}</calc-option>
))} ))}
</calc-select> </calc-select>
</div></>):(<> </div>
{can_upgrade.value ? ( </>
<div class="equ-profile-item"> ) : (
<div class="row-name">增幅</div> <>
<calc-select v-model={reinforce_type.value} class="flex-1 !h-20px"> {can_upgrade.value ? (
<calc-option value={0}>强化</calc-option> <div class="equ-profile-item">
<calc-option value={1}>增幅</calc-option> <div class="row-name">增幅</div>
</calc-select> <calc-select v-model={reinforce_type.value} class="flex-1 !h-20px">
<calc-select v-model={reinforce.value} class="flex-1 !h-20px"> <calc-option value={0}>强化</calc-option>
{renderList(31, (i) => ( <calc-option value={1}>增幅</calc-option>
<calc-option value={i - 1}>{i - 1}</calc-option> </calc-select>
))} <calc-select v-model={reinforce.value} class="flex-1 !h-20px">
</calc-select> {renderList(31, (i) => (
{part.value == '武器' && ( <calc-option value={i - 1}>{i - 1}</calc-option>
<calc-select v-model={refine.value} class="flex-1 !h-20px"> ))}
{renderList(9, (i) => ( </calc-select>
<calc-option value={i - 1}>锻造+ {i - 1}</calc-option> {part.value == '武器' && (
))} <calc-select v-model={refine.value} class="flex-1 !h-20px">
</calc-select> {renderList(9, (i) => (
)} <calc-option value={i - 1}>锻造+ {i - 1}</calc-option>
</div> ))}
) : ( </calc-select>
<div></div> )}
)} </div>
<div class="equ-profile-item"> ) : (
<div class="row-name">附魔</div> <div></div>
<calc-select v-model={enchant.value} class="flex-1 !h-20px"> )}
<calc-option value={""}>无</calc-option>
{renderList(enchant_list.value ?? [], (item) => (
<calc-option value={item.id}>{item.detail}</calc-option>
))}
</calc-select>
</div>
{has_socket.value ? (
<div class="equ-profile-item">
<div class="row-name">徽章</div>
<calc-select
onChange={changeSocket}
v-model={emblem_0.value}
class="flex-1 !h-20px"
>
<calc-option value={""}>无</calc-option>
{renderList(emblem_list.value ?? [], (item) => (
<calc-option
value={item.id}
key={item.id}
>{`${item.rarity}${item.categorize}徽章[${item.detail}]`}</calc-option>
))}
</calc-select>
{has_emblem_1.value && (
<calc-select v-model={emblem_1.value} class="flex-1 !h-20px">
<calc-option value={""}>无</calc-option>
{renderList(emblem_list.value ?? [], (item) => (
<calc-option
value={item.id}
key={item.id}
>{`${item.rarity}${item.categorize}徽章[${item.detail}]`}</calc-option>
))}
</calc-select>
)}
</div>
) : (
<div></div>
)}
{can_upgrade.value ? ( <div class="equ-profile-item">
<div class="equ-profile-item"> <div class="row-name">附魔</div>
<div class="row-name">调适</div> <calc-select v-model={enchant.value} class="flex-1 !h-20px">
{/* <calc-slider <calc-option value={''}>无</calc-option>
{renderList(enchant_list.value ?? [], (item) => (
<calc-option value={item.id}>{item.detail}</calc-option>
))}
</calc-select>
</div>
{has_socket.value ? (
<div class="equ-profile-item">
<div class="row-name">徽章</div>
<calc-select
onChange={changeSocket}
v-model={emblem_0.value}
class="flex-1 !h-20px"
>
<calc-option value={''}>无</calc-option>
{renderList(emblem_list.value ?? [], (item) => (
<calc-option
value={item.id}
key={item.id}
>{`${item.rarity}${item.categorize}徽章[${item.detail}]`}</calc-option>
))}
</calc-select>
{has_emblem_1.value && (
<calc-select v-model={emblem_1.value} class="flex-1 !h-20px">
<calc-option value={''}>无</calc-option>
{renderList(emblem_list.value ?? [], (item) => (
<calc-option
value={item.id}
key={item.id}
>{`${item.rarity}${item.categorize}徽章[${item.detail}]`}</calc-option>
))}
</calc-select>
)}
</div>
) : (
<div></div>
)}
{can_upgrade.value ? (
<div class="equ-profile-item">
<div class="row-name">调适</div>
{/* <calc-slider
showValue={true} showValue={true}
showPercent={false} showPercent={false}
v-model={adaptation.value} v-model={adaptation.value}
@@ -237,33 +277,36 @@ export default defineComponent({
step={1} step={1}
class="flex-1 !h-20px" class="flex-1 !h-20px"
/> */} /> */}
<calc-select v-model={adaptation.value} class="flex-1 !h-20px"> <calc-select v-model={adaptation.value} class="flex-1 !h-20px">
{renderList(4, (i) => ( {renderList(4, (i) => (
<calc-option value={i - 1}>{i - 1}</calc-option> <calc-option value={i - 1}>{i - 1}</calc-option>
))} ))}
</calc-select> </calc-select>
</div> </div>
) : ( ) : (
<div></div> <div></div>
)} )}
{ {can_set_secret.value ? (
can_set_secret.value ? (<> <>
<div class="equ-profile-item"> <div class="equ-profile-item">
<div class="row-name">秘宝</div> <div class="row-name">秘宝</div>
<calc-slider <calc-slider
showPercent={true} showPercent={true}
showValue={false} showValue={false}
v-model={precision.value} v-model={precision.value}
min={0} min={0}
max={100} max={100}
step={1} step={1}
class="flex-1 !h-20px" class="flex-1 !h-20px"
/> />
</div> </div>
</>) : <div></div> </>
} ) : (
</>)} <div></div>
</div> )}
</>
)}
</div>
</> </>
) )
} }
+2
View File
@@ -28,6 +28,7 @@ export interface IConfigEquip {
adaptation: number adaptation: number
fusion: string fusion: string
precision: number precision: number
weaponFusion: number
} }
export interface IConfig { export interface IConfig {
@@ -70,6 +71,7 @@ const defaultEqusConfig = {
adaptation: 0, adaptation: 0,
fusion: '', fusion: '',
precision: 0, precision: 0,
weaponFusion: 0,
} }
const defaultAvatarConfig = { const defaultAvatarConfig = {