Skip to content

Commit

Permalink
Stub a bunch of missing functionality.
Browse files Browse the repository at this point in the history
  • Loading branch information
jchv committed Jul 5, 2023
1 parent f0262ae commit 1f995b6
Show file tree
Hide file tree
Showing 7 changed files with 299 additions and 65 deletions.
2 changes: 0 additions & 2 deletions database/accounts/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,7 @@ func (s *Service) GetCharacters(ctx context.Context, playerID int64) ([]pangya.P
uint32(character.AuxPart4ID.Int64),
},
CutInID: uint32(character.CutInID.Int64),
//Mastery: uint32(character.Mastery),
}
result[i].ID = uint32(character.CharacterID)
}
return result, nil
}
Expand Down
22 changes: 19 additions & 3 deletions game/packet/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ var ClientMessageTable = common.NewMessageTable(map[uint16]ClientMessage{
0x0022: &ClientShotActiveUserAcknowledge{},
0x0026: &ClientRoomKick{},
0x002D: &ClientRoomInfo{},
0x002F: &ClientGetUserData{},
0x002F: &ClientGetPlayerData{},
0x0030: &ClientPauseGame{},
0x0031: &ClientHoleEnd{},
0x0032: &ClientSetIdleStatus{},
Expand All @@ -80,10 +80,13 @@ var ClientMessageTable = common.NewMessageTable(map[uint16]ClientMessage{
0x00CC: &ClientLockerCombinationAttempt{},
0x00D3: &ClientLockerInventoryRequest{},
0x00FE: &Client00FE{},
0x0108: &ClientGuildListRequest{},
0x012A: &ClientScratchyMenuOpen{},
0x0140: &ClientShopJoin{},
0x0143: &ClientRequestInboxList{},
0x0144: &ClientRequestInboxMessage{},
0x014B: &ClientBlackPapelPlay{},
0x0151: &ClientQuestStatusRequest{},
0x0157: &ClientAchievementStatusRequest{},
0x016E: &ClientRequestDailyReward{},
0x0176: &ClientEventLobbyJoin{},
Expand Down Expand Up @@ -400,9 +403,9 @@ type ClientAchievementStatusRequest struct {
UserID uint32
}

// ClientGetUserData is a message sent by the client to request
// ClientGetPlayerData is a message sent by the client to request
// the client state.
type ClientGetUserData struct {
type ClientGetPlayerData struct {
ClientMessage_
UserID uint32
Request byte
Expand Down Expand Up @@ -543,10 +546,23 @@ type Client00FE struct {
ClientMessage_
}

type ClientGuildListRequest struct {
ClientMessage_
Page uint32
}

type ClientScratchyMenuOpen struct {
ClientMessage_
}

type ClientBlackPapelPlay struct {
ClientMessage_
}

type ClientQuestStatusRequest struct {
ClientMessage_
}

type ClientBigPapelPlay struct {
ClientMessage_
}
70 changes: 65 additions & 5 deletions game/packet/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ var ServerMessageTable = common.NewMessageTable(map[uint16]ServerMessage{
0x0077: &Server0077{},
0x0078: &ServerPlayerReady{},
0x0086: &ServerRoomInfoResponse{},
0x0089: &ServerPlayerDataResponse{},
0x0090: &ServerPlayerFirstShotReady{},
0x0092: &ServerOpponentQuit{},
0x0095: &ServerMoneyUpdate{},
Expand All @@ -81,12 +82,17 @@ var ServerMessageTable = common.NewMessageTable(map[uint16]ServerMessage{
0x012B: &ServerMyRoomEntered{},
0x012D: &ServerMyRoomLayout{},
0x0151: &Server0151{},
0x0158: &ServerPlayerStats{},
0x0156: &ServerPlayerEquipmentResponse{},
0x0157: &ServerPlayerInfoResponse{},
0x0158: &ServerPlayerStatisticsResponse{},
0x015E: &ServerPlayerCharacterResponse{},
0x0168: &ServerPlayerInfo{},
0x016A: &Server016A{},
0x016C: &ServerLockerCombinationResponse{},
0x0170: &ServerLockerInventoryResponse{},
0x0199: &ServerRoomPlayerFinished{},
0x01BC: &ServerGuildListPage{},
0x01EB: &ServerScratchyMenuResponse{},
0x01F6: &Server01F6{},
0x020E: &Server020E{},
0x0210: &ServerInboxNotify{},
Expand All @@ -95,6 +101,7 @@ var ServerMessageTable = common.NewMessageTable(map[uint16]ServerMessage{
0x0216: &ServerUserStatusUpdate{},
0x021B: &ServerBlackPapelWinnings{},
0x021D: &ServerAchievementProgress{},
0x0225: &ServerQuestStatus{},
0x022C: &ServerAchievementUnknownResponse{},
0x022D: &ServerAchievementStatusResponse{},
0x0230: &Server0230{},
Expand Down Expand Up @@ -645,6 +652,21 @@ type ServerRoomPlayerFinished struct {
ServerMessage_
}

type ServerGuildListPage struct {
ServerMessage_
Status uint32
Page uint32
NumPages uint32
GuildCount uint16
Guilds []pangya.GuildData
}

type ServerScratchyMenuResponse struct {
ServerMessage_
Status uint32
Unknown uint8
}

// ServerRoomJoin is sent when a room is joined.
type ServerRoomJoin struct {
ServerMessage_
Expand All @@ -668,6 +690,13 @@ type ServerRoomInfoResponse struct {
RoomInfo gamemodel.RoomInfo
}

type ServerPlayerDataResponse struct {
ServerMessage_
Status uint32
Request uint8
UserID uint32
}

type ServerPlayerFirstShotReady struct {
ServerMessage_
}
Expand Down Expand Up @@ -769,12 +798,32 @@ type Server0151 struct {
Unknown []byte
}

type ServerPlayerStats struct {
type ServerPlayerEquipmentResponse struct {
ServerMessage_
Request uint8
UserID uint32
Equipment pangya.PlayerEquipment
}

SessionID uint32
Unknown byte
Stats pangya.PlayerStats
type ServerPlayerInfoResponse struct {
ServerMessage_
Request uint8
UserID uint32
Info pangya.PlayerInfo
Unknown uint32
}

type ServerPlayerStatisticsResponse struct {
ServerMessage_
Request uint8
UserID uint32
Stats pangya.PlayerStats
}

type ServerPlayerCharacterResponse struct {
ServerMessage_
UserID uint32
Character pangya.PlayerCharacterData
}

type ServerPlayerInfo struct {
Expand Down Expand Up @@ -903,6 +952,17 @@ type ServerAchievementProgress struct {
Achievements []AchievementProgress
}

type ServerQuestStatus struct {
ServerMessage_
Status uint32
QuestExpiryUnixTime uint32
QuestStartedUnixTime uint32
QuestCount uint32 `struct:"sizeof=QuestTypeID"`
QuestTypeID []uint32
QuestSlotCount uint32 `struct:"sizeof=QuestStatusSlot"`
QuestStatusSlot []uint32
}

type Server0230 struct {
ServerMessage_
}
Expand Down
12 changes: 12 additions & 0 deletions game/server/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ func (c *Conn) handleAuth(ctx context.Context) error {
return fmt.Errorf("sending server list: %w", err)
}

if err := c.sendPlayerStatistics(ctx); err != nil {
return fmt.Errorf("sending player statistics to client: %w", err)
}

return nil
}

Expand Down Expand Up @@ -239,3 +243,11 @@ func (c *Conn) sendServerList(ctx context.Context) error {
message.Count = uint8(len(response.Msg.Server))
return c.SendMessage(ctx, message)
}

func (c *Conn) sendPlayerStatistics(ctx context.Context) error {
return c.SendMessage(ctx, &gamepacket.ServerPlayerStatisticsResponse{
Request: 0,
UserID: uint32(c.player.PlayerID),
Stats: c.getPlayerStats(),
})
}
55 changes: 52 additions & 3 deletions game/server/conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -183,9 +183,43 @@ func (c *Conn) Handle(ctx context.Context) error {
case *gamepacket.ClientGetUserOnlineStatus:
// TODO
log.Debug("TODO: online status")
case *gamepacket.ClientGetUserData:
// TODO
log.Debug("TODO: user data")
case *gamepacket.ClientGetPlayerData:
player, err := c.s.accountsService.GetPlayer(ctx, int64(t.UserID))
if err != nil {
c.SendMessage(ctx, &gamepacket.ServerPlayerDataResponse{
Status: 2,
Request: t.Request,
UserID: t.UserID,
})
break
}
if t.Request == 5 {
c.SendMessage(ctx, &gamepacket.ServerPlayerInfoResponse{
Request: t.Request,
UserID: t.UserID,
Info: playerInfoFromDB(&player, 0), // TODO: set conn id somehow
})
c.SendMessage(ctx, &gamepacket.ServerPlayerCharacterResponse{
UserID: t.UserID,
Character: playerEquippedCharacterFromDB(&player),
})
c.SendMessage(ctx, &gamepacket.ServerPlayerEquipmentResponse{
Request: t.Request,
UserID: t.UserID,
Equipment: playerEquippedItemsFromDB(&player),
})
}
c.SendMessage(ctx, &gamepacket.ServerPlayerStatisticsResponse{
Request: t.Request,
UserID: t.UserID,
Stats: playerStatsFromDB(&player),
})
// TODO: Missing a lot of responses.
c.SendMessage(ctx, &gamepacket.ServerPlayerDataResponse{
Status: 1,
Request: t.Request,
UserID: t.UserID,
})
case *gamepacket.ClientRoomLoungeAction:
if c.currentRoom == nil {
break
Expand Down Expand Up @@ -826,6 +860,21 @@ func (c *Conn) Handle(ctx context.Context) error {
c.sendCharacterData(ctx)
case *gamepacket.Client004F:
// ignore
case *gamepacket.ClientQuestStatusRequest:
// TODO
c.SendMessage(ctx, &gamepacket.ServerQuestStatus{
Status: 1,
})
case *gamepacket.ClientGuildListRequest:
// TODO
c.SendMessage(ctx, &gamepacket.ServerGuildListPage{
Status: 1,
})
case *gamepacket.ClientScratchyMenuOpen:
// TODO
c.SendMessage(ctx, &gamepacket.ServerScratchyMenuResponse{
Status: 1,
})
default:
return fmt.Errorf("unexpected message: %T", t)
}
Expand Down
Loading

0 comments on commit 1f995b6

Please sign in to comment.