Files
pixelheros/put/web/src/constants.js
pan cd9e7296a1 feat(trigger-editor): 添加触发组概率与保底配置功能
1. 新增触发组条目字段t_chance(触发概率)和pity_add(保底叠加),仅攻击/受击组生效
2. 为TriggerGroupEditor传入分组标识,动态显示概率配置表单项
3. 新增条目创建时继承同组末档概率参数的逻辑
4. 更新常量定义与文档说明,补充概率参数使用规则
5. 在前端展示和服务端导出中添加概率相关信息展示
2026-09-21 16:01:41 +08:00

245 lines
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 共享常量与工具
export const HERO_ROLES = [
{ key: 'Tank', label: '坦克', value: 0 },
{ key: 'Warrior', label: '战士', value: 1 },
{ key: 'Assassin', label: '刺客', value: 2 },
{ key: 'Archer', label: '射手', value: 3 },
{ key: 'Mage', label: '法师', value: 4 },
{ key: 'Support', label: '辅助', value: 5 },
]
export const GROW_TYPES = [
{ key: 'Tank', label: '坦克', value: 0 },
{ key: 'Warrior', label: '战士', value: 1 },
{ key: 'Assassin', label: '刺客', value: 2 },
{ key: 'Mage', label: '法师', value: 3 },
{ key: 'Support', label: '辅助', value: 4 },
{ key: 'Archer', label: '射手', value: 5 },
]
export const H_TYPES = [
{ key: 'Melee', label: '近战', value: 0 },
{ key: 'Mid', label: '中程', value: 1 },
{ key: 'Long', label: '远程', value: 2 },
]
export const ATK_SPEEDS = [
{ key: 'VeryFast', label: '极速(0.75s)', value: 1 },
{ key: 'Fast', label: '快速(0.90s)', value: 2 },
{ key: 'Normal', label: '中速(1.05s)', value: 3 },
{ key: 'Slow', label: '慢速(1.20s)', value: 4 },
{ key: 'VerySlow', label: '极慢(1.50s)', value: 5 },
]
// 大招 CD 档位(与 heroSet.ts UltCdSet 对齐):按技能效果类型分档交错释放节奏
export const ULT_CDS = [
{ key: 'VeryFast', label: '极频(6s) 单体爆发', value: 1 },
{ key: 'Fast', label: '高频(7s) 频繁压制', value: 2 },
{ key: 'Normal', label: '标准(8s) 群体伤害/控制', value: 3 },
{ key: 'Slow', label: '低频(9s) 中度团队增益', value: 4 },
{ key: 'VerySlow', label: '稀有(10s) 全体增益/治疗/护盾', value: 5 },
]
// 按职业映射普攻底座
export const ROLE_ATK_SKILL = {
Tank: [6004],
Warrior: [6004],
Assassin: [6001, 6002, 6003, 6004],
Archer: [6004, 6006, 6007, 6008],
Mage: [6009, 6010, 6011, 6012],
Support: [6004, 6009, 6010, 6011, 6012],
}
// 按职业映射大招底座
export const ROLE_ULT_SKILL = {
Tank: [6100, 6101, 6102, 6103, 6104],
Warrior: [6100, 6101, 6102, 6103, 6104],
Assassin: [6150, 6151],
Archer: [6150, 6151],
Mage: [6200, 6201, 6202, 6203, 6204],
Support: [6200, 6201, 6202, 6203, 6204],
}
// 辅助类技能(任意职业可用作大招)
export const SUPPORT_ULT = [6301, 6302, 6407, 6412, 6413, 6414, 6415, 6416, 6501, 6514, 6515, 6516, 6517, 6518, 6519]
// 职业默认值(新建英雄向导用):形态/攻速/大招CD档/稀有度/三维偏移
// 数值取自现有英雄样本中位数,向导内可手动微调
export const ROLE_DEFAULTS = {
Tank: { typeKey: 'Melee', atkSpeed: 'Slow', ultCd: 'VerySlow', rarity: 4, statBase: { hp: 20, ap: 0, def: 10 } },
Warrior: { typeKey: 'Melee', atkSpeed: 'Slow', ultCd: 'Normal', rarity: 4, statBase: { hp: 5, ap: 20, def: 5 } },
Assassin: { typeKey: 'Mid', atkSpeed: 'Fast', ultCd: 'VeryFast', rarity: 4, statBase: { hp: 0, ap: 30, def: 0 } },
Archer: { typeKey: 'Long', atkSpeed: 'Normal', ultCd: 'Normal', rarity: 4, statBase: { hp: 0, ap: 30, def: 0 } },
Mage: { typeKey: 'Long', atkSpeed: 'Slow', ultCd: 'Normal', rarity: 4, statBase: { hp: -5, ap: 10, def: 0 } },
Support: { typeKey: 'Long', atkSpeed: 'Normal', ultCd: 'VerySlow', rarity: 4, statBase: { hp: 10, ap: 20, def: 0 } },
}
// 攻速档 → cd 数值 / cdExpr 表达式 映射(向导生成普攻用)
export const ATK_SPEED_MAP = {
VeryFast: { cd: 0.75, cdExpr: 'AtkSpeedSet[AtkSpeedLv.VeryFast].cd' },
Fast: { cd: 0.9, cdExpr: 'AtkSpeedSet[AtkSpeedLv.Fast].cd' },
Normal: { cd: 1.05, cdExpr: 'AtkSpeedSet[AtkSpeedLv.Normal].cd' },
Slow: { cd: 1.2, cdExpr: 'AtkSpeedSet[AtkSpeedLv.Slow].cd' },
VerySlow: { cd: 1.5, cdExpr: 'AtkSpeedSet[AtkSpeedLv.VerySlow].cd' },
}
// 大招 CD 档 → cd 数值 / cdExpr 表达式 映射(向导/技能编辑器生成大招用,与 ULT_CDS 同源)
export const ULT_CD_MAP = {
VeryFast: { cd: 6, cdExpr: 'UltCdSet[UltCdLv.VeryFast].cd' },
Fast: { cd: 7, cdExpr: 'UltCdSet[UltCdLv.Fast].cd' },
Normal: { cd: 8, cdExpr: 'UltCdSet[UltCdLv.Normal].cd' },
Slow: { cd: 9, cdExpr: 'UltCdSet[UltCdLv.Slow].cd' },
VerySlow: { cd: 10, cdExpr: 'UltCdSet[UltCdLv.VerySlow].cd' },
}
// 触发组 key 列表(向导/模板管理共用)
export const TRIGGER_GROUPS = [
{ key: 'atking', label: 'atking 攻击后' },
{ key: 'atked', label: 'atked 受击后' },
{ key: 'fstart', label: 'fstart 战斗开始' },
{ key: 'fend', label: 'fend 回合结束' },
{ key: 'dead', label: 'dead 死亡后' },
]
export function defaultHero() {
return {
uuid: 5001,
name: '',
comment: '',
path: '',
rarity: 4,
roleKey: 'Mage',
growKey: 'Mage',
typeKey: 'Long',
statBase: { hp: 0, ap: 0, def: 0 },
dis: null,
speed: null,
dodge: null, // 闪避率(null = 全局默认 15,填值覆盖)
accuracy: null, // 命中率(null = 全局默认 10,填值覆盖)
skills: [], // [{uuid,name,cd,cdExpr,overrides,desc,lv_entries:[{lv,s_lv,overrides,desc}]}]
atking: {}, // {uuid:[{lv,s_lv,name,t_num,t_chance?,pity_add?,overrides,desc}]} t_chance/pity_add 仅攻/受击组生效
atked: {},
fstart: {},
fend: {},
dead: {},
field: [], // [{lv,uuids:[{uuid,value,name}],desc}]
// revive 已纳入 dead 触发组,通过 overrides.revive_hp / revive_count 配置
bonus: [], // [{lv, attrs:{hp?,ap?,def?,crt?,frz?,stun?,para?}}] hp/ap/def 为百分比,概率类为固定百分点
info: '',
}
}
export function defaultSkill(uuid) {
return {
uuid,
name: '',
cd: 1.05,
cdExpr: 'AtkSpeedSet[AtkSpeedLv.Normal].cd',
overrides: {},
desc: '',
lv_entries: [],
}
}
export function defaultTriggerEntry(lv = 4) {
return { lv, s_lv: 1, name: '', t_num: 3, overrides: {}, desc: '' }
}
// 触发预设工厂:预设是跨职业复用的触发组条目(group + 技能底座 uuid + 完整 entry)
export function defaultTriggerPreset(group = 'atking') {
return {
id: `tp-${group}-${Date.now()}`,
label: '',
group,
uuid: null,
tags: [],
entry: defaultTriggerEntry(4),
}
}
// 光环预设工厂:一个预设 = 解锁等级 + 多个光环词条
export function defaultFieldPreset() {
return {
id: `fp-${Date.now()}`,
label: '',
tags: [],
lv: 4,
uuids: [],
}
}
// overrides 可用键说明
export const OVERRIDE_KEYS = [
{ key: 'ap', label: 'ap 攻击百分比' },
{ key: 'hit_count', label: 'hit_count 命中次数' },
{ key: 'hitcd', label: 'hitcd 持续伤害间隔' },
{ key: 'crt', label: 'crt 暴击率' },
{ key: 'frz', label: 'frz 冰冻概率' },
{ key: 'stun', label: 'stun 击晕概率' },
{ key: 'para', label: 'para 麻痹概率' },
{ key: 'bck', label: 'bck 击退' },
{ key: 'bck_chance', label: 'bck_chance 击退概率' },
// 护盾型覆写:仅 kind=Shield 技能生效(底座 6301 默认 7 秒)
{ key: 'shield_duration', label: 'shield_duration 护盾持续秒(0=永久)' },
// buff 型覆写:值为 BuffList 配置 id,前端用 meta.BuffList 渲染下拉(支持 allow-create 手输兜底)
// buff 语义为增益,缺省挂施法者自身;debuff 语义为对敌减益,缺省挂被命中者(目标不可覆写)
{ 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 附加概率' },
{ key: 'thorns_dmg', label: 'thorns_dmg 反伤固定值' },
{ key: 'thorns_rate', label: 'thorns_rate 反伤比例(%)' },
// 枚举型覆写:计时 buff 施加目标(缺省按技能主效果推导:伤害→施法者自身,辅助→友方目标)
{ key: 'buff_target', label: 'buff_target buff施加目标', type: 'enum', options: [
{ value: 0, label: '0 被命中者(Hit)' },
{ value: 1, label: '1 施法者自身(Self/默认)' },
{ value: 2, label: '2 全体友方(Ally)' },
{ value: 3, label: '3 全体敌方(Enemy)' },
]},
// debuff 型覆写:值为 BuffList 配置 id,命中被攻击者后施加;目标固定为被命中者,不可覆写
{ key: 'timed_debuff_id', label: 'timed_debuff_id 计时debuff', type: 'buff' },
{ key: 'debuff_value', label: 'debuff_value 修饰数值' },
{ key: 'debuff_duration', label: 'debuff_duration 持续时间' },
{ key: 'debuff_chance', label: 'debuff_chance 附加概率' },
// 枚举型覆写:技能目标群体(JSON 存字符串,导出还原 TGroup.X;proc_skill.overrides 可借此改变被触发技能的释放对象)
// 注:不提供 All —— SCastSystem 未对 TGroup.All 做友/敌分流(会落到敌方分支),避免误配
{ key: 'TGroup', label: 'TGroup 目标群体', type: 'enum', options: [
{ value: 'Self', label: 'Self 施法者自身' },
{ value: 'Ally', label: 'Ally 全体友方(含自己)' },
{ value: 'Team', label: 'Team 全体友方(不含自己)' },
{ value: 'Enemy', label: 'Enemy 敌方(最近敌人)' },
]},
{ key: 'summon_count', label: 'summon_count 召唤数' },
{ key: 'num', label: 'num 额外释放次数' },
{ key: 'call_hero', label: 'call_hero 召唤英雄id' },
{ key: 'revive_hp', label: 'revive_hp 复活回血比例(%)' },
{ key: 'revive_count', label: 'revive_count 复活次数上限' },
// 对象型覆写:施法后概率触发主动技能(大招/触发技),出手即判定、一次施法一次判定,含 s_uuid/chance/overrides 子字段
{ key: 'proc_skill', label: 'proc_skill 施法后概率触发技能', type: 'object' },
// 字符串型覆写:value 为图标ID(uicons 图集帧名),非数值
{ key: 'icon', label: 'icon 英雄语境图标(覆写 SkillSet.icon)', type: 'string' },
]
// bonus attrs 可用键:hp/ap/def 按"基础+成长"快照百分比加成;crt/frz/stun/para 为固定百分点累加
export const BONUS_ATTR_KEYS = [
{ key: 'hp', label: 'hp 生命%' },
{ key: 'ap', label: 'ap 攻击%' },
{ key: 'def', label: 'def 防御%' },
{ key: 'crt', label: 'crt 暴击率(百分点)' },
{ key: 'frz', label: 'frz 冰冻(百分点)' },
{ key: 'stun', label: 'stun 击晕(百分点)' },
{ key: 'para', label: 'para 麻痹(百分点)' },
]
// icon 覆写常用候选(SkillSet 各底座图标 + 通用图标),可在输入框直接键入其他帧名
export const SKILL_ICON_OPTIONS = [
'Stat_Attack_01', 'Stat_RangedAttack', 'Stat_Tripleshot',
'Sword-FA_WP_Main_Sword_003_PurpleSilver',
'Sword-FA_WP_Main_Sword_019_WoodSilver',
'Axe-FA_WP_Main_Axe_004_WoodGray',
'Sub_Item-FA_WP_Sub_MagicBall_001_Blue',
'Sub_Item-FA_WP_Sub_MagicBall_001_Purple',
'Sub_Item-FA_WP_Sub_Potion_001_Green',
'Sub_Item-FA_WP_Sub_Potion_001_Red',
]