瀏覽代碼

Fixed bug #71. Little redesign of town buildings handling.

DjWarmonger 16 年之前
父節點
當前提交
9792c64cbf
共有 3 個文件被更改,包括 13 次插入4 次删除
  1. 1 2
      hch/CObjectHandler.cpp
  2. 11 2
      server/CGameHandler.cpp
  3. 1 0
      server/CGameHandler.h

+ 1 - 2
hch/CObjectHandler.cpp

@@ -1561,9 +1561,8 @@ void CGTownInstance::onHeroVisit(const CGHeroInstance * h) const
 			cb->setOwner(id, h->tempOwner);
 		}
 	}
+	
 	cb->heroVisitCastle(id, h->id);
-	for (std::vector<CGTownBuilding*>::const_iterator i = bonusingBuildings.begin(); i != bonusingBuildings.end(); i++)
-		(*i)->onHeroVisit (h); //put it inside heroVisitCastle call, make sure *visitingHero is set
 }
 
 void CGTownInstance::onHeroLeave(const CGHeroInstance * h) const

+ 11 - 2
server/CGameHandler.cpp

@@ -1624,7 +1624,15 @@ void CGameHandler::heroVisitCastle(int obj, int heroID)
 	vc.tid = obj;
 	vc.flags |= 1;
 	sendAndApply(&vc);
-	giveSpells(getTown(obj),getHero(heroID));
+	vistiCastleObjects (getTown(obj), getHero(heroID));
+	giveSpells (getTown(obj), getHero(heroID));
+}
+
+void CGameHandler::vistiCastleObjects (const CGTownInstance *t, const CGHeroInstance *h)
+{
+	std::vector<CGTownBuilding*>::const_iterator i;
+	for (i = t->bonusingBuildings.begin(); i != t->bonusingBuildings.end(); i++)
+		(*i)->onHeroVisit (h);
 }
 
 void CGameHandler::stopHeroVisitCastle(int obj, int heroID)
@@ -2414,7 +2422,8 @@ bool CGameHandler::hireHero( ui32 tid, ui8 hid )
 	sr.val = gs->getPlayer(t->tempOwner)->resources[6] - 2500;
 	sendAndApply(&sr);
 
-	giveSpells(t,nh);
+	vistiCastleObjects (t, nh);
+	giveSpells (t,nh);
 	return true;
 }
 

+ 1 - 0
server/CGameHandler.h

@@ -123,6 +123,7 @@ public:
 	void giveCreatures (int objid, const CGHeroInstance * h, CCreatureSet creatures);
 	void showCompInfo(ShowInInfobox * comp);
 	void heroVisitCastle(int obj, int heroID);
+	void vistiCastleObjects (const CGTownInstance *t, const CGHeroInstance *h);
 	void stopHeroVisitCastle(int obj, int heroID);
 	void giveHeroArtifact(int artid, int hid, int position); //pos==-1 - first free slot in backpack; pos==-2 - default if available or backpack
 	void moveArtifact(int hid, int oldPosition, int destPos);