From dbcb8addf61f1f7b73b23a0268cb8e2bde3cf58c Mon Sep 17 00:00:00 2001 From: CAtlas0784 Date: Tue, 15 Sep 2026 20:29:33 +0700 Subject: [PATCH] fix(taffy): bind signature monowheel mount active skill, support notify rpcs, and fix misleading debug panel vehicle label --- Ananta.Server/Ananta.App/DebugPanel/index.html | 3 ++- .../Game/GameRouter.Profiles.cs | 18 ++++++++++++++++++ .../Game/GameRouter.Vehicles.cs | 12 ++++++++---- README.md | 2 +- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Ananta.Server/Ananta.App/DebugPanel/index.html b/Ananta.Server/Ananta.App/DebugPanel/index.html index 31d7309..640de78 100644 --- a/Ananta.Server/Ananta.App/DebugPanel/index.html +++ b/Ananta.Server/Ananta.App/DebugPanel/index.html @@ -44,9 +44,10 @@
⚡ Quick Spawn Special Vehicles:
- + +
💡 หมายเหตุ: รถล้อเดียวของ Taffy (塔菲独轮车) เป็นสกิลกดขี่ของตัวละคร Taffy (กด E / Active Skill) ให้สลับเป็นตัวละคร Taffy แล้วกด E เพื่อแปลงค้อนเป็นรถล้อเดียวขี่ได้ทันที
Category:
Vehicle:
diff --git a/Ananta.Server/Ananta.Handlers/Game/GameRouter.Profiles.cs b/Ananta.Server/Ananta.Handlers/Game/GameRouter.Profiles.cs index 81acb81..cb4ccaa 100644 --- a/Ananta.Server/Ananta.Handlers/Game/GameRouter.Profiles.cs +++ b/Ananta.Server/Ananta.Handlers/Game/GameRouter.Profiles.cs @@ -18,6 +18,24 @@ internal sealed partial class GameRouter CombatWeaponDefinition weapon, CombatStyleDefinition style) { + if (weapon.SpiritTemplateId == 15020992) // Taffy (塔菲) + { + // Taffy signature skills: + // 51935209: 塔菲普攻1 (Hammer strikes) + // 51935213: 塔菲重击 (Heavy slam) + // 51935207: 通用闪避 (Dodge) + // 51935230: 塔菲主动技_上车A (Taffy Monowheel Mount!) + // 51935224: 塔菲大招 (超次元神速连打) + await ctx.NotifyAsync(MethodId.SyncChangeCommonSkill, WorldCodec.SkillBinding(unitId, 51935209)); + await ctx.NotifyAsync(MethodId.SyncChangeHeavyAttack, WorldCodec.SkillBinding(unitId, 51935213)); + await ctx.NotifyAsync(MethodId.SyncChangeDodgeSkill, WorldCodec.SkillBinding(unitId, 51935207)); + await ctx.NotifyAsync(MethodId.SyncChangeControlSkill, CombatCodec.ControlBinding(unitId, style)); + await ctx.NotifyAsync(MethodId.SyncChangeActiveSkill, WorldCodec.SkillBinding(unitId, 51935230)); + await ctx.NotifyAsync(MethodId.SyncChangeUniqueSkill, WorldCodec.SkillBinding(unitId, 51935224)); + ctx.Session.Log.Info($"[COMBAT] bound signature Taffy Monowheel skill profile for unit={unitId}"); + return; + } + await ctx.NotifyAsync(MethodId.SyncChangeCommonSkill, CombatCodec.CommonBinding(unitId, style)); await ctx.NotifyAsync(MethodId.SyncChangeHeavyAttack, CombatCodec.HeavyAttackBinding(unitId, style)); await ctx.NotifyAsync(MethodId.SyncChangeDodgeSkill, CombatCodec.DodgeBinding(unitId, style)); diff --git a/Ananta.Server/Ananta.Handlers/Game/GameRouter.Vehicles.cs b/Ananta.Server/Ananta.Handlers/Game/GameRouter.Vehicles.cs index d509ddd..61e1d1e 100644 --- a/Ananta.Server/Ananta.Handlers/Game/GameRouter.Vehicles.cs +++ b/Ananta.Server/Ananta.Handlers/Game/GameRouter.Vehicles.cs @@ -566,31 +566,35 @@ internal sealed partial class GameRouter // Taffy Moto / Monowheel Handlers [Handler(MethodId.AskTaffyMotoEnterRush, HandlerPacketKind.Invoke)] + [Handler(MethodId.AskTaffyMotoEnterRush, HandlerPacketKind.Notify)] private Task AskTaffyMotoEnterRush(Connection conn, UxRpcMessage msg) { conn.Log.Info("[TAFFY_MOTO] AskTaffyMotoEnterRush"); - return conn.ReturnEmptyOkAsync(msg); + return msg.IsInvoke ? conn.ReturnEmptyOkAsync(msg) : Task.CompletedTask; } [Handler(MethodId.AskTaffyMotoLeaveRush, HandlerPacketKind.Invoke)] + [Handler(MethodId.AskTaffyMotoLeaveRush, HandlerPacketKind.Notify)] private Task AskTaffyMotoLeaveRush(Connection conn, UxRpcMessage msg) { conn.Log.Info("[TAFFY_MOTO] AskTaffyMotoLeaveRush"); - return conn.ReturnEmptyOkAsync(msg); + return msg.IsInvoke ? conn.ReturnEmptyOkAsync(msg) : Task.CompletedTask; } [Handler(MethodId.OnTafeiMotorColliding, HandlerPacketKind.Invoke)] + [Handler(MethodId.OnTafeiMotorColliding, HandlerPacketKind.Notify)] private Task OnTafeiMotorColliding(Connection conn, UxRpcMessage msg) { conn.Log.Info("[TAFFY_MOTO] OnTafeiMotorColliding"); - return conn.ReturnEmptyOkAsync(msg); + return msg.IsInvoke ? conn.ReturnEmptyOkAsync(msg) : Task.CompletedTask; } [Handler(MethodId.AskGetOffMotor, HandlerPacketKind.Invoke)] + [Handler(MethodId.AskGetOffMotor, HandlerPacketKind.Notify)] private Task AskGetOffMotor(Connection conn, UxRpcMessage msg) { conn.Log.Info("[TAFFY_MOTO] AskGetOffMotor"); - return conn.ReturnEmptyOkAsync(msg); + return msg.IsInvoke ? conn.ReturnEmptyOkAsync(msg) : Task.CompletedTask; } } diff --git a/README.md b/README.md index e13f0a5..b07a449 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ | **Safe Fastpatch Loader** | 🟢 ใช้งานได้สมบูรณ์ | ตัวสร้าง `fastpatch_4229938.zip` อัตโนมัติ ทุกคำสั่งถูกครอบด้วย `pcall` ป้องกันข้อความคำสั่งรั่วขึ้นหน้าจอ และหมดปัญหาเกมค้างหน้า Initialize Client | | **Monster Spawning (เสกมอนเตอร์)** | 🟡 กำลังพัฒนา / มีข้อจำกัด / บัค | เสกได้ผ่าน GM Console (`Alt+F1`) และ Debug Panel (`CMD:SPAWN_ENEMY`) ส่งคำสั่งเข้า `gCS.LuaUtils.AddEnemy` โดยตรงไม่ขึ้นเป็นตัวหนังสือบนจอ แต่การเกิดจะขึ้นอยู่กับ NavMesh ใน Chunk นั้นๆ | | **Cutscene & Video Player** | 🟡 กำลังพัฒนา / มีข้อจำกัด / บัค | คำสั่ง `CMD:PLAY_CUTSCENE` สั่งเปิดหน้าต่าง `S_VIDEO_PLAYER_PANEL` และ Timeline ได้ถูกต้อง ไม่ขึ้นเป็นตัวหนังสือบนจอ แต่ Cutscene ID บางตัวอาจไม่มีไฟล์วิดีโอใน Client Leak | -| **Taffy Monowheel (塔菲摩托)** | 🟡 กำลังพัฒนา / มีข้อจำกัด / บัค | ลงทะเบียน RPC การขับขี่พื้นฐาน (`AskTaffyMotoEnterRush`, `AskGetOffMotor`, `OnTafeiMotorColliding`) ไว้แล้ว แต่ระบบฟิสิกส์การชนยังไม่สมบูรณ์เท่าตัวเอก | +| **Taffy Monowheel (塔菲独轮车)** | 🟡 กำลังพัฒนา / มีข้อจำกัด / บัค | รถล้อเดียวของ Taffy ไม่ใช่เอนทิตีรถโรงรถ แต่เป็นสกิลกดขี่ของตัวละคร Taffy (Active Skill: `51935230` แปลงค้อนเป็นรถล้อเดียว) เซิร์ฟเวอร์ผูกสกิลเฉพาะตัวของ Taffy และลงทะเบียน RPC รองรับการเร่งความเร็ว ชน และลงจากรถไว้เรียบร้อยแล้ว | | **Gacha System (ตู้สุ่มตัวละคร)** | 🟡 กำลังพัฒนา / มีข้อจำกัด / บัค | หน้าร้านค้าเปิดตู้ได้และบายพาสวันหมดอายุ CBT แล้ว แต่ผลการสุ่มยังเป็นการให้ไอเทมแบบสุ่มตายตัว (ยังไม่มี Database เรทกาชาแบบเต็มระบบ) | | **Phone Customization (ตกแต่งมือถือ)** | 🟡 กำลังพัฒนา / มีข้อจำกัด / บัค | ปลดล็อกไอเทมเคสมือถือ วอลเปเปอร์ จี้ห้อย (`1..200`) ในหน่วยความจำ แต่ยังไม่บันทึกความเปลี่ยนแปลงข้าม Session แบบถาวร | | **Monster Combat AI & Aggro** | 🔴 ยังทำไม่ได้ / วางแผนไว้ | มอนเตอร์ที่เสกออกมาจะยืนนิ่งหรือเคลื่อนที่พื้นฐาน ยังไม่มี Behavior Tree เชิงรุกเข้าโจมตีผู้เล่น (ต้องรอเขียน Combat AI Loop ฝั่งเซิร์ฟเวอร์) |