// private getters private BoonMap getBoonMap(ParsedLog log, List <Boon> to_track) { BoonMap boon_map = new BoonMap(); boon_map.add(to_track); // Fill in Boon Map long time_start = log.getBossData().getFirstAware(); foreach (CombatItem c in log.getBoonData()) { if (!boon_map.ContainsKey(c.getSkillID())) { continue; } long time = c.getTime() - time_start; ushort dst = c.isBuffremove() == ParseEnum.BuffRemove.None ? c.getDstInstid() : c.getSrcInstid(); if (agent.getInstid() == dst && time > 0 && time < log.getBossData().getAwareDuration()) { ushort src = c.getSrcMasterInstid() > 0 ? c.getSrcMasterInstid() : c.getSrcInstid(); if (c.isBuffremove() == ParseEnum.BuffRemove.None) { boon_map[c.getSkillID()].Add(new BoonLog(time, src, c.getValue(), 0)); } else if (Boon.removePermission(c.getSkillID(), c.isBuffremove(), c.getIFF())) { if (c.isBuffremove() == ParseEnum.BuffRemove.All)//All { List <BoonLog> loglist = boon_map[c.getSkillID()]; for (int cnt = loglist.Count() - 1; cnt >= 0; cnt--) { BoonLog curBL = loglist[cnt]; if (curBL.getTime() + curBL.getValue() > time) { long subtract = (curBL.getTime() + curBL.getValue()) - time; loglist[cnt].addValue(-subtract); // add removed as overstack loglist[cnt].addOverstack((ushort)subtract); } } } else if (c.isBuffremove() == ParseEnum.BuffRemove.Single)//Single { List <BoonLog> loglist = boon_map[c.getSkillID()]; int cnt = loglist.Count() - 1; BoonLog curBL = loglist[cnt]; if (curBL.getTime() + curBL.getValue() > time) { long subtract = (curBL.getTime() + curBL.getValue()) - time; loglist[cnt].addValue(-subtract); // add removed as overstack loglist[cnt].addOverstack((ushort)subtract); } } else if (c.isBuffremove() == ParseEnum.BuffRemove.Manual)//Manuel { List <BoonLog> loglist = boon_map[c.getSkillID()]; for (int cnt = loglist.Count() - 1; cnt >= 0; cnt--) { BoonLog curBL = loglist[cnt]; long ctime = curBL.getTime() + curBL.getValue(); if (ctime > time) { long subtract = (curBL.getTime() + curBL.getValue()) - time; loglist[cnt].addValue(-subtract); // add removed as overstack loglist[cnt].addOverstack((ushort)subtract); break; } } } } } } return(boon_map); }
public void setBoonMap(BossData bossData, SkillData skillData, List <CombatItem> combatList) { // Initialize Boon Map with every Boon foreach (Boon boon in Boon.getMainList()) { BoonMap map = new BoonMap(boon.getName(), new List <BoonLog>()); boon_map.Add(map); // boon_map.put(boon.getName(), new ArrayList<BoonLog>()); } foreach (Boon boon in Boon.getAllProfList()) { BoonMap map = new BoonMap(boon.getName(), new List <BoonLog>()); boon_map.Add(map); // boon_map.put(boon.getName(), new ArrayList<BoonLog>()); } // Fill in Boon Map int time_start = bossData.getFirstAware(); int fight_duration = bossData.getLastAware() - time_start; foreach (CombatItem c in combatList) { if (instid == c.getDstInstid()) { String skill_name = skillData.getName(c.getSkillID()); if (c.isBuff() == 1 && c.getValue() > 0 && c.isBuffremove().getID() == 0) { int count = 0; foreach (BoonMap bm in boon_map.ToList()) { if (skill_name.Contains(bm.getName())) { int time = c.getTime() - time_start; if (time < fight_duration) { List <BoonLog> loglist = bm.getBoonLog(); loglist.Add(new BoonLog(time, c.getValue(), c.getOverstackValue())); bm.setBoonLog(loglist); boon_map[count] = bm; } else { break; } } count++; } } else if (c.isBuffremove().getID() == 1 && c.getValue() > 0)//All { //finding correct boonmap int count = 0; foreach (BoonMap bm in boon_map.ToList()) { if (skill_name.Contains(bm.getName())) { //make sure log is within fight time int time = c.getTime() - time_start; if (time < fight_duration) { List <BoonLog> loglist = bm.getBoonLog(); for (int cnt = loglist.Count() - 1; cnt >= 0; cnt--) { BoonLog curBL = loglist[cnt]; if (curBL.getTime() + curBL.getValue() > time) { int subtract = (curBL.getTime() + curBL.getValue()) - time; loglist[cnt] = new BoonLog(curBL.getTime(), curBL.getValue() - subtract, curBL.getOverstack() + subtract); } } // loglist.Add(new BoonLog(time, c.getValue(), c.getOverstackValue())); bm.setBoonLog(loglist); boon_map[count] = bm; } else { break; } } count++; } } else if (c.isBuffremove().getID() == 2 && c.getValue() > 0)//Single { //finding correct boonmap int count = 0; foreach (BoonMap bm in boon_map.ToList()) { if (skill_name.Contains(bm.getName())) { if (bm.getName().Contains("Fury")) { int stop = 0; } //make sure log is within fight time int time = c.getTime() - time_start; if (time < fight_duration) { List <BoonLog> loglist = bm.getBoonLog(); for (int cnt = loglist.Count() - 1; cnt >= 0; cnt--) { BoonLog curBL = loglist[cnt]; if (curBL.getTime() + curBL.getValue() > time) { int subtract = (curBL.getTime() + curBL.getValue()) - time; loglist[cnt] = new BoonLog(curBL.getTime(), curBL.getValue() - subtract, curBL.getOverstack() + subtract); break; } } // loglist.Add(new BoonLog(time, c.getValue(), c.getOverstackValue())); bm.setBoonLog(loglist); boon_map[count] = bm; break; } else { break; } } count++; } } else if (c.isBuffremove().getID() == 3 && c.getValue() > 0)//Manuel { //finding correct boonmap int count = 0; foreach (BoonMap bm in boon_map.ToList()) { if (skill_name.Contains(bm.getName())) { if (bm.getName().Contains("Fury")) { int stop = 0; } //make sure log is within fight time int time = c.getTime() - time_start; if (time < fight_duration) { List <BoonLog> loglist = bm.getBoonLog(); for (int cnt = loglist.Count() - 1; cnt >= 0; cnt--) { BoonLog curBL = loglist[cnt]; if (curBL.getTime() + curBL.getValue() > time) { int subtract = (curBL.getTime() + curBL.getValue()) - time; loglist[cnt] = new BoonLog(curBL.getTime(), curBL.getValue() - subtract, curBL.getOverstack() + subtract); break; } } // loglist.Add(new BoonLog(time, c.getValue(), c.getOverstackValue())); bm.setBoonLog(loglist); boon_map[count] = bm; break; } else { break; } } count++; } } } } }