Chest.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #include "Chest.h"
  2. namespace cheat::game
  3. {
  4. Chest::Chest(app::BaseEntity* rawEntity) : Entity(rawEntity)
  5. {
  6. }
  7. cheat::game::Chest::ItemType Chest::itemType()
  8. {
  9. if (!isLoaded())
  10. return ItemType::None;
  11. if (m_ItemType)
  12. return *m_ItemType;
  13. if (name().find("TreasureBox") != std::string::npos)
  14. m_ItemType = ItemType::Chest;
  15. else if (name().find("Search") != std::string::npos || name().find("JunkChest") != std::string::npos || name().find("SumeruCrudeChest") != std::string::npos)
  16. m_ItemType = ItemType::Investigate;
  17. else if (name().find("BookPage") != std::string::npos)
  18. m_ItemType = ItemType::BookPage;
  19. else if (name().find("BGM") != std::string::npos)
  20. m_ItemType = ItemType::BGM;
  21. else if (name().find("FloraChest") != std::string::npos)
  22. m_ItemType = ItemType::Flora;
  23. else if (name().find("Quest_SiteInteract") != std::string::npos)
  24. m_ItemType = ItemType::QuestInteract;
  25. else
  26. m_ItemType = ItemType::None;
  27. return *m_ItemType;
  28. }
  29. //cheat::game::Chest::ChestState Chest::chestState()
  30. //{
  31. // if (!isLoaded())
  32. // return ChestState::None;
  33. // //if (m_ChestState)
  34. // // return *m_ChestState;
  35. // auto chestPlugin = plugin<app::LCChestPlugin>(*app::LCChestPlugin__TypeInfo);
  36. // if (chestPlugin == nullptr ||
  37. // chestPlugin->fields._owner == nullptr ||
  38. // chestPlugin->fields._owner->fields._dataItem == nullptr)
  39. // {
  40. // // m_ChestState = ChestState::Invalid;
  41. // return ChestState::Invalid;
  42. // }
  43. //
  44. // auto state = static_cast<app::GadgetState__Enum>(chestPlugin->fields._owner->fields._dataItem->fields.gadgetState);
  45. // switch (state)
  46. // {
  47. // case app::GadgetState__Enum::ChestLocked:
  48. // return ChestState::Locked;
  49. // case app::GadgetState__Enum::ChestRock:
  50. // return ChestState::InRock;
  51. // case app::GadgetState__Enum::ChestFrozen:
  52. // return ChestState::Frozen;
  53. // case app::GadgetState__Enum::ChestBramble:
  54. // return ChestState::Bramble;
  55. // case app::GadgetState__Enum::ChestTrap:
  56. // return ChestState::Trap;
  57. // case app::GadgetState__Enum::ChestOpened:
  58. // return ChestState::Invalid;
  59. // default:
  60. // return ChestState::None;
  61. // }
  62. //}
  63. cheat::game::Chest::ChestRarity Chest::chestRarity()
  64. {
  65. if (!isLoaded())
  66. return ChestRarity::Unknown;
  67. if (m_ChestRarity)
  68. return *m_ChestRarity;
  69. if (itemType() != ItemType::Chest)
  70. {
  71. m_ChestRarity = ChestRarity::Unknown;
  72. return ChestRarity::Unknown;
  73. }
  74. auto rarityIdPos = name().find('0');
  75. if (rarityIdPos == std::string::npos)
  76. {
  77. m_ChestRarity = ChestRarity::Unknown;
  78. return ChestRarity::Unknown;
  79. }
  80. int rarityId = name()[rarityIdPos + 1] - 48;
  81. switch (rarityId)
  82. {
  83. case 1:
  84. m_ChestRarity = ChestRarity::Common;
  85. break;
  86. case 2:
  87. m_ChestRarity = ChestRarity::Exquisite;
  88. break;
  89. case 4:
  90. m_ChestRarity = ChestRarity::Precious;
  91. break;
  92. case 5:
  93. m_ChestRarity = ChestRarity::Luxurious;
  94. break;
  95. case 6:
  96. m_ChestRarity = ChestRarity::Remarkable;
  97. break;
  98. default:
  99. m_ChestRarity = ChestRarity::Unknown;
  100. break;
  101. }
  102. return *m_ChestRarity;
  103. }
  104. ImColor Chest::chestColor()
  105. {
  106. switch (itemType())
  107. {
  108. case ItemType::Chest:
  109. {
  110. switch (chestRarity())
  111. {
  112. case ChestRarity::Common:
  113. return ImColor(255, 255, 255);
  114. case ChestRarity::Exquisite:
  115. return ImColor(0, 218, 255);
  116. case ChestRarity::Precious:
  117. return ImColor(231, 112, 255);
  118. case ChestRarity::Luxurious:
  119. return ImColor(246, 255, 0);
  120. case ChestRarity::Remarkable:
  121. return ImColor(255, 137, 0);
  122. case ChestRarity::Unknown:
  123. default:
  124. return ImColor(72, 72, 72);
  125. }
  126. }
  127. case ItemType::Investigate:
  128. case ItemType::BookPage:
  129. case ItemType::BGM:
  130. case ItemType::QuestInteract:
  131. case ItemType::Flora:
  132. return ImColor(104, 146, 163);
  133. case ItemType::None:
  134. default:
  135. return ImColor(72, 72, 72);
  136. }
  137. }
  138. std::string Chest::minName()
  139. {
  140. switch (itemType())
  141. {
  142. case ItemType::Chest:
  143. {
  144. switch (chestRarity())
  145. {
  146. case ChestRarity::Common:
  147. return "CR1";
  148. case ChestRarity::Exquisite:
  149. return "CR2";
  150. case ChestRarity::Precious:
  151. return "CR3";
  152. case ChestRarity::Luxurious:
  153. return "CR4";
  154. case ChestRarity::Remarkable:
  155. return "CR5";
  156. case ChestRarity::Unknown:
  157. default:
  158. return "UNK";
  159. }
  160. }
  161. case ItemType::Investigate:
  162. return "INV";
  163. case ItemType::BookPage:
  164. return "BPG";
  165. case ItemType::BGM:
  166. return "BGM";
  167. case ItemType::QuestInteract:
  168. return "QUE";
  169. case ItemType::Flora:
  170. return "FLO";
  171. case ItemType::None:
  172. default:
  173. return "UNK";
  174. }
  175. }
  176. }