1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-07-03 00:46:55 +02:00

Properly check if corpse was visited

Fixes two issues:
- corpse without loot couldn't be marked as visited
- taking loot from once visitable objects marked them as visited for all players
This commit is contained in:
Piotr Wójcik
2016-09-16 20:59:07 +02:00
parent 7ec9601acd
commit 29d6fb0f04

View File

@ -317,16 +317,11 @@ bool CRewardableObject::wasVisited(PlayerColor player) const
case VISIT_UNLIMITED: case VISIT_UNLIMITED:
case VISIT_BONUS: case VISIT_BONUS:
return false; return false;
case VISIT_ONCE: // FIXME: hide this info deeper and return same as player? case VISIT_ONCE:
for (auto & visit : info)
{
if (visit.numOfGrants != 0)
return true;
}
case VISIT_HERO:
return false;
case VISIT_PLAYER: case VISIT_PLAYER:
return vstd::contains(cb->getPlayer(player)->visitedObjects, ObjectInstanceID(id)); return vstd::contains(cb->getPlayer(player)->visitedObjects, ObjectInstanceID(id));
case VISIT_HERO:
return false;
default: default:
return false; return false;
} }
@ -826,12 +821,16 @@ void CGOnceVisitable::initObj(CRandomGenerator & rand)
onEmpty.addTxt(MetaString::ADVOB_TXT, 38); onEmpty.addTxt(MetaString::ADVOB_TXT, 38);
soundID = soundBase::MYSTERY; soundID = soundBase::MYSTERY;
blockVisit = true; blockVisit = true;
info.resize(1);
if(rand.nextInt(99) < 20) if(rand.nextInt(99) < 20)
{ {
info.resize(1);
loadRandomArtifact(rand, info[0], 10, 10, 10, 0); loadRandomArtifact(rand, info[0], 10, 10, 10, 0);
info[0].message.addTxt(MetaString::ADVOB_TXT, 37); info[0].message.addTxt(MetaString::ADVOB_TXT, 37);
} }
else
{
info[0].message.addTxt(MetaString::ADVOB_TXT, 38);
}
} }
break; break;
case Obj::LEAN_TO: case Obj::LEAN_TO: