Quest.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717
  1. #include "Quest.h"
  2. QuestRequirementStorage::QuestRequirementStorage(Framework::Text requirementId)
  3. : ReferenceCounter(),
  4. requirementId(requirementId),
  5. fulfilled(0),
  6. data(new Framework::JSON::JSONObject())
  7. {}
  8. QuestRequirementStorage::~QuestRequirementStorage()
  9. {
  10. data->release();
  11. }
  12. void QuestRequirementStorage::putValue(
  13. Framework::Text key, Framework::JSON::JSONValue* value)
  14. {
  15. data->removeValue(key);
  16. data->addValue(key, value);
  17. }
  18. Framework::JSON::JSONValue* QuestRequirementStorage::getValue(
  19. Framework::Text key) const
  20. {
  21. return data->getValue(key);
  22. }
  23. Framework::JSON::JSONValue* QuestRequirementStorage::zValue(
  24. Framework::Text key) const
  25. {
  26. return data->zValue(key);
  27. }
  28. bool QuestRequirementStorage::containsKey(Framework::Text key) const
  29. {
  30. return data->hasValue(key);
  31. }
  32. void QuestRequirementStorage::setFullfilled(bool fullfilled)
  33. {
  34. this->fulfilled = fullfilled;
  35. }
  36. bool QuestRequirementStorage::isFullfilled() const
  37. {
  38. return fulfilled;
  39. }
  40. const Framework::Text& QuestRequirementStorage::getRequirementId() const
  41. {
  42. return requirementId;
  43. }
  44. QuestRequirementStorageType::QuestRequirementStorageType()
  45. : TypeFactory<QuestRequirementStorage>()
  46. {}
  47. QuestRequirementStorage* QuestRequirementStorageType::fromJson(
  48. Framework::JSON::JSONValue* zJson) const
  49. {
  50. QuestRequirementStorage* result = new QuestRequirementStorage(
  51. zJson->asObject()->zValue("requirementId")->asString()->getString());
  52. result->setFullfilled(
  53. zJson->asObject()->zValue("fulfilled")->asBool()->getBool());
  54. result->data->release();
  55. result->data = zJson->asObject()->getValue("data")->asObject();
  56. return result;
  57. }
  58. Framework::JSON::JSONValue* QuestRequirementStorageType::toJSON(
  59. QuestRequirementStorage* zObject) const
  60. {
  61. Framework::JSON::JSONObject* result = new Framework::JSON::JSONObject();
  62. result->addValue("requirementId",
  63. new Framework::JSON::JSONString(zObject->getRequirementId()));
  64. result->addValue(
  65. "fulfilled", new Framework::JSON::JSONBool(zObject->isFullfilled()));
  66. Framework::Text dataString = zObject->data->toString();
  67. result->addValue("data", Framework::JSON::Parser::getValue(dataString));
  68. return result;
  69. }
  70. Framework::JSON::Validator::JSONValidator*
  71. QuestRequirementStorageType::getValidator() const
  72. {
  73. return Framework::JSON::Validator::JSONValidator::buildForObject()
  74. ->withRequiredString("requirementId")
  75. ->finishString()
  76. ->withRequiredBool("fulfilled")
  77. ->withDefault(false)
  78. ->finishBool()
  79. ->withRequiredObject("data")
  80. ->finishObject()
  81. ->finishObject();
  82. }
  83. QuestStorage::QuestStorage(Framework::Text questId)
  84. : questId(questId),
  85. finished(0),
  86. rewarded(0)
  87. {}
  88. void QuestStorage::setQuestFinished(bool finished)
  89. {
  90. this->finished = finished;
  91. }
  92. void QuestStorage::setQuestRewarded(bool rewarded)
  93. {
  94. this->rewarded = rewarded;
  95. }
  96. bool QuestStorage::isQuestFinished() const
  97. {
  98. return finished;
  99. }
  100. bool QuestStorage::isQuestRewarded() const
  101. {
  102. return rewarded;
  103. }
  104. QuestRequirementStorage* QuestStorage::zStorage(Framework::Text requirementId)
  105. {
  106. for (QuestRequirementStorage* storage : requirements)
  107. {
  108. if (storage->getRequirementId().istGleich(requirementId))
  109. {
  110. return storage;
  111. }
  112. }
  113. QuestRequirementStorage* result
  114. = new QuestRequirementStorage(requirementId);
  115. requirements.add(result);
  116. return result;
  117. }
  118. const Framework::Text& QuestStorage::getQuestId() const
  119. {
  120. return questId;
  121. }
  122. QuestStorageType::QuestStorageType()
  123. : TypeFactory<QuestStorage>()
  124. {}
  125. QuestStorage* QuestStorageType::fromJson(
  126. Framework::JSON::JSONValue* zJson) const
  127. {
  128. QuestStorage* result = new QuestStorage(
  129. zJson->asObject()->zValue("questId")->asString()->getString());
  130. result->finished
  131. = zJson->asObject()->zValue("finished")->asBool()->getBool();
  132. result->rewarded
  133. = zJson->asObject()->zValue("rewarded")->asBool()->getBool();
  134. Framework::JSON::JSONArray* rewardsArray
  135. = zJson->asObject()->zValue("requirements")->asArray();
  136. for (int i = 0; i < rewardsArray->getLength(); i++)
  137. {
  138. result->requirements.add(
  139. Game::INSTANCE->zTypeRegistry()->fromJson<QuestRequirementStorage>(
  140. rewardsArray->zValue(i)->asObject()));
  141. }
  142. return result;
  143. }
  144. Framework::JSON::JSONValue* QuestStorageType::toJSON(
  145. QuestStorage* zObject) const
  146. {
  147. Framework::JSON::JSONObject* result = new Framework::JSON::JSONObject();
  148. result->addValue(
  149. "questId", new Framework::JSON::JSONString(zObject->questId));
  150. result->addValue(
  151. "finished", new Framework::JSON::JSONBool(zObject->finished));
  152. result->addValue(
  153. "rewarded", new Framework::JSON::JSONBool(zObject->rewarded));
  154. Framework::JSON::JSONArray* rewardsArray = new Framework::JSON::JSONArray();
  155. for (QuestRequirementStorage* storage : zObject->requirements)
  156. {
  157. rewardsArray->addValue(
  158. Game::INSTANCE->zTypeRegistry()->toJSON(storage));
  159. }
  160. result->addValue("requirements", rewardsArray);
  161. return result;
  162. }
  163. Framework::JSON::Validator::JSONValidator*
  164. QuestStorageType::getValidator() const
  165. {
  166. return Framework::JSON::Validator::JSONValidator::buildForObject()
  167. ->withRequiredString("questId")
  168. ->finishString()
  169. ->withRequiredBool("finished")
  170. ->withDefault(false)
  171. ->finishBool()
  172. ->withRequiredBool("rewarded")
  173. ->withDefault(false)
  174. ->finishBool()
  175. ->withRequiredArray("requirements")
  176. ->addAcceptedTypeInArray(Game::INSTANCE->zTypeRegistry()
  177. ->getValidator<QuestRequirementStorage>())
  178. ->finishArray()
  179. ->finishObject();
  180. }
  181. QuestParty::QuestParty()
  182. : ReferenceCounter()
  183. {}
  184. void QuestParty::addMember(int memberEntityId)
  185. {
  186. memberEntityIds.add(memberEntityId);
  187. }
  188. void QuestParty::removeMember(int memberEntityId)
  189. {
  190. memberEntityIds.removeValue(memberEntityId);
  191. }
  192. bool QuestParty::isMember(int memberEntityId) const
  193. {
  194. return memberEntityIds.hat(memberEntityId);
  195. }
  196. bool QuestParty::isEmpty() const
  197. {
  198. return memberEntityIds.getEintragAnzahl() == 0;
  199. }
  200. QuestStorage* QuestParty::zQuestStorage(Framework::Text questId)
  201. {
  202. for (QuestStorage* storage : questStorage)
  203. {
  204. if (storage->getQuestId().istGleich(questId))
  205. {
  206. return storage;
  207. }
  208. }
  209. QuestStorage* result = new QuestStorage(questId);
  210. questStorage.add(result);
  211. return result;
  212. }
  213. QuestParty* QuestParty::clone() const
  214. {
  215. QuestParty* result = new QuestParty();
  216. for (QuestStorage* storage : questStorage)
  217. {
  218. Framework::JSON::JSONValue* value
  219. = Game::INSTANCE->zTypeRegistry()->toJSON(storage);
  220. result->questStorage.add(
  221. Game::INSTANCE->zTypeRegistry()->fromJson<QuestStorage>(value));
  222. value->release();
  223. }
  224. return result;
  225. }
  226. QuestPartyType::QuestPartyType()
  227. : TypeFactory<QuestParty>()
  228. {}
  229. QuestParty* QuestPartyType::fromJson(
  230. Framework::JSON::JSONValue* zJson) const
  231. {
  232. QuestParty* result = new QuestParty();
  233. Framework::JSON::JSONArray* membersArray
  234. = zJson->asObject()->zValue("members")->asArray();
  235. for (int i = 0; i < membersArray->getLength(); i++)
  236. {
  237. result->memberEntityIds.add(
  238. (int)membersArray->zValue(i)->asNumber()->getNumber());
  239. }
  240. Framework::JSON::JSONArray* storagesArray
  241. = zJson->asObject()->zValue("quests")->asArray();
  242. for (int i = 0; i < storagesArray->getLength(); i++)
  243. {
  244. result->questStorage.add(
  245. Game::INSTANCE->zTypeRegistry()->fromJson<QuestStorage>(
  246. storagesArray->zValue(i)->asObject()));
  247. }
  248. return result;
  249. }
  250. Framework::JSON::JSONValue* QuestPartyType::toJSON(
  251. QuestParty* zObject) const
  252. {
  253. Framework::JSON::JSONObject* result = new Framework::JSON::JSONObject();
  254. Framework::JSON::JSONArray* membersArray = new Framework::JSON::JSONArray();
  255. for (int memberEntityId : zObject->memberEntityIds)
  256. {
  257. membersArray->addValue(new Framework::JSON::JSONNumber(memberEntityId));
  258. }
  259. result->addValue("members", membersArray);
  260. Framework::JSON::JSONArray* storagesArray
  261. = new Framework::JSON::JSONArray();
  262. for (QuestStorage* storage : zObject->questStorage)
  263. {
  264. storagesArray->addValue(
  265. Game::INSTANCE->zTypeRegistry()->toJSON(storage));
  266. }
  267. result->addValue("quests", storagesArray);
  268. return result;
  269. }
  270. Framework::JSON::Validator::JSONValidator* QuestPartyType::getValidator() const
  271. {
  272. return Framework::JSON::Validator::JSONValidator::buildForObject()
  273. ->withRequiredArray("members")
  274. ->addAcceptedNumberInArray()
  275. ->finishNumber()
  276. ->removeInvalidEntries()
  277. ->finishArray()
  278. ->withRequiredArray("quests")
  279. ->addAcceptedTypeInArray(
  280. Game::INSTANCE->zTypeRegistry()->getValidator<QuestStorage>())
  281. ->removeInvalidEntries()
  282. ->finishArray()
  283. ->finishObject();
  284. }
  285. Quest::Quest(Framework::Text questId)
  286. : ReferenceCounter(),
  287. questId(questId)
  288. {}
  289. void Quest::processEvent(QuestEvent* zEvent, QuestStorage* zStorage)
  290. {
  291. bool finished = 1;
  292. for (QuestRequirement* requirement : requirements)
  293. {
  294. QuestRequirementStorage* zRequirementStorage
  295. = zStorage->zStorage(requirement->getRequirementId());
  296. if (!zRequirementStorage->isFullfilled())
  297. {
  298. requirement->processEvent(zEvent, zRequirementStorage);
  299. finished &= zRequirementStorage->isFullfilled();
  300. }
  301. }
  302. if (finished)
  303. {
  304. zStorage->setQuestFinished(1);
  305. }
  306. }
  307. bool Quest::isVisible(QuestParty* zParty)
  308. {
  309. bool visible = 1;
  310. for (Framework::Text* requiredQuestId : requiredQuestsIds)
  311. {
  312. visible &= zParty->zQuestStorage(*requiredQuestId)->isQuestFinished();
  313. }
  314. return visible;
  315. }
  316. void Quest::giveReward(
  317. int choice, Entity* zTargetEntity, QuestStorage* zStorage)
  318. {
  319. if (!zStorage->isQuestFinished() || zStorage->isQuestRewarded())
  320. {
  321. return;
  322. }
  323. rewards.z(choice)->giveReward(zTargetEntity);
  324. zStorage->setQuestRewarded(1);
  325. }
  326. const Framework::Text& Quest::getQuestId() const
  327. {
  328. return questId;
  329. }
  330. QuestType::QuestType()
  331. : TypeFactory<Quest>()
  332. {}
  333. Quest* QuestType::fromJson(Framework::JSON::JSONValue* zJson) const
  334. {
  335. Quest* result = new Quest(
  336. zJson->asObject()->zValue("questId")->asString()->getString());
  337. result->questName
  338. = zJson->asObject()->zValue("questName")->asString()->getString();
  339. Framework::JSON::JSONArray* requiredQuestIdsArray
  340. = zJson->asObject()->zValue("requiredQuestIds")->asArray();
  341. for (int i = 0; i < requiredQuestIdsArray->getLength(); i++)
  342. {
  343. result->requiredQuestsIds.add(new Framework::Text(
  344. requiredQuestIdsArray->zValue(i)->asString()->getString()));
  345. }
  346. Framework::JSON::JSONArray* requirementsArray
  347. = zJson->asObject()->zValue("requirements")->asArray();
  348. for (int i = 0; i < requirementsArray->getLength(); i++)
  349. {
  350. result->requirements.add(
  351. Game::INSTANCE->zTypeRegistry()->fromJson<QuestRequirement>(
  352. requirementsArray->zValue(i)));
  353. }
  354. Framework::JSON::JSONArray* rewardsArray
  355. = zJson->asObject()->zValue("rewards")->asArray();
  356. for (int i = 0; i < rewardsArray->getLength(); i++)
  357. {
  358. result->rewards.add(
  359. Game::INSTANCE->zTypeRegistry()->fromJson<QuestReward>(
  360. requirementsArray->zValue(i)));
  361. }
  362. return result;
  363. }
  364. Framework::JSON::JSONValue* QuestType::toJSON(Quest* zObject) const
  365. {
  366. Framework::JSON::JSONObject* result = new Framework::JSON::JSONObject();
  367. result->addValue(
  368. "questId", new Framework::JSON::JSONString(zObject->questId));
  369. result->addValue(
  370. "questName", new Framework::JSON::JSONString(zObject->questName));
  371. Framework::JSON::JSONArray* requiredQuestIdsArray
  372. = new Framework::JSON::JSONArray();
  373. for (Framework::Text* requiredQuestId : zObject->requiredQuestsIds)
  374. {
  375. requiredQuestIdsArray->addValue(
  376. new Framework::JSON::JSONString(*requiredQuestId));
  377. }
  378. result->addValue("requiredQuestIds", requiredQuestIdsArray);
  379. Framework::JSON::JSONArray* requirementsArray
  380. = new Framework::JSON::JSONArray();
  381. for (QuestRequirement* requirement : zObject->requirements)
  382. {
  383. requirementsArray->addValue(requirement->getAsJSON());
  384. }
  385. result->addValue("requirements", requirementsArray);
  386. Framework::JSON::JSONArray* rewardsArray = new Framework::JSON::JSONArray();
  387. for (QuestReward* reward : zObject->rewards)
  388. {
  389. rewardsArray->addValue(reward->getAsJSON());
  390. }
  391. return result;
  392. }
  393. Framework::JSON::Validator::JSONValidator* QuestType::getValidator() const
  394. {
  395. return Framework::JSON::Validator::JSONValidator::buildForObject()
  396. ->withRequiredString("questId")
  397. ->finishString()
  398. ->withRequiredString("questName")
  399. ->finishString()
  400. ->withRequiredArray("requiredQuestIds")
  401. ->addAcceptedStringInArray()
  402. ->finishString()
  403. ->finishArray()
  404. ->withRequiredArray("requirements")
  405. ->addAcceptedTypeInArray(
  406. Game::INSTANCE->zTypeRegistry()->getValidator<QuestRequirement>())
  407. ->finishArray()
  408. ->withRequiredArray("rewards")
  409. ->addAcceptedTypeInArray(
  410. Game::INSTANCE->zTypeRegistry()->getValidator<QuestReward>())
  411. ->finishArray()
  412. ->finishObject();
  413. }
  414. QuestCollection::QuestCollection(Framework::Text name)
  415. : ReferenceCounter(),
  416. name(name)
  417. {}
  418. void QuestCollection::processEvent(QuestEvent* zEvent, QuestParty* zParty)
  419. {
  420. for (Quest* quest : quests)
  421. {
  422. QuestStorage* zStorage = zParty->zQuestStorage(quest->getQuestId());
  423. if (quest->isVisible(zParty) && !zStorage->isQuestFinished())
  424. {
  425. quest->processEvent(zEvent, zStorage);
  426. }
  427. }
  428. }
  429. bool QuestCollection::isVisible(QuestParty* zParty)
  430. {
  431. bool visible = 1;
  432. for (Quest* quest : quests)
  433. {
  434. visible &= quest->isVisible(zParty);
  435. }
  436. return visible;
  437. }
  438. void QuestCollection::giveReward(Framework::Text questId,
  439. int choice,
  440. Entity* zTargetEntity,
  441. QuestParty* zParty)
  442. {
  443. QuestStorage* zStorage = zParty->zQuestStorage(questId);
  444. if (zStorage->isQuestRewarded() || !zStorage->isQuestFinished())
  445. {
  446. return;
  447. }
  448. for (Quest* quest : quests)
  449. {
  450. if (quest->getQuestId() == questId)
  451. {
  452. quest->giveReward(choice, zTargetEntity, zStorage);
  453. return;
  454. }
  455. }
  456. }
  457. void QuestCollection::addQuest(Quest* zQuest)
  458. {
  459. quests.add(zQuest);
  460. }
  461. QuestCollectionType::QuestCollectionType()
  462. : TypeFactory<QuestCollection>()
  463. {}
  464. QuestCollection* QuestCollectionType::fromJson(
  465. Framework::JSON::JSONValue* zJson) const
  466. {
  467. QuestCollection* result = new QuestCollection(
  468. zJson->asObject()->zValue("name")->asString()->getString());
  469. Framework::JSON::JSONArray* questsArray
  470. = zJson->asObject()->zValue("quests")->asArray();
  471. for (int i = 0; i < questsArray->getLength(); i++)
  472. {
  473. result->quests.add(Game::INSTANCE->zTypeRegistry()->fromJson<Quest>(
  474. questsArray->zValue(i)->asObject()));
  475. }
  476. return result;
  477. }
  478. Framework::JSON::JSONValue* QuestCollectionType::toJSON(
  479. QuestCollection* zObject) const
  480. {
  481. Framework::JSON::JSONObject* result = new Framework::JSON::JSONObject();
  482. result->addValue("name", new Framework::JSON::JSONString(zObject->name));
  483. Framework::JSON::JSONArray* questsArray = new Framework::JSON::JSONArray();
  484. for (Quest* quest : zObject->quests)
  485. {
  486. questsArray->addValue(Game::INSTANCE->zTypeRegistry()->toJSON(quest));
  487. }
  488. result->addValue("quests", questsArray);
  489. return result;
  490. }
  491. Framework::JSON::Validator::JSONValidator*
  492. QuestCollectionType::getValidator() const
  493. {
  494. return Framework::JSON::Validator::JSONValidator::buildForObject()
  495. ->withRequiredString("name")
  496. ->finishString()
  497. ->withRequiredArray("quests")
  498. ->addAcceptedTypeInArray(
  499. Game::INSTANCE->zTypeRegistry()->getValidator<Quest>())
  500. ->removeInvalidEntries()
  501. ->finishArray()
  502. ->finishObject();
  503. }
  504. QuestManager::QuestManager()
  505. : ReferenceCounter()
  506. {}
  507. void QuestManager::loadQuests()
  508. {
  509. Framework::Text worldDir = Game::INSTANCE->getWorldDirectory();
  510. Framework::Text questDir = worldDir + "/quests";
  511. if (!Framework::DateiExistiert(questDir))
  512. {
  513. std::cout << "no quest data found in world save, using default data\n";
  514. questDir = "data/quests";
  515. }
  516. Framework::JSON::JSONValue* value
  517. = Framework::JSON::loadJSONFromFile(questDir + "/quests.json");
  518. if (!value || value->getType() == Framework::JSON::JSONType::NULL_)
  519. {
  520. std::cout << "No valid quests.json found in " << questDir << "\n";
  521. if (value)
  522. {
  523. value->release();
  524. }
  525. }
  526. else
  527. {
  528. std::cout << "loading quests ...\n";
  529. Framework::JSON::Validator::JSONValidator* validator
  530. = Framework::JSON::Validator::JSONValidator::buildForArray()
  531. ->addAcceptedTypeInArray(
  532. Game::INSTANCE->zTypeRegistry()
  533. ->getValidator<QuestCollection>())
  534. ->removeInvalidEntries()
  535. ->finishArray();
  536. Framework::RCArray<Framework::JSON::Validator::JSONValidationResult>
  537. validationResult;
  538. Framework::JSON::JSONArray* valid
  539. = validator->getValidParts(value, &validationResult)->asArray();
  540. for (Framework::JSON::Validator::JSONValidationResult* invalidPart :
  541. validationResult)
  542. {
  543. invalidPart->printInvalidInfo();
  544. }
  545. value->release();
  546. for (Framework::JSON::JSONValue* validPart : *valid)
  547. {
  548. questCollections.add(
  549. Game::INSTANCE->zTypeRegistry()->fromJson<QuestCollection>(
  550. validPart->asObject()));
  551. }
  552. valid->release();
  553. validator->release();
  554. }
  555. value = Framework::JSON::loadJSONFromFile(questDir + "/parties.json");
  556. if (!value || value->getType() == Framework::JSON::JSONType::NULL_)
  557. {
  558. if (value)
  559. {
  560. value->release();
  561. }
  562. }
  563. else
  564. {
  565. std::cout << "loading quest parties ...\n";
  566. Framework::JSON::Validator::JSONValidator* validator
  567. = Framework::JSON::Validator::JSONValidator::buildForArray()
  568. ->addAcceptedTypeInArray(Game::INSTANCE->zTypeRegistry()
  569. ->getValidator<QuestParty>())
  570. ->removeInvalidEntries()
  571. ->finishArray();
  572. Framework::RCArray<Framework::JSON::Validator::JSONValidationResult>
  573. validationResult;
  574. Framework::JSON::JSONArray* valid
  575. = validator->getValidParts(value, &validationResult)->asArray();
  576. for (Framework::JSON::Validator::JSONValidationResult* invalidPart :
  577. validationResult)
  578. {
  579. invalidPart->printInvalidInfo();
  580. }
  581. value->release();
  582. for (Framework::JSON::JSONValue* validPart : *valid)
  583. {
  584. parties.add(Game::INSTANCE->zTypeRegistry()->fromJson<QuestParty>(
  585. validPart->asObject()));
  586. }
  587. valid->release();
  588. validator->release();
  589. }
  590. std::cout << "Loaded " << questCollections.getEintragAnzahl()
  591. << " Quest Collections and " << parties.getEintragAnzahl()
  592. << " Quest Parties\n";
  593. }
  594. void QuestManager::saveQuests()
  595. {
  596. Framework::Text worldDir = Game::INSTANCE->getWorldDirectory();
  597. Framework::Text questDir = worldDir + "/quests";
  598. if (!Framework::DateiExistiert(questDir))
  599. {
  600. Framework::DateiPfadErstellen(questDir + "/");
  601. }
  602. Framework::JSON::JSONArray* questCollectionsArray
  603. = new Framework::JSON::JSONArray();
  604. for (QuestCollection* questCollection : questCollections)
  605. {
  606. questCollectionsArray->addValue(
  607. Game::INSTANCE->zTypeRegistry()->toJSON(questCollection));
  608. }
  609. Datei datei(questDir + "/quests.json");
  610. if (!datei.existiert()) datei.erstellen();
  611. datei.open(Framework::Datei::Style::schreiben);
  612. Framework::Text jsonStr = questCollectionsArray->toString();
  613. datei.schreibe(jsonStr.getText(), jsonStr.getLength());
  614. datei.close();
  615. questCollectionsArray->release();
  616. Framework::JSON::JSONArray* partiesArray = new Framework::JSON::JSONArray();
  617. for (QuestParty* party : parties)
  618. {
  619. partiesArray->addValue(Game::INSTANCE->zTypeRegistry()->toJSON(party));
  620. }
  621. datei.setDatei(questDir + "/parties.json");
  622. if (!datei.existiert()) datei.erstellen();
  623. datei.open(Framework::Datei::Style::schreiben);
  624. jsonStr = partiesArray->toString();
  625. datei.schreibe(jsonStr.getText(), jsonStr.getLength());
  626. datei.close();
  627. partiesArray->release();
  628. }
  629. void QuestManager::processEvent(QuestEvent* zEvent)
  630. {
  631. Entity* zEntity = zEvent->zActingEntity();
  632. for (QuestParty* party : parties)
  633. {
  634. if (party->isMember(zEntity->getId()))
  635. {
  636. for (QuestCollection* questCollection : questCollections)
  637. {
  638. questCollection->processEvent(zEvent, party);
  639. }
  640. return;
  641. }
  642. }
  643. }
  644. void QuestManager::giveReward(
  645. Framework::Text questId, int choice, Entity* zTargetEntity)
  646. {
  647. for (QuestParty* party : parties)
  648. {
  649. if (party->isMember(zTargetEntity->getId()))
  650. {
  651. for (QuestCollection* questCollection : questCollections)
  652. {
  653. questCollection->giveReward(
  654. questId, choice, zTargetEntity, party);
  655. }
  656. return;
  657. }
  658. }
  659. }