推荐优化
This commit is contained in:
parent
30f32e1da0
commit
4e832972fa
@ -432,3 +432,13 @@ func SearchPlayer(key string) ([]*ResPlayerBaseInfo, error) {
|
|||||||
err := SqlDb.Select(data, sql, "%"+key+"%")
|
err := SqlDb.Select(data, sql, "%"+key+"%")
|
||||||
return *data, err
|
return *data, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetCommendPlayerFromDb(uid, login int64, level int) ([]int, error) {
|
||||||
|
sqlStr := "SELECT dwUin FROM t_player_baseinfo WHERE dwUin != ? AND logout_time > ? AND level >= ? ORDER BY logout_time DESC LIMIT 1000"
|
||||||
|
var res []int
|
||||||
|
if err := SqlDb.Select(&res, sqlStr, uid, login, level); err != nil {
|
||||||
|
log.Debug("table: %s, sql :%s, exec failed, err:%v\n", "PlayerBaseInfo", sqlStr, err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|||||||
@ -68,7 +68,7 @@ func (p *Player) GetVisitorPlayer() int {
|
|||||||
if ps == nil {
|
if ps == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if GoUtil.Now()-ps.Loginout > 86400 { // 24小时内登录过
|
if Now-ps.Loginout > 86400 { // 24小时内登录过
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if ps.Loginout > recentLoginTime {
|
if ps.Loginout > recentLoginTime {
|
||||||
@ -79,17 +79,20 @@ func (p *Player) GetVisitorPlayer() int {
|
|||||||
if recentFriendUid != 0 {
|
if recentFriendUid != 0 {
|
||||||
return recentFriendUid
|
return recentFriendUid
|
||||||
}
|
}
|
||||||
PlayerList3 := G_GameLogicPtr.RankMgr.getAllRank(RANK_TYPE_USER)
|
uids, err := db.GetCommendPlayerFromDb(p.M_DwUin, GoUtil.Now()-86400, 15)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
PlayerList4 := make([]int, 0)
|
PlayerList4 := make([]int, 0)
|
||||||
for _, v := range PlayerList3 {
|
for _, Uid := range uids {
|
||||||
if v.Uid == int(p.M_DwUin) {
|
if Uid == int(p.M_DwUin) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
|
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Uid)
|
||||||
if PlayerSimpleData.Level < 15 {
|
if PlayerSimpleData == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
PlayerList4 = append(PlayerList4, v.Uid)
|
PlayerList4 = append(PlayerList4, Uid)
|
||||||
}
|
}
|
||||||
L := GoUtil.RandSliceNum(PlayerList4, 1)
|
L := GoUtil.RandSliceNum(PlayerList4, 1)
|
||||||
if len(L) == 0 {
|
if len(L) == 0 {
|
||||||
@ -99,34 +102,34 @@ func (p *Player) GetVisitorPlayer() int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetRecommendPlayer(p *Player, Num int) []int {
|
func GetRecommendPlayer(p *Player, Num int) []int {
|
||||||
PlayerList := G_GameLogicPtr.RankMgr.getAllRank(RANK_TYPE_USER)
|
uids, err := db.GetCommendPlayerFromDb(p.M_DwUin, GoUtil.Now()-259200, 4)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
PlayerList1 := make([]int, 0)
|
PlayerList1 := make([]int, 0)
|
||||||
FriendMod := p.PlayMod.getFriendMod()
|
FriendMod := p.PlayMod.getFriendMod()
|
||||||
for _, v := range PlayerList {
|
for _, Uid := range uids {
|
||||||
if v.Uid == int(p.M_DwUin) {
|
if Uid == int(p.M_DwUin) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if FriendMod.CheckSendApply(v.Uid) {
|
if FriendMod.CheckSendApply(Uid) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if FriendMod.CheckFriend(v.Uid) {
|
if FriendMod.CheckFriend(Uid) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
|
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Uid)
|
||||||
if GoUtil.Now()-PlayerSimpleData.Loginout > 86400 {
|
if PlayerSimpleData == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if PlayerSimpleData.Level < 4 {
|
PlayerList1 = append(PlayerList1, Uid)
|
||||||
continue
|
|
||||||
}
|
|
||||||
PlayerList1 = append(PlayerList1, v.Uid)
|
|
||||||
}
|
}
|
||||||
if len(PlayerList1) == 0 {
|
if len(PlayerList1) == 0 {
|
||||||
for _, v := range PlayerList {
|
for _, Uid := range uids {
|
||||||
if v.Uid == int(p.M_DwUin) {
|
if Uid == int(p.M_DwUin) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
PlayerList1 = append(PlayerList1, v.Uid)
|
PlayerList1 = append(PlayerList1, Uid)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return GoUtil.RandSliceNum(PlayerList1, Num)
|
return GoUtil.RandSliceNum(PlayerList1, Num)
|
||||||
|
|||||||
@ -273,9 +273,6 @@ func ReqGmCommand_(player *Player, Command string) error {
|
|||||||
HandleType: MsgMod.HANDLE_MDO_CHAMPSHIP_INRANK,
|
HandleType: MsgMod.HANDLE_MDO_CHAMPSHIP_INRANK,
|
||||||
}
|
}
|
||||||
SendMsgToCenterAsync(m)
|
SendMsgToCenterAsync(m)
|
||||||
case "clearRank":
|
|
||||||
num, _ := strconv.Atoi(arg[1])
|
|
||||||
G_GameLogicPtr.RankMgr.ClearRank(num)
|
|
||||||
case "resetUserInfo":
|
case "resetUserInfo":
|
||||||
Rank := G_GameLogicPtr.RankMgr.getRank(RANK_TYPE_USER)
|
Rank := G_GameLogicPtr.RankMgr.getRank(RANK_TYPE_USER)
|
||||||
for _, v := range Rank {
|
for _, v := range Rank {
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import (
|
|||||||
GoUtil "server/game_util"
|
GoUtil "server/game_util"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -18,6 +19,8 @@ type RankMgr struct {
|
|||||||
*ServerMod
|
*ServerMod
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var mu sync.Mutex
|
||||||
|
|
||||||
type RankData struct {
|
type RankData struct {
|
||||||
List map[int][]*Rank // 玩家排行榜
|
List map[int][]*Rank // 玩家排行榜
|
||||||
Champship map[int][]*Rank // 锦标赛排行榜
|
Champship map[int][]*Rank // 锦标赛排行榜
|
||||||
@ -98,29 +101,6 @@ func (r *RankMgr) getRank(RankType int) []*Rank {
|
|||||||
return []*Rank{}
|
return []*Rank{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RankMgr) getAllRank(RankType int) []*Rank {
|
|
||||||
if v, ok := r.getData().List[RankType]; ok {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
return []*Rank{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *RankMgr) getMyRank(Uid, RankType int) (int, float64) {
|
|
||||||
if d, ok := r.getData().List[RankType]; ok {
|
|
||||||
for k, v := range d {
|
|
||||||
if v.Uid == Uid {
|
|
||||||
return k + 1, v.Score
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0, 0.0
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置榜单数据
|
|
||||||
func (r *RankMgr) setRank(RankType int, data []*Rank) {
|
|
||||||
r.getData().List[RankType] = data
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取排行榜信息
|
// 获取排行榜信息
|
||||||
func (r *RankMgr) getRankInfo(m *msg.Msg) (interface{}, error) {
|
func (r *RankMgr) getRankInfo(m *msg.Msg) (interface{}, error) {
|
||||||
data := m.Extra.(RankMsg)
|
data := m.Extra.(RankMsg)
|
||||||
@ -132,12 +112,10 @@ func (r *RankMgr) getRankInfo(m *msg.Msg) (interface{}, error) {
|
|||||||
if data.RankType == RANK_TYPE_USER {
|
if data.RankType == RANK_TYPE_USER {
|
||||||
return r.getRedisCountryRankInfo(m)
|
return r.getRedisCountryRankInfo(m)
|
||||||
}
|
}
|
||||||
rankList := r.getRank(data.RankType)
|
|
||||||
MyRank, MyScore := r.getMyRank(m.From, data.RankType)
|
|
||||||
return &RankInfo{
|
return &RankInfo{
|
||||||
List: rankList,
|
List: []*Rank{},
|
||||||
MyRank: MyRank,
|
MyRank: 0,
|
||||||
MyScore: MyScore,
|
MyScore: 0,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,32 +171,6 @@ func (r *RankMgr) getRedisRankInfo(m *msg.Msg) (interface{}, error) {
|
|||||||
// 进入排行榜
|
// 进入排行榜
|
||||||
func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
|
func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||||
data := m.Extra.(RankMsg)
|
data := m.Extra.(RankMsg)
|
||||||
rankList := r.getRank(data.RankType)
|
|
||||||
inRank := false
|
|
||||||
for _, v := range rankList {
|
|
||||||
if v.Uid == data.Uid {
|
|
||||||
if v.Score < data.Score {
|
|
||||||
v.Score = data.Score
|
|
||||||
v.Time = m.SendT
|
|
||||||
inRank = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !inRank {
|
|
||||||
rankList = append(rankList, &Rank{Uid: data.Uid, Score: data.Score, Time: m.SendT})
|
|
||||||
}
|
|
||||||
sort.Slice(rankList, func(i, j int) bool { // 排序 从大到小 数值相等按时间排序
|
|
||||||
if rankList[i].Score > rankList[j].Score {
|
|
||||||
return true
|
|
||||||
} else if rankList[i].Score == rankList[j].Score {
|
|
||||||
return rankList[i].Time < rankList[j].Time
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
})
|
|
||||||
r.setRank(data.RankType, rankList)
|
|
||||||
if data.RankType == RANK_TYPE_USER {
|
if data.RankType == RANK_TYPE_USER {
|
||||||
// 全球玩家排行榜
|
// 全球玩家排行榜
|
||||||
Uid := strconv.Itoa(data.Uid)
|
Uid := strconv.Itoa(data.Uid)
|
||||||
@ -234,11 +186,3 @@ func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
|
|||||||
r.update = true
|
r.update = true
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RankMgr) ClearRank(RankType int) {
|
|
||||||
// if RankType == RANK_TYPE_GLOBAL {
|
|
||||||
// db.RedisDel(RANK_USER)
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
r.setRank(RankType, []*Rank{})
|
|
||||||
}
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user