package logic import ( "ecs/proto/pb" "github.com/oylshe1314/framework/util" ) type PlayerRewardActive struct { MoneyType uint32 `bson:"money_type" key:"1"` RewardStatus [][2]uint32 `bson:"reward_status"` } func (this *PlayerRewardActive) BuildMsgRewardActive() *pb.RewardActive { var msg = &pb.RewardActive{MoneyType: pb.MoneyType(this.MoneyType)} 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) checkRewardActive(money *PlayerMoney) bool { var changed = false var rewardActive = this.RewardActive[money.Type] if rewardActive == nil { rewardActive = this.newRewardActive(money) if rewardActive == nil { return false } this.RewardActive[rewardActive.MoneyType] = rewardActive changed = true } else { for i := range rewardActive.RewardStatus { if pb.AbleStatus(rewardActive.RewardStatus[i][1]) == pb.AbleStatus_Unable { var activeTable = this.manager.tables.RewardActive.Find1(int(rewardActive.RewardStatus[i][0])) if activeTable != nil { if money.Value >= uint32(activeTable.ActiveValue) { rewardActive.RewardStatus[i][1] = uint32(pb.AbleStatus_Able) changed = true } } } } } if changed { this.SaveModel(rewardActive) _ = this.Send(pb.ModId_ModuleReward, pb.MsgId_ModRewardActiveChange, &pb.RewardActiveChangeAck{RewardActive: rewardActive.BuildMsgRewardActive()}) } return changed } func (this *Player) newRewardActive(money *PlayerMoney) *PlayerRewardActive { var rewardTables = this.manager.tables.RewardActive.Find2(int(money.Type)) if len(rewardTables) == 0 { return nil } var rewardActive = &PlayerRewardActive{MoneyType: money.Type, RewardStatus: make([][2]uint32, len(rewardTables))} for i, rewardTable := range rewardTables { rewardActive.RewardStatus[i] = [2]uint32{ uint32(rewardTable.Id), util.If(money.Value >= uint32(rewardTable.ActiveValue), uint32(pb.AbleStatus_Able), uint32(pb.AbleStatus_Unable)), } } return rewardActive } func (this *Player) BuildMsgRewardActiveListAck() *pb.RewardActiveListAck { var activeList []*pb.RewardActive for _, rewardStatus := range this.RewardActive { activeList = append(activeList, rewardStatus.BuildMsgRewardActive()) } return &pb.RewardActiveListAck{ActiveList: activeList} }