Сегодня на работе просматривал статьи по цив4 на их-фанатиках, наткнулся вот на что:
http://forums.civfanatics.com/showpost.php...83&postcount=89
Дистанционная коррупция:
DistanceMaint = (Pop + 7) * 2.5 * Distance/DistanceScale * Building_m * WorldSize_m * Handicap_m
Distance - расстояние к ближайшему дворцу, в стандартном фираксисовском смысле (шаг по диагонали считается как 1.5, округляем вниз).
Building_m = .5 if courthouse, 1 otherwise
Worldsize_m: Duel=.50, Tiny=.60, Small=.70, Standard=.80, Large=.90, Huge=1
Handicap_m: Settler=.45, Chieftain=.55, Warlord=.65, Noble=.75, Prince=.85, Monarch=.90, Emperor=.95, Immortal=1, Diety=1
DistanceScale = (MapHeight + MapWidth), причем MapHeight и MapWidth делим пополам если карта замыкается соответственно по высоте и/или ширине.
Ранговая коррупция:
CityMaint = N * (Pop + 17)/18 * WorldSize_m * Handicap_m + (1 for some cities, depending on cityrank)
CityMaint = min(CityMaint, CitiesHandicap) * Building_m, т.е. не может превышать 4-8 в зависимости от уровня
Worldsize_m: Duel=.45, Tiny=.40, Small=.35, Standard=.30, Large=.25, Huge=.20
Handicap_m: Settler=.40, Chieftain=.50, Warlord=.60, Noble=.70, Prince=.80, Monarch=.85, Emperor=.90, Immortal=.95, Diety=1
CitiesHandicap: Settler=4, Chieftain=4, Warlord=5, Noble=5, Prince=6, Monarch=6, Emperor=7, Immortal=7, Diety=8
Building_m = .5 if courthouse, 1 otherwise
В первой формуле 1 прибавляем если
(1 if CityRank/N * 100 > 100 - (N * NumCitiesPercent) % 100)
из-за операции взятия остатка (%) эта единица появляется рандомно в зависимости от ранга (считается как в цив3). Смысл в том чтобы не было резких скачков при прибавлении города.
Интересно что значение зависит от населения города (я это и раньше замечал), особенно сильно зависит дистанционная коррупция.
По всей видимости все вычисления целочисленные, округленя вниз, но точно это неизвестно, так что возможна ошибка +/- одна монета.
<div class='quotetop'>Цитата</div>Эти коэффициенты в формуле применены неправильно. С увеличением размера карты содержание за удалённость от дворца НЕ МОЖЕТ УВЕЛИЧИВАТЬСЯ. Оно уменьшается -- это проверено мной экспериментально.Worldsize_m: Duel=.50, Tiny=.60, Small=.70, Standard=.80, Large=.90, Huge=1[/b]
И это логично. Иначе на карте Huge было бы просто невозможно играть из-за огромных расстояний до дворца.
Да и вообще, что-то не похоже это на правду. Совсем. Сумма содержания, рассчитанного по первой формуле, получается в 3 раза большей, чем на практике.
Да ну? А может ты просто невнимательно посмотрел описание формулы?
DistanceScale = (MapHeight + MapWidth) : 10x6 на дуэльной, 21x13 на стандартной...
Именно в этом как раз и учитывается размер карты, что и "проверено тобой экспериментально". А WorldSize_m в данном случае скорее для сглаживания получающихся различий.
Вот сама функция из SDK.
[code]int CvCity::calculateDistanceMaintenanceTimes100() const
{
<div class='quotetop'>Цитата(Мозговой рыбак * 1.3.2007, 13:27) [snapback]166693[/snapback]</div>млин, надо Лиара сюда позвать, а то он терзает себя в гайд-парке...Блин, я тупак. Сори! Я брал для расчёта не длину и ширину карты, а расстояние до города по горизонтали и по вертикали.
Спасибо, жизнь снова обрела смысл .
[/b]
Знаю, подло завелось теперь на земле нашей; думают только, чтобы при них были хлебные стоги, скирды да конные табуны их, да были бы целы в погребах запечатанные меды их. Перенимают черт знает какие бусурманские обычаи; гнушаются языком своим; свой с своим не хочет говорить; свой своего продает, как продают бездушную тварь на торговом рынке. Милость чужого короля, да и не короля, а паскудная милость польского магната, который желтым чеботом своим бьет их в морду, дороже для них всякого братства. Но у последнего подлюки, каков он ни есть, хоть весь извалялся он в саже и в поклонничестве, есть и у того, братцы, крупица русского чувства. И проснется оно когда-нибудь, и ударится он, горемычный, об полы руками, схватит себя за голову...
Н.В. Гоголь, "Тарас Бульба"
<div class='quotetop'>Цитата(Obormot * 11.7.2006, 17:44) [snapback]109162[/snapback]</div>Итак CityMaint = N * СРанговая коррупция:
CityMaint = N * (Pop + 17)/18 * WorldSize_m * Handicap_m + (1 for some cities, depending on cityrank)
[/b]
Получается при основании нового города для каждого города CityMaint += С (N штук)
и для нового города CityMaint = (N+1) * С
То есть затраты приблизительно увеличиваются на 2N.
Как Вы думаете, можно ли пользоваться этим предположением?
<div class='quotetop'>Цитата</div>Это только про Number Of Cities Maintenance. А есть ещё Distance Based Maintenance, которое своё для каждого случая.То есть затраты приблизительно увеличиваются на 2N.
Как Вы думаете, можно ли пользоваться этим предположением?[/b]
<div class='quotetop'>Цитата</div>Вот эта часть неверна. На самом деле нужно максимально возможное расстояние между городами - для плоской это между углами - 1 (1 = длина клетки, на которой стоит столица; если карта квадратная, должно быть 1,5, по логике), для цилиндра по склеенному измерению берется половина размера карты, и т.д.DistanceScale = (MapHeight + MapWidth)[/b]
<div class='quotetop'>Цитата(Obormot * 11.7.2006, 19:44) [snapback]109162[/snapback]</div>При числе городов 28 и больше (для Emperor и карты Standart), суммарный маинтейнс (CityMain) равен:Интересно что значение зависит от населения города (я это и раньше замечал), особенно сильно зависит дистанционная коррупция.
[/b]
7*N и не зависит от населения Pop.
При 15 городах и среднем населении 15+ также 7*N
При 20 городах и среднем населении 7+ на один город также имеем насыщение: 7*N
Получается, что суммарный маинтейнс растет квадратично с N (вначале) а потом достигает своего насыщения: 7*N.
Рентабелность города определяется 1 тауном без банков и рынков
Интересно было бы еще глянуть как считается CivicUpkeep
А при каких условиях вы начинаете строить суды?
А мне вот интересно, как кто-нибудь может жить без них. Я играю на Аристократе и не перехожу на следующий уровень именно потому, что с трудом выбираюсь из технологической ямы после третьего города. У меня просто кончаются деньги.
Без святых храмов моих религий, которые (кроме судов) меня только и спасают, наука колеблется на уровне 10-30%. Без судов и святых храмов -- совсем никак.
Обычно я беру Оракулом Свод законов, получаю вторую религию конфуцианство, срочно строю суды и Тай-Мяо (или чё там у них, у конфуциев ), распространяю конфуцианство и только потом получаю возможность продолжить экспансию.
<div class='quotetop'>Цитата(Lexad * 5.4.2007, 0:27) [snapback]173998[/snapback]</div><div class='quotetop'>ЦитатаВот эта часть неверна. На самом деле нужно максимально возможное расстояние между городами - для плоской это между углами - 1 (1 = длина клетки, на которой стоит столица; если карта квадратная, должно быть 1,5, по логике), для цилиндра по склеенному измерению берется половина размера карты, и т.д.DistanceScale = (MapHeight + MapWidth)[/b]
[/b][/quote]
Lexad, а ты в игре или в билдере это проверял? Это действительно так? Что-то я сомневаюсь.
Я решил было написать типо обзор про содержание городов. Этакая компиляция всего известного по теме. Он у меня сейчас готов. Но формулы, которые я там привёл (формулы из заглавного поста этого топика) на карте Huge, уровне Noble НЕ работают.
Сумма содержания от удалённости от дворца, которая рассчитывается по приведённой формуле, примерно в 1,58 раз больше, чем на практике. Причём это число (1,58) практически не изменяется при увеличении расстояния до дворца. То есть с небольшой натяжкой можно сказать, что все суммы, рассчитанные по формуле, равны реальным, умноженным на 1,58.
Я предполагаю, что в формуле либо не хватает какого-то уменьшающего коэффициента, либо Distance Scale действительно считается как-то по-другому. Но не так, как пишет Lexad. Тогда цифра выходит ещё больше реальной.
Кроме того, на ихфанатиках некто Glundberg заявил в апреле прошлого года, что он работает над масштабным трудом по содержанию городов и привёл его начало. Не скажу, что я хоть что-то понял из этого начала, но совершенно точно, что он считает, что содержание в зависимости от расстояния до дворца зависит от количества зданий в городе.
http://forums.civfanatics.com/showpost.php...mp;postcount=93
Обещанного им труда я не обнаружил (похоже на меня ).
<div class='quotetop'>Цитата</div>Именно потому, что в игре не совпадало, и проверил, и нашел верную зависимость.Lexad, а ты в игре или в билдере это проверял? Это действительно так? Что-то я сомневаюсь.[/b]
<div class='quotetop'>Цитата</div>- он неверно понял модификатор от зданий - он не равен 1 только при наличии дворца/ЗД/Версаля/суда/Икханды.он считает, что содержание в зависимости от расстояния до дворца зависит от количества зданий в городе[/b]
<div class='quotetop'>Цитата</div>Если в заглавном посте исправить то, что я добавил, все уже и так есть; впрочем, можешь подробнее написать про здания и цивики, уменьшающие содержание.Я решил было написать типо обзор про содержание городов. Этакая компиляция всего известного по теме. Он у меня сейчас готов[/b]
Сэйв притараню завтра. Ужасно неудобно -- инет на работе, а цива дома. Клеймёный XP...
То есть, я понимаю, ты считал расстояние руками... Я брал за основу для DistanceScale данные из файла Civ4WorldInfo.xml. Причём то, что там указано как <iGridWidth> и <iGridHeight> -- на самом деле не размеры карты. Для карт Duel и Tiny эти цифры нужно умножить на 4 (Duel по файлу -- 10х6, Duel в игре -- 40х24). Я предположил то же самое и для карты Huge, для которой я считаю, но глядя на твою, Lexad, уверенность, чтой-то засомневался. Ещё раз проверю, посчитаю руками.