мелкофикс расстояний у субсидий для map_1M и town_distance

Вопросы разработки OpenTTD, обсуждение новых сборок и патчей, решение проблем новых версий.

Модераторы: Smoky555, Группа модераторов

мелкофикс расстояний у субсидий для map_1M и town_distance

Сообщение Jureth » Чт июн 05, 2008 17:52

Хотя в списке патчей для 13097 и значится нечто под названием Max subsidy distance improvement, лично я никаких improvement, кроме ограничения расстояния в 70 клеток, не нашел. Посему выкладываю свою наработку:
Код: Выделить всё
--- src_clean/economy.cpp   2008-05-23 22:55:32.000000000 +0700
+++ src/economy.cpp   2008-06-05 21:04:13.000000000 +0700
@@ -1169,27 +1170,28 @@
      while (s->cargo_type != CT_INVALID) {
         if (++s == endof(_subsidies))
            goto no_add;
      }

      uint max_subsidy_route;
      max_subsidy_route = sqrt((MapSize() * .15) / 2);
-      max_subsidy_route = (max_subsidy_route > 70) ? max_subsidy_route : 70;
+      uint d = max(MapSizeX(), MapSizeY()) / min(MapSizeX(), MapSizeY());
+      max_subsidy_route = max_subsidy_route * sqrt(d);

      n = 1000;
      do {
         FindSubsidyPassengerRoute(&fr);
-         if (fr.distance <= max_subsidy_route) {
+         if (fr.distance <= max(max_subsidy_route, _patches.town_minimum_distance*3)) {
            s->cargo_type = CT_PASSENGERS;
            s->from = ((Town*)fr.from)->index;
            s->to = ((Town*)fr.to)->index;
            goto add_subsidy;
         }
         FindSubsidyCargoRoute(&fr);
-         if (fr.distance <= max_subsidy_route) {
+         if (fr.distance <= max(max_subsidy_route, _patches.industry_minimum_distance*3)) {
            s->cargo_type = fr.cargo;
            s->from = ((Industry*)fr.from)->index;
            {
               const CargoSpec *cs = GetCargo(fr.cargo);
               s->to = (cs->town_effect == TE_GOODS || cs->town_effect == TE_FOOD) ? ((Town*)fr.to)->index : ((Industry*)fr.to)->index;
            }
   add_subsidy:
Верхнего потолка я не поставил ибо не знаю, как его правильнее выбрать. Хотя, ИМХО, если человек выбрал карту 8192x8192, то он должен быть морально готов к предложениям везти груз через 2000 клеток. :)

Ещё хочу изменить алгоритм субсидий с учетом длины дня, но ещё не додумал - как.

PS: диффил версию 13097.
Аватара пользователя
Jureth
Диспетчер
Диспетчер
 
Сообщения: 143
Зарегистрирован: Ср ноя 08, 2006 08:34

Re: мелкофикс расстояний у субсидий для map_1M и town_distance

Сообщение makbeth » Чт июн 05, 2008 20:42

ИМХО, за время, которое дается на получение субсидии нереально довезти груз на 2000 клеток. Собственно improvement состоит только в уменьшении расстояния (в оригинале игры жестко задано 70 клеток).
Вороне как-то бог послал на вход 4 вольта...
Изображение
makbeth
Директор
Директор
 
Сообщения: 388
Зарегистрирован: Пн фев 11, 2008 06:23
Откуда: Санкт-Петербург

Re: мелкофикс расстояний у субсидий для map_1M и town_distance

Сообщение Jureth » Чт июн 05, 2008 21:14

Угу. А если растояние между городами и предприятиями больше этих 70, то ни одной субсидии на игру ты не увидишь.

Формула дает макс. расстояние субсидий примерно 1/4 - 1/3 от наибольшей стороны карты если это число не меньше мин. расстояния * 3. Если есть идеи как правильно её ограничить сверху с учетом town_distance - подскажи, поправить всегда можно.

У меня пока одна идея - не давать ей становиться больше чем, скажем, расстояние м/ду городами * X (на вскидку - X в районе 5-6), но ведь это минимальное расстояние. Реальное будет хз какое. Да и если это расстояние сделать в 500, то фиг мы чего получим.

Короче - ситуация сложная.

Кстати, при соотв. длине дня можно вполне гонять груз хоть за 5 тысяч клеток - вполне все будут успевать. Проверено.
Аватара пользователя
Jureth
Диспетчер
Диспетчер
 
Сообщения: 143
Зарегистрирован: Ср ноя 08, 2006 08:34

Re: мелкофикс расстояний у субсидий для map_1M и town_distance

Сообщение Jureth » Чт июн 05, 2008 21:22

Можно ещё попробовать пойти другим путем - выбирать несколько (5-10 штук) вариантов для субсидии и добавлять в субсидии кратчайший из них.
Аватара пользователя
Jureth
Диспетчер
Диспетчер
 
Сообщения: 143
Зарегистрирован: Ср ноя 08, 2006 08:34


Вернуться в Разработка OpenTTD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

cron