コード例 #1
0
        private bool ExitPlayer(ZoneClient client, int gid, int aid)
        {
            var player = _playerManager.FindPlayerByGID(gid);
            if (player == null)
                return true;

            player.Status = 0;
            var gdid = _guildManager.GetGDIDByGID(gid);
            if (gdid.HasValue)
            {
                var guild = _guildManager.GetGuild(gdid.Value);
                if (guild != null)
                {
                    var member = guild.GuildMInfo.FirstOrDefault(x => x.GID == player.GID);
                    if (member != null)
                    {
                        member.Status = player.Status;
                        _guildManager.UpdateGuildMember(gdid.Value, member.GID, member.Service, member.MemberExp, member.Level, member.Job);
                        BroadcastPacket(new IZ_UPDATE_CHARSTAT
                        {
                            GDID = gdid.Value,
                            GID = gid,
                            AID = aid,
                            Status = member.Status,
                            Sex = member.Sex,
                            Head = member.Head,
                            HeadPalette = member.HeadPalette,
                            Job = (short)member.Job,
                            Level = member.Level
                        });
                    }

                    // get other online players on this zone, if none, free guild
                    var onlineMembers = guild.GuildMInfo.Where(x => x.Status == 1 && _playerManager.FindPlayerByGID(x.GID)?.ZSID == client.Sid);
                    if (!onlineMembers.Any())
                    {
                        client.EnqueuePacket(new IZ_FREE_GUILD
                        {
                            GDID = player.GDID
                        });

                        _guildManager.FreeGuild(player.GDID);
                    }
                }
            }

            var grid = _groupManager.GetMember(gid);
            if (grid.HasValue)
            {
                var g = _groupManager.GetGroup(grid.Value);
                var offlineMember = g.GroupMember.FirstOrDefault(x => x.GID == gid);
                foreach (var m in g.GroupMember.Where(x => x.GID != gid))
                {
                    ZonePacket(player.ZSID, new IZ_ADD_MEMBER_TO_GROUP2
                    {
                        ReceiverAID = m.AID,
                        AID = player.AID,
                        Role = offlineMember?.Role ?? 0,
                        State = 1,
                        GroupName = g.GroupInfo.GroupName,
                        CharacterName = player.CharacterName,
                        MapName = player.MapName,
                        ItemPickupRule = g.GroupInfo.ItemPickupRule,
                        ItemDivisionRule = g.GroupInfo.ItemDivisionRule
                    });
                }
            }

            _playerManager.FreePlayer(aid);
            return true;

        }