package action import ( "fmt" "github.com/golang/protobuf/proto" "go.mongodb.org/mongo-driver/bson" "pro2d/common" "pro2d/common/components" "pro2d/common/db/mongoproxy" "pro2d/common/logger" "pro2d/csvdata" "pro2d/models" "pro2d/pb" "strconv" ) /* HeroEquipReferRpc 穿戴/脱 装备 2: 装备不存在 */ func HeroEquipReferRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { req := pb.HeroEquipReferRar{} if err := proto.Unmarshal(msg.GetData(), &req); err != nil { logger.Error("loginRpc err: %v", err) return 1, nil } for _, equipInfo := range req.EquipIds { ret := role.EquipmentRefer(equipInfo.EquipId, req.HeroId, req.Refer, equipInfo.Pos) if ret != 0 { logger.Error("ret: %d, equipId: %s, heroId: %s, refer: %d, pos:%d", ret, equipInfo.EquipId, req.HeroId, req.Refer, equipInfo.Pos) } } return 0, nil } /* EquipmentDelRpc 删除装备 2 删除失败 */ func EquipmentDelRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { req := pb.EquipmentDelRar{} if err := proto.Unmarshal(msg.GetData(), &req); err != nil { logger.Error("loginRpc err: %v", err) return 1, nil } filter := bson.D{{"id", bson.D{{"$in", req.Id}}}} if err := mongoproxy.DelMany("equipment", filter); err != nil { logger.Error(err.Error()) return 2, nil } for _, id := range req.Id { delete(role.Equipments, id) } return 0, nil } /* HeroUpLevelRpc 英雄升级 2 item 不存在 3 itemType 错误 4 itemExp 不存在 5 英雄不存在 6 消耗物品失败 */ func HeroUpLevelRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { req := pb.HeroUpLevelReq{} if err := proto.Unmarshal(msg.GetData(), &req); err != nil { logger.Error("loginRpc err: %v", err) return 1, nil } items := common.StringToMapNum(req.Items) var hero *models.HeroModel for id, count := range items { itemId, err := strconv.Atoi(id) if err != nil { continue } item := csvdata.Get().TbItemData.Get(int32(itemId)) if item == nil { return 2, nil } if item.Type != 2003 { return 3, nil } itemExp := csvdata.Get().TbExpItemData.Get(item.ID) if itemExp == nil { return 4, nil } h := role.Heros[req.HeroId] if h == nil { return 5, nil } if !role.CostItem(fmt.Sprintf("%d", item.ID), count, &pb.LogConf{Desc: "hero_action"}) { return 6, nil } hero = h.(*models.HeroModel) level, exp := hero.UpLevel(itemExp.Exp * count) h.SetProperty("level", level) h.SetProperty("exp", exp) } return 0, &pb.HeroUpLevelRsp{Hero: hero.Data} }