go_dreamfactory/modules/dragon/api_lvitem.go
2023-11-21 16:07:51 +08:00

104 lines
3.2 KiB
Go

package dragon
import (
"go_dreamfactory/comm"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
)
//参数校验
func (this *apiComp) LvItemCheck(session comm.IUserSession, req *pb.DragonLvItemReq) (errdata *pb.ErrorData) {
if len(req.Oid) == 0 || req.Attribute == "" {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
}
return
}
func (this *apiComp) LvItem(session comm.IUserSession, req *pb.DragonLvItemReq) (errdata *pb.ErrorData) {
var (
err error
dragon *pb.DBDragon
curLvConf *cfg.GameDragonLvItemData // 当前道具加成
upLvConf *cfg.GameDragonLvItemData // 下一级道具加成
speed int32
chanegList []*pb.DBDragon
rsp *pb.DragonLvItemResp
update map[string]interface{}
conf *cfg.GameTrainlvData
)
update = make(map[string]interface{})
rsp = &pb.DragonLvItemResp{}
if errdata = this.LvItemCheck(session, req); errdata != nil {
return
}
if dragon, err = this.module.modelDragon.GetDragonByOid(session.GetUserId(), req.Oid); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
Message: err.Error(),
}
return
}
if conf, err = this.module.configure.GetDragonConfById(dragon.Dragonid, dragon.Lv); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound,
Title: pb.ErrorCode_ConfigNoFound.ToString(),
Message: err.Error(),
}
}
if conf.Type != 3 {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DragonNotAdultDdragon,
Title: pb.ErrorCode_DragonNotAdultDdragon.ToString(),
}
return
}
if _, ok := dragon.Lvitem[req.Attribute]; !ok { // 默认1级
dragon.Lvitem[req.Attribute] = 1
}
if curLvConf, err = this.module.configure.GetDragonLvItemConf(req.Attribute, dragon.Lvitem[req.Attribute]); err == nil {
if upLvConf, err = this.module.configure.GetDragonLvItemConf(req.Attribute, dragon.Lvitem[req.Attribute]+1); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DragonMaxLvItem,
Title: pb.ErrorCode_DragonMaxLvItem.ToString(),
Message: err.Error(),
}
return
}
if errdata = this.module.CheckRes(session, curLvConf.Item); errdata != nil { // 校验消耗
return
}
dragon.Lvitem[req.Attribute] += 1 // 升级
update["lvitem"] = dragon.Lvitem
dragon.Property[req.Attribute] += upLvConf.Num
update["property"] = dragon.Property
}
if speed > dragon.Property["etime"] { // 更新最大速度
dragon.Property["etime"] = speed
update["property"] = dragon.Property
}
rsp.Dragons = dragon
if errdata = this.module.ConsumeRes(session, curLvConf.Item, true); errdata != nil {
return
}
this.module.modelDragon.UpdateDragonData(session.GetUserId(), dragon.Id, update)
chanegList = append(chanegList, dragon)
session.SendMsg(string(this.module.GetType()), "change", &pb.DragonChangePush{
Dragons: chanegList,
})
session.SendMsg(string(this.module.GetType()), "lvitem", rsp)
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
this.module.WriteUserLog(session.GetUserId(), comm.GMResDelType, "DragonLvItemReq", curLvConf.Item) // 消耗资源
})
return
}