Pārlūkot izejas kodu

Merge branch 'develop' of https://github.com/vcmi/vcmi into develop

DjWarmonger 10 gadi atpakaļ
vecāks
revīzija
f67005bd63
2 mainītis faili ar 15 papildinājumiem un 3 dzēšanām
  1. 1 1
      client/battle/CBattleInterface.cpp
  2. 14 2
      client/windows/CSpellWindow.cpp

+ 1 - 1
client/battle/CBattleInterface.cpp

@@ -1515,7 +1515,7 @@ void CBattleInterface::castThisSpell(SpellID spellID)
 	//choosing possible tragets
 	const CGHeroInstance * castingHero = (attackingHeroInstance->tempOwner == curInt->playerID) ? attackingHeroInstance : defendingHeroInstance;
 	assert(castingHero); // code below assumes non-null hero
-	sp = CGI->spellh->objects[spellID];
+	sp = spellID.toSpell();
 	spellSelMode = ANY_LOCATION;
 	
 	const CSpell::TargetInfo ti = sp->getTargetInfo(castingHero->getSpellSchoolLevel(sp));

+ 14 - 2
client/windows/CSpellWindow.cpp

@@ -1,6 +1,8 @@
 #include "StdInc.h"
 #include "CSpellWindow.h"
 
+#include "../../lib/ScopeGuard.h"
+
 #include "CAdvmapInterface.h"
 #include "GUIClasses.h"
 #include "InfoWindows.h"
@@ -528,7 +530,10 @@ void CSpellWindow::turnPageRight()
 void CSpellWindow::keyPressed(const SDL_KeyboardEvent & key)
 {
 	if(key.keysym.sym == SDLK_ESCAPE ||  key.keysym.sym == SDLK_RETURN)
+	{
 		fexitb();
+		return;
+	}		
 
 	if(key.state == SDL_PRESSED)
 	{
@@ -635,8 +640,9 @@ void CSpellWindow::SpellArea::clickLeft(tribool down, bool previousState)
 			{
 			case ESpellCastProblem::OK:
 				{
-					owner->fexitb();
 					owner->myInt->battleInt->castThisSpell(mySpell);
+					owner->fexitb();
+					return;
 				}
 				break;
 			case ESpellCastProblem::ANOTHER_ELEMENTAL_SUMMONED:
@@ -698,8 +704,14 @@ void CSpellWindow::SpellArea::clickLeft(tribool down, bool previousState)
 		else if(sp->isAdventureSpell() && !owner->myInt->battleInt) //adventure spell and not in battle
 		{
 			const CGHeroInstance *h = owner->myHero;
-			owner->fexitb();
+			GH.popInt(owner);
 			
+			auto guard = vstd::makeScopeGuard([this]								
+			{
+				(LOCPLINT->battleInt ? owner->myInt->spellbookSettings.spellbookLastTabBattle : owner->myInt->spellbookSettings.spellbookLastTabAdvmap) = owner->selectedTab;
+				(LOCPLINT->battleInt ? owner->myInt->spellbookSettings.spellbookLastPageBattle : owner->myInt->spellbookSettings.spellbokLastPageAdvmap) = owner->currentPage;				
+				delete owner;
+			}); 
 
 			if(mySpell == SpellID::TOWN_PORTAL)
 			{