package handler import ( "ecs/proto" "ecs/proto/pb" "ecs/servers/game/logic" "github.com/oylshe1314/framework/net" ) func (this *PlayerHandler) ItemUse(player *logic.Player, msg *net.Message) { var req = new(pb.ItemUseReq) var err = msg.Read(req) if err != nil { this.logger.Error("Read message failed, ", err) _ = player.TipNotice(proto.TipMessageError) return } if req.ItemId == 0 || req.ItemNum == 0 { _ = player.TipNotice(proto.TipParameterError) return } var item = player.Item[req.ItemId] if item == nil { _ = player.TipNotice(proto.TipItemNotFound) return } } func (this *PlayerHandler) EquipUpgrade(player *logic.Player, msg *net.Message) { var req = new(pb.EquipUpgradeReq) var err = msg.Read(req) if err != nil { this.logger.Error("Read message failed, ", err) _ = player.TipNotice(proto.TipMessageError) return } if req.EquipUid == 0 { this.logger.Error("Parameter error, req.EquipUid == 0") _ = player.TipNotice(proto.TipParameterError) return } if req.Times != 1 && req.Times != 5 { this.logger.Error("Parameter error, req.Level: ", req.Times) _ = player.TipNotice(proto.TipParameterError) return } var equip = player.Equip[req.EquipUid] if equip == nil { _ = player.TipNotice(proto.TipEquipNotFound) return } var equipTable = this.tables.Equip.Get(int(equip.Id)) if equipTable == nil { _ = player.TipNotice(proto.TipDataTablesError) return } if equip.Level >= uint32(equipTable.Levels) { _ = player.TipNotice(proto.TipLevelAlreadyMax) return } var level = equip.Level var consumeItems = map[uint32]uint32{} levelLoop: for range req.Times { var equipLevelTable = this.tables.EquipLevel.Find3(int(equip.Id), int(equip.Level)) if equipLevelTable == nil { _ = player.TipNotice(proto.TipDataTablesError) return } for i := range equipLevelTable.ConsumeItems { if ok, _ := player.CheckItem(uint32(equipLevelTable.ConsumeItems[i]), consumeItems[uint32(equipLevelTable.ConsumeItems[i])]+uint32(equipLevelTable.ConsumeNums[i])); !ok { break levelLoop } consumeItems[uint32(equipLevelTable.ConsumeItems[i])] += uint32(equipLevelTable.ConsumeNums[i]) } level += 1 } if level == equip.Level { return } equip.Level = level for itemId, itemNum := range consumeItems { player.ReduceItem(itemId, itemNum, logic.LogTypeItemConsumeByEquipUpgrade) } _ = player.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemEquipChange), pb.EquipChangeListAck{ ChangeList: []*pb.EquipChange{{Equip: equip.BuildMsgEquip(), ChangeType: pb.ChangeType_Add}}, }) return } func (this *PlayerHandler) EquipRefine(player *logic.Player, msg *net.Message) { var req = new(pb.EquipUpgradeReq) var err = msg.Read(req) if err != nil { this.logger.Error("Read message failed, ", err) _ = player.TipNotice(proto.TipMessageError) return } if req.EquipUid == 0 { this.logger.Error("Parameter error, req.EquipUid == 0") _ = player.TipNotice(proto.TipParameterError) return } }