Browse Source

🐛 Correctly wipe temp data from saves

Fixes #3167
pull/3289/head
Anders Jenbo 5 years ago
parent
commit
b77686213a
  1. 1
      Source/diablo.cpp
  2. 3
      Source/loadsave.cpp
  3. 3
      Source/pfile.cpp
  4. 1
      test/writehero_test.cpp

1
Source/diablo.cpp

@ -1549,6 +1549,7 @@ bool StartGame(bool bNewGame, bool bSinglePlayer)
InitPortals(); InitPortals();
InitDungMsgs(Players[MyPlayerId]); InitDungMsgs(Players[MyPlayerId]);
} }
giNumberOfLevels = gbIsHellfire ? 25 : 17;
interface_mode uMsg = WM_DIABNEWGAME; interface_mode uMsg = WM_DIABNEWGAME;
if (gbValidSaveFile && gbLoadGame) { if (gbValidSaveFile && gbLoadGame) {
uMsg = WM_DIABLOADGAME; uMsg = WM_DIABLOADGAME;

3
Source/loadsave.cpp

@ -1673,7 +1673,6 @@ void RemoveEmptyInventory(Player &player)
void LoadGame(bool firstflag) void LoadGame(bool firstflag)
{ {
FreeGameMem(); FreeGameMem();
pfile_remove_temp_files();
LoadHelper file("game"); LoadHelper file("game");
if (!file.IsValid()) if (!file.IsValid())
@ -1693,6 +1692,8 @@ void LoadGame(bool firstflag)
giNumberOfSmithPremiumItems = 6; giNumberOfSmithPremiumItems = 6;
} }
pfile_remove_temp_files();
setlevel = file.NextBool8(); setlevel = file.NextBool8();
setlvlnum = static_cast<_setlevels>(file.NextBE<uint32_t>()); setlvlnum = static_cast<_setlevels>(file.NextBE<uint32_t>());
currlevel = file.NextBE<uint32_t>(); currlevel = file.NextBE<uint32_t>();

3
Source/pfile.cpp

@ -347,6 +347,9 @@ bool pfile_ui_save_create(_uiheroinfo *heroinfo)
if (!OpenArchive(saveNum)) if (!OpenArchive(saveNum))
return false; return false;
heroinfo->saveNumber = saveNum; heroinfo->saveNumber = saveNum;
giNumberOfLevels = gbIsHellfire ? 25 : 17;
mpqapi_remove_hash_entries(GetFileName); mpqapi_remove_hash_entries(GetFileName);
strncpy(hero_names[saveNum], heroinfo->name, PLR_NAME_LEN); strncpy(hero_names[saveNum], heroinfo->name, PLR_NAME_LEN);
hero_names[saveNum][PLR_NAME_LEN - 1] = '\0'; hero_names[saveNum][PLR_NAME_LEN - 1] = '\0';

1
test/writehero_test.cpp

@ -331,6 +331,7 @@ TEST(Writehero, pfile_write_hero)
gbIsMultiplayer = true; gbIsMultiplayer = true;
gbIsHellfireSaveGame = false; gbIsHellfireSaveGame = false;
leveltype = DTYPE_TOWN; leveltype = DTYPE_TOWN;
giNumberOfLevels = 17;
MyPlayerId = 0; MyPlayerId = 0;
MyPlayer = &Players[MyPlayerId]; MyPlayer = &Players[MyPlayerId];

Loading…
Cancel
Save