go_dreamfactory/modules/equipment/api_equip.go
2023-06-08 21:15:54 +08:00

238 lines
7.7 KiB
Go

package equipment
import (
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
"go_dreamfactory/utils"
"math"
)
//参数校验
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
equipment *pb.DB_Equipment
equipments []*pb.DB_Equipment
updatequipment []*pb.DB_Equipment
equipNum int32
// equipStr map[int32]int32 = make(map[int32]int32)
// equipLv map[int32]int32 = make(map[int32]int32)
minstr int32 = 9999
minlv int32 = 9999
hero *pb.DBHero
suite1Str, suite1Lv, suite2Str, suite2Lv int32 = math.MaxInt32, math.MaxInt32, math.MaxInt32, math.MaxInt32
tasks []*pb.BuriedParam = make([]*pb.BuriedParam, 0)
)
if errdata = this.EquipCheck(session, req); errdata != nil {
return
}
//校验数据
confs = make([]*cfg.GameEquipData, 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
}
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 minlv > equipments[i].Lv {
minlv = equipments[i].Lv
}
// equipLv[equipments[i].Lv]++
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 minstr > confs[i].InitLv {
minstr = confs[i].InitLv
}
// equipStr[confs[i].Star]++
if i < 4 {
if confs[i].InitLv < suite1Str {
suite1Str = confs[i].InitLv
}
if equipments[i].Lv < suite1Lv {
suite1Lv = equipments[i].Lv
}
} else if i < 6 {
if confs[i].InitLv < suite2Str {
suite2Str = confs[i].InitLv
}
if equipments[i].Lv < suite2Lv {
suite2Lv = equipments[i].Lv
}
}
} 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])
}
}
}
msuit := true
subsit := true
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(),
Message: err.Error(),
}
return
}
hero.EquipID[i] = v.Id
} else {
if i < 4 {
msuit = false //主套装没有
} else if i < 6 {
subsit = false //辅套装没有
}
hero.EquipID[i] = ""
}
}
if msuit { //前4个位置都有装备 判断是否存在套装
if confs[0].Suittype == confs[1].Suittype &&
confs[1].Suittype == confs[2].Suittype &&
confs[2].Suittype == confs[3].Suittype {
hero.SuiteId = confs[0].Suittype
hero.Suite1Star = suite1Str
hero.Suite1Lv = suite1Lv
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype93, 1, hero.SuiteId, suite1Lv))
}
} else {
hero.SuiteId = 0
hero.Suite1Star = 0
hero.Suite1Lv = 0
}
if subsit { //后2个位置都有装备 判断是否存在套装
if confs[4].Suittype == confs[5].Suittype {
hero.SuiteExtId = confs[4].Suittype
hero.Suite2Star = suite2Str
hero.Suite2Lv = suite2Lv
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype93, 1, hero.SuiteExtId, suite2Lv))
}
} else {
hero.SuiteExtId = 0
hero.Suite2Star = 0
hero.Suite2Lv = 0
}
//更新装备数据加成
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.Rtype5, equipNum, utils.ToInt32(hero.HeroID)))
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype41, 1, equipNum, minstr))
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype42, 1, equipNum, minlv))
if hero.SuiteId != 0 {
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype46, 1, hero.Suite1Star, hero.SuiteId))
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype49, 1, hero.Suite1Star, hero.Suite1Lv))
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype98, 1, hero.Suite1Lv))
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype169, 1, hero.SuiteId))
}
if hero.SuiteExtId != 0 {
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype46, 1, hero.Suite2Star, hero.SuiteExtId))
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype48, 1, hero.Suite2Star, hero.Suite2Lv))
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype98, 1, hero.Suite1Lv))
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype169, 1, hero.SuiteId))
}
if len(tasks) > 0 {
go this.module.ModuleBuried.TriggerBuried(session.GetUserId(), tasks...)
}
session.SendMsg(string(this.module.GetType()), "equip", &pb.EquipmentEquipResp{Equipments: updatequipment})
return
}