mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	* fix for bugs 47 and 89
This commit is contained in:
		| @@ -790,6 +790,10 @@ CBattleAttack::CBattleAttack(CBattleInterface * _owner, int _stackID, int _dest) | ||||
| { | ||||
| 	attackedStack = LOCPLINT->cb->battleGetStackByPos(_dest, false); | ||||
| 	attackingStack = LOCPLINT->cb->battleGetStackByID(_stackID, false); | ||||
|  | ||||
| 	assert(attackedStack && "attackedStack is NULL in CBattleAttack::CBattleAttack !\n"); | ||||
| 	assert(attackingStack && "attackingStack is NULL in CBattleAttack::CBattleAttack !\n"); | ||||
|  | ||||
| 	attackingStackPosBeforeReturn = attackingStack->position; | ||||
| } | ||||
|  | ||||
| @@ -3336,8 +3340,8 @@ void CBattleHex::mouseMoved(const SDL_MouseMotionEvent &sEvent) | ||||
| 			LOCPLINT->cb->battleGetStackByPos(myNumber)->alive()) | ||||
| 		{ | ||||
| 			char tabh[160]; | ||||
| 			CStack attackedStack = *LOCPLINT->cb->battleGetStackByPos(myNumber); | ||||
| 			const std::string & attackedName = attackedStack.amount == 1 ? attackedStack.creature->nameSing : attackedStack.creature->namePl; | ||||
| 			const CStack * attackedStack = LOCPLINT->cb->battleGetStackByPos(myNumber); | ||||
| 			const std::string & attackedName = attackedStack->amount == 1 ? attackedStack->creature->nameSing : attackedStack->creature->namePl; | ||||
| 			sprintf(tabh, CGI->generaltexth->allTexts[220].c_str(), attackedName.c_str()); | ||||
| 			myInterface->console->alterTxt = std::string(tabh); | ||||
| 			setAlterText = true; | ||||
|   | ||||
| @@ -288,6 +288,12 @@ struct SettingsGrammar : public grammar<SettingsGrammar> | ||||
| 							  | "graphic=" >> fname[AddGemName()] | ||||
| 							)  | ||||
| 						 ) | ||||
| 				 | str_p("InGameConsole:") >>  | ||||
| 						*(	 | ||||
| 							(	"maxInputPerLine=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::inputLineLength)] | ||||
| 							  |	"maxOutputPerLine=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::outputLineLength)] | ||||
| 							)  | ||||
| 						 ) | ||||
| 				; | ||||
| 			AdvMapOptionsSequence = *(AdvMapOption >> (';' | eps_p[lerror("Semicolon lacking in advmapopt!")])); | ||||
| 			GUIResolution = (uint_p[assign_a(curRes.first)] >> 'x' >> uint_p[assign_a(curRes.second)]) | ||||
|   | ||||
| @@ -59,6 +59,8 @@ namespace config | ||||
| 		//gems | ||||
| 		int gemX[4], gemY[4]; | ||||
| 		std::vector<std::string> gemG; | ||||
| 		//in-game console | ||||
| 		int inputLineLength, outputLineLength; | ||||
| 	}; | ||||
| 	struct GUIOptions | ||||
| 	{ | ||||
|   | ||||
| @@ -3179,11 +3179,30 @@ void CInGameConsole::show(SDL_Surface * to) | ||||
| void CInGameConsole::print(const std::string &txt) | ||||
| { | ||||
| 	texts_mx.lock(); | ||||
| 	int lineLen = conf.go()->ac.outputLineLength; | ||||
|  | ||||
| 	texts.push_back(std::make_pair(txt, SDL_GetTicks())); | ||||
| 	if(texts.size() > maxDisplayedTexts) | ||||
| 	if(txt.size() < lineLen) | ||||
| 	{ | ||||
| 		texts.pop_front(); | ||||
| 		texts.push_back(std::make_pair(txt, SDL_GetTicks())); | ||||
| 		if(texts.size() > maxDisplayedTexts) | ||||
| 		{ | ||||
| 			texts.pop_front(); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		for(int g=0; g<txt.size() / lineLen + 1; ++g) | ||||
| 		{ | ||||
| 			std::string part = txt.substr(g * lineLen, lineLen); | ||||
| 			if(part.size() == 0) | ||||
| 				break; | ||||
|  | ||||
| 			texts.push_back(std::make_pair(part, SDL_GetTicks())); | ||||
| 			if(texts.size() > maxDisplayedTexts) | ||||
| 			{ | ||||
| 				texts.pop_front(); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	texts_mx.unlock(); | ||||
| @@ -3268,7 +3287,7 @@ void CInGameConsole::keyPressed (const SDL_KeyboardEvent & key) | ||||
| 		} | ||||
| 	default: | ||||
| 		{ | ||||
| 			if(enteredText.size() > 0) | ||||
| 			if(enteredText.size() > 0 && enteredText.size() < conf.go()->ac.inputLineLength) | ||||
| 			{ | ||||
| 				if( key.keysym.unicode < 0x80 && key.keysym.unicode > 0 ) | ||||
| 				{ | ||||
|   | ||||
| @@ -16,7 +16,8 @@ GUISettings | ||||
| 	{ | ||||
| 		AdventureMap | ||||
| 		{ | ||||
| 			AdvMap: x=7 y=6 width=593 height=547 smoothMove=1; | ||||
| 			InGameConsole: maxInputPerLine=60 maxOutputPerLine=40; | ||||
| 			AdvMap: x=7 y=6 width=593 height=547 smoothMove=1 puzzleSepia=1; | ||||
| 			InfoBox: x=605 y=389; | ||||
| 			gem0: x=6 y=508 graphic=agemLL.def; | ||||
| 			gem1: x=556 y=508 graphic=agemLR.def; | ||||
| @@ -44,6 +45,7 @@ GUISettings | ||||
| 	{ | ||||
| 		AdventureMap | ||||
| 		{ | ||||
| 			InGameConsole: maxInputPerLine=60 maxOutputPerLine=40; | ||||
| 			AdvMap: x=7 y=6 width=817 height=547 smoothMove=1 puzzleSepia=1; | ||||
| 			InfoBox: x=829 y=389; | ||||
| 		 	gem0: x=6 y=508 graphic=agemLL.def; | ||||
| @@ -73,6 +75,7 @@ GUISettings | ||||
| 	{ | ||||
| 		AdventureMap | ||||
| 		{ | ||||
| 			InGameConsole: maxInputPerLine=60 maxOutputPerLine=40; | ||||
| 			AdvMap: x=7 y=6 width=817 height=715 smoothMove=1 puzzleSepia=1; | ||||
| 			InfoBox: x=829 y=557; | ||||
| 			gem0: x=6 y=676 graphic=agemLL.def; | ||||
| @@ -101,6 +104,7 @@ GUISettings | ||||
| 	{ | ||||
| 		AdventureMap | ||||
| 		{ | ||||
| 			InGameConsole: maxInputPerLine=60 maxOutputPerLine=40; | ||||
| 			AdvMap: x=7 y=6 width=1073 height=907 smoothMove=1 puzzleSepia=1; | ||||
| 			InfoBox: x=1085 y=749; | ||||
| 			gem0: x=6 y=868 graphic=agemLL.def; | ||||
| @@ -129,6 +133,7 @@ GUISettings | ||||
| 	{ | ||||
| 		AdventureMap | ||||
| 		{ | ||||
| 			InGameConsole: maxInputPerLine=60 maxOutputPerLine=40; | ||||
| 			AdvMap: x=7 y=6 width=1073 height=971 smoothMove=1 puzzleSepia=1; | ||||
| 			InfoBox: x=1085 y=557; | ||||
| 			gem0: x=6 y=932 graphic=agemLL.def; | ||||
| @@ -157,6 +162,7 @@ GUISettings | ||||
| 	{ | ||||
| 		AdventureMap | ||||
| 		{ | ||||
| 			InGameConsole: maxInputPerLine=60 maxOutputPerLine=40; | ||||
| 			AdvMap: x=7 y=7 width=1234 height=846 smoothMove=1 puzzleSepia=1; | ||||
| 			InfoBox: x=1246 y=690; | ||||
| 			gem0: x=6 y=808 graphic=agemLL.def; | ||||
| @@ -185,6 +191,7 @@ GUISettings | ||||
| 	{ | ||||
| 		AdventureMap | ||||
| 		{ | ||||
| 			InGameConsole: maxInputPerLine=60 maxOutputPerLine=40; | ||||
| 			AdvMap: x=7 y=6 width=1395 height=1147 smoothMove=1 puzzleSepia=1; | ||||
| 			InfoBox: x=1406 y=989; | ||||
| 			gem0: x=6 y=1108 graphic=agemLL.def; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user