This commit is contained in:
meixiongfeng 2023-08-31 16:38:29 +08:00
commit 24d71fee78
9 changed files with 168 additions and 12 deletions

View File

@ -645,7 +645,7 @@ type (
} }
//战斗记录模块 //战斗记录模块
IBattleRecord interface { IBattleRecord interface {
WrietBattleRecord(uid string, report *pb.BattleReport) WrietBattleRecord(uid string, report *pb.BattleReport, expire int64)
} }
IDragon interface { IDragon interface {
//获取玩家坐骑列表 //获取玩家坐骑列表

View File

@ -9,6 +9,7 @@ import (
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo"
mgooptions "go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/x/bsonx" "go.mongodb.org/mongo-driver/x/bsonx"
) )
@ -25,6 +26,11 @@ func (this *modelComp) Init(service core.IService, module core.IModule, comp cor
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
}) })
indexModel := mongo.IndexModel{
Keys: bson.M{"expireAt": 1}, // 设置TTL索引列"expire_date"
Options: mgooptions.Index().SetExpireAfterSeconds(0), // 设置过期时间(单位:秒)
}
_, err = this.DB.CreateIndex(core.SqlTable(this.TableName), indexModel) //设置 验证码过期时间索引
return return
} }

View File

@ -50,7 +50,7 @@ func (this *BattleRecord) Start() (err error) {
} }
//写入战斗记录 //写入战斗记录
func (this *BattleRecord) WrietBattleRecord(uid string, report *pb.BattleReport) { func (this *BattleRecord) WrietBattleRecord(uid string, report *pb.BattleReport, expire int64) {
var ( var (
result *pb.DBBattlePlayRecord result *pb.DBBattlePlayRecord
model *recordModel model *recordModel
@ -62,8 +62,9 @@ func (this *BattleRecord) WrietBattleRecord(uid string, report *pb.BattleReport)
return return
} }
result = &pb.DBBattlePlayRecord{ result = &pb.DBBattlePlayRecord{
Id: report.Info.Id, Id: report.Info.Id,
Record: data, Record: data,
ExpireAt: expire,
} }
if model, err = this.model.getrecordModel(uid); err != nil { if model, err = this.model.getrecordModel(uid); err != nil {
this.Errorln(err) this.Errorln(err)

View File

@ -7,6 +7,7 @@ import (
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/configure" "go_dreamfactory/sys/configure"
cfg "go_dreamfactory/sys/configure/structs" cfg "go_dreamfactory/sys/configure/structs"
"time"
) )
// 参数校验 // 参数校验
@ -184,7 +185,7 @@ func (this *apiComp) ChallengeFinish(session comm.IUserSession, req *pb.GuildGve
} }
} }
//写入战斗记录 //写入战斗记录
go this.module.battlerecord.WrietBattleRecord(session.GetUserId(), req.Report) go this.module.battlerecord.WrietBattleRecord(session.GetUserId(), req.Report, time.Now().Add(time.Hour*24*8).Unix())
session.SendMsg(string(this.module.GetType()), "challengefinish", &pb.GuildGveChallengeFinishResp{ session.SendMsg(string(this.module.GetType()), "challengefinish", &pb.GuildGveChallengeFinishResp{
Guildid: req.Guildid, Guildid: req.Guildid,
Boosid: req.Boosid, Boosid: req.Boosid,

View File

@ -0,0 +1,59 @@
package robot
import (
"errors"
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
"google.golang.org/protobuf/proto"
)
//用户模块 机器人
type ModuleRobot_Chat struct {
}
func (this *ModuleRobot_Chat) Init() (err error) {
return
}
//接收到消息
func (this *ModuleRobot_Chat) Receive(robot IRobot, stype string, message proto.Message) (err error) {
switch stype {
}
return
}
//机器人执行流
func (this *ModuleRobot_Chat) DoPipeline(robot IRobot) (err error) {
return
}
//做任务
func (this *ModuleRobot_Chat) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
var (
errdata *pb.ErrorData
)
switch comm.TaskType(condconf.Type) {
case comm.Rtype62:
var (
usermodule *ModuleRobot_User
)
usermodule = robot.GetModule(comm.ModuleUser).(*ModuleRobot_User)
if _, errdata = robot.SendMessage("chat", "send", &pb.ChatSendReq{
Avatar: usermodule.user.Avatar,
Uname: usermodule.user.Name,
Ulv: usermodule.user.Lv,
Channel: pb.ChatChannel_World,
Ctype: pb.ChatType_Text,
Content: fmt.Sprintf("你好!我是%s", robot.Account()),
}); errdata != nil {
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
return
}
}
return
}

View File

@ -0,0 +1,74 @@
package robot
import (
"errors"
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
"google.golang.org/protobuf/proto"
)
//用户模块 机器人
type ModuleRobot_Shop struct {
goods map[pb.ShopType][]*pb.ShopItem
}
func (this *ModuleRobot_Shop) Init() (err error) {
this.goods = make(map[pb.ShopType][]*pb.ShopItem)
return
}
//接收到消息
func (this *ModuleRobot_Shop) Receive(robot IRobot, stype string, message proto.Message) (err error) {
switch stype {
case "getlist":
resp := message.(*pb.ShopGetListResp)
this.goods[resp.SType] = resp.Goods
break
}
return
}
//机器人执行流
func (this *ModuleRobot_Shop) DoPipeline(robot IRobot) (err error) {
return
}
//做任务
func (this *ModuleRobot_Shop) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
var (
errdata *pb.ErrorData
)
switch comm.TaskType(condconf.Type) {
case comm.Rtype104:
var (
usermodule *ModuleRobot_User
)
usermodule = robot.GetModule(comm.ModuleUser).(*ModuleRobot_User)
if _, errdata = robot.SendMessage("shop", "getlist", &pb.ShopGetListReq{
SType: pb.ShopType_DiamondShop,
}); errdata != nil {
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
return
}
for _, v := range this.goods[pb.ShopType_DiamondShop] {
if v.LeftBuyNum > 0 && usermodule.user.Diamond >= int64(v.Consume[0].N) {
if _, errdata = robot.SendMessage("shop", "buy", &pb.ShopBuyReq{
ShopType: pb.ShopType_DiamondShop,
Gid: v.Gid,
BuyNum: 1,
}); errdata != nil {
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
return
}
break
}
}
}
return
}

View File

@ -140,6 +140,10 @@ locp:
module = comm.ModuleViking module = comm.ModuleViking
case comm.Rtype199: case comm.Rtype199:
module = comm.ModuleHero module = comm.ModuleHero
case comm.Rtype62:
module = comm.ModuleChat
case comm.Rtype104:
module = comm.ModuleShop
default: default:
log.Error("[Robot DoTask]", log.Field{Key: "ctype", Value: cconf.Type}, log.Field{Key: "conld", Value: cconf.Id}, log.Field{Key: "err", Value: "Not Achieved !"}) log.Error("[Robot DoTask]", log.Field{Key: "ctype", Value: cconf.Type}, log.Field{Key: "conld", Value: cconf.Id}, log.Field{Key: "err", Value: "Not Achieved !"})
break locp break locp

View File

@ -54,6 +54,8 @@ func (this *Robot) Init(addr string, client IClient) (err error) {
this.modules[comm.ModuleArena] = new(ModuleRobot_Arena) this.modules[comm.ModuleArena] = new(ModuleRobot_Arena)
this.modules[comm.ModulePagoda] = new(ModuleRobot_Pagoda) this.modules[comm.ModulePagoda] = new(ModuleRobot_Pagoda)
this.modules[comm.ModuleViking] = new(ModuleRobot_Viking) this.modules[comm.ModuleViking] = new(ModuleRobot_Viking)
this.modules[comm.ModuleChat] = new(ModuleRobot_Chat)
this.modules[comm.ModuleShop] = new(ModuleRobot_Shop)
for _, v := range this.modules { for _, v := range this.modules {
v.Init() v.Init()

View File

@ -26,8 +26,9 @@ type DBBattlePlayRecord struct {
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` //唯一ID Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` //唯一ID
Record []byte `protobuf:"bytes,5,opt,name=record,proto3" json:"record"` //BattleReport 的序列化数据 ExpireAt int64 `protobuf:"varint,2,opt,name=expireAt,proto3" json:"expireAt" bson:"expireAt"` //过期时间
Record []byte `protobuf:"bytes,3,opt,name=record,proto3" json:"record"` //BattleReport 的序列化数据
} }
func (x *DBBattlePlayRecord) Reset() { func (x *DBBattlePlayRecord) Reset() {
@ -69,6 +70,13 @@ func (x *DBBattlePlayRecord) GetId() string {
return "" return ""
} }
func (x *DBBattlePlayRecord) GetExpireAt() int64 {
if x != nil {
return x.ExpireAt
}
return 0
}
func (x *DBBattlePlayRecord) GetRecord() []byte { func (x *DBBattlePlayRecord) GetRecord() []byte {
if x != nil { if x != nil {
return x.Record return x.Record
@ -81,12 +89,13 @@ var File_battlerecord_battlerecord_db_proto protoreflect.FileDescriptor
var file_battlerecord_battlerecord_db_proto_rawDesc = []byte{ var file_battlerecord_battlerecord_db_proto_rawDesc = []byte{
0x0a, 0x22, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2f, 0x62, 0x0a, 0x22, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2f, 0x62,
0x61, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x64, 0x62, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3c, 0x0a, 0x12, 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x58, 0x0a, 0x12, 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65,
0x50, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78,
0x63, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x65, 0x78,
0x72, 0x64, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64,
0x6f, 0x33, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x06,
0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (