package logic import ( "ecs/proto/pb" "github.com/oylshe1314/framework/util" ) type PlayerRewardLogin struct { SeriesId uint32 `bson:"series_id" key:"1"` RewardStatus [][2]uint32 `bson:"reward_status"` } func (this *PlayerRewardLogin) BuildMsgRewardLogin() *pb.RewardLogin { var msg = &pb.RewardLogin{SeriesId: this.SeriesId} for _, status := range this.RewardStatus { msg.StatusList = append(msg.StatusList, &pb.RewardStatus{Id: status[0], Status: pb.AbleStatus(status[1])}) } return msg } func (this *Player) CheckRewardLogin() bool { var changed = false for _, seriesId := range this.manager.tables.RewardLogin.SeriesIds() { changed = this.checkRewardLogin(uint32(seriesId)) || changed } return changed } func (this *Player) checkRewardLogin(seriesId uint32) bool { var changed = false var rewardLogin = this.RewardLogin[seriesId] if rewardLogin == nil { rewardLogin = this.newRewardLogin(seriesId) if rewardLogin == nil { return false } this.RewardLogin[rewardLogin.SeriesId] = rewardLogin changed = true } else { var rewardTables = this.manager.tables.RewardLogin.Find2(int(seriesId)) if len(rewardTables) == 0 { return false } _, _, days := util.YMD() if pb.DaysModule(rewardTables[0].DaysModule) == pb.DaysModule_PeriodDays { maxDays, ok := this.manager.tables.RewardLogin.MaxDays(int(seriesId)) if !ok { maxDays = len(rewardTables) } days = int(this.LoginDays-1)%maxDays + 1 } if len(rewardLogin.RewardStatus) != len(rewardTables) { var newRewardStatus = make([][2]uint32, len(rewardTables)) for i := range rewardLogin.RewardStatus { if i >= len(newRewardStatus) { break } if rewardLogin.RewardStatus[i][0] == newRewardStatus[i][0] && pb.AbleStatus(rewardLogin.RewardStatus[i][1]) == pb.AbleStatus_Able { newRewardStatus[i][1] = uint32(pb.AbleStatus_Able) } } rewardLogin.RewardStatus = newRewardStatus changed = true } for i := range rewardLogin.RewardStatus { if pb.AbleStatus(rewardLogin.RewardStatus[i][1]) == pb.AbleStatus_Unable { var activeTable = this.manager.tables.RewardLogin.Find1(int(rewardLogin.RewardStatus[i][0])) if activeTable != nil { if days >= activeTable.Days { rewardLogin.RewardStatus[i][1] = uint32(pb.AbleStatus_Able) changed = true } } } } } if changed { this.SaveModel(rewardLogin) _ = this.Send(pb.ModId_ModuleReward, pb.MsgId_ModRewardLoginChange, &pb.RewardLoginChangeAck{RewardLogin: rewardLogin.BuildMsgRewardLogin()}) } return changed } func (this *Player) newRewardLogin(seriesId uint32) *PlayerRewardLogin { var rewardTables = this.manager.tables.RewardLogin.Find2(int(seriesId)) if len(rewardTables) == 0 { return nil } _, _, days := util.YMD() if pb.DaysModule(rewardTables[0].DaysModule) == pb.DaysModule_PeriodDays { maxDays, ok := this.manager.tables.RewardLogin.MaxDays(int(seriesId)) if !ok { maxDays = len(rewardTables) } days = int(this.LoginDays-1)%maxDays + 1 } var rewardLogin = &PlayerRewardLogin{SeriesId: seriesId, RewardStatus: make([][2]uint32, len(rewardTables))} for i, rewardTable := range rewardTables { rewardLogin.RewardStatus[i] = [2]uint32{ uint32(rewardTable.Id), util.If(days < rewardTable.Days, uint32(pb.AbleStatus_Unable), uint32(pb.AbleStatus_Able)), } } return rewardLogin } func (this *Player) BuildMsgRewardLoginListAck() *pb.RewardLoginListAck { var activeList []*pb.RewardLogin for _, rewardStatus := range this.RewardLogin { activeList = append(activeList, rewardStatus.BuildMsgRewardLogin()) } return &pb.RewardLoginListAck{LoginList: activeList} }