Search in sources :

Example 1 with CombatStats

use of com.ixale.starparse.domain.stats.CombatStats in project StarParse by Ixale.

the class CombatDaoImpl method getCombatStats.

private CombatStats getCombatStats(final Combat combat, final CombatSelection combatSel, final String playerName, final boolean realDuration) throws Exception {
    final Map<String, Object> args = new HashMap<>();
    args.put("playerName", playerName == null ? getCharacterName(combat) : playerName);
    final Long timeFrom;
    final String sql;
    if (combatSel == null) {
        sql = SQL_GET_STATS_SUMS_CACHED;
        args.put("combatId", combat.getCombatId());
        timeFrom = null;
    } else {
        final Boundaries bounds = getBoundaries(combat, combatSel);
        // time from
        args.put("timeFrom", bounds.timeFrom);
        args.put("timeTo", bounds.timeTo);
        timeFrom = bounds.timeFrom.getTime();
        // events
        args.put("eventIdFrom", bounds.eventIdFrom);
        args.put("eventIdTo", bounds.eventIdTo);
        // support for custom conditions (for challenges)
        if (combatSel.getSql() != null) {
            sql = SQL_GET_STATS_SUMS.substring(0, SQL_GET_STATS_SUMS.length() - 1) + " AND " + combatSel.getSql() + ")";
            if (combatSel.getArgs() != null) {
                args.putAll(combatSel.getArgs());
            }
        } else {
            sql = SQL_GET_STATS_SUMS;
        }
    }
    try {
        final CombatStats stats = getJdbcTemplate().query(sql, args, rs -> {
            if (!rs.next()) {
                return null;
            }
            int duration;
            if (realDuration) {
                if (getTimestamp(rs, "time_to") != null && timeFrom != null) {
                    duration = (int) Math.max(1000, getTimestamp(rs, "time_to").getTime() - timeFrom);
                } else {
                    duration = 1000;
                }
            } else {
                duration = rs.getInt("duration");
            }
            return new CombatStats(duration, getIntSafe(rs, "actions"), getIntSafe(rs, "damage"), getIntSafe(rs, "heal"), getIntSafe(rs, "effective_heal"), getIntSafe(rs, "damage_taken"), // total = sub-total
            getIntSafe(rs, "damage_taken"), getIntSafe(rs, "absorbed"), // total = sub-total
            getIntSafe(rs, "absorbed"), getIntSafe(rs, "heal_taken"), getIntSafe(rs, "effective_heal_taken"), // total = sub-total
            getIntSafe(rs, "effective_heal_taken"), getIntSafe(rs, "threat"), // not used in total statistics
            getIntSafe(rs, "threat_positive"), rs.getString("discipline") != null ? CharacterDiscipline.valueOf(rs.getString("discipline")) : null);
        });
        if (stats == null && combatSel == null) {
            // NPC perspective = no cached sums
            return getCombatStats(combat, new CombatSelection(combat.getEventIdFrom(), combat.getEventIdTo(), null, null), playerName, realDuration);
        }
        return stats;
    } catch (Exception e) {
        throw new Exception("Unable to get combat summary (" + args + "): " + e.getMessage(), e);
    }
}
Also used : CombatSelection(com.ixale.starparse.domain.CombatSelection) CombatStats(com.ixale.starparse.domain.stats.CombatStats) HashMap(java.util.HashMap) DataAccessException(org.springframework.dao.DataAccessException) SQLException(java.sql.SQLException) EmptyResultDataAccessException(org.springframework.dao.EmptyResultDataAccessException)

Example 2 with CombatStats

use of com.ixale.starparse.domain.stats.CombatStats in project StarParse by Ixale.

the class CombatDaoImpl method getCombatChallengeStats.

@Override
public List<ChallengeStats> getCombatChallengeStats(final Combat combat, final CombatSelection combatSel, final String playerName) throws Exception {
    if ((combat.getBoss() == null) || ((availableChallenges = combat.getBoss().getRaid().getChallenges(combat.getBoss())) == null)) {
        return null;
    }
    phasesToChallenges.clear();
    for (final CombatChallenge ch : availableChallenges) {
        phasesToChallenges.put(ch.getPhaseName(), ch);
    }
    final Map<String, Object> args = new HashMap<>();
    args.put("combatId", combat.getCombatId());
    args.put("tickFrom", combatSel != null && combatSel.getTickFrom() != null ? combatSel.getTickFrom() : 0);
    args.put("tickTo", combatSel != null && combatSel.getTickTo() != null ? combatSel.getTickTo() : Integer.MAX_VALUE);
    args.put("phaseNames", new ArrayList<>(phasesToChallenges.keySet()));
    return getJdbcTemplate().query(SQL_GET_COMBAT_CHALLENGES, args, new RowMapper<ChallengeStats>() {

        Long tickFrom, tickTo;

        boolean noCache = false;

        @Override
        public ChallengeStats mapRow(ResultSet rs, int rowNum) {
            try {
                noCache = false;
                if (combatSel != null) {
                    if (combatSel.getTickFrom() != null && (combatSel.getTickFrom() > rs.getLong("tick_from"))) {
                        tickFrom = combatSel.getTickFrom();
                        noCache = true;
                    } else {
                        tickFrom = rs.getLong("tick_from");
                    }
                    if (combatSel.getTickTo() != null && (getValueOrNull(rs, rs.getLong("tick_to")) == null || context.getTickTo() < rs.getLong("tick_to"))) {
                        tickTo = combatSel.getTickTo();
                        noCache = true;
                    } else {
                        tickTo = getValueOrNull(rs, rs.getLong("tick_to"));
                        noCache = noCache || tickTo == null;
                    }
                } else {
                    tickFrom = rs.getLong("tick_from");
                    tickTo = getValueOrNull(rs, rs.getLong("tick_to"));
                }
                if (!noCache && cachedChallenges.containsKey(combat.getCombatId())) {
                    if (cachedChallenges.get(combat.getCombatId()).containsKey(playerName)) {
                        if (cachedChallenges.get(combat.getCombatId()).get(playerName).containsKey(rs.getLong("tick_from"))) {
                            return cachedChallenges.get(combat.getCombatId()).get(playerName).get(rs.getLong("tick_from"));
                        // NOTREACHED
                        }
                    }
                }
                final CombatSelection challengeCombatSel = new CombatSelection(rs.getInt("event_id_from"), getValueOrNull(rs, rs.getInt("event_id_to")), tickFrom, tickTo, phasesToChallenges.get(rs.getString("name")).getArgs(), phasesToChallenges.get(rs.getString("name")).getSql());
                final CombatStats stats = getCombatStats(combat, challengeCombatSel, playerName, true);
                final ChallengeStats challengeStats = new ChallengeStats(phasesToChallenges.get(rs.getString("name")).getChallengeName(), tickFrom, tickFrom + stats.getTick(), stats.getDamage(), stats.getHeal(), stats.getEffectiveHeal());
                if (!noCache && (getValueOrNull(rs, rs.getLong("tick_to")) != null)) {
                    if (!cachedChallenges.containsKey(combat.getCombatId())) {
                        cachedChallenges.put(combat.getCombatId(), new HashMap<>());
                    }
                    if (!cachedChallenges.get(combat.getCombatId()).containsKey(playerName)) {
                        cachedChallenges.get(combat.getCombatId()).put(playerName, new HashMap<>());
                    }
                    cachedChallenges.get(combat.getCombatId()).get(playerName).put(rs.getLong("tick_from"), challengeStats);
                }
                return challengeStats;
            } catch (Exception e) {
                logger.error("Unable to get combat challenge: " + e.getMessage(), e);
                return null;
            }
        }
    });
}
Also used : CombatSelection(com.ixale.starparse.domain.CombatSelection) HashMap(java.util.HashMap) ChallengeStats(com.ixale.starparse.domain.stats.ChallengeStats) DataAccessException(org.springframework.dao.DataAccessException) SQLException(java.sql.SQLException) EmptyResultDataAccessException(org.springframework.dao.EmptyResultDataAccessException) CombatChallenge(com.ixale.starparse.domain.CombatChallenge) CombatStats(com.ixale.starparse.domain.stats.CombatStats) ResultSet(java.sql.ResultSet)

Example 3 with CombatStats

use of com.ixale.starparse.domain.stats.CombatStats in project StarParse by Ixale.

the class EventServiceImpl method getCombatStats.

@Override
public CombatStats getCombatStats(final List<Combat> combats, final CombatSelection combatSel, final String playerName) throws Exception {
    int tick = 0;
    int actions = 0;
    int damage = 0;
    int heal = 0;
    int effectiveHeal = 0;
    int damageTaken = 0;
    int damageTakenTotal = 0;
    int absorbed = 0;
    int absorbedTotal = 0;
    int healTaken = 0;
    int effectiveHealTaken = 0;
    int effectiveHealTakenTotal = 0;
    int threat = 0;
    int threatPositive = 0;
    for (final Combat combat : combats) {
        if (combat == null) {
            continue;
        }
        final CombatStats cs = combatDao.getCombatStats(combat, combatSel, playerName);
        tick += cs.getTick();
        actions += cs.getActions();
        damage += cs.getDamage();
        heal += cs.getHeal();
        effectiveHeal += cs.getEffectiveHeal();
        damageTaken += cs.getDamageTaken();
        damageTakenTotal += cs.getDamageTakenTotal();
        absorbed += cs.getAbsorbed();
        absorbedTotal += cs.getAbsorbedTotal();
        healTaken += cs.getHealTaken();
        effectiveHealTaken += cs.getEffectiveHealTaken();
        effectiveHealTakenTotal += cs.getEffectiveHealTakenTotal();
        threat += cs.getThreat();
        threatPositive += cs.getThreatPositive();
    }
    return new CombatStats(tick, actions, damage, heal, effectiveHeal, damageTaken, damageTakenTotal, absorbed, absorbedTotal, healTaken, effectiveHealTaken, effectiveHealTakenTotal, threat, threatPositive, null);
}
Also used : CombatStats(com.ixale.starparse.domain.stats.CombatStats) Combat(com.ixale.starparse.domain.Combat)

Example 4 with CombatStats

use of com.ixale.starparse.domain.stats.CombatStats in project StarParse by Ixale.

the class EventServiceTest method testFull.

@Test
public void testFull() throws Exception {
    // load test source file
    final File sourceLog = new File(getClass().getClassLoader().getResource("combat_2014-01-26_22_01_13_435268.txt").toURI());
    parser.setCombatLogFile(sourceLog);
    // check DAO
    eventService.storeCombatLog(parser.getCombatLog());
    // parse one by one, with intermediary flushes
    FileReader fr = null;
    BufferedReader br = null;
    try {
        fr = new FileReader(sourceLog);
        br = new BufferedReader(fr);
        String line;
        int i = 0;
        while ((line = br.readLine()) != null) {
            parser.parseLogLine(line);
            if (++i % 3000 == 0) {
                eventService.flushEvents(parser.getEvents(), parser.getCombats(), parser.getCurrentCombat(), parser.getEffects(), parser.getCurrentEffects(), parser.getPhases(), parser.getCurrentPhase(), parser.getAbsorptions(), parser.getActorStates());
            }
        }
        eventService.flushEvents(parser.getEvents(), parser.getCombats(), parser.getCurrentCombat(), parser.getEffects(), parser.getCurrentEffects(), parser.getPhases(), parser.getCurrentPhase(), parser.getAbsorptions(), parser.getActorStates());
    } finally {
        try {
            br.close();
        } catch (Exception ignored) {
        }
        try {
            fr.close();
        } catch (Exception ignored) {
        }
    }
    // check result
    Combat c = null;
    CombatStats stats = null;
    DamageDealtStats dds = null;
    List<DamageDealtStats> damageDealtStats = null;
    SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS", Locale.ENGLISH);
    SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss.SSS", Locale.ENGLISH);
    List<Combat> combats = eventService.getCombats();
    assertEquals(31, combats.size());
    assertEquals("Ixale", parser.getCombatLog().getCharacterName());
    // verify combat 1
    c = combats.get(1);
    assertEquals("2014-01-27 01:10:34.526", sdf.format(c.getTimeFrom()));
    assertEquals("Dread Master Calphayus (SM 8m)", c.getBoss().toString());
    assertEquals(442874, c.getTimeTo() - c.getTimeFrom());
    stats = eventService.getCombatStats(c, null, parser.getCombatLog().getCharacterName());
    assertEquals(34.68, stats.getApm());
    assertEquals(1018954, stats.getDamage());
    assertEquals(2301, stats.getDps());
    assertEquals(199588, stats.getHeal());
    assertEquals(451, stats.getHps());
    assertEquals(204, stats.getEhps());
    assertEquals(45.31, stats.getEhpsPercent());
    assertEquals(140364, stats.getDamageTaken());
    assertEquals(317, stats.getDtps());
    assertEquals(342032, stats.getHealTaken());
    assertEquals(772, stats.getHpsTaken());
    assertEquals(295, stats.getEhpsTaken());
    assertEquals(1143416, stats.getThreat());
    assertEquals(2582, stats.getTps());
    assertEquals(1143416, stats.getThreatPositive());
    assertEquals(8358, stats.getAbsorbed());
    // verify combat 6
    c = combats.get(6);
    assertEquals("2014-01-27 01:31:59.110", sdf.format(c.getTimeFrom()));
    assertEquals("Dread Master Raptus (HM 8m)", c.getBoss().toString());
    assertEquals(394327, c.getTimeTo() - c.getTimeFrom());
    stats = eventService.getCombatStats(c, null, parser.getCombatLog().getCharacterName());
    assertEquals(32.41, stats.getApm());
    assertEquals(874441, stats.getDamage());
    assertEquals(2218, stats.getDps());
    assertEquals(132737, stats.getHeal());
    assertEquals(337, stats.getHps());
    assertEquals(253, stats.getEhps());
    assertEquals(75.21, stats.getEhpsPercent());
    assertEquals(247176, stats.getDamageTaken());
    assertEquals(627, stats.getDtps());
    assertEquals(303582, stats.getHealTaken());
    assertEquals(770, stats.getHpsTaken());
    assertEquals(509, stats.getEhpsTaken());
    assertEquals(14938, stats.getThreat());
    assertEquals(38, stats.getTps());
    assertEquals(845628, stats.getThreatPositive());
    // verify combat 14
    c = combats.get(14);
    assertEquals("2014-01-27 02:05:31.950", sdf.format(c.getTimeFrom()));
    assertEquals(null, c.getBoss());
    assertEquals(61428, c.getTimeTo() - c.getTimeFrom());
    assertEquals("Dwayna, Bartley, Dread Host Soldier (2), Dread Guard Nullifier, Dread Host Commando, Unknown", c.getName());
    // verify combat 30
    c = combats.get(30);
    assertEquals("2014-01-27 02:51:10.836", sdf.format(c.getTimeFrom()));
    assertEquals("Dread Master Brontes (SM 8m)", c.getBoss().toString());
    assertEquals(444166, c.getTimeTo() - c.getTimeFrom());
    stats = eventService.getCombatStats(c, null, parser.getCombatLog().getCharacterName());
    damageDealtStats = eventService.getDamageDealtStats(c, false, false, false, null, parser.getCombatLog().getCharacterName());
    assertEquals(1, damageDealtStats.size());
    dds = damageDealtStats.get(0);
    assertEquals("Total", dds.getName());
    assertEquals(876, dds.getTicks());
    assertEquals(2043.0, dds.getAverageCrit());
    assertEquals(1248.0, dds.getAverageNormal());
    assertEquals(33.22, dds.getPercentCrit());
    assertEquals(7.76, dds.getPercentMiss());
    assertEquals(594457, dds.getTotalCrit());
    assertEquals(571678, dds.getTotalNormal());
    assertEquals(1166135, dds.getTotal());
    assertEquals(2625, dds.getDps());
    assertEquals(100.0, dds.getPercentTotal());
    damageDealtStats = eventService.getDamageDealtStats(c, false, false, true, null, parser.getCombatLog().getCharacterName());
    assertEquals(12, damageDealtStats.size());
    dds = damageDealtStats.get(0);
    assertEquals("Overload Saber: Burning (Physical)", dds.getName());
    // dots actions
    assertEquals(31, dds.getActions());
    assertEquals(144, dds.getTicks());
    assertEquals(2291.0, dds.getAverageCrit());
    assertEquals(1085.0, dds.getAverageNormal());
    assertEquals(61.11, dds.getPercentCrit());
    assertEquals(0.69, dds.getPercentMiss());
    assertEquals(201615, dds.getTotalCrit());
    assertEquals(53182, dds.getTotalNormal());
    assertEquals(254797, dds.getTotal());
    assertEquals(574, dds.getDps());
    assertEquals(21.8, dds.getPercentTotal());
    assertEquals("elemental", dds.getDamageType());
    damageDealtStats = eventService.getDamageDealtStats(c, true, true, false, null, parser.getCombatLog().getCharacterName());
    assertEquals(17, damageDealtStats.size());
    dds = damageDealtStats.get(0);
    assertEquals("Total", dds.getName());
    assertEquals(420, dds.getTicks());
    assertEquals(2065.0, dds.getAverageCrit());
    assertEquals(33.33, dds.getPercentCrit());
    damageDealtStats = eventService.getDamageDealtStatsSimple(c, null, parser.getCombatLog().getCharacterName());
    assertEquals(1, damageDealtStats.size());
    dds = damageDealtStats.get(0);
    assertEquals("Total", dds.getName());
    assertEquals(876, dds.getTicks());
    assertEquals(33.22, dds.getPercentCrit());
    assertEquals(7.76, dds.getPercentMiss());
    assertEquals(2625, dds.getDps());
    List<Effect> effects = eventService.getCombatEffects(c, null);
    Effect effect;
    assertEquals(301, effects.size());
    effect = effects.get(0);
    assertEquals("Power Surge", effect.getEffect().getName());
    assertEquals(Long.valueOf(3244362460823552L), effect.getEffect().getGuid());
    assertEquals("Ixale", effect.getSource().getName());
    assertEquals(1, effect.getSource().getType().getId());
    assertEquals("Ixale", effect.getTarget().getName());
    assertEquals(1, effect.getTarget().getType().getId());
    assertEquals("2014-01-27 02:51:12.873", sdf.format(effect.getTimeFrom()));
    assertEquals("2014-01-27 02:51:18.933", sdf.format(effect.getTimeTo()));
    assertFalse(effect.isAbsorption());
    assertFalse(effect.isActivated());
    effect = effects.get(102);
    assertEquals("Kolto Cloud", effect.getEffect().getName());
    assertEquals("Fathersheep", effect.getSource().getName());
    assertEquals("Ixale", effect.getTarget().getName());
    assertEquals("2014-01-27 02:53:49.941", sdf.format(effect.getTimeFrom()));
    assertEquals("2014-01-27 02:53:59.028", sdf.format(effect.getTimeTo()));
    assertFalse(effect.isAbsorption());
    assertFalse(effect.isActivated());
    effect = effects.get(153);
    assertEquals("Force Armor", effect.getEffect().getName());
    assertTrue(effect.isAbsorption());
    assertFalse(effect.isActivated());
    effect = effects.get(300);
    assertEquals("Burning (Physical)", effect.getEffect().getName());
    assertEquals("Ixale", effect.getSource().getName());
    assertEquals("Dread Master Brontes", effect.getTarget().getName());
    assertEquals("2014-01-27 02:58:32.268", sdf.format(effect.getTimeFrom()));
    assertEquals("2014-01-27 02:58:35.035", sdf.format(effect.getTimeTo()));
    assertFalse(effect.isAbsorption());
    assertFalse(effect.isActivated());
    /*long x = System.currentTimeMillis();
		List<Event> events = eventService.getCombatEvents(c, EnumSet.noneOf(Event.Type.class), null, null, null, null);
		System.out.println("Took: "+(System.currentTimeMillis() - x)+" ("+events.size()+")");

		for (Event e: events) {
			File f = new File("c:/x/e"+e.getEventId()+".log");
			FileOutputStream fos = new FileOutputStream(f);
			ObjectOutputStream out = new ObjectOutputStream(fos);
			out.writeObject(e);
			out.flush();
			out.close();
			fos.close();
		}*/
    /*context.reset();
		events = null;

		FileInputStream fin = new FileInputStream(f);
		ObjectInputStream in = new ObjectInputStream(fin);
		events = (List<Event>) in.readObject();
		System.out.println(events.get(0).getSource().hashCode());
		System.out.println(events.get(1).getSource().hashCode());
		System.out.println(events.get(2).getSource().hashCode());
		in.close();
		fin.close();*/
    // check combat extraction
    c = combats.get(14);
    assertEquals("2014-01-27 02:05:31.950", sdf.format(c.getTimeFrom()));
    assertEquals("2014-01-27 02:06:33.378", sdf.format(c.getTimeTo()));
    final String combat14 = FileLoader.extractPortion(sourceLog, "[" + sdfTime.format(c.getTimeFrom()), "[" + sdfTime.format(c.getTimeTo())).sb.toString();
    assertNotNull(combat14);
    assertEquals(58794, combat14.length());
}
Also used : CombatStats(com.ixale.starparse.domain.stats.CombatStats) Combat(com.ixale.starparse.domain.Combat) BufferedReader(java.io.BufferedReader) FileReader(java.io.FileReader) Effect(com.ixale.starparse.domain.Effect) File(java.io.File) SimpleDateFormat(java.text.SimpleDateFormat) DamageDealtStats(com.ixale.starparse.domain.stats.DamageDealtStats) Test(org.junit.Test)

Example 5 with CombatStats

use of com.ixale.starparse.domain.stats.CombatStats in project StarParse by Ixale.

the class RaidPresenter method finalizeTable.

private void finalizeTable() {
    final CombatTotals totals = new CombatTotals();
    // cross-fill absorptions
    final Iterator<RaidItem> it = raidTable.getItems().iterator();
    while (it.hasNext()) {
        final RaidItem item = it.next();
        if (TOTALS_LABEL.equals(item.getName())) {
            continue;
        }
        if (isFakePlayerHidden(item.getFullName(), raidTable.getItems())) {
            it.remove();
            continue;
        }
        fillAbsorption(item);
        fillRank(item);
        final CombatStats cs = item.getMessage().getCombatStats();
        if (cs.getTick() > totals.tick) {
            totals.tick = cs.getTick();
        }
        totals.actions += cs.getActions();
        totals.damage += cs.getDamage();
        totals.heal += cs.getHeal();
        totals.effectiveHeal += cs.getEffectiveHeal();
        totals.damageTaken += cs.getDamageTaken();
        totals.damageTakenTotal += cs.getDamageTakenTotal();
        totals.absorbed += cs.getAbsorbed();
        totals.absorbedTotal += cs.getAbsorbedTotal();
        totals.healTaken += cs.getHealTaken();
        totals.effectiveHealTaken += cs.getEffectiveHealTaken();
        totals.effectiveHealTakenTotal += cs.getEffectiveHealTakenTotal();
        totals.threat += cs.getThreat();
        totals.threatPositive += cs.getThreatPositive();
        totals.shielding += item.getShielding();
        totals.sps += item.getSps();
    }
    this.resortTable(raidTable);
    if (!rankCol.isVisible() && canRank(currentCombat)) {
        rankCol.setVisible(true);
    }
    if (currentCombat.isRunning() && currentCombat.getTimeTo() == null) {
        int exits = 0;
        for (final RaidItem item : raidTable.getItems()) {
            if (item.getMessage().getExitEvent() != null) {
                exits++;
            }
        }
        if (exits < raidTable.getItems().size() - 1) {
            // wait until the combat is finished
            return;
        }
    }
    // combat deaths
    final List<Node> items = new ArrayList<>();
    items.add(raidDeathsTitle);
    for (final RaidItem item : raidTable.getItems()) {
        if (item.getMessage() == null) {
            continue;
        }
        if (item.getMessage().getCombatEventStats() != null && !item.getMessage().getCombatEventStats().isEmpty()) {
            for (final CombatEventStats ce : item.getMessage().getCombatEventStats()) {
                fillCombatEvents(item, ce.getType(), ce.getTimestamp(), items);
            }
        }
        // expand last event
        if (item.getMessage().getExitEvent() != null && Event.Type.DEATH.equals(item.getMessage().getExitEvent())) {
            fillCombatEvents(item, item.getMessage().getExitEvent(), item.getMessage().getTimestamp(), items);
        }
    }
    int j = items.size();
    if (j > 1) {
        items.sort(deathComparator);
        // ignore "wipe" deaths (if almost everyone dies, cut in half and include only if the gap is above X seconds)
        if (j > raidTable.getItems().size()) {
            // i.e. wipe: j >= 2
            j = items.size() - 1;
            long last = ((long) items.get(j).getUserData());
            for (int i = j - 1; i >= 1; i--) {
                // 1 = label
                if (((long) items.get(i).getUserData()) > (last - 5000)) {
                    last = ((long) items.get(i).getUserData());
                    j = i;
                }
            }
        }
        if (j > 1) {
            raidDeaths.getChildren().setAll(items.subList(0, j));
            if (!raidDeaths.isVisible()) {
                raidDeaths.setVisible(true);
                raidDeaths.setPrefHeight(25);
            }
        }
    }
    if (raidTable.getItems().size() > 1) {
        // totals
        if (totalsItem == null) {
            totalsItem = new RaidItem();
            raidTable.getItems().add(totalsItem);
        }
        fillItem(totalsItem, new RaidCombatMessage(TOTALS_LABEL, 0, null, null, null, null, new CombatStats(totals.tick, totals.actions, totals.damage, totals.heal, totals.effectiveHeal, totals.damageTaken, totals.damageTakenTotal, totals.absorbed, totals.absorbedTotal, totals.healTaken, totals.effectiveHealTaken, totals.effectiveHealTakenTotal, totals.threat, totals.threatPositive, null), null, null, null, totals.tick, null, null));
        totalsItem.shielding.set(totals.shielding);
        totalsItem.sps.set(totals.sps);
        totalsItem.rank.set(RankClass.Reason.RANK_DISABLED.getCode());
    }
}
Also used : RaidItem(com.ixale.starparse.gui.table.item.RaidItem) RaidCombatMessage(com.ixale.starparse.ws.RaidCombatMessage) CombatStats(com.ixale.starparse.domain.stats.CombatStats) CombatEventStats(com.ixale.starparse.domain.stats.CombatEventStats) Node(javafx.scene.Node) ArrayList(java.util.ArrayList)

Aggregations

CombatStats (com.ixale.starparse.domain.stats.CombatStats)6 Combat (com.ixale.starparse.domain.Combat)3 CombatSelection (com.ixale.starparse.domain.CombatSelection)3 SQLException (java.sql.SQLException)3 HashMap (java.util.HashMap)3 DataAccessException (org.springframework.dao.DataAccessException)3 EmptyResultDataAccessException (org.springframework.dao.EmptyResultDataAccessException)3 CombatChallenge (com.ixale.starparse.domain.CombatChallenge)2 Effect (com.ixale.starparse.domain.Effect)2 ChallengeStats (com.ixale.starparse.domain.stats.ChallengeStats)2 DamageDealtStats (com.ixale.starparse.domain.stats.DamageDealtStats)2 ResultSet (java.sql.ResultSet)2 SimpleDateFormat (java.text.SimpleDateFormat)2 ArrayList (java.util.ArrayList)2 Actor (com.ixale.starparse.domain.Actor)1 CharacterDiscipline (com.ixale.starparse.domain.CharacterDiscipline)1 EntityGuid (com.ixale.starparse.domain.EntityGuid)1 Event (com.ixale.starparse.domain.Event)1 AbsorptionStats (com.ixale.starparse.domain.stats.AbsorptionStats)1 CombatEventStats (com.ixale.starparse.domain.stats.CombatEventStats)1