go_dreamfactory/modules/dragon/api_lvitem.go
2024-01-11 20:46:13 +08:00

115 lines
3.3 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 {
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 curLvConf, err = this.module.configure.GetDragonLvItemConf(dragon.Dragonid, dragon.Itemlv); err == nil {
if upLvConf, err = this.module.configure.GetDragonLvItemConf(dragon.Dragonid, dragon.Itemlv+1); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DragonMaxLvItem,
Title: pb.ErrorCode_DragonMaxLvItem.ToString(),
Message: err.Error(),
}
return
}
if curLvConf.Uplv > 0 {
if ok, _, _ := this.module.ModuleBuried.CheckCondition(session, curLvConf.Uplv); !ok {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_TaskNoFinished,
Title: pb.ErrorCode_TaskNoFinished.ToString(),
}
return
}
}
if errdata = this.module.CheckRes(session, curLvConf.Item); errdata != nil { // 校验消耗
return
}
dragon.Itemlv += 1 // 升级
update["itemlv"] = dragon.Itemlv
for pos, v := range upLvConf.Attribute {
dragon.Property[v] += upLvConf.Num[pos]
}
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(), req, comm.GMResDelType, "DragonLvItemReq", curLvConf.Item) // 消耗资源
})
return
}