209 lines
5.4 KiB
Go
209 lines
5.4 KiB
Go
package dragon
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/lego/core"
|
|
"go_dreamfactory/lego/sys/event"
|
|
"go_dreamfactory/modules"
|
|
"go_dreamfactory/pb"
|
|
"go_dreamfactory/sys/configure"
|
|
cfg "go_dreamfactory/sys/configure/structs"
|
|
"go_dreamfactory/sys/db"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
)
|
|
|
|
func NewModule() core.IModule {
|
|
m := new(Dragon)
|
|
return m
|
|
}
|
|
|
|
type Dragon struct {
|
|
modules.ModuleBase
|
|
service core.IService
|
|
api *apiComp
|
|
configure *configureComp
|
|
modelDragon *ModelDragon
|
|
}
|
|
|
|
// 模块名
|
|
func (this *Dragon) GetType() core.M_Modules {
|
|
return comm.ModuleDragon
|
|
}
|
|
|
|
// 模块初始化接口 注册用户创建角色事件
|
|
func (this *Dragon) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
|
|
if err = this.ModuleBase.Init(service, module, options); err != nil {
|
|
return
|
|
}
|
|
this.service = service
|
|
return
|
|
}
|
|
|
|
// 装备组件
|
|
func (this *Dragon) OnInstallComp() {
|
|
this.ModuleBase.OnInstallComp()
|
|
this.api = this.RegisterComp(new(apiComp)).(*apiComp)
|
|
this.modelDragon = this.RegisterComp(new(ModelDragon)).(*ModelDragon)
|
|
this.configure = this.RegisterComp(new(configureComp)).(*configureComp)
|
|
}
|
|
func (this *Dragon) Start() (err error) {
|
|
if err = this.ModuleBase.Start(); err != nil {
|
|
return
|
|
}
|
|
event.RegisterGO(comm.EventUserOffline, this.EventUserOffline)
|
|
return
|
|
}
|
|
|
|
// 获取坐骑列表
|
|
func (this *Dragon) GetDragonList(uid string) (list []*pb.DBDragon, err error) {
|
|
return this.modelDragon.GetDragonList(uid)
|
|
}
|
|
|
|
// 创建坐骑
|
|
func (this *Dragon) CreateDragon(session comm.IUserSession, dragons map[string]int32, bPush bool) (errdata *pb.ErrorData) {
|
|
return this.modelDragon.CreateDragon(session, dragons)
|
|
}
|
|
|
|
func (this *Dragon) CreateRobotDragon(dragonid string, lv int32) (dragon *pb.DBDragon, err error) {
|
|
var (
|
|
conf *cfg.GameTrainlvData
|
|
)
|
|
dragon = &pb.DBDragon{
|
|
Id: "",
|
|
Uid: "",
|
|
Dragonid: dragonid,
|
|
Lv: lv,
|
|
Exp: 0,
|
|
Property: map[string]int32{},
|
|
Play: map[int32]*pb.PlayData{},
|
|
Rtime: configure.Now().Unix(),
|
|
}
|
|
|
|
if conf, err = this.configure.GetDragonConfById(dragonid, lv); err != nil {
|
|
return
|
|
}
|
|
if c, err := this.configure.GetDragonMount(dragonid, 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["itemsprint"] = c.Itemsprint
|
|
dragon.Property["caddtime"] = c.Caddtime
|
|
dragon.Property["csubtime"] = c.Csubtime
|
|
}
|
|
return
|
|
}
|
|
|
|
func (this *Dragon) QueryBigDragonList(uid string) (dragon []*pb.DBDragon, err error) {
|
|
var (
|
|
list []*pb.DBDragon
|
|
)
|
|
|
|
if list, err = this.modelDragon.GetDragonList(uid); err != nil {
|
|
return
|
|
}
|
|
for _, v := range list {
|
|
if c, err := this.configure.GetDragonConfById(v.Dragonid, v.Lv); err == nil {
|
|
if c.Type == 3 {
|
|
dragon = append(dragon, v)
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func (this *Dragon) QueryDragonById(uid string, dragonid string) (dragon *pb.DBDragon, err error) {
|
|
var (
|
|
list []*pb.DBDragon
|
|
)
|
|
|
|
if list, err = this.modelDragon.GetDragonList(uid); err != nil {
|
|
return
|
|
}
|
|
for _, v := range list {
|
|
if v.Id == dragonid {
|
|
dragon = v
|
|
return
|
|
}
|
|
}
|
|
err = fmt.Errorf("not found dragon dragonid:%s", dragonid)
|
|
return
|
|
}
|
|
|
|
// 通过区服id 和唯一id 查询坐骑信息
|
|
func (this *Dragon) QueryDragonByTagAndOid(tag string, objId []string) (dragon []*pb.DBDragon, err error) {
|
|
var (
|
|
conn *db.DBConn
|
|
model *db.DBModel
|
|
cursor *mongo.Cursor
|
|
)
|
|
if conn, err = db.ServerDBConn(tag); err != nil {
|
|
return
|
|
}
|
|
dragon = make([]*pb.DBDragon, 0)
|
|
model = db.NewDBModel(this.modelDragon.TableName, conn)
|
|
|
|
result := make([]bson.M, 0)
|
|
|
|
for _, v := range objId {
|
|
result = append(result, bson.M{"_id": v})
|
|
}
|
|
if cursor, err = model.DB.Find(core.SqlTable(this.modelDragon.TableName), bson.M{"$or": result}); err != nil {
|
|
this.Errorln(err)
|
|
return
|
|
}
|
|
for cursor.Next(context.Background()) {
|
|
temp := &pb.DBDragon{}
|
|
if err = cursor.Decode(temp); err != nil {
|
|
this.Errorln(err)
|
|
continue
|
|
}
|
|
dragon = append(dragon, temp)
|
|
}
|
|
return
|
|
}
|
|
|
|
// gm 修改龙等级
|
|
func (this *Dragon) GMModifyDragonLv(uid string, cid string, lv int32) (dragon *pb.DBDragon, err error) {
|
|
dragons, _ := this.modelDragon.GetDragonList(uid)
|
|
for _, v := range dragons {
|
|
if v.Dragonid == cid {
|
|
update := make(map[string]interface{}, 0)
|
|
v.Lv = lv
|
|
if conf, err := this.configure.GetDragonConfById(cid, lv); err == nil {
|
|
if c, err := this.configure.GetDragonMount(cid, 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
|
|
update["property"] = dragon.Property
|
|
}
|
|
}
|
|
update["lv"] = lv
|
|
this.modelDragon.UpdateDragonData(uid, v.Id, update)
|
|
dragon = v
|
|
return
|
|
}
|
|
|
|
}
|
|
err = fmt.Errorf("not found config:%s", cid)
|
|
return
|
|
}
|
|
func (this *Dragon) EventUserOffline(uid, sessionid string) {
|
|
this.modelDragon.BatchDelLists(uid)
|
|
}
|