quest.hpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
  2. // For more information, see LICENCE in the main folder
  3. #ifndef QUEST_HPP
  4. #define QUEST_HPP
  5. #include <string>
  6. #include <common/cbasetypes.hpp>
  7. #include <common/database.hpp>
  8. #include <common/strlib.hpp>
  9. #include "map.hpp"
  10. class map_session_data;
  11. enum e_size : uint8;
  12. struct s_quest_dropitem {
  13. t_itemid nameid;
  14. uint16 count;
  15. uint16 rate;
  16. uint16 mob_id;
  17. //uint8 bound;
  18. //bool isAnnounced;
  19. //bool isGUID;
  20. };
  21. struct s_quest_objective {
  22. uint16 index;
  23. uint16 mob_id;
  24. uint16 count;
  25. uint16 min_level, max_level;
  26. e_race race;
  27. e_size size;
  28. e_element element;
  29. int16 mapid;
  30. std::string map_name;
  31. std::vector<uint16> mobs_allowed;
  32. };
  33. struct s_quest_db {
  34. int32 id;
  35. time_t time;
  36. bool time_at;
  37. int32 time_week;
  38. std::vector<std::shared_ptr<s_quest_objective>> objectives;
  39. std::vector<std::shared_ptr<s_quest_dropitem>> dropitem;
  40. std::string name;
  41. };
  42. // Questlog check types
  43. enum e_quest_check_type : uint8 {
  44. HAVEQUEST, ///< Query the state of the given quest
  45. PLAYTIME, ///< Check if the given quest has been completed or has yet to expire
  46. HUNTING, ///< Check if the given hunting quest's requirements have been met
  47. };
  48. class QuestDatabase : public TypesafeYamlDatabase<uint32, s_quest_db> {
  49. public:
  50. QuestDatabase() : TypesafeYamlDatabase("QUEST_DB", 3, 1) {
  51. }
  52. const std::string getDefaultLocation() override;
  53. uint64 parseBodyNode(const ryml::NodeRef& node) override;
  54. // Additional
  55. bool reload();
  56. };
  57. extern QuestDatabase quest_db;
  58. int quest_pc_login(map_session_data *sd);
  59. int quest_add(map_session_data *sd, int quest_id);
  60. int quest_delete(map_session_data *sd, int quest_id);
  61. int quest_change(map_session_data *sd, int qid1, int qid2);
  62. int quest_update_objective_sub(struct block_list *bl, va_list ap);
  63. void quest_update_objective(map_session_data *sd, struct mob_data* md);
  64. int quest_update_status(map_session_data *sd, int quest_id, e_quest_state status);
  65. int quest_check(map_session_data *sd, int quest_id, e_quest_check_type type);
  66. std::shared_ptr<s_quest_db> quest_search(int quest_id);
  67. void do_init_quest(void);
  68. void do_final_quest(void);
  69. #endif /* QUEST_HPP */