This commit is contained in:
meixiongfeng 2022-10-31 19:31:58 +08:00
parent 380c658687
commit b0fc8396fb
8 changed files with 127 additions and 107 deletions

View File

@ -2,9 +2,9 @@ package pagoda
import ( import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/db" "go_dreamfactory/sys/db"
"strconv"
"time" "time"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
@ -27,6 +27,7 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PagodaChal
mapData map[string]interface{} mapData map[string]interface{}
pagoda *pb.DBPagoda pagoda *pb.DBPagoda
seasonPagoda *pb.DBSeasonPagoda seasonPagoda *pb.DBSeasonPagoda
costTime int32 // 本次战斗消耗的时间
) )
mapData = make(map[string]interface{}, 0) mapData = make(map[string]interface{}, 0)
code = this.ChallengeOverCheck(session, req) code = this.ChallengeOverCheck(session, req)
@ -55,7 +56,6 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PagodaChal
code = pb.ErrorCode_PagodaLevlErr // 挑战关卡数据不匹配 code = pb.ErrorCode_PagodaLevlErr // 挑战关卡数据不匹配
return return
} }
} else { } else {
// 塔数据校验 // 塔数据校验
seasonPagoda, err = this.module.modelSeasonPagoda.getSeasonPagodaList(session.GetUserId()) seasonPagoda, err = this.module.modelSeasonPagoda.getSeasonPagodaList(session.GetUserId())
@ -111,24 +111,11 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PagodaChal
} }
} }
} }
if !this.module.IsCross() { if req.Report != nil {
if conn, err := db.Cross(); err == nil { costTime = req.Report.Costtime
userinfo := this.module.ModuleUser.GetUser(session.GetUserId())
newData := &pb.DBPagodaRecord{
Id: primitive.NewObjectID().Hex(),
Uid: session.GetUserId(),
PagodaId: pagoda.PagodaId,
Type: pagoda.Type,
Nickname: userinfo.Name,
Icon: "", // icon 暂无
Lv: userinfo.Lv,
CostTime: req.Report.Costtime,
}
conn.Mgo.InsertOne(comm.TablePagodaRecord, newData)
}
} }
//this.module.modulerank.addPagodaList(session, pagoda, req.Report.Info.Redflist[0].Leadpos, sz, req.Report.Costtime)
this.module.modulerank.SetNormalPagodaRankList("pagodaRank", pagoda.PagodaId<<8+costTime, session.GetUserId())
} }
// 普通塔通关了 // 普通塔通关了
Nomalcfg := this.module.configure.GetPagodaConfigData(comm.PagodaType, pagoda.PagodaId+1) Nomalcfg := this.module.configure.GetPagodaConfigData(comm.PagodaType, pagoda.PagodaId+1)
@ -157,6 +144,8 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PagodaChal
session.SendMsg(string(this.module.GetType()), PagodaGetListResp, &pb.PagodaGetListResp{Data: pagoda}) session.SendMsg(string(this.module.GetType()), PagodaGetListResp, &pb.PagodaGetListResp{Data: pagoda})
} }
} else { } else {
seasonPagoda.PagodaId = conf.LayerNum
mapData["pagodaId"] = conf.LayerNum
// 记录爬塔明细数据 // 记录爬塔明细数据
if req.Report != nil && req.Report.Info != nil && len(req.Report.Info.Redflist) > 0 { if req.Report != nil && req.Report.Info != nil && len(req.Report.Info.Redflist) > 0 {
sz := make([]*pb.LineUp, 5) sz := make([]*pb.LineUp, 5)
@ -170,6 +159,7 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PagodaChal
} }
} }
// 数据直接插入跨服数据库中 // 数据直接插入跨服数据库中
uid := session.GetUserId()
userinfo := this.module.ModuleUser.GetUser(session.GetUserId()) userinfo := this.module.ModuleUser.GetUser(session.GetUserId())
newData := &pb.DBPagodaRecord{ newData := &pb.DBPagodaRecord{
Id: primitive.NewObjectID().Hex(), Id: primitive.NewObjectID().Hex(),
@ -181,52 +171,20 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PagodaChal
Lv: userinfo.Lv, Lv: userinfo.Lv,
CostTime: req.Report.Costtime, CostTime: req.Report.Costtime,
} }
costTime = newData.CostTime
// 数据写到跨服中 // 数据写到跨服中
if !this.module.IsCross() { conn_, err := db.Cross()
if conn, err := db.Cross(); err == nil { dbModel := db.NewDBModel(comm.TableSeasonRecord, time.Hour, conn_)
conn.Mgo.InsertOne(comm.TableSeasonRecord, newData) //if err = dbModel.GetList(uid, newData); err == nil {
} dbModel.AddList(uid, newData.Id, newData)
} this.module.SetPagodaRankList("pagodaList"+strconv.Itoa(int(newData.PagodaId)), newData.CostTime, newData.Id)
var dbModel *db.DBModel //}
if !this.module.IsCross() { dbModelTable := db.NewDBModel(comm.TableSeasonPagoda, time.Hour, conn_)
if dbModel, err = this.module.GetDBNoduleByUid(session.GetUserId(), comm.TableSeasonRecord, time.Hour); err == nil { if err = dbModelTable.Get(session.GetUserId(), seasonPagoda); err == nil {
if err = dbModel.Add(session.GetUserId(), newData); err != nil { dbModelTable.Change(session.GetUserId(), mapData) // 修改跨服数据
this.module.Errorf("err:%v", err) this.module.SetPagodaRankList("pagodaSeasonRank", seasonPagoda.PagodaId<<8+costTime, session.GetUserId())
}
// 同步zset
}
} else {
if err = this.module.modelPagoda.Add(session.GetUserId(), newData); err != nil {
this.module.Errorf("err:%v", err)
return
}
}
//this.module.modulerank.addPagodaRankList(session, seasonPagoda, req.Report.Info.Redflist[0].Leadpos, sz, req.Report.Costtime)
}
// 挑战处理
seasonPagoda.PagodaId = conf.LayerNum
mapData["pagodaId"] = conf.LayerNum
if !this.module.IsCross() {
if conn, err := db.Cross(); err == nil {
data := &comm.Autogenerated{
ID: primitive.NewObjectID().Hex(),
UID: seasonPagoda.Uid,
Act: string(comm.LogHandleType_Update),
}
table := comm.TableSeasonRecord //, uid, , data)
data.D = append(data.D, table) // D[0]
data.D = append(data.D, bson.M{"uid": session.GetUserId()}) // D[1]
data.D = append(data.D, seasonPagoda) // D[2]
_, err = conn.Mgo.InsertOne("model_log", data)
if err != nil {
log.Errorf("insert model db err %v", err)
}
} }
} }
code = this.module.ModifySeasonPagodaData(session.GetUserId(), mapData) code = this.module.ModifySeasonPagodaData(session.GetUserId(), mapData)
pagoda = &pb.DBPagoda{ pagoda = &pb.DBPagoda{
Id: seasonPagoda.Id, Id: seasonPagoda.Id,

View File

@ -61,6 +61,10 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.PagodaGetListReq
Type: season.Type, Type: season.Type,
} }
} }
this.RankList(session, &pb.PagodaRankListReq{
FloorId: 0,
Friend: false,
})
session.SendMsg(string(this.module.GetType()), PagodaGetListResp, &pb.PagodaGetListResp{Data: list}) session.SendMsg(string(this.module.GetType()), PagodaGetListResp, &pb.PagodaGetListResp{Data: list})
return return
} }

View File

@ -1,9 +1,15 @@
package pagoda package pagoda
import ( import (
"context"
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/lego/sys/redis/pipe"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/db"
"strconv"
"time"
"github.com/go-redis/redis/v8"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
) )
@ -16,22 +22,39 @@ func (this *apiComp) RankListCheck(session comm.IUserSession, req *pb.PagodaRank
func (this *apiComp) RankList(session comm.IUserSession, req *pb.PagodaRankListReq) (code pb.ErrorCode, data proto.Message) { func (this *apiComp) RankList(session comm.IUserSession, req *pb.PagodaRankListReq) (code pb.ErrorCode, data proto.Message) {
var ( var (
szRank []*pb.DBPagodaRecord szRank []*pb.DBPagodaRecord
err error rd *redis.StringSliceCmd
) )
code = this.RankListCheck(session, req) code = this.RankListCheck(session, req)
if code != pb.ErrorCode_Success { if code != pb.ErrorCode_Success {
return return
} }
if !req.Friend { if !req.Friend {
if req.FloorId == 0 { if !this.module.IsCross() {
szRank, err = this.module.modulerank.GetRankData() if conn, err := db.Cross(); err == nil {
if err != nil { var (
code = pb.ErrorCode_DBError pipe *pipe.RedisPipe = conn.Redis.RedisPipe(context.TODO())
} )
} else { if req.FloorId == 0 {
szRank, err = this.module.modulerank.GetFloorRankList(req.FloorId) rd = pipe.ZRange("pagodaSeasonRank"+strconv.Itoa(int(req.FloorId)), 0, 50)
if err != nil { } else {
code = pb.ErrorCode_DBError rd = pipe.ZRange("pagodaList"+strconv.Itoa(int(req.FloorId)), 0, 50)
}
if _, err = pipe.Exec(); err != nil {
this.module.Errorln(err)
return
}
_data3 := rd.Val()
_data, err2 := rd.Result()
this.module.Errorln(_data, err2, _data3)
for _, v := range _data3 {
conn_, err := db.Cross()
dbModel := db.NewDBModel(comm.TableSeasonRecord, time.Hour, conn_)
result := &pb.DBPagodaRecord{}
if err = dbModel.GetListObj(session.GetUserId(), v, result); err == nil {
szRank = append(szRank, result)
}
}
} }
} }
} }

View File

@ -6,13 +6,17 @@ import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/lego/core" "go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log" "go_dreamfactory/lego/sys/log"
"go_dreamfactory/lego/sys/redis"
//"go_dreamfactory/lego/sys/redis"
"go_dreamfactory/lego/sys/redis/pipe"
"go_dreamfactory/modules" "go_dreamfactory/modules"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/db" "go_dreamfactory/sys/db"
"sort" "sort"
"time" "time"
"github.com/go-redis/redis/v8"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/options"
@ -41,14 +45,14 @@ func (this *ModelRank) AddRank(uId string, data *pb.DBPagodaRecord) (err error)
} }
//获取用户通过扩展表 //获取用户通过扩展表
func (this *ModelRank) GetUserRandData(uid string) (result *pb.DBPagodaRecord, err error) { // func (this *ModelRank) GetUserRandData(uid string) (result *pb.DBPagodaRecord, err error) {
result = &pb.DBPagodaRecord{} // result = &pb.DBPagodaRecord{}
if err = this.Get(uid, result); err != nil && redis.RedisNil != err { // if err = this.Get(uid, result); err != nil && redis.RedisNil != err {
return // return
} // }
err = nil // err = nil
return result, err // return result, err
} // }
func (this *ModelRank) ChangeUserRank(uid string, value map[string]interface{}) (err error) { func (this *ModelRank) ChangeUserRank(uid string, value map[string]interface{}) (err error) {
if len(value) == 0 { if len(value) == 0 {
@ -237,3 +241,27 @@ func (this *ModelRank) getPagodaRankListByFloorid(uid string, floorid int32) *pb
} }
return nil return nil
} }
//设置本服
func (this *ModelRank) SetNormalPagodaRankList(tableName string, score int32, uid string) {
var (
pipe *pipe.RedisPipe = this.DBModel.Redis.RedisPipe(context.TODO())
menbers *redis.Z
)
menbers = &redis.Z{Score: float64(score), Member: uid}
if cmd := pipe.ZAdd(tableName, menbers); cmd != nil {
dock, err1 := cmd.Result()
if err1 != nil {
this.modulePagoda.Errorln(dock, err1)
}
}
if _, err := pipe.Exec(); err != nil {
this.modulePagoda.Errorln(err)
return
}
}

View File

@ -114,38 +114,28 @@ func (this *Pagoda) CleanSeasonPagodaData() (code pb.ErrorCode) {
return return
} }
func (this *Pagoda) SetPagodaRank(tableName string, time int32, uid string) (err error) { // redis 排序 tableName:"pagodaList"
func (this *Pagoda) SetPagodaRankList(tableName string, score int32, uid string) {
if !this.IsCross() { if !this.IsCross() {
if conn, err1 := db.Cross(); err1 == nil { if conn, err := db.Cross(); err == nil {
var ( var (
pipe *pipe.RedisPipe = conn.Redis.RedisPipe(context.TODO()) pipe *pipe.RedisPipe = conn.Redis.RedisPipe(context.TODO())
menbers *redis.Z menbers *redis.Z
) )
menbers = &redis.Z{Score: float64(time), Member: uid} menbers = &redis.Z{Score: float64(score), Member: uid}
if cmd := pipe.ZAdd(tableName, menbers); cmd != nil { if cmd := pipe.ZAdd(tableName, menbers); cmd != nil {
this.Errorln(err)
dock, err := cmd.Result() dock, err1 := cmd.Result()
this.Errorln(dock, err) if err1 != nil {
this.Errorln(dock, err1)
}
} }
if _, err = pipe.Exec(); err != nil { if _, err = pipe.Exec(); err != nil {
this.Errorln(err) this.Errorln(err)
return return
} }
//rd := pipe.ZRevRank("pagodaList", "dfmxf_6358f3f1375f6a340a12e2ab01234567")
rd := pipe.ZRange("pagodaList", 1, 5)
if _, err = pipe.Exec(); err != nil {
this.Errorln(err)
return
}
_data3 := rd.Val()
_data, err2 := rd.Result()
this.Errorln(_data, err2, _data3)
return
} }
} }
return
} }

View File

@ -55,7 +55,7 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.TrollGetListReq)
} }
curTime = (int32(t) % circle) curTime = (int32(t) % circle)
// 循环次数 // 循环次数
index := int32((int32(t) / circle)) * 3 index := int32((int32(t) / circle)) * this.configure.GetTrollMaxTraintNum()
trolltrain.TarinPos += index trolltrain.TarinPos += index
for pos, v := range sz { for pos, v := range sz {
trolltrain.TarinPos++ trolltrain.TarinPos++

View File

@ -139,3 +139,16 @@ func (this *configureComp) GetTrollMaxCoefficientNux() int32 {
} }
return 0 return 0
} }
// 获取车站的数量
func (this *configureComp) GetTrollMaxTraintNum() int32 {
if v, err := this.GetConfigure(game_trolltrain); err == nil {
if configure, ok := v.(*cfg.GameTrollTrain); ok {
return int32(len(configure.GetDataList()))
}
} else {
log.Errorf("get GameTrollTrainData conf err:%v", err)
}
return 1 // 至少有1个车站
}

View File

@ -52,24 +52,28 @@ func (this *Troll) ModifyTrollData(uid string, data map[string]interface{}) (cod
// AI 玩法 // AI 玩法
func (this *Troll) TrollAI(uid string, troll *pb.DBTrollTrain) (code pb.ErrorCode) { func (this *Troll) TrollAI(uid string, troll *pb.DBTrollTrain) (code pb.ErrorCode) {
var (
trainCount int32 // 车站数量
fTime []int32 //每个车站货物刷新的时间
index int32 // 当前位置索引
crossTime int32 // 经过的时间
)
if troll.Buy != 0 && troll.Sell != 0 { if troll.Buy != 0 && troll.Sell != 0 {
return return
} }
var fTime [3]int32 trainCount = this.configure.GetTrollMaxTraintNum()
for i := 0; i < 3; i++ { fTime = make([]int32, trainCount)
for i := 0; i < int(trainCount); i++ {
if conf := this.configure.GetTrollTrain(int32(i) + 1); conf != nil { if conf := this.configure.GetTrollTrain(int32(i) + 1); conf != nil {
fTime[i] = conf.Time fTime[i] = conf.Time
} }
} }
var (
index int32
crossTime int32 // 经过的时间
)
// 计算时间差 // 计算时间差
crossTime = int32(time.Now().Unix() - troll.RefreshTime) crossTime = int32(time.Now().Unix() - troll.RefreshTime)
for i := 0; ; i++ { for i := 0; ; i++ {
index = int32(i) % 3 index = int32(i) % trainCount
if crossTime > fTime[index] { // 获取 if crossTime > fTime[index] { // 获取
troll.RangeId += 1 troll.RangeId += 1
if _d := this.configure.GetTrollCoefficient(troll.RangeId); _d != nil { if _d := this.configure.GetTrollCoefficient(troll.RangeId); _d != nil {