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