Exemplo n.º 1
0
        /// <summary>
        /// Remove a player from a DM's party
        /// </summary>
        /// <param name="dmId">Dungeon Master associated with the party's ID</param>
        /// <param name="playerId">Player to be removed's ID</param>
        /// <returns>Task of completion for removing character from party</returns>
        public async Task RemovePlayerFromParty(int dmId, int playerId)
        {
            Party party = await _context.Parties.Where(x => x.DungeonMasterId == dmId).FirstOrDefaultAsync();

            PlayerInParty playerInParty = await _context.PlayerInParty.FindAsync(playerId, party.Id);

            if (playerInParty != null)
            {
                if (party.Full)
                {
                    party.Full = false;
                    _context.Entry(party).State = EntityState.Modified;
                }
                _context.Entry(playerInParty).State = EntityState.Deleted;
                var playerReqs = await _context.Requests.Where(x => x.PlayerId == playerId).ToListAsync();

                // TODO: Revisit this logic
                foreach (Request req in playerReqs)
                {
                    req.PlayerAccepted        = false;
                    req.DungeonMasterAccepted = false;
                    req.Active = true;
                    _context.Entry(req).State = EntityState.Modified;
                }
                Player player = await _context.Players.Where(x => x.Id == playerId).FirstOrDefaultAsync();

                player.PartyId = 1;
                _context.Entry(player).State = EntityState.Modified;
                await _context.SaveChangesAsync();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Add a player to a party with a Dungeon Master ID for the party and player ID to be added
        /// </summary>
        /// <param name="dmId">Dungeon Master associated with the party's ID</param>
        /// <param name="playerId">Player to be added's ID</param>
        /// <returns>Task of completion for adding player to party</returns>
        public async Task AddPlayerToParty(int dmId, int playerId)
        {
            Party party = await _context.Parties.Where(x => x.DungeonMasterId == dmId).FirstOrDefaultAsync();

            var partyMembers = await _context.PlayerInParty.Where(x => x.PartyId == party.Id).ToListAsync();

            if (partyMembers.Count() + 1 >= party.MaxSize)
            {
                party.Full = true;
                _context.Entry(party).State = EntityState.Modified;
            }

            PlayerInParty newPlayer = new PlayerInParty
            {
                PartyId  = party.Id,
                PlayerId = playerId
            };
            Player player = await _context.Players.Where(x => x.Id == playerId).FirstOrDefaultAsync();

            player.PartyId = party.Id;
            _context.Entry(player).State = EntityState.Modified;
            await _context.SaveChangesAsync();

            _context.Entry(newPlayer).State = EntityState.Added;
            await _context.SaveChangesAsync();
        }