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)); } }
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)); } } }