123 lines
3.6 KiB
Go
123 lines
3.6 KiB
Go
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}
|
|
}
|