1. #include "ScriptMgr.h"
  2. #include "InstanceScript.h"
  3. #include "wailing_caverns.h"
  4. #define MAX_ENCOUNTER 9
  5. class instance_wailing_caverns : public InstanceMapScript
  6. {
  7. public:
  8. instance_wailing_caverns() : InstanceMapScript("instance_wailing_caverns", 43) { }
  9. InstanceScript* GetInstanceScript(InstanceMap* map) const override
  10. {
  11. return new instance_wailing_caverns_InstanceMapScript(map);
  12. }
  13. struct instance_wailing_caverns_InstanceMapScript : public InstanceScript
  14. {
  15. instance_wailing_caverns_InstanceMapScript(Map* map) : InstanceScript(map)
  16. {
  17. SetHeaders(DataHeader);
  18. memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
  19. yelled = false;
  20. }
  21. uint32 m_auiEncounter[MAX_ENCOUNTER];
  22. bool yelled;
  23. ObjectGuid NaralexGUID;
  24. void OnCreatureCreate(Creature* creature) override
  25. {
  26. if (creature->GetEntry() == DATA_NARALEX)
  27. NaralexGUID = creature->GetGUID();
  28. }
  29. void SetData(uint32 type, uint32 data) override
  30. {
  31. switch (type)
  32. {
  33. case TYPE_LORD_COBRAHN: m_auiEncounter[0] = data;break;
  34. case TYPE_LORD_PYTHAS: m_auiEncounter[1] = data;break;
  35. case TYPE_LADY_ANACONDRA: m_auiEncounter[2] = data;break;
  36. case TYPE_LORD_SERPENTIS: m_auiEncounter[3] = data;break;
  37. case TYPE_NARALEX_EVENT: m_auiEncounter[4] = data;break;
  38. case TYPE_NARALEX_PART1: m_auiEncounter[5] = data;break;
  39. case TYPE_NARALEX_PART2: m_auiEncounter[6] = data;break;
  40. case TYPE_NARALEX_PART3: m_auiEncounter[7] = data;break;
  41. case TYPE_MUTANUS_THE_DEVOURER: m_auiEncounter[8] = data;break;
  42. case TYPE_NARALEX_YELLED: yelled = true; break;
  43. }
  44. if (data == DONE)SaveToDB();
  45. }
  46. uint32 GetData(uint32 type) const override
  47. {
  48. switch (type)
  49. {
  50. case TYPE_LORD_COBRAHN: return m_auiEncounter[0];
  51. case TYPE_LORD_PYTHAS: return m_auiEncounter[1];
  52. case TYPE_LADY_ANACONDRA: return m_auiEncounter[2];
  53. case TYPE_LORD_SERPENTIS: return m_auiEncounter[3];
  54. case TYPE_NARALEX_EVENT: return m_auiEncounter[4];
  55. case TYPE_NARALEX_PART1: return m_auiEncounter[5];
  56. case TYPE_NARALEX_PART2: return m_auiEncounter[6];
  57. case TYPE_NARALEX_PART3: return m_auiEncounter[7];
  58. case TYPE_MUTANUS_THE_DEVOURER: return m_auiEncounter[8];
  59. case TYPE_NARALEX_YELLED: return yelled;
  60. }
  61. return 0;
  62. }
  63. ObjectGuid GetGuidData(uint32 data) const override
  64. {
  65. if (data == DATA_NARALEX)return NaralexGUID;
  66. return ObjectGuid::Empty;
  67. }
  68. std::string GetSaveData() override
  69. {
  70. OUT_SAVE_INST_DATA;
  71. std::ostringstream saveStream;
  72. saveStream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' '
  73. << m_auiEncounter[3] << ' ' << m_auiEncounter[4] << ' ' << m_auiEncounter[5] << ' '
  74. << m_auiEncounter[6] << ' ' << m_auiEncounter[7] << ' ' << m_auiEncounter[8];
  75. OUT_SAVE_INST_DATA_COMPLETE;
  76. return saveStream.str();
  77. }
  78. void Load(const char* in) override
  79. {
  80. if (!in)
  81. {
  82. OUT_LOAD_INST_DATA_FAIL;
  83. return;
  84. }
  85. OUT_LOAD_INST_DATA(in);
  86. std::istringstream loadStream(in);
  87. loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3]
  88. >> m_auiEncounter[4] >> m_auiEncounter[5] >> m_auiEncounter[6] >> m_auiEncounter[7] >> m_auiEncounter[8];
  89. for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
  90. if (m_auiEncounter[i] != DONE)
  91. m_auiEncounter[i] = NOT_STARTED;
  92. OUT_LOAD_INST_DATA_COMPLETE;
  93. }
  94. };
  95. };
  96. void AddSC_instance_wailing_caverns()
  97. {
  98. new instance_wailing_caverns();
  99. }