diff options
Diffstat (limited to 'queries.lisp')
-rw-r--r-- | queries.lisp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/queries.lisp b/queries.lisp index 329ecb2..4538c75 100644 --- a/queries.lisp +++ b/queries.lisp @@ -5,3 +5,22 @@ (defun all-heroes () (db:store-objects-with-class 'hero)) +(defun player-campaigns (player) + "Return a list of campaigns that that player is involved in." + (remove nil (mapcar #'hero-campaign (player-heroes player)))) + +(defun campaign-heros (campaign &key (activep t)) + "All the heros actively involved in this CAMPAIGN. If ACTIVEP, then +only the active quest(s) are considered, otherwise all quests are considered." + (remove-duplicates + (mapcan #'heroes-on-quest + (if activep + (remove-if-not #'quest-startedp (quests-in-campaign campaign)) + (quests-in-campaign campaign))))) + +(defun fetch-comrades (player &key (activep t)) + "Returns all the heroes in any one of the player's campaigns. If +ACTIVEP, then only heroes involved in active quests are returned." + (remove-duplicates + (loop :for campaign :in (player-campaigns player) + :nconc (campaign-heros campaign :activep activep)))) |