118 lines
2.7 KiB
Go
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
|
|
}
|