private TibiaCharacter MapUpdateRequest(TibiaCharacter existingCharacter, TibiaCharacter requestCharacter)
        {
            if (!string.IsNullOrWhiteSpace(requestCharacter.Name))
            {
                existingCharacter.Name = requestCharacter.Name;
            }

            if (requestCharacter.Level != 0)
            {
                existingCharacter.Level = requestCharacter.Level;
            }

            if (!string.IsNullOrWhiteSpace(requestCharacter.PVPType))
            {
                existingCharacter.PVPType = requestCharacter.PVPType;
            }

            if (!string.IsNullOrWhiteSpace(requestCharacter.World))
            {
                existingCharacter.World = requestCharacter.World;
            }

            if (!string.IsNullOrWhiteSpace(requestCharacter.Guild))
            {
                existingCharacter.Guild = requestCharacter.Guild;
            }

            return(existingCharacter);
        }
Beispiel #2
0
        public async Task <ResponseBase> AddTibiaCharacterToListAsync(TibiaCharacter tibiaCharacter, int characterListId)
        {
            if (tibiaCharacter == null)
            {
                return(ResponseBase.ReturnFailed("Character provided in request was null."));
            }

            var characterList = _context.CharacterList.Find(characterListId);

            if (characterList == null)
            {
                return(ResponseBase.ReturnFailed("Specified character list did not exist."));
            }

            if (characterList.CharacterListRelations == null)
            {
                characterList.CharacterListRelations = new List <CharacterListRelation>();
            }

            characterList.CharacterListRelations.Add(new CharacterListRelation
            {
                TibiaCharacter = tibiaCharacter,
                CharacterList  = characterList
            });

            var dbResponse =
                await ResponseBaseMapper.SaveDbChangesAndMapResponse("Error ocurred when trying to add character to list.", _context);

            return(dbResponse);
        }
Beispiel #3
0
        public async void LogOnlineTime(TibiaCharacter character)
        {
            Task <dynamic> exists = null;
            await _sqlObjectFactory.GetConnection().UsingAsync(connection =>
                                                               exists = connection.QueryFirstOrDefaultAsync("SELECT * FROM [TibiaCharacterOnline] WHERE CAST(GETDATE() AS DATE) = [Date] AND CharacterID = @Character", new
            {
                Character = character.CharacterID
            }));

            if (exists.Result != null)
            {
                await _sqlObjectFactory.GetConnection().UsingAsync(connection =>
                                                                   connection.ExecuteAsync("UPDATE TibiaCharacterOnline SET [TimeOnline] = [TimeOnline] + 5 WHERE CAST(GETDATE() AS DATE) = [Date] AND CharacterID = @Character", new
                {
                    Character = character.CharacterID
                }));
            }
            else
            {
                await _sqlObjectFactory.GetConnection().UsingAsync(connection =>
                                                                   connection.ExecuteAsync("INSERT INTO TibiaCharacterOnline (CharacterID, Date, [TimeOnline]) VALUES (@Character, CAST(GETDATE() AS DATE), 5)", new
                {
                    Character = character.CharacterID
                }));
            }
        }
        public async Task <ResponseBase> AddTibiaCharacterAsync(TibiaCharacter tibiaCharacter)
        {
            _context.TibiaCharacter.Add(tibiaCharacter);

            var response = await ResponseBaseMapper.SaveDbChangesAndMapResponse("Failed to add tibia character.", _context);

            return(response);
        }
Beispiel #5
0
        public async Task <HuntedList> AddGuildToListAsync(string name, int listId)
        {
            HuntedList huntedList = _context.HuntedList
                                    .Include(x => x.HuntedListCharacters)
                                    .ThenInclude(x => x.TibiaCharacter)
                                    .FirstOrDefault(h => h.Id == listId);

            if (huntedList == null)
            {
                return(null);
            }

            var guildCharacterNames = await _parser.GetCharacterNamesFromGuildAsync(name);

            if (guildCharacterNames == null)
            {
                return(null);
            }

            foreach (var charName in guildCharacterNames)
            {
                var huntedListCharacter = huntedList.HuntedListCharacters
                                          .FirstOrDefault(c => c.TibiaCharacter.Name == charName);
                if (huntedListCharacter == null)
                {
                    TibiaCharacter tibiaCharacter = null;
                    TibiaCharacter charFromDB     = GetCharacterFromDB(charName);
                    if (charFromDB == null)
                    {
                        tibiaCharacter = await _parser.GetTibiaCharacterAsync(charName);
                    }
                    else
                    {
                        tibiaCharacter = charFromDB;
                    }
                    huntedList.HuntedListCharacters.Add(new HuntedListCharacter
                    {
                        HuntedListId     = huntedList.Id,
                        HuntedList       = huntedList,
                        TibiaCharacterId = tibiaCharacter.Id,
                        TibiaCharacter   = tibiaCharacter
                    });
                }
                else
                {
                    continue;
                }
            }

            if (_context.ChangeTracker.HasChanges())
            {
                await _context.SaveChangesAsync();
            }


            return(huntedList);
        }
Beispiel #6
0
        public async Task <TibiaCharacter> GetTibiaCharacterAsync(string charName)
        {
            string formattedName = charName.Replace(" ", "+");
            string path          = @"https://secure.tibia.com/community/?subtopic=characters&name=" + formattedName;

            TibiaCharacter tibiaCharacter = await GetTibiaCharacterFromWebAsync(web, path, charName);

            return(tibiaCharacter);
        }
Beispiel #7
0
 public async void AddCharacter(TibiaCharacter character)
 {
     await _sqlObjectFactory.GetConnection().UsingAsync(connection =>
                                                        connection.ExecuteAsync("INSERT INTO TibiaCharacter (UserID, Level, Name, IsAlt) VALUES (@UserID, @Level, @Name, @IsAlt)", new
     {
         character.User.UserID,
         character.Level,
         character.Name,
         character.IsAlt
     }));
 }
Beispiel #8
0
 public async void UpdateCharacter(TibiaCharacter character)
 {
     await _sqlObjectFactory.GetConnection().UsingAsync(connection =>
                                                        connection.ExecuteAsync("UPDATE TibiaCharacter SET Level = @Level, Name = @Name, IsAlt = @Alt WHERE CharacterID = @CharacterId", new
     {
         character.Level,
         character.Name,
         Alt         = character.IsAlt,
         CharacterId = character.CharacterID
     }));
 }
        public static TibiaCharacterDTO MapTibiaCharacterToTibiaCharacterDTO(TibiaCharacter tibiaCharacter)
        {
            var tibiaCharacterDTO = new TibiaCharacterDTO
                                    (
                name: tibiaCharacter.Name,
                vocation: tibiaCharacter.Vocation,
                guild: tibiaCharacter.Guild,
                level: tibiaCharacter.Level,
                world: tibiaCharacter.World,
                comment: string.Empty
                                    );

            return(tibiaCharacterDTO);
        }
Beispiel #10
0
        public async Task <IActionResult> UpdateTibiaCharacter(int id, TibiaCharacter tibiaCharacter)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var response = await _repository.UpdateTibiaCharacterAsync(id, tibiaCharacter);

            if (response.Success)
            {
                return(Ok());
            }

            return(BadRequest(response.ErrorMessage));
        }
        public async Task <IActionResult> AddTibiaCharacterToListAsync(TibiaCharacter tibiaCharacter, int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var response = await _repository.AddTibiaCharacterToListAsync(tibiaCharacter, id);

            if (response.Success)
            {
                return(Ok());
            }

            return(BadRequest(response.ErrorMessage));
        }
Beispiel #12
0
        public async Task <List <TibiaCharacter> > GetOnlineCharactersAsync(string worldName)
        {
            string path = "https://secure.tibia.com/community/?subtopic=worlds&world=" + worldName;

            HtmlWeb web     = new HtmlWeb();
            var     htmlDoc = web.Load(path);

            List <TibiaCharacter> characters = new List <TibiaCharacter> ();

            foreach (HtmlNode row in htmlDoc.DocumentNode.SelectNodes("//table[@class='Table2']//tr[@class='Odd' or @class='Even']/td//a[not(@name)]"))
            {
                string characterName = HtmlEntity.DeEntitize(row.InnerText);
                characterName = characterName.Replace("\u00A0", " ");
                TibiaCharacter character = await GetTibiaCharacterAsync(characterName);

                characters.Add(character);
            }

            return(characters);
        }
        public async Task <ResponseBase> UpdateTibiaCharacterAsync(int tibiaCharacterId, TibiaCharacter requestedTibiaCharacter)
        {
            if (requestedTibiaCharacter == null)
            {
                return(ResponseBase.ReturnFailed($"{ nameof(requestedTibiaCharacter) } update request object was null."));
            }

            var existingTibiaCharacter = _context.TibiaCharacter.Find(tibiaCharacterId);

            if (existingTibiaCharacter == null)
            {
                return(ResponseBase.ReturnFailed("Character cannot be updated because it does not exist."));
            }

            existingTibiaCharacter = MapUpdateRequest(existingTibiaCharacter, requestedTibiaCharacter);
            _context.TibiaCharacter.Update(existingTibiaCharacter);

            var response = await ResponseBaseMapper
                           .SaveDbChangesAndMapResponse(
                $"Error ocurred when trying to update tibia character with id: {existingTibiaCharacter.TibiaCharacterId}",
                _context);

            return(response);
        }
Beispiel #14
0
        private async Task <TibiaCharacter> GetTibiaCharacterFromWebAsync(HtmlWeb web, string path, string charName)
        {
            var htmlDoc = await web.LoadFromWebAsync(path);

            TibiaCharacter tibiaCharacter = new TibiaCharacter();

            tibiaCharacter.Name = charName;


            HtmlNode characterNotFound = htmlDoc.DocumentNode.SelectSingleNode("//table/tr/td[contains(., 'Could not find character')]");

            if (characterNotFound != null)
            {
                return(null);
            }

            foreach (HtmlNode row in htmlDoc.DocumentNode.SelectNodes("//div[@id=\"characters\"]//table/tr/td"))
            {
                string rowTitle = row.InnerText;
                switch (rowTitle)
                {
                case "Vocation:":
                    string   vocation         = HtmlEntity.DeEntitize(row.NextSibling.InnerText).Replace("\u00A0", " ");
                    string[] promotedVocation = vocation.Split(' ');
                    if (promotedVocation.Length == 2)
                    {
                        tibiaCharacter.Vocation = promotedVocation[1];
                    }
                    else
                    {
                        tibiaCharacter.Vocation = vocation;
                    }
                    break;

                case "Level:":
                    tibiaCharacter.Level = Int32.Parse(HtmlEntity.DeEntitize(row.NextSibling.InnerText));
                    break;

                case "World:":
                    string world = HtmlEntity.DeEntitize(row.NextSibling.InnerText);
                    tibiaCharacter.World = world.Replace("\u00A0", " ");
                    break;

                case "Residence:":
                    string residence = HtmlEntity.DeEntitize(row.NextSibling.InnerText);
                    tibiaCharacter.Residence = residence.Replace("\u00A0", " ");
                    break;

                case "Guild&#160;Membership:":
                    string guildName = HtmlEntity.DeEntitize(row.NextSibling.SelectSingleNode("a").InnerText);
                    tibiaCharacter.GuildName = guildName.Replace("\u00A0", " ");
                    break;

                case "Last Login:"******"-" + lastLoginSplitted[0] + "-" + lastLoginSplitted[1] + " " + lastLoginSplitted[3],
                                                        "yyyy-MMM-dd HH:mm:ss",
                                                        CultureInfo.InvariantCulture);
                    tibiaCharacter.LastLogin = dt;
                    break;

                case "Character Deaths":
                    HtmlNode tdDate     = row.ParentNode.NextSibling.FirstChild;
                    HtmlNode tdKilledBy = row.ParentNode.NextSibling.LastChild;
                    tibiaCharacter.LatestDeathBy = HtmlEntity.DeEntitize(tdKilledBy.InnerText);
                    string[] lastDeathSplit = HtmlEntity.DeEntitize(tdDate.InnerText).Split('\u00A0');
                    string   deathYear      = lastDeathSplit[2].Substring(0, lastDeathSplit[2].Length - 1);
                    DateTime dtDeath        = DateTime.ParseExact(deathYear + "-" + lastDeathSplit[0] + "-" + lastDeathSplit[1] + " " + lastDeathSplit[3],
                                                                  "yyyy-MMM-dd HH:mm:ss",
                                                                  CultureInfo.InvariantCulture);
                    tibiaCharacter.LatestDeath = dtDeath;
                    break;
                }
            }

            return(tibiaCharacter);
        }