You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.4 KiB

  1. #include "memory.hpp"
  2. #include "cpp-base64/base64.h"
  3. #include <string>
  4. #include <cstring>
  5. Player *Memory::loadFromCode(std::string code)
  6. {
  7. code = base64_decode(code);
  8. char playerName[16] = {0};
  9. int playerHP = 0;
  10. int playerAtk = 0;
  11. int playerDef = 0;
  12. int playerLevel = 0;
  13. int playerExp = 0;
  14. int result = sscanf(code.c_str(),
  15. "PlayerLevel=%d;PlayerExp=%d;PlayerHP=%d;PlayerAtk=%d;PlayerDef=%d;PlayerName=%15s",
  16. &playerLevel,
  17. &playerExp,
  18. &playerHP,
  19. &playerAtk,
  20. &playerDef,
  21. playerName);
  22. std::string playerTrueName = playerName;
  23. if (result == 6)
  24. {
  25. return new Player(playerTrueName, playerHP, playerAtk, playerDef, playerLevel, playerExp);
  26. }
  27. else
  28. {
  29. return nullptr;
  30. }
  31. }
  32. std::string Memory::saveToCode(Player *player)
  33. {
  34. char code[256];
  35. snprintf(code, sizeof(code),
  36. "PlayerLevel=%d;PlayerExp=%d;PlayerHP=%d;PlayerAtk=%d;PlayerDef=%d;PlayerName=%s",
  37. player->getLevel(),
  38. player->getExp(),
  39. player->getMaxHP(),
  40. player->getAtk(),
  41. player->getDef(),
  42. player->getName().c_str());
  43. return base64_encode(reinterpret_cast<unsigned char *>(code),
  44. strlen(code));
  45. }