Пример #1
0
        public bool AcceptClanInvite(Guid inviteId)
        {
            // invite does not exist
            var invite = gameData.GetClanInvite(inviteId);

            if (invite == null)
            {
                return(false);
            }

            // character does not exist
            var character = gameData.GetCharacter(invite.CharacterId);

            if (character == null)
            {
                return(false);
            }

            var membership = gameData.GetClanMembership(invite.CharacterId);

            if (membership != null)
            {
                // check if the clan still exists.
                var joinedClan = gameData.GetClan(membership.ClanId);
                if (joinedClan != null && gameData.GetUser(joinedClan.UserId) != null)
                {
                    return(false);
                }
            }

            // clan does not exist
            var clan = gameData.GetClan(invite.ClanId);

            if (clan == null)
            {
                return(false);
            }

            var roles = gameData.GetClanRoles(clan.Id);
            var role  = roles.OrderBy(x => x.Level).FirstOrDefault(x => x.Level > 0);

            if (role == null)
            {
                role = roles.FirstOrDefault();
            }

            var appearance = gameData.GetAppearance(character.SyntyAppearanceId);

            if (appearance == null)
            {
                return(false);
            }

            appearance.Cape = 0;

            if (role == null)
            {
                CreateDefaultRoles(clan);
                role = gameData.GetClanRoles(clan.Id).OrderBy(x => x.Level).FirstOrDefault(x => x.Level > 0);
            }

            gameData.Add(new DataModels.CharacterClanMembership
            {
                Id          = Guid.NewGuid(),
                ClanId      = clan.Id,
                CharacterId = character.Id,
                ClanRoleId  = role.Id,
                Joined      = DateTime.UtcNow,
            });
            gameData.Remove(invite);

            notificationManager.ClanInviteAccepted(invite.ClanId, invite.CharacterId, DateTime.UtcNow, invite.InviterUserId);
            return(true);
        }