Search in sources :

Example 1 with CombatEventStats

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

the class Context method addCombatEvent.

public void addCombatEvent(final int combatId, final Actor player, final Event.Type type, final long timestamp) {
    if (!combatEvents.containsKey(combatId)) {
        combatEvents.put(combatId, new HashMap<>());
    }
    final String playerName = player.getName();
    if (!combatEvents.get(combatId).containsKey(playerName)) {
        combatEvents.get(combatId).put(playerName, new ArrayList<>());
    }
    combatEvents.get(combatId).get(playerName).add(new CombatEventStats(type, timestamp));
}
Also used : CombatEventStats(com.ixale.starparse.domain.stats.CombatEventStats)

Example 2 with CombatEventStats

use of com.ixale.starparse.domain.stats.CombatEventStats 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)

Example 3 with CombatEventStats

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

the class RaidManager method updateCombat.

private RaidCombatMessage updateCombat(final Combat combat, final String characterName, final CombatStats combatStats, final List<AbsorptionStats> absorptionStats, final List<ChallengeStats> challengeStats, final List<CombatEventStats> combatEventStats, final boolean isFakeRaider) {
    if (challengeStats != null && !challengeStats.isEmpty()) {
        // discard challenges with no value
        challengeStats.removeIf(stats -> (stats.getDamage() == null || stats.getDamage() == 0) && (stats.getEffectiveHeal() == null || stats.getEffectiveHeal() == 0) && (stats.getHeal() == null || stats.getHeal() == 0));
    }
    // transform the very last event
    Event.Type exitEvent = null;
    List<CombatEventStats> combatEventStats2 = null;
    final long timestamp = combat.getTimeFrom() + combatStats.getTick();
    if (combatEventStats != null && !combatEventStats.isEmpty()) {
        final CombatEventStats last = combatEventStats.get(combatEventStats.size() - 1);
        if (last.getTimestamp() == timestamp) {
            exitEvent = last.getType();
            if (combatEventStats.size() > 1) {
                combatEventStats2 = new ArrayList<>(combatEventStats.subList(0, combatEventStats.size() - 1));
            }
        } else {
            combatEventStats2 = new ArrayList<>(combatEventStats);
        }
    }
    // fire and forget
    final RaidCombatMessage message = new RaidCombatMessage(characterName, combat.getTimeFrom(), combat.getTimeTo(), combat.getBoss() != null ? combat.getBoss().getRaidBossName() : null, combat.getBoss() != null ? combat.getBoss().getSize() : null, combat.getBoss() != null ? combat.getBoss().getMode() : null, combatStats, absorptionStats, challengeStats, combatEventStats2, // last event timestamp
    timestamp, combatStats.getDiscipline(), exitEvent);
    if (!isFakeRaider && isRunning()) {
        raidClient.updateCombat(message);
    }
    return message;
}
Also used : RaidCombatMessage(com.ixale.starparse.ws.RaidCombatMessage) CombatEventStats(com.ixale.starparse.domain.stats.CombatEventStats) Event(com.ixale.starparse.domain.Event)

Example 4 with CombatEventStats

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

the class FileLoader method fillParselyCombatsInfo.

private static void fillParselyCombatsInfo(final List<Combat> combats, final List<ParselyCombatInfo> combatsInfo, final Context context) {
    combatsInfo.clear();
    if (combats == null) {
        return;
    }
    try {
        for (final Combat c : combats) {
            if (c == null) {
                continue;
            }
            final ParselyCombatInfo info = new ParselyCombatInfo();
            info.from = c.getTimeFrom();
            info.to = c.getTimeTo();
            info.raidBoss = c.getBoss();
            if (info.raidBoss != null && Raid.Mode.NiM.equals(info.raidBoss.getMode())) {
                for (final CombatEventStats e : context.getCombatEvents(c.getCombatId(), context.getSelectedPlayer())) {
                    if (Event.Type.NIM_CRYSTAL.equals(e.getType())) {
                        info.isNiMCrystal = true;
                        break;
                    }
                }
            }
            final CombatInfo combatInfo = context.getCombatInfo().get(c.getCombatId());
            if (combatInfo != null && combatInfo.getLocationInfo() != null) {
                info.instanceName = combatInfo.getLocationInfo().getInstanceName();
                info.instanceGuid = combatInfo.getLocationInfo().getInstanceGuid();
            }
            combatsInfo.add(info);
        }
    } catch (Exception e) {
        logger.error("Unable to assemble combats info for Parsely: " + e.getMessage(), e);
    }
}
Also used : ParselyCombatInfo(com.ixale.starparse.service.ParselyService.ParselyCombatInfo) CombatInfo(com.ixale.starparse.domain.CombatInfo) ParselyCombatInfo(com.ixale.starparse.service.ParselyService.ParselyCombatInfo) CombatEventStats(com.ixale.starparse.domain.stats.CombatEventStats) Combat(com.ixale.starparse.domain.Combat)

Aggregations

CombatEventStats (com.ixale.starparse.domain.stats.CombatEventStats)4 RaidCombatMessage (com.ixale.starparse.ws.RaidCombatMessage)2 Combat (com.ixale.starparse.domain.Combat)1 CombatInfo (com.ixale.starparse.domain.CombatInfo)1 Event (com.ixale.starparse.domain.Event)1 CombatStats (com.ixale.starparse.domain.stats.CombatStats)1 RaidItem (com.ixale.starparse.gui.table.item.RaidItem)1 ParselyCombatInfo (com.ixale.starparse.service.ParselyService.ParselyCombatInfo)1 ArrayList (java.util.ArrayList)1 Node (javafx.scene.Node)1