From f6d24b8b3ac3fcfa0253858325ebfe5f75ca1901 Mon Sep 17 00:00:00 2001 From: swrring Date: Sun, 25 Oct 2026 13:20:07 +0900 Subject: [PATCH] =?UTF-8?q?WL=20#983=20=E2=91=A0=20=ED=95=9C=EC=86=90?= =?UTF-8?q?=EA=B2=80=20=EC=A3=BC=EB=A0=A5=20=ED=9A=8C=EC=A0=84=20=EC=A4=91?= =?UTF-8?q?=20=EA=B5=AC=EB=A5=B4=EA=B8=B0=20=ED=97=88=EC=9A=A9=20=E2=80=94?= =?UTF-8?q?=20WLSkillCancel=20moveLockOnly=20=EC=8B=A0=EC=84=A4(=EC=8A=A4?= =?UTF-8?q?=ED=82=AC=20=EB=8F=99=EC=9E=91=20=EC=A4=91=20=EC=9D=B4=EB=8F=99?= =?UTF-8?q?=EB=A7=8C=20=EB=A7=89=EC=9D=8C=20=C2=B7=20=EA=B5=AC=EB=A5=B4?= =?UTF-8?q?=EA=B8=B0=20=ED=97=88=EC=9A=A9=20=C2=B7=20=EB=B0=9C=EB=8F=99=20?= =?UTF-8?q?=EC=A0=84=20=EA=B5=AC=EB=A5=B4=EA=B8=B0=20=3D=20=EC=8A=A4?= =?UTF-8?q?=ED=82=B5=20=3D=20=EA=B2=80=EA=B8=B0=20=C2=B7=20=EC=8B=9C?= =?UTF-8?q?=EC=A0=84=20=EC=97=B0=EC=B6=9C=20=EC=97=86=EC=9D=8C=20=C2=B7=20?= =?UTF-8?q?=EB=B0=9C=EB=8F=99=20=EB=92=A4=20noSkip=20=EC=9C=A0=EC=A7=80)?= =?UTF-8?q?=20=C2=B7=20Skill=5FEnergySlash=20=EB=A5=BC=20lockMove=20?= =?UTF-8?q?=E2=86=92=20moveLockOnly=20=C2=B7=20=E2=91=A1=20MasterStylizedF?= =?UTF-8?q?X=20=EB=8D=AE=EC=96=B4=EC=8D=A8=EC=A7=84=20839=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EC=9D=80=20git=20=EB=90=98=EB=8F=8C=EB=A6=BC(?= =?UTF-8?q?=EC=BB=A4=EB=B0=8B=20=EB=B3=80=EA=B2=BD=20=EC=97=86=EC=9D=8C)?= =?UTF-8?q?=20=C2=B7=20=EB=A6=AC=EC=BB=B4=ED=8C=8C=EC=9D=BC=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=200=20=C2=B7=20=EC=BD=98=EC=86=94=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=200=20=C2=B7=20Play=20=EB=AF=B8=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- Assets/WL/Combat/Weapon/Resources/WL/WLSkillCancel.json | 7 +++++-- Assets/WL/Combat/Weapon/WLSkillCancel.cs | 8 +++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Assets/WL/Combat/Weapon/Resources/WL/WLSkillCancel.json b/Assets/WL/Combat/Weapon/Resources/WL/WLSkillCancel.json index 681476fdb..79290ee43 100644 --- a/Assets/WL/Combat/Weapon/Resources/WL/WLSkillCancel.json +++ b/Assets/WL/Combat/Weapon/Resources/WL/WLSkillCancel.json @@ -2,7 +2,9 @@ "enabled": 1, "skipOnMove": 1, "lockMove": [ - "Skill_JumpAttack", + "Skill_JumpAttack" + ], + "moveLockOnly": [ "Skill_EnergySlash" ], "noSkip": [ @@ -31,5 +33,6 @@ "holdMaxSeconds": 1.5, "_note_970": "#970 PD 「시전하는 모션이 존재하는 스킬은 일정 타이밍(실제 스킬 발동이 확정 된 시점)까지 못움직이게 하고, 움직여 진 경우에는 발동 된 스킬이 스킵되지 않도록 (현재는 시전 직후 움직이면 스킬 이펙트가 스킵되는 현상)」 — castLock 1 = SkillList s_NextAnimation(원본 시전 단계) 또는 f_CastingTime 이 있는 스킬은 lockUntilFire + noSkip 으로(위 목록은 표에 시전 단계가 없는 Skill_ArrowRain 등 그대로) · 잠금 상한 = holdMaxSeconds + 시전 시간", "castLock": 1, - "_note_982": "#982 PD 「한손검 주력 스킬 검기를 발사한 경우, 플레이어가 이동해도 검기가 사라지지 않아야 하고, 검기를 발사하는 회전하는 동안에는 캐릭터가 움직이지 못해야 해」 — Skill_EnergySlash 를 noSkip(이동 = 스킵이 검기 투사체를 끄던 것) · lockMove(스킬 동작 = 회전 중 이동 · 구르기 입력 무시)에 추가" + "_note_982": "#982 PD 「한손검 주력 스킬 검기를 발사한 경우, 플레이어가 이동해도 검기가 사라지지 않아야 하고, 검기를 발사하는 회전하는 동안에는 캐릭터가 움직이지 못해야 해」 — Skill_EnergySlash 를 noSkip(이동 = 스킵이 검기 투사체를 끄던 것) · lockMove(스킬 동작 = 회전 중 이동 · 구르기 입력 무시)에 추가", + "_note_983": "#983 PD 「검기를 쏘기 전 회전할 때 구르기는 막으면 안돼. (회전 중 구르기로 스킬 발동을 캔슬할 경우 검기를 생성 하지 않아야 함)」 — Skill_EnergySlash 를 lockMove(이동 · 구르기 막음)에서 빼고 moveLockOnly(이동만 막음) · 발동 전 구르기 = 스킵(검기 · 시전 연출 끔) · 발동 뒤 = noSkip(검기 유지)" } diff --git a/Assets/WL/Combat/Weapon/WLSkillCancel.cs b/Assets/WL/Combat/Weapon/WLSkillCancel.cs index 63b7f795b..5e3685c99 100644 --- a/Assets/WL/Combat/Weapon/WLSkillCancel.cs +++ b/Assets/WL/Combat/Weapon/WLSkillCancel.cs @@ -31,6 +31,7 @@ namespace WL.Combat.Weapon public int enabled = 1; public int skipOnMove = 1; // 1 = 스킬 동작 중 이동 · 구르기 = 스킵(기본) public string[] lockMove = new string[0]; // 발동 중 이동 · 구르기 입력을 무시하는 스킬(eEffect 이름) + public string[] moveLockOnly = new string[0]; // #983 스킬 동작 중 이동 입력만 무시 · 구르기는 허용(발동 전 구르기 = 스킵 = 투사체 없음 · 발동 뒤는 noSkip 대로) — PD 「검기를 쏘기 전 회전할 때 구르기는 막으면 안돼」 public string[] noSkip = new string[0]; // 이동 · 구르기로 끊겨도 이펙트를 남기는 스킬 public string[] holdMove = new string[0]; // #911 발동 뒤 공격 이펙트(이 PC 의 원본 스킬 투사체)가 끝날 때까지 이동 입력 무시 · 구르기는 허용(= 스킵) public string[] endWithMotion = new string[0]; // #914 스킬 동작이 입력 없이 끝나면(대기로) 그 스킬 이펙트도 바로 끈다 — 남은 이펙트 때문에 서 있지 않게 @@ -53,7 +54,7 @@ namespace WL.Combat.Weapon static PCActor s_pc; static string s_effect = ""; static float s_castAt, s_cap = 1.5f; // s_cap = 발동까지 잠금 상한(holdMaxSeconds + 시전 시간 · #970) - static bool s_active, s_fired, s_heldAtCast, s_lock, s_hold, s_lockFire, s_noSkip; // s_lockFire = #942 발동까지 잠금 · s_noSkip = 이동해도 이펙트 유지(목록 또는 #970 시전 동작) + static bool s_active, s_fired, s_heldAtCast, s_lock, s_hold, s_lockFire, s_noSkip, s_moveOnly; // s_lockFire = #942 발동까지 잠금 · s_noSkip = 이동해도 이펙트 유지(목록 또는 #970 시전 동작) static int s_pendingBrake = -1; // -1 없음 · 0 = Set_AutoBraking(false) · 1 = Set_AutoBraking(true) static GameObject s_runner; static FieldInfo s_fDicSkill; @@ -105,7 +106,7 @@ namespace WL.Combat.Weapon s_pc = pc; s_effect = e.skill != null ? e.skill.e_Skill.ToString() : ""; s_castAt = Time.time; s_active = true; s_fired = false; s_heldAtCast = pc.JoystickStatus == 1; - s_lock = Has(c.lockMove, s_effect); + s_lock = Has(c.lockMove, s_effect); s_moveOnly = Has(c.moveLockOnly, s_effect); s_hold = Has(c.holdMove, s_effect); bool castMotion = c.castLock != 0 && HasCastMotion(e.skill); // #970 시전 동작이 있는 스킬 = 발동까지 잠금 + 발동 뒤 이동해도 유지 s_lockFire = Has(c.lockUntilFire, s_effect) || castMotion; @@ -163,7 +164,7 @@ namespace WL.Combat.Weapon s_hold = false; } if (!s_active || !ReferenceEquals(pc, s_pc) || pc.Get_CurAnim() != eAnim.Skill) return false; - if (s_lock) return true; + if (s_lock || s_moveOnly) return true; // #983 moveLockOnly = 이동만(BlockDodge 는 보지 않음 = 구르기 허용) var c = Cfg; if (s_lockFire && !s_fired && Time.time - s_castAt < s_cap) return true; // #942 발동 전엔 새 이동 입력도 무시 return c.holdUntilFire != 0 && s_heldAtCast && !s_fired && Time.time - s_castAt < s_cap; @@ -236,6 +237,7 @@ namespace WL.Combat.Weapon bool byInput = cur == eAnim.Run || cur == eAnim.Dodge; var c = Cfg; if (byInput && c.skipOnMove != 0 && !s_noSkip) Skip(pc, s_effect, cur == eAnim.Dodge ? "구르기" : "이동"); + else if (cur == eAnim.Dodge && s_moveOnly && !s_fired) Skip(pc, s_effect, "발동 전 구르기"); // #983 회전 중 구르기로 캔슬 = 검기 · 시전 연출 없음 else if (byInput && s_noSkip) { SkipsAvoided++; LastLog = "유지 " + s_effect + " · " + (cur == eAnim.Dodge ? "구르기" : "이동") + (s_fired ? " · 발동 뒤" : " · 발동 전"); } else if (!byInput && Has(c.endWithMotion, s_effect)) { MotionEnds++; Skip(pc, s_effect, "동작 끝"); } // #914 동작 끝 = 이펙트 끝(이동 잠금 holdMove 도 함께 풀림) if (s_pendingBrake >= 0 && !Blocking(pc)) ApplyBrake(pc);