推荐优化
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+"%")
|
||||
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 {
|
||||
continue
|
||||
}
|
||||
if GoUtil.Now()-ps.Loginout > 86400 { // 24小时内登录过
|
||||
if Now-ps.Loginout > 86400 { // 24小时内登录过
|
||||
continue
|
||||
}
|
||||
if ps.Loginout > recentLoginTime {
|
||||
@ -79,17 +79,20 @@ func (p *Player) GetVisitorPlayer() int {
|
||||
if recentFriendUid != 0 {
|
||||
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)
|
||||
for _, v := range PlayerList3 {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
for _, Uid := range uids {
|
||||
if Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
|
||||
if PlayerSimpleData.Level < 15 {
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Uid)
|
||||
if PlayerSimpleData == nil {
|
||||
continue
|
||||
}
|
||||
PlayerList4 = append(PlayerList4, v.Uid)
|
||||
PlayerList4 = append(PlayerList4, Uid)
|
||||
}
|
||||
L := GoUtil.RandSliceNum(PlayerList4, 1)
|
||||
if len(L) == 0 {
|
||||
@ -99,34 +102,34 @@ func (p *Player) GetVisitorPlayer() 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)
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
for _, v := range PlayerList {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
for _, Uid := range uids {
|
||||
if Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckSendApply(v.Uid) {
|
||||
if FriendMod.CheckSendApply(Uid) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckFriend(v.Uid) {
|
||||
if FriendMod.CheckFriend(Uid) {
|
||||
continue
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
|
||||
if GoUtil.Now()-PlayerSimpleData.Loginout > 86400 {
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Uid)
|
||||
if PlayerSimpleData == nil {
|
||||
continue
|
||||
}
|
||||
if PlayerSimpleData.Level < 4 {
|
||||
continue
|
||||
}
|
||||
PlayerList1 = append(PlayerList1, v.Uid)
|
||||
PlayerList1 = append(PlayerList1, Uid)
|
||||
}
|
||||
if len(PlayerList1) == 0 {
|
||||
for _, v := range PlayerList {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
for _, Uid := range uids {
|
||||
if Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
PlayerList1 = append(PlayerList1, v.Uid)
|
||||
PlayerList1 = append(PlayerList1, Uid)
|
||||
}
|
||||
}
|
||||
return GoUtil.RandSliceNum(PlayerList1, Num)
|
||||
|
||||
@ -273,9 +273,6 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
HandleType: MsgMod.HANDLE_MDO_CHAMPSHIP_INRANK,
|
||||
}
|
||||
SendMsgToCenterAsync(m)
|
||||
case "clearRank":
|
||||
num, _ := strconv.Atoi(arg[1])
|
||||
G_GameLogicPtr.RankMgr.ClearRank(num)
|
||||
case "resetUserInfo":
|
||||
Rank := G_GameLogicPtr.RankMgr.getRank(RANK_TYPE_USER)
|
||||
for _, v := range Rank {
|
||||
|
||||
@ -8,6 +8,7 @@ import (
|
||||
GoUtil "server/game_util"
|
||||
"sort"
|
||||
"strconv"
|
||||
"sync"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -18,6 +19,8 @@ type RankMgr struct {
|
||||
*ServerMod
|
||||
}
|
||||
|
||||
var mu sync.Mutex
|
||||
|
||||
type RankData struct {
|
||||
List map[int][]*Rank // 玩家排行榜
|
||||
Champship map[int][]*Rank // 锦标赛排行榜
|
||||
@ -98,29 +101,6 @@ func (r *RankMgr) getRank(RankType int) []*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) {
|
||||
data := m.Extra.(RankMsg)
|
||||
@ -132,12 +112,10 @@ func (r *RankMgr) getRankInfo(m *msg.Msg) (interface{}, error) {
|
||||
if data.RankType == RANK_TYPE_USER {
|
||||
return r.getRedisCountryRankInfo(m)
|
||||
}
|
||||
rankList := r.getRank(data.RankType)
|
||||
MyRank, MyScore := r.getMyRank(m.From, data.RankType)
|
||||
return &RankInfo{
|
||||
List: rankList,
|
||||
MyRank: MyRank,
|
||||
MyScore: MyScore,
|
||||
List: []*Rank{},
|
||||
MyRank: 0,
|
||||
MyScore: 0,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -193,32 +171,6 @@ func (r *RankMgr) getRedisRankInfo(m *msg.Msg) (interface{}, error) {
|
||||
// 进入排行榜
|
||||
func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
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 {
|
||||
// 全球玩家排行榜
|
||||
Uid := strconv.Itoa(data.Uid)
|
||||
@ -234,11 +186,3 @@ func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
r.update = true
|
||||
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