124 lines
4.0 KiB
Go
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()})
|
|
}
|