diff --git a/assets/resources/game/skill/anm/ready/blues.anim b/assets/resources/game/skill/anm/ready/blues.anim index 92c99597..f0ecde2f 100644 --- a/assets/resources/game/skill/anm/ready/blues.anim +++ b/assets/resources/game/skill/anm/ready/blues.anim @@ -7,11 +7,11 @@ "embeddedPlayerGroups": [] }, "_native": "", - "sample": 30, + "sample": 12, "speed": 1, "wrapMode": 1, "enableTrsBlending": false, - "_duration": 0.16666666666666666, + "_duration": 0.4166666666666667, "_hash": 500763545, "_tracks": [ { @@ -69,10 +69,10 @@ "__type__": "cc.ObjectCurve", "_times": [ 0, - 0.03333333333333333, - 0.06666666666666667, - 0.1, - 0.13333333333333333 + 0.08333333333333333, + 0.16666666666666666, + 0.25, + 0.3333333333333333 ], "_values": [ { diff --git a/assets/resources/game/skill/anm/ready/reds.anim b/assets/resources/game/skill/anm/ready/reds.anim index 9fbc4783..a8af431b 100644 --- a/assets/resources/game/skill/anm/ready/reds.anim +++ b/assets/resources/game/skill/anm/ready/reds.anim @@ -7,11 +7,11 @@ "embeddedPlayerGroups": [] }, "_native": "", - "sample": 30, + "sample": 12, "speed": 1, "wrapMode": 1, "enableTrsBlending": false, - "_duration": 0.16666666666666666, + "_duration": 0.4166666666666667, "_hash": 500763545, "_tracks": [ { @@ -69,10 +69,10 @@ "__type__": "cc.ObjectCurve", "_times": [ 0, - 0.03333333333333333, - 0.06666666666666667, - 0.1, - 0.13333333333333333 + 0.08333333333333333, + 0.16666666666666666, + 0.25, + 0.3333333333333333 ], "_values": [ { diff --git a/assets/resources/game/skill/ready/blues.prefab b/assets/resources/game/skill/ready/blues.prefab index 5f262e29..d3e4a6d9 100644 --- a/assets/resources/game/skill/ready/blues.prefab +++ b/assets/resources/game/skill/ready/blues.prefab @@ -87,7 +87,7 @@ "_lpos": { "__type__": "cc.Vec3", "x": 0, - "y": -35.811, + "y": -100.418, "z": 0 }, "_lrot": { @@ -99,8 +99,8 @@ }, "_lscale": { "__type__": "cc.Vec3", - "x": 0.7, - "y": 0.7, + "x": 1.5, + "y": 1.5, "z": 1 }, "_mobility": 0, diff --git a/assets/resources/game/skill/ready/reds.prefab b/assets/resources/game/skill/ready/reds.prefab index 08c5936d..90266bd4 100644 --- a/assets/resources/game/skill/ready/reds.prefab +++ b/assets/resources/game/skill/ready/reds.prefab @@ -87,7 +87,7 @@ "_lpos": { "__type__": "cc.Vec3", "x": 0, - "y": -35.811, + "y": -99.598, "z": 0 }, "_lrot": { @@ -99,8 +99,8 @@ }, "_lscale": { "__type__": "cc.Vec3", - "x": 0.7, - "y": 0.7, + "x": 1.5, + "y": 1.5, "z": 1 }, "_mobility": 0, diff --git a/assets/resources/gui/role_controller.prefab b/assets/resources/gui/role_controller.prefab index ea8b0ca1..7fbf0a51 100644 --- a/assets/resources/gui/role_controller.prefab +++ b/assets/resources/gui/role_controller.prefab @@ -232,7 +232,7 @@ "_top": 0, "_bottom": 546.004, "_horizontalCenter": 0, - "_verticalCenter": -7, + "_verticalCenter": -12, "_isAbsLeft": true, "_isAbsRight": true, "_isAbsTop": true, @@ -276,7 +276,7 @@ "value": { "__type__": "cc.Vec3", "x": 0, - "y": 633, + "y": 628, "z": 0 } }, diff --git a/assets/script/game/common/config/HeroAttrs.ts b/assets/script/game/common/config/HeroAttrs.ts index e1bd04ae..38688675 100644 --- a/assets/script/game/common/config/HeroAttrs.ts +++ b/assets/script/game/common/config/HeroAttrs.ts @@ -34,6 +34,7 @@ export enum Attrs { stun_res = "stun_res", // 击晕抗性 paralyze_chance = "paralyze_chance", // 麻痹概率(百分点,雷电技能默认附带 30) knockback_chance = "knockback_chance", // 击退强化(原击退概率,现转换为击退距离增量) + knockback_skill_chance = "knockback_skill_chance", // 技能击退概率(百分点;由 SkillSet.bck_chance 快照,可被 heroSet overrides 覆写) knockback_distance = "knockback_distance", // 击退距离强化 knockback_res = "knockback_res", // 击退抗性 invincible_time = "invincible_time",// 无敌时间 diff --git a/assets/script/game/common/config/SkillSet.ts b/assets/script/game/common/config/SkillSet.ts index 63f6788e..93d01158 100644 --- a/assets/script/game/common/config/SkillSet.ts +++ b/assets/script/game/common/config/SkillSet.ts @@ -152,6 +152,7 @@ export interface SkillConfig { stun?: number, // 额外击晕概率 para?: number, // 额外麻痹概率(雷电系技能默认 30) bck?: number, // 额外击退强化(击退距离增量) + bck_chance?: number, // 击退概率(百分点;未配置视为 0 不击退,可由 heroSet overrides 覆写) buff_type?: Attrs, // Buff 类型 (单一职责) timed_buff_id?: number, // 计时性 buff 配置 id(指向 BuffList),存在时走 buffManager 而非永久 add_* buff_value?: number, // 覆写计时 buff 的修饰数值(modifiers.value / tick.damage_or_heal),由药水卡自定义档位 @@ -171,6 +172,7 @@ export interface SkillOverrides { stun?: number; para?: number; bck?: number; + bck_chance?: number; buff_type?: Attrs; timed_buff_id?: number; buff_value?: number; @@ -225,7 +227,7 @@ export const SkillSet: Record = { 6004: { uuid: 6004, name: "攻击", sp_name: "atk1", icon: "Stat_Attack_01", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "atk", DTType: DTType.single, ap: 100, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.Melee, is_accel: true, - RType: RType.bezier, EType: EType.collision, info: "造成攻击力100%的伤害", + RType: RType.bezier, EType: EType.collision, bck_chance: 100, info: "造成攻击力100%的伤害", }, //中距 射手普通技能 6006: { diff --git a/assets/script/game/hero/HeroAtkSystem.ts b/assets/script/game/hero/HeroAtkSystem.ts index eda7a215..f844c78c 100644 --- a/assets/script/game/hero/HeroAtkSystem.ts +++ b/assets/script/game/hero/HeroAtkSystem.ts @@ -213,22 +213,28 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpda // s_uuid 位置是 buffId,据此激活 loss_life/hp/debuff 下的对应 debuff 图标 targetView.showDamage(damage, isCrit, DEBUFF_ICON_MAP[damageEvent.s_uuid] ?? ""); } else { - // 击退:受击默认后退,击退属性不再作为概率,而是转换为后退距离的增量 - // 击退增量 = 施法者击退强化(原击退概率)- 被攻击者击退抗性 + 击退距离强化 + // 击退概率判定:概率来自技能配置 bck_chance(heroSet overrides 可覆写),未配置视为 0 不击退。 + // 不复用 checkChance:其 70% 上限封顶会把 100% 击退(近战普攻 6004)削成 70% + const knockbackChance = damageEvent.Attrs[Attrs.knockback_skill_chance] || 0; + const isKnockback = knockbackChance >= 100 || (knockbackChance > 0 && Math.random() * 100 < knockbackChance); + + // 击退距离增量 = 施法者击退强化(原击退概率)- 被攻击者击退抗性 + 击退距离强化(仅命中击退时生效) const knockbackBonus = (damageEvent.Attrs[Attrs.knockback_chance] || 0) - (TAttrsComp.getFinalKnockbackRes() || 0); const knockbackExtra = Math.max(0, knockbackBonus + (damageEvent.Attrs[Attrs.knockback_distance] || 0)); - targetView.do_atked(damage, isCrit, damageEvent.s_uuid, knockbackExtra); + targetView.do_atked(damage, isCrit, damageEvent.s_uuid, isKnockback ? knockbackExtra : 0); targetView.playEnd(skillConf.endAnm); // 击退位移下沉到 MoveSystem:直接写入 knockbackVelocity,由 MoveSystem 每帧衰减并叠加位移 - const moveComp = target.get(MoveComp); - if (moveComp) { - const dist = FightSet.BACK_RANG + knockbackExtra; - const isHero = TAttrsComp.fac === FacSet.HERO; - // 击退初速度:0.1 秒时间常数衰减,总位移约等于 dist - const knockbackSpeed = dist * 16; - moveComp.knockbackVelocity = isHero ? -knockbackSpeed : knockbackSpeed; + if (isKnockback) { + const moveComp = target.get(MoveComp); + if (moveComp) { + const dist = FightSet.BACK_RANG + knockbackExtra; + const isHero = TAttrsComp.fac === FacSet.HERO; + // 击退初速度:0.1 秒时间常数衰减,总位移约等于 dist + const knockbackSpeed = dist * 16; + moveComp.knockbackVelocity = isHero ? -knockbackSpeed : knockbackSpeed; + } } } diff --git a/assets/script/game/skill/Skill.ts b/assets/script/game/skill/Skill.ts index 3530fc34..4366bf86 100644 --- a/assets/script/game/skill/Skill.ts +++ b/assets/script/game/skill/Skill.ts @@ -232,6 +232,8 @@ export class Skill extends ecs.Entity { sDataCom.Attrs[Attrs.paralyze_chance] = cAttrsComp.getFinalParalyzeChance() + sPara; sDataCom.Attrs[Attrs.knockback_chance] = cAttrsComp.getFinalKnockbackChance() + sBck; sDataCom.Attrs[Attrs.knockback_distance] = cAttrsComp.getFinalKnockbackDistance(); + // 技能击退概率:取合并后配置的 bck_chance(heroSet overrides 可覆写),未配置视为 0 不击退 + sDataCom.Attrs[Attrs.knockback_skill_chance] = config.bck_chance ?? 0; sDataCom.Attrs[Attrs.puncture_chance] = cAttrsComp.getFinalPunctureChance(); // 初始化携带施法者的穿透概率 sDataCom.Attrs[Attrs.puncture_dmg_bonus] = cAttrsComp.getFinalPunctureDmgBonus(); // 初始化携带施法者的穿透伤害加成 sDataCom.s_uuid = s_uuid