diff --git a/ranking/get_ranking.go b/ranking/get_ranking.go index 3e97628..e27a89f 100644 --- a/ranking/get_ranking.go +++ b/ranking/get_ranking.go @@ -14,6 +14,26 @@ func (commonProtocol *CommonProtocol) getRanking(err error, packet nex.PacketInt return nil, nex.NewError(nex.ResultCodes.Core.NotImplemented, "change_error") } + if commonProtocol.GetNearbyRankingsAndCountByCategoryAndRankingOrderParam == nil { + common_globals.Logger.Warning("Ranking::GetRanking missing GetNearbyRankingsAndCountByCategoryAndRankingOrderParam!") + return nil, nex.NewError(nex.ResultCodes.Core.NotImplemented, "change_error") + } + + if commonProtocol.GetFriendsRankingsAndCountByCategoryAndRankingOrderParam == nil { + common_globals.Logger.Warning("Ranking::GetRanking missing GetFriendsRankingsAndCountByCategoryAndRankingOrderParam!") + return nil, nex.NewError(nex.ResultCodes.Core.NotImplemented, "change_error") + } + + if commonProtocol.GetNearbyFriendsRankingsAndCountByCategoryAndRankingOrderParam == nil { + common_globals.Logger.Warning("Ranking::GetRanking missing GetNearbyFriendsRankingsAndCountByCategoryAndRankingOrderParam!") + return nil, nex.NewError(nex.ResultCodes.Core.NotImplemented, "change_error") + } + + if commonProtocol.GetOwnRankingByCategoryAndRankingOrderParam == nil { + common_globals.Logger.Warning("Ranking::GetRanking missing GetOwnRankingByCategoryAndRankingOrderParam!") + return nil, nex.NewError(nex.ResultCodes.Core.NotImplemented, "change_error") + } + if err != nil { common_globals.Logger.Error(err.Error()) return nil, nex.NewError(nex.ResultCodes.Ranking.InvalidArgument, "change_error") @@ -21,8 +41,27 @@ func (commonProtocol *CommonProtocol) getRanking(err error, packet nex.PacketInt connection := packet.Sender() endpoint := connection.Endpoint() + callerPid := principalID + // * PUYOPUYOTETRIS seems to do this sometimes + if callerPid.Value() == 0 { + callerPid = connection.PID() + } + + var rankDataList *types.List[*ranking_types.RankingRankData] + var totalCount uint32 + + if rankingMode.Value == 0 { + rankDataList, totalCount, err = commonProtocol.GetRankingsAndCountByCategoryAndRankingOrderParam(category, orderParam) + } else if rankingMode.Value == 1 { + rankDataList, totalCount, err = commonProtocol.GetNearbyRankingsAndCountByCategoryAndRankingOrderParam(callerPid, category, orderParam) + } else if rankingMode.Value == 2 { + rankDataList, totalCount, err = commonProtocol.GetFriendsRankingsAndCountByCategoryAndRankingOrderParam(callerPid, category, orderParam) + } else if rankingMode.Value == 3 { + rankDataList, totalCount, err = commonProtocol.GetNearbyFriendsRankingsAndCountByCategoryAndRankingOrderParam(callerPid, category, orderParam) + } else { // rankingMode.Value == 4 + rankDataList, totalCount, err = commonProtocol.GetOwnRankingByCategoryAndRankingOrderParam(callerPid, category, orderParam) + } - rankDataList, totalCount, err := commonProtocol.GetRankingsAndCountByCategoryAndRankingOrderParam(category, orderParam) if err != nil { common_globals.Logger.Critical(err.Error()) return nil, nex.NewError(nex.ResultCodes.Ranking.Unknown, "change_error") diff --git a/ranking/protocol.go b/ranking/protocol.go index de02f11..ad604fb 100644 --- a/ranking/protocol.go +++ b/ranking/protocol.go @@ -8,18 +8,22 @@ import ( ) type CommonProtocol struct { - endpoint nex.EndpointInterface - protocol ranking.Interface - GetCommonData func(uniqueID *types.PrimitiveU64) (*types.Buffer, error) - UploadCommonData func(pid *types.PID, uniqueID *types.PrimitiveU64, commonData *types.Buffer) error - InsertRankingByPIDAndRankingScoreData func(pid *types.PID, rankingScoreData *ranking_types.RankingScoreData, uniqueID *types.PrimitiveU64) error - GetRankingsAndCountByCategoryAndRankingOrderParam func(category *types.PrimitiveU32, rankingOrderParam *ranking_types.RankingOrderParam) (*types.List[*ranking_types.RankingRankData], uint32, error) - OnAfterGetCachedTopXRanking func(packet nex.PacketInterface, category *types.PrimitiveU32, orderParam *ranking_types.RankingOrderParam) - OnAfterGetCachedTopXRankings func(packet nex.PacketInterface, categories *types.List[*types.PrimitiveU32], orderParams *types.List[*ranking_types.RankingOrderParam]) - OnAfterGetCommonData func(packet nex.PacketInterface, uniqueID *types.PrimitiveU64) - OnAfterGetRanking func(packet nex.PacketInterface, rankingMode *types.PrimitiveU8, category *types.PrimitiveU32, orderParam *ranking_types.RankingOrderParam, uniqueID *types.PrimitiveU64, principalID *types.PID) - OnAfterUploadCommonData func(packet nex.PacketInterface, commonData *types.Buffer, uniqueID *types.PrimitiveU64) - OnAfterUploadScore func(packet nex.PacketInterface, scoreData *ranking_types.RankingScoreData, uniqueID *types.PrimitiveU64) + endpoint nex.EndpointInterface + protocol ranking.Interface + GetCommonData func(uniqueID *types.PrimitiveU64) (*types.Buffer, error) + UploadCommonData func(pid *types.PID, uniqueID *types.PrimitiveU64, commonData *types.Buffer) error + InsertRankingByPIDAndRankingScoreData func(pid *types.PID, rankingScoreData *ranking_types.RankingScoreData, uniqueID *types.PrimitiveU64) error + GetRankingsAndCountByCategoryAndRankingOrderParam func(category *types.PrimitiveU32, rankingOrderParam *ranking_types.RankingOrderParam) (*types.List[*ranking_types.RankingRankData], uint32, error) + GetNearbyRankingsAndCountByCategoryAndRankingOrderParam func(pid *types.PID, category *types.PrimitiveU32, rankingOrderParam *ranking_types.RankingOrderParam) (*types.List[*ranking_types.RankingRankData], uint32, error) + GetFriendsRankingsAndCountByCategoryAndRankingOrderParam func(pid *types.PID, category *types.PrimitiveU32, rankingOrderParam *ranking_types.RankingOrderParam) (*types.List[*ranking_types.RankingRankData], uint32, error) + GetNearbyFriendsRankingsAndCountByCategoryAndRankingOrderParam func(pid *types.PID, category *types.PrimitiveU32, rankingOrderParam *ranking_types.RankingOrderParam) (*types.List[*ranking_types.RankingRankData], uint32, error) + GetOwnRankingByCategoryAndRankingOrderParam func(pid *types.PID, category *types.PrimitiveU32, rankingOrderParam *ranking_types.RankingOrderParam) (*types.List[*ranking_types.RankingRankData], uint32, error) + OnAfterGetCachedTopXRanking func(packet nex.PacketInterface, category *types.PrimitiveU32, orderParam *ranking_types.RankingOrderParam) + OnAfterGetCachedTopXRankings func(packet nex.PacketInterface, categories *types.List[*types.PrimitiveU32], orderParams *types.List[*ranking_types.RankingOrderParam]) + OnAfterGetCommonData func(packet nex.PacketInterface, uniqueID *types.PrimitiveU64) + OnAfterGetRanking func(packet nex.PacketInterface, rankingMode *types.PrimitiveU8, category *types.PrimitiveU32, orderParam *ranking_types.RankingOrderParam, uniqueID *types.PrimitiveU64, principalID *types.PID) + OnAfterUploadCommonData func(packet nex.PacketInterface, commonData *types.Buffer, uniqueID *types.PrimitiveU64) + OnAfterUploadScore func(packet nex.PacketInterface, scoreData *ranking_types.RankingScoreData, uniqueID *types.PrimitiveU64) } // NewCommonProtocol returns a new CommonProtocol