diff --git a/put/web/src/App.vue b/put/web/src/App.vue index e89ddd1f..eff28cad 100644 --- a/put/web/src/App.vue +++ b/put/web/src/App.vue @@ -116,14 +116,14 @@

普攻 skills[0]

- + + 添加普攻

大招 skills[1]

- + + 添加大招
@@ -131,10 +131,10 @@

触发技能(lv4 激活)

- - - - + + + +
@@ -203,6 +203,8 @@ const current = computed(() => heroes.value[activeIdx.value]) const skillMap = computed(() => meta.value?.SkillSet || {}) const allSkills = computed(() => Object.values(skillMap.value).sort((a, b) => a.uuid - b.uuid)) const fieldOptions = computed(() => Object.values(meta.value?.FieldSkillSet || {}).sort((a, b) => a.uuid - b.uuid)) +// buff 候选:timed_buff_id 覆写下拉用(BuffList 按 id 升序) +const buffOptions = computed(() => Object.values(meta.value?.BuffList || {}).sort((a, b) => a.id - b.id)) // 复活已纳入 dead 触发组,通过 dead 编辑器的 overrides 配置 revive_hp / revive_count const reviveOptions = computed(() => allSkills.value.filter((s) => s.uuid >= 6500 && s.uuid < 6600)) diff --git a/put/web/src/components/OverrideEditor.vue b/put/web/src/components/OverrideEditor.vue index 5995427a..b61c4c79 100644 --- a/put/web/src/components/OverrideEditor.vue +++ b/put/web/src/components/OverrideEditor.vue @@ -50,10 +50,27 @@ />
被触发技能覆写: - +
+ + + + {{ b.id }} {{ b.name }} + {{ b.info }} + + 删除 @@ -69,6 +86,8 @@ const props = defineProps({ modelValue: { type: Object, default: () => ({}) }, // 全部技能候选(proc_skill.s_uuid 下拉用),由 App 经 SkillEditor 透传 skillOptions: { type: Array, default: () => [] }, + // 全部 buff 候选(timed_buff_id 下拉用),由 App 从 meta.BuffList 计算后透传 + buffOptions: { type: Array, default: () => [] }, }) const emit = defineEmits(['update:modelValue']) @@ -131,6 +150,18 @@ function enumOptions(key) { return OVERRIDE_KEYS.find((k) => k.key === key)?.options || [] } +// 该覆写字段是否为 buff 型(timed_buff_id:值为 BuffList 配置 id) +function isBuffKey(key) { + return OVERRIDE_KEYS.find((k) => k.key === key)?.type === 'buff' +} + +// allow-create 手输的 buff id 是字符串,归一化为数字,保证导出 TS 配置类型正确 +function onBuffValueChange(item) { + if (typeof item.value === 'string' && item.value.trim() !== '' && !isNaN(Number(item.value))) { + item.value = Number(item.value) + } +} + // 对象型覆写行选中时初始化默认结构,避免 v-model 绑定到 undefined 子字段 function onKeyChange(item) { if (isObjectKey(item.key)) { @@ -140,6 +171,8 @@ function onKeyChange(item) { } else if (isEnumKey(item.key)) { // 枚举默认取首个候选值 item.value = enumOptions(item.key)[0]?.value + } else if (isBuffKey(item.key)) { + item.value = undefined // buff id 必须显式选择,0 不是合法 id } else { item.value = 0 } diff --git a/put/web/src/components/SkillEditor.vue b/put/web/src/components/SkillEditor.vue index bed247b6..f398dba9 100644 --- a/put/web/src/components/SkillEditor.vue +++ b/put/web/src/components/SkillEditor.vue @@ -25,7 +25,7 @@ - + @@ -47,7 +47,7 @@ - + @@ -72,6 +72,8 @@ const props = defineProps({ options: { type: Array, default: () => [] }, // 全部技能候选(proc_skill.s_uuid 下拉用),由 App 透传 skillOptions: { type: Array, default: () => [] }, + // 全部 buff 候选(timed_buff_id 下拉用),由 App 透传 + buffOptions: { type: Array, default: () => [] }, isUlt: { type: Boolean, default: false }, // 普攻 lv2 强化档模式:仅允许配置单个 lv2 档(lv=2 / s_lv=2 锁定,禁用增删) basicLv2: { type: Boolean, default: false }, diff --git a/put/web/src/components/TriggerGroupEditor.vue b/put/web/src/components/TriggerGroupEditor.vue index ae9a29ff..17ddce74 100644 --- a/put/web/src/components/TriggerGroupEditor.vue +++ b/put/web/src/components/TriggerGroupEditor.vue @@ -23,7 +23,7 @@ - + @@ -50,6 +50,8 @@ const props = defineProps({ model: { type: Object, required: true }, // TriggerGrouped skillOptions: { type: Array, default: () => [] }, skillMap: { type: Object, default: () => ({}) }, + // 全部 buff 候选(timed_buff_id 下拉用),由 App 透传 + buffOptions: { type: Array, default: () => [] }, }) const newSid = ref(null) diff --git a/put/web/src/constants.js b/put/web/src/constants.js index f86b1550..ed76778e 100644 --- a/put/web/src/constants.js +++ b/put/web/src/constants.js @@ -52,7 +52,7 @@ export const ROLE_ULT_SKILL = { } // 辅助类技能(任意职业可用作大招) -export const SUPPORT_ULT = [6301, 6302, 6407, 6412, 6413, 6414, 6501, 6514, 6515, 6516] +export const SUPPORT_ULT = [6301, 6302, 6407, 6412, 6413, 6414, 6501, 6514, 6515, 6516, 6517] export function defaultHero() { return { @@ -108,7 +108,8 @@ export const OVERRIDE_KEYS = [ { key: 'para', label: 'para 麻痹概率' }, { key: 'bck', label: 'bck 击退' }, { key: 'bck_chance', label: 'bck_chance 击退概率' }, - { key: 'timed_buff_id', label: 'timed_buff_id 计时buff' }, + // buff 型覆写:值为 BuffList 配置 id,前端用 meta.BuffList 渲染下拉(支持 allow-create 手输兜底) + { key: 'timed_buff_id', label: 'timed_buff_id 计时buff', type: 'buff' }, { key: 'buff_value', label: 'buff_value 修饰数值' }, { key: 'buff_duration', label: 'buff_duration 持续时间' }, { key: 'buff_chance', label: 'buff_chance 附加概率' },