public async Task Handle(WorldClient client, GuildUserStatePacket packet) { if (!_guildManager.HasGuild || _guildManager.GuildRank > 3) { return; } var rank = await _guildManager.TryChangeRank(packet.CharacterId, packet.Demote); if (rank == 0) { return; } if (_gameWorld.Players.ContainsKey(packet.CharacterId)) { _gameWorld.Players[packet.CharacterId].GuildManager.GuildRank = rank; } foreach (var member in _guildManager.GuildMembers.ToList()) { if (!_gameWorld.Players.ContainsKey(member.Id)) { continue; } var guildPlayer = _gameWorld.Players[member.Id]; _packetFactory.SendGuildUserChangeRank(guildPlayer.GameSession.Client, packet.CharacterId, rank); } }