// Package action 游戏服角色相关操作 package action import ( "fmt" "github.com/golang/protobuf/proto" "pro2d/common" "pro2d/common/components" "pro2d/common/db/mongoproxy" "pro2d/common/db/redisproxy" "pro2d/common/logger" "pro2d/models" "pro2d/pb" ) // HeartRpc 心跳请求 func HeartRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { //msg.Conn.SetLastHeartCheckTime() return 0, nil } // getRandomName 随机名字 func getRandomName() string { name := "" for { name = common.RandomName(common.DefaultName) if name == "" { continue } relay, err := redisproxy.SETNX(fmt.Sprintf(common.NickNames, name), "1") if err != nil { continue } if relay.(int64) == 1 { break } } return name } /* CreateRpc 创建角色请求 1: proto解析错误 2: 角色不存在 */ func CreateRpc(role1 *models.RoleModel, msg components.IMessage) (int32, interface{}) { req := pb.CreateReq{} if err := proto.Unmarshal(msg.GetData(), &req); err != nil { logger.Error("CreateRpc err: %v", err) return 1, err } role := models.RoleExistByUid(req.Token) if role != nil { return 2, "role exists" } roleId, err := common.GetNextRoleId() if err != nil { return 3, err } role = models.NewRole(roleId) role.Role.Uid = req.Token role.Role.Nick = getRandomName() if err := role.Create(); err != nil { logger.Error("CreateRpc role create err: %v", err) return 4, nil } role.InitRole() return 0, nil } // ChangeTeamRpc 阵容变换 func ChangeTeamRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { req := pb.ChangeTeamReq{} if err := proto.Unmarshal(msg.GetData(), &req); err != nil { logger.Error("loginRpc err: %v", err) return 1, nil } role.UpdateTeam(req.Team) return 0, nil } /* HeroEquipReferRpc 穿戴/脱 装备 2: 装备不存在 */ func HeroEquipReferRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { req := pb.HeroEquipReferReq{} if err := proto.Unmarshal(msg.GetData(), &req); err != nil { logger.Error("loginRpc err: %v", err) return 1, nil } e, ok := role.Equipments[req.EquipId] if !ok { return 2, nil } equip := e.(*models.EquipModel) // 装备未被穿戴 if equip.Equip.HeroId == "" { h, ok := role.Heros[req.HeroId] if ok { hero := h.(*models.HeroModel) hero.UpdateEquipment(equip.Equip.Id, equip.Equip.Type) } equip.SetProperty("heroid", req.HeroId) } else { //装备已经被穿戴 if req.HeroId != equip.Equip.HeroId { h, ok := role.Heros[equip.Equip.HeroId] if ok { hero := h.(*models.HeroModel) hero.UpdateEquipment(equip.Equip.Id, "") } h, ok = role.Heros[req.HeroId] if ok { hero := h.(*models.HeroModel) hero.UpdateEquipment(equip.Equip.Id, equip.Equip.Type) } equip.SetProperty("heroid", req.HeroId) } } return 0, nil } /* RoleClearItemsRpc 删除物品 2 删除失败 */ func RoleClearItemsRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { req := pb.RoleClearItemsReq{} if err := proto.Unmarshal(msg.GetData(), &req); err != nil { logger.Error("loginRpc err: %v", err) return 1, nil } if !role.CostItem(req.Id, req.Count) { logger.Error("cost err: %s, %d", req.Id, req.Count) return 2, nil } return 0, nil } /* EquipmentDelRpc 删除装备 2 删除失败 */ func EquipmentDelRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { req := pb.EquipmentDelReq{} if err := proto.Unmarshal(msg.GetData(), &req); err != nil { logger.Error("loginRpc err: %v", err) return 1, nil } if err := mongoproxy.DelOne("equipment", "id", req.Id); err != nil { logger.Error(err.Error()) return 2, nil } delete(role.Equipments, req.Id) return 0, nil }