Hooks
static bool BeforeCvLeague_DoProposeRepeal(CvLeague* self, int iResolutionID, PlayerTypes eProposer);static void AfterCvLeague_DoProposeRepeal(CvLeague* self, int iResolutionID, PlayerTypes eProposer);static void ReplaceCvLeague_DoProposeRepeal(void (*original)(CvLeague*, int, PlayerTypes), CvLeague* self, int iResolutionID, PlayerTypes eProposer);CivRegisterBefore<CivHooks::CvLeague_DoProposeRepeal>(host, &BeforeCvLeague_DoProposeRepeal);CivRegisterAfter<CivHooks::CvLeague_DoProposeRepeal>(host, &AfterCvLeague_DoProposeRepeal);CivRegisterReplace<CivHooks::CvLeague_DoProposeRepeal>(host, &ReplaceCvLeague_DoProposeRepeal);
Code
2325void CvLeague::DoProposeRepeal(int iResolutionID, PlayerTypes eProposer)2326{2327 if (!CanProposeRepeal(iResolutionID, eProposer))2328 {2329 CvAssertMsg(false, "Attempt to propose repeal resolution when not allowed to. Please send Anton your save file and version.");2330 return;2331 }2332 2333 int iFound = 0;2334 for (ActiveResolutionList::iterator it = m_vActiveResolutions.begin(); it != m_vActiveResolutions.end(); it++)2335 {2336 if (it->GetID() == iResolutionID)2337 {2338 if (eProposer != NO_PLAYER)2339 {2340 // Decrement remaining proposals2341 if (IsMember(eProposer))2342 {2343 GetMember(eProposer)->iProposals = GetMember(eProposer)->iProposals - 1;2344 CvAssertMsg(GetMember(eProposer)->iProposals >= 0, "Attempt to propose enact resolution when not allowed to. Please send Anton your save file and version.");2345 }2346 else2347 {2348 CvAssertMsg(false, "Attempt to propose enact resolution when not allowed to. Please send Anton your save file and version.");2349 }23502351 // Proposals made by players could affect Diplomacy AI2352 LeagueHelpers::PlayerList vLikers = GetMembersThatLikeProposal(iResolutionID, eProposer);2353 for (LeagueHelpers::PlayerList::iterator innerIt = vLikers.begin(); innerIt != vLikers.end(); ++innerIt)2354 {2355 CvAssert((*innerIt) != NO_PLAYER);2356 CvAssert(CanEverVote(*innerIt));2357 GET_PLAYER(*innerIt).GetDiplomacyAI()->SetTurnsSinceWeLikedTheirProposal(eProposer, 0);2358 }2359 LeagueHelpers::PlayerList vDislikers = GetMembersThatDislikeProposal(iResolutionID, eProposer);2360 for (LeagueHelpers::PlayerList::iterator innerIt = vDislikers.begin(); innerIt != vDislikers.end(); ++innerIt)2361 {2362 CvAssert((*innerIt) != NO_PLAYER);2363 CvAssert(CanEverVote(*innerIt));2364 GET_PLAYER(*innerIt).GetDiplomacyAI()->SetTurnsSinceWeDislikedTheirProposal(eProposer, 0);2365 }2366 }23672368 CvRepealProposal proposal(it, eProposer);2369 m_vRepealProposals.push_back(proposal);2370 iFound++;23712372#if !defined(NO_ACHIEVEMENTS)2373 // XP2 Achievement2374 if (!GC.getGame().isGameMultiPlayer())2375 {2376 PlayerTypes eOriginalProposer = it->GetProposerDecision()->GetProposer();2377 if (eOriginalProposer != NO_PLAYER && eOriginalProposer == eProposer)2378 {2379 if (GET_PLAYER(eProposer).isHuman() && GET_PLAYER(eProposer).isLocalPlayer())2380 {2381 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_42);2382 }2383 }2384 }2385#endif2386 }23872388 }2389 CvAssertMsg(iFound == 1, "Unexpected number of active resolutions with this ID. Please send Anton your save file and version.");2390 GC.GetEngineUserInterface()->setDirty(LeagueScreen_DIRTY_BIT, true);2391}