锦标赛优化

This commit is contained in:
hahwu 2024-11-26 17:17:14 +08:00
parent 1e345f4ca1
commit 7655b2c96f
15 changed files with 2311 additions and 1571 deletions

View File

@ -4,6 +4,7 @@ import (
"server/GoUtil" "server/GoUtil"
champshipCfg "server/conf/champship" champshipCfg "server/conf/champship"
"server/game/mod/msg" "server/game/mod/msg"
proto "server/msg"
"sort" "sort"
"time" "time"
) )
@ -17,13 +18,15 @@ type ChampshipMgr struct {
} }
type ChampshipData struct { type ChampshipData struct {
AutoId int AutoId int
RobotId int RobotId int
Rank map[int][]*ChampshipRank // 锦标赛排行榜 Rank map[int][]*ChampshipRank // 锦标赛排行榜
Last map[int][]*ChampshipRank // 锦标赛排行榜 备份 PreRank map[int][]*ChampshipRank // 锦标赛排行榜 备份
Pool map[int]*GroupInfo // 锦标赛未分配玩家 Pool map[int]*GroupInfo // 锦标赛未分配玩家
GroupInfo map[int]int // 锦标赛分组信息 GroupInfo map[int]int // 锦标赛分组信息
Robot map[int]*ChampshipRobot // 机器人 PreGroupInfo map[int]int // 锦标赛分组信息 备份
Robot map[int]*ChampshipRobot // 机器人
PreRobot map[int]*ChampshipRobot // 机器人 备份
} }
type ChampshipRank struct { type ChampshipRank struct {
@ -34,15 +37,16 @@ type ChampshipRank struct {
} }
type ChampshipRobot struct { type ChampshipRobot struct {
Max float64 Max float64
Type int Type int
Name string Name string
Avatar int Avatar int
Face int Face int
Level int Level int
GroupId int GroupId int
Time int64 Time int64
Score float64 Score float64
PerScore float64
} }
type GroupInfo struct { type GroupInfo struct {
@ -63,39 +67,238 @@ type CRank struct {
func (c *ChampshipMgr) Init() { func (c *ChampshipMgr) Init() {
c.key = CHAMPSHIP_MGR_KEY c.key = CHAMPSHIP_MGR_KEY
c.data = &ChampshipData{ c.data = &ChampshipData{
Rank: make(map[int][]*ChampshipRank, 0), Rank: make(map[int][]*ChampshipRank, 0),
Last: make(map[int][]*ChampshipRank, 0), PreRank: make(map[int][]*ChampshipRank, 0),
Pool: make(map[int]*GroupInfo, 0), Pool: make(map[int]*GroupInfo, 0),
Robot: make(map[int]*ChampshipRobot, 0), GroupInfo: make(map[int]int),
PreGroupInfo: make(map[int]int),
Robot: make(map[int]*ChampshipRobot, 0),
PreRobot: make(map[int]*ChampshipRobot, 0),
} }
// 注册处理函数 // 注册处理函数
c.init() c.init()
c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_GROUP, c.group) c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_GROUP, c.group)
c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, c.inRank) c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, c.inRank)
c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_AI, c.ai)
c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_ZERO, c.ZeroUpdate)
Now := GoUtil.Now() Now := GoUtil.Now()
ZeroTime := GoUtil.ZeroTimestamp() ZeroTime := GoUtil.ZeroTimestamp()
Remain := max(Now-ZeroTime, 3000) Remain := Now - ZeroTime
Remain1 := 1800 - Remain%1800 Remain1 := 1800 - Remain%1800
c.mDispatr.AfterFunc(time.Duration(Remain1), func() { c.mDispatr.AfterFunc(time.Duration(Remain1)*time.Second, func() {
c.Send(&msg.Msg{ c.Send(&msg.Msg{
Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP, Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP,
}) })
}) })
c.mDispatr.AfterFunc(time.Duration(60)*time.Second, func() {
c.Send(&msg.Msg{
Type: msg.HANDLE_TYPE_CHAMPSHIP_AI,
})
})
c.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() {
c.Send(&msg.Msg{
Type: msg.HANDLE_TYPE_CHAMPSHIP_ZERO,
})
})
} }
func (c *ChampshipMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { func (c *ChampshipMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) {
c.getData().Last = c.getData().Rank c.getData().PreRank = c.getData().Rank
c.getData().PreRobot = c.getData().Robot
c.getData().PreGroupInfo = c.getData().GroupInfo
c.getData().Robot = make(map[int]*ChampshipRobot, 0)
c.getData().Rank = make(map[int][]*ChampshipRank, 0) c.getData().Rank = make(map[int][]*ChampshipRank, 0)
c.getData().GroupInfo = make(map[int]int, 0)
c.update = true c.update = true
c.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() {
c.Send(&msg.Msg{
Type: msg.HANDLE_TYPE_CHAMPSHIP_ZERO,
})
})
return nil, nil return nil, nil
} }
func (c *ChampshipMgr) ai(m *msg.Msg) (interface{}, error) {
ChampshipData := c.getData()
Now := GoUtil.Now()
for k, v := range ChampshipData.Rank {
Notify := make(map[int]int)
for e, r := range v {
if r.Type == RANK_PLAYER_ROBOT {
AddScore := 0
Robot := ChampshipData.Robot[r.Uid]
if Robot == nil {
continue
}
if Robot.Type == 2 && Robot.Time+60 < Now {
AddScore = int(Robot.PerScore)
Robot.Time = Now
}
if Robot.Type == 3 && Robot.Time+1800 < Now {
AddScore = int(Robot.PerScore)
Robot.Time = Now
}
r.Score += float64(AddScore)
} else {
Notify[r.Uid] = e
}
}
sort.Slice(v, func(i, j int) bool { // 排序 从大到小 数值相等按时间排序
if v[i].Score > v[j].Score {
return true
} else if v[i].Score == v[j].Score {
return v[i].Time < v[j].Time
}
return false
})
for e, r := range v {
if r.Type == RANK_PLAYER_ROBOT {
continue
}
if Notify[r.Uid] != e {
NotifyPlayer(r.Uid, &msg.Msg{
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
})
}
}
ChampshipData.Rank[k] = v
}
c.mDispatr.AfterFunc(time.Duration(60)*time.Second, func() {
c.Send(&msg.Msg{
Type: msg.HANDLE_TYPE_CHAMPSHIP_AI,
})
})
return nil, nil
}
func (c *ChampshipMgr) GetPreRankMsg(Uid int) *proto.ResChampshipPreRank {
ChampshipData := c.getData()
GroupId := ChampshipData.GroupInfo[Uid]
if GroupId == 0 {
return &proto.ResChampshipPreRank{}
}
RankList, ok := ChampshipData.Rank[GroupId]
if !ok {
return &proto.ResChampshipPreRank{}
}
MyRank := 0
MyScore := 0.0
RL := make(map[int32]*proto.ResPlayerRank, 0)
for k, v := range RankList {
if v.Uid == Uid {
MyRank = k + 1
MyScore = v.Score
}
if v.Type == RANK_PLAYER_ROBOT {
Robot := ChampshipData.Robot[v.Uid]
if Robot == nil {
continue
}
RL[int32(k+1)] = &proto.ResPlayerRank{
Uid: int32(v.Uid),
Score: float32(v.Score),
Name: Robot.Name,
Avatar: int32(Robot.Avatar),
Face: int32(Robot.Face),
Level: int32(Robot.Level),
}
} else {
SimplePlayer := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
if SimplePlayer == nil {
continue
}
RL[int32(k+1)] = &proto.ResPlayerRank{
Uid: int32(v.Uid),
Score: float32(v.Score),
Name: SimplePlayer.Name,
Avatar: int32(SimplePlayer.Avatar),
Face: int32(SimplePlayer.Face),
Level: int32(SimplePlayer.Level),
}
}
}
return &proto.ResChampshipPreRank{
MyRank: int32(MyRank),
MyScore: float32(MyScore),
RankList: RL,
}
}
func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank {
ChampshipData := c.getData()
GroupId := ChampshipData.GroupInfo[Uid]
if GroupId == 0 {
return &proto.ResChampshipRank{}
}
RankList, ok := ChampshipData.Rank[GroupId]
if !ok {
return &proto.ResChampshipRank{}
}
MyRank := 0
MyScore := 0.0
RL := make(map[int32]*proto.ResPlayerRank, 0)
for k, v := range RankList {
if v.Uid == Uid {
MyRank = k + 1
MyScore = v.Score
}
if v.Type == RANK_PLAYER_ROBOT {
Robot := ChampshipData.Robot[v.Uid]
if Robot == nil {
continue
}
RL[int32(k+1)] = &proto.ResPlayerRank{
Uid: int32(v.Uid),
Score: float32(v.Score),
Name: Robot.Name,
Avatar: int32(Robot.Avatar),
Face: int32(Robot.Face),
Level: int32(Robot.Level),
}
} else {
SimplePlayer := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
if SimplePlayer == nil {
continue
}
RL[int32(k+1)] = &proto.ResPlayerRank{
Uid: int32(v.Uid),
Score: float32(v.Score),
Name: SimplePlayer.Name,
Avatar: int32(SimplePlayer.Avatar),
Face: int32(SimplePlayer.Face),
Level: int32(SimplePlayer.Level),
}
}
}
return &proto.ResChampshipRank{
MyRank: int32(MyRank),
MyScore: float32(MyScore),
RankList: RL,
}
}
// 分组 // 分组
func (c *ChampshipMgr) group(m *msg.Msg) (interface{}, error) { func (c *ChampshipMgr) group(m *msg.Msg) (interface{}, error) {
c.mDispatr.AfterFunc(time.Duration(1800)*time.Second, func() { // 30分钟后重新分组
c.Send(&msg.Msg{
Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP,
})
})
Now := GoUtil.Now()
Zero := GoUtil.ZeroTimestamp()
if Now-Zero < 1800 { // 0点30分钟内不分组
return nil, nil
}
ChampshipData := c.getData() ChampshipData := c.getData()
if len(ChampshipData.Pool) == 0 { // 未分配玩家池为空
return nil, nil
}
g := make(map[int][]int, 0) g := make(map[int][]int, 0)
for k, v := range ChampshipData.Pool { for k, v := range ChampshipData.Pool { // step 1:根据数值分配玩家
x := 0 x := 0
n := champshipCfg.GetGroupId(v.N) n := champshipCfg.GetGroupId(v.N)
h := champshipCfg.GetGroupId(v.H) h := champshipCfg.GetGroupId(v.H)
@ -136,26 +339,26 @@ func (c *ChampshipMgr) group(m *msg.Msg) (interface{}, error) {
} }
return false return false
}) })
if (j+1)/10 == 0 { if len(ChampshipData.Rank[ChampshipData.AutoId]) == 10 {
ChampshipData.AutoId++ ChampshipData.AutoId++
} }
} }
for j := StartId; j <= ChampshipData.AutoId; j++ { for j := StartId; j <= ChampshipData.AutoId; j++ { // 填充机器人
RobotNum := 30 - len(ChampshipData.Rank[j]) RobotNum := 30 - len(ChampshipData.Rank[j])
RobotList := CreateRobotList(i, RobotNum, j) RobotList := CreateRobotList(i, RobotNum, j)
for _, v := range RobotList { for _, v := range RobotList {
ChampshipData.Robot[ChampshipData.RobotId] = v ChampshipData.Robot[ChampshipData.RobotId] = v
ChampshipData.Rank[ChampshipData.AutoId] = append(ChampshipData.Rank[ChampshipData.AutoId], &ChampshipRank{ ChampshipData.Rank[j] = append(ChampshipData.Rank[j], &ChampshipRank{
Uid: ChampshipData.RobotId, Uid: ChampshipData.RobotId,
Score: v.Score, Score: v.Score,
Time: v.Time, Time: v.Time,
Type: RANK_PLAYER_ROBOT, Type: RANK_PLAYER_ROBOT,
}) })
sort.Slice(ChampshipData.Rank[ChampshipData.AutoId], func(i, j int) bool { // 排序 从大到小 数值相等按时间排序 sort.Slice(ChampshipData.Rank[j], func(x, y int) bool { // 排序 从大到小 数值相等按时间排序
if ChampshipData.Rank[ChampshipData.AutoId][i].Score > ChampshipData.Rank[ChampshipData.AutoId][j].Score { if ChampshipData.Rank[j][x].Score > ChampshipData.Rank[j][y].Score {
return true return true
} else if ChampshipData.Rank[ChampshipData.AutoId][i].Score == ChampshipData.Rank[ChampshipData.AutoId][j].Score { } else if ChampshipData.Rank[j][x].Score == ChampshipData.Rank[j][y].Score {
return ChampshipData.Rank[ChampshipData.AutoId][i].Time < ChampshipData.Rank[ChampshipData.AutoId][j].Time return ChampshipData.Rank[j][x].Time < ChampshipData.Rank[j][y].Time
} }
return false return false
}) })
@ -163,18 +366,18 @@ func (c *ChampshipMgr) group(m *msg.Msg) (interface{}, error) {
} }
} }
} }
T := time.Now()
H := T.Hour() for k := range ChampshipData.Pool { // 分组完成通知
if H != 0 { NotifyPlayer(k, &msg.Msg{
c.mDispatr.AfterFunc(time.Duration(1800), func() { Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
c.Send(&msg.Msg{
Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP,
})
}) })
} }
c.getData().Pool = make(map[int]*GroupInfo) // 清空未分配池
return nil, nil return nil, nil
} }
// 获取分组ID
func (c *ChampshipMgr) getGroupId(Uid int) int { func (c *ChampshipMgr) getGroupId(Uid int) int {
ChampshipData := c.getData() ChampshipData := c.getData()
GroupId, ok := ChampshipData.GroupInfo[Uid] GroupId, ok := ChampshipData.GroupInfo[Uid]
@ -199,26 +402,87 @@ func (c *ChampshipMgr) inRank(m *msg.Msg) (interface{}, error) {
} }
return nil, nil return nil, nil
} }
_, ok := ChampshipData.Rank[GroupId] RankList, ok := ChampshipData.Rank[GroupId]
if !ok { if !ok {
ChampshipData.Rank[GroupId] = make([]*ChampshipRank, 0) ChampshipData.Rank[GroupId] = make([]*ChampshipRank, 0)
} }
ChampshipData.Rank[GroupId] = append(ChampshipData.Rank[GroupId], &ChampshipRank{ inRank := false
Uid: data.Uid, Notify := make(map[int]int)
Score: data.Score, for k, v := range RankList {
Time: GoUtil.Now(), if v.Uid == data.Uid {
}) if v.Score < data.Score {
sort.Slice(ChampshipData.Rank[GroupId], func(i, j int) bool { // 排序 从大到小 数值相等按时间排序 v.Score = data.Score
if ChampshipData.Rank[GroupId][i].Score > ChampshipData.Rank[GroupId][j].Score { v.Time = GoUtil.Now()
inRank = true
break
}
return nil, nil
}
Notify[v.Uid] = k
}
if !inRank {
RankList = append(RankList, &ChampshipRank{
Uid: data.Uid,
Score: data.Score,
Time: GoUtil.Now(),
})
}
sort.Slice(RankList, func(i, j int) bool { // 排序 从大到小 数值相等按时间排序
if RankList[i].Score > RankList[j].Score {
return true return true
} else if ChampshipData.Rank[GroupId][i].Score == ChampshipData.Rank[GroupId][j].Score { } else if RankList[i].Score == RankList[j].Score {
return ChampshipData.Rank[GroupId][i].Time < ChampshipData.Rank[GroupId][j].Time return RankList[i].Time < RankList[j].Time
} }
return false return false
}) })
for k, v := range RankList {
if Notify[v.Uid] != k {
NotifyPlayer(v.Uid, &msg.Msg{
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
})
}
}
ChampshipData.Rank[GroupId] = RankList
return nil, nil return nil, nil
} }
func (c *ChampshipMgr) getMyRank(Uid int) int {
ChampshipData := c.getData()
GroupId := ChampshipData.GroupInfo[Uid]
if GroupId == 0 {
return 0
}
RankList, ok := ChampshipData.Rank[GroupId]
if !ok {
return 0
}
for k, v := range RankList {
if v.Uid == Uid {
return k + 1
}
}
return 0
}
func (c *ChampshipMgr) getLastMyRank(Uid int) int {
ChampshipData := c.getData()
GroupId := ChampshipData.PreGroupInfo[Uid]
if GroupId == 0 {
return 0
}
RankList, ok := ChampshipData.PreRank[GroupId]
if !ok {
return 0
}
for k, v := range RankList {
if v.Uid == Uid {
return k + 1
}
}
return 0
}
func (c *ChampshipMgr) getData() *ChampshipData { func (c *ChampshipMgr) getData() *ChampshipData {
return c.data.(*ChampshipData) return c.data.(*ChampshipData)
} }
@ -231,13 +495,14 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
r = append(r, CreateRobot(float64(GoUtil.RandNum(7531, 12180)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(7531, 12180)), GroupId))
r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId))
r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId))
for i := 0; i <= 6; i++ { for i := 0; i < 6; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId))
} }
for i := 0; i <= 5; i++ { for i := 0; i < 5; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId))
} }
for i := 0; i <= Num-15; i++ { Last := Num - len(r)
for i := 0; i < Last; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId))
} }
case 2: case 2:
@ -245,15 +510,15 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
r = append(r, CreateRobot(float64(GoUtil.RandNum(7531, 12180)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(7531, 12180)), GroupId))
r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId))
r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId))
for i := 0; i <= 6; i++ { for i := 0; i < 6; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId))
} }
n := Num - 10 n := Num - 10
x := n / 2 x := n / 2
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId))
} }
for i := 0; i <= n-x; i++ { for i := 0; i < n-x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId))
} }
case 3: case 3:
@ -261,18 +526,19 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
r = append(r, CreateRobot(float64(GoUtil.RandNum(7531, 12180)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(7531, 12180)), GroupId))
r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId))
r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId))
for i := 0; i <= 6; i++ { for i := 0; i < 6; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId))
} }
n := Num - 10 n := Num - 10
x := n / 3 x := n / 3
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId))
} }
for i := 0; i <= n-x*2; i++ { Last := Num - len(r)
for i := 0; i < Last; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId))
} }
case 4: case 4:
@ -283,16 +549,17 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
n := Num - 4 n := Num - 4
x := n / 4 x := n / 4
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId))
} }
for i := 0; i <= n-x*3; i++ { Last := Num - len(r)
for i := 0; i < Last; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId))
} }
case 5: case 5:
@ -302,19 +569,20 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
n := Num - 3 n := Num - 3
x := n / 5 x := n / 5
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId))
} }
for i := 0; i <= n-x*4; i++ { Last := Num - len(r)
for i := 0; i < Last; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId))
} }
case 6: case 6:
@ -323,47 +591,49 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
n := Num - 2 n := Num - 2
x := n / 6 x := n / 6
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId))
} }
for i := 0; i <= Num-len(r); i++ { Last := Num - len(r)
for i := 0; i < Last; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId))
} }
case 7: case 7:
r = append(r, CreateRobot(float64(GoUtil.RandNum(12181, 21680)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(12181, 21680)), GroupId))
n := Num - 1 n := Num - 1
x := n / 7 x := n / 7
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(7531, 12180)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(7531, 12180)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId))
} }
for i := 0; i <= Num-len(r); i++ { Last := Num - len(r)
for i := 0; i < Last; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId))
} }
case 8, 9, 10, 11: case 8, 9, 10, 11:
@ -372,28 +642,29 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
r = append(r, CreateRobot(float64(GoUtil.RandNum(35131, 64980)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(35131, 64980)), GroupId))
} }
x := Num / 8 x := Num / 8
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(12181, 21680)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(12181, 21680)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(7531, 12180)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(7531, 12180)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(4631, 7530)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(2781, 4630)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(1731, 2780)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(581, 1730)), GroupId))
} }
for i := 0; i <= x; i++ { for i := 0; i < x; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(241, 580)), GroupId))
} }
for i := 0; i <= Num-len(r); i++ { Last := Num - len(r)
for i := 0; i < Last; i++ {
r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId)) r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId))
} }
@ -404,19 +675,26 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
func CreateRobot(M float64, GroupId int) *ChampshipRobot { func CreateRobot(M float64, GroupId int) *ChampshipRobot {
Type := GoUtil.RandMap(map[int]int{1: 25, 2: 50, 3: 25}) Type := GoUtil.RandMap(map[int]int{1: 25, 2: 50, 3: 25})
Score := M / 10 Score := M / 10
PerScore := 0.0
if Type == 2 { if Type == 2 {
PerScore = (M / 10 * 0.34) / float64(GoUtil.NextZeroTimestampDuration()) / 60
Score = M / 10 * 0.66 Score = M / 10 * 0.66
} }
if Type == 3 {
PerScore = (M / 10 * 0.34) / float64(GoUtil.NextZeroTimestampDuration()) / 1800
Score = 0
}
return &ChampshipRobot{ return &ChampshipRobot{
Max: M, Max: M / 10,
Type: Type, Type: Type,
Name: "Lily", Name: "Lily",
Avatar: 1, Avatar: GoUtil.RandNum(1, 10),
Face: 1, Face: GoUtil.RandNum(1, 10),
Level: 1, Level: GoUtil.RandNum(1, 10),
GroupId: GroupId, GroupId: GroupId,
Time: GoUtil.Now(), Time: GoUtil.Now(),
Score: Score, Score: Score,
PerScore: PerScore,
} }
} }

View File

@ -83,11 +83,13 @@ type GameLogic struct {
MPlayerProfileManager *PlayerProfileManager MPlayerProfileManager *PlayerProfileManager
MOldPlayerCompensateMgr *OldPlayerCompensateMgr MOldPlayerCompensateMgr *OldPlayerCompensateMgr
MHttpManager *HttpManager MHttpManager *HttpManager
MLogManager *LogMgr
SeverInfo *ServerInfo MLogManager *LogMgr
FriendMgr *FriendMgr SeverInfo *ServerInfo
RankMgr *RankMgr FriendMgr *FriendMgr
MailMgr *MailMgr RankMgr *RankMgr
MailMgr *MailMgr
ChampshipMgr *ChampshipMgr
} }
type ServerInfo struct { type ServerInfo struct {
@ -356,6 +358,26 @@ func (ad *GameLogic) MailMgrCall(m *MsgMod.Msg) interface{} {
return result return result
} }
// 锦标赛管理器
func (ad *GameLogic) CreateChampshipMgr() {
ad.ChampshipMgr = &ChampshipMgr{
ServerMod: new(ServerMod),
}
ad.ChampshipMgr.Init()
}
func (ad *GameLogic) ChampshipMgrSend(m *MsgMod.Msg) {
ad.ChampshipMgr.Send(m)
}
func (ad *GameLogic) ChampshipMgrCall(m *MsgMod.Msg) interface{} {
result, err := ad.ChampshipMgr.Call(m)
if err != nil {
return nil
}
return result
}
func (ad *GameLogic) GetSimplePlayerByUid(Id int) *PlayerSimpleData { func (ad *GameLogic) GetSimplePlayerByUid(Id int) *PlayerSimpleData {
Idstr := strconv.Itoa(Id) Idstr := strconv.Itoa(Id)
Value, _ := db.RedisGetKey(Idstr) Value, _ := db.RedisGetKey(Idstr)
@ -363,7 +385,10 @@ func (ad *GameLogic) GetSimplePlayerByUid(Id int) *PlayerSimpleData {
player.Uid = Id player.Uid = Id
if Value == "" { if Value == "" {
p := new(Player) p := new(Player)
p.GetSimpleData(Id, player) err := p.GetSimpleData(Id, player)
if err != nil {
return nil
}
value, _ := json.Marshal(player) value, _ := json.Marshal(player)
db.RedisSetKey(Idstr, string(value), 300) db.RedisSetKey(Idstr, string(value), 300)
} else { } else {
@ -430,6 +455,7 @@ func G_getGameLogic() *GameLogic {
G_GameLogicPtr.CreateFriendMgr() //创建好友管理器 G_GameLogicPtr.CreateFriendMgr() //创建好友管理器
G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器 G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器
G_GameLogicPtr.CreateMailMgr() //创建邮件管理器 G_GameLogicPtr.CreateMailMgr() //创建邮件管理器
G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器
ClusterMgrInit() //初始化集群 ClusterMgrInit() //初始化集群
// G_GameLogicPtr.CreateHttpManager() // G_GameLogicPtr.CreateHttpManager()
@ -972,6 +998,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqFastProduceReward", ReqFastProduceReward) RegisterMsgProcessFunc("ReqFastProduceReward", ReqFastProduceReward)
//场景转盘 //场景转盘
RegisterMsgProcessFunc("ReqLimitSenceReward", ReqLimitSenceReward) RegisterMsgProcessFunc("ReqLimitSenceReward", ReqLimitSenceReward)
//领取限时事件进度奖励
// 好友 // 好友
RegisterMsgProcessFunc("ReqFriendList", ReqFriendList) // 请求好友列表 RegisterMsgProcessFunc("ReqFriendList", ReqFriendList) // 请求好友列表
@ -984,7 +1011,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqApplyFriend", ReqApplyFriend) // 申请好友 RegisterMsgProcessFunc("ReqApplyFriend", ReqApplyFriend) // 申请好友
RegisterMsgProcessFunc("ReqAgreeFriend", ReqAgreeFriend) // 同意申请 RegisterMsgProcessFunc("ReqAgreeFriend", ReqAgreeFriend) // 同意申请
RegisterMsgProcessFunc("ReqRefuseFriend", ReqRefuseFriend) // 拒绝申请 RegisterMsgProcessFunc("ReqRefuseFriend", ReqRefuseFriend) // 拒绝申请
RegisterMsgProcessFunc("ReqDeleteFriend", ReqDeleteFriend) // 删除好友 RegisterMsgProcessFunc("ReqDelFriend", ReqDelFriend) // 删除好友
// 榜单 // 榜单
RegisterMsgProcessFunc("ReqRank", ReqRank) // 请求榜单数据 RegisterMsgProcessFunc("ReqRank", ReqRank) // 请求榜单数据
@ -1010,6 +1037,8 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
// 锦标赛 // 锦标赛
RegisterMsgProcessFunc("ReqChampshipReward", ReqChampshipReward) // 领取锦标赛奖励 RegisterMsgProcessFunc("ReqChampshipReward", ReqChampshipReward) // 领取锦标赛奖励
RegisterMsgProcessFunc("ReqChampshipRankReward", ReqChampshipRankReward) // 领取锦标赛排行榜奖励 RegisterMsgProcessFunc("ReqChampshipRankReward", ReqChampshipRankReward) // 领取锦标赛排行榜奖励
RegisterMsgProcessFunc("ReqChampshipRank", ReqChampshipRank) // 请求锦标赛排行榜
RegisterMsgProcessFunc("ReqChampshipPreRank", ReqChampshipPreRank) // 请求锦标赛昨日排行榜
} }
@ -1175,6 +1204,14 @@ func (ad *GameLogic) NotifyAll(m *MsgMod.Msg) {
} }
} }
func NotifyPlayer(Uid int, m *MsgMod.Msg) {
p := G_GameLogicPtr.GetPlayerByUid(Uid)
if p == nil || p.stop {
return
}
p.SendMsg(m)
}
func setRedisLock(key, value string, Duration time.Duration) bool { func setRedisLock(key, value string, Duration time.Duration) bool {
return db.RedisLock(key, "", Duration) return db.RedisLock(key, "", Duration)
} }

View File

@ -3,6 +3,7 @@ package game
import ( import (
"server/game/mod/card" "server/game/mod/card"
"server/game/mod/item" "server/game/mod/item"
MsgMod "server/game/mod/msg"
"server/msg" "server/msg"
"strconv" "strconv"
"strings" "strings"
@ -70,7 +71,15 @@ func ReqGmCommand(args []interface{}) error {
CardMod.AddCard(3) CardMod.AddCard(3)
FriendMod := player.PlayMod.getFriendMod() FriendMod := player.PlayMod.getFriendMod()
FriendMod.Card = make(map[string]*card.CardInfo) FriendMod.Card = make(map[string]*card.CardInfo)
case "champshipGroup":
G_GameLogicPtr.ChampshipMgrSend(&MsgMod.Msg{
Type: MsgMod.HANDLE_TYPE_CHAMPSHIP_GROUP,
})
case "champshipZero":
G_GameLogicPtr.ChampshipMgrSend(&MsgMod.Msg{
Type: MsgMod.HANDLE_TYPE_CHAMPSHIP_ZERO,
})
} }
return nil return nil
} }

View File

@ -4,6 +4,8 @@ import (
// "server/GoUtil" // "server/GoUtil"
// "server/MergeConst" // "server/MergeConst"
"context"
"database/sql"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
@ -416,10 +418,18 @@ func (p *Player) ClearData() {
func (p *Player) AutoSaveData() { func (p *Player) AutoSaveData() {
//保存数据 //保存数据
ctx := context.Background()
txOptions := &sql.TxOptions{}
tx, err := db.SqlDb.BeginTx(ctx, txOptions)
if err != nil {
log.Debug("AutoSaveData BeginTx failed:", err)
return
}
for _, v := range p.playerdata { for _, v := range p.playerdata {
v.SaveDataFromDB("") v.SaveDataFromDB("")
} }
p.PlayMod.ClearData(p) p.PlayMod.ClearData(p)
tx.Commit()
} }
// 重新连接 // 重新连接
@ -575,15 +585,8 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
Lable: Label, Lable: Label,
}) })
} }
NotifyCard := &msg.ResNotifyCard{} CardMod := p.PlayMod.getCardMod()
NotifyCard.Card = make(map[int32]int32) p.PushClientRes(CardMod.NotifyCard())
for _, v := range ResCard {
for _, c := range v.Card {
NotifyCard.Card[c]++
}
}
p.PushClientRes(NotifyCard)
if is_update { if is_update {
p.PushClientRes(p.GetPlayerBaseMod().BackAsset()) p.PushClientRes(p.GetPlayerBaseMod().BackAsset())
@ -609,7 +612,7 @@ func (p *Player) LoginBackData() {
p.PushClientRes(p.PlayMod.mod_list.PiggyBank.BackData()) p.PushClientRes(p.PlayMod.mod_list.PiggyBank.BackData())
p.PushClientRes(p.GetPlayerBaseMod().BackAsset()) p.PushClientRes(p.GetPlayerBaseMod().BackAsset())
p.PushClientRes(p.GetPlayerBaseMod().BackKv()) p.PushClientRes(p.GetPlayerBaseMod().BackKv())
MyRank := G_GameLogicPtr.RankMgr.getMyRank(RANK_TYPE_CHAMPSHIP, int(p.M_DwUin)) MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(p.M_DwUin))
p.PushClientRes(p.PlayMod.mod_list.Champship.BackData(MyRank)) p.PushClientRes(p.PlayMod.mod_list.Champship.BackData(MyRank))
BackUserInfo(p) BackUserInfo(p)
} }
@ -662,6 +665,7 @@ func (p *Player) UpdateUserInfo() {
Base := p.GetPlayerBaseMod() Base := p.GetPlayerBaseMod()
simple.Name = p.GetPlayerBaseMod().GetName() simple.Name = p.GetPlayerBaseMod().GetName()
simple.Avatar = p.PlayMod.getAvatarMod().SetId simple.Avatar = p.PlayMod.getAvatarMod().SetId
simple.Uid = int(p.M_DwUin)
simple.Face = p.PlayMod.getFaceMod().SetId simple.Face = p.PlayMod.getFaceMod().SetId
simple.Level = p.GetPlayerBaseMod().GetLevel() simple.Level = p.GetPlayerBaseMod().GetLevel()
simple.Decorate = p.PlayMod.getDecorateMod().DecorateNum simple.Decorate = p.PlayMod.getDecorateMod().DecorateNum
@ -696,13 +700,14 @@ func (p *Player) HandleInChampshipRank() {
Score := float64(ChampshipMod.GetScore()) Score := float64(ChampshipMod.GetScore())
// 更新排行榜 // 更新排行榜
m := &MsgMod.Msg{ m := &MsgMod.Msg{
Type: MsgMod.HANDLE_TYPE_RANK, Type: MsgMod.HANDLE_TYPE_CHAMPSHIP_INRANK,
SendT: GoUtil.Now(), SendT: GoUtil.Now(),
Extra: RankMsg{ Extra: CRank{
Uid: int(p.M_DwUin), Uid: int(p.M_DwUin),
Score: Score, Score: Score,
RankType: RANK_TYPE_CHAMPSHIP, H: ChampshipMod.GetH(),
N: ChampshipMod.GetN(),
}, },
} }
G_GameLogicPtr.RankMgrSend(m) G_GameLogicPtr.ChampshipMgrSend(m)
} }

View File

@ -4,6 +4,7 @@ import (
"bytes" "bytes"
"encoding/gob" "encoding/gob"
"errors" "errors"
"fmt"
"server/GoUtil" "server/GoUtil"
"server/MergeConst" "server/MergeConst"
userCfg "server/conf/user" userCfg "server/conf/user"
@ -204,7 +205,6 @@ func (p *PlayerBaseData) SetChampshipID(ChampshipsGroupID int32, isNotify bool)
} }
p.SaveDataFromDB("")
} }
func (p *PlayerBaseData) Notify_Daily_Renew(param []interface{}) { func (p *PlayerBaseData) Notify_Daily_Renew(param []interface{}) {
@ -217,7 +217,7 @@ func (p *PlayerBaseData) Notify_Daily_Renew(param []interface{}) {
agent := p.GetPlayer().GetAgentByPlayer() agent := p.GetPlayer().GetAgentByPlayer()
data, _ := proto.Marshal(notify) data, _ := proto.Marshal(notify)
G_getGameLogic().PackResInfo(agent, "NotifyRenewBuyEnergyCnt", data) G_getGameLogic().PackResInfo(agent, "NotifyRenewBuyEnergyCnt", data)
p.SaveDataFromDB("")
} }
func (p *PlayerBaseData) SaveDataFromDB(Key interface{}) bool { func (p *PlayerBaseData) SaveDataFromDB(Key interface{}) bool {
@ -252,6 +252,7 @@ func (p *PlayerBaseData) SaveDataFromDB(Key interface{}) bool {
var buf bytes.Buffer var buf bytes.Buffer
encode := gob.NewEncoder(&buf) encode := gob.NewEncoder(&buf)
encode.Encode(p.KeyValueData) encode.Encode(p.KeyValueData)
log.Debug("player :%d KeyValueData Save:%v ", p.Data.DwUin, p.KeyValueData)
db.SavePlayerClientData(&db.SqlModStruct{ db.SavePlayerClientData(&db.SqlModStruct{
DwUin: p.Data.DwUin, DwUin: p.Data.DwUin,
ModData: buf.Bytes(), ModData: buf.Bytes(),
@ -327,7 +328,7 @@ func (p *PlayerBaseData) UpdateBaseItemInfo(update *msg.UpdateBaseItemInfo) {
p.Data.LastPlayTime = v p.Data.LastPlayTime = v
} }
} }
p.SaveDataFromDB("")
} }
func (p *PlayerBaseData) ReqRemoveAd(buf []byte) { func (p *PlayerBaseData) ReqRemoveAd(buf []byte) {
@ -337,7 +338,6 @@ func (p *PlayerBaseData) ReqRemoveAd(buf []byte) {
p.Data.NoAd = 1 p.Data.NoAd = 1
res.ResultCode = 0 res.ResultCode = 0
p.SaveDataFromDB("")
agent := p.GetPlayer().GetAgentByPlayer() agent := p.GetPlayer().GetAgentByPlayer()
data, _ := proto.Marshal(res) data, _ := proto.Marshal(res)
@ -387,7 +387,7 @@ func (p *PlayerBaseData) ReqBindFacebookAccount(buf []byte) {
res.ResultCode = 0 res.ResultCode = 0
p.Data.FaceBookId = req.BindAccountId p.Data.FaceBookId = req.BindAccountId
res.BindAccountId = req.BindAccountId res.BindAccountId = req.BindAccountId
p.SaveDataFromDB("")
} }
agent := p.GetPlayer().GetAgentByPlayer() agent := p.GetPlayer().GetAgentByPlayer()
@ -403,7 +403,6 @@ func (p *PlayerBaseData) ReqUnBindFacebook(buf []byte) {
res.ResultCode = 0 res.ResultCode = 0
res.BindAccountId = req.BindAccountId res.BindAccountId = req.BindAccountId
p.Data.FaceBookId = "" p.Data.FaceBookId = ""
p.SaveDataFromDB("")
agent := p.GetPlayer().GetAgentByPlayer() agent := p.GetPlayer().GetAgentByPlayer()
data, _ := proto.Marshal(res) data, _ := proto.Marshal(res)
@ -432,13 +431,13 @@ func (p *PlayerBaseData) ReqOnlyBindFacebook(buf []byte) {
res.ResultCode = 0 res.ResultCode = 0
p.Data.FaceBookId = req.BindAccountId p.Data.FaceBookId = req.BindAccountId
res.BindAccountId = req.BindAccountId res.BindAccountId = req.BindAccountId
p.SaveDataFromDB("")
} }
} else { } else {
res.ResultCode = 0 res.ResultCode = 0
p.Data.FaceBookId = req.BindAccountId p.Data.FaceBookId = req.BindAccountId
res.BindAccountId = req.BindAccountId res.BindAccountId = req.BindAccountId
p.SaveDataFromDB("")
} }
agent := p.GetPlayer().GetAgentByPlayer() agent := p.GetPlayer().GetAgentByPlayer()
@ -447,91 +446,11 @@ func (p *PlayerBaseData) ReqOnlyBindFacebook(buf []byte) {
} }
func (p *PlayerBaseData) ReqSynGameData(buf []byte) { func (p *PlayerBaseData) ReqSynGameData(buf []byte) {
req := &msg.ReqSynGameData{}
res := &msg.ResSynGameData{}
proto.Unmarshal(buf, req)
sqlStr := "SELECT * FROM t_player_baseinfo WHERE FaceBookId = ?"
sqlStruck := db.ResPlayerBaseInfo{}
isHaveOther := false
if err := db.SqlDb.Get(&sqlStruck, sqlStr, req.NewFBId); err != nil {
isHaveOther = false
} else {
isHaveOther = true
}
if sqlStruck.DwUin == p.M_Player.M_DwUin {
return
}
if OldPlayer, ok := G_GameLogicPtr.M_Players[sqlStruck.DwUin]; ok {
agent := OldPlayer.GetAgentByPlayer()
// notify := &msg.ForceKickOut{}
notify := &msg.ResSynGameData{}
data, _ := proto.Marshal(notify)
if agent != nil {
G_getGameLogic().PackResInfo(agent, "ResSynGameData", data)
}
OldPlayer.ClearData()
delete(G_GameLogicPtr.M_Players, sqlStruck.DwUin)
} else {
player := G_GameLogicPtr.FindOfflinePlayer(sqlStruck.DwUin)
if player != nil {
timer1 := G_GameLogicPtr.MReadyToRemoveList[player]
timer1.Disabled()
G_GameLogicPtr.Mdispatr.ChanTimer <- timer1
timer1.Stop()
delete(G_GameLogicPtr.MReadyToRemoveList, player)
}
}
if isHaveOther {
if sqlStruck.DwUin == p.Data.DwUin {
res.ResultCode = MergeConst.Protocol_FaceBook_Binded
} else {
ReplaceName := sqlStruck.UserName
UserName := p.Data.UserName
res.ResultCode = 0
sqlStr1 := "SELECT * FROM t_account WHERE user_name = ?"
sqlAccStruck1 := db.Db_Account{}
if err2 := db.SqlDb.Get(&sqlAccStruck1, sqlStr1, UserName); err2 != nil {
} else {
sqlAccStruck1.UserName = ""
db.FormatAllMemUpdateDb(&sqlAccStruck1, "t_account", "auto_id")
}
p.Data.UserName = ""
p.SaveDataFromDB("")
sqlStruck.FaceBookId = req.NewFBId
sqlStruck.UserName = UserName
db.FormatAllMemUpdateDb(&sqlStruck, "t_player_baseinfo", "dwUin")
sqlStr := "SELECT * FROM t_account WHERE user_name = ?"
sqlAccStruck := db.Db_Account{}
if err2 := db.SqlDb.Get(&sqlAccStruck, sqlStr, ReplaceName); err2 != nil {
} else {
sqlAccStruck.UserName = UserName
db.FormatAllMemUpdateDb(&sqlAccStruck, "t_account", "auto_id")
}
}
} else {
res.ResultCode = 0
}
agent := p.GetPlayer().GetAgentByPlayer()
data, _ := proto.Marshal(res)
G_getGameLogic().PackResInfo(agent, "ResSynGameData", data)
} }
func (p *PlayerBaseData) ClearData() bool { func (p *PlayerBaseData) ClearData() bool {
p.Data.LogoutTime = int32(time.Now().Unix()) p.Data.LogoutTime = int32(time.Now().Unix())
p.SaveDataFromDB("")
GoUtil.RemoveEvent(MergeConst.Notify_Daily_Renew, p.Notify_Daily_Renew, p) GoUtil.RemoveEvent(MergeConst.Notify_Daily_Renew, p.Notify_Daily_Renew, p)
p.McronSave.Remove(p.McronSaveID) p.McronSave.Remove(p.McronSaveID)
p.McronSave.Stop() p.McronSave.Stop()
@ -543,6 +462,8 @@ func (p *PlayerBaseData) ClearData() bool {
p.MTicker.Stop() p.MTicker.Stop()
p.MTicker = nil p.MTicker = nil
} }
fmt.Print("ClearData:", p.Data.DwUin)
p.SaveDataFromDB("")
return true return true
} }

View File

@ -178,7 +178,7 @@ func (p *PlayerChessData) UpdatePlayerChessData(buf []byte) error {
p.M_Player.SendErrClienRes(res) p.M_Player.SendErrClienRes(res)
return fmt.Errorf("棋子数据不一致") return fmt.Errorf("棋子数据不一致")
} }
p.SaveDataFromDB("")
return nil return nil
} }
@ -319,7 +319,6 @@ func (p *PlayerChessData) UpdateChessColorData(buf []byte) {
} }
p.ColorData.MChessColorData = update.MChessColorData p.ColorData.MChessColorData = update.MChessColorData
p.SaveDataFromDB("")
} }
func (p *PlayerChessData) GetChestKeyByValue(id int32) string { func (p *PlayerChessData) GetChestKeyByValue(id int32) string {
for k, v := range p.Data.MChessData { for k, v := range p.Data.MChessData {
@ -332,7 +331,6 @@ func (p *PlayerChessData) GetChestKeyByValue(id int32) string {
func (p *PlayerChessData) ClearData() bool { func (p *PlayerChessData) ClearData() bool {
p.SaveDataFromDB("") p.SaveDataFromDB("")
return true return true
} }

View File

@ -119,9 +119,7 @@ func handle(p *Player, m *msg.Msg) error {
CardMod.AddExTimes() CardMod.AddExTimes()
CardMod.AddCard(CardInfo.CardId) CardMod.AddCard(CardInfo.CardId)
CardMod.DelExCard(CardInfo) CardMod.DelExCard(CardInfo)
p.PushClientRes(&proto.ResNotifyCard{ p.PushClientRes(CardMod.NotifyCard())
Card: map[int32]int32{int32(CardInfo.CardId): 1},
})
p.PlayMod.save() p.PlayMod.save()
case msg.HANDLE_TYPE_REFUSE_EX_CARD: // B收到A拒绝置换卡牌 case msg.HANDLE_TYPE_REFUSE_EX_CARD: // B收到A拒绝置换卡牌
CardMod := p.PlayMod.getCardMod() CardMod := p.PlayMod.getCardMod()
@ -130,9 +128,10 @@ func handle(p *Player, m *msg.Msg) error {
FriendMod := p.PlayMod.getFriendMod() FriendMod := p.PlayMod.getFriendMod()
FriendMod.DelCardInfo(CardInfo.Id) FriendMod.DelCardInfo(CardInfo.Id)
p.PlayMod.save() p.PlayMod.save()
p.PushClientRes(&proto.ResNotifyCard{ p.PushClientRes(CardMod.NotifyCard())
Card: map[int32]int32{int32(CardInfo.ExId): 1}, case msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY: // 锦标赛排名变动通知
}) MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(p.M_DwUin))
p.PushClientRes(p.PlayMod.getChampshipMod().BackData(MyRank))
case msg.HANDLE_TYPE_MAIL: // 邮件操作 case msg.HANDLE_TYPE_MAIL: // 邮件操作
MailMod := p.PlayMod.getMailMod() MailMod := p.PlayMod.getMailMod()
if m.Extra == nil { if m.Extra == nil {
@ -169,9 +168,6 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error {
FriendMod.HandleMsg(m) FriendMod.HandleMsg(m)
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From) PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
switch m.Type { switch m.Type {
case msg.HANDLE_TYPE_RANK_NOTIFY: // 排行榜更新
MyRank := G_GameLogicPtr.RankMgr.getMyRank(RANK_TYPE_CHAMPSHIP, int(p.M_DwUin))
p.PushClientRes(p.PlayMod.getChampshipMod().BackData(MyRank))
case msg.HANDLE_TYPE_APPLY: // 好友申请 case msg.HANDLE_TYPE_APPLY: // 好友申请
FriendMod.AddFriendApply(m.From) FriendMod.AddFriendApply(m.From)
p.PushClientRes(&proto.ResFriendApplyNotify{ p.PushClientRes(&proto.ResFriendApplyNotify{

View File

@ -115,14 +115,13 @@ func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
data := m.Extra.(RankMsg) data := m.Extra.(RankMsg)
rankList := r.getRank(data.RankType) rankList := r.getRank(data.RankType)
inRank := false inRank := false
MyRank := 0 for _, v := range rankList {
for k, v := range rankList {
if v.Uid == data.Uid { if v.Uid == data.Uid {
if v.Score < data.Score { if v.Score < data.Score {
v.Score = data.Score v.Score = data.Score
v.Time = m.SendT v.Time = m.SendT
inRank = true inRank = true
MyRank = k + 1 break
} }
return nil, nil return nil, nil
} }
@ -139,16 +138,7 @@ func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
} }
return false return false
}) })
for k, v := range rankList {
if v.Uid == data.Uid {
if MyRank != k+1 {
Notify(data.Uid, &msg.Msg{
Type: msg.HANDLE_TYPE_RANK_NOTIFY,
})
}
break
}
}
// if len(rankList) >= 100 { // if len(rankList) >= 100 {
// rankList = rankList[:100] // rankList = rankList[:100]
// } // }
@ -160,11 +150,3 @@ func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
r.update = true r.update = true
return nil, nil return nil, nil
} }
func Notify(Uid int, m *msg.Msg) {
p := G_GameLogicPtr.GetPlayerByUid(Uid)
if p == nil || p.stop {
return
}
p.SendMsg(m)
}

View File

@ -2026,13 +2026,14 @@ func ReqRewardOrder(args []interface{}) error {
// 限时事件增加进度 // 限时事件增加进度
LimitedTimeEventMod.AddProgress(player.GetPlayerBaseMod().GetLevel()) LimitedTimeEventMod.AddProgress(player.GetPlayerBaseMod().GetLevel())
MyRank := G_GameLogicPtr.RankMgr.getMyRank(RANK_TYPE_CHAMPSHIP, int(player.M_DwUin)) MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(player.M_DwUin))
player.HandleInChampshipRank() player.HandleInChampshipRank()
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(PiggyBankMod.BackData()) player.PushClientRes(PiggyBankMod.BackData())
player.PushClientRes(OrderMod.BackData()) player.PushClientRes(OrderMod.BackData())
player.PushClientRes(ChampshipMod.BackData(MyRank)) player.PushClientRes(ChampshipMod.BackData(MyRank))
player.PushClientRes(LimitedTimeEventMod.BackData()) player.PushClientRes(LimitedTimeEventMod.BackData())
player.PushClientRes(LimitedTimeEventMod.ProgressBackData())
return nil return nil
} }
@ -2738,41 +2739,31 @@ func ReqSearchPlayer(args []interface{}) error {
req := &msg.ReqSearchPlayer{} req := &msg.ReqSearchPlayer{}
proto.Unmarshal(buf, req) proto.Unmarshal(buf, req)
Uid, err := strconv.Atoi(req.Uid) Uid, err := strconv.Atoi(req.Uid)
SearchPlayers := make([]*PlayerSimpleData, 0) list := make([]*msg.ResPlayerSimple, 0)
if err == nil { if err == nil {
SearchPlayer := G_GameLogicPtr.GetSimplePlayerByUid(Uid) SearchPlayer := G_GameLogicPtr.GetResSimplePlayerByUid(Uid)
if SearchPlayer != nil { if SearchPlayer != nil {
SearchPlayers = append(SearchPlayers, SearchPlayer) list = append(list, SearchPlayer)
} }
} }
data, err := db.SearchPlayer(req.Uid) data, err := db.SearchPlayer(req.Uid)
if err == nil { if err != nil {
for _, v := range data { player.SendErrClienRes(&msg.ResSearchPlayer{
SearchPlayer := G_GameLogicPtr.GetSimplePlayerByUid(int(v.DwUin)) Code: 0,
SearchPlayers = append(SearchPlayers, SearchPlayer)
}
}
if len(SearchPlayers) == 0 {
player.PushClientRes(&msg.ResSearchPlayer{
Code: MergeConst.Protocol_AddFriend_Is_NoExsit,
}) })
return fmt.Errorf("player not found")
} }
list := make([]*msg.ResPlayerSimple, 0) for _, v := range data {
for _, v := range SearchPlayers { if player.M_DwUin == v.DwUin {
if player.PlayMod.getFriendMod().CheckFriend(v.Uid) {
continue continue
} }
if player.PlayMod.getFriendMod().CheckApply(v.Uid) { if player.PlayMod.getFriendMod().CheckFriend(int(v.DwUin)) {
continue continue
} }
list = append(list, &msg.ResPlayerSimple{ if player.PlayMod.getFriendMod().CheckApply(int(v.DwUin)) {
Uid: int32(v.Uid), continue
Name: v.Name, }
Avatar: int32(v.Avatar), SearchPlayer := G_GameLogicPtr.GetResSimplePlayerByUid(int(v.DwUin))
Level: int32(v.Level), list = append(list, SearchPlayer)
Face: int32(v.Face),
})
} }
player.PushClientRes(&msg.ResSearchPlayer{ player.PushClientRes(&msg.ResSearchPlayer{
@ -2824,15 +2815,17 @@ func ReqAgreeFriend(args []interface{}) error {
G_GameLogicPtr.FriendMgrSend(m) G_GameLogicPtr.FriendMgrSend(m)
FriendMod.AddFriend(Uid) FriendMod.AddFriend(Uid)
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResApplyFriend{ player.PushClientRes(&msg.ResAgreeFriend{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
Uid: req.Uid,
Player: G_GameLogicPtr.GetResSimplePlayerByUid(int(req.Uid)),
}) })
FriendApplyBackData(player) FriendApplyBackData(player)
return nil return nil
} }
// 删除好友 // 删除好友
func ReqDeleteFriend(args []interface{}) error { func ReqDelFriend(args []interface{}) error {
_, player, buf := ParseArgs(args) _, player, buf := ParseArgs(args)
req := &msg.ReqDelFriend{} req := &msg.ReqDelFriend{}
proto.Unmarshal(buf, req) proto.Unmarshal(buf, req)
@ -2849,6 +2842,7 @@ func ReqDeleteFriend(args []interface{}) error {
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResDelFriend{ player.PushClientRes(&msg.ResDelFriend{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
Uid: req.Uid,
}) })
FriendListBackData(player) FriendListBackData(player)
return nil return nil
@ -2865,6 +2859,7 @@ func ReqRefuseFriend(args []interface{}) error {
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResRefuseFriend{ player.PushClientRes(&msg.ResRefuseFriend{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
Uid: req.Uid,
}) })
m := &MsqMod.Msg{ m := &MsqMod.Msg{
Type: MsqMod.HANDLE_TYPE_DEL, Type: MsqMod.HANDLE_TYPE_DEL,
@ -2998,9 +2993,7 @@ func ReqAgreeCardGive(args []interface{}) error {
Extra: CardInfo, Extra: CardInfo,
} }
FriendMgrSend(m) FriendMgrSend(m)
player.PushClientRes(&msg.ResNotifyCard{ player.PushClientRes(CardMod.NotifyCard())
Card: map[int32]int32{int32(CardInfo.CardId): -1},
})
player.PushClientRes(&msg.ResAgreeCardGive{ player.PushClientRes(&msg.ResAgreeCardGive{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
@ -3065,9 +3058,7 @@ func ReqCardSend(args []interface{}) error {
player.PushClientRes(&msg.ResCardSend{ player.PushClientRes(&msg.ResCardSend{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
player.PushClientRes(&msg.ResNotifyCard{ player.PushClientRes(CardMod.NotifyCard())
Card: map[int32]int32{int32(CardInfo.CardId): -1},
})
player.PlayMod.save() player.PlayMod.save()
FriendMgrSend(m) FriendMgrSend(m)
return nil return nil
@ -3101,9 +3092,7 @@ func ReqCardExchange(args []interface{}) error {
player.PushClientRes(&msg.ResCardExchange{ player.PushClientRes(&msg.ResCardExchange{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
player.PushClientRes(&msg.ResNotifyCard{ player.PushClientRes(CardMod.NotifyCard())
Card: map[int32]int32{int32(CardInfo.CardId): -1},
})
player.PlayMod.save() player.PlayMod.save()
FriendMgrSend(m) FriendMgrSend(m)
return nil return nil
@ -3148,9 +3137,7 @@ func ReqSelectCardExchange(args []interface{}) error {
player.PushClientRes(&msg.ResSelectCardExchange{ player.PushClientRes(&msg.ResSelectCardExchange{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
player.PushClientRes(&msg.ResNotifyCard{ player.PushClientRes(CardMod.NotifyCard())
Card: map[int32]int32{int32(CardId): -1},
})
m := &MsqMod.Msg{ m := &MsqMod.Msg{
Type: MsqMod.HANDLE_TYPE_SELECT_EX_CARD, Type: MsqMod.HANDLE_TYPE_SELECT_EX_CARD,
From: int(player.M_DwUin), From: int(player.M_DwUin),
@ -3193,9 +3180,7 @@ func ReqAgreeCardExchange(args []interface{}) error {
To: CardInfo.BUid, To: CardInfo.BUid,
Extra: CardInfo, Extra: CardInfo,
} }
player.PushClientRes(&msg.ResNotifyCard{ player.PushClientRes(CardMod.NotifyCard())
Card: map[int32]int32{int32(CardInfo.ExId): 1},
})
FriendMgrSend(m) FriendMgrSend(m)
return nil return nil
} }
@ -3259,9 +3244,7 @@ func ReqRefuseCardExchange(args []interface{}) error {
To: CardInfo.BUid, To: CardInfo.BUid,
Extra: CardInfo, Extra: CardInfo,
} }
player.PushClientRes(&msg.ResNotifyCard{ player.PushClientRes(CardMod.NotifyCard())
Card: map[int32]int32{int32(CardInfo.CardId): 1},
})
FriendMgrSend(m) FriendMgrSend(m)
return nil return nil
} }
@ -3287,9 +3270,7 @@ func ReqGetFriendCard(args []interface{}) error {
player.PushClientRes(&msg.ResGetFriendCard{ player.PushClientRes(&msg.ResGetFriendCard{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
player.PushClientRes(&msg.ResNotifyCard{ player.PushClientRes(CardMod.NotifyCard())
Card: map[int32]int32{int32(CardInfo.CardId): 1},
})
return nil return nil
} }
@ -3315,21 +3296,22 @@ func ReqRank(args []interface{}) error {
return nil return nil
} }
// 请求昨日竞标赛榜单 // 请求竞标赛榜单
func ReqChampshipRank(args []interface{}) error { func ReqChampshipRank(args []interface{}) error {
_, player, buf := ParseArgs(args) _, player, buf := ParseArgs(args)
req := &msg.ReqRank{} req := &msg.ReqRank{}
proto.Unmarshal(buf, req) proto.Unmarshal(buf, req)
rankList := G_GameLogicPtr.RankMgr.getLastChampshipRank() m := G_GameLogicPtr.ChampshipMgr.GetRankMsg(int(player.M_DwUin))
res := make(map[int32]*msg.ResPlayerSimple) player.PushClientRes(m)
for k, rank := range rankList { return nil
res[int32(k+1)] = G_GameLogicPtr.GetResSimplePlayerByUid(rank.Uid) }
}
player.PushClientRes(&msg.ResRank{ func ReqChampshipPreRank(args []interface{}) error {
Type: req.Type, _, player, buf := ParseArgs(args)
RankList: res, req := &msg.ReqRank{}
}) proto.Unmarshal(buf, req)
m := G_GameLogicPtr.ChampshipMgr.GetPreRankMsg(int(player.M_DwUin))
player.PushClientRes(m)
return nil return nil
} }
@ -3600,7 +3582,7 @@ func ReqChampshipReward(args []interface{}) error {
}) })
return err return err
} }
MyRank := G_GameLogicPtr.RankMgr.getMyRank(RANK_TYPE_CHAMPSHIP, int(player.M_DwUin)) MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(player.M_DwUin))
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(ChampshipMod.BackData(MyRank)) player.PushClientRes(ChampshipMod.BackData(MyRank))
player.PushClientRes(&msg.ResChampshipReward{ player.PushClientRes(&msg.ResChampshipReward{
@ -3666,19 +3648,16 @@ func ReqFriendRecommend(args []interface{}) error {
break break
} }
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid) PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
if v.Uid == int(player.M_DwUin) {
continue
}
if FriendMod.CheckFriend(v.Uid) { if FriendMod.CheckFriend(v.Uid) {
continue continue
} }
if FriendMod.CheckApply(v.Uid) { if FriendMod.CheckApply(v.Uid) {
continue continue
} }
RecommendList = append(RecommendList, &msg.ResPlayerSimple{ RecommendList = append(RecommendList, PlayerSimpleData)
Uid: int32(PlayerSimpleData.Uid),
Name: PlayerSimpleData.Name,
Avatar: int32(PlayerSimpleData.Avatar),
Level: int32(PlayerSimpleData.Level),
Face: int32(PlayerSimpleData.Face),
})
n++ n++
} }
player.PushClientRes(&msg.ResFriendRecommend{ player.PushClientRes(&msg.ResFriendRecommend{
@ -3714,9 +3693,9 @@ func ReqFriendTimeLine(args []interface{}) error {
func ReqChampshipRankReward(args []interface{}) error { func ReqChampshipRankReward(args []interface{}) error {
_, player, _ := ParseArgs(args) _, player, _ := ParseArgs(args)
MyRank := G_GameLogicPtr.RankMgr.getLastChampship(int(player.M_DwUin)) MyLastRank := G_GameLogicPtr.ChampshipMgr.getLastMyRank(int(player.M_DwUin))
ChampshipMod := player.PlayMod.getChampshipMod() ChampshipMod := player.PlayMod.getChampshipMod()
itemList, err := ChampshipMod.GetRankReward(MyRank) itemList, err := ChampshipMod.GetRankReward(MyLastRank)
if err != nil { if err != nil {
player.SendErrClienRes(&msg.ResChampshipRankReward{ player.SendErrClienRes(&msg.ResChampshipRankReward{
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
@ -3733,6 +3712,7 @@ func ReqChampshipRankReward(args []interface{}) error {
return err return err
} }
player.PlayMod.save() player.PlayMod.save()
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(player.M_DwUin))
player.PushClientRes(ChampshipMod.BackData(MyRank)) player.PushClientRes(ChampshipMod.BackData(MyRank))
player.PushClientRes(&msg.ResChampshipRankReward{ player.PushClientRes(&msg.ResChampshipRankReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
@ -3776,10 +3756,10 @@ func ReqMasterCard(args []interface{}) error {
} }
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(&msg.ResMasterCard{ player.PushClientRes(&msg.ResMasterCard{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) MasterId: req.Id,
player.PushClientRes(&msg.ResNotifyCard{ CardId: req.CardId,
Card: map[int32]int32{int32(req.CardId): 1},
}) })
player.PushClientRes(CardMod.NotifyCard())
return nil return nil
} }

View File

@ -16,7 +16,7 @@ const (
RANK_MGR_KEY = "RANK_MGR" RANK_MGR_KEY = "RANK_MGR"
MAIL_MGR_KEY = "MAIL_MGR" MAIL_MGR_KEY = "MAIL_MGR"
CHAMPSHIP_MGR_KEY = "CHAMPSHIP_MGR" CHAMPSHIP_MGR_KEY = "CHAMPSHIP_MGR"
PER_SAVE_TIME = 1 PER_SAVE_TIME = 60
) )
type ServerMod struct { type ServerMod struct {
@ -38,7 +38,7 @@ func (s *ServerMod) init() {
s.handler = make(map[int]interface{}) s.handler = make(map[int]interface{})
s.update = false s.update = false
s.LoadData() s.LoadData()
s.mDispatr.AfterFunc(time.Duration(PER_SAVE_TIME), func() { s.mDispatr.AfterFunc(time.Duration(PER_SAVE_TIME)*time.Second, func() {
s.SaveData() s.SaveData()
}) })
go func() { go func() {
@ -48,6 +48,7 @@ func (s *ServerMod) init() {
s.lock.Unlock() s.lock.Unlock()
} }
}() }()
for { for {
select { select {
case msg := <-s.msgChan: case msg := <-s.msgChan:
@ -61,6 +62,7 @@ func (s *ServerMod) init() {
} }
} }
}() }()
} }
// 处理消息 // 处理消息
@ -122,12 +124,9 @@ func (s *ServerMod) Call(m *msg.Msg) (interface{}, error) {
// mysql 保存消息 // mysql 保存消息
func (s *ServerMod) SaveData() { func (s *ServerMod) SaveData() {
s.mDispatr.AfterFunc(time.Duration(PER_SAVE_TIME+GoUtil.RandNum(5, 10)), func() { s.mDispatr.AfterFunc(time.Duration(PER_SAVE_TIME+GoUtil.RandNum(5, 10))*time.Second, func() {
s.SaveData() s.SaveData()
}) })
if !s.update {
return
}
DbData := db.SqlServerModStruct{} DbData := db.SqlServerModStruct{}
DbData.Key = s.key DbData.Key = s.key
DbData.UpdataTime = GoUtil.Now() DbData.UpdataTime = GoUtil.Now()
@ -140,7 +139,6 @@ func (s *ServerMod) SaveData() {
if err != nil { if err != nil {
log.Debug("SaveData sql exec ,Mod Key: %s err:%v", s.key, err) log.Debug("SaveData sql exec ,Mod Key: %s err:%v", s.key, err)
} }
} }
func (s *ServerMod) LoadData() { func (s *ServerMod) LoadData() {

View File

@ -20,6 +20,13 @@ type CardMod struct {
ReqTimes int //请求次数 ReqTimes int //请求次数
ReqFriend map[int]*CardInfo //今日已请求好友 ReqFriend map[int]*CardInfo //今日已请求好友
ExCard map[int]*CardInfo // 交换卡牌 ExCard map[int]*CardInfo // 交换卡牌
Cache Cache // 缓存卡牌
}
type Cache struct {
Card map[int]int
Master map[int]int
ExStar int
} }
const ( const (
@ -73,6 +80,12 @@ func (c *CardMod) InitData() {
if c.ExCard == nil { if c.ExCard == nil {
c.ExCard = make(map[int]*CardInfo) c.ExCard = make(map[int]*CardInfo)
} }
if c.Cache.Card == nil {
c.Cache.Card = make(map[int]int)
}
if c.Cache.Master == nil {
c.Cache.Master = make(map[int]int)
}
} }
func (c *CardMod) Login(ServerOpenTime int64) { func (c *CardMod) Login(ServerOpenTime int64) {
@ -101,10 +114,12 @@ func (c *CardMod) AddCard(Id int) {
if ok { if ok {
star := cardCfg.GetStarById(Id) star := cardCfg.GetStarById(Id)
c.ExchangeStar += star c.ExchangeStar += star
c.Cache.ExStar += star
c.CardList[Id]++ c.CardList[Id]++
} else { } else {
c.CardList[Id] = 1 c.CardList[Id] = 1
} }
c.Cache.Card[Id]++
} }
// 开启卡包 // 开启卡包
@ -215,6 +230,7 @@ func (c *CardMod) ExStarReward(Id int) ([]*item.Item, error) {
return nil, err return nil, err
} }
} }
c.Cache.ExStar -= CostStar
return itemList, nil return itemList, nil
} }
@ -247,6 +263,7 @@ func (c *CardMod) SubCard(id int) error {
count, ok := c.CardList[id] count, ok := c.CardList[id]
if ok && count > 0 { if ok && count > 0 {
c.CardList[id]-- c.CardList[id]--
c.Cache.Card[id]--
return nil return nil
} }
return fmt.Errorf("SubCard card not enough") return fmt.Errorf("SubCard card not enough")
@ -346,6 +363,7 @@ func (c *CardMod) DelExCard(CardInfo *CardInfo) {
} }
func (c *CardMod) AddMasterCard(Id int) { func (c *CardMod) AddMasterCard(Id int) {
c.Cache.Master[Id]++
c.AllCard[Id]++ c.AllCard[Id]++
} }
@ -357,6 +375,21 @@ func (c *CardMod) MasterCardEx(Id, CardId int) error {
return fmt.Errorf("MasterCardEx card type err") return fmt.Errorf("MasterCardEx card type err")
} }
c.AllCard[Id]-- c.AllCard[Id]--
c.AllCard[Id]--
c.AddCard(CardId) c.AddCard(CardId)
return nil return nil
} }
func (c *CardMod) NotifyCard() *msg.ResNotifyCard {
m := &msg.ResNotifyCard{
Card: GoUtil.MapIntToInt32(c.Cache.Card),
Master: GoUtil.MapIntToInt32(c.Cache.Master),
ExStar: int32(c.Cache.ExStar),
}
c.Cache = Cache{
Card: make(map[int]int),
Master: make(map[int]int),
ExStar: 0,
}
return m
}

View File

@ -13,11 +13,14 @@ type ChampshipMod struct {
Score int Score int
Reward int Reward int
RankReward bool RankReward bool
PreMax int // 昨日最高档
Max int // 历史最高档
} }
func (c *ChampshipMod) InitData() {} func (c *ChampshipMod) InitData() {}
func (c *ChampshipMod) ZeroUpdate() { func (c *ChampshipMod) ZeroUpdate() {
c.PreMax = c.Reward
c.Score = 0 c.Score = 0
c.Reward = 0 c.Reward = 0
c.RankReward = false c.RankReward = false
@ -48,6 +51,7 @@ func (c *ChampshipMod) AddScore(Chess []int) {
func (c *ChampshipMod) GetReward() []*item.Item { func (c *ChampshipMod) GetReward() []*item.Item {
Reward, Items := champshipCfg.GetReward(c.Reward, c.Score) Reward, Items := champshipCfg.GetReward(c.Reward, c.Score)
c.Reward = Reward c.Reward = Reward
c.Max = max(c.Max, c.Reward)
return Items return Items
} }
@ -60,3 +64,11 @@ func (c *ChampshipMod) BackData(MyRank int) *msg.ResChampship {
Rank: int32(MyRank), Rank: int32(MyRank),
} }
} }
func (c *ChampshipMod) GetH() int {
return c.PreMax
}
func (c *ChampshipMod) GetN() int {
return c.Max
}

View File

@ -24,6 +24,7 @@ func getTaskReward(Id, AreaId int) []*item.Item {
func randJackpot(jackpot map[int]dailyTaskCfg.Jackpot, num int) map[int][]*item.Item { func randJackpot(jackpot map[int]dailyTaskCfg.Jackpot, num int) map[int][]*item.Item {
Ids := GoUtil.GetMapKey(jackpot) Ids := GoUtil.GetMapKey(jackpot)
r := make(map[int][]*item.Item) r := make(map[int][]*item.Item)
t := 0
for { for {
Ids1 := GoUtil.RandSliceNum(Ids, num) Ids1 := GoUtil.RandSliceNum(Ids, num)
sort.Ints(Ids1) sort.Ints(Ids1)
@ -44,6 +45,9 @@ func randJackpot(jackpot map[int]dailyTaskCfg.Jackpot, num int) map[int][]*item.
} }
return r return r
} }
if t > 100 {
return r
}
} }
} }

View File

@ -43,6 +43,9 @@ const (
// 锦标赛 // 锦标赛
HANDLE_TYPE_CHAMPSHIP_GROUP = 301 //锦标赛分组操作 HANDLE_TYPE_CHAMPSHIP_GROUP = 301 //锦标赛分组操作
HANDLE_TYPE_CHAMPSHIP_INRANK = 302 //锦标赛入榜操作 HANDLE_TYPE_CHAMPSHIP_INRANK = 302 //锦标赛入榜操作
HANDLE_TYPE_CHAMPSHIP_AI = 303 //锦标赛入榜操作
HANDLE_TYPE_CHAMPSHIP_NOTIFY = 304 //锦标赛排名变动通知
HANDLE_TYPE_CHAMPSHIP_ZERO = 305 //锦标赛0点更新
//server mod handle //server mod handle
SERVER_ZERO_UPDATE = 1000 //zero update SERVER_ZERO_UPDATE = 1000 //zero update
) )

File diff suppressed because it is too large Load Diff