HeroAction.go 1.66 KB
package action

import (
	"fmt"
	"github.com/golang/protobuf/proto"
	"go.mongodb.org/mongo-driver/bson"
	"pro2d/common/components"
	"pro2d/common/db/mongoproxy"
	"pro2d/common/logger"
	"pro2d/csvdata"
	"pro2d/models"
	"pro2d/pb"
)

/*
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
	}
	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
	}
	if req.Count <= 0 {
		req.Count = 1
	}

	item := csvdata.Get().TbItemData.Get(req.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
	}

	hero, ok := role.Heros[req.HeroId]
	if !ok {
		return 5, nil
	}

	if !role.CostItem(fmt.Sprintf("%d", item.ID), req.Count) {
		return 6, nil
	}

	h := hero.(*models.HeroModel)
	level, exp := h.UpLevel(itemExp.Exp)
	h.SetProperty("level", level)
	h.SetProperty("exp", exp)
	return 0, h.Hero
}