void BattleResultsApplied::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(player1, battleResultsApplied); INTERFACE_CALL_IF_PRESENT(player2, battleResultsApplied); INTERFACE_CALL_IF_PRESENT(PlayerColor::UNFLAGGABLE, battleResultsApplied); if(GS(cl)->initialOpts->mode == StartInfo::DUEL) { handleQuit(); } }
void BattleResultsApplied::applyCl( CClient *cl ) { INTERFACE_CALL_IF_PRESENT(player1, battleResultsApplied); INTERFACE_CALL_IF_PRESENT(player2, battleResultsApplied); INTERFACE_CALL_IF_PRESENT(PlayerColor::UNFLAGGABLE, battleResultsApplied); if(GS(cl)->initialOpts->mode == StartInfo::DUEL) { cl->terminate = true; CloseServer cs; *cl->serv << &cs; } }
void SetObjectProperty::applyCl(CClient *cl) { //inform all players that see this object for(auto it = cl->playerint.cbegin(); it != cl->playerint.cend(); ++it) { if(GS(cl)->isVisible(GS(cl)->getObjInstance(id), it->first)) INTERFACE_CALL_IF_PRESENT(it->first, objectPropertyChanged, this); } }
void HeroVisitCastle::applyCl(CClient *cl) { const CGHeroInstance *h = cl->getHero(hid); if(start()) { INTERFACE_CALL_IF_PRESENT(h->tempOwner, heroVisitsTown, h, GS(cl)->getTown(tid)); } }
void SetSecSkill::applyCl(CClient *cl) { const CGHeroInstance *h = cl->getHero(id); if(!h) { logNetwork->errorStream() << "Cannot find hero with ID " << id; return; } INTERFACE_CALL_IF_PRESENT(h->tempOwner,heroSecondarySkillChanged,h,which,val); }
void RemoveBonus::applyCl(CClient *cl) { cl->invalidatePaths(); switch(who) { case HERO: { const CGHeroInstance *h = GS(cl)->getHero(ObjectInstanceID(id)); INTERFACE_CALL_IF_PRESENT(h->tempOwner, heroBonusChanged, h, bonus,false); } break; case PLAYER: { //const PlayerState *p = GS(cl)->getPlayer(id); INTERFACE_CALL_IF_PRESENT(PlayerColor(id), playerBonusChanged, bonus, false); } break; } }
void SetAvailableArtifacts::applyCl(CClient *cl) { if(id < 0) //artifact merchants globally { for(auto & elem : cl->playerint) elem.second->availableArtifactsChanged(nullptr); } else { const CGBlackMarket *bm = dynamic_cast<const CGBlackMarket *>(cl->getObj(ObjectInstanceID(id))); assert(bm); INTERFACE_CALL_IF_PRESENT(cl->getTile(bm->visitablePos())->visitableObjects.back()->tempOwner, availableArtifactsChanged, bm); } }
void SetAvailableCreatures::applyCl(CClient *cl) { const CGDwelling *dw = static_cast<const CGDwelling*>(cl->getObj(tid)); //inform order about the change PlayerColor p; if(dw->ID == Obj::WAR_MACHINE_FACTORY) //War Machines Factory is not flaggable, it's "owned" by visitor p = cl->getTile(dw->visitablePos())->visitableObjects.back()->tempOwner; else p = dw->tempOwner; INTERFACE_CALL_IF_PRESENT(p, availableCreaturesChanged, dw); }
void ExchangeDialog::applyCl(CClient *cl) { assert(heroes[0] && heroes[1]); INTERFACE_CALL_IF_PRESENT(heroes[0]->tempOwner, heroExchangeStarted, heroes[0]->id, heroes[1]->id, queryID); }
void SetMana::applyCl(CClient *cl) { const CGHeroInstance *h = cl->getHero(hid); INTERFACE_CALL_IF_PRESENT(h->tempOwner, heroManaPointsChanged, h); }
void SetStackType::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(sl.army->tempOwner, stackChangedType, sl, *type); }
void AdvmapSpellCast::applyCl(CClient *cl) { cl->invalidatePaths(); //consider notifying other interfaces that see hero? INTERFACE_CALL_IF_PRESENT(caster->getOwner(),advmapSpellCast, caster, spellID); }
void CenterView::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT (player, centerView, pos, focusTime); }
void EraseArtifact::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(al.owningPlayer(), artifactRemoved, al); }
void PlayerBlocked::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(player,playerBlocked,reason, startOrEnd==BLOCKADE_STARTED); }
void RebalanceStacks::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(src.army->tempOwner, stacksRebalanced, src, dst, count); if(src.army->tempOwner != dst.army->tempOwner) INTERFACE_CALL_IF_PRESENT(dst.army->tempOwner,stacksRebalanced, src, dst, count); }
void PutArtifact::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(al.owningPlayer(), artifactPut, al); }
void InsertNewStack::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(sl.army->tempOwner,newStackInserted,sl, *sl.getStack()); }
void SwapStacks::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(sl1.army->tempOwner, stacksSwapped, sl1, sl2); if(sl1.army->tempOwner != sl2.army->tempOwner) INTERFACE_CALL_IF_PRESENT(sl2.army->tempOwner, stacksSwapped, sl1, sl2); }
void EraseStack::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(sl.army->tempOwner, stacksErased, sl); }
void SetResource::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(player,receivedResource,resid,val); }
void SetResources::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(player,receivedResource,-1,-1); }
void PackageApplied::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(player, requestRealized, this); if(!cl->waitingRequest.tryRemovingElement(requestID)) logNetwork->warnStream() << "Surprising server message!"; }
void DisassembledArtifact::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(al.owningPlayer(), artifactDisassembled, al); }
void ShowInInfobox::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(player,showComp, c, text.toString()); }
void HeroVisit::applyCl(CClient *cl) { assert(hero); INTERFACE_CALL_IF_PRESENT(player, heroVisit, hero, obj, starting); }
void OpenWindow::applyCl(CClient *cl) { switch(window) { case RECRUITMENT_FIRST: case RECRUITMENT_ALL: { const CGDwelling *dw = dynamic_cast<const CGDwelling*>(cl->getObj(ObjectInstanceID(id1))); const CArmedInstance *dst = dynamic_cast<const CArmedInstance*>(cl->getObj(ObjectInstanceID(id2))); INTERFACE_CALL_IF_PRESENT(dst->tempOwner,showRecruitmentDialog, dw, dst, window == RECRUITMENT_FIRST ? 0 : -1); } break; case SHIPYARD_WINDOW: { const IShipyard *sy = IShipyard::castFrom(cl->getObj(ObjectInstanceID(id1))); INTERFACE_CALL_IF_PRESENT(sy->o->tempOwner, showShipyardDialog, sy); } break; case THIEVES_GUILD: { //displays Thieves' Guild window (when hero enters Den of Thieves) const CGObjectInstance *obj = cl->getObj(ObjectInstanceID(id2)); INTERFACE_CALL_IF_PRESENT(PlayerColor(id1), showThievesGuildWindow, obj); } break; case UNIVERSITY_WINDOW: { //displays University window (when hero enters University on adventure map) const IMarket *market = IMarket::castFrom(cl->getObj(ObjectInstanceID(id1))); const CGHeroInstance *hero = cl->getHero(ObjectInstanceID(id2)); INTERFACE_CALL_IF_PRESENT(hero->tempOwner,showUniversityWindow, market, hero); } break; case MARKET_WINDOW: { //displays Thieves' Guild window (when hero enters Den of Thieves) const CGObjectInstance *obj = cl->getObj(ObjectInstanceID(id1)); const CGHeroInstance *hero = cl->getHero(ObjectInstanceID(id2)); const IMarket *market = IMarket::castFrom(obj); INTERFACE_CALL_IF_PRESENT(cl->getTile(obj->visitablePos())->visitableObjects.back()->tempOwner, showMarketWindow, market, hero); } break; case HILL_FORT_WINDOW: { //displays Hill fort window const CGObjectInstance *obj = cl->getObj(ObjectInstanceID(id1)); const CGHeroInstance *hero = cl->getHero(ObjectInstanceID(id2)); INTERFACE_CALL_IF_PRESENT(cl->getTile(obj->visitablePos())->visitableObjects.back()->tempOwner, showHillFortWindow, obj, hero); } break; case PUZZLE_MAP: { INTERFACE_CALL_IF_PRESENT(PlayerColor(id1), showPuzzleMap); } break; case TAVERN_WINDOW: const CGObjectInstance *obj1 = cl->getObj(ObjectInstanceID(id1)), *obj2 = cl->getObj(ObjectInstanceID(id2)); INTERFACE_CALL_IF_PRESENT(obj1->tempOwner, showTavernWindow, obj2); break; } }
void SetMovePoints::applyCl(CClient *cl) { const CGHeroInstance *h = cl->getHero(hid); cl->invalidatePaths(); INTERFACE_CALL_IF_PRESENT(h->tempOwner, heroMovePointsChanged, h); }
void MoveArtifact::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(src.owningPlayer(), artifactMoved, src, dst); if(src.owningPlayer() != dst.owningPlayer()) INTERFACE_CALL_IF_PRESENT(dst.owningPlayer(), artifactMoved, src, dst); }
void ChangeStackCount::applyCl(CClient *cl) { INTERFACE_CALL_IF_PRESENT(sl.army->tempOwner, stackChagedCount, sl, count, absoluteValue); }