Города-государства - Civilization 5 / Цивилизация 5 - Strategium.ru Перейти к содержимому

Города-государства

Рекомендованные сообщения

Сидри

1) Есть какая-нибудь закономерность в количестве дружественных/нейтральных/враждебных/непредсказуемых ГГ при генерации карты, если есть, от чего это зависит?

2) Если ли закономерность в соотношении типов ГГ (военных, культурных и т.д.)?

3) Может где-то есть информация, сколько, чего и в какие эпохи дают дружественные/союзные ГГ, подскажите ссылку.

4) Зависит ли тип юнита, выдаваемого военным ГГ, от наций на карте? Например, попадалось ли вам такое, что при игре за Россию какой-нить ГГ дарил вам Казаков или аналогичные ситуации? Может ли ГГ подарить уникального юнита, нация которого присутствует на карте?

Ссылка на комментарий

Закреплённые сообщения
universum221

Что касается 1 и 2 с 99% что случайно так как играл много дуэли на малой карте и там ГГ всё время генерировались по разному, то всех по одному, то все 4 одного типа.

Что касается 4 могу сказать только ту инфу что в недавней игре мне гг выдал испанских пикинёров которых в последствии нельзя было бафнуть.

Что касается 3 ну этого негде не видел. Было бы интересно глянуть. Если кто найдёт выложите инфу.

Ссылка на комментарий

Kronic

По третьему пункту нашел код дарения бонус от типа ГГ. Сколько еды, сколько культуры, как и какие юниты даются и т.д. Тебя это интересует? Или подарки в качестве ВЛ и ресурсов?

Ссылка на комментарий

Сидри
По третьему пункту нашел код дарения бонус от типа ГГ. Сколько еды, сколько культуры, как и какие юниты даются и т.д. Тебя это интересует? Или подарки в качестве ВЛ и ресурсов?

меня и то, и другое интересует, а также коэффициенты скорости и размера карты

Ссылка на комментарий

Tar-Palantir
1) Есть какая-нибудь закономерность в количестве дружественных/нейтральных/враждебных/непредсказуемых ГГ при генерации карты

А что оно вообще означает. Что такое военные, торговые и культурные ГГ я понимаю, а вот на что влияет этот параметр - пока нет.

Ссылка на комментарий

Сидри
А что оно вообще означает. Что такое военные, торговые и культурные ГГ я понимаю, а вот на что влияет этот параметр - пока нет.

это означает, насколько быстро снижается твое влияние на них при союзе и какие задания дают. Если у нормального ГГ снижается влияние на стандартной скорости на -1 в ход, то у дружелюбного на -0,5, а у враждебного на -2

Ссылка на комментарий

Tar-Palantir
это означает, насколько быстро снижается твое влияние на них при союзе и какие задания дают. Если у нормального ГГ снижается влияние на стандартной скорости на -1 в ход, то у дружелюбного на -0,5, а у враждебного на -2

А у непредсказуемого как Бог на душу положит? :)

Ссылка на комментарий

Сидри
А у непредсказуемого как Бог на душу положит? :)

угу, примерно так. У него с каким-то периодом отношение к тебе меняется )

Ссылка на комментарий

Сидри
По третьему пункту нашел код дарения бонус от типа ГГ. Сколько еды, сколько культуры, как и какие юниты даются и т.д. Тебя это интересует? Или подарки в качестве ВЛ и ресурсов?

выложишь код-то?

Ссылка на комментарий

Kronic

Код получение бонусов от ГГНажмите здесь!
 
/// Sets a major to get a Bonus (or not) - set both bFriends and bAllies to be true if you're adding/removing both states at once
void CvMinorCivAI::DoSetBonus(PlayerTypes ePlayer, bool bAdd, bool bFriends, bool bAllies, bool bSuppressNotifications, bool bPassedBySomeone, PlayerTypes eNewAlly)
{
MinorCivTraitTypes eTrait = GetTrait();

// Cultured
if(eTrait == MINOR_CIV_TRAIT_CULTURED)
{
}
// Militaristic
else if(eTrait == MINOR_CIV_TRAIT_MILITARISTIC)
{
	if(bAdd)
	{
		// Seed Counter if it hasn't been done yet in this game. We don't have to undo this at any point because the counter is not processed if we are no longer Friends
		if(GetUnitSpawnCounter(ePlayer) == -1)
			DoSeedUnitSpawnCounter(ePlayer, /*bBias*/ true);
	}
}
// Maritime
else if(eTrait == MINOR_CIV_TRAIT_MARITIME)
{
	int iCapitalFoodTimes100 = 0;
	int iOtherCitiesFoodTimes100 = 0;

	if(bFriends)	// Friends bonus
	{
		iCapitalFoodTimes100 += GetFriendsCapitalFoodBonus(ePlayer);
		iOtherCitiesFoodTimes100 += GetFriendsOtherCityFoodBonus(ePlayer);
	}
	if(bAllies)		// Allies bonus
	{
		iCapitalFoodTimes100 += GetAlliesCapitalFoodBonus(ePlayer);
		iOtherCitiesFoodTimes100 += GetAlliesOtherCityFoodBonus(ePlayer);
	}

	if(!bAdd)		// Flip amount of we're taking bonuses away
	{
		iCapitalFoodTimes100 = -iCapitalFoodTimes100;
		iOtherCitiesFoodTimes100 = -iOtherCitiesFoodTimes100;
	}

	GET_PLAYER(ePlayer).ChangeCapitalYieldChange(YIELD_FOOD, iCapitalFoodTimes100);
	GET_PLAYER(ePlayer).ChangeCityYieldChange(YIELD_FOOD, iOtherCitiesFoodTimes100);
}
// Mercantile
else if(eTrait == MINOR_CIV_TRAIT_MERCANTILE)
{
	GET_PLAYER(ePlayer).DoUpdateHappiness();
}
// Religious
if(eTrait == MINOR_CIV_TRAIT_RELIGIOUS)
{
}

if(ePlayer == GC.getGame().getActivePlayer())
{
	gDLL->getInterfaceIFace()->setDirty(GameData_DIRTY_BIT, true);
}

CvString strDetailedInfo = GetStatusChangeDetails(ePlayer, bAdd, bFriends, bAllies);

PlayerTypes eOldAlly = GetAlly();
TeamTypes eOldAllyTeam = eOldAlly != NO_PLAYER ? GET_PLAYER(eOldAlly).getTeam() : NO_TEAM;

// Should we remove the Ally bonus from another player?
if(bAdd && bAllies)
{
	if(eOldAlly != NO_PLAYER && ePlayer != eOldAlly)
	{
		DoSetBonus(eOldAlly, /*bAdd*/ false, /*bFriends*/ false, /*bAllies*/ true, /*bSuppressNotifications*/ false, /*bPassedBySomeone*/ true, ePlayer);
	}
}

// *******************************************
// NOTIFICATIONS FOR THIS PLAYER
// *******************************************
Дальше идет функционал по сообщениям. Не интересно.
}

[Cкрыть]

Вспомогательные методы.

DoSeedUnitSpawnCounterНажмите здесь!
 
// Figures out how long before we spawn a free unit for ePlayer
void CvMinorCivAI::DoSeedUnitSpawnCounter(PlayerTypes ePlayer, bool bBias)
{
CvAssertMsg(ePlayer >= 0, "ePlayer is expected to be non-negative (invalid Index)");
CvAssertMsg(ePlayer < MAX_MAJOR_CIVS, "ePlayer is expected to be within maximum bounds (invalid Index)");

int iNumTurns = /*19*/ GC.getFRIENDS_BASE_TURNS_UNIT_SPAWN();

// If relations are at allied level then reduce spawn counter
if(IsAllies(ePlayer))
	iNumTurns += /*-3*/ GC.getALLIES_EXTRA_TURNS_UNIT_SPAWN();

int iRand = /*3*/ GC.getFRIENDS_RAND_TURNS_UNIT_SPAWN();
iNumTurns += GC.getGame().getJonRandNum(iRand, "Rand turns for Friendly Minor unit spawn");

// If we're biasing the result then decrease the number of turns
if(bBias)
{
	iNumTurns *= /*50*/ GC.getUNIT_SPAWN_BIAS_MULTIPLIER();
	iNumTurns /= 100;
}

// Modify for Game Speed
iNumTurns *= GC.getGame().getGameSpeedInfo().getGreatPeoplePercent();
iNumTurns /= 100;

// Modify for policies
CvPlayer& kPlayer = GET_PLAYER(ePlayer);
int iPolicyMod = kPlayer.GetPlayerPolicies()->GetNumericModifier(POLICYMOD_UNIT_FREQUENCY_MODIFIER);
if(iPolicyMod > 0)
{
	if(GET_TEAM(kPlayer.getTeam()).HasCommonEnemy(m_pPlayer->getTeam()))
	{
		iNumTurns *= 100;
		iNumTurns /= (100 + iPolicyMod);
	}
}

SetUnitSpawnCounter(ePlayer, iNumTurns);
}

[Cкрыть]

GetFriendsCapitalFoodBonusНажмите здесь!
 
// Food bonus when Friends with a minor - additive with general city bonus
int CvMinorCivAI::GetFriendsCapitalFoodBonus(PlayerTypes ePlayer, EraTypes eAssumeEra)
{
int iBonus;

EraTypes eCurrentEra = eAssumeEra;
if(eCurrentEra == NO_ERA)
	eCurrentEra = GET_TEAM(GET_PLAYER(ePlayer).getTeam()).GetCurrentEra();

EraTypes eRenaissance = (EraTypes) GC.getInfoTypeForString("ERA_RENAISSANCE", true);

// Medieval era or sooner
if(eCurrentEra < eRenaissance)
	iBonus = /*200*/ GC.getFRIENDS_CAPITAL_FOOD_BONUS_AMOUNT_PRE_RENAISSANCE();

// Renaissance era or later
else
	iBonus = /*200*/ GC.getFRIENDS_CAPITAL_FOOD_BONUS_AMOUNT_POST_RENAISSANCE();

// Modify the bonus if called for by our trait
int iModifier = GET_PLAYER(ePlayer).GetPlayerTraits()->GetCityStateBonusModifier();
if(iModifier > 0)
{
	iBonus *= (iModifier + 100);
	iBonus /= 100;
}

return iBonus;
}

[Cкрыть]

GetFriendsOtherCityFoodBonusНажмите здесь!
 
// Food bonus when Friends with a minor
int CvMinorCivAI::GetFriendsOtherCityFoodBonus(PlayerTypes ePlayer, EraTypes eAssumeEra)
{
int iBonus;

EraTypes eCurrentEra = eAssumeEra;
if(eCurrentEra == NO_ERA)
	eCurrentEra = GET_TEAM(GET_PLAYER(ePlayer).getTeam()).GetCurrentEra();

EraTypes eRenaissance = (EraTypes) GC.getInfoTypeForString("ERA_RENAISSANCE", true);

// Medieval era or sooner
if(eCurrentEra < eRenaissance)
	iBonus = /*0*/ GC.getFRIENDS_OTHER_CITIES_FOOD_BONUS_AMOUNT_PRE_RENAISSANCE();

// Renaissance era or later
else
	iBonus = /*0*/ GC.getFRIENDS_OTHER_CITIES_FOOD_BONUS_AMOUNT_POST_RENAISSANCE();

// Modify the bonus if called for by our trait
int iModifier = GET_PLAYER(ePlayer).GetPlayerTraits()->GetCityStateBonusModifier();
if(iModifier > 0)
{
	iBonus *= (iModifier + 100);
	iBonus /= 100;
}

return iBonus;
}

[Cкрыть]

GetAlliesCapitalFoodBonusНажмите здесь!
 
// Food bonus when Allies with a minor - additive with general city bonus
int CvMinorCivAI::GetAlliesCapitalFoodBonus(PlayerTypes ePlayer)
{
int iBonus = /*100*/ GC.getALLIES_CAPITAL_FOOD_BONUS_AMOUNT();

// Modify the bonus if called for by our trait
int iModifier = GET_PLAYER(ePlayer).GetPlayerTraits()->GetCityStateBonusModifier();
if(iModifier > 0)
{
	iBonus *= (iModifier + 100);
	iBonus /= 100;
}

return iBonus;
}

[Cкрыть]

GetAlliesOtherCityFoodBonusНажмите здесь!
 
// Food bonus when Allies with a minor
int CvMinorCivAI::GetAlliesOtherCityFoodBonus(PlayerTypes ePlayer)
{
int iBonus = /*100*/ GC.getALLIES_OTHER_CITIES_FOOD_BONUS_AMOUNT();

// Modify the bonus if called for by our trait
int iModifier = GET_PLAYER(ePlayer).GetPlayerTraits()->GetCityStateBonusModifier();
if(iModifier > 0)
{
	iBonus *= (iModifier + 100);
	iBonus /= 100;
}

return iBonus;
}

[Cкрыть]

DoUpdateHappinessНажмите здесь!
 
/// Updates how much Happiness we have
void CvPlayer::DoUpdateHappiness()
{
// Start level
m_iHappiness = getHandicapInfo().getHappinessDefault();

// Increase from Luxury Resources
int iNumHappinessFromResources = GetHappinessFromResources();
m_iHappiness += iNumHappinessFromResources;

// Increase from Local City Happiness
m_iHappiness += GetHappinessFromCities();

// Increase from buildings
m_iHappiness += GetHappinessFromBuildings();

// Increase from policies
m_iHappiness += GetHappinessFromPolicies();

// Increase from num cities (player based, for buildings and such)
m_iHappiness += getNumCities() * m_iHappinessPerCity;

// Increase from Religion
m_iHappiness += GetHappinessFromReligion();

// Increase from Natural Wonders
m_iHappiness += GetHappinessFromNaturalWonders();

// Friendship with Minors can provide Happiness
m_iHappiness += GetHappinessFromMinorCivs();

// Increase for each City connected to Capital with a Trade Route
DoUpdateCityConnectionHappiness();
m_iHappiness += GetHappinessFromTradeRoutes();

gDLL->getInterfaceIFace()->setDirty(GameData_DIRTY_BIT, true);
}

[Cкрыть]

GetStatusChangeDetailsНажмите здесь!
 
CvString CvMinorCivAI::GetStatusChangeDetails(PlayerTypes ePlayer, bool bAdd, bool bFriends, bool bAllies)
{
Localization::String strDetailedInfo;

MinorCivTraitTypes eTrait = GetTrait();

if(eTrait == MINOR_CIV_TRAIT_CULTURED)
{
	int iCultureBonusAmount = 0;
	if (bFriends)
	{
		iCultureBonusAmount += GetCultureFlatFriendshipBonus(ePlayer) + GetCulturePerBuildingFriendshipBonus(ePlayer);
	}
	if (bAllies)
	{
		iCultureBonusAmount += GetCultureFlatAlliesBonus(ePlayer) + GetCulturePerBuildingAlliesBonus(ePlayer);
	}
	if (!bAdd)
	{
		iCultureBonusAmount = -iCultureBonusAmount;
	}

	if(bAllies && bAdd)		// Now Allies (includes jump from nothing through Friends to Allies)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_ALLIES_CULTURE");
		strDetailedInfo << iCultureBonusAmount;
	}
	else if(bFriends && bAdd)		// Now Friends
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_FRIENDS_CULTURE");
		strDetailedInfo << iCultureBonusAmount;
	}
	else if(!bAdd)		// Bonus diminished (or removed)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_CULTURE");
		strDetailedInfo << iCultureBonusAmount;
	}
}
else if(eTrait == MINOR_CIV_TRAIT_MILITARISTIC)
{
	if(bAllies && bAdd)		// Now Allies (includes jump from nothing through Friends to Allies)
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_ALLIES_MILITARISTIC");
	else if(bFriends && bAdd)		// Now Friends
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_FRIENDS_MILITARISTIC");
	else if(bFriends && !bAdd)		// No longer Friends (includes drop from Allies down to nothing) - this should be before the Allies check!
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_FRIENDS_MILITARISTIC");
	else if(bAllies && !bAdd)		// No longer Allies
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_ALLIES_MILITARISTIC");
}
else if(eTrait == MINOR_CIV_TRAIT_MARITIME)
{
	int iCapitalFoodTimes100 = 0;
	int iOtherCitiesFoodTimes100 = 0;

	if(bFriends)	// Friends bonus
	{
		iCapitalFoodTimes100 += GetFriendsCapitalFoodBonus(ePlayer);
		iOtherCitiesFoodTimes100 += GetFriendsOtherCityFoodBonus(ePlayer);
	}
	if(bAllies)		// Allies bonus
	{
		iCapitalFoodTimes100 += GetAlliesCapitalFoodBonus(ePlayer);
		iOtherCitiesFoodTimes100 += GetAlliesOtherCityFoodBonus(ePlayer);
	}

	if(!bAdd)		// Flip amount of we're taking bonuses away
	{
		iCapitalFoodTimes100 = -iCapitalFoodTimes100;
		iOtherCitiesFoodTimes100 = -iOtherCitiesFoodTimes100;
	}

	// Now that we've changed the gameplay, add together the two so the DISPLAY looks right
	iCapitalFoodTimes100 += iOtherCitiesFoodTimes100;
	float fCapitalFood = float(iCapitalFoodTimes100) / 100;
	float fOtherCitiesFood = float(iOtherCitiesFoodTimes100) / 100;
	//iCapitalFood += iOtherCitiesFood;

	if(bAllies && bAdd)		// Now Allies (includes jump from nothing through Friends to Allies)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_ALLIES_MARITIME");
		strDetailedInfo << fCapitalFood << fOtherCitiesFood;
	}
	else if(bFriends && bAdd)		// Now Friends
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_FRIENDS_MARITIME");
		strDetailedInfo << fCapitalFood << fOtherCitiesFood;
	}
	else if(!bAdd)		// Bonus diminished (or removed)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_MARITIME");
		strDetailedInfo << fCapitalFood << fOtherCitiesFood;
	}
}
else if(eTrait == MINOR_CIV_TRAIT_MERCANTILE)
{
	int iHappinessBonus = 0;

	if(bFriends)	// Friends bonus
	{
		iHappinessBonus += GetHappinessFlatFriendshipBonus(ePlayer) + GetHappinessPerLuxuryFriendshipBonus(ePlayer);
	}
	if(bAllies)		// Allies bonus
	{
		iHappinessBonus += GetHappinessFlatAlliesBonus(ePlayer) + GetHappinessPerLuxuryAlliesBonus(ePlayer);
	}
	if(!bAdd)		// Flip amount of we're taking bonuses away
	{
		iHappinessBonus = -iHappinessBonus;
	}

	if(bAllies && bAdd)		// Now Allies (includes jump from nothing through Friends to Allies)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_ALLIES_MERCANTILE");
		strDetailedInfo << iHappinessBonus;
	}
	else if(bFriends && bAdd)		// Now Friends
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_FRIENDS_MERCANTILE");
		strDetailedInfo << iHappinessBonus;
	}
	else if(!bAdd)		// Bonus diminished (or removed)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_MERCANTILE");
		strDetailedInfo << iHappinessBonus;
	}
}

// Religious
if(eTrait == MINOR_CIV_TRAIT_RELIGIOUS)
{
	int iFaithBonusAmount = 0;
	if (bFriends)
	{
		iFaithBonusAmount += GetFaithFlatFriendshipBonus(ePlayer);
	}
	if (bAllies)
	{
		iFaithBonusAmount += GetFaithFlatAlliesBonus(ePlayer);
	}
	if (!bAdd)
	{
		iFaithBonusAmount = -iFaithBonusAmount;
	}

	if(bAllies && bAdd)		// Now Allies (includes jump from nothing through Friends to Allies)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_ALLIES_RELIGIOUS");
		strDetailedInfo << iFaithBonusAmount;
	}
	else if(bFriends && bAdd)		// Now Friends
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_FRIENDS_RELIGIOUS");
		strDetailedInfo << iFaithBonusAmount;
	}
	else if(!bAdd)		// Bonus diminished (or removed)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_RELIGIOUS");
		strDetailedInfo << iFaithBonusAmount;
	}
}

return strDetailedInfo.toUTF8();
}

[Cкрыть]

DoSetBonusНажмите здесь!
 
/// Sets a major to get a Bonus (or not) - set both bFriends and bAllies to be true if you're adding/removing both states at once
void CvMinorCivAI::DoSetBonus(PlayerTypes ePlayer, bool bAdd, bool bFriends, bool bAllies, bool bSuppressNotifications, bool bPassedBySomeone, PlayerTypes eNewAlly)
{
MinorCivTraitTypes eTrait = GetTrait();

// Cultured
if(eTrait == MINOR_CIV_TRAIT_CULTURED)
{
}
// Militaristic
else if(eTrait == MINOR_CIV_TRAIT_MILITARISTIC)
{
	if(bAdd)
	{
		// Seed Counter if it hasn't been done yet in this game. We don't have to undo this at any point because the counter is not processed if we are no longer Friends
		if(GetUnitSpawnCounter(ePlayer) == -1)
			DoSeedUnitSpawnCounter(ePlayer, /*bBias*/ true);
	}
}
// Maritime
else if(eTrait == MINOR_CIV_TRAIT_MARITIME)
{
	int iCapitalFoodTimes100 = 0;
	int iOtherCitiesFoodTimes100 = 0;

	if(bFriends)	// Friends bonus
	{
		iCapitalFoodTimes100 += GetFriendsCapitalFoodBonus(ePlayer);
		iOtherCitiesFoodTimes100 += GetFriendsOtherCityFoodBonus(ePlayer);
	}
	if(bAllies)		// Allies bonus
	{
		iCapitalFoodTimes100 += GetAlliesCapitalFoodBonus(ePlayer);
		iOtherCitiesFoodTimes100 += GetAlliesOtherCityFoodBonus(ePlayer);
	}

	if(!bAdd)		// Flip amount of we're taking bonuses away
	{
		iCapitalFoodTimes100 = -iCapitalFoodTimes100;
		iOtherCitiesFoodTimes100 = -iOtherCitiesFoodTimes100;
	}

	GET_PLAYER(ePlayer).ChangeCapitalYieldChange(YIELD_FOOD, iCapitalFoodTimes100);
	GET_PLAYER(ePlayer).ChangeCityYieldChange(YIELD_FOOD, iOtherCitiesFoodTimes100);
}
// Mercantile
else if(eTrait == MINOR_CIV_TRAIT_MERCANTILE)
{
	GET_PLAYER(ePlayer).DoUpdateHappiness();
}
// Religious
if(eTrait == MINOR_CIV_TRAIT_RELIGIOUS)
{
}

if(ePlayer == GC.getGame().getActivePlayer())
{
	gDLL->getInterfaceIFace()->setDirty(GameData_DIRTY_BIT, true);
}

CvString strDetailedInfo = GetStatusChangeDetails(ePlayer, bAdd, bFriends, bAllies);

PlayerTypes eOldAlly = GetAlly();
TeamTypes eOldAllyTeam = eOldAlly != NO_PLAYER ? GET_PLAYER(eOldAlly).getTeam() : NO_TEAM;

// Should we remove the Ally bonus from another player?
if(bAdd && bAllies)
{
	if(eOldAlly != NO_PLAYER && ePlayer != eOldAlly)
	{
		DoSetBonus(eOldAlly, /*bAdd*/ false, /*bFriends*/ false, /*bAllies*/ true, /*bSuppressNotifications*/ false, /*bPassedBySomeone*/ true, ePlayer);
	}
}

// *******************************************
// NOTIFICATIONS FOR THIS PLAYER
// *******************************************
// We're not displaying notifications at all
if (IsDisableNotifications())
{
	return;
}

if (!bSuppressNotifications)
{
	pair<CvString, CvString> notifStrings = GetStatusChangeNotificationStrings(ePlayer, bAdd, bFriends, bAllies, eOldAlly, (bAdd && bAllies) ? ePlayer : eNewAlly);
	AddNotification(notifStrings.first, notifStrings.second, ePlayer);
}

// *******************************************
// NOTIFICATIONS FOR OTHER PLAYERS IN THE GAME
// *******************************************
тут тоже дальше не интересно

}

[Cкрыть]
Ссылка на комментарий

Kronic
А для непосвященных можно языком попроще вышенаписанное объяснить? :blush:

Конечно можно - там всё сложно :D

Ссылка на комментарий

Сидри

Прочёл, но ничего не понял. По-моему каких-то данных не хватает.

Например, в блоке GetFriendsCapitalFoodBonus есть строчка

iBonus = /*200*/ GC.getFRIENDS_CAPITAL_FOOD_BONUS_AMOUNT_PRE_RENAISSANCE();

то есть значение бонуса равно 200% от стартового значения бонуса предренессанса. Но само значение GC.getFRIENDS_CAPITAL_FOOD_BONUS_AMOUNT_PRE_RENAISSANCE должно же быть где-то указано?

Ссылка на комментарий

Kronic
Прочёл, но ничего не понял. По-моему каких-то данных не хватает.

Например, в блоке GetFriendsCapitalFoodBonus есть строчка

iBonus = /*200*/ GC.getFRIENDS_CAPITAL_FOOD_BONUS_AMOUNT_PRE_RENAISSANCE();

то есть значение бонуса равно 200% от стартового значения бонуса предренессанса. Но само значение GC.getFRIENDS_CAPITAL_FOOD_BONUS_AMOUNT_PRE_RENAISSANCE должно же быть где-то указано?

Обычно такие записи как GC.getFRIENDS_CAPITAL_FOOD_BONUS_AMOUNT_PRE_RENAISSANCE() означают считывание параметров из ХML

В данном случае это означает параметр FRIENDS_CAPITAL_FOOD_BONUS_AMOUNT_PRE_RENAISSANCE в файле SteamApps\common\Sid Meier's Civilization V\Assets\Gameplay\XML\AI\GlobalAIDefines.xml

<Row Name="FRIENDS_CAPITAL_FOOD_BONUS_AMOUNT_PRE_RENAISSANCE">
<Value>200</Value>
</Row>

/*200*/ как раз означает значение по умолчанию. Это так разработчики себе облегчили жизнь, чтобы меньше лазить по файлам.

Ссылка на комментарий

Сидри

то есть /*200*/ означает 2 еды? А как тогда выглядит такой же код для культуры и счастья?

Ссылка на комментарий

Kronic
то есть /*200*/ означает 2 еды? А как тогда выглядит такой же код для культуры и счастья?

Да. Это без модификатора.

Для счастья есть блок DoUpdateHappiness

Для культуры сейчас посмотрю код.

Ссылка на комментарий

Kronic

По культуре нашел в другом методе GetStatusChangeDetails

GetStatusChangeDetailsНажмите здесь!
 
CvString CvMinorCivAI::GetStatusChangeDetails(PlayerTypes ePlayer, bool bAdd, bool bFriends, bool bAllies)
{
Localization::String strDetailedInfo;

MinorCivTraitTypes eTrait = GetTrait();

if(eTrait == MINOR_CIV_TRAIT_CULTURED)
{
	int iCultureBonusAmount = 0;
	if (bFriends)
	{
		iCultureBonusAmount += GetCultureFlatFriendshipBonus(ePlayer) + GetCulturePerBuildingFriendshipBonus(ePlayer);
	}
	if (bAllies)
	{
		iCultureBonusAmount += GetCultureFlatAlliesBonus(ePlayer) + GetCulturePerBuildingAlliesBonus(ePlayer);
	}
	if (!bAdd)
	{
		iCultureBonusAmount = -iCultureBonusAmount;
	}

	if(bAllies && bAdd)		// Now Allies (includes jump from nothing through Friends to Allies)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_ALLIES_CULTURE");
		strDetailedInfo << iCultureBonusAmount;
	}
	else if(bFriends && bAdd)		// Now Friends
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_FRIENDS_CULTURE");
		strDetailedInfo << iCultureBonusAmount;
	}
	else if(!bAdd)		// Bonus diminished (or removed)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_CULTURE");
		strDetailedInfo << iCultureBonusAmount;
	}
}
else if(eTrait == MINOR_CIV_TRAIT_MILITARISTIC)
{
	if(bAllies && bAdd)		// Now Allies (includes jump from nothing through Friends to Allies)
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_ALLIES_MILITARISTIC");
	else if(bFriends && bAdd)		// Now Friends
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_FRIENDS_MILITARISTIC");
	else if(bFriends && !bAdd)		// No longer Friends (includes drop from Allies down to nothing) - this should be before the Allies check!
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_FRIENDS_MILITARISTIC");
	else if(bAllies && !bAdd)		// No longer Allies
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_ALLIES_MILITARISTIC");
}
else if(eTrait == MINOR_CIV_TRAIT_MARITIME)
{
	int iCapitalFoodTimes100 = 0;
	int iOtherCitiesFoodTimes100 = 0;

	if(bFriends)	// Friends bonus
	{
		iCapitalFoodTimes100 += GetFriendsCapitalFoodBonus(ePlayer);
		iOtherCitiesFoodTimes100 += GetFriendsOtherCityFoodBonus(ePlayer);
	}
	if(bAllies)		// Allies bonus
	{
		iCapitalFoodTimes100 += GetAlliesCapitalFoodBonus(ePlayer);
		iOtherCitiesFoodTimes100 += GetAlliesOtherCityFoodBonus(ePlayer);
	}

	if(!bAdd)		// Flip amount of we're taking bonuses away
	{
		iCapitalFoodTimes100 = -iCapitalFoodTimes100;
		iOtherCitiesFoodTimes100 = -iOtherCitiesFoodTimes100;
	}

	// Now that we've changed the gameplay, add together the two so the DISPLAY looks right
	iCapitalFoodTimes100 += iOtherCitiesFoodTimes100;
	float fCapitalFood = float(iCapitalFoodTimes100) / 100;
	float fOtherCitiesFood = float(iOtherCitiesFoodTimes100) / 100;
	//iCapitalFood += iOtherCitiesFood;

	if(bAllies && bAdd)		// Now Allies (includes jump from nothing through Friends to Allies)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_ALLIES_MARITIME");
		strDetailedInfo << fCapitalFood << fOtherCitiesFood;
	}
	else if(bFriends && bAdd)		// Now Friends
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_FRIENDS_MARITIME");
		strDetailedInfo << fCapitalFood << fOtherCitiesFood;
	}
	else if(!bAdd)		// Bonus diminished (or removed)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_MARITIME");
		strDetailedInfo << fCapitalFood << fOtherCitiesFood;
	}
}
else if(eTrait == MINOR_CIV_TRAIT_MERCANTILE)
{
	int iHappinessBonus = 0;

	if(bFriends)	// Friends bonus
	{
		iHappinessBonus += GetHappinessFlatFriendshipBonus(ePlayer) + GetHappinessPerLuxuryFriendshipBonus(ePlayer);
	}
	if(bAllies)		// Allies bonus
	{
		iHappinessBonus += GetHappinessFlatAlliesBonus(ePlayer) + GetHappinessPerLuxuryAlliesBonus(ePlayer);
	}
	if(!bAdd)		// Flip amount of we're taking bonuses away
	{
		iHappinessBonus = -iHappinessBonus;
	}

	if(bAllies && bAdd)		// Now Allies (includes jump from nothing through Friends to Allies)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_ALLIES_MERCANTILE");
		strDetailedInfo << iHappinessBonus;
	}
	else if(bFriends && bAdd)		// Now Friends
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_FRIENDS_MERCANTILE");
		strDetailedInfo << iHappinessBonus;
	}
	else if(!bAdd)		// Bonus diminished (or removed)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_MERCANTILE");
		strDetailedInfo << iHappinessBonus;
	}
}

// Religious
if(eTrait == MINOR_CIV_TRAIT_RELIGIOUS)
{
	int iFaithBonusAmount = 0;
	if (bFriends)
	{
		iFaithBonusAmount += GetFaithFlatFriendshipBonus(ePlayer);
	}
	if (bAllies)
	{
		iFaithBonusAmount += GetFaithFlatAlliesBonus(ePlayer);
	}
	if (!bAdd)
	{
		iFaithBonusAmount = -iFaithBonusAmount;
	}

	if(bAllies && bAdd)		// Now Allies (includes jump from nothing through Friends to Allies)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_ALLIES_RELIGIOUS");
		strDetailedInfo << iFaithBonusAmount;
	}
	else if(bFriends && bAdd)		// Now Friends
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_NOW_FRIENDS_RELIGIOUS");
		strDetailedInfo << iFaithBonusAmount;
	}
	else if(!bAdd)		// Bonus diminished (or removed)
	{
		strDetailedInfo = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_LOST_RELIGIOUS");
		strDetailedInfo << iFaithBonusAmount;
	}
}

return strDetailedInfo.toUTF8();
}

[Cкрыть]

вот расшифровка методов по культуре.

GetCultureFlatFriendshipBonusНажмите здесь!
 
// Flat culture bonus when Friends with a minor
int CvMinorCivAI::GetCultureFlatFriendshipBonus(PlayerTypes ePlayer, EraTypes eAssumeEra)
{
//antonjs: consider: here it was assumed that this CS is cultured type, which is nice for me prototyping, but later maybe add in a check for this
int iCultureBonus = 0;

EraTypes eCurrentEra = eAssumeEra;
if(eCurrentEra == NO_ERA)
	eCurrentEra = GET_TEAM(GET_PLAYER(ePlayer).getTeam()).GetCurrentEra();

EraTypes eIndustrial = (EraTypes) GC.getInfoTypeForString("ERA_INDUSTRIAL", true);
EraTypes eMedieval = (EraTypes) GC.getInfoTypeForString("ERA_MEDIEVAL", true);

// Industrial era or Later
if(eCurrentEra >= eIndustrial)
{
	iCultureBonus += /*10*/ GC.getFRIENDS_CULTURE_BONUS_AMOUNT_INDUSTRIAL();
}

// Medieval era or later
else if(eCurrentEra >= eMedieval)
{
	iCultureBonus += /*6*/ GC.getFRIENDS_CULTURE_BONUS_AMOUNT_MEDIEVAL();
}

// Pre-Medieval
else
{
	iCultureBonus += /*4*/ GC.getFRIENDS_CULTURE_BONUS_AMOUNT_ANCIENT();
}

return iCultureBonus;
}

[Cкрыть]

GetCultureFlatAlliesBonusНажмите здесь!
 
// Flat culture bonus when Allies with a minor
int CvMinorCivAI::GetCultureFlatAlliesBonus(PlayerTypes ePlayer, EraTypes eAssumeEra)
{
//antonjs: consider: here it was assumed that this CS is cultured type, which is nice for me prototyping, but later maybe add in a check for this
int iCultureBonus = 0;

EraTypes eCurrentEra = eAssumeEra;
if(eCurrentEra == NO_ERA)
	eCurrentEra = GET_TEAM(GET_PLAYER(ePlayer).getTeam()).GetCurrentEra();

EraTypes eIndustrial = (EraTypes) GC.getInfoTypeForString("ERA_INDUSTRIAL", true);
EraTypes eMedieval = (EraTypes) GC.getInfoTypeForString("ERA_MEDIEVAL", true);

// Industrial era or Later
if(eCurrentEra >= eIndustrial)
{
	iCultureBonus += /*10*/ GC.getALLIES_CULTURE_BONUS_AMOUNT_INDUSTRIAL();
}

// Medieval era or later
else if(eCurrentEra >= eMedieval)
{
	iCultureBonus += /*6*/ GC.getALLIES_CULTURE_BONUS_AMOUNT_MEDIEVAL();
}

// Pre-Medieval
else
{
	iCultureBonus += /*4*/ GC.getALLIES_CULTURE_BONUS_AMOUNT_ANCIENT();
}

return iCultureBonus;
}

[Cкрыть]

GetCulturePerBuildingFriendshipBonus и GetCulturePerBuildingAlliesBonusНажмите здесь!
 
//antonjs: This feature was prototyped, but later removed. Rewrite this function to add the bonus back in.
/// Cumulative per building culture bonus from friendship with a minor
int CvMinorCivAI::GetCulturePerBuildingFriendshipBonus(PlayerTypes /*ePlayer*/, EraTypes /*eAssumeEra*/)
{
return 0;
}

//antonjs: This feature was prototyped, but later removed. Rewrite this function to add the bonus back in.
/// Cumulative per building culture bonus from being allies with a minor
int CvMinorCivAI::GetCulturePerBuildingAlliesBonus(PlayerTypes /*ePlayer*/, EraTypes /*eAssumeEra*/)
{
return 0;
}

[Cкрыть]

Вот еще интересный метод о смене эры и как меняются бонусы при этом

DoMajorCivEraChangeНажмите здесь!
 
/// Someone changed eras - does this affect their bonuses?
bool CvMinorCivAI::DoMajorCivEraChange(PlayerTypes ePlayer, EraTypes eNewEra)
{
bool bSomethingChanged = false;

MinorCivTraitTypes eTrait = GetTrait();

// MARITIME
if(eTrait == MINOR_CIV_TRAIT_MARITIME)
{
	// Friends
	if(IsFriends(ePlayer))
	{
		int iOldFood, iNewFood;

		// Capital
		iOldFood = GetFriendsCapitalFoodBonus(ePlayer);
		iNewFood = GetFriendsCapitalFoodBonus(ePlayer, eNewEra);

		if(iOldFood != iNewFood)
		{
			bSomethingChanged = true;
			GET_PLAYER(ePlayer).ChangeCapitalYieldChange(YIELD_FOOD, iNewFood - iOldFood);
		}

		// Other Cities
		iOldFood = GetFriendsOtherCityFoodBonus(ePlayer);
		iNewFood = GetFriendsOtherCityFoodBonus(ePlayer, eNewEra);

		if(iOldFood != iNewFood)
		{
			bSomethingChanged = true;
			GET_PLAYER(ePlayer).ChangeCityYieldChange(YIELD_FOOD, iNewFood - iOldFood);
		}
	}

	// Allies
	if(IsAllies(ePlayer))
	{
		int iOldFood, iNewFood;

		// Capital
		iOldFood = GetAlliesCapitalFoodBonus(ePlayer);
		iNewFood = GetAlliesCapitalFoodBonus(ePlayer);

		if(iOldFood != iNewFood)
		{
			bSomethingChanged = true;
			GET_PLAYER(ePlayer).ChangeCapitalYieldChange(YIELD_FOOD, iNewFood - iOldFood);
		}

		// Other Cities
		iOldFood = GetAlliesOtherCityFoodBonus(ePlayer);
		iNewFood = GetAlliesOtherCityFoodBonus(ePlayer);

		if(iOldFood != iNewFood)
		{
			bSomethingChanged = true;
			GET_PLAYER(ePlayer).ChangeCityYieldChange(YIELD_FOOD, iNewFood - iOldFood);
		}
	}
}

// CULTURED
else if(eTrait == MINOR_CIV_TRAIT_CULTURED)
{
	// Friends
	if(IsFriends(ePlayer))
	{
		int iOldCulture = GetCultureFlatFriendshipBonus(ePlayer) + GetCulturePerBuildingFriendshipBonus(ePlayer);
		int iNewCulture = GetCultureFlatFriendshipBonus(ePlayer, eNewEra) + GetCulturePerBuildingFriendshipBonus(ePlayer, eNewEra);

		if(iOldCulture != iNewCulture)
		{
			bSomethingChanged = true;
		}
	}

	// Allies
	if(IsAllies(ePlayer))
	{
		int iOldCulture = GetCultureFlatAlliesBonus(ePlayer) + GetCulturePerBuildingAlliesBonus(ePlayer);
		int iNewCulture = GetCultureFlatAlliesBonus(ePlayer, eNewEra) + GetCulturePerBuildingAlliesBonus(ePlayer, eNewEra);

		if(iOldCulture != iNewCulture)
		{
			bSomethingChanged = true;
		}
	}
}

// MERCANTILE
else if(eTrait == MINOR_CIV_TRAIT_MERCANTILE)
{
	// Friends
	if(IsFriends(ePlayer))
	{
		int iOldHappiness, iNewHappiness;

		iOldHappiness = GetHappinessFlatFriendshipBonus(ePlayer) + GetHappinessPerLuxuryFriendshipBonus(ePlayer);
		iNewHappiness = GetHappinessFlatFriendshipBonus(ePlayer, eNewEra) + GetHappinessPerLuxuryFriendshipBonus(ePlayer, eNewEra);

		if(iOldHappiness != iNewHappiness)
		{
			bSomethingChanged = true;
			GET_PLAYER(ePlayer).DoUpdateHappiness();
		}
	}

	// Allies
	if(IsAllies(ePlayer))
	{
		int iOldHappiness, iNewHappiness;

		iOldHappiness = GetHappinessFlatAlliesBonus(ePlayer) + GetHappinessPerLuxuryAlliesBonus(ePlayer);
		iNewHappiness = GetHappinessFlatAlliesBonus(ePlayer, eNewEra) + GetHappinessPerLuxuryAlliesBonus(ePlayer, eNewEra);

		if(iOldHappiness != iNewHappiness)
		{
			bSomethingChanged = true;
			GET_PLAYER(ePlayer).DoUpdateHappiness();
		}
	}
}

// RELIGIOUS
else if(eTrait == MINOR_CIV_TRAIT_RELIGIOUS)
{
	// Friends
	if(IsFriends(ePlayer))
	{
		int iOldFaith = GetFaithFlatFriendshipBonus(ePlayer);
		int iNewFaith = GetFaithFlatFriendshipBonus(ePlayer, eNewEra);

		if(iOldFaith != iNewFaith)
		{
			bSomethingChanged = true;
		}
	}

	// Allies
	if(IsAllies(ePlayer))
	{
		int iOldFaith = GetFaithFlatAlliesBonus(ePlayer);
		int iNewFaith = GetFaithFlatAlliesBonus(ePlayer, eNewEra);

		if(iOldFaith != iNewFaith)
		{
			bSomethingChanged = true;
		}
	}
}

return bSomethingChanged;
}

[Cкрыть]
Изменено пользователем Kronic
Ссылка на комментарий

Сидри

Культура

древний мир, античность + 4 / +8 культуры

средневековье, ренессанс, новейшее +6 / +12 культуры

индустриализация и позже +10 / +20 культуры

Спасибо, найди ещё по счастью у торговых пожалуйста.

Изменено пользователем Сидри
Ссылка на комментарий

Присоединиться к обсуждению

Вы можете оставить комментарий уже сейчас, а зарегистрироваться позже! Если у вас уже есть аккаунт, войдите, чтобы оставить сообщение через него.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Only 75 emoji are allowed.

×   Ваша ссылка автоматически преображена.   Отображать как простую ссылку

×   Предыдущее содержимое было восстановлено..   Очистить текст в редакторе

×   You cannot paste images directly. Upload or insert images from URL.

  • Ответы 27
  • Создано
  • Последний ответ
  • Просмотры 18818
  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу


admin@strategium.ru

Copyright © 2008-2025 Strategium.ru Powered by Invision Community

×
×
  • Создать...