;;;; queries.lisp -- query the database (in-package :dnd) (defun all-heroes () (db:store-objects-with-class 'hero)) (defun player-quests (player) "Return all quests in which one of player's heroes is engaged." (remove nil (mapcar #'quest (player-heroes player)))) (defun player-campaigns (player) "Return a list of campaigns one of the players' heroes is involved in." (mapcar #'campaign (player-quests player) )) (defun campaign-heroes (campaign) "" ) (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))))