223 lines
7.1 KiB
Go
223 lines
7.1 KiB
Go
package equipment
|
|
|
|
import (
|
|
"fmt"
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/pb"
|
|
cfg "go_dreamfactory/sys/configure/structs"
|
|
"go_dreamfactory/utils"
|
|
)
|
|
|
|
// 参数校验
|
|
func (this *apiComp) EquipCheck(session comm.IUserSession, req *pb.EquipmentEquipReq) (errdata *pb.ErrorData) {
|
|
if len(req.EquipmentId) != 8 || req.HeroCardId == "" {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_ReqParameterError,
|
|
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// /英雄挂在装备 code 错误码信息 data 错误附加数据
|
|
func (this *apiComp) Equip(session comm.IUserSession, req *pb.EquipmentEquipReq) (errdata *pb.ErrorData) {
|
|
var (
|
|
err error
|
|
confs []*cfg.GameEquipData
|
|
suitconfs []*cfg.GameEquipSuitData
|
|
equipment *pb.DB_Equipment
|
|
equipments []*pb.DB_Equipment
|
|
updatequipment []*pb.DB_Equipment
|
|
suits []*pb.DB_EquipmentSuit
|
|
suit *pb.DB_EquipmentSuit
|
|
equipNum int32
|
|
minstar, minlv int32 = int32(99999), int32(99999)
|
|
hero *pb.DBHero
|
|
tasks []*pb.BuriedParam = make([]*pb.BuriedParam, 0)
|
|
)
|
|
|
|
if errdata = this.EquipCheck(session, req); errdata != nil {
|
|
return
|
|
}
|
|
//校验数据
|
|
confs = make([]*cfg.GameEquipData, len(req.EquipmentId))
|
|
suitconfs = make([]*cfg.GameEquipSuitData, len(req.EquipmentId))
|
|
equipments = make([]*pb.DB_Equipment, len(req.EquipmentId))
|
|
|
|
//获取英雄数据
|
|
if hero, errdata = this.module.ModuleHero.GetHeroByObjID(session.GetUserId(), req.HeroCardId); errdata != nil {
|
|
return
|
|
}
|
|
suits = make([]*pb.DB_EquipmentSuit, 0)
|
|
for i, v := range req.EquipmentId {
|
|
if v != "" {
|
|
equipNum++
|
|
if equipments[i], err = this.module.modelEquipment.QueryUserEquipmentsById(session.GetUserId(), v); err != nil {
|
|
this.module.Errorf("Equip_Check err:%v", err)
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_EquipmentOnFoundEquipment,
|
|
Title: pb.ErrorCode_EquipmentOnFoundEquipment.ToString(),
|
|
}
|
|
return
|
|
}
|
|
if equipments[i].HeroId != "" && hero.Id != equipments[i].HeroId { //装备已经有宿主了
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_EquipmentIsWorn,
|
|
Title: pb.ErrorCode_EquipmentIsWorn.ToString(),
|
|
Message: fmt.Sprintf("装备已穿戴 装备id:%s 英雄id:%s", hero.Id, equipments[i].HeroId),
|
|
}
|
|
return
|
|
}
|
|
|
|
if confs[i], err = this.module.configure.GetEquipmentConfigureById(equipments[i].CId); err != nil {
|
|
this.module.Errorf("Equip_Check err:%v", err)
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_ConfigNoFound,
|
|
Title: pb.ErrorCode_ConfigNoFound.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
|
|
if confs[i].Color < minstar {
|
|
minstar = confs[i].Color
|
|
}
|
|
if equipments[i].Lv < minlv {
|
|
minlv = equipments[i].Lv
|
|
}
|
|
if suitconfs[i], err = this.module.configure.getEquipSuit(confs[i].Suittype); err != nil {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_ConfigNoFound,
|
|
Title: pb.ErrorCode_ConfigNoFound.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
}
|
|
|
|
suit = nil
|
|
for _, _suit := range suits {
|
|
if _suit.Suitid == confs[i].Suittype && !_suit.Effect { //找到一个未生效的套装
|
|
suit = _suit
|
|
break
|
|
}
|
|
}
|
|
|
|
if suit == nil {
|
|
suit = &pb.DB_EquipmentSuit{
|
|
Suitid: confs[i].Suittype,
|
|
Eids: []string{v},
|
|
Str: confs[i].Color,
|
|
Lv: equipments[i].Lv,
|
|
Effect: false,
|
|
}
|
|
if len(suit.Eids) >= int(suitconfs[i].Suitnum) {
|
|
suit.Effect = true
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype93, 1, suit.Suitid, suit.Lv))
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype46, 1, suit.Str, suit.Suitid))
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype98, 1, suit.Lv))
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype169, 1, suit.Suitid))
|
|
}
|
|
suits = append(suits, suit)
|
|
} else {
|
|
suit.Eids = append(suit.Eids, v)
|
|
if suit.Str < confs[i].Color {
|
|
suit.Str = confs[i].Color
|
|
}
|
|
if suit.Lv < equipments[i].Lv {
|
|
suit.Lv = equipments[i].Lv
|
|
}
|
|
if !suit.Effect && len(suit.Eids) >= int(suitconfs[i].Suitnum) {
|
|
suit.Effect = true
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype93, 1, suit.Suitid, suit.Lv))
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype46, 1, suit.Str, suit.Suitid))
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype98, 1, suit.Lv))
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype169, 1, suit.Suitid))
|
|
}
|
|
}
|
|
|
|
} else {
|
|
equipments[i] = nil
|
|
}
|
|
}
|
|
|
|
//读取英雄原装备
|
|
for i, v := range hero.EquipID {
|
|
if v != "" {
|
|
if equipments[i] != nil && v != equipments[i].Id {
|
|
if equipment, err = this.module.modelEquipment.QueryUserEquipmentsById(session.GetUserId(), v); err != nil {
|
|
this.module.Errorf("Equip reader uid:%s equipment:%s err:%v", session.GetUserId(), v, err)
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_SystemError,
|
|
Title: pb.ErrorCode_SystemError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
equipment.HeroId = ""
|
|
equipments[i].HeroId = hero.Id
|
|
updatequipment = append(updatequipment, equipment, equipments[i])
|
|
} else if equipments[i] == nil {
|
|
if equipment, err = this.module.modelEquipment.QueryUserEquipmentsById(session.GetUserId(), v); err != nil {
|
|
this.module.Errorf("Equip reader uid:%s equipment:%s err:%v", session.GetUserId(), v, err)
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_SystemError,
|
|
Title: pb.ErrorCode_SystemError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
equipment.HeroId = ""
|
|
updatequipment = append(updatequipment, equipment)
|
|
}
|
|
} else {
|
|
if equipments[i] != nil {
|
|
equipments[i].HeroId = hero.Id
|
|
updatequipment = append(updatequipment, equipments[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
for i, v := range equipments { //校验装备位置
|
|
if v != nil {
|
|
if i != int(confs[i].Pos) {
|
|
this.module.Errorf("Equip conf:%+v Target:%d Incorrect range!", confs[i], i)
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_SystemError,
|
|
Title: pb.ErrorCode_SystemError.ToString(),
|
|
}
|
|
return
|
|
}
|
|
hero.EquipID[i] = v.Id
|
|
} else {
|
|
hero.EquipID[i] = ""
|
|
}
|
|
}
|
|
//重置套装数据
|
|
hero.Suits = suits
|
|
//更新装备数据加成
|
|
if errdata = this.module.ModuleHero.UpdateEquipment(session, hero, equipments); errdata != nil {
|
|
this.module.Errorf("Equip ModuleHero UpdateEquipment code%v", errdata)
|
|
return
|
|
}
|
|
//同步数据
|
|
if err = this.module.modelEquipment.UpdateByHeroId(session.GetUserId(), updatequipment...); err != nil {
|
|
this.module.Errorf("Equip err%v", err)
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_SystemError,
|
|
Title: pb.ErrorCode_SystemError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype41, equipNum, minstar))
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype42, equipNum, minstar))
|
|
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype5, equipNum, utils.ToInt32(hero.HeroID)))
|
|
|
|
if len(tasks) > 0 {
|
|
go this.module.ModuleBuried.TriggerBuried(session.GetUserId(), tasks...)
|
|
}
|
|
|
|
session.SendMsg(string(this.module.GetType()), "equip", &pb.EquipmentEquipResp{Equipments: updatequipment, Suits: suits})
|
|
return
|
|
}
|