diff options
author | Dennis Kobert <d-kobert@web.de> | 2019-06-11 23:38:13 +0200 |
---|---|---|
committer | Dennis Kobert <d-kobert@web.de> | 2019-06-11 23:38:13 +0200 |
commit | 2fa4a0e50ebfc97059c8b84dbd17e79f9afc8a8d (patch) | |
tree | c3b34ccb2737e347a73768536895cbbaab13cc01 /dsa/DSALib/Auxiliary/WeaponImporter.cs | |
parent | ec991104f56e90d7bb2878da2fe6ed4e585dfc46 (diff) | |
parent | af74efccf8d21e6151022b71f3cacd3fa83024ee (diff) |
Merge branch 'rework-backend'
Diffstat (limited to 'dsa/DSALib/Auxiliary/WeaponImporter.cs')
-rw-r--r-- | dsa/DSALib/Auxiliary/WeaponImporter.cs | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/dsa/DSALib/Auxiliary/WeaponImporter.cs b/dsa/DSALib/Auxiliary/WeaponImporter.cs new file mode 100644 index 0000000..61eb33e --- /dev/null +++ b/dsa/DSALib/Auxiliary/WeaponImporter.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using DSALib.FireBase; +using DSALib.Models.Database.Dsa; + +namespace DSALib.Auxiliary +{ + public class WeaponImporter + { + private readonly List<RangedWeapon> Range = new List<RangedWeapon>(); + private readonly List<MeleeWeapon> Weapons = new List<MeleeWeapon>(); + + public async Task DownloadWeapons() + { + var client = new HttpClient(); + + + for (var i = 1; i <= 25; i++) + { + var responseString = + await client.GetStringAsync("http://diarium.eu/dsa4-forge/ajax/categoryChanged/" + i); + + var talentRegex = new Regex(@"(?<=<option value="")([0-9]*)("">)(.*?)(?=<)"); + //Regex idsRegex = new Regex(@"(?<=<option value=\"")([0-9]*)"); + + + var talentMatch = talentRegex.Matches(responseString); + //var idMatch = idsRegex.Matches(responseString); + + var lines = new List<string>(); + var ids = new List<int>(); + + foreach (var matchGroup in talentMatch.ToList()) + if (matchGroup.Success) + { + lines.Add(matchGroup.Groups[3].Value); + ids.Add(int.Parse(matchGroup.Groups[1].Value)); + } + + + for (var j = 0; j < lines.Count; j++) + { + var talent = lines[j]; + + var values = await client.GetStringAsync("http://diarium.eu/dsa4-forge/ajax/calculate/" + i + "/" + + ids[j] + "/0/0/0/0/0/10/0/0/0"); + + values = Regex.Unescape(values.Replace(@"\t", "")); + // ... Use named group in regular expression. + var expression = + new Regex( + @"(((?<=(<td>))|(?<=(<td style=\""padding:2px\"">))).*?(?=<\/td>))|((?<=<span style=\""font-weight:bold;text-decoration:underline;\"">).*?(?=<\/span>))"); + + // ... See if we matched. + var matches = expression.Matches(values).Select(x => x.ToString()).ToList(); + + // ... Get group by name. + await AddMelee(i, talent, matches); + Console.Write(j + ","); + //await Task.Delay(TimeSpan.FromSeconds(5)); + } + + Console.WriteLine($"{i}: {ids.Count} => {Weapons.Count}"); + //await Task.Delay(TimeSpan.FromSeconds(5)); + } + + Console.ReadLine(); + } + + private async Task AddMelee(int i, string talent, List<string> matches) + { + var name = talent.Replace(' ', '_').Replace(".", ""); + if (!matches[1].Equals(string.Empty)) + { + var temp = new MeleeWeapon( + name, + matches[1], + int.TryParse(matches[10], out var weight) ? weight : 0, + matches[0].Split(':', StringSplitOptions.RemoveEmptyEntries).First(), + matches[11]) + { + INI = int.TryParse(matches[3], out var ini) ? ini : 0, + MW = matches[4], + TpKK = matches[2] + }; + + Weapons.Add(temp); + await Database.AddWeapon(temp); + } + + /*if (i > 23) + { + var range = new RangedWeapon( + name, + matches[13], + int.TryParse(matches[10], out int weight) ? weight : 0, + matches[0].Split(':', StringSplitOptions.RemoveEmptyEntries).First(), + matches[11]) + { + AtMod = int.TryParse(matches[10], out int atMod) ? atMod : 0, + KKMod = int.TryParse(matches[11], out int kkMod) ? kkMod : 0, + AtReach = matches[3], + TpReach = matches[4], + LoadTime = int.TryParse(matches[5], out int loadTime) ? loadTime : 0 + }; + Range.Add(range); + await Database.AddWeapon(range); + return; + }*/ + if (i > 18) + { + var range = new RangedWeapon( + name, + matches[13].Replace(' ', '+'), + int.TryParse(matches[10], out var weight) ? weight : 0, + matches[0].Split(':', StringSplitOptions.RemoveEmptyEntries).First(), + matches[11]) + { + AtMod = int.TryParse(matches[18], out var atMod) ? atMod : 0, + KKMod = int.TryParse(matches[17], out var kkMod) ? kkMod : 0, + AtReach = matches[14], + TpReach = matches[15], + LoadTime = int.TryParse(matches[18], out var loadTime) ? loadTime : 0 + }; + Range.Add(range); + await Database.AddWeapon(range); + } + } + + private async Task AddRanged(int i, string talent, List<string> matches) + { + var name = talent.Replace(' ', '_').Replace(".", ""); + if (!matches[1].Equals(string.Empty)) + { + var temp = new MeleeWeapon( + name, + matches[1], + int.TryParse(matches[10], out var weight) ? weight : 0, + matches[0].Split(':', StringSplitOptions.RemoveEmptyEntries).First(), + matches[11]) + { + INI = int.TryParse(matches[3], out var ini) ? ini : 0, + MW = matches[4], + TpKK = matches[2] + }; + + Weapons.Add(temp); + await Database.AddWeapon(temp); + } + + if (i > 18) + { + var range = new RangedWeapon( + name, + matches[13].Replace(' ', '+'), + int.TryParse(matches[10], out var weight) ? weight : 0, + matches[0].Split(':', StringSplitOptions.RemoveEmptyEntries).First(), + matches[11]) + { + AtMod = int.TryParse(matches[18], out var atMod) ? atMod : 0, + KKMod = int.TryParse(matches[17], out var kkMod) ? kkMod : 0, + AtReach = matches[14], + TpReach = matches[15], + LoadTime = int.TryParse(matches[18], out var loadTime) ? loadTime : 0 + }; + Range.Add(range); + await Database.AddWeapon(range); + } + } + } +}
\ No newline at end of file |