Hi.
Somebody know where I find an example of CEL Quest System in C++ or an example of some Custom Quest System(using CEL Quest)?
Thanks
There is no such example at the moment but it should be just a matter of using the API. In very early versions of celtest when the quest manager was just created there was actually an example there. I extracted it from svn for you:
csPtr<iCelEntity> CelTest::CreateQuest (const char* name)
{
// The Quest Entity
csRef<iCelEntity> entity_quest = pl->CreateEntity (name, bltest, "quest",
"pclogic.quest", "pctools.properties", CEL_PROPCLASS_END);
if (!entity_quest) return 0;
csRef<iQuestManager> qm = csQueryRegistry<iQuestManager> (object_reg);
iChangePropertyQuestRewardFactory* rf_changeprop;
//-----------------------------------------------------------
// Create 'testquest'.
//-----------------------------------------------------------
iQuestFactory* fact = qm->CreateQuestFactory ("testquest");
// ---- init ----
iQuestStateFactory* state_init = fact->CreateState ("init");
iQuestTriggerResponseFactory* init_response1 =
state_init->CreateTriggerResponseFactory ();
qm->SetTimeoutTrigger (init_response1, "1000");
qm->AddDebugPrintReward (init_response1, "$message");
qm->AddNewStateReward (init_response1, "$ent", "start");
rf_changeprop = qm->AddChangePropertyReward (init_response1,
"$ent", "counter");
rf_changeprop->SetLongParameter ("0");
// ---- start ----
iQuestStateFactory* state_start = fact->CreateState ("start");
iQuestTriggerResponseFactory* start_response1 =
state_start->CreateTriggerResponseFactory ();
qm->SetMeshEnterSectorTrigger (start_response1, "camera", "room0,1");
qm->AddDebugPrintReward (start_response1, "Done!");
qm->AddNewStateReward (start_response1, "$ent", "middle");
iQuestTriggerResponseFactory* start_response2 =
state_start->CreateTriggerResponseFactory ();
qm->SetPropertyChangeTrigger (start_response2, "$ent", "counter", "5");
qm->AddDebugPrintReward (start_response2, "We reached 5!");
qm->AddNewStateReward (start_response2, "$ent", "end");
// ---- middle ----
iQuestStateFactory* state_middle = fact->CreateState ("middle");
iQuestTriggerResponseFactory* middle_response1 =
state_middle->CreateTriggerResponseFactory ();
qm->SetMeshEnterSectorTrigger (middle_response1, "camera", "room");
qm->AddNewStateReward (middle_response1, "$ent", "start");
qm->AddDebugPrintReward (middle_response1, "And Back!");
rf_changeprop = qm->AddChangePropertyReward (middle_response1,
"$ent", "counter");
rf_changeprop->SetDiffParameter ("1");
// ---- end ----
fact->CreateState ("end");
//-----------------------------------------------------------
csRef<iPcQuest> pcquest = CEL_QUERY_PROPCLASS_ENT (entity_quest, iPcQuest);
celQuestParams params;
params.Put ("message", "Hallo Hallo!");
params.Put ("ent", name);
if (!pcquest->NewQuest ("testquest", params))
{
ReportError ("Error creating quest '%s'!", "testquest");
return 0;
}
pcquest->GetQuest ()->SwitchState ("init");
return csPtr<iCelEntity> (entity_quest);
}
I haven't tested if it still works but I think it should. Let me know if you have further questions.
Greetings,