217 lines
5.9 KiB
Go
217 lines
5.9 KiB
Go
package dragon
|
|
|
|
import (
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/lego/core"
|
|
"go_dreamfactory/modules"
|
|
"go_dreamfactory/pb"
|
|
"go_dreamfactory/sys/configure"
|
|
"go_dreamfactory/sys/db"
|
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.mongodb.org/mongo-driver/x/bsonx"
|
|
)
|
|
|
|
type ModelDragon struct {
|
|
modules.MCompModel
|
|
module *Dragon
|
|
}
|
|
|
|
func (this *ModelDragon) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
|
this.TableName = comm.TableDragon
|
|
err = this.MCompModel.Init(service, module, comp, options)
|
|
this.module = module.(*Dragon)
|
|
// 通过uid创建索引
|
|
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
|
|
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
|
|
})
|
|
return
|
|
}
|
|
|
|
// 获取一个新的坐骑
|
|
func (this *ModelDragon) CreateDragon(session comm.IUserSession, dragons map[string]int32) (errdata *pb.ErrorData) {
|
|
var (
|
|
dbModel *db.DBModel
|
|
err error
|
|
dragon *pb.DBDragon
|
|
chanegList []*pb.DBDragon
|
|
bNewDragon bool // 是否是新的坐骑
|
|
)
|
|
dragonList := make([]*pb.DBDragon, 0)
|
|
uid := session.GetUserId()
|
|
if db.IsCross() {
|
|
if dbModel, err = this.module.GetDBModelByUid(uid, this.TableName); err != nil {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_DBError,
|
|
Title: pb.ErrorCode_DBError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
}
|
|
if dbModel != nil {
|
|
err = dbModel.GetList(uid, &dragonList)
|
|
} else {
|
|
err = this.GetList(uid, &dragonList)
|
|
}
|
|
if err != nil {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_DBError,
|
|
Title: pb.ErrorCode_DBError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
this.module.Errorf("err:%v", err)
|
|
return
|
|
}
|
|
for dragonCfgId, lv := range dragons {
|
|
bNewDragon = true
|
|
if lv <= 0 {
|
|
return
|
|
}
|
|
if _, err = this.module.configure.GetDragonConfById(dragonCfgId, 1); err != nil {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_ConfigNoFound, // 配置没找到
|
|
Title: pb.ErrorCode_ConfigNoFound.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
|
|
dragon = &pb.DBDragon{
|
|
Id: primitive.NewObjectID().Hex(),
|
|
Uid: uid,
|
|
Dragonid: dragonCfgId,
|
|
Lv: lv,
|
|
Exp: 0,
|
|
Property: map[string]int32{},
|
|
Play: map[int32]*pb.PlayData{},
|
|
Rtime: configure.Now().Unix(),
|
|
Itemlv: 1,
|
|
}
|
|
for _, obj := range dragonList {
|
|
if obj.Dragonid == dragonCfgId { // 重复获得 直接返回
|
|
dragon.Id = obj.Id
|
|
bNewDragon = false
|
|
update := make(map[string]interface{}, 0)
|
|
update["lv"] = lv // 更新等级
|
|
if err = this.UpdateDragonData(session.GetUserId(), obj.Id, update); err != nil {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_DBError, // 配置没找到
|
|
Title: pb.ErrorCode_DBError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
return
|
|
}
|
|
break
|
|
}
|
|
}
|
|
if conf, err := this.module.configure.GetDragonConfById(dragonCfgId, lv); err == nil {
|
|
if c, err := this.module.configure.GetDragonMount(dragonCfgId, conf.Type); err == nil {
|
|
dragon.Property["stime"] = c.Stime
|
|
dragon.Property["etime"] = c.Etime
|
|
dragon.Property["hp"] = c.Hp
|
|
dragon.Property["moderate"] = c.Moderate
|
|
dragon.Property["sprint"] = c.Sprint
|
|
dragon.Property["acceleration"] = c.Acceleration
|
|
dragon.Property["deceleration"] = c.Deceleration
|
|
dragon.Property["energyrecover"] = c.Energyrecover
|
|
dragon.Property["caddtime"] = c.Caddtime
|
|
dragon.Property["csubtime"] = c.Csubtime
|
|
dragon.Property["offsetspeed"] = c.Offsetspeed
|
|
dragon.Property["offsetspeed"] = c.Offsetspeed
|
|
}
|
|
}
|
|
|
|
if bNewDragon {
|
|
if dbModel != nil {
|
|
err = dbModel.AddList(uid, dragon.Id, dragon)
|
|
} else {
|
|
err = this.AddList(uid, dragon.Id, dragon)
|
|
}
|
|
} else {
|
|
update := make(map[string]interface{}, 0)
|
|
update["property"] = dragon.Property
|
|
if dbModel != nil {
|
|
err = dbModel.ChangeList(uid, dragon.Id, update)
|
|
} else {
|
|
err = this.ChangeList(uid, dragon.Id, update)
|
|
}
|
|
}
|
|
|
|
if err != nil {
|
|
errdata = &pb.ErrorData{
|
|
Code: pb.ErrorCode_DBError,
|
|
Title: pb.ErrorCode_DBError.ToString(),
|
|
Message: err.Error(),
|
|
}
|
|
this.module.Errorf("err:%v", err)
|
|
return
|
|
}
|
|
}
|
|
chanegList = append(chanegList, dragon)
|
|
session.SendMsg(string(this.module.GetType()), "change", &pb.DragonChangePush{
|
|
Dragons: chanegList,
|
|
})
|
|
return
|
|
}
|
|
|
|
// 获取坐骑列表
|
|
func (this *ModelDragon) GetDragonList(uid string) (dragon []*pb.DBDragon, err error) {
|
|
dragon = make([]*pb.DBDragon, 0)
|
|
if db.IsCross() {
|
|
if dbModel, err1 := this.module.GetDBModelByUid(uid, this.TableName); err1 == nil {
|
|
if err = dbModel.GetList(uid, &dragon); err != nil {
|
|
this.module.Errorf("err:%v", err)
|
|
return
|
|
}
|
|
} else {
|
|
this.module.Errorln(err) // 获取跨服对象失败
|
|
return
|
|
}
|
|
} else {
|
|
if err = this.GetList(uid, &dragon); err != nil {
|
|
this.module.Errorf("err:%v", err)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func (this *ModelDragon) UpdateDragonData(uid string, oid string, data map[string]interface{}) (err error) {
|
|
if db.IsCross() {
|
|
if dbModel, err1 := this.module.GetDBModelByUid(uid, this.TableName); err1 == nil {
|
|
if err = dbModel.ChangeList(uid, oid, data); err != nil {
|
|
this.module.Errorf("err:%v", err)
|
|
return
|
|
}
|
|
} else {
|
|
this.module.Errorln(err) // 获取跨服对象失败
|
|
return
|
|
}
|
|
} else {
|
|
if err = this.ChangeList(uid, oid, data); err != nil {
|
|
this.module.Errorf("err:%v", err)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func (this *ModelDragon) GetDragonByOid(uid string, oid string) (dragon *pb.DBDragon, err error) {
|
|
dragon = &pb.DBDragon{}
|
|
if db.IsCross() {
|
|
if dbModel, err1 := this.module.GetDBModelByUid(uid, this.TableName); err1 == nil {
|
|
if err = dbModel.GetListObj(uid, oid, dragon); err != nil {
|
|
this.module.Errorf("err:%v", err)
|
|
}
|
|
} else {
|
|
this.module.Errorln(err) // 获取跨服对象失败
|
|
return
|
|
}
|
|
} else {
|
|
if err = this.GetListObj(uid, oid, dragon); err != nil {
|
|
this.module.Errorf("err:%v", err)
|
|
}
|
|
}
|
|
return
|
|
}
|