1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-26 22:57:00 +02:00

- fixed crash in #761

This commit is contained in:
Ivan Savenko 2011-07-02 15:12:35 +00:00
parent 48e79b163c
commit 11fade5e67
2 changed files with 13 additions and 6 deletions

View File

@ -6,8 +6,8 @@
#include "CHeroWindow.h" #include "CHeroWindow.h"
#include "CMessage.h" #include "CMessage.h"
#include "CKingdomInterface.h" #include "CKingdomInterface.h"
#include "SDL.h" #include <SDL.h>
#include "SDL_Extensions.h" #include <SDL_Extensions.h>
#include "CBitmapHandler.h" #include "CBitmapHandler.h"
#include "Graphics.h" #include "Graphics.h"
#include "CSpellWindow.h" #include "CSpellWindow.h"
@ -51,7 +51,7 @@ const boost::shared_ptr<BonusList> CHeroWithMaybePickedArtifact::getAllBonuses(c
boost::shared_ptr<BonusList> bonusesFromPickedUpArtifact; boost::shared_ptr<BonusList> bonusesFromPickedUpArtifact;
CArtifactsOfHero::SCommonPart *cp = cww->artSets.size() ? cww->artSets.front()->commonInfo : NULL; CArtifactsOfHero::SCommonPart *cp = cww->artSets.size() ? cww->artSets.front()->commonInfo : NULL;
if(cp && cp->src.art && cp->src.AOH && cp->src.AOH->getHero() == hero) if(cp && cp->src.art && cp->src.valid() && cp->src.AOH && cp->src.AOH->getHero() == hero)
{ {
bonusesFromPickedUpArtifact = cp->src.art->getAllBonuses(selector, limit, hero); bonusesFromPickedUpArtifact = cp->src.art->getAllBonuses(selector, limit, hero);
} }

View File

@ -4725,7 +4725,7 @@ void CArtPlace::clickLeft(tribool down, bool previousState)
void CArtPlace::clickRight(tribool down, bool previousState) void CArtPlace::clickRight(tribool down, bool previousState)
{ {
if(down && ourArt && !locked && text.size()) //if there is no description or it's a lock, do nothing ;] if(down && ourArt && !locked && text.size() && !picked) //if there is no description or it's a lock, do nothing ;]
{ {
if (slotID < 19) if (slotID < 19)
{ {
@ -4748,6 +4748,7 @@ void CArtPlace::clickRight(tribool down, bool previousState)
tlog3 << "More than one possibility of assembling... taking only first\n"; tlog3 << "More than one possibility of assembling... taking only first\n";
break; break;
} }
return;
} }
// Otherwise if the artifact can be diasassembled, display dialog. // Otherwise if the artifact can be diasassembled, display dialog.
@ -4759,6 +4760,7 @@ void CArtPlace::clickRight(tribool down, bool previousState)
false, false,
boost::bind(&CCallback::assembleArtifacts, LOCPLINT->cb, ourOwner->curHero, slotID, false, 0), boost::bind(&CCallback::assembleArtifacts, LOCPLINT->cb, ourOwner->curHero, slotID, false, 0),
0); 0);
return;
} }
} }
} }
@ -5416,6 +5418,9 @@ void CArtifactsOfHero::artifactMoved(const ArtifactLocation &src, const Artifact
updateSlot(dst.slot); updateSlot(dst.slot);
if(src.hero == curHero || dst.hero == curHero) //we need to update all slots, artifact might be combined and affect more slots if(src.hero == curHero || dst.hero == curHero) //we need to update all slots, artifact might be combined and affect more slots
updateWornSlots(false); updateWornSlots(false);
if (src.hero != curHero && dst.hero != curHero)
return;
if(commonInfo->src == src) //artifact was taken from us if(commonInfo->src == src) //artifact was taken from us
{ {
@ -5454,7 +5459,9 @@ void CArtifactsOfHero::artifactMoved(const ArtifactLocation &src, const Artifact
updateParentWindow(); updateParentWindow();
} }
} }
else if(src.slot >= Arts::BACKPACK_START && src.slot < commonInfo->src.slotID && src.hero == commonInfo->src.AOH->curHero) //artifact taken from before currently picked one else if(src.slot >= Arts::BACKPACK_START &&
src.slot < commonInfo->src.slotID &&
src.hero == commonInfo->src.AOH->curHero) //artifact taken from before currently picked one
{ {
//int fixedSlot = src.hero->getArtPos(commonInfo->src.art); //int fixedSlot = src.hero->getArtPos(commonInfo->src.art);
commonInfo->src.slotID--; commonInfo->src.slotID--;
@ -5521,7 +5528,7 @@ void CArtifactsOfHero::artifactDisassembled(const ArtifactLocation &al)
void CArtifactsOfHero::updateWornSlots(bool redrawParent /*= true*/) void CArtifactsOfHero::updateWornSlots(bool redrawParent /*= true*/)
{ {
for(int i = 0; i < Arts::BACKPACK_START; i++) for(int i = 0; i < artWorn.size(); i++)
updateSlot(i); updateSlot(i);