diff --git a/Source/dapi/GameData.h b/Source/dapi/GameData.h index 2dfe9391d..0edd16505 100644 --- a/Source/dapi/GameData.h +++ b/Source/dapi/GameData.h @@ -35,7 +35,7 @@ struct GameData { std::map playerList; std::vector itemList; std::vector groundItems; - std::vector townerList; + std::map townerList; std::vector storeList; std::vector storeItems; std::vector triggerList; diff --git a/Source/dapi/Server.cpp b/Source/dapi/Server.cpp index 90e5f2e21..d2f41fd32 100644 --- a/Source/dapi/Server.cpp +++ b/Source/dapi/Server.cpp @@ -1057,43 +1057,36 @@ void Server::updateGameData() } if (devilution::currlevel != 0) { - for (auto &townerData : data->townerList) { + for (auto &[_, townerData] : data->townerList) { strcpy(townerData._tName, ""); townerData._tx = -1; townerData._ty = -1; } } else { - for (auto i = 0; devilution::gbIsHellfire ? i < NUM_TOWNERS : i < 10; i++) { - auto townerID = data->townerList.size(); - for (size_t j = 0; j < data->townerList.size(); j++) { - if (data->townerList[j]._ttype == devilution::Towners[i]._ttype) { - townerID = j; - break; - } - } - if (townerID == data->townerList.size()) - data->townerList.push_back(TownerData {}); - data->townerList[townerID].ID = static_cast(townerID); + for (auto i = 0; devilution::gbIsHellfire ? i < NUM_TOWNERS : i < 12; i++) { + auto townerID = i; + auto &towner = data->townerList[townerID]; + towner.ID = static_cast(townerID); if (isOnScreen(devilution::Towners[i].position.x, devilution::Towners[i].position.y)) { - data->townerList[townerID]._ttype = devilution::Towners[i]._ttype; - data->townerList[townerID]._tx = devilution::Towners[i].position.x; - data->townerList[townerID]._ty = devilution::Towners[i].position.y; + towner._ttype = devilution::Towners[i]._ttype; + towner._tx = devilution::Towners[i].position.x; + towner._ty = devilution::Towners[i].position.y; // might rework this and just change the type in data. if (devilution::Towners[i].name.size() < 31) { - memcpy(data->townerList[townerID]._tName, devilution::Towners[i].name.data(), devilution::Towners[i].name.size()); - data->townerList[townerID]._tName[devilution::Towners[i].name.size()] = '\0'; + memcpy(towner._tName, devilution::Towners[i].name.data(), devilution::Towners[i].name.size()); + towner._tName[devilution::Towners[i].name.size()] = '\0'; } - // strcpy(data->townerList[townerID]._tName, devilution::Towners[i].name); old code but with devilution subbed in for reference. + // strcpy(towner._tName, devilution::Towners[i].name); old code but with devilution subbed in for reference. } else { - data->townerList[townerID]._ttype = static_cast(devilution::Towners[i]._ttype); - data->townerList[townerID]._tx = -1; - data->townerList[townerID]._ty = -1; - strcpy(data->townerList[townerID]._tName, ""); + towner._ttype = static_cast(devilution::Towners[i]._ttype); + towner._tx = -1; + towner._ty = -1; + strcpy(towner._tName, ""); } } } - for (auto &townie : data->townerList) { + for (auto &[_, townie] : data->townerList) { auto townerData = update->add_townerdata(); townerData->set_id(townie.ID); if (townie._tx != -1)