Skip to content

Commit

Permalink
Merge pull request #44 from ellesde/e7db-api-v2
Browse files Browse the repository at this point in the history
Use E7DB API v2
  • Loading branch information
Zarroc2762 committed Mar 28, 2020
2 parents e69ba32 + 3b9cc12 commit b4e783c
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 80 deletions.
2 changes: 1 addition & 1 deletion E7 Gear Optimizer/App.config
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<appSettings>
<add key="ApiUrl" value="http://epicsevendb-apiserver.herokuapp.com/api" />
<add key="ApiUrl" value="https://api.epicsevendb.com" />
<add key="AssetUrl" value="http://assets.epicsevendb.com" />
<add key="GitHubUrl" value="https://github.com/Zarroc2762/E7-Gear-Optimizer/releases"/>
<add key="GitHubApiUrl" value="https://api.github.com/repos/Zarroc2762/E7-Gear-Optimizer/releases/latest"/>
Expand Down
26 changes: 14 additions & 12 deletions E7 Gear Optimizer/Hero.cs
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ private Image getStars(int lvl, int awakening)
{
return null;
}
JToken statsJson = JObject.Parse(json)["results"][0]["stats"];
JToken statsJson = JObject.Parse(json)["results"][0]["calculatedStatus"];
statsJson = lvl == 50 ? statsJson["lv50FiveStarNoAwaken"] : statsJson["lv60SixStarNoAwaken"];
Dictionary<Stats,float> baseStats = new Dictionary<Stats, float>();
var stats = statsJson.Children().GetEnumerator();
Expand All @@ -182,29 +182,29 @@ public void updateBaseStats()
{
string json = loadJson();
json = Encoding.UTF8.GetString(Encoding.Default.GetBytes(json)).Replace("", "");
json = json.Remove(json.IndexOf("\"skills\":")) + json.Substring(json.IndexOf("\"awakening\":"));
json = json.Remove(json.IndexOf("\"skills\":")) + json.Substring(json.IndexOf("\"zodiac_tree\":"));
baseStats = getBaseStats(json);
}

//Parse JSON data from EpicSevenDB to get the stats of an awakened hero
private Dictionary<Stats,float> getAwakeningStats(string json)
{
JToken statsJson = JObject.Parse(json)["results"][0]["awakening"];
JToken statsJson = JObject.Parse(json)["results"][0]["zodiac_tree"];
Dictionary<Stats, float> awakeningStats = new Dictionary<Stats, float>();
for (int i = 0; i < Awakening ;i++)
{
JToken stats = statsJson[i]["statsIncrease"];
JToken stats = statsJson[i]["stats"];
for (int j = 0; j < stats.Count(); j++)
{
JProperty stat = (JProperty)stats[j].First;
string name = stat.Name.ToUpper();
string name = stats[j]["stat"].ToString().ToUpper();

Stat s;
if ((name == "ATK" || name == "HP" || name == "DEF") && (float)stat.Value < 1)
if ((name == "ATT_RATE" || name == "MAX_HP_RATE" || name == "DEF_RATE"))
{
s = new Stat((Stats)Enum.Parse(typeof(Stats), stat.Name.ToUpper() + "Percent"), (float)stat.Value);
s = new Stat((Stats)Enum.Parse(typeof(Stats), name.Replace("ATT_RATE", "ATKPercent").Replace("MAX_HP_RATE", "HPPercent").Replace("DEF_RATE", "DEFPercent")), (float)stats[j]["value"]);
} else
{
s = new Stat((Stats)Enum.Parse(typeof(Stats), stat.Name.ToUpper().Replace("CHC", "Crit").Replace("CHD", "CritDmg").Replace("EFR", "RES")), (float)stat.Value);
s = new Stat((Stats)Enum.Parse(typeof(Stats), name.ToUpper().Replace("ATT", "ATK").Replace("SPEED", "SPD").Replace("CRI", "Crit").Replace("CRI_DMG", "CritDmg").Replace("MAX_HP", "HP").Replace("ACC", "EFF")), (float)stats[j]["value"]);
}
if (awakeningStats.ContainsKey(s.Name))
{
Expand All @@ -224,21 +224,23 @@ public void calcAwakeningStats()
{
string json = loadJson();
json = Encoding.UTF8.GetString(Encoding.Default.GetBytes(json)).Replace("", "");
json = json.Remove(json.IndexOf("\"skills\":")) + json.Substring(json.IndexOf("\"awakening\":"));
json = json.Remove(json.IndexOf("\"skills\":")) + json.Substring(json.IndexOf("\"zodiac_tree\":"));
awakeningStats = getAwakeningStats(json);
stars = getStars(lvl, awakening);
}

private Element getElement(string json)
{
JToken info = JObject.Parse(json)["results"][0];
return (Element)Enum.Parse(typeof(Element), System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase((string)info["element"]));
return (Element)Enum.Parse(typeof(Element), System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase((string)info["attribute"]).Replace("Wind", "Earth"));
}

private HeroClass getClass(string json)
{
JToken info = JObject.Parse(json)["results"][0];
return (HeroClass)Enum.Parse(typeof(HeroClass), System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase((string)info["classType"]).Replace("Soul-Weaver","SoulWeaver"));
return (HeroClass)Enum.Parse(typeof(HeroClass), System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase((string)info["role"])
.Replace("Manauser","SoulWeaver")
.Replace("Assassin", "Thief"));
}

//Calculates the current stats of a hero
Expand Down
71 changes: 4 additions & 67 deletions E7 Gear Optimizer/Skill.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,74 +30,11 @@ public Skill()
public Skill(JObject jObject, int index, int enhanceLevel = 0)
{
JToken jSkill = jObject["results"][0]["skills"][index];
JToken jDamageModifiers = jSkill["damageModifiers"];
foreach (var jModifier in jDamageModifiers)
{
string name = jModifier["name"].ToString();
float value;
float soulburn;
var jValue = jModifier["value"];
if (jValue is JArray)
{
//some values stored as arrays e.g. BBK's, as her damage scales with lost health
//in such cases calc damage using only the first value
value = ((JArray)jValue).First().Value<float>();
}
else
{
value = jValue.Value<float>();
}
var jSoulburn = jModifier["soulburn"];
if (jSoulburn is JArray)
{
soulburn = ((JArray)jSoulburn).First().Value<float>();
}
else
{
soulburn = jSoulburn.Value<float>();
}
switch (name)
{
case "pow":
pow = value;
powSoul = soulburn;
break;
case "atk_rate":
atk = value;
atkSoul = soulburn;
break;
case "hp_rate":
hp = value;
hpSoul = soulburn;
break;
case "def_rate":
def = value;
defSoul = soulburn;
break;
case "spd_rate":
spd = value;
spdSoul = soulburn;
break;
case "crit_dmg_rate":
critDmg = 1 + value;
critDmgSoul = 1 + soulburn;
break;
case "self_hp_current_rate":
otherMultipliers *= (1 + 100 * value);
otherMultipliersSoul *= (1 + 100 * soulburn);
break;
case "skill_dmg_rate":
case "target_hp_missing_rate":
case "self_hp_missing_value"://TODO think about add Krau's max hp
//ignore
break;
default:
throw new UnsupportedDamageModifierException(name);
}
}
jEnhancement = jSkill["enhancement"].ToArray();
pow = (float)jSkill["pow"];
atk = (float) jSkill["att_rate"];
jEnhancement = jSkill["enhancements"].ToArray();
Enhance = enhanceLevel;
HasSoulburn = jSkill["soulBurn"].ToObject<int>() > 0;
HasSoulburn = jSkill["soul_requirement"]?.ToObject<int>() > 0;
}

/// <summary>
Expand Down

0 comments on commit b4e783c

Please sign in to comment.