begin reworking how damage stats are kept

This commit is contained in:
Gered 2016-04-05 15:52:43 -04:00
parent 82795d9e5a
commit c2835fb266
2 changed files with 24 additions and 22 deletions

View file

@ -126,11 +126,11 @@
(update-all-entities (update-all-entities
#(assoc % #(assoc %
:encounter-dps (Math/round ^double :encounter-dps (Math/round ^double
(/ (:damage-out-total %) (/ (get-in % [:damage :out :total])
(/ (:duration encounter) (/ (:duration encounter)
1000))) 1000)))
:alive-dps (Math/round ^double :alive-dps (Math/round ^double
(/ (:damage-out-total %) (/ (get-in % [:damage :out :total])
(/ (:alive-duration %) (/ (:alive-duration %)
1000))))) 1000)))))
(update-all-entities finalize-entity-auras (:ended-at encounter)))) (update-all-entities finalize-entity-auras (:ended-at encounter))))
@ -157,9 +157,9 @@
(update-in [:average-hit] #(if (> num-hits 0) (int (/ total-hit-damage num-hits)) %)) (update-in [:average-hit] #(if (> num-hits 0) (int (/ total-hit-damage num-hits)) %))
(update-in [:average-crit] #(if (> num-crits 0) (int (/ total-crit-damage num-crits)) %)))) (update-in [:average-crit] #(if (> num-crits 0) (int (/ total-crit-damage num-crits)) %))))
(s/defn add-from-damage-properties :- SkillStatistics (s/defn update-damage-statistics :- SkillStatistics
[totals :- (s/maybe SkillStatistics) [totals :- (s/maybe SkillStatistics)
{:keys [damage damage-type hit-type crit? partial-absorb partial-resist partial-block avoidance-method]} :- DamageProperties] {:keys [damage hit-type crit? partial-absorb partial-resist partial-block avoidance-method]} :- DamageProperties]
(let [damage (or damage 0)] (let [damage (or damage 0)]
(-> (or totals {:damage 0 (-> (or totals {:damage 0
:max-hit 0 :max-hit 0
@ -209,31 +209,29 @@
(update-in [:num-immune] #(if (= avoidance-method :immune) (inc %) %)) (update-in [:num-immune] #(if (= avoidance-method :immune) (inc %) %))
(update-damage-averages)))) (update-damage-averages))))
(s/defn entity-takes-damage :- Encounter (s/defn update-entity-damage-stats :- Encounter
[encounter :- Encounter [encounter :- Encounter
in-or-out :- s/Keyword
entity-name :- s/Str entity-name :- s/Str
from-entity-name :- s/Str
{:keys [skill damage damage-type] {:keys [skill damage damage-type]
:as damage-properties} :- DamageProperties :as damage-properties} :- DamageProperties
timestamp :- Date] timestamp :- Date]
(-> encounter (-> encounter
(update-entity-field entity-name [:damage-in-total] #(if damage (+ (or % 0) damage) %)) (update-entity-field entity-name [:damage in-or-out :total] #(if damage (+ (or % 0) damage) %))
(update-entity-field entity-name [:damage-in-totals damage-type] #(if damage (+ (or % 0) damage) %)) (update-entity-field entity-name [:damage in-or-out :totals-by-type damage-type] #(if damage (+ (or % 0) damage) %))
(update-entity-field entity-name [:damage-in skill] #(add-from-damage-properties % damage-properties)) (update-entity-field entity-name [:damage in-or-out skill] #(update-damage-statistics % damage-properties))))
(update-entity-field entity-name [:damage-in-by-entity from-entity-name skill] #(add-from-damage-properties % damage-properties))))
(s/defn entity-deals-damage :- Encounter (s/defn update-damage-stats :- Encounter
[encounter :- Encounter [encounter :- Encounter
entity-name :- s/Str source-entity-name :- s/Str
to-entity-name :- s/Str target-entity-name :- s/Str
{:keys [skill damage damage-type] {:keys [skill]
:as damage-properties} :- DamageProperties :as damage-properties} :- DamageProperties
timestamp :- Date] timestamp :- Date]
(-> encounter (let [k {:source source-entity-name
(update-entity-field entity-name [:damage-out-total] #(if damage (+ (or % 0) damage) %)) :target target-entity-name
(update-entity-field entity-name [:damage-out-totals damage-type] #(if damage (+ (or % 0) damage) %)) :skill skill}]
(update-entity-field entity-name [:damage-out skill] #(add-from-damage-properties % damage-properties)) (update-in encounter [:damage k] #(update-damage-statistics % damage-properties))))
(update-entity-field entity-name [:damage-out-by-entity to-entity-name skill] #(add-from-damage-properties % damage-properties))))
;;; ;;;
;;; main combat log entry processing entry points ;;; main combat log entry processing entry points
@ -248,9 +246,9 @@
(-> encounter (-> encounter
(touch-entity source-name timestamp) (touch-entity source-name timestamp)
(touch-entity target-name timestamp) (touch-entity target-name timestamp)
(entity-takes-damage target-name source-name damage-properties timestamp) (update-damage-stats source-name target-name damage-properties timestamp)
(entity-deals-damage source-name target-name damage-properties timestamp)) (update-entity-damage-stats :in target-name damage-properties timestamp)
) (update-entity-damage-stats :out source-name damage-properties timestamp)))
(s/defn process-entity-death :- Encounter (s/defn process-entity-death :- Encounter
[entity-name :- s/Str [entity-name :- s/Str
@ -288,6 +286,8 @@
:started-at timestamp :started-at timestamp
:entities {} :entities {}
:skills {} :skills {}
:damage {}
:healing {}
:trigger-entities (get-in defined-encounters [encounter-name :entities])})) :trigger-entities (get-in defined-encounters [encounter-name :entities])}))
(s/defn end-encounter :- RaidAnalysis (s/defn end-encounter :- RaidAnalysis

View file

@ -78,6 +78,8 @@
:started-at java.util.Date :started-at java.util.Date
:entities {s/Str Entity} :entities {s/Str Entity}
:skills {s/Str s/Any} :skills {s/Str s/Any}
:damage {s/Any s/Any}
:healing {s/Any s/Any}
:trigger-entities {s/Str DefinedEncounterEntity} :trigger-entities {s/Str DefinedEncounterEntity}
(s/optional-key :ended-at) java.util.Date (s/optional-key :ended-at) java.util.Date
(s/optional-key :wipe-or-timeout?) s/Bool (s/optional-key :wipe-or-timeout?) s/Bool