Пример #1
0
        public APIReturn 出牌([FromForm] string id, [FromForm] string playerId, [FromForm] int[] poker)
        {
            var ddz = DDZGet(id);

            ddz.Play(playerId, poker);

            object[] gpdb = null;
            using (var pipe = redis.StartPipe())
            {
                pipe.HGet <Player[]>($"ddz_gameplay_ht{ddz.Id}", "players");
                pipe.HGet <Desk>($"ddz_gameplay_ht{ddz.Id}", "desk");
                gpdb = pipe.EndPipe();
            }
            var players = gpdb[0] as Player[];
            var desk    = gpdb[1] as Desk;

            SendGameMessage(ddz, gpdb[0] as Player[]);
            if (ddz.Data.stage == GameStage.游戏结束)
            {
                ImHelper.LeaveChan(players[0].Id, desk.Title);
                ImHelper.LeaveChan(players[1].Id, desk.Title);
                ImHelper.LeaveChan(players[2].Id, desk.Title);
            }
            return(APIReturn.成功);
        }
Пример #2
0
        public static void OnGameOver(GamePlay game)
        {
            object[] gpdb = null;
            using (var pipe = redis.StartPipe())
            {
                pipe.HGet <Player[]>($"ddz_gameplay_ht{game.Id}", "players");
                pipe.HGet <Desk>($"ddz_gameplay_ht{game.Id}", "desk");
                gpdb = pipe.EndPipe();
            }
            var players = gpdb[0] as Player[];
            var desk    = gpdb[1] as Desk;

            ImHelper.LeaveChan(players[0].Id, desk.Title);
            ImHelper.LeaveChan(players[1].Id, desk.Title);
            ImHelper.LeaveChan(players[2].Id, desk.Title);
            using (var pipe = redis.StartPipe())
            {
                pipe.HDel($"ddz_gameplay_ht{game.Id}", "players", "desk");
                pipe.HDel("ddz_gameplay_player_ht", players[0].Id.ToString(), players[1].Id.ToString(), players[2].Id.ToString(),
                          players[0].Nick, players[1].Nick, players[2].Nick);
                pipe.HDel("sitdown_ht", new[] { $"{desk.Id}_1", $"{desk.Id}_2", $"{desk.Id}_3" });
                pipe.HDel("sitdown_player_ht", players[0].Id.ToString(), players[1].Id.ToString(), players[2].Id.ToString());
                pipe.EndPipe();
            }
            Func <GamePlayer, string> getPlayerStats = pl => $"{pl.id}({pl.score})";

            var playerScoreIncr = game.Data.players.Select(a => (long)a.score).ToArray();

            lock (updateScoreLock)
            {
                BaseEntity.Orm.Update <Player>(players[0]).Set(a => a.Score + playerScoreIncr[0]).ExecuteAffrows();
                BaseEntity.Orm.Update <Player>(players[1]).Set(a => a.Score + playerScoreIncr[1]).ExecuteAffrows();
                BaseEntity.Orm.Update <Player>(players[2]).Set(a => a.Score + playerScoreIncr[2]).ExecuteAffrows();
            }
            players[0].Score += playerScoreIncr[0];
            players[1].Score += playerScoreIncr[1];
            players[2].Score += playerScoreIncr[2];

            ImHelper.SendChanMessage(Guid.Empty, "ddz_chan", new
            {
                type    = "GameOvered",
                deskId  = desk.Id,
                players = players,
                msg     = $"{desk.Title} 【游戏结束】,本局炸弹 {game.Data.bong}个,{game.Data.players[0].id}({game.Data.players[0].score}),{game.Data.players[1].id}({game.Data.players[1].score}),{game.Data.players[2].id}({game.Data.players[2].score})"
            });
            SendGameMessage(game, players);
        }
Пример #3
0
        public async Task <AjaxResult <object> > unSubscrChannel([FromForm] Guid accid, [FromForm] Guid channel)
        {
            if (!await _userManager.CheckAccid(accid.ToString(), Appid))
            {
                return(new AjaxResult <object>("accid不存在"));
            }
            //判断群是否存在
            if (!await _channelManager.CheckChannel(channel.ToString(), Appid))
            {
                return(new AjaxResult <object>("channel不存在"));
            }

            ImHelper.LeaveChan(accid, channel.ToString());
            return(new AjaxResult <object>
            {
                code = 0
            });
        }
Пример #4
0
        public APIReturn 出牌([FromForm] string id, [FromForm] string playerId, [FromForm] int[] poker)
        {
            var ddz = DDZGet(id);

            ddz.Play(playerId, poker);

            var gpdb = RedisHelper.StartPipe(a => a
                                             .HGet <Player[]>($"ddz_gameplay_ht{ddz.Id}", "players")
                                             .HGet <Desk>($"ddz_gameplay_ht{ddz.Id}", "desk"));
            var players = gpdb[0] as Player[];
            var desk    = gpdb[1] as Desk;

            SendGameMessage(ddz, gpdb[0] as Player[]);
            if (ddz.Data.stage == GameStage.游戏结束)
            {
                ImHelper.LeaveChan(players[0].Id, desk.Title);
                ImHelper.LeaveChan(players[1].Id, desk.Title);
                ImHelper.LeaveChan(players[2].Id, desk.Title);
            }
            return(APIReturn.成功);
        }