HeroAction.go 1.88 KB
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"
)

/*
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) {
			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}
}