From f2482a17bd82f28f46a6e9d6f69096dfb41120ce Mon Sep 17 00:00:00 2001 From: Karlos Martins Date: Mon, 2 Dec 2019 00:42:29 +0000 Subject: [PATCH 1/2] Artificer Spells Known --- src/cljc/orcpub/dnd/e5/classes.cljc | 12 +++++++++++ src/cljc/orcpub/dnd/e5/options.cljc | 15 +++++++++++++- src/cljs/orcpub/dnd/e5/events.cljs | 7 ++++--- src/cljs/orcpub/dnd/e5/views.cljs | 32 ++++++++++++++++++++--------- 4 files changed, 52 insertions(+), 14 deletions(-) diff --git a/src/cljc/orcpub/dnd/e5/classes.cljc b/src/cljc/orcpub/dnd/e5/classes.cljc index d3889fd6b..0b3ca32bd 100644 --- a/src/cljc/orcpub/dnd/e5/classes.cljc +++ b/src/cljc/orcpub/dnd/e5/classes.cljc @@ -1737,6 +1737,18 @@ 17 1 19 1}) +(def artificer-spells-known-schedule + {1 2 + 3 1 + 5 1 + 7 1 + 9 1 + 11 1 + 13 1 + 15 1 + 17 1 + 19 1}) + (def full-caster-spells-known-schedule {1 2 2 1 diff --git a/src/cljc/orcpub/dnd/e5/options.cljc b/src/cljc/orcpub/dnd/e5/options.cljc index 5499f006e..696887c16 100644 --- a/src/cljc/orcpub/dnd/e5/options.cljc +++ b/src/cljc/orcpub/dnd/e5/options.cljc @@ -515,7 +515,19 @@ 17 {4 1 5 1} 19 {5 1}} - 3 {3 {1 2} + 3 {1 {1 2} + 3 {1 1} + 5 {1 1 + 2 2} + 7 {2 1} + 9 {3 2} + 11 {3 1} + 13 {4 1} + 15 {4 1} + 17 {4 1 + 5 1} + 19 {5 1}} + 4 {3 {1 2} 4 {1 1} 7 {1 1 2 2} @@ -594,6 +606,7 @@ known-mode spells ability + slot-factor slot-schedule] :as cfg} cls-cfg] (reduce diff --git a/src/cljs/orcpub/dnd/e5/events.cljs b/src/cljs/orcpub/dnd/e5/events.cljs index 4d7f1e651..b5d1a3410 100644 --- a/src/cljs/orcpub/dnd/e5/events.cljs +++ b/src/cljs/orcpub/dnd/e5/events.cljs @@ -2505,10 +2505,11 @@ (reg-event-db ::class5e/set-class-path-prop class-interceptors - (fn [class [_ prop-path prop-value prop-path-2 prop-value-2]] + (fn [class [_ prop-path-1 prop-value-1 prop-path-2 prop-value-2 prop-path-3 prop-value-3]] (-> class - (assoc-in prop-path prop-value) - (assoc-in prop-path-2 prop-value-2)))) + (assoc-in prop-path-1 prop-value-1) + (assoc-in prop-path-2 prop-value-2) + (assoc-in prop-path-3 prop-value-3)))) (reg-event-db ::selections5e/set-selection-path-prop diff --git a/src/cljs/orcpub/dnd/e5/views.cljs b/src/cljs/orcpub/dnd/e5/views.cljs index 1ee61619a..b2835ea17 100644 --- a/src/cljs/orcpub/dnd/e5/views.cljs +++ b/src/cljs/orcpub/dnd/e5/views.cljs @@ -5408,10 +5408,11 @@ :on-change #(dispatch [::classes/set-class-prop :spellcasting (if (= "true" %) - {:level-factor 3 + {:level-factor 1 + :slot-factor 1 :known-mode :schedule :ability ::char/cha - :spells-known classes/third-caster-spells-known-schedule})])}] + :spells-known classes/full-caster-spells-known-schedule})])}] (if spellcaster? [:div.m-l-5 [labeled-dropdown @@ -5445,17 +5446,28 @@ [:div.m-l-5 [labeled-dropdown "At what level does this class first gain spell slots?" - {:items (map - value-to-item - (range 1 4)) - :value (get-in class [:spellcasting :level-factor] 1) - :on-change #(let [level-factor (js/parseInt %)] + {:items [{:title "1 - Full Caster" + :value 1} + {:title "2 - Half Caster" + :value 2} + {:title "3 - Third Caster" + :value 3} + {:title "2 - Artificer" + :value 4}] + :value (get-in class [:spellcasting :slot-factor] 1) + :on-change #(let [slot-factor (js/parseInt %)] (dispatch [::classes/set-class-path-prop - [:spellcasting :level-factor] level-factor - [:spellcasting :spells-known] (case level-factor + [:spellcasting :slot-factor] slot-factor + [:spellcasting :spells-known] (case slot-factor 1 classes/full-caster-spells-known-schedule 2 classes/half-caster-spells-known-schedule - 3 classes/third-caster-spells-known-schedule)]))}]])] + 3 classes/third-caster-spells-known-schedule + 4 classes/artificer-spells-known-schedule) + [:spellcasting :level-factor] (case slot-factor + 1 1 + 2 2 + 3 3 + 4 2)]))}]])] (if (and spellcaster? (not (get-in class [:spellcasting :spell-list-kw]))) (let [cantrips? (get-in class [:spellcasting :cantrips?])] From 3a93da13d462b2945312fe85b4370a08d881d930 Mon Sep 17 00:00:00 2001 From: Karlos Martins Date: Mon, 2 Dec 2019 00:51:06 +0000 Subject: [PATCH 2/2] fix --- src/cljc/orcpub/dnd/e5/options.cljc | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/cljc/orcpub/dnd/e5/options.cljc b/src/cljc/orcpub/dnd/e5/options.cljc index 696887c16..ecb0f7ec1 100644 --- a/src/cljc/orcpub/dnd/e5/options.cljc +++ b/src/cljc/orcpub/dnd/e5/options.cljc @@ -482,8 +482,8 @@ :max (or max num) :tags #{:spells}}))) -(defn spell-slot-schedule [level-factor] - (case level-factor +(defn spell-slot-schedule [slot-factor] + (case slot-factor 1 {1 {1 2} 2 {1 1} 3 {1 1 @@ -515,7 +515,15 @@ 17 {4 1 5 1} 19 {5 1}} - 3 {1 {1 2} + 3 {3 {1 2} + 4 {1 1} + 7 {1 1 + 2 2} + 10 {2 1} + 13 {3 2} + 16 {3 1} + 19 {4 1}} + 4 {1 {1 2} 3 {1 1} 5 {1 1 2 2} @@ -527,18 +535,10 @@ 17 {4 1 5 1} 19 {5 1}} - 4 {3 {1 2} - 4 {1 1} - 7 {1 1 - 2 2} - 10 {2 1} - 13 {3 2} - 16 {3 1} - 19 {4 1}} {})) -(defn total-slots [level level-factor] - (let [schedule (spell-slot-schedule level-factor)] +(defn total-slots [level slot-factor] + (let [schedule (spell-slot-schedule slot-factor)] (reduce (fn [m lvl] (merge-with + m (schedule lvl))) @@ -612,7 +612,7 @@ (reduce (fn [m [cls-lvl v]] (let [[num restriction] (if (number? v) [v] ((juxt :num :restriction) v)) - slots (or (if slot-schedule (slot-schedule cls-lvl)) (total-slots cls-lvl level-factor)) + slots (or (if slot-schedule (slot-schedule cls-lvl)) (total-slots cls-lvl slot-factor)) all-spells (select-keys (or spells (spell-lists (or spell-list-kw class-key))) (keys slots))