Compare commits

..

No commits in common. "1c80a7374157c289cf2d051e2fb224ff7a28a88c" and "e6240f17962d387bf6804772ecb0cf3620d8d152" have entirely different histories.

7 changed files with 80 additions and 77 deletions

View File

@ -1274,7 +1274,7 @@ func (this *TienLenSceneData) SendHandCardOdds() {
case 1: // 牌库发牌
logger.Logger.Tracef("TienLen SendHandCardOdds 牌库")
//todo 牌库
random := rand.Intn(10000) + 1
random := rand.Intn(10000)
var cardsArr [][]int32
this.isCardsKu = true
this.cardsKuId = int32(random)

View File

@ -42,7 +42,6 @@ func (this *GameDropMgr) GetKey(gameid, basescore int32) string {
}
func (this *GameDropMgr) Init() {
this.GameDropData = make(map[string][]*GameDropData)
gdArr := PBDB_Game_DropMgr.Datas.Arr
if gdArr != nil {
for _, drop := range gdArr {

View File

@ -11,7 +11,7 @@ type PlayerMatchContext struct {
grade int32 //比赛积分
rank int32 //当前第几名
gaming bool //是否比赛中
record map[int32]int32 //战绩 胜负次数统计
record map[int32]int32 //战绩
copySnid int32
copyLv int32
copyRoleId int32
@ -40,7 +40,6 @@ func (p MatchContextSlice) Sort(isFinals bool) {
mc.rank = int32(i + 1)
}
if isFinals {
// 积分相同名次相同
lastRank := int32(0)
lastGrade := int32(0)
for i := 0; i < len(p); i++ {

View File

@ -23,25 +23,25 @@ type MatchSceneMgr struct {
// round 第几轮
func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scene {
sceneId := SceneMgrSingleton.GenOneMatchSceneId()
gameId := int(tm.dbGameFree.GameId)
gameMode := tm.dbGameFree.GetGameMode()
// 获取游戏服务器
gs := GameSessMgrSington.GetMinLoadSess(gameId)
if gs == nil {
logger.Logger.Warn("not found game server, gameid: ", gameId)
return nil
}
// 平台
limitPlatform := PlatformMgrSingleton.GetPlatform(tm.Platform)
if limitPlatform == nil || !limitPlatform.Isolated {
limitPlatform = PlatformMgrSingleton.GetPlatform(DefaultPlatform)
}
// 是否决赛
finals := int32(0)
finals := int32(0) // 是否决赛
if isFinals {
finals = 1
}
// 获取本局比赛人数和下一局比赛人数
curPlayerNum := int32(1) // 本轮比赛总人数
nextNeed := int32(0) // 下一轮比赛总人数
if tm.gmd != nil && len(tm.gmd.MatchPromotion) >= int(round) {
@ -67,9 +67,11 @@ func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scen
return nil
}
// MatchStart 开始首轮比赛
func (ms *MatchSceneMgr) MatchStart(tm *TmMatch) {
var scene *Scene
scene := ms.NewScene(tm, false, 1)
if scene != nil {
ms.scenes[scene.sceneId] = scene
}
for _, tmp := range tm.TmPlayer { //先进真人
if scene == nil || scene.IsFull() {
scene = ms.NewScene(tm, false, 1)
@ -77,26 +79,21 @@ func (ms *MatchSceneMgr) MatchStart(tm *TmMatch) {
ms.scenes[scene.sceneId] = scene
}
}
p := PlayerMgrSington.GetPlayerBySnId(tmp.SnId)
if p == nil {
continue
}
if p.scene != nil {
logger.Logger.Errorf("MatchStart error: snid:%v in scene %v", p.SnId, p.scene.sceneId)
continue
}
mc := TournamentMgr.CreatePlayerMatchContext(p, tm, tmp.seq)
if mc != nil {
mc.gaming = true
scene.PlayerEnter(p, -1, true)
if p != nil && p.scene == nil {
mc := TournamentMgr.CreatePlayerMatchContext(p, tm, tmp.seq)
if mc != nil {
mc.gaming = true
scene.PlayerEnter(mc.p, -1, true)
}
} else {
if p != nil {
logger.Logger.Error("MatchStart error: snid: ", p.SnId, " p.scene: ", p.scene)
}
}
}
// 填充机器人
if scene != nil && !scene.IsFull() {
if scene != nil && !scene.IsFull() { //填充机器人
tm.RobotGradesDecline(1)
needRobotNum := scene.playerNum - len(scene.players)
logger.Logger.Trace("MatchStart 填充机器人", needRobotNum)
@ -111,9 +108,11 @@ func (ms *MatchSceneMgr) MatchStart(tm *TmMatch) {
}
}
// NewRoundStart 开始非首轮比赛
func (ms *MatchSceneMgr) NewRoundStart(tm *TmMatch, mct []*PlayerMatchContext, finals bool, round int32) {
var scene *Scene
scene := ms.NewScene(tm, finals, round)
if scene != nil {
ms.scenes[scene.sceneId] = scene
}
for _, tmp := range mct {
if scene == nil || scene.IsFull() {
scene = ms.NewScene(tm, finals, round)
@ -122,24 +121,21 @@ func (ms *MatchSceneMgr) NewRoundStart(tm *TmMatch, mct []*PlayerMatchContext, f
}
}
p := tmp.p
if p == nil {
continue
}
if p.scene != nil {
logger.Logger.Errorf("NewRoundStart error: snid:%v in scene %v", p.SnId, p.scene.sceneId)
continue
}
if mc, ok := TournamentMgr.players[tm.SortId][p.SnId]; ok {
mc.gaming = true
mc.grade = mc.grade * 75 / 100 //积分衰减
mc.rank = tmp.rank
scene.PlayerEnter(p, -1, true)
if p != nil && p.scene == nil {
if mc, ok := TournamentMgr.players[tm.SortId][p.SnId]; ok {
mc.gaming = true
mc.grade = mc.grade * 75 / 100 //积分衰减
mc.rank = tmp.rank
scene.PlayerEnter(mc.p, -1, true)
}
} else {
if p != nil {
logger.Logger.Error("NewRoundStart error: snid: ", p.SnId, " p.scene: ", p.scene)
}
}
}
// 填充机器人
if scene != nil && !scene.IsFull() {
if scene != nil && !scene.IsFull() { //填充机器人
tm.RobotGradesDecline(int(round))
needRobotNum := scene.playerNum - len(scene.players)
logger.Logger.Trace("NewRoundStart 填充机器人", needRobotNum)

View File

@ -22,7 +22,6 @@ type TmPlayer struct {
SnId int32
seq int // 报名序号(第几个报名的)
}
type TmMatch struct {
SortId int32 // 比赛开始时间戳,纳秒
TMId int32 // 比赛配置Id
@ -33,7 +32,7 @@ type TmMatch struct {
dbGameFree *server.DB_GameFree // 游戏配置
robotGrades map[int][]*TmGradeInfo // 第几轮:玩家积分
copyRobotGrades []*TmGradeInfo // 最近一轮的机器人积分备份
useRobot int32 // 是否使用机器人
tmpUseRobot int32 // 是否使用机器人
}
type TmGradeInfo struct {
@ -99,7 +98,6 @@ func (tm *TmMatch) CopyMap(b map[int32]*TmPlayer) {
}
// CreateRobotGrades 生成假积分
// 完成机器人积分上升或下降
func (tm *TmMatch) CreateRobotGrades(round int) {
logger.Logger.Tracef("======创建假积分======当前第 %v 轮============", round)
if tm.robotGrades == nil {
@ -108,10 +106,10 @@ func (tm *TmMatch) CreateRobotGrades(round int) {
if tm.robotGrades[round] == nil { //生成假数据
gmd := tm.gmd
lastPromotionNum := gmd.MatchPromotion[round-1] - 1 // 当前轮机器人数量
logger.Logger.Tracef("CreateRobotGrades round:%v 机器人数量:%v", round, lastPromotionNum)
logger.Logger.Trace("机器人数量: ", lastPromotionNum)
// 上一轮数据,用在线玩家数据填充包含机器人,如果不够填充假数据
if tm.robotGrades[round-1] == nil { //初始化数据
// 第初始轮数据
if tm.robotGrades == nil || tm.robotGrades[round-1] == nil { //初始化数据
tm.robotGrades[round-1] = []*TmGradeInfo{}
snids := []int32{}
lvs := []int32{}
@ -169,15 +167,29 @@ func (tm *TmMatch) CreateRobotGrades(round int) {
// 当前轮数据
tm.robotGrades[round] = []*TmGradeInfo{}
upNum := int32(math.Floor(float64(lastPromotionNum*tm.gml.RobotUpRatio) / 100.0))
indexes := rand.Perm(int(lastPromotionNum))
upIndexes := indexes[:upNum] // 积分上升的机器人
downIndexes := indexes[upNum:] // 积分下降的机器人
indexs := []int32{}
for i := 0; i < int(lastPromotionNum); i++ {
indexs = append(indexs, int32(i))
}
upIndexs := []int32{} // 积分上升的机器人
for i := 0; i < int(upNum); i++ {
randIndex := rand.Intn(len(indexs))
upIndexs = append(upIndexs, indexs[randIndex])
indexs = append(indexs[:randIndex], indexs[randIndex+1:]...)
}
downNum := lastPromotionNum - upNum
downIndexs := []int32{} // 积分下降的机器人
for i := 0; i < int(downNum); i++ {
randIndex := rand.Intn(len(indexs))
downIndexs = append(downIndexs, indexs[randIndex])
indexs = append(indexs[:randIndex], indexs[randIndex+1:]...)
}
// 上升
var n int32
for _, v := range tm.gml.UpGradeOdds {
n += v
}
for _, index := range upIndexes {
for _, index := range upIndexs {
grade := tm.robotGrades[round-1][index].grade
r := rand.Int31n(n)
t := int32(0)
@ -203,7 +215,7 @@ func (tm *TmMatch) CreateRobotGrades(round int) {
for _, v := range tm.gml.DownGradeOdds {
n += v
}
for _, index := range downIndexes {
for _, index := range downIndexs {
grade := tm.robotGrades[round-1][index].grade
r := rand.Int31n(n) //0-999
t := int32(0)

View File

@ -43,9 +43,9 @@ const (
// tournament
var TournamentMgr = &Tournament{
GameMatchDateList: make(map[string]map[int32]*webapi_proto.GameMatchDate),
signUpPlayers: make(map[string]map[int32]*SignInfo),
GameMatchDateList: make(map[string]map[int32]*webapi_proto.GameMatchDate), //比赛配置
matches: make(map[int32]map[int32]*TmMatch),
signUpPlayers: make(map[string]map[int32]*SignInfo),
players: make(map[int32]map[int32]*PlayerMatchContext),
copyPlayers: make(map[int32]map[int32][]*PlayerMatchContext),
rankPlayers: make(map[int32]map[int32][]*PlayerMatchContext),
@ -59,11 +59,11 @@ var TournamentMgr = &Tournament{
type Tournament struct {
GameMatchDateList map[string]map[int32]*webapi_proto.GameMatchDate // 比赛配置platform:比赛场配置id:比赛配置
signUpPlayers map[string]map[int32]*SignInfo // 报名的玩家 platform:比赛配置id:报名人
matches map[int32]map[int32]*TmMatch // 开始比赛的数据比赛配置Id:比赛顺序序号:一场开始的比赛数据
signUpPlayers map[string]map[int32]*SignInfo // 报名的玩家 platform:比赛配置id:报名人
players map[int32]map[int32]*PlayerMatchContext // 比赛中玩家 比赛顺序序号:snid:玩家信息
copyPlayers map[int32]map[int32][]*PlayerMatchContext // 比赛玩家数据备份 比赛顺序序号:round:玩家信息
rankPlayers map[int32]map[int32][]*PlayerMatchContext // 比赛玩家为了每轮积分排名用 比赛顺序序号:round
rankPlayers map[int32]map[int32][]*PlayerMatchContext //比赛玩家为了每轮积分排名用 比赛顺序序号,round
roundOverPlayerNum map[int32]map[int32]int32 // 完成比赛人数 比赛序号:轮次:人数
finalPerRank map[int32][]*PerRankInfo //本场比赛最后排名,每淘汰一位记录一位,最后记录决赛玩家
playerWaitStart map[int32]int64 // 等待时间 玩家Id:等待时长秒
@ -117,7 +117,7 @@ func (this *Tournament) checkData(cfg *webapi_proto.GameMatchDate) bool {
if num%4 != 0 { //必须是4的整倍数
return false
}
if num <= cfg.MatchPromotion[i+1] { //必须递减
if num < cfg.MatchPromotion[i+1] { //必须递减
return false
}
}
@ -604,11 +604,11 @@ func (this *Tournament) Start(platform string, tmId int32) {
signInfo := this.signUpPlayers[platform][tmId]
sortId := int32(time.Now().Nanosecond())
tm := &TmMatch{
TMId: tmId,
SortId: sortId,
gmd: matchInfo,
Platform: signInfo.Platform,
useRobot: matchInfo.UseRobot,
TMId: tmId,
SortId: sortId,
gmd: matchInfo,
Platform: signInfo.Platform,
tmpUseRobot: matchInfo.UseRobot,
}
tm.gml = srvdata.MatchLevelMgr.Get(matchInfo.GameFreeId, matchInfo.MatchLevel)
tm.dbGameFree = srvdata.PBDB_GameFreeMgr.GetData(matchInfo.GameFreeId)
@ -686,7 +686,6 @@ func (this *Tournament) NextRoundStartSingle(sortId int32, mtp *PlayerMatchConte
index = gmd.MatchPromotion[mtp.round-1]
}
if index <= promotionNum {
// 晋级
mtp.rank = index
this.sendPromotionInfo(mtp, sortId, JinJi, false, false) //晋级
@ -700,7 +699,6 @@ func (this *Tournament) NextRoundStartSingle(sortId int32, mtp *PlayerMatchConte
return true
}), nil, time.Second*7, 1)
} else {
// 淘汰
mtp.rank = index
pri := &PerRankInfo{
Name: mtp.p.Name,
@ -918,7 +916,7 @@ func (this *Tournament) sendPromotionInfo(mc *PlayerMatchContext, sortId int32,
return
}
rankId := mc.rank
if mc.tm.useRobot == MatchNotUserRobot { // 不使用机器人
if mc.tm.tmpUseRobot == MatchNotUserRobot { // 不使用机器人
rankId = this.getRank(sortId, mc.round, mc.p.SnId, isFinals)
mc.rank = rankId
}
@ -1277,7 +1275,7 @@ func (this *Tournament) UpdateMatchInfo(p *Player, sortId, grade, isWin int32, m
}
this.rankPlayers[sortId][mtp.round] = append(this.rankPlayers[sortId][mtp.round], &mc)
logger.Logger.Tracef("========snid(%v) grade(%v) ============", p.SnId, grade)
if mtp.tm.useRobot == MatchUseRobot { // 使用机器人
if mtp.tm.tmpUseRobot == MatchUseRobot { // 使用机器人
this.NextRoundStartSingle(sortId, mtp, matchRobotGrades)
} else {
this.NextRoundStart(sortId, mtp)

View File

@ -1545,13 +1545,12 @@ func (this *WelfareMgr) PigbankTakeCoin(p *Player) {
return 0
}
BankMaxCoin := int64(fGetPropValue("BankMaxCoin"))
if p.WelfData != nil && p.WelfData.PigBank != nil {
pack.CostDiamond = fGetCostDiamond(p.WelfData.PigBank.TakeTimes + 1)
pack.BankMaxCoin = BankMaxCoin
pack.BankMaxCoin = int64(fGetPropValue("BankMaxCoin"))
if p.WelfData.PigBank.BankCoin < BankMaxCoin {
if p.WelfData.PigBank.BankCoin < int64(fGetPropValue("BankMaxCoin")) {
pack.OpRetCode = welfare.OpResultCode_OPRC_PigbankNotFull
logger.Logger.Trace("存钱罐没有满")
p.SendToClient(int(welfare.SPacketID_PACKET_SCPigbankTakeCoin), pack)
@ -1570,11 +1569,11 @@ func (this *WelfareMgr) PigbankTakeCoin(p *Player) {
return
}
if p.WelfData.PigBank.BankCoin >= BankMaxCoin {
if p.WelfData.PigBank.BankCoin == int64(fGetPropValue("BankMaxCoin")) {
pack.OpRetCode = welfare.OpResultCode_OPRC_Sucess
pack.TakeCoinNum = BankMaxCoin
pack.TakeCoinNum = p.WelfData.PigBank.BankCoin
p.AddCoin(BankMaxCoin, 0, common.GainWay_PigrankGainCoin, "sys", "存钱罐领取金币")
p.AddCoin(p.WelfData.PigBank.BankCoin, 0, common.GainWay_PigrankGainCoin, "sys", "存钱罐领取金币")
// 领取完之后 设置为0
p.WelfData.PigBank.BankCoin = 0