100 lines
3.2 KiB
Go
100 lines
3.2 KiB
Go
package battle
|
|
|
|
import (
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/lego/core"
|
|
"go_dreamfactory/lego/sys/log"
|
|
"go_dreamfactory/modules"
|
|
"go_dreamfactory/pb"
|
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.mongodb.org/mongo-driver/x/bsonx"
|
|
)
|
|
|
|
///数据组件
|
|
type modelBattleComp struct {
|
|
modules.MCompModel
|
|
module *Battle
|
|
}
|
|
|
|
//组件初始化接口
|
|
func (this *modelBattleComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, opt core.IModuleOptions) (err error) {
|
|
this.TableName = comm.TableForum
|
|
this.MCompModel.Init(service, module, comp, opt)
|
|
this.module = module.(*Battle)
|
|
this.TableName = "battle"
|
|
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
|
|
Keys: bsonx.Doc{{Key: "heroid", Value: bsonx.Int32(1)}},
|
|
})
|
|
return
|
|
}
|
|
|
|
//查询战斗记录
|
|
func (this *modelBattleComp) queryrecord(oid string) (record *pb.DBBattleRecord, err error) {
|
|
record = &pb.DBBattleRecord{}
|
|
if err = this.Get(oid, record); err != nil {
|
|
this.module.Errorln(err)
|
|
}
|
|
return
|
|
}
|
|
|
|
//创建pve 战斗记录
|
|
func (this *modelBattleComp) createpve(session comm.IUserSession, btype pb.BattleType, req *pb.BattlePVEReq) (record *pb.DBBattleRecord, code pb.ErrorCode) {
|
|
record = &pb.DBBattleRecord{
|
|
Id: primitive.NewObjectID().Hex(),
|
|
Btype: btype,
|
|
Ptype: req.Ptype,
|
|
State: pb.BBattleState_in,
|
|
RedCompId: session.GetUserId(),
|
|
Redflist: make([]*pb.DBBattleFormt, 1),
|
|
BlueCompId: "",
|
|
Buleflist: make([]*pb.DBBattleFormt, len(req.Mformat)),
|
|
}
|
|
record.Redflist[0] = &pb.DBBattleFormt{
|
|
Leadpos: req.Leadpos,
|
|
Team: make([]*pb.DBHero, len(req.Teamids)),
|
|
}
|
|
for i, v := range req.Teamids {
|
|
if record.Redflist[0].Team[i], code = this.module.ModuleHero.GetHeroByObjID(session.GetUserId(), v); code != pb.ErrorCode_Success {
|
|
return
|
|
}
|
|
}
|
|
|
|
for i, v := range req.Mformat {
|
|
if mf, err := this.module.configure.GetMonsterFormat(v); err != nil {
|
|
code = pb.ErrorCode_ConfigNoFound
|
|
return
|
|
} else {
|
|
record.Buleflist[i] = &pb.DBBattleFormt{
|
|
Leadpos: mf.CaptainId,
|
|
Team: make([]*pb.DBHero, len(req.Teamids)),
|
|
}
|
|
for i1, v1 := range mf.MonsterList {
|
|
if v1 == -1 {
|
|
record.Buleflist[i].Team[i1] = nil
|
|
} else {
|
|
if monst, err := this.module.configure.GetMonster(v1); err != nil {
|
|
code = pb.ErrorCode_ConfigNoFound
|
|
} else {
|
|
if record.Buleflist[i].Team[i1] = this.module.ModuleHero.CreateMonster(monst.HeroId, monst.Star, mf.Lv); record.Buleflist[i].Team[i1] == nil {
|
|
log.Error("on found battle req data", log.Field{Key: "HeroId", Value: monst.HeroId})
|
|
code = pb.ErrorCode_ReqParameterError
|
|
return
|
|
} else {
|
|
record.Buleflist[i].Team[i1].Property[comm.Hp] = int32(float32(record.Buleflist[i].Team[i1].Property[comm.Hp]) * mf.Hppro)
|
|
record.Buleflist[i].Team[i1].Property[comm.Atk] = int32(float32(record.Buleflist[i].Team[i1].Property[comm.Atk]) * mf.Atkpro)
|
|
record.Buleflist[i].Team[i1].Property[comm.Def] = int32(float32(record.Buleflist[i].Team[i1].Property[comm.Def]) * mf.Defpro)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// if err := this.Add(record.Id, record); err != nil {
|
|
// this.module.Errorln(err)
|
|
// return
|
|
// }
|
|
return
|
|
}
|