fix(taffy): bind signature monowheel mount active skill, support notify rpcs, and fix misleading debug panel vehicle label

This commit is contained in:
CAtlas0784 committed 2026-09-15 20:29:33 +07:00
1 parent 2ad6246796
commit dbcb8addf6
4 files changed
+29 -6

No files matched your search

@@ -44,9 +44,10 @@
<div style="margin-bottom:10px;padding:8px;background:#252932;border-radius:6px">
<div style="font-weight:bold;margin-bottom:6px;color:#ffb74d">⚡ Quick Spawn Special Vehicles:</div>
<button style="background:#8e24aa" onclick="spawnSpecificVehicle(81006020)">🚀 FG Vision Aric (Flying Car) [81006020]</button>
<button style="background:#e91e63" onclick="spawnSpecificVehicle(81007104)">🛴 Taffy Monowheel [81007104]</button>
<button style="background:#e91e63" onclick="spawnSpecificVehicle(81007104)">🏍️ Shikage Freeman800 (Honda NT1100) [81007104]</button>
<button style="background:#00897b" onclick="spawnSpecificVehicle(81007007)">🚁 Reed Ranger Helicopter [81007007]</button>
<button style="background:#f4511e" onclick="spawnSpecificVehicle(81006011)">🏍️ Sunset M125 Superbike [81006011]</button>
<div style="font-size:11px;color:#81c784;margin-top:6px">💡 หมายเหตุ: รถล้อเดียวของ Taffy (塔菲独轮车) เป็นสกิลกดขี่ของตัวละคร Taffy (กด E / Active Skill) ให้สลับเป็นตัวละคร Taffy แล้วกด E เพื่อแปลงค้อนเป็นรถล้อเดียวขี่ได้ทันที</div>
</div>
<div>Category: <select id="fleetcat" onchange="filterFleet()"></select></div>
<div style="margin-top:6px">Vehicle: <select id="fleet"></select></div>
@@ -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));
@@ -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;
}
}
+1 -1
View File
@@ -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 ฝั่งเซิร์ฟเวอร์) |