锦标赛优化
This commit is contained in:
parent
1e345f4ca1
commit
7655b2c96f
@ -4,6 +4,7 @@ import (
|
||||
"server/GoUtil"
|
||||
champshipCfg "server/conf/champship"
|
||||
"server/game/mod/msg"
|
||||
proto "server/msg"
|
||||
"sort"
|
||||
"time"
|
||||
)
|
||||
@ -20,10 +21,12 @@ type ChampshipData struct {
|
||||
AutoId int
|
||||
RobotId int
|
||||
Rank map[int][]*ChampshipRank // 锦标赛排行榜
|
||||
Last map[int][]*ChampshipRank // 锦标赛排行榜 备份
|
||||
PreRank map[int][]*ChampshipRank // 锦标赛排行榜 备份
|
||||
Pool map[int]*GroupInfo // 锦标赛未分配玩家
|
||||
GroupInfo map[int]int // 锦标赛分组信息
|
||||
PreGroupInfo map[int]int // 锦标赛分组信息 备份
|
||||
Robot map[int]*ChampshipRobot // 机器人
|
||||
PreRobot map[int]*ChampshipRobot // 机器人 备份
|
||||
}
|
||||
|
||||
type ChampshipRank struct {
|
||||
@ -43,6 +46,7 @@ type ChampshipRobot struct {
|
||||
GroupId int
|
||||
Time int64
|
||||
Score float64
|
||||
PerScore float64
|
||||
}
|
||||
|
||||
type GroupInfo struct {
|
||||
@ -64,38 +68,237 @@ func (c *ChampshipMgr) Init() {
|
||||
c.key = CHAMPSHIP_MGR_KEY
|
||||
c.data = &ChampshipData{
|
||||
Rank: make(map[int][]*ChampshipRank, 0),
|
||||
Last: make(map[int][]*ChampshipRank, 0),
|
||||
PreRank: make(map[int][]*ChampshipRank, 0),
|
||||
Pool: make(map[int]*GroupInfo, 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.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_GROUP, c.group)
|
||||
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()
|
||||
ZeroTime := GoUtil.ZeroTimestamp()
|
||||
Remain := max(Now-ZeroTime, 3000)
|
||||
Remain := Now - ZeroTime
|
||||
Remain1 := 1800 - Remain%1800
|
||||
|
||||
c.mDispatr.AfterFunc(time.Duration(Remain1), func() {
|
||||
c.mDispatr.AfterFunc(time.Duration(Remain1)*time.Second, func() {
|
||||
c.Send(&msg.Msg{
|
||||
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) {
|
||||
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().GroupInfo = make(map[int]int, 0)
|
||||
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
|
||||
}
|
||||
|
||||
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) {
|
||||
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()
|
||||
if len(ChampshipData.Pool) == 0 { // 未分配玩家池为空
|
||||
return nil, nil
|
||||
}
|
||||
g := make(map[int][]int, 0)
|
||||
for k, v := range ChampshipData.Pool {
|
||||
for k, v := range ChampshipData.Pool { // step 1:根据数值分配玩家
|
||||
x := 0
|
||||
n := champshipCfg.GetGroupId(v.N)
|
||||
h := champshipCfg.GetGroupId(v.H)
|
||||
@ -136,26 +339,26 @@ func (c *ChampshipMgr) group(m *msg.Msg) (interface{}, error) {
|
||||
}
|
||||
return false
|
||||
})
|
||||
if (j+1)/10 == 0 {
|
||||
if len(ChampshipData.Rank[ChampshipData.AutoId]) == 10 {
|
||||
ChampshipData.AutoId++
|
||||
}
|
||||
}
|
||||
for j := StartId; j <= ChampshipData.AutoId; j++ {
|
||||
for j := StartId; j <= ChampshipData.AutoId; j++ { // 填充机器人
|
||||
RobotNum := 30 - len(ChampshipData.Rank[j])
|
||||
RobotList := CreateRobotList(i, RobotNum, j)
|
||||
for _, v := range RobotList {
|
||||
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,
|
||||
Score: v.Score,
|
||||
Time: v.Time,
|
||||
Type: RANK_PLAYER_ROBOT,
|
||||
})
|
||||
sort.Slice(ChampshipData.Rank[ChampshipData.AutoId], func(i, j int) bool { // 排序 从大到小 数值相等按时间排序
|
||||
if ChampshipData.Rank[ChampshipData.AutoId][i].Score > ChampshipData.Rank[ChampshipData.AutoId][j].Score {
|
||||
sort.Slice(ChampshipData.Rank[j], func(x, y int) bool { // 排序 从大到小 数值相等按时间排序
|
||||
if ChampshipData.Rank[j][x].Score > ChampshipData.Rank[j][y].Score {
|
||||
return true
|
||||
} else if ChampshipData.Rank[ChampshipData.AutoId][i].Score == ChampshipData.Rank[ChampshipData.AutoId][j].Score {
|
||||
return ChampshipData.Rank[ChampshipData.AutoId][i].Time < ChampshipData.Rank[ChampshipData.AutoId][j].Time
|
||||
} else if ChampshipData.Rank[j][x].Score == ChampshipData.Rank[j][y].Score {
|
||||
return ChampshipData.Rank[j][x].Time < ChampshipData.Rank[j][y].Time
|
||||
}
|
||||
return false
|
||||
})
|
||||
@ -163,18 +366,18 @@ func (c *ChampshipMgr) group(m *msg.Msg) (interface{}, error) {
|
||||
}
|
||||
}
|
||||
}
|
||||
T := time.Now()
|
||||
H := T.Hour()
|
||||
if H != 0 {
|
||||
c.mDispatr.AfterFunc(time.Duration(1800), func() {
|
||||
c.Send(&msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP,
|
||||
})
|
||||
|
||||
for k := range ChampshipData.Pool { // 分组完成通知
|
||||
NotifyPlayer(k, &msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
})
|
||||
}
|
||||
c.getData().Pool = make(map[int]*GroupInfo) // 清空未分配池
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// 获取分组ID
|
||||
|
||||
func (c *ChampshipMgr) getGroupId(Uid int) int {
|
||||
ChampshipData := c.getData()
|
||||
GroupId, ok := ChampshipData.GroupInfo[Uid]
|
||||
@ -199,26 +402,87 @@ func (c *ChampshipMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
_, ok := ChampshipData.Rank[GroupId]
|
||||
RankList, ok := ChampshipData.Rank[GroupId]
|
||||
if !ok {
|
||||
ChampshipData.Rank[GroupId] = make([]*ChampshipRank, 0)
|
||||
}
|
||||
ChampshipData.Rank[GroupId] = append(ChampshipData.Rank[GroupId], &ChampshipRank{
|
||||
inRank := false
|
||||
Notify := make(map[int]int)
|
||||
for k, v := range RankList {
|
||||
if v.Uid == data.Uid {
|
||||
if v.Score < data.Score {
|
||||
v.Score = data.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(ChampshipData.Rank[GroupId], func(i, j int) bool { // 排序 从大到小 数值相等按时间排序
|
||||
if ChampshipData.Rank[GroupId][i].Score > ChampshipData.Rank[GroupId][j].Score {
|
||||
}
|
||||
sort.Slice(RankList, func(i, j int) bool { // 排序 从大到小 数值相等按时间排序
|
||||
if RankList[i].Score > RankList[j].Score {
|
||||
return true
|
||||
} else if ChampshipData.Rank[GroupId][i].Score == ChampshipData.Rank[GroupId][j].Score {
|
||||
return ChampshipData.Rank[GroupId][i].Time < ChampshipData.Rank[GroupId][j].Time
|
||||
} else if RankList[i].Score == RankList[j].Score {
|
||||
return RankList[i].Time < RankList[j].Time
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
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 {
|
||||
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(4631, 7530)), 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))
|
||||
}
|
||||
for i := 0; i <= 5; i++ {
|
||||
for i := 0; i < 5; i++ {
|
||||
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))
|
||||
}
|
||||
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(4631, 7530)), 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))
|
||||
}
|
||||
n := Num - 10
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= n-x; i++ {
|
||||
for i := 0; i < n-x; i++ {
|
||||
r = append(r, CreateRobot(float64(GoUtil.RandNum(20, 240)), GroupId))
|
||||
}
|
||||
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(4631, 7530)), 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))
|
||||
}
|
||||
n := Num - 10
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
case 4:
|
||||
@ -283,16 +549,17 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
|
||||
|
||||
n := Num - 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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
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))
|
||||
}
|
||||
case 5:
|
||||
@ -302,19 +569,20 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
|
||||
|
||||
n := Num - 3
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
case 6:
|
||||
@ -323,47 +591,49 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
|
||||
|
||||
n := Num - 2
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
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))
|
||||
}
|
||||
case 7:
|
||||
r = append(r, CreateRobot(float64(GoUtil.RandNum(12181, 21680)), GroupId))
|
||||
n := Num - 1
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
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))
|
||||
}
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
for i := 0; i <= x; i++ {
|
||||
for i := 0; i < x; i++ {
|
||||
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))
|
||||
}
|
||||
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))
|
||||
}
|
||||
|
||||
@ -404,19 +675,26 @@ func CreateRobotList(G, Num, GroupId int) []*ChampshipRobot {
|
||||
func CreateRobot(M float64, GroupId int) *ChampshipRobot {
|
||||
Type := GoUtil.RandMap(map[int]int{1: 25, 2: 50, 3: 25})
|
||||
Score := M / 10
|
||||
PerScore := 0.0
|
||||
if Type == 2 {
|
||||
PerScore = (M / 10 * 0.34) / float64(GoUtil.NextZeroTimestampDuration()) / 60
|
||||
Score = M / 10 * 0.66
|
||||
}
|
||||
if Type == 3 {
|
||||
PerScore = (M / 10 * 0.34) / float64(GoUtil.NextZeroTimestampDuration()) / 1800
|
||||
Score = 0
|
||||
}
|
||||
|
||||
return &ChampshipRobot{
|
||||
Max: M,
|
||||
Max: M / 10,
|
||||
Type: Type,
|
||||
Name: "Lily",
|
||||
Avatar: 1,
|
||||
Face: 1,
|
||||
Level: 1,
|
||||
Avatar: GoUtil.RandNum(1, 10),
|
||||
Face: GoUtil.RandNum(1, 10),
|
||||
Level: GoUtil.RandNum(1, 10),
|
||||
GroupId: GroupId,
|
||||
Time: GoUtil.Now(),
|
||||
Score: Score,
|
||||
PerScore: PerScore,
|
||||
}
|
||||
}
|
||||
|
||||
@ -83,11 +83,13 @@ type GameLogic struct {
|
||||
MPlayerProfileManager *PlayerProfileManager
|
||||
MOldPlayerCompensateMgr *OldPlayerCompensateMgr
|
||||
MHttpManager *HttpManager
|
||||
|
||||
MLogManager *LogMgr
|
||||
SeverInfo *ServerInfo
|
||||
FriendMgr *FriendMgr
|
||||
RankMgr *RankMgr
|
||||
MailMgr *MailMgr
|
||||
ChampshipMgr *ChampshipMgr
|
||||
}
|
||||
|
||||
type ServerInfo struct {
|
||||
@ -356,6 +358,26 @@ func (ad *GameLogic) MailMgrCall(m *MsgMod.Msg) interface{} {
|
||||
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 {
|
||||
Idstr := strconv.Itoa(Id)
|
||||
Value, _ := db.RedisGetKey(Idstr)
|
||||
@ -363,7 +385,10 @@ func (ad *GameLogic) GetSimplePlayerByUid(Id int) *PlayerSimpleData {
|
||||
player.Uid = Id
|
||||
if Value == "" {
|
||||
p := new(Player)
|
||||
p.GetSimpleData(Id, player)
|
||||
err := p.GetSimpleData(Id, player)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
value, _ := json.Marshal(player)
|
||||
db.RedisSetKey(Idstr, string(value), 300)
|
||||
} else {
|
||||
@ -430,6 +455,7 @@ func G_getGameLogic() *GameLogic {
|
||||
G_GameLogicPtr.CreateFriendMgr() //创建好友管理器
|
||||
G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器
|
||||
G_GameLogicPtr.CreateMailMgr() //创建邮件管理器
|
||||
G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器
|
||||
ClusterMgrInit() //初始化集群
|
||||
|
||||
// G_GameLogicPtr.CreateHttpManager()
|
||||
@ -972,6 +998,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqFastProduceReward", ReqFastProduceReward)
|
||||
//场景转盘
|
||||
RegisterMsgProcessFunc("ReqLimitSenceReward", ReqLimitSenceReward)
|
||||
//领取限时事件进度奖励
|
||||
|
||||
// 好友
|
||||
RegisterMsgProcessFunc("ReqFriendList", ReqFriendList) // 请求好友列表
|
||||
@ -984,7 +1011,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqApplyFriend", ReqApplyFriend) // 申请好友
|
||||
RegisterMsgProcessFunc("ReqAgreeFriend", ReqAgreeFriend) // 同意申请
|
||||
RegisterMsgProcessFunc("ReqRefuseFriend", ReqRefuseFriend) // 拒绝申请
|
||||
RegisterMsgProcessFunc("ReqDeleteFriend", ReqDeleteFriend) // 删除好友
|
||||
RegisterMsgProcessFunc("ReqDelFriend", ReqDelFriend) // 删除好友
|
||||
|
||||
// 榜单
|
||||
RegisterMsgProcessFunc("ReqRank", ReqRank) // 请求榜单数据
|
||||
@ -1010,6 +1037,8 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
// 锦标赛
|
||||
RegisterMsgProcessFunc("ReqChampshipReward", ReqChampshipReward) // 领取锦标赛奖励
|
||||
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 {
|
||||
return db.RedisLock(key, "", Duration)
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ package game
|
||||
import (
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/item"
|
||||
MsgMod "server/game/mod/msg"
|
||||
"server/msg"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -70,7 +71,15 @@ func ReqGmCommand(args []interface{}) error {
|
||||
CardMod.AddCard(3)
|
||||
FriendMod := player.PlayMod.getFriendMod()
|
||||
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
|
||||
}
|
||||
|
||||
@ -4,6 +4,8 @@ import (
|
||||
// "server/GoUtil"
|
||||
// "server/MergeConst"
|
||||
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@ -416,10 +418,18 @@ func (p *Player) ClearData() {
|
||||
|
||||
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 {
|
||||
v.SaveDataFromDB("")
|
||||
}
|
||||
p.PlayMod.ClearData(p)
|
||||
tx.Commit()
|
||||
}
|
||||
|
||||
// 重新连接
|
||||
@ -575,15 +585,8 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
Lable: Label,
|
||||
})
|
||||
}
|
||||
NotifyCard := &msg.ResNotifyCard{}
|
||||
NotifyCard.Card = make(map[int32]int32)
|
||||
for _, v := range ResCard {
|
||||
for _, c := range v.Card {
|
||||
NotifyCard.Card[c]++
|
||||
}
|
||||
}
|
||||
|
||||
p.PushClientRes(NotifyCard)
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
p.PushClientRes(CardMod.NotifyCard())
|
||||
|
||||
if is_update {
|
||||
p.PushClientRes(p.GetPlayerBaseMod().BackAsset())
|
||||
@ -609,7 +612,7 @@ func (p *Player) LoginBackData() {
|
||||
p.PushClientRes(p.PlayMod.mod_list.PiggyBank.BackData())
|
||||
p.PushClientRes(p.GetPlayerBaseMod().BackAsset())
|
||||
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))
|
||||
BackUserInfo(p)
|
||||
}
|
||||
@ -662,6 +665,7 @@ func (p *Player) UpdateUserInfo() {
|
||||
Base := p.GetPlayerBaseMod()
|
||||
simple.Name = p.GetPlayerBaseMod().GetName()
|
||||
simple.Avatar = p.PlayMod.getAvatarMod().SetId
|
||||
simple.Uid = int(p.M_DwUin)
|
||||
simple.Face = p.PlayMod.getFaceMod().SetId
|
||||
simple.Level = p.GetPlayerBaseMod().GetLevel()
|
||||
simple.Decorate = p.PlayMod.getDecorateMod().DecorateNum
|
||||
@ -696,13 +700,14 @@ func (p *Player) HandleInChampshipRank() {
|
||||
Score := float64(ChampshipMod.GetScore())
|
||||
// 更新排行榜
|
||||
m := &MsgMod.Msg{
|
||||
Type: MsgMod.HANDLE_TYPE_RANK,
|
||||
Type: MsgMod.HANDLE_TYPE_CHAMPSHIP_INRANK,
|
||||
SendT: GoUtil.Now(),
|
||||
Extra: RankMsg{
|
||||
Extra: CRank{
|
||||
Uid: int(p.M_DwUin),
|
||||
Score: Score,
|
||||
RankType: RANK_TYPE_CHAMPSHIP,
|
||||
H: ChampshipMod.GetH(),
|
||||
N: ChampshipMod.GetN(),
|
||||
},
|
||||
}
|
||||
G_GameLogicPtr.RankMgrSend(m)
|
||||
G_GameLogicPtr.ChampshipMgrSend(m)
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"encoding/gob"
|
||||
"errors"
|
||||
"fmt"
|
||||
"server/GoUtil"
|
||||
"server/MergeConst"
|
||||
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{}) {
|
||||
@ -217,7 +217,7 @@ func (p *PlayerBaseData) Notify_Daily_Renew(param []interface{}) {
|
||||
agent := p.GetPlayer().GetAgentByPlayer()
|
||||
data, _ := proto.Marshal(notify)
|
||||
G_getGameLogic().PackResInfo(agent, "NotifyRenewBuyEnergyCnt", data)
|
||||
p.SaveDataFromDB("")
|
||||
|
||||
}
|
||||
|
||||
func (p *PlayerBaseData) SaveDataFromDB(Key interface{}) bool {
|
||||
@ -252,6 +252,7 @@ func (p *PlayerBaseData) SaveDataFromDB(Key interface{}) bool {
|
||||
var buf bytes.Buffer
|
||||
encode := gob.NewEncoder(&buf)
|
||||
encode.Encode(p.KeyValueData)
|
||||
log.Debug("player :%d KeyValueData Save:%v ", p.Data.DwUin, p.KeyValueData)
|
||||
db.SavePlayerClientData(&db.SqlModStruct{
|
||||
DwUin: p.Data.DwUin,
|
||||
ModData: buf.Bytes(),
|
||||
@ -327,7 +328,7 @@ func (p *PlayerBaseData) UpdateBaseItemInfo(update *msg.UpdateBaseItemInfo) {
|
||||
p.Data.LastPlayTime = v
|
||||
}
|
||||
}
|
||||
p.SaveDataFromDB("")
|
||||
|
||||
}
|
||||
|
||||
func (p *PlayerBaseData) ReqRemoveAd(buf []byte) {
|
||||
@ -337,7 +338,6 @@ func (p *PlayerBaseData) ReqRemoveAd(buf []byte) {
|
||||
|
||||
p.Data.NoAd = 1
|
||||
res.ResultCode = 0
|
||||
p.SaveDataFromDB("")
|
||||
|
||||
agent := p.GetPlayer().GetAgentByPlayer()
|
||||
data, _ := proto.Marshal(res)
|
||||
@ -387,7 +387,7 @@ func (p *PlayerBaseData) ReqBindFacebookAccount(buf []byte) {
|
||||
res.ResultCode = 0
|
||||
p.Data.FaceBookId = req.BindAccountId
|
||||
res.BindAccountId = req.BindAccountId
|
||||
p.SaveDataFromDB("")
|
||||
|
||||
}
|
||||
|
||||
agent := p.GetPlayer().GetAgentByPlayer()
|
||||
@ -403,7 +403,6 @@ func (p *PlayerBaseData) ReqUnBindFacebook(buf []byte) {
|
||||
res.ResultCode = 0
|
||||
res.BindAccountId = req.BindAccountId
|
||||
p.Data.FaceBookId = ""
|
||||
p.SaveDataFromDB("")
|
||||
|
||||
agent := p.GetPlayer().GetAgentByPlayer()
|
||||
data, _ := proto.Marshal(res)
|
||||
@ -432,13 +431,13 @@ func (p *PlayerBaseData) ReqOnlyBindFacebook(buf []byte) {
|
||||
res.ResultCode = 0
|
||||
p.Data.FaceBookId = req.BindAccountId
|
||||
res.BindAccountId = req.BindAccountId
|
||||
p.SaveDataFromDB("")
|
||||
|
||||
}
|
||||
} else {
|
||||
res.ResultCode = 0
|
||||
p.Data.FaceBookId = req.BindAccountId
|
||||
res.BindAccountId = req.BindAccountId
|
||||
p.SaveDataFromDB("")
|
||||
|
||||
}
|
||||
|
||||
agent := p.GetPlayer().GetAgentByPlayer()
|
||||
@ -447,91 +446,11 @@ func (p *PlayerBaseData) ReqOnlyBindFacebook(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 {
|
||||
p.Data.LogoutTime = int32(time.Now().Unix())
|
||||
p.SaveDataFromDB("")
|
||||
GoUtil.RemoveEvent(MergeConst.Notify_Daily_Renew, p.Notify_Daily_Renew, p)
|
||||
p.McronSave.Remove(p.McronSaveID)
|
||||
p.McronSave.Stop()
|
||||
@ -543,6 +462,8 @@ func (p *PlayerBaseData) ClearData() bool {
|
||||
p.MTicker.Stop()
|
||||
p.MTicker = nil
|
||||
}
|
||||
fmt.Print("ClearData:", p.Data.DwUin)
|
||||
p.SaveDataFromDB("")
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@ -178,7 +178,7 @@ func (p *PlayerChessData) UpdatePlayerChessData(buf []byte) error {
|
||||
p.M_Player.SendErrClienRes(res)
|
||||
return fmt.Errorf("棋子数据不一致")
|
||||
}
|
||||
p.SaveDataFromDB("")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -319,7 +319,6 @@ func (p *PlayerChessData) UpdateChessColorData(buf []byte) {
|
||||
}
|
||||
p.ColorData.MChessColorData = update.MChessColorData
|
||||
|
||||
p.SaveDataFromDB("")
|
||||
}
|
||||
func (p *PlayerChessData) GetChestKeyByValue(id int32) string {
|
||||
for k, v := range p.Data.MChessData {
|
||||
@ -332,7 +331,6 @@ func (p *PlayerChessData) GetChestKeyByValue(id int32) string {
|
||||
|
||||
func (p *PlayerChessData) ClearData() bool {
|
||||
p.SaveDataFromDB("")
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@ -119,9 +119,7 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
CardMod.AddExTimes()
|
||||
CardMod.AddCard(CardInfo.CardId)
|
||||
CardMod.DelExCard(CardInfo)
|
||||
p.PushClientRes(&proto.ResNotifyCard{
|
||||
Card: map[int32]int32{int32(CardInfo.CardId): 1},
|
||||
})
|
||||
p.PushClientRes(CardMod.NotifyCard())
|
||||
p.PlayMod.save()
|
||||
case msg.HANDLE_TYPE_REFUSE_EX_CARD: // B收到A拒绝置换卡牌
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
@ -130,9 +128,10 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.DelCardInfo(CardInfo.Id)
|
||||
p.PlayMod.save()
|
||||
p.PushClientRes(&proto.ResNotifyCard{
|
||||
Card: map[int32]int32{int32(CardInfo.ExId): 1},
|
||||
})
|
||||
p.PushClientRes(CardMod.NotifyCard())
|
||||
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: // 邮件操作
|
||||
MailMod := p.PlayMod.getMailMod()
|
||||
if m.Extra == nil {
|
||||
@ -169,9 +168,6 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error {
|
||||
FriendMod.HandleMsg(m)
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
|
||||
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: // 好友申请
|
||||
FriendMod.AddFriendApply(m.From)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
|
||||
@ -115,14 +115,13 @@ func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
data := m.Extra.(RankMsg)
|
||||
rankList := r.getRank(data.RankType)
|
||||
inRank := false
|
||||
MyRank := 0
|
||||
for k, v := range rankList {
|
||||
for _, v := range rankList {
|
||||
if v.Uid == data.Uid {
|
||||
if v.Score < data.Score {
|
||||
v.Score = data.Score
|
||||
v.Time = m.SendT
|
||||
inRank = true
|
||||
MyRank = k + 1
|
||||
break
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
@ -139,16 +138,7 @@ func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
}
|
||||
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 {
|
||||
// rankList = rankList[:100]
|
||||
// }
|
||||
@ -160,11 +150,3 @@ func (r *RankMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
r.update = true
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func Notify(Uid int, m *msg.Msg) {
|
||||
p := G_GameLogicPtr.GetPlayerByUid(Uid)
|
||||
if p == nil || p.stop {
|
||||
return
|
||||
}
|
||||
p.SendMsg(m)
|
||||
}
|
||||
|
||||
@ -2026,13 +2026,14 @@ func ReqRewardOrder(args []interface{}) error {
|
||||
|
||||
// 限时事件增加进度
|
||||
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.PlayMod.save()
|
||||
player.PushClientRes(PiggyBankMod.BackData())
|
||||
player.PushClientRes(OrderMod.BackData())
|
||||
player.PushClientRes(ChampshipMod.BackData(MyRank))
|
||||
player.PushClientRes(LimitedTimeEventMod.BackData())
|
||||
player.PushClientRes(LimitedTimeEventMod.ProgressBackData())
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -2738,41 +2739,31 @@ func ReqSearchPlayer(args []interface{}) error {
|
||||
req := &msg.ReqSearchPlayer{}
|
||||
proto.Unmarshal(buf, req)
|
||||
Uid, err := strconv.Atoi(req.Uid)
|
||||
SearchPlayers := make([]*PlayerSimpleData, 0)
|
||||
list := make([]*msg.ResPlayerSimple, 0)
|
||||
if err == nil {
|
||||
SearchPlayer := G_GameLogicPtr.GetSimplePlayerByUid(Uid)
|
||||
SearchPlayer := G_GameLogicPtr.GetResSimplePlayerByUid(Uid)
|
||||
if SearchPlayer != nil {
|
||||
SearchPlayers = append(SearchPlayers, SearchPlayer)
|
||||
list = append(list, SearchPlayer)
|
||||
}
|
||||
}
|
||||
data, err := db.SearchPlayer(req.Uid)
|
||||
if err == nil {
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResSearchPlayer{
|
||||
Code: 0,
|
||||
})
|
||||
}
|
||||
for _, v := range data {
|
||||
SearchPlayer := G_GameLogicPtr.GetSimplePlayerByUid(int(v.DwUin))
|
||||
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 SearchPlayers {
|
||||
if player.PlayMod.getFriendMod().CheckFriend(v.Uid) {
|
||||
if player.M_DwUin == v.DwUin {
|
||||
continue
|
||||
}
|
||||
if player.PlayMod.getFriendMod().CheckApply(v.Uid) {
|
||||
if player.PlayMod.getFriendMod().CheckFriend(int(v.DwUin)) {
|
||||
continue
|
||||
}
|
||||
list = append(list, &msg.ResPlayerSimple{
|
||||
Uid: int32(v.Uid),
|
||||
Name: v.Name,
|
||||
Avatar: int32(v.Avatar),
|
||||
Level: int32(v.Level),
|
||||
Face: int32(v.Face),
|
||||
})
|
||||
if player.PlayMod.getFriendMod().CheckApply(int(v.DwUin)) {
|
||||
continue
|
||||
}
|
||||
SearchPlayer := G_GameLogicPtr.GetResSimplePlayerByUid(int(v.DwUin))
|
||||
list = append(list, SearchPlayer)
|
||||
|
||||
}
|
||||
player.PushClientRes(&msg.ResSearchPlayer{
|
||||
@ -2824,15 +2815,17 @@ func ReqAgreeFriend(args []interface{}) error {
|
||||
G_GameLogicPtr.FriendMgrSend(m)
|
||||
FriendMod.AddFriend(Uid)
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResApplyFriend{
|
||||
player.PushClientRes(&msg.ResAgreeFriend{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
Player: G_GameLogicPtr.GetResSimplePlayerByUid(int(req.Uid)),
|
||||
})
|
||||
FriendApplyBackData(player)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 删除好友
|
||||
func ReqDeleteFriend(args []interface{}) error {
|
||||
func ReqDelFriend(args []interface{}) error {
|
||||
_, player, buf := ParseArgs(args)
|
||||
req := &msg.ReqDelFriend{}
|
||||
proto.Unmarshal(buf, req)
|
||||
@ -2849,6 +2842,7 @@ func ReqDeleteFriend(args []interface{}) error {
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResDelFriend{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
})
|
||||
FriendListBackData(player)
|
||||
return nil
|
||||
@ -2865,6 +2859,7 @@ func ReqRefuseFriend(args []interface{}) error {
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResRefuseFriend{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
})
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_DEL,
|
||||
@ -2998,9 +2993,7 @@ func ReqAgreeCardGive(args []interface{}) error {
|
||||
Extra: CardInfo,
|
||||
}
|
||||
FriendMgrSend(m)
|
||||
player.PushClientRes(&msg.ResNotifyCard{
|
||||
Card: map[int32]int32{int32(CardInfo.CardId): -1},
|
||||
})
|
||||
player.PushClientRes(CardMod.NotifyCard())
|
||||
player.PushClientRes(&msg.ResAgreeCardGive{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -3065,9 +3058,7 @@ func ReqCardSend(args []interface{}) error {
|
||||
player.PushClientRes(&msg.ResCardSend{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.PushClientRes(&msg.ResNotifyCard{
|
||||
Card: map[int32]int32{int32(CardInfo.CardId): -1},
|
||||
})
|
||||
player.PushClientRes(CardMod.NotifyCard())
|
||||
player.PlayMod.save()
|
||||
FriendMgrSend(m)
|
||||
return nil
|
||||
@ -3101,9 +3092,7 @@ func ReqCardExchange(args []interface{}) error {
|
||||
player.PushClientRes(&msg.ResCardExchange{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.PushClientRes(&msg.ResNotifyCard{
|
||||
Card: map[int32]int32{int32(CardInfo.CardId): -1},
|
||||
})
|
||||
player.PushClientRes(CardMod.NotifyCard())
|
||||
player.PlayMod.save()
|
||||
FriendMgrSend(m)
|
||||
return nil
|
||||
@ -3148,9 +3137,7 @@ func ReqSelectCardExchange(args []interface{}) error {
|
||||
player.PushClientRes(&msg.ResSelectCardExchange{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.PushClientRes(&msg.ResNotifyCard{
|
||||
Card: map[int32]int32{int32(CardId): -1},
|
||||
})
|
||||
player.PushClientRes(CardMod.NotifyCard())
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_SELECT_EX_CARD,
|
||||
From: int(player.M_DwUin),
|
||||
@ -3193,9 +3180,7 @@ func ReqAgreeCardExchange(args []interface{}) error {
|
||||
To: CardInfo.BUid,
|
||||
Extra: CardInfo,
|
||||
}
|
||||
player.PushClientRes(&msg.ResNotifyCard{
|
||||
Card: map[int32]int32{int32(CardInfo.ExId): 1},
|
||||
})
|
||||
player.PushClientRes(CardMod.NotifyCard())
|
||||
FriendMgrSend(m)
|
||||
return nil
|
||||
}
|
||||
@ -3259,9 +3244,7 @@ func ReqRefuseCardExchange(args []interface{}) error {
|
||||
To: CardInfo.BUid,
|
||||
Extra: CardInfo,
|
||||
}
|
||||
player.PushClientRes(&msg.ResNotifyCard{
|
||||
Card: map[int32]int32{int32(CardInfo.CardId): 1},
|
||||
})
|
||||
player.PushClientRes(CardMod.NotifyCard())
|
||||
FriendMgrSend(m)
|
||||
return nil
|
||||
}
|
||||
@ -3287,9 +3270,7 @@ func ReqGetFriendCard(args []interface{}) error {
|
||||
player.PushClientRes(&msg.ResGetFriendCard{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.PushClientRes(&msg.ResNotifyCard{
|
||||
Card: map[int32]int32{int32(CardInfo.CardId): 1},
|
||||
})
|
||||
player.PushClientRes(CardMod.NotifyCard())
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3315,21 +3296,22 @@ func ReqRank(args []interface{}) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 请求昨日竞标赛榜单
|
||||
// 请求竞标赛榜单
|
||||
func ReqChampshipRank(args []interface{}) error {
|
||||
_, player, buf := ParseArgs(args)
|
||||
req := &msg.ReqRank{}
|
||||
proto.Unmarshal(buf, req)
|
||||
rankList := G_GameLogicPtr.RankMgr.getLastChampshipRank()
|
||||
res := make(map[int32]*msg.ResPlayerSimple)
|
||||
for k, rank := range rankList {
|
||||
res[int32(k+1)] = G_GameLogicPtr.GetResSimplePlayerByUid(rank.Uid)
|
||||
m := G_GameLogicPtr.ChampshipMgr.GetRankMsg(int(player.M_DwUin))
|
||||
player.PushClientRes(m)
|
||||
return nil
|
||||
}
|
||||
|
||||
player.PushClientRes(&msg.ResRank{
|
||||
Type: req.Type,
|
||||
RankList: res,
|
||||
})
|
||||
func ReqChampshipPreRank(args []interface{}) error {
|
||||
_, player, buf := ParseArgs(args)
|
||||
req := &msg.ReqRank{}
|
||||
proto.Unmarshal(buf, req)
|
||||
m := G_GameLogicPtr.ChampshipMgr.GetPreRankMsg(int(player.M_DwUin))
|
||||
player.PushClientRes(m)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3600,7 +3582,7 @@ func ReqChampshipReward(args []interface{}) error {
|
||||
})
|
||||
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.PushClientRes(ChampshipMod.BackData(MyRank))
|
||||
player.PushClientRes(&msg.ResChampshipReward{
|
||||
@ -3666,19 +3648,16 @@ func ReqFriendRecommend(args []interface{}) error {
|
||||
break
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
if v.Uid == int(player.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckFriend(v.Uid) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckApply(v.Uid) {
|
||||
continue
|
||||
}
|
||||
RecommendList = append(RecommendList, &msg.ResPlayerSimple{
|
||||
Uid: int32(PlayerSimpleData.Uid),
|
||||
Name: PlayerSimpleData.Name,
|
||||
Avatar: int32(PlayerSimpleData.Avatar),
|
||||
Level: int32(PlayerSimpleData.Level),
|
||||
Face: int32(PlayerSimpleData.Face),
|
||||
})
|
||||
RecommendList = append(RecommendList, PlayerSimpleData)
|
||||
n++
|
||||
}
|
||||
player.PushClientRes(&msg.ResFriendRecommend{
|
||||
@ -3714,9 +3693,9 @@ func ReqFriendTimeLine(args []interface{}) error {
|
||||
|
||||
func ReqChampshipRankReward(args []interface{}) error {
|
||||
_, 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()
|
||||
itemList, err := ChampshipMod.GetRankReward(MyRank)
|
||||
itemList, err := ChampshipMod.GetRankReward(MyLastRank)
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResChampshipRankReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -3733,6 +3712,7 @@ func ReqChampshipRankReward(args []interface{}) error {
|
||||
return err
|
||||
}
|
||||
player.PlayMod.save()
|
||||
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(player.M_DwUin))
|
||||
player.PushClientRes(ChampshipMod.BackData(MyRank))
|
||||
player.PushClientRes(&msg.ResChampshipRankReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -3777,9 +3757,9 @@ func ReqMasterCard(args []interface{}) error {
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResMasterCard{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
MasterId: req.Id,
|
||||
CardId: req.CardId,
|
||||
})
|
||||
player.PushClientRes(&msg.ResNotifyCard{
|
||||
Card: map[int32]int32{int32(req.CardId): 1},
|
||||
})
|
||||
player.PushClientRes(CardMod.NotifyCard())
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ const (
|
||||
RANK_MGR_KEY = "RANK_MGR"
|
||||
MAIL_MGR_KEY = "MAIL_MGR"
|
||||
CHAMPSHIP_MGR_KEY = "CHAMPSHIP_MGR"
|
||||
PER_SAVE_TIME = 1
|
||||
PER_SAVE_TIME = 60
|
||||
)
|
||||
|
||||
type ServerMod struct {
|
||||
@ -38,7 +38,7 @@ func (s *ServerMod) init() {
|
||||
s.handler = make(map[int]interface{})
|
||||
s.update = false
|
||||
s.LoadData()
|
||||
s.mDispatr.AfterFunc(time.Duration(PER_SAVE_TIME), func() {
|
||||
s.mDispatr.AfterFunc(time.Duration(PER_SAVE_TIME)*time.Second, func() {
|
||||
s.SaveData()
|
||||
})
|
||||
go func() {
|
||||
@ -48,6 +48,7 @@ func (s *ServerMod) init() {
|
||||
s.lock.Unlock()
|
||||
}
|
||||
}()
|
||||
|
||||
for {
|
||||
select {
|
||||
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 保存消息
|
||||
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()
|
||||
})
|
||||
if !s.update {
|
||||
return
|
||||
}
|
||||
DbData := db.SqlServerModStruct{}
|
||||
DbData.Key = s.key
|
||||
DbData.UpdataTime = GoUtil.Now()
|
||||
@ -140,7 +139,6 @@ func (s *ServerMod) SaveData() {
|
||||
if err != nil {
|
||||
log.Debug("SaveData sql exec ,Mod Key: %s err:%v", s.key, err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (s *ServerMod) LoadData() {
|
||||
|
||||
@ -20,6 +20,13 @@ type CardMod struct {
|
||||
ReqTimes int //请求次数
|
||||
ReqFriend map[int]*CardInfo //今日已请求好友
|
||||
ExCard map[int]*CardInfo // 交换卡牌
|
||||
Cache Cache // 缓存卡牌
|
||||
}
|
||||
|
||||
type Cache struct {
|
||||
Card map[int]int
|
||||
Master map[int]int
|
||||
ExStar int
|
||||
}
|
||||
|
||||
const (
|
||||
@ -73,6 +80,12 @@ func (c *CardMod) InitData() {
|
||||
if c.ExCard == nil {
|
||||
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) {
|
||||
@ -101,10 +114,12 @@ func (c *CardMod) AddCard(Id int) {
|
||||
if ok {
|
||||
star := cardCfg.GetStarById(Id)
|
||||
c.ExchangeStar += star
|
||||
c.Cache.ExStar += star
|
||||
c.CardList[Id]++
|
||||
} else {
|
||||
c.CardList[Id] = 1
|
||||
}
|
||||
c.Cache.Card[Id]++
|
||||
}
|
||||
|
||||
// 开启卡包
|
||||
@ -215,6 +230,7 @@ func (c *CardMod) ExStarReward(Id int) ([]*item.Item, error) {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
c.Cache.ExStar -= CostStar
|
||||
return itemList, nil
|
||||
}
|
||||
|
||||
@ -247,6 +263,7 @@ func (c *CardMod) SubCard(id int) error {
|
||||
count, ok := c.CardList[id]
|
||||
if ok && count > 0 {
|
||||
c.CardList[id]--
|
||||
c.Cache.Card[id]--
|
||||
return nil
|
||||
}
|
||||
return fmt.Errorf("SubCard card not enough")
|
||||
@ -346,6 +363,7 @@ func (c *CardMod) DelExCard(CardInfo *CardInfo) {
|
||||
}
|
||||
|
||||
func (c *CardMod) AddMasterCard(Id int) {
|
||||
c.Cache.Master[Id]++
|
||||
c.AllCard[Id]++
|
||||
}
|
||||
|
||||
@ -357,6 +375,21 @@ func (c *CardMod) MasterCardEx(Id, CardId int) error {
|
||||
return fmt.Errorf("MasterCardEx card type err")
|
||||
}
|
||||
c.AllCard[Id]--
|
||||
c.AllCard[Id]--
|
||||
c.AddCard(CardId)
|
||||
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
|
||||
}
|
||||
|
||||
@ -13,11 +13,14 @@ type ChampshipMod struct {
|
||||
Score int
|
||||
Reward int
|
||||
RankReward bool
|
||||
PreMax int // 昨日最高档
|
||||
Max int // 历史最高档
|
||||
}
|
||||
|
||||
func (c *ChampshipMod) InitData() {}
|
||||
|
||||
func (c *ChampshipMod) ZeroUpdate() {
|
||||
c.PreMax = c.Reward
|
||||
c.Score = 0
|
||||
c.Reward = 0
|
||||
c.RankReward = false
|
||||
@ -48,6 +51,7 @@ func (c *ChampshipMod) AddScore(Chess []int) {
|
||||
func (c *ChampshipMod) GetReward() []*item.Item {
|
||||
Reward, Items := champshipCfg.GetReward(c.Reward, c.Score)
|
||||
c.Reward = Reward
|
||||
c.Max = max(c.Max, c.Reward)
|
||||
return Items
|
||||
}
|
||||
|
||||
@ -60,3 +64,11 @@ func (c *ChampshipMod) BackData(MyRank int) *msg.ResChampship {
|
||||
Rank: int32(MyRank),
|
||||
}
|
||||
}
|
||||
|
||||
func (c *ChampshipMod) GetH() int {
|
||||
return c.PreMax
|
||||
}
|
||||
|
||||
func (c *ChampshipMod) GetN() int {
|
||||
return c.Max
|
||||
}
|
||||
|
||||
@ -24,6 +24,7 @@ func getTaskReward(Id, AreaId int) []*item.Item {
|
||||
func randJackpot(jackpot map[int]dailyTaskCfg.Jackpot, num int) map[int][]*item.Item {
|
||||
Ids := GoUtil.GetMapKey(jackpot)
|
||||
r := make(map[int][]*item.Item)
|
||||
t := 0
|
||||
for {
|
||||
Ids1 := GoUtil.RandSliceNum(Ids, num)
|
||||
sort.Ints(Ids1)
|
||||
@ -44,6 +45,9 @@ func randJackpot(jackpot map[int]dailyTaskCfg.Jackpot, num int) map[int][]*item.
|
||||
}
|
||||
return r
|
||||
}
|
||||
if t > 100 {
|
||||
return r
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -43,6 +43,9 @@ const (
|
||||
// 锦标赛
|
||||
HANDLE_TYPE_CHAMPSHIP_GROUP = 301 //锦标赛分组操作
|
||||
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_ZERO_UPDATE = 1000 //zero update
|
||||
)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user