diff --git a/src/stratagus/script_player.cpp b/src/stratagus/script_player.cpp index 7195697c9..327a38b6c 100644 --- a/src/stratagus/script_player.cpp +++ b/src/stratagus/script_player.cpp @@ -94,8 +94,8 @@ void CPlayer::Load(lua_State *l) { const int args = lua_gettop(l); - this->Units.resize(0); - this->FreeWorkers.resize(0); + this->Units.clear(); + this->FreeWorkers.clear(); // j = 0 represent player Index. for (int j = 1; j < args; ++j) { diff --git a/src/unit/unit.cpp b/src/unit/unit.cpp index ab7c0f894..47ab04328 100644 --- a/src/unit/unit.cpp +++ b/src/unit/unit.cpp @@ -491,6 +491,9 @@ void CUnit::Release(bool final) DebugPrint("unit already free\n"); return; } + if (PlayerSlot != static_cast<size_t>(-1)) { + Player->RemoveUnit(*this); + } Assert(Orders.size() == 1); // Must be removed before here Assert(Removed); diff --git a/src/unit/unit_manager.cpp b/src/unit/unit_manager.cpp index f582db730..dc6889899 100644 --- a/src/unit/unit_manager.cpp +++ b/src/unit/unit_manager.cpp @@ -120,6 +120,7 @@ void CUnitManager::ReleaseUnit(CUnit *unit) unit->UnitManagerData.unitSlot = -1; units.pop_back(); } + Assert(unit->PlayerSlot == -1); releasedUnits.push_back(unit); unit->ReleaseCycle = GameCycle + 500; // can be reused after this time //Refs = GameCycle + (NetworkMaxLag << 1); // could be reuse after this time