ecs/servers/game/logic/player_reward_active.go
2025-06-21 16:17:24 +08:00

77 lines
2.3 KiB
Go

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}
}