mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-13 19:54:17 +02:00
Development build 0.89b
* Updated changelog * Some logging I did for #1066
This commit is contained in:
24
ChangeLog
24
ChangeLog
@@ -1,3 +1,27 @@
|
||||
0.89 -> 0.next
|
||||
GENERAL:
|
||||
* New filesystem allowing easier resource adding/replacing
|
||||
* Moved many hard-coded settings into text config files
|
||||
* Commander level-up dialog
|
||||
* New Quest Log window
|
||||
|
||||
BATTLES
|
||||
* New graphics for Stack Queue
|
||||
* Death Stare works identically to H3
|
||||
* No explosion when catapult fails to damage the wall
|
||||
* Fixed crash when attacking stack dies before counterattack
|
||||
* Fixed Orb of Inhibition and Recanter's Cloak (they were incorrectly implemented)
|
||||
* Fleeing hero won't lose artifacts.
|
||||
* Spellbook won't be captured.
|
||||
|
||||
|
||||
ADVENTURE AI
|
||||
* support for quests (Seer Huts, Quest Guardians, and so)
|
||||
* AI will now wander with all the heroes that have spare movement points. It should prevent stalling.
|
||||
* AI will now understand threat of Abandoned Mine.
|
||||
* AI can now exchange armies between heroes. By default, it will pass army to main hero.
|
||||
* Fixed strange case when AI found allied town extremely dangerous
|
||||
|
||||
0.88 -> 0.89 (Jun 01 2012)
|
||||
GENERAL
|
||||
* Mostly implemented Commanders feature (missing level-up dialog)
|
||||
|
@@ -1177,11 +1177,17 @@ void CPlayerInterface::serialize( CISer<CLoadFile> &h, const int version )
|
||||
|
||||
bool CPlayerInterface::moveHero( const CGHeroInstance *h, CGPath path )
|
||||
{
|
||||
tlog5 << __FUNCTION__ << std::endl;
|
||||
if(!LOCPLINT->makingTurn)
|
||||
return false;
|
||||
if (!h)
|
||||
return false; //can't find hero
|
||||
|
||||
//It shouldn't be possible to move hero with open dialog (or dialog waiting in bg)
|
||||
if(showingDialog->get() || dialogs.size())
|
||||
return false;
|
||||
|
||||
|
||||
if (adventureInt && adventureInt->isHeroSleeping(h))
|
||||
{
|
||||
adventureInt->sleepWake.clickLeft(true, false);
|
||||
@@ -1196,9 +1202,12 @@ bool CPlayerInterface::moveHero( const CGHeroInstance *h, CGPath path )
|
||||
{
|
||||
//evil...
|
||||
|
||||
tlog5 << "before [un]locks in " << __FUNCTION__ << std::endl;
|
||||
auto unlockEvents = vstd::makeUnlockGuard(eventsM);
|
||||
auto unlockGs = vstd::makeUnlockSharedGuard(cb->getGsMutex()); //GS mutex is above PIM because CClient::run thread first locks PIM and then GS -> so this way we avoid deadlocks
|
||||
auto unlockPim = vstd::makeUnlockGuard(*pim);
|
||||
tlog5 << "after [un]locks in " << __FUNCTION__ << std::endl;
|
||||
//TODO the above combination works... but it should all be atomic (unlock all three or none)
|
||||
|
||||
{
|
||||
path.convert(0);
|
||||
@@ -1246,11 +1255,13 @@ bool CPlayerInterface::moveHero( const CGHeroInstance *h, CGPath path )
|
||||
int3 endpos(path.nodes[i-1].coord.x, path.nodes[i-1].coord.y, h->pos.z);
|
||||
bool guarded = CGI->mh->map->isInTheMap(cb->guardingCreaturePosition(endpos - int3(1, 0, 0)));
|
||||
|
||||
tlog5 << "Requesting hero movement to " << endpos << std::endl;
|
||||
cb->moveHero(h,endpos);
|
||||
|
||||
while(stillMoveHero.data != STOP_MOVE && stillMoveHero.data != CONTINUE_MOVE)
|
||||
stillMoveHero.cond.wait(un);
|
||||
|
||||
tlog5 << "Resuming " << __FUNCTION__ << std::endl;
|
||||
if (guarded) // Abort movement if a guard was fought.
|
||||
break;
|
||||
}
|
||||
@@ -1336,7 +1347,7 @@ void CPlayerInterface::showArtifactAssemblyDialog (ui32 artifactID, ui32 assembl
|
||||
void CPlayerInterface::requestRealized( PackageApplied *pa )
|
||||
{
|
||||
EVENT_HANDLER_CALLED_BY_CLIENT;
|
||||
if(stillMoveHero.get() == DURING_MOVE)
|
||||
if(pa->packType == typeList.getTypeID<MoveHero>() && stillMoveHero.get() == DURING_MOVE)
|
||||
stillMoveHero.setn(CONTINUE_MOVE);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user