Procházet zdrojové kódy

Fix for printing the line number. Fixed #753.

Michał W. Urbańczyk před 14 roky
rodič
revize
e6409e8ddd

+ 3 - 3
Scripting/ERM/ERMInterpreter.cpp

@@ -1469,7 +1469,7 @@ struct LineExec : boost::static_visitor<>
 
 void ERMInterpreter::executeLine( const LinePointer & lp )
 {
-	tlog0 << "Executing line nr " << getRealLine(lp.lineNum) << " (internal " << lp.lineNum << ") from " << lp.file->filename << std::endl;
+	tlog0 << "Executing line nr " << getRealLine(lp) << " (internal " << lp.lineNum << ") from " << lp.file->filename << std::endl;
 	executeLine(scripts[lp]);
 }
 
@@ -1968,10 +1968,10 @@ void ERMInterpreter::executeInstructions()
 	//TODO implement me
 }
 
-int ERMInterpreter::getRealLine(int lineNum)
+int ERMInterpreter::getRealLine(const LinePointer &lp)
 {
 	for(std::map<VERMInterpreter::LinePointer, ERM::TLine>::const_iterator i = scripts.begin(); i != scripts.end(); i++)
-		if(i->first.lineNum == lineNum)
+		if(i->first.lineNum == lp.lineNum && i->first.file->filename == lp.file->filename)
 			return i->first.realLineNum;
 
 	return -1;

+ 1 - 1
Scripting/ERM/ERMInterpreter.h

@@ -835,7 +835,7 @@ public:
 
 	ERMInterpreter();
 	bool checkCondition( ERM::Tcondition cond );
-	int getRealLine(int lineNum);
+	int getRealLine(const VERMInterpreter::LinePointer &lp);
 
 	//overload CScriptingModule
 	virtual void heroVisit(const CGHeroInstance *visitor, const CGObjectInstance *visitedObj, bool start) OVERRIDE;

+ 1 - 1
server/CGameHandler.cpp

@@ -4557,7 +4557,7 @@ bool CGameHandler::castSpell(const CGHeroInstance *h, int spellID, const int3 &p
 					COMPLAIN_RET("This hero can only teleport to nearest town!")
 			}
 			if (h->visitedTown)
-				stopHeroVisitCastle(town->id, h->id);
+				stopHeroVisitCastle(h->visitedTown->id, h->id);
 			if (moveHero(h->id, town->visitablePos() + h->getVisitableOffset() ,1));
 				heroVisitCastle(town->id, h->id);
 		}