Browse Source

Real fix for #328

Michał W. Urbańczyk 15 years ago
parent
commit
b8edea2be9
1 changed files with 19 additions and 3 deletions
  1. 19 3
      hch/CObjectHandler.cpp

+ 19 - 3
hch/CObjectHandler.cpp

@@ -2764,7 +2764,8 @@ void CGTeleport::onHeroVisit( const CGHeroInstance * h ) const
 		break;
 	case 103: //find nearest subterranean gate on the other level
 		{
-			for(int i=0; i < gates.size(); i++)
+			int i=0;
+			for(; i < gates.size(); i++)
 			{
 				if(gates[i].first == id)
 				{
@@ -2777,6 +2778,14 @@ void CGTeleport::onHeroVisit( const CGHeroInstance * h ) const
 					break;
 				}
 			}
+
+			if(destinationid < 0  ||  i == gates.size()) //no exit
+			{
+				InfoWindow iw;
+				iw.player = h->tempOwner;
+				iw.text.addTxt(MetaString::ADVOB_TXT, 153); //Just inside the entrance you find a large pile of rubble blocking the tunnel. You leave discouraged.
+				cb->sendAndApply(&iw);
+			}
 			break;
 		}
 	}
@@ -2830,8 +2839,15 @@ void CGTeleport::postInit() //matches subterranean gates into pairs
 			}
 		}
 
-		gates.push_back(std::pair<int, int>(cur->id, gatesSplit[1][best.first]->id));
-		gatesSplit[1][best.first] = NULL;
+		if(best.first >= 0) //found pair
+		{
+			gates.push_back(std::pair<int, int>(cur->id, gatesSplit[1][best.first]->id));
+			gatesSplit[1][best.first] = NULL;
+		}
+		else
+		{
+			gates.push_back(std::pair<int, int>(cur->id, -1));
+		}
 	}