#ifndef QUEST_H #define QUEST_H //***************************************************************************** // // quest.h // // This is a framework for setting up player quests. Quests are stored in the // world database, like rooms, mobiles, objects, etc. Quests can have multiple // stages. Each stage of a quest can also have multiple and varied objectives. // Some common ones would be kill objectives (e.g. kill 20 orcs) and give // objectives (e.g. give 2 apples to your grandma). Quests must be started // before their progress can be tracked. When the objectives of a quest stage // are completed, the stage is automatically completed. If the stage is the // last stage of the quest, the entire quest is completed. // //***************************************************************************** typedef struct quest_data QUEST_DATA; typedef struct quest_stage QUEST_STAGE; typedef struct quest_objective QUEST_OBJECTIVE; // // set up quests for use void init_quests(void); // // functions for interacting with quests QUEST_DATA *newQuest(void); void deleteQuest(QUEST_DATA *quest); void questCopyTo(QUEST_DATA *from, QUEST_DATA *to); QUEST_DATA *questCopy(QUEST_DATA *quest); STORAGE_SET *questStore(QUEST_DATA *quest); QUEST_DATA *questRead(STORAGE_SET *set); void questSetKey(QUEST_DATA *quest, const char *key); void questSetName(QUEST_DATA *quest, const char *name); void questSetDesc(QUEST_DATA *quest, const char *desc); const char *questGetKey(QUEST_DATA *quest); const char *questGetName(QUEST_DATA *quest); const char *questGetDesc(QUEST_DATA *quest); BUFFER *questGetDescBuf(QUEST_DATA *quest); void questAddStage(QUEST_DATA *quest, QUEST_STAGE *stage); void questRemoveStage(QUEST_DATA *quest, QUEST_STAGE *stage); QUEST_STAGE*questRemoveStageNum(QUEST_DATA *quest, int num); LIST *questGetStages(QUEST_DATA *quest); // // functions for interacting with quest stages QUEST_STAGE *newQuestStage(void); void deleteQuestStage(QUEST_STAGE *stage); void questStageCopyTo(QUEST_STAGE *from, QUEST_STAGE *to); QUEST_STAGE *questStageCopy(QUEST_STAGE *stage); STORAGE_SET *questStageStore(QUEST_STAGE *stage); QUEST_STAGE *questStageRead(STORAGE_SET *set); void questStageSetName(QUEST_STAGE *stage, const char *name); void questStageSetEndScript(QUEST_STAGE *stage, const char *script); const char *questStageGetName(QUEST_STAGE *stage); const char *questStageGetEndScript(QUEST_STAGE *stage); BUFFER *questStageGetEndScriptBuf(QUEST_STAGE *stage); void questStageAddObjective(QUEST_STAGE *stage, QUEST_OBJECTIVE *ob); void questStageRemoveObjective(QUEST_STAGE *stage, QUEST_OBJECTIVE *ob); QUEST_OBJECTIVE *questStageRemoveObjectiveNum(QUEST_STAGE *stage, int num); LIST *questStageGetObjectives(QUEST_STAGE *stage); QUEST_DATA *questStageGetQuest(QUEST_STAGE *stage); // // functions for interacting with quest objectives QUEST_OBJECTIVE *newQuestObjective(void); void deleteQuestObjective(QUEST_OBJECTIVE *ob); void questObjectiveCopyTo(QUEST_OBJECTIVE *from, QUEST_OBJECTIVE *to); QUEST_OBJECTIVE *questObjectiveCopy(QUEST_OBJECTIVE *ob); STORAGE_SET *questObjectiveStore(QUEST_OBJECTIVE *ob); QUEST_OBJECTIVE *questObjectiveRead(STORAGE_SET *set); const char *questObjectiveGetType(QUEST_OBJECTIVE *ob); const char *questObjectiveGetDesc(QUEST_OBJECTIVE *ob); HASHTABLE *questObjectiveGetVars(QUEST_OBJECTIVE *ob); const char *questObjectiveGetVar(QUEST_OBJECTIVE *ob, const char *var); int questObjectiveGetVarInt(QUEST_OBJECTIVE *ob, const char *var); void questObjectiveSetType(QUEST_OBJECTIVE *ob, const char *type); void questObjectiveSetDesc(QUEST_OBJECTIVE *ob, const char *desc); void questObjectiveSetVar(QUEST_OBJECTIVE *ob, const char *var, const char *val); void questObjectiveSetVarInt(QUEST_OBJECTIVE *ob, const char *var, int val); void questObjectiveDeleteVar(QUEST_OBJECTIVE *ob, const char *var); void questObjectiveClearVars(QUEST_OBJECTIVE *ob); QUEST_STAGE *questObjectiveGetStage(QUEST_OBJECTIVE *ob); // // functions for letting characters interact with quests void charStartQuest(CHAR_DATA *ch, QUEST_DATA *quest); void charCancelQuest(CHAR_DATA *ch, QUEST_DATA *quest); void charAdvanceQuest(CHAR_DATA *ch, QUEST_DATA *quest); void charFailQuest(CHAR_DATA *ch, QUEST_DATA *quest); bool charCompletedQuest(CHAR_DATA *ch, QUEST_DATA *quest); bool charOnQuest(CHAR_DATA *ch, QUEST_DATA *quest); bool charFailedQuest(CHAR_DATA *ch, QUEST_DATA *quest); int charGetQuestStage(CHAR_DATA *ch, QUEST_DATA *quest); #endif // QUEST_H