go_dreamfactory/modules/parkour/match.go
2023-10-24 11:47:42 +08:00

118 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(v *pb.DBMatchPlayer) (err error) {
data, _ := anypb.New(v)
err = this.module.service.RpcCall(
context.Background(),
comm.Service_Mainte,
string(comm.RPC_JoinMatchPools),
&pb.JoinMatchPoolReq{
Poolname: this.PoolName,
Uid: v.Suser.Uid,
Data: data,
Matchnum: 6,
Timeout: 10,
},
&pb.JoinMatchPoolResp{})
if err != nil {
this.module.Errorln(err)
return
}
return
}
func (this *matchComp) MatchNotic(players map[string]interface{}) (err error) {
var (
playerSlice []*pb.DBMatchPlayer
red []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0, 3)
bule []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0, 3)
ais []*pb.DBRaceMember = make([]*pb.DBRaceMember, 0, 6)
n int32
dan int32
leftnum int32
)
playerSlice = make([]*pb.DBMatchPlayer, 0, len(players))
for _, v := range players {
playerSlice = append(playerSlice, v.(*pb.DBMatchPlayer))
}
for i, v := range playerSlice {
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()})
return
}
if len(red) < 3 {
n = 3 - int32(len(red))
red = append(red, ais[0:n]...)
ais = ais[n:]
}
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()})
}
return
}