ecs/servers/game/handler/player_achievement.go

66 lines
2.2 KiB
Go
Raw Permalink Normal View History

2025-06-04 18:17:39 +08:00
package handler
2025-07-16 10:05:22 +08:00
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()})
}