Index: src/client/zonehandler.cpp =================================================================== --- src/client/zonehandler.cpp (revision 5731) +++ src/client/zonehandler.cpp (working copy) @@ -184,8 +184,11 @@ if (celclient->GetMainPlayer()) oldsector = celclient->GetMainPlayer()->GetSector(); - if (oldsector && newsector) - connected = celclient->GetWorld()->Connected(newsector, oldsector); + if (oldsector && newsector && celclient->GetWorld()) + { + celclient->GetWorld()->BuildWarpCache(); // we need an up-to-date warp cache here + connected = celclient->GetWorld()->Connected(oldsector, newsector); + } ZoneLoadInfo* zone = FindZone(sectorToLoad); if (zone == NULL) @@ -215,6 +218,7 @@ if(FindLoadWindow() && (psengine->GetLoader()->GetLoadingCount() != 0 || !psengine->HasLoadedMap()) && (!psengine->BackgroundWorldLoading() || !psengine->HasLoadedMap() || !connected)) { + Error4("loading %lu objects blocking of sector %s around (%s)", psengine->GetLoader()->GetLoadingCount(), sector, pos.Description().GetDataSafe()); loading = true; if(psengine->HasLoadedMap()) Index: src/common/engine/psworld.h =================================================================== --- src/common/engine/psworld.h (revision 5731) +++ src/common/engine/psworld.h (working copy) @@ -97,7 +97,6 @@ csArray transarray; - void BuildWarpCache(); public: psWorld(); ~psWorld(); @@ -129,6 +128,7 @@ static float Matrix2YRot(const csMatrix3& mat); void DumpWarpCache(); + void BuildWarpCache(); }; Index: src/common/engine/psworld.cpp =================================================================== --- src/common/engine/psworld.cpp (revision 5731) +++ src/common/engine/psworld.cpp (working copy) @@ -151,7 +151,7 @@ return true; // No need to transform, pos ok. int i = engine->GetSectors()->Find((iSector*)from); - if (i == -1) + if (i == csArrayItemNotFound) { return false; // Didn't find transformation, pos not ok. } @@ -172,7 +172,7 @@ return true; int i = engine->GetSectors()->Find((iSector*)from); - if (i == -1) + if (i == csArrayItemNotFound) return false; csReversibleTransform* transform = transarray[i].Get((iSector*)to);