docs(stubs): annotate empty handlers and add unimplemented reference doc

Add // stub: unimplemented to 70 empty game-feature handlers and
// stub: reserved to 56 protocol-reserved slots in handlers_reserve.go,
making them discoverable via grep. Add docs/unimplemented.md listing all
unimplemented handlers grouped by subsystem with descriptions.
This commit is contained in:
Houmgaor
2026-03-19 10:57:09 +01:00
parent a6025be8b7
commit 7ea2660335
21 changed files with 327 additions and 126 deletions

201
docs/unimplemented.md Normal file
View File

@@ -0,0 +1,201 @@
# Unimplemented Handlers
Tracks channel server handlers that are empty stubs. Regenerate by searching the source:
```bash
# All unimplemented game features
grep -rn "// stub: unimplemented" server/channelserver/handlers_*.go
# All reserved protocol slots
grep -rn "// stub: reserved" server/channelserver/handlers_reserve.go
```
All empty handlers carry an inline comment — `// stub: unimplemented` for real game features,
`// stub: reserved` for protocol message IDs that MHF itself never uses.
---
## Unimplemented (70 handlers)
Grouped by handler file / game subsystem.
### Achievements (`handlers_achievement.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfResetAchievement` | Resets achievement progress for a character |
| `handleMsgMhfPaymentAchievement` | Achievement reward payout (currency/items) |
| `handleMsgMhfGetCaAchievementHist` | Fetch CA (cross-platform?) achievement history |
| `handleMsgMhfSetCaAchievement` | Set CA achievement state |
### Caravan (`handlers_caravan.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfPostRyoudama` | Post/submit Ryoudama (Caravan jewel) data |
### Cast Binary (`handlers_cast_binary.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgSysCastedBinary` | Relay of already-cast binary state (complement to `MsgSysCastBinary`) |
### Client Management (`handlers_clients.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfShutClient` | Server-initiated client disconnect |
| `handleMsgSysHideClient` | Hide a client session from the session list |
### Data / Auth (`handlers_data.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgSysAuthData` | Supplemental auth data exchange |
### Events (`handlers_event.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfGetRestrictionEvent` | Fetch event-based gameplay restrictions |
### Guild (`handlers_guild.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfUpdateForceGuildRank` | Force-set a guild's rank (admin/GM operation) |
| `handleMsgMhfUpdateGuild` | Update generic guild metadata |
| `handleMsgMhfUpdateGuildcard` | Update guild card display data |
### House / My Room (`handlers_house.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfResetTitle` | Reset a character's displayed title |
### Items (`handlers_items.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfGetExtraInfo` | Fetch supplemental item/character info |
| `handleMsgMhfGetCogInfo` | Fetch Cog (partner Felyne) information |
| `handleMsgMhfStampcardPrize` | Claim a stamp card prize |
### Misc (`handlers_misc.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfKickExportForce` | Force-kick a character from an export/transfer |
| `handleMsgMhfRegistSpabiTime` | Register Spabi (practice area?) usage time |
| `handleMsgMhfDebugPostValue` | Debug value submission (client-side debug tool) |
| `handleMsgMhfGetDailyMissionMaster` | Fetch daily mission master data (template list) |
| `handleMsgMhfGetDailyMissionPersonal` | Fetch character's daily mission progress |
| `handleMsgMhfSetDailyMissionPersonal` | Save character's daily mission progress |
| `handleMsgMhfUseUdShopCoin` | Spend a UD Shop coin |
### Mutex (`handlers_mutex.go`)
All five mutex handlers are empty. MHF mutexes are distributed locks used for event coordination (Raviente, etc.). The server currently uses its own semaphore system instead.
| Handler | Notes |
|---------|-------|
| `handleMsgSysCreateMutex` | Create a named distributed mutex |
| `handleMsgSysCreateOpenMutex` | Create and immediately open a mutex |
| `handleMsgSysOpenMutex` | Acquire an existing mutex |
| `handleMsgSysCloseMutex` | Release a mutex |
| `handleMsgSysDeleteMutex` | Destroy a mutex |
### Object Sync (`handlers_object.go`)
Object sync is partially implemented (create, position, binary set/notify work). The following secondary operations are stubs:
| Handler | Notes |
|---------|-------|
| `handleMsgSysDeleteObject` | Delete a stage object |
| `handleMsgSysRotateObject` | Broadcast object rotation |
| `handleMsgSysDuplicateObject` | Duplicate a stage object |
| `handleMsgSysGetObjectBinary` | Fetch binary state of a specific object |
| `handleMsgSysGetObjectOwner` | Get the owning session of an object |
| `handleMsgSysUpdateObjectBinary` | Update object binary state |
| `handleMsgSysCleanupObject` | Clean up stale object state |
| `handleMsgSysAddObject` | Add an object to the stage |
| `handleMsgSysDelObject` | Remove an object from the stage |
| `handleMsgSysDispObject` | Display/show a previously hidden object |
| `handleMsgSysHideObject` | Hide an object from other clients |
### Quests (`handlers_quest.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfEnterTournamentQuest` | Enter a tournament-mode quest |
### Register (`handlers_register.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgSysNotifyRegister` | Notify server of a client-side registration event |
### Rewards (`handlers_reward.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfUseRewardSong` | Use/activate a reward song buff |
| `handleMsgMhfAddRewardSongCount` | Increment reward song usage counter |
| `handleMsgMhfAcceptReadReward` | Claim a reward for reading an in-game notice |
### Session (`handlers_session.go`)
Some of these may be intentionally no-ops (e.g. `MsgSysAck` is a client-to-server confirmation that needs no reply). Others are genuine feature gaps.
| Handler | Notes |
|---------|-------|
| `handleMsgHead` | Raw packet header handler (likely intentional no-op) |
| `handleMsgSysAck` | Client acknowledgement — no server reply expected |
| `handleMsgSysSetStatus` | Set session/character status flags |
| `handleMsgSysEcho` | Protocol echo/ping (no reply needed) |
| `handleMsgSysUpdateRight` | Update client rights/entitlements |
| `handleMsgSysAuthQuery` | Auth capability query |
| `handleMsgSysAuthTerminal` | Terminate auth session |
| `handleMsgSysTransBinary` | Transfer binary data between clients |
| `handleMsgSysCollectBinary` | Collect binary data from clients |
| `handleMsgSysGetState` | Get session state snapshot |
| `handleMsgSysSerialize` | Serialize session data |
| `handleMsgSysEnumlobby` | Enumerate available lobbies |
| `handleMsgSysEnumuser` | Enumerate users in context |
| `handleMsgSysInfokyserver` | Fetch key server info |
| `handleMsgCaExchangeItem` | CA (cross-platform) item exchange |
| `handleMsgMhfServerCommand` | Server-push command to client |
| `handleMsgMhfSetLoginwindow` | Configure client login window state |
| `handleMsgMhfGetCaUniqueID` | Fetch CA unique identifier |
### Stage (`handlers_stage.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgSysStageDestruct` | Destroy/teardown a stage |
| `handleMsgSysLeaveStage` | Client leaving a stage (complement to `handleMsgSysEnterStage`) |
### Tactics / UD (`handlers_tactics.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgMhfSetUdTacticsFollower` | Set UD (Unlimited?) Tactics follower data |
| `handleMsgMhfGetUdTacticsLog` | Fetch UD Tactics combat log |
### Users (`handlers_users.go`)
| Handler | Notes |
|---------|-------|
| `handleMsgSysInsertUser` | Register a new user session |
| `handleMsgSysDeleteUser` | Remove a user session |
| `handleMsgSysNotifyUserBinary` | Notify clients of a user binary state change |
---
## Reserved Protocol Slots (56 handlers)
`handlers_reserve.go` contains 56 empty handlers for message IDs that are reserved in the MHF protocol but never sent by any known client version. These are **intentionally empty** and are not missing features.
Two reserve IDs (`188`, `18B`) have partial implementations returning hardcoded responses — they appear in an unknown subsystem and are documented with inline comments in the source.
Full list: `handleMsgSysReserve0107`, `0C0E`, `4A4F`, `5557`, `5C`, `5E5F`, `717C`, `7E`, `180`, `18E18F`, `19B19F`, `1A4`, `1A61AF`, `192194`, `handleMsgMhfReserve10F`.

View File

@@ -139,7 +139,7 @@ func handleMsgMhfSetCaAchievementHist(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
}
func handleMsgMhfResetAchievement(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfResetAchievement(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfAddAchievement(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfAddAchievement)
@@ -149,7 +149,7 @@ func handleMsgMhfAddAchievement(s *Session, p mhfpacket.MHFPacket) {
}
}
func handleMsgMhfPaymentAchievement(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfPaymentAchievement(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfDisplayedAchievement(s *Session, p mhfpacket.MHFPacket) {
if s.server.achievementService == nil {
@@ -160,6 +160,6 @@ func handleMsgMhfDisplayedAchievement(s *Session, p mhfpacket.MHFPacket) {
}
}
func handleMsgMhfGetCaAchievementHist(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfGetCaAchievementHist(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfSetCaAchievement(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfSetCaAchievement(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -75,7 +75,7 @@ func handleMsgMhfGetRyoudama(s *Session, p mhfpacket.MHFPacket) {
doAckEarthSucceed(s, pkt.AckHandle, data)
}
func handleMsgMhfPostRyoudama(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfPostRyoudama(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfGetTinyBin(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetTinyBin)

View File

@@ -162,4 +162,4 @@ func handleMsgSysCastBinary(s *Session, p mhfpacket.MHFPacket) {
}
}
func handleMsgSysCastedBinary(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysCastedBinary(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -109,6 +109,6 @@ func handleMsgMhfOprMember(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
}
func handleMsgMhfShutClient(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfShutClient(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysHideClient(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysHideClient(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -244,4 +244,4 @@ func handleMsgMhfLoadScenarioData(s *Session, p mhfpacket.MHFPacket) {
loadCharacterData(s, pkt.AckHandle, "scenariodata", make([]byte, 10))
}
func handleMsgSysAuthData(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysAuthData(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -213,7 +213,7 @@ func handleMsgMhfUseKeepLoginBoost(s *Session, p mhfpacket.MHFPacket) {
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
}
func handleMsgMhfGetRestrictionEvent(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfGetRestrictionEvent(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfSetRestrictionEvent(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfSetRestrictionEvent)

View File

@@ -375,14 +375,14 @@ func handleMsgMhfEntryRookieGuild(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
}
func handleMsgMhfUpdateForceGuildRank(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfUpdateForceGuildRank(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfGenerateUdGuildMap(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGenerateUdGuildMap)
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
}
func handleMsgMhfUpdateGuild(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfUpdateGuild(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfSetGuildManageRight(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfSetGuildManageRight)
@@ -447,7 +447,7 @@ func handleMsgMhfOperationInvGuild(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
}
func handleMsgMhfUpdateGuildcard(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfUpdateGuildcard(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
// guildGetItems reads and parses the guild item box.
func guildGetItems(s *Session, guildID uint32) []mhfitem.MHFItemStack {

View File

@@ -344,7 +344,7 @@ func handleMsgMhfAcquireTitle(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
}
func handleMsgMhfResetTitle(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfResetTitle(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func initializeWarehouse(s *Session) {
if err := s.server.houseRepo.InitializeWarehouse(s.charID); err != nil {

View File

@@ -55,7 +55,7 @@ func handleMsgMhfEnumerateOrder(s *Session, p mhfpacket.MHFPacket) {
stubEnumerateNoResults(s, pkt.AckHandle)
}
func handleMsgMhfGetExtraInfo(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfGetExtraInfo(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func userGetItems(s *Session) []mhfitem.MHFItemStack {
var items []mhfitem.MHFItemStack
@@ -91,7 +91,7 @@ func handleMsgMhfUpdateUnionItem(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
}
func handleMsgMhfGetCogInfo(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfGetCogInfo(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfCheckWeeklyStamp(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfCheckWeeklyStamp)
@@ -235,4 +235,4 @@ func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) {
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
}
func handleMsgMhfStampcardPrize(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfStampcardPrize(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -66,7 +66,7 @@ func handleMsgMhfUnreserveSrg(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
}
func handleMsgMhfKickExportForce(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfKickExportForce(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfGetEarthStatus(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetEarthStatus)
@@ -89,7 +89,7 @@ func handleMsgMhfGetEarthStatus(s *Session, p mhfpacket.MHFPacket) {
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
}
func handleMsgMhfRegistSpabiTime(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfRegistSpabiTime(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfGetEarthValue(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetEarthValue)
@@ -128,7 +128,7 @@ func handleMsgMhfGetEarthValue(s *Session, p mhfpacket.MHFPacket) {
doAckEarthSucceed(s, pkt.AckHandle, data)
}
func handleMsgMhfDebugPostValue(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfDebugPostValue(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfGetRandFromTable(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetRandFromTable)
@@ -147,11 +147,11 @@ func handleMsgMhfGetSenyuDailyCount(s *Session, p mhfpacket.MHFPacket) {
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
}
func handleMsgMhfGetDailyMissionMaster(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfGetDailyMissionMaster(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfGetDailyMissionPersonal(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfGetDailyMissionPersonal(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfSetDailyMissionPersonal(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfSetDailyMissionPersonal(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
// Equip skin history buffer sizes per game version
const (
@@ -215,7 +215,7 @@ func handleMsgMhfGetUdShopCoin(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleSucceed(s, pkt.AckHandle, bf.Data())
}
func handleMsgMhfUseUdShopCoin(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfUseUdShopCoin(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfGetEnhancedMinidata(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetEnhancedMinidata)

View File

@@ -2,12 +2,12 @@ package channelserver
import "erupe-ce/network/mhfpacket"
func handleMsgSysCreateMutex(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysCreateMutex(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysCreateOpenMutex(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysCreateOpenMutex(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysDeleteMutex(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysDeleteMutex(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysOpenMutex(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysOpenMutex(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysCloseMutex(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysCloseMutex(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -38,7 +38,7 @@ func handleMsgSysCreateObject(s *Session, p mhfpacket.MHFPacket) {
s.stage.BroadcastMHF(dupObjUpdate, s)
}
func handleMsgSysDeleteObject(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysDeleteObject(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysPositionObject(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysPositionObject)
@@ -63,9 +63,9 @@ func handleMsgSysPositionObject(s *Session, p mhfpacket.MHFPacket) {
s.stage.BroadcastMHF(pkt, s)
}
func handleMsgSysRotateObject(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysRotateObject(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysDuplicateObject(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysDuplicateObject(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysSetObjectBinary(s *Session, p mhfpacket.MHFPacket) {
_ = p.(*mhfpacket.MsgSysSetObjectBinary)
@@ -83,18 +83,18 @@ func handleMsgSysSetObjectBinary(s *Session, p mhfpacket.MHFPacket) {
*/
}
func handleMsgSysGetObjectBinary(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysGetObjectBinary(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysGetObjectOwner(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysGetObjectOwner(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysUpdateObjectBinary(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysUpdateObjectBinary(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysCleanupObject(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysCleanupObject(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysAddObject(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysAddObject(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysDelObject(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysDelObject(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysDispObject(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysDispObject(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysHideObject(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysHideObject(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -654,7 +654,7 @@ func getTuneValueRange(start uint16, value uint16) []tuneValue {
return tv
}
func handleMsgMhfEnterTournamentQuest(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfEnterTournamentQuest(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfGetUdBonusQuestInfo(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfGetUdBonusQuestInfo)

View File

@@ -148,4 +148,4 @@ func (s *Session) notifyRavi() {
}
}
func handleMsgSysNotifyRegister(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysNotifyRegister(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -16,114 +16,114 @@ func handleMsgSysReserve18B(s *Session, p mhfpacket.MHFPacket) {
doAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x3C})
}
func handleMsgSysReserve55(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve55(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve56(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve56(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve57(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve57(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve01(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve01(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve02(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve02(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve03(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve03(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve04(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve04(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve05(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve05(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve06(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve06(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve07(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve07(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve0C(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve0C(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve0D(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve0D(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve0E(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve0E(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve4A(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve4A(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve4B(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve4B(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve4C(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve4C(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve4D(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve4D(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve4E(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve4E(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve4F(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve4F(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve5C(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve5C(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve5E(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve5E(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve5F(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve5F(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve71(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve71(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve72(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve72(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve73(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve73(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve74(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve74(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve75(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve75(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve76(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve76(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve77(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve77(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve78(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve78(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve79(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve79(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve7A(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve7A(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve7B(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve7B(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve7C(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve7C(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve7E(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve7E(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgMhfReserve10F(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfReserve10F(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve180(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve180(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve18E(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve18E(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve18F(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve18F(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve19E(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve19E(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve19F(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve19F(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1A4(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1A4(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1A6(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1A6(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1A7(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1A7(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1A8(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1A8(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1A9(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1A9(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1AA(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1AA(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1AB(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1AB(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1AC(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1AC(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1AD(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1AD(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1AE(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1AE(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve1AF(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve1AF(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve19B(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve19B(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve192(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve192(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve193(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve193(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved
func handleMsgSysReserve194(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysReserve194(s *Session, p mhfpacket.MHFPacket) {} // stub: reserved

View File

@@ -30,9 +30,9 @@ func handleMsgMhfGetRewardSong(s *Session, p mhfpacket.MHFPacket) {
doAckBufSucceed(s, pkt.AckHandle, data)
}
func handleMsgMhfUseRewardSong(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfUseRewardSong(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfAddRewardSongCount(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfAddRewardSongCount(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfAcquireMonthlyReward(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfAcquireMonthlyReward)
@@ -43,4 +43,4 @@ func handleMsgMhfAcquireMonthlyReward(s *Session, p mhfpacket.MHFPacket) {
doAckBufSucceed(s, pkt.AckHandle, resp.Data())
}
func handleMsgMhfAcceptReadReward(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfAcceptReadReward(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -18,7 +18,7 @@ import (
"go.uber.org/zap"
)
func handleMsgHead(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgHead(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysExtendThreshold(s *Session, p mhfpacket.MHFPacket) {
// No data aside from header, no resp required.
@@ -32,7 +32,7 @@ func handleMsgSysNop(s *Session, p mhfpacket.MHFPacket) {
// No data aside from header, no resp required.
}
func handleMsgSysAck(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysAck(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysTerminalLog(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysTerminalLog)
@@ -379,7 +379,7 @@ func logoutPlayer(s *Session) {
)
}
func handleMsgSysSetStatus(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysSetStatus(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysPing(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysPing)
@@ -458,7 +458,7 @@ func handleMsgSysRecordLog(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
}
func handleMsgSysEcho(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysEcho(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysLockGlobalSema(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysLockGlobalSema)
@@ -481,11 +481,11 @@ func handleMsgSysUnlockGlobalSema(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
}
func handleMsgSysUpdateRight(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysUpdateRight(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysAuthQuery(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysAuthQuery(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysAuthTerminal(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysAuthTerminal(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysRightsReload(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysRightsReload)
@@ -752,9 +752,9 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
doAckBufSucceed(s, pkt.AckHandle, resp.Data())
}
func handleMsgCaExchangeItem(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgCaExchangeItem(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfServerCommand(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfServerCommand(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfAnnounce(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfAnnounce)
@@ -762,20 +762,20 @@ func handleMsgMhfAnnounce(s *Session, p mhfpacket.MHFPacket) {
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
}
func handleMsgMhfSetLoginwindow(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfSetLoginwindow(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysTransBinary(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysTransBinary(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysCollectBinary(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysCollectBinary(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysGetState(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysGetState(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysSerialize(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysSerialize(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysEnumlobby(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysEnumlobby(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysEnumuser(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysEnumuser(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysInfokyserver(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysInfokyserver(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfGetCaUniqueID(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfGetCaUniqueID(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -23,7 +23,7 @@ func handleMsgSysCreateStage(s *Session, p mhfpacket.MHFPacket) {
}
}
func handleMsgSysStageDestruct(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysStageDestruct(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func doStageTransfer(s *Session, ackHandle uint32, stageID string) {
stage, created := s.server.stages.GetOrCreate(stageID)
@@ -265,7 +265,7 @@ func handleMsgSysMoveStage(s *Session, p mhfpacket.MHFPacket) {
doStageTransfer(s, pkt.AckHandle, pkt.StageID)
}
func handleMsgSysLeaveStage(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysLeaveStage(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysLockStage(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysLockStage)

View File

@@ -60,6 +60,6 @@ func handleMsgMhfGetUdTacticsRanking(s *Session, p mhfpacket.MHFPacket) {
doAckBufSucceed(s, pkt.AckHandle, data)
}
func handleMsgMhfSetUdTacticsFollower(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfSetUdTacticsFollower(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgMhfGetUdTacticsLog(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfGetUdTacticsLog(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented

View File

@@ -5,9 +5,9 @@ import (
"go.uber.org/zap"
)
func handleMsgSysInsertUser(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysInsertUser(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysDeleteUser(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysDeleteUser(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented
func handleMsgSysSetUserBinary(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysSetUserBinary)
@@ -35,4 +35,4 @@ func handleMsgSysGetUserBinary(s *Session, p mhfpacket.MHFPacket) {
}
}
func handleMsgSysNotifyUserBinary(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysNotifyUserBinary(s *Session, p mhfpacket.MHFPacket) {} // stub: unimplemented