Code
274void CvDiplomacyRequests::ActivateNext()275{276 if (HasActiveRequest())277 return;278279 if (m_bRequestActiveFromPlayer == NO_PLAYER)280 return;281282 CvAssert(GC.getGame().getActivePlayer() == m_ePlayer);283 CvAssert(GET_PLAYER(m_ePlayer).isTurnActive());284285 RequestList::iterator requestIter;286 for (requestIter = m_aRequests.begin(); requestIter != m_aRequests.end(); ++requestIter)287 {288 if (requestIter->m_eFromPlayer == m_bRequestActiveFromPlayer)289 goto foundRequest;290 }291292 // no request found293 m_bRequestActiveFromPlayer = NO_PLAYER;294 return;295296foundRequest:297 static CvDeal kDeal;298 PlayerTypes eFrom = requestIter->m_eFromPlayer;299 300 // we remove the first proposed deal and use it as the scratch deal ...301 if (!(CvPreGame::isHuman(m_ePlayer) && CvPreGame::isHuman(eFrom)))302 {303 // ... but only for AI to human requests304 if (!GC.getGame().GetGameDeals()->RemoveProposedDeal(eFrom, m_ePlayer, &kDeal, false))305 {306 kDeal.ClearItems();307 }308 }309310 auto_ptr<ICvDeal1> pDeal = GC.WrapDealPointer(&kDeal);311 DLLUI->SetScratchDeal(pDeal.get());312313 if (requestIter->m_iLookupIndex >= 0)314 {315 // we had a notification: Cancel it316 GET_PLAYER(m_ePlayer).GetNotifications()->Dismiss(requestIter->m_iLookupIndex, false);317 }318319 // Send the request320 m_bRequestActive = true;321 DiploUIStateTypes eDiploType = requestIter->m_eDiploType;322 if (GET_PLAYER(requestIter->m_eFromPlayer).isHuman())323 {324 // disable leader root for human players (meeting, denouncing etc...)325 eDiploType = DIPLO_UI_STATE_BLANK_DISCUSSION;326 }327 m_bRequestActiveFromPlayer = eFrom;328 gDLL->GameplayDiplomacyAILeaderMessage(eFrom, eDiploType, requestIter->m_strMessage, requestIter->m_eAnimationType, requestIter->m_iExtraGameData);329 m_aRequests.erase(requestIter);330 //GC.GetEngineUserInterface()->setDirty(GameData_DIRTY_BIT, true);331}