66 lines
2.2 KiB
Go
66 lines
2.2 KiB
Go
package handler
|
|
|
|
import (
|
|
"ecs/proto"
|
|
"ecs/proto/pb"
|
|
"ecs/servers/game/logic"
|
|
"github.com/oylshe1314/framework/net"
|
|
)
|
|
|
|
func (this *PlayerHandler) AchievementRewardGet(player *logic.Player, msg *net.Message) {
|
|
var req = new(pb.AchievementRewardGetReq)
|
|
var err = msg.Read(req)
|
|
if err != nil {
|
|
this.Logger().Error("Read message failed, ", err)
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
return
|
|
}
|
|
|
|
if req.Id == 0 {
|
|
this.Logger().Error("Parameter error, req.Id == 0")
|
|
_ = player.TipNotice(proto.TipParameterError)
|
|
return
|
|
}
|
|
|
|
var achievementTable = this.tables.Achievement.Find1(int(req.Id))
|
|
if achievementTable == nil {
|
|
this.Logger().Error("Parameter or data tables error, Table 'Achievement' was not found, Id: ", req.Id)
|
|
_ = player.TipNotice(proto.TipDataTablesError)
|
|
return
|
|
}
|
|
|
|
var achievement = player.Achievement[uint32(achievementTable.Type)]
|
|
if achievement == nil {
|
|
this.Logger().Error("Server error, player reward active was not found, achievementType: ", achievementTable.Type)
|
|
_ = player.TipNotice(proto.TipRewardLoginNotFound)
|
|
return
|
|
}
|
|
|
|
var status = achievement.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 achievementTable.ItemIds {
|
|
_ = player.AddItem(uint32(achievementTable.ItemIds[i]), uint32(achievementTable.ItemNums[i]), logic.LogTypeItemObtainByLoginReward)
|
|
rewardList = append(rewardList, &pb.Item{ItemId: uint32(achievementTable.ItemIds[i]), ItemNum: uint32(achievementTable.ItemNums[i])})
|
|
}
|
|
|
|
achievement.RewardStatus[req.Id] = uint32(pb.AbleStatus_Already)
|
|
player.SaveModel(achievement)
|
|
|
|
_ = player.Send(pb.ModId_ModuleAchievement, pb.MsgId_ModAchievementRewardGet, &pb.AchievementRewardGetAck{Id: req.Id, ItemList: rewardList})
|
|
|
|
_ = player.Send(pb.ModId_ModuleReward, pb.MsgId_ModAchievementChange, &pb.AchievementChangeAck{Achievement: achievement.BuildMsgAchievement()})
|
|
}
|