diff --git a/vwowrla.core/src/vwowrla/core/encounters/analysis.clj b/vwowrla.core/src/vwowrla/core/encounters/analysis.clj index 0b4ea07..fb45e6d 100644 --- a/vwowrla.core/src/vwowrla/core/encounters/analysis.clj +++ b/vwowrla.core/src/vwowrla/core/encounters/analysis.clj @@ -225,13 +225,19 @@ [encounter :- Encounter source-entity-name :- s/Str target-entity-name :- s/Str - {:keys [skill] + {:keys [skill damage damage-type] :as damage-properties} :- DamageProperties timestamp :- Date] - (let [k {:source source-entity-name - :target target-entity-name - :skill skill}] - (update-in encounter [:damage k] #(update-damage-statistics % damage-properties)))) + (let [k {:source source-entity-name + :target target-entity-name + :skill skill} + ; if the target is an enemy, then this damage is "out" (as in, outgoing damage from the raid) + in-or-out (if (enemy-entity? target-entity-name) :out :in)] + (-> encounter + (update-in [:damage in-or-out :total] #(if damage (+ (or % 0) damage) %)) + (update-in [:damage in-or-out :totals-by-type damage-type] #(if damage (+ (or % 0) damage) %)) + (update-in [:damage in-or-out skill] #(update-damage-statistics % damage-properties)) + (update-in [:damage k] #(update-damage-statistics % damage-properties))))) ;;; ;;; main combat log entry processing entry points diff --git a/vwowrla.core/src/vwowrla/core/encounters/core.clj b/vwowrla.core/src/vwowrla/core/encounters/core.clj index 9a0612e..90e3776 100644 --- a/vwowrla.core/src/vwowrla/core/encounters/core.clj +++ b/vwowrla.core/src/vwowrla/core/encounters/core.clj @@ -1,5 +1,6 @@ (ns vwowrla.core.encounters.core (:require + [clojure.string :as string] [schema.core :as s]) (:use vwowrla.core.schemas @@ -12,6 +13,12 @@ (def non-combat-starting-auras (get-text-resource-as-lines "non_combat_starting_auras.txt")) (def non-combat-starting-skills (get-text-resource-as-lines "non_combat_starting_skills.txt")) +(s/defn enemy-entity? :- s/Bool + "returns true if the given entity name is a known enemy entity" + [entity-name :- (s/maybe s/Str)] + (if-not (string/blank? entity-name) + (contained-in? entity-name enemy-entity-names))) + (s/defn find-defined-encounter-name :- (s/maybe s/Str) "returns the name of a defined encounter which includes the given entity in it's list of encounter entities. returns nil if there is no encounter which includes the