go_dreamfactory/modules/parkour/match.go
2023-10-23 16:41:21 +08:00

119 lines
2.7 KiB
Go

package parkour
import (
"context"
"go_dreamfactory/comm"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"google.golang.org/protobuf/types/known/anypb"
)
/*
匹配组件
*/
type matchComp struct {
modules.MCompMatch
service core.IService
module *Parkour
}
//组件初始化接口
func (this *matchComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
this.MCompMatch.Init(service, module, comp, options)
this.module = module.(*Parkour)
this.service = service
this.PoolName = "parkour"
return
}
func (this *matchComp) Start() (err error) {
err = this.MCompMatch.Start()
return
}
func (this *matchComp) MatchReq(player *pb.DBMatchPlayer) (err error) {
data, _ := anypb.New(player)
err = this.module.service.RpcCall(
context.Background(),
comm.Service_Mainte,
string(comm.RPC_JoinMatchPools),
&pb.JoinMatchPoolReq{
Poolname: this.PoolName,
Uid: player.Suser.Uid,
Data: data,
Matchnum: 6,
Timeout: 10,
},
&pb.JoinMatchPoolResp{})
if err != nil {
this.module.Errorln(err)
return
}
return
}
func (this *matchComp) MatchNotic(players []*pb.DBMatchPlayer) (errdata *pb.ErrorData) {
var (
red []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0, 3)
bule []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0, 3)
ais []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0, 6)
dan int32
leftnum int32
err error
)
for i, v := range players {
if i%2 == 0 {
red = append(red, &pb.DBRaceMember{
User: v.Suser,
Dan: v.Dan,
Mlv: v.Mlv,
Mount: v.Mount,
Property: v.Property,
Currhp: v.Property[comm.Dhp],
})
dan = v.Dan
} else {
bule = append(bule, &pb.DBRaceMember{
User: v.Suser,
Dan: v.Dan,
Mlv: v.Mlv,
Mount: v.Mount,
Property: v.Property,
Currhp: v.Property[comm.Dhp],
})
dan = v.Dan
}
}
leftnum = 6 - int32(len(players))
if leftnum > 0 {
if ais, err = this.module.parkourComp.matcheAI(dan, leftnum); err != nil {
this.module.Error("matcheAI err!", log.Field{Key: "key", Value: err.Error()})
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound,
Message: err.Error(),
}
return
}
if len(red) < 3 {
red = append(red, ais[0:3-len(red)]...)
ais = ais[3-len(red):]
}
if len(bule) < 3 {
bule = append(bule, ais[0:3-len(bule)]...)
}
}
if err = this.module.createbattle(red, bule); err != nil {
this.module.Error("createbattle err!", log.Field{Key: "key", Value: err.Error()})
errdata = &pb.ErrorData{
Code: pb.ErrorCode_SystemError,
Message: err.Error(),
}
}
return
}