ecs/servers/game/handler/player_reward.go
2025-07-16 10:05:22 +08:00

124 lines
4.0 KiB
Go

package handler
import (
"ecs/proto"
"ecs/proto/pb"
"ecs/servers/game/logic"
"github.com/oylshe1314/framework/net"
)
func (this *PlayerHandler) RewardActiveGet(player *logic.Player, msg *net.Message) {
var req = new(pb.RewardActiveGetReq)
var err = msg.Read(req)
if err != nil {
this.Logger().Error("Read message failed, ", err)
_ = player.TipNotice(proto.TipMessageError)
return
}
if req.Id == 0 {
this.Logger().Error("Parameter error, req.Id == 0")
_ = player.TipNotice(proto.TipParameterError)
return
}
var rewardTable = this.tables.RewardActive.Find1(int(req.Id))
if rewardTable == nil {
this.Logger().Error("Parameter or data error, table 'Active' was not found, id: ", req.Id)
_ = player.TipNotice(proto.TipDataTablesError)
return
}
ok, tip := player.CheckMoney(pb.MoneyType(rewardTable.MoneyType), uint32(rewardTable.ActiveValue))
if !ok {
this.Logger().Errorf("%s, moneyType: %d, moneyNum: %d", tip.Msg(), rewardTable.MoneyType, rewardTable.ActiveValue)
_ = player.TipNotice(tip)
return
}
var rewardActive = player.RewardActive[uint32(rewardTable.MoneyType)]
if rewardActive == nil {
this.Logger().Error("Server error, player reward active was not found, moneyType: ", rewardTable.MoneyType)
_ = player.TipNotice(proto.TipRewardActiveNotFound)
return
}
var status = rewardActive.RewardStatus[req.Id]
if pb.AbleStatus(status) == pb.AbleStatus_Unable {
this.Logger().Error("The active reward unable, req.Id: ", req.Id)
_ = player.TipNotice(proto.TipRewardUnable)
return
}
if pb.AbleStatus(status) == pb.AbleStatus_Already {
this.Logger().Error("The active reward has been received, req.Id: ", req.Id)
_ = player.TipNotice(proto.TipRewardHasGot)
return
}
var itemList []*pb.Item
for ii := range rewardTable.ItemIds {
itemList = append(itemList, &pb.Item{ItemId: uint32(rewardTable.ItemIds[ii]), ItemNum: uint32(rewardTable.ItemNums[ii])})
}
rewardActive.RewardStatus[req.Id] = uint32(pb.AbleStatus_Already)
player.SaveModel(rewardActive)
_ = player.Send(pb.ModId_ModuleReward, pb.MsgId_ModRewardActiveGet, &pb.RewardActiveGetAck{
Id: req.Id,
ItemList: itemList,
})
}
func (this *PlayerHandler) RewardLoginGet(player *logic.Player, msg *net.Message) {
var req = new(pb.RewardLoginGetReq)
var err = msg.Read(req)
if err != nil {
this.Logger().Error("Read message failed, ", err)
_ = player.TipNotice(proto.TipMessageError)
return
}
var rewardTable = this.tables.RewardLogin.Find1(int(req.Id))
if rewardTable == nil {
this.Logger().Error("Parameter or data tables error, Table 'LoginReward' was not found, Id: ", req.Id)
_ = player.TipNotice(proto.TipDataTablesError)
return
}
var rewardLogin = player.RewardLogin[uint32(rewardTable.SeriesId)]
if rewardLogin == nil {
this.Logger().Error("Server error, player reward active was not found, moneyType: ", rewardTable.SeriesId)
_ = player.TipNotice(proto.TipRewardLoginNotFound)
return
}
var status = rewardLogin.RewardStatus[req.Id]
if pb.AbleStatus(status) == pb.AbleStatus_Unable {
this.Logger().Error("The active reward unable, req.Id: ", req.Id)
_ = player.TipNotice(proto.TipRewardUnable)
return
}
if pb.AbleStatus(status) == pb.AbleStatus_Already {
this.Logger().Error("The active reward has been received, req.Id: ", req.Id)
_ = player.TipNotice(proto.TipRewardHasGot)
return
}
var rewardList []*pb.Item
for i := range rewardTable.ItemIds {
_ = player.AddItem(uint32(rewardTable.ItemIds[i]), uint32(rewardTable.ItemNums[i]), logic.LogTypeItemObtainByLoginReward)
rewardList = append(rewardList, &pb.Item{ItemId: uint32(rewardTable.ItemIds[i]), ItemNum: uint32(rewardTable.ItemNums[i])})
}
rewardLogin.RewardStatus[req.Id] = uint32(pb.AbleStatus_Already)
player.SaveModel(rewardLogin)
_ = player.Send(pb.ModId_ModuleReward, pb.MsgId_ModRewardLoginGet, &pb.RewardLoginGetAck{Id: req.Id, ItemList: rewardList})
_ = player.Send(pb.ModId_ModuleReward, pb.MsgId_ModRewardLoginChange, &pb.RewardLoginChangeAck{RewardLogin: rewardLogin.BuildMsgRewardLogin()})
}