00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CEL_MGR_QUEST__
00021 #define __CEL_MGR_QUEST__
00022
00023 #include "cstypes.h"
00024 #include "csutil/scf.h"
00025 #include "csutil/weakref.h"
00026 #include "csutil/hash.h"
00027 #include "csgeom/vector3.h"
00028 #include "csutil/refarr.h"
00029 #include "tools/rewards.h"
00030 #include "tools/sequences.h"
00031 #include "tools/triggers.h"
00032 #include "physicallayer/pl.h"
00033
00034 struct iDocumentNode;
00035 struct iChangePropertyRewardFactory;
00036 struct iCelDataBuffer;
00037 struct iCelParameterBlock;
00038
00039 class celQuestManager;
00040
00041
00042
00043
00044
00045
00050 struct iQuest : public virtual iBase
00051 {
00052 SCF_INTERFACE (iQuest, 0, 0, 1);
00053
00058 virtual bool SwitchState (const char* state) = 0;
00059
00063 virtual const char* GetCurrentState () const = 0;
00064
00070 virtual bool LoadState (const char* state, iCelDataBuffer* databuf) = 0;
00071
00076 virtual void SaveState (iCelDataBuffer* databuf) = 0;
00077
00081 virtual iCelSequence* FindSequence (const char* name) = 0;
00082 };
00083
00089 struct iQuestTriggerResponseFactory : public virtual iBase
00090 {
00091 SCF_INTERFACE (iQuestTriggerResponseFactory, 0, 0, 1);
00092
00097 virtual void SetTriggerFactory (iTriggerFactory* trigger_fact) = 0;
00098
00103 virtual void AddRewardFactory (iRewardFactory* reward_fact) = 0;
00104 };
00105
00110 struct iQuestStateFactory : public virtual iBase
00111 {
00112 SCF_INTERFACE (iQuestStateFactory, 0, 0, 1);
00113
00117 virtual const char* GetName () const = 0;
00118
00122 virtual iQuestTriggerResponseFactory* CreateTriggerResponseFactory () = 0;
00123
00127 virtual void AddInitRewardFactory (iRewardFactory* reward_fact) = 0;
00128
00132 virtual void AddExitRewardFactory (iRewardFactory* reward_fact) = 0;
00133 };
00134
00135
00150 struct iQuestFactory : public virtual iBase
00151 {
00152 SCF_INTERFACE (iQuestFactory, 0, 0, 1);
00153
00154 virtual celQuestManager* GetQuestManager () const = 0;
00155
00159 virtual const char* GetName () const = 0;
00160
00168 virtual csPtr<iQuest> CreateQuest (
00169 const celParams& params) = 0;
00170
00176 virtual bool Load (iDocumentNode* node) = 0;
00177
00182 virtual iQuestStateFactory* GetState (const char* name) = 0;
00183
00188 virtual iQuestStateFactory* CreateState (const char* name) = 0;
00189
00194 virtual iCelSequenceFactory* GetSequence (const char* name) = 0;
00195
00200 virtual iCelSequenceFactory* CreateSequence (const char* name) = 0;
00201
00206 virtual const char* GetDefaultParameter (const char* name) const = 0;
00207
00212 virtual void SetDefaultParameter (const char* name,const char* value) = 0;
00213
00217 virtual void ClearDefaultParameters () = 0;
00218
00219 };
00220
00221
00222
00223
00224
00230 struct iQuestManager : public virtual iBase
00231 {
00232 SCF_INTERFACE (iQuestManager, 2, 0, 0);
00233
00266 virtual bool RegisterTriggerType (iTriggerType* trigger) = 0;
00267
00272 virtual iTriggerType* GetTriggerType (const char* name) = 0;
00273
00303 virtual bool RegisterRewardType (iRewardType* trigger) = 0;
00304
00309 virtual iRewardType* GetRewardType (const char* name) = 0;
00310
00330 virtual bool RegisterSeqOpType (iSeqOpType* seqop) = 0;
00331
00336 virtual iSeqOpType* GetSeqOpType (const char* name) = 0;
00337
00341 virtual iQuestFactory* GetQuestFactory (const char* name) = 0;
00342
00346 virtual void RemoveQuestFactory (const char* name) = 0;
00347
00351 virtual void RemoveQuestFactories () = 0;
00352
00358 virtual iQuestFactory* CreateQuestFactory (const char* name) = 0;
00359
00365 virtual bool Load (iDocumentNode* node) = 0;
00366
00371 virtual iRewardFactory* AddNewStateReward (
00372 iQuestTriggerResponseFactory* response,
00373 const char* entity_par, const char* state_par) = 0;
00374
00379 virtual iRewardFactory* AddDebugPrintReward (
00380 iQuestTriggerResponseFactory* response,
00381 const char* msg) = 0;
00382
00387 virtual iRewardFactory* AddInventoryReward (
00388 iQuestTriggerResponseFactory* response,
00389 const char* entity_par, const char* child_entity_par) = 0;
00390
00395 virtual iRewardFactory* AddSequenceReward (
00396 iQuestTriggerResponseFactory* response,
00397 const char* entity_par, const char* sequence_par,
00398 const char* delay_par) = 0;
00399
00400
00405 virtual iRewardFactory* AddCsSequenceReward (
00406 iQuestTriggerResponseFactory* response,
00407 const char* sequence_par, const char* delay_par) = 0;
00408
00413 virtual iRewardFactory* AddSequenceFinishReward (
00414 iQuestTriggerResponseFactory* response,
00415 const char* entity_par, const char* sequence_par) = 0;
00416
00422 virtual iChangePropertyRewardFactory* AddChangePropertyReward (
00423 iQuestTriggerResponseFactory* response,
00424 const char* entity_par, const char* prop_par) = 0;
00425
00432 virtual iRewardFactory* AddCreateEntityReward (
00433 iQuestTriggerResponseFactory* response,
00434 const char* template_par,
00435 const char* name_par,
00436 const celEntityTemplateParams &tpl_params) = 0;
00437
00443 virtual iRewardFactory* AddDestroyEntityReward(
00444 iQuestTriggerResponseFactory* response,
00445 const char* entity_par) = 0;
00446
00452 virtual iRewardFactory* AddActionReward (
00453 iQuestTriggerResponseFactory* response,
00454 const char* entity_par,
00455 const char* id_par,
00456 const char* pcclass_par) = 0;
00457
00463 virtual iRewardFactory* AddMessageReward (
00464 iQuestTriggerResponseFactory* response,
00465 const char* entity_par,
00466 const char* id_par) = 0;
00467
00472 virtual iTriggerFactory* SetTimeoutTrigger (
00473 iQuestTriggerResponseFactory* response,
00474 const char* timeout_par) = 0;
00475
00480 virtual iTriggerFactory* SetEnterSectorTrigger (
00481 iQuestTriggerResponseFactory* response,
00482 const char* entity_par, const char* sector_par) = 0;
00483
00488 virtual iTriggerFactory* SetMeshEnterSectorTrigger (
00489 iQuestTriggerResponseFactory* response,
00490 const char* entity_par, const char* sector_par) = 0;
00491
00496 virtual iTriggerFactory* SetSequenceFinishTrigger (
00497 iQuestTriggerResponseFactory* response,
00498 const char* entity_par, const char* sequence_par) = 0;
00499
00504 virtual iTriggerFactory* SetPropertyChangeTrigger (
00505 iQuestTriggerResponseFactory* response,
00506 const char* entity_par, const char* prop_par,
00507 const char* value_par) = 0;
00508
00513 virtual iTriggerFactory* SetTriggerTrigger (
00514 iQuestTriggerResponseFactory* response,
00515 const char* entity_par, bool do_leave = false) = 0;
00516
00521 virtual iTriggerFactory* SetWatchTrigger (
00522 iQuestTriggerResponseFactory* response,
00523 const char* entity_par, const char* target_entity_par,
00524 const char* checktime_par,
00525 const char* radius_par) = 0;
00526
00531 virtual iTriggerFactory* SetOperationTrigger (
00532 iQuestTriggerResponseFactory* response,
00533 const char* operation_par,
00534 csRefArray<iTriggerFactory> &trigger_factories) = 0;
00535
00540 virtual iTriggerFactory* SetInventoryTrigger (
00541 iQuestTriggerResponseFactory* response,
00542 const char* entity_par,
00543 const char* child_par) = 0;
00544
00549 virtual iTriggerFactory* SetMessageTrigger (
00550 iQuestTriggerResponseFactory* response,
00551 const char* entity_par,
00552 const char* mask_par) = 0;
00553
00558 virtual iTriggerFactory* SetMeshSelectTrigger (
00559 iQuestTriggerResponseFactory* response,
00560 const char* entity_par) = 0;
00561
00562 };
00563
00564
00565
00566
00567
00568
00569
00589 struct iNewStateQuestRewardFactory : public virtual iBase
00590 {
00591 SCF_INTERFACE (iNewStateQuestRewardFactory, 0, 0, 1);
00592
00599 virtual void SetStateParameter (const char* state) = 0;
00600
00609 virtual void SetEntityParameter (const char* entity, const char* tag = 0) = 0;
00610
00616 virtual void SetTagParameter (const char* tag_par) = 0;
00617
00624 virtual void SetClassParameter (const char* ent_class) = 0;
00625 };
00626
00627
00628
00629
00630
00634 #define CEL_DECLARE_QUESTREWARDTYPE(name,id) \
00635 class cel##name##RewardType : public scfImplementation1< \
00636 cel##name##RewardType,iRewardType> \
00637 { \
00638 public: \
00639 iObjectRegistry* object_reg; \
00640 csWeakRef<iCelPlLayer> pl; \
00641 cel##name##RewardType (iObjectRegistry* object_reg); \
00642 virtual ~cel##name##RewardType () { } \
00643 virtual const char* GetName () const { return id; } \
00644 virtual csPtr<iRewardFactory> CreateRewardFactory (); \
00645 };
00646
00650 #define CEL_IMPLEMENT_QUESTREWARDTYPE(name) \
00651 cel##name##RewardType::cel##name##RewardType ( \
00652 iObjectRegistry* object_reg) : scfImplementationType (this) \
00653 { \
00654 cel##name##RewardType::object_reg = object_reg; \
00655 pl = csQueryRegistry<iCelPlLayer> (object_reg); \
00656 } \
00657 csPtr<iRewardFactory> cel##name##RewardType::CreateRewardFactory ()\
00658 { \
00659 cel##name##RewardFactory* fact = new \
00660 cel##name##RewardFactory (this); \
00661 return fact; \
00662 }
00663
00664
00665
00666 CS_DEPRECATED_METHOD_MSG("Use iParameter instead")
00667 typedef iParameter iQuestParameter;
00668 CS_DEPRECATED_METHOD_MSG("Use iTriggerCallback instead")
00669 typedef iTriggerCallback iQuestTriggerCallback;
00670 CS_DEPRECATED_METHOD_MSG("Use iTrigger instead")
00671 typedef iTrigger iQuestTrigger;
00672 CS_DEPRECATED_METHOD_MSG("Use iTriggerFactory instead")
00673 typedef iTriggerFactory iQuestTriggerFactory;
00674 CS_DEPRECATED_METHOD_MSG("Use iTriggerType instead")
00675 typedef iTriggerType iQuestTriggerType;
00676 CS_DEPRECATED_METHOD_MSG("Use iReward instead")
00677 typedef iReward iQuestReward;
00678 CS_DEPRECATED_METHOD_MSG("Use iRewardFactory instead")
00679 typedef iRewardFactory iQuestRewardFactory;
00680 CS_DEPRECATED_METHOD_MSG("Use iRewardType instead")
00681 typedef iRewardType iQuestRewardType;
00682 CS_DEPRECATED_METHOD_MSG("Use iSeqOp instead")
00683 typedef iSeqOp iQuestSeqOp;
00684 CS_DEPRECATED_METHOD_MSG("Use iSeqOpFactory instead")
00685 typedef iSeqOpFactory iQuestSeqOpFactory;
00686 CS_DEPRECATED_METHOD_MSG("Use iSeqOpType instead")
00687 typedef iSeqOpType iQuestSeqOpType;
00688 CS_DEPRECATED_METHOD_MSG("Use iCelSequenceCallback instead")
00689 typedef iCelSequenceCallback iQuestSequenceCallback;
00690 CS_DEPRECATED_METHOD_MSG("Use iCelSequence instead")
00691 typedef iCelSequence iQuestSequence;
00692 CS_DEPRECATED_METHOD_MSG("Use iCelSequenceFactory instead")
00693 typedef iCelSequenceFactory iQuestSequenceFactory;
00694 CS_DEPRECATED_METHOD_MSG("Use iTimeoutTriggerFactory instead")
00695 typedef iTimeoutTriggerFactory iTimeoutQuestTriggerFactory;
00696 CS_DEPRECATED_METHOD_MSG("Use iPropertyChangeTriggerFactory instead")
00697 typedef iPropertyChangeTriggerFactory iPropertyChangeQuestTriggerFactory;
00698 CS_DEPRECATED_METHOD_MSG("Use iMeshSelectTriggerFactory instead")
00699 typedef iMeshSelectTriggerFactory iMeshSelectQuestTriggerFactory;
00700 CS_DEPRECATED_METHOD_MSG("Use iInventoryTriggerFactory instead")
00701 typedef iInventoryTriggerFactory iInventoryQuestTriggerFactory;
00702 CS_DEPRECATED_METHOD_MSG("Use iEnterSectorTriggerFactory instead")
00703 typedef iEnterSectorTriggerFactory iEnterSectorQuestTriggerFactory;
00704 CS_DEPRECATED_METHOD_MSG("Use iOperationTriggerFactory instead")
00705 typedef iOperationTriggerFactory iOperationQuestTriggerFactory;
00706 CS_DEPRECATED_METHOD_MSG("Use iSequenceFinishTriggerFactory instead")
00707 typedef iSequenceFinishTriggerFactory iSequenceFinishQuestTriggerFactory;
00708 CS_DEPRECATED_METHOD_MSG("Use iTriggerTriggerFactory instead")
00709 typedef iTriggerTriggerFactory iTriggerQuestTriggerFactory;
00710 CS_DEPRECATED_METHOD_MSG("Use iMessageTriggerFactory instead")
00711 typedef iMessageTriggerFactory iMessageQuestTriggerFactory;
00712 CS_DEPRECATED_METHOD_MSG("Use iWatchTriggerFactory instead")
00713 typedef iWatchTriggerFactory iWatchQuestTriggerFactory;
00714 CS_DEPRECATED_METHOD_MSG("Use iDebugPrintRewardFactory instead")
00715 typedef iDebugPrintRewardFactory iDebugPrintQuestRewardFactory;
00716 CS_DEPRECATED_METHOD_MSG("Use iChangePropertyRewardFactory instead")
00717 typedef iChangePropertyRewardFactory iChangePropertyQuestRewardFactory;
00718 CS_DEPRECATED_METHOD_MSG("Use iInventoryRewardFactory instead")
00719 typedef iInventoryRewardFactory iInventoryQuestRewardFactory;
00720 CS_DEPRECATED_METHOD_MSG("Use iCsSequenceRewardFactory instead")
00721 typedef iCsSequenceRewardFactory iCsSequenceQuestRewardFactory;
00722 CS_DEPRECATED_METHOD_MSG("Use iSequenceRewardFactory instead")
00723 typedef iSequenceRewardFactory iSequenceQuestRewardFactory;
00724 CS_DEPRECATED_METHOD_MSG("Use iSequenceFinishRewardFactory instead")
00725 typedef iSequenceFinishRewardFactory iSequenceFinishQuestRewardFactory;
00726 CS_DEPRECATED_METHOD_MSG("Use iMessageRewardFactory instead")
00727 typedef iMessageRewardFactory iMessageQuestRewardFactory;
00728 CS_DEPRECATED_METHOD_MSG("Use iActionRewardFactory instead")
00729 typedef iActionRewardFactory iActionQuestRewardFactory;
00730 CS_DEPRECATED_METHOD_MSG("Use iDestroyEntityRewardFactory instead")
00731 typedef iDestroyEntityRewardFactory iDestroyEntityQuestRewardFactory;
00732 CS_DEPRECATED_METHOD_MSG("Use iCreateEntityRewardFactory instead")
00733 typedef iCreateEntityRewardFactory iCreateEntityQuestRewardFactory;
00734 CS_DEPRECATED_METHOD_MSG("Use iDebugPrintSeqOpFactory instead")
00735 typedef iDebugPrintSeqOpFactory iDebugPrintQuestSeqOpFactory;
00736 CS_DEPRECATED_METHOD_MSG("Use iTransformSeqOpFactory instead")
00737 typedef iTransformSeqOpFactory iTransformQuestSeqOpFactory;
00738 CS_DEPRECATED_METHOD_MSG("Use iMovePathSeqOpFactory instead")
00739 typedef iMovePathSeqOpFactory iMovePathQuestSeqOpFactory;
00740 CS_DEPRECATED_METHOD_MSG("Use iLightSeqOpFactory instead")
00741 typedef iLightSeqOpFactory iLightQuestSeqOpFactory;
00742 CS_DEPRECATED_METHOD_MSG("Use iPropertySeqOpFactory instead")
00743 typedef iPropertySeqOpFactory iPropertyQuestSeqOpFactory;
00744
00745 #endif // __CEL_MGR_QUEST__