Skip to content

Commit

Permalink
alpha death recap tab. Needs testing for more cases
Browse files Browse the repository at this point in the history
  • Loading branch information
AARONSTABTOP\Aaron Bradford committed May 20, 2018
1 parent 45b1c1e commit 07fa64b
Show file tree
Hide file tree
Showing 5 changed files with 214 additions and 7 deletions.
179 changes: 178 additions & 1 deletion LuckParser/Controllers/Controller1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1408,6 +1408,19 @@ private List<BoonsGraphModel> getBossBoonGraph(Player p)
}
return uptime;
}
private bool getDied(Player p)
{
List<Point> dead = getCombatData().getStates(p.getInstid(), "CHANGE_DEAD");

if (dead.Count() > 0)
{
return true;
}
else
{
return false;
}
}
private void CreateDPSGraph(StreamWriter sw)
{

Expand Down Expand Up @@ -2668,6 +2681,7 @@ private void CreatePlayerTab(StreamWriter sw)
SkillData s_data = getSkillData();
List<SkillItem> s_list = s_data.getSkillList();
AgentData a_data = getAgentData();
bool died = getDied(p);
string charname = p.getCharacter();
sw.Write("<div class=\"tab-pane fade\" id=\"" + p.getInstid() + "\">" +
"<h1 align=\"center\"> " + charname + "<img src=\"" + GetLink(p.getProf().ToString()) + " \" alt=\"" + p.getProf().ToString() + "\" height=\"18\" width=\"18\" >" + "</h1>");
Expand All @@ -2676,9 +2690,12 @@ private void CreatePlayerTab(StreamWriter sw)
if (SnapSettings[10])
{
sw.Write("<li class=\"nav-item\"><a class=\"nav-link \" data-toggle=\"tab\" href=\"#SimpleRot" + p.getInstid() + "\">Simple Rotation</a></li>");

}
if (died)
{
sw.Write("<li class=\"nav-item\"><a class=\"nav-link \" data-toggle=\"tab\" href=\"#DeathRecap" + p.getInstid() + "\">Death Recap</a></li>");

}
//foreach pet loop here
List<int> minionIDlist = p.getMinionList(b_data, c_data.getCombatList(), a_data);
List<AgentItem> minionAgentList = new List<AgentItem>();
Expand Down Expand Up @@ -3146,6 +3163,12 @@ private void CreatePlayerTab(StreamWriter sw)
CreateSimpleRotationTab(sw, p);
sw.Write("</div>");
}
if (died)
{
sw.Write("<div class=\"tab-pane fade \" id=\"DeathRecap" + p.getInstid() + "\">");
CreateDeathRecap(sw, p);
sw.Write("</div>");
}
sw.Write("<div class=\"tab-pane fade \" id=\"incDmg" + p.getInstid() + "\">");

CreateDMGTakenDistTable(sw, p);
Expand Down Expand Up @@ -3225,6 +3248,160 @@ private void CreateSimpleRotationTab(StreamWriter sw,Player p) {
}
}

}
private void CreateDeathRecap(StreamWriter sw, Player p)
{
CombatData c_data = getCombatData();
BossData b_data = getBossData();
AgentData a_data = getAgentData();
List<DamageLog> damageLogs = p.getDamageTakenLogs(b_data, c_data.getCombatList(), getAgentData(), getMechData());
SkillData s_data = getSkillData();
List<SkillItem> s_list = s_data.getSkillList();
List<Point> down = getCombatData().getStates(p.getInstid(), "CHANGE_DOWN");
List<Point> dead = getCombatData().getStates(p.getInstid(), "CHANGE_DEAD");
List<DamageLog> damageToDown = new List<DamageLog>();
List<DamageLog> damageToKill = new List<DamageLog>(); ;
if (down.Count > 0)
{//went to down state before death
damageToDown = damageLogs.Where(x => x.getTime() < down.Last().X-b_data.getFirstAware()).ToList();
damageToKill = damageLogs.Where(x => x.getTime() > down.Last().X - b_data.getFirstAware() && x.getTime() < dead.Last().X - b_data.getFirstAware()).ToList();
//Filter last 30k dmg taken
int totaldmg = 0;
for (int i = damageToDown.Count() - 1; i > 0; i--)
{
totaldmg += damageToDown[i].getDamage();
if (totaldmg > 30000)
{
damageToDown = damageToDown.GetRange(i, damageToDown.Count() - 1-i);
break;
}
}
sw.Write("<center><p>Took " + damageToDown.Sum(x => x.getDamage()) + " damage in " +
((damageToDown.Last().getTime() - damageToDown.First().getTime()) / 1000f).ToString() + " seconds to enter downstate");
sw.Write("<p>Took " + damageToKill.Sum(x => x.getDamage()) + " damage in " +
((damageToKill.Last().getTime() - damageToKill.First().getTime()) / 1000f).ToString() + " seconds to die</center>");
}
else
{
damageToKill = damageLogs.Where(x => x.getTime() < dead.Last().X).ToList();
//Filter last 30k dmg taken
int totaldmg = 0;
for (int i = damageToKill.Count() - 1; i > 0; i--)
{
totaldmg += damageToKill[i].getDamage();
if (totaldmg > 30000)
{
damageToKill = damageToKill.GetRange(i, damageToKill.Count() - 1-i);
break;
}
}
sw.Write("<center><h3>Player was insta killed by a mechanic</h3></center>");
}

sw.Write("<center><div id=\"BarDeathRecap"+p.getInstid()+"\"></div> </center>");
sw.Write("<script>");
{
sw.Write("var data = [{");
//Time on X
sw.Write("x : [");
if (damageToDown.Count() != 0)
{
for (int d = 0;d<damageToDown.Count();d++)
{
sw.Write("'"+damageToDown[d].getTime()/1000f+"s',");
}
}
for (int d = 0; d < damageToKill.Count(); d++)
{
sw.Write("'" + damageToKill[d].getTime()/1000f + "s'");

if (d != damageToKill.Count() - 1)
{
sw.Write(",");
}
}
sw.Write("],");
//damage on Y
sw.Write("y : [");
if (damageToDown.Count() != 0)
{
for (int d = 0; d < damageToDown.Count(); d++)
{
sw.Write("'" + damageToDown[d].getDamage() + "',");
}
}
for (int d = 0; d < damageToKill.Count(); d++)
{
sw.Write("'" + damageToKill[d].getDamage() + "'");

if (d != damageToKill.Count() - 1)
{
sw.Write(",");
}
}
sw.Write("],");
//Color
sw.Write("marker : {color:[");
if (damageToDown.Count() != 0)
{
for (int d = 0; d < damageToDown.Count(); d++)
{
sw.Write("'rgb(0,255,0,1)',");
}
}
for (int d = 0; d < damageToKill.Count(); d++)
{

if (down.Count() == 0)
{
//damagetoKill was instant(not in downstate)
sw.Write("'rgb(0,255,0,1)'");
}
else
{
//damageto killwas from downstate
sw.Write("'rgb(255,0,0,1)'");
}


if (d != damageToKill.Count() - 1)
{
sw.Write(",");
}
}
sw.Write("]},");
//text
sw.Write("text : [");
if (damageToDown.Count() != 0)
{
for (int d = 0; d < damageToDown.Count(); d++)
{
sw.Write("'" + a_data.GetAgentWInst(damageToDown[d].getInstidt()).getName().Replace("\0", "") + "<br>"+
s_data.getName( damageToDown[d].getID()) +" hit you for "+damageToDown[d].getDamage() + "',");
}
}
for (int d = 0; d < damageToKill.Count(); d++)
{
sw.Write("'" + a_data.GetAgentWInst(damageToKill[d].getInstidt()).getName().Replace("\0","") + "<br>" +
"hit you with <b>"+ s_data.getName(damageToKill[d].getID()) + "</b> for " + damageToKill[d].getDamage() + "'");

if (d != damageToKill.Count() - 1)
{
sw.Write(",");
}
}
sw.Write("],");
sw.Write("type:'bar',");

sw.Write("}];");

sw.Write("var layout = { title: 'Last 30k Damage Taken before death', font: { color: '#ffffff' },"+
"paper_bgcolor: 'rgba(0,0,0,0)', plot_bgcolor: 'rgba(0,0,0,0)',showlegend: false,bargap :0.05,yaxis:{title:'Damage'},xaxis:{title:'Time(seconds)',type:'catagory'}};");
sw.Write("Plotly.newPlot('BarDeathRecap" + p.getInstid() + "', data, layout);");
sw.Write("</script>");
}


}
private void CreateDMGDistTable(StreamWriter sw,Player p) {

Expand Down
13 changes: 12 additions & 1 deletion LuckParser/Models/ParseModels/AgentData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,18 @@ public List<AgentItem> getAllAgentsList()
return all_agents_list;
}
public AgentItem GetAgent(long agent) {
return all_agents_list.FirstOrDefault(x => x.getAgent() == agent);
if (agent != 0)
{
AgentItem agtreturn = all_agents_list.FirstOrDefault(x => x.getAgent() == agent);
if (agtreturn != null)
{
return agtreturn;
}

}

return new AgentItem(0,"UNKOWN","UNKNOWN");

}
public AgentItem GetAgentWInst(int instid)
{
Expand Down
2 changes: 2 additions & 0 deletions LuckParser/Models/ParseModels/AgentItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ public int getLastAware()

public String getName()
{
// name = name.Replace("\0", "");

return name;
}

Expand Down
23 changes: 20 additions & 3 deletions LuckParser/Models/ParseModels/DamageLog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class DamageLog
private int is_flanking;
private Activation is_activation;
private int is_shields;
private int src_agent;
private long src_agent;
private int src_instid;

// Constructor
Expand All @@ -36,7 +36,7 @@ public DamageLog(int time, int damage, int skill_id, int buff, Result result, in
this.is_flanking = is_flanking;
this.is_activation = is_activation;
}
public DamageLog(int time, int srcagent,int instid, int damage, int skill_id, int buff, Result result, int is_ninety, int is_moving,
public DamageLog(int time, long srcagent,int instid, int damage, int skill_id, int buff, Result result, int is_ninety, int is_moving,
int is_flanking, Activation is_activation)
{
this.time = time;
Expand Down Expand Up @@ -66,6 +66,23 @@ public DamageLog(int time, int damage, int skill_id, int buff, Result result, in
this.is_activation = is_activation;
this.is_shields = is_shields;
}
public DamageLog(int time, long srcagent, int instid, int damage, int skill_id, int buff, Result result, int is_ninety, int is_moving,
int is_flanking, Activation is_activation,int is_shields)
{
this.time = time;
this.damage = damage;
this.skill_id = skill_id;
this.buff = buff;
this.result = result;
this.is_ninety = is_ninety;
this.is_moving = is_moving;
this.is_flanking = is_flanking;
this.is_activation = is_activation;
this.src_agent = srcagent;
this.src_instid = instid;
this.is_shields = is_shields;

}
// Getters
public int getTime()
{
Expand Down Expand Up @@ -113,7 +130,7 @@ public Activation isActivation()
public int isShields() {
return is_shields;
}
public int getSrcAgent()
public long getSrcAgent()
{
return src_agent;
}
Expand Down
4 changes: 2 additions & 2 deletions LuckParser/Models/ParseModels/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -398,14 +398,14 @@ public void setDamagetaken(BossData bossData, List<CombatItem> combatList, Agent
else if (c.isBuff() == 0 && c.getValue() != 0)
{
damagetaken.Add(c.getValue());
damageTaken_logs.Add(new DamageLog(time, c.getValue(), c.getSkillID(), c.isBuff(),
damageTaken_logs.Add(new DamageLog(time,(int)c.getSrcAgent(),c.getSrcInstid(), c.getValue(), c.getSkillID(), c.isBuff(),
c.getResult(), c.isNinety(), c.isMoving(), c.isFlanking(), c.isActivation(),c.isShields()));

}
else if (c.isBuff() == 0 && c.getValue() == 0)
{

damageTaken_logs.Add(new DamageLog(time, c.getBuffDmg(), c.getSkillID(), c.isBuff(),
damageTaken_logs.Add(new DamageLog(time,(int)c.getSrcAgent(),c.getSrcInstid(), c.getBuffDmg(), c.getSkillID(), c.isBuff(),
c.getResult(), c.isNinety(), c.isMoving(), c.isFlanking(), c.isActivation(),c.isShields()));
}
}
Expand Down

0 comments on commit 07fa64b

Please sign in to comment.