Planeshift
psquest.h
Go to the documentation of this file.
1 /*
2  * psquest.h
3  *
4  * Copyright (C) 2003 Atomic Blue (info@planeshift.it, http://www.atomicblue.org)
5  *
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation (version 2 of the License)
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  */
19 
20 #ifndef __PSQUEST_H__
21 #define __PSQUEST_H__
22 //=============================================================================
23 // Crystal Space Includes
24 //=============================================================================
25 #include <csutil/csstring.h>
26 #include <csutil/weakreferenced.h>
27 
28 //=============================================================================
29 // Project Includes
30 //=============================================================================
31 #include <idal.h>
32 
33 //=============================================================================
34 // Local Includes
35 //=============================================================================
36 
37 using namespace CS;
38 
39 
40 #define QUEST_OPT_SAVEONCOMPLETE 0x01
41 
43 #define PSQUEST_DISABLED_QUEST 0x00000001
44 
45 
46 class psQuestPrereqOp;
47 class psCharacter;
48 class NpcResponse;
49 class NpcTrigger;
50 class NpcDialogMenu;
51 class psQuest;
52 
61 bool LoadPrerequisiteXML(csRef<psQuestPrereqOp> &prerequisite, psQuest* self, csString script);
62 
67 class psQuest : public CS::Utility::WeakReferenced
68 {
69 public:
76  psQuest(int id = 0, const char* name = "");
77  virtual ~psQuest();
78 
83  bool Load(iResultRow &row);
87  bool PostLoad();
88 
95  int GetID() const
96  {
97  return id;
98  }
102  const char* GetName() const
103  {
104  return name;
105  }
106  const char* GetImage() const
107  {
108  return image;
109  }
110  const char* GetTask() const
111  {
112  return task;
113  }
114 
120  bool hasTaskText()
121  {
122  return task.Length() > 0;
123  }
124  void SetTask(csString mytask)
125  {
126  task = mytask;
127  }
129  {
130  return parent_quest;
131  }
132  void SetParentQuest(psQuest* parent)
133  {
134  parent_quest=parent;
135  }
136  int GetStep() const
137  {
138  return step_id;
139  }
141  {
142  return infinitePlayerLockout;
143  }
144  unsigned int GetPlayerLockoutTime() const
145  {
146  return player_lockout_time;
147  }
148  unsigned int GetQuestLockoutTime() const
149  {
150  return quest_lockout_time;
151  }
152  unsigned int GetQuestLastActivatedTime() const
153  {
154  return quest_last_activated;
155  }
156  void SetQuestLastActivatedTime(unsigned int when)
157  {
158  quest_last_activated=when;
159  }
160  // csString QuestToXML() const;
161  bool AddPrerequisite(csString prerequisitescript);
162  bool AddPrerequisite(csRef<psQuestPrereqOp> op);
163 
171  void AddTriggerResponse(NpcTrigger* trigger, NpcResponse* response);
178  //void AddMenu(NpcDialogMenu* menu);
179 
180  //csArray<NpcDialogMenu*> &GetMenuList();
181 
188  void AddSubQuest(int id)
189  {
190  subquests.Push(id);
191  }
192 
198  csArray<int> &GetSubQuests()
199  {
200  return subquests;
201  }
202 
208  csRef<psQuestPrereqOp>& GetPrerequisite()
209  {
210  return prerequisite;
211  }
212  csString GetPrerequisiteStr();
213  const csString &GetCategory() const
214  {
215  return category;
216  }
217 
226  bool Active()
227  {
228  return active ? (parent_quest ? parent_quest->Active() : active) : active;
229  }
230 
234  void Active(bool state)
235  {
236  active = state;
237  }
238 
239 protected:
240  int id;
241  csString name;
242  csString task;
243  csString image;
244  int flags;
246  int step_id;
247  csRef<psQuestPrereqOp> prerequisite;
248  csString category;
249  csString prerequisiteStr;
251 
252  unsigned int player_lockout_time;
253  unsigned int quest_lockout_time;
254  unsigned int quest_last_activated;
255 
257  {
260  };
261 
262  // this stuff is needed for cleanup when destroying the object
263  csArray<TriggerResponse> triggerPairs;
264  csArray<int> subquests;
265 
266  bool active;
267 };
268 
269 #endif
const char * GetName() const
Definition: psquest.h:102
Pure virtual base quest prerequisite operator class.
bool Active()
Check if the quest is active (and also it&#39;s parents).
Definition: psquest.h:226
unsigned int player_lockout_time
Definition: psquest.h:252
void SetQuestLastActivatedTime(unsigned int when)
Definition: psquest.h:156
int GetStep() const
Definition: psquest.h:136
bool HasInfinitePlayerLockout() const
Definition: psquest.h:140
csString category
Definition: psquest.h:248
csArray< int > & GetSubQuests()
Returns an ordered list of the subquests of this quest (so it&#39;s steps).
Definition: psquest.h:198
unsigned int quest_lockout_time
Definition: psquest.h:253
This class holds all information for one quest with its reference to parent quest, list of steps, lockoutime, sub quests, ...
Definition: psquest.h:67
int step_id
natoka: never used, though i suppose it was ment for the substep number
Definition: psquest.h:246
const char * GetImage() const
Definition: psquest.h:106
csArray< int > subquests
list of IDs of the subquests of this quest
Definition: psquest.h:264
psQuest * GetParentQuest() const
Definition: psquest.h:128
bool LoadPrerequisiteXML(csRef< psQuestPrereqOp > &prerequisite, psQuest *self, csString script)
Utility function to parse prerequisite scripts.
int GetID() const
The id can be defined by the database or dynamically created.
Definition: psquest.h:95
csArray< TriggerResponse > triggerPairs
list of trigger-response pairs added for the quest
Definition: psquest.h:263
const csString & GetCategory() const
Definition: psquest.h:213
bool infinitePlayerLockout
Definition: psquest.h:250
csString name
unique quest name
Definition: psquest.h:241
bool hasTaskText()
Gets if the task (quest description/note) contains some text.
Definition: psquest.h:120
NpcTrigger * trigger
Definition: psquest.h:258
csString prerequisiteStr
Definition: psquest.h:249
int flags
Definition: psquest.h:244
int id
quest id - either as stored in the database or as assigned by CacheManager::AddDynamicQuest ...
Definition: psquest.h:240
csRef< psQuestPrereqOp > & GetPrerequisite()
Return the prerequisite for this quest.
Definition: psquest.h:208
bool active
Definition: psquest.h:266
csRef< psQuestPrereqOp > prerequisite
Definition: psquest.h:247
This class holds several possible responses and an action script for the npc to run whenever an appro...
Definition: dictionary.h:394
Holds the trigger menu, if it exists, for a given location in a dialog.
Definition: dictionary.h:325
csString image
Definition: psquest.h:243
unsigned int quest_last_activated
Definition: psquest.h:254
void Active(bool state)
Sets activation status of the quest.
Definition: psquest.h:234
void AddSubQuest(int id)
Adds a pointer to a menu.
Definition: psquest.h:188
void SetTask(csString mytask)
Definition: psquest.h:124
unsigned int GetPlayerLockoutTime() const
Definition: psquest.h:144
unsigned int GetQuestLastActivatedTime() const
Definition: psquest.h:152
unsigned int GetQuestLockoutTime() const
Definition: psquest.h:148
const char * GetTask() const
Definition: psquest.h:110
csString task
Definition: psquest.h:242
void SetParentQuest(psQuest *parent)
Definition: psquest.h:132
psQuest * parent_quest
parent quest of this quest (or NULL if there is none)
Definition: psquest.h:245