Esempio n. 1
0
        public async Task ClubUnjoinReq2(GameSession session, ClubUnjoinReq2Message message)
        {
            var plr = session.Player;

            if (plr?.Club == null || plr.Club.Id != message.ClanId)
            {
                await session.SendAsync(new ClubUnjoinAck2Message(4));

                return;
            }

            if (plr.Club.Players.Values.Any(x =>
                                            x.Account?.Id == (int)plr.Account.Id && x.Rank != ClubRank.Master))
            {
                using (var db = GameDatabase.Open())
                {
                    var club = (await DbUtil.FindAsync <ClubDto>(db, statement => statement
                                                                 .Where($"{nameof(ClubDto.Id):C} = @Id")
                                                                 .WithParameters(new { plr.Club.Id }))).FirstOrDefault();

                    if (club != null)
                    {
                        var player = (await DbUtil.FindAsync <ClubPlayerDto>(db, statement => statement
                                                                             .Where($"{nameof(ClubPlayerDto.ClubId):C} = @Id")
                                                                             .WithParameters(new { plr.Club.Id }))
                                      ).FirstOrDefault(x => x.PlayerId == (int)plr.Account.Id);

                        if (player != null)
                        {
                            Club.LogOff(plr);
                            ClubPlayerInfo clubPlayerInfo;
                            plr.Club.Players.TryRemove(plr.Account.Id, out clubPlayerInfo);
                            DbUtil.Delete(db, new ClubPlayerDto {
                                PlayerId = player.PlayerId
                            });
                            plr.Club = null;
                            await session.SendAsync(new ClubMyInfoAckMessage(plr.Map <Player, ClubMyInfoDto>()));

                            await session.SendAsync(new ClubUnjoinAck2Message());
                        }
                        else
                        {
                            await session.SendAsync((object)new ServerResultAckMessage((ServerResult)31));
                        }
                        player = (ClubPlayerDto)null;
                    }
                    else
                    {
                        await session.SendAsync((object)new ServerResultAckMessage((ServerResult)31));
                    }
                    club = (ClubDto)null;
                }
            }
            else
            {
                await session.SendAsync((object)new ServerResultAckMessage((ServerResult)22));
            }
        }
Esempio n. 2
0
        public void ClubUnjoinReq2(GameSession session, ClubUnjoinReq2Message message)
        {
            var plr = session.Player;

            if (plr?.Club == null || plr.Club.Id != message.ClanId)
            {
                session.SendAsync(new ClubUnjoinAck2Message(4));
                return;
            }

            //using (_sync.Lock())
            {
                if (plr.Club.Players.Values.Any(x => x.Account?.Id == (int)plr.Account.Id && x.Rank != ClubRank.Master))
                {
                    using (var db = GameDatabase.Open())
                    {
                        var club = db.Find <ClubDto>(statement => statement
                                                     .Where($"{nameof(ClubDto.Id):C} = @Id")
                                                     .WithParameters(new { plr.Club.Id })).FirstOrDefault();

                        if (club != null)
                        {
                            var player = db.Find <ClubPlayerDto>(statement => statement
                                                                 .Where($"{nameof(ClubPlayerDto.ClubId):C} = @Id")
                                                                 .WithParameters(new { plr.Club.Id }))
                                         .FirstOrDefault(x => x.PlayerId == (int)plr.Account.Id);

                            if (player != null)
                            {
                                Club.LogOff(plr);
                                plr.Club.Players.TryRemove(plr.Account.Id, out var _);
                                db.Delete(new ClubPlayerDto()
                                {
                                    PlayerId = player.PlayerId
                                });
                                plr.Club = null;
                                session.SendAsync(new ClubMyInfoAckMessage(plr.Map <Player, ClubMyInfoDto>()));
                                session.SendAsync(new ClubUnjoinAck2Message());
                            }
                            else
                            {
                                session.SendAsync(new ServerResultAckMessage(ServerResult.CantReadClanInfo));
                            }
                        }
                        else
                        {
                            session.SendAsync(new ServerResultAckMessage(ServerResult.CantReadClanInfo));
                        }
                    }
                }
                else
                {
                    session.SendAsync(new ServerResultAckMessage(ServerResult.DBError));
                }
            }
        }