Страница 68 из 69

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Вт дек 05, 2017 01:38
Se7en
Разбирался тут с работой GS, и возник вопрос:
Скрипт использует функцию GSTown.GetLastMonthSupplied для получения количества грузов, созданных городом за прошлый месяц и поставленных на станции, однако в Spring2013 к этому значению прибавляется объем грузов, выгруженных на городских станциях, что приводит к некорректной работе скрипта, неправильному отображению в окне города количества грузов, поставленных городом на станции за прошлый месяц.
А также это приводит к неправильному вычислению GSTown.GetLastMonthTransportedPercentage, который вычисляется как:
inline byte GetPercentTransported(CargoID cid) const { return this->supplied[cid].old_act * 256 / (this->supplied[cid].old_max + 1); }
и в случае, если old_act > old_max возвращает некорректное значение.

Проблема, судя по всему, находится в economy.cpp, DeliverGoods():

/* Increase town's counter for town effects */
const CargoSpec *cs = CargoSpec::Get(cargo_type);
if(cs->town_effect == TE_FOOD || cs->town_effect == TE_WATER)
st->town->received[cs->town_effect].new_act += (accepted * 1000 * (cs->multipliertowngrowth == 0 ? 256 : cs->multipliertowngrowth)) >> 8; // food rate in kg, water rate in litres
else
st->town->received[cs->town_effect].new_act += (accepted * (cs->multipliertowngrowth == 0 ? 256 : cs->multipliertowngrowth)) >> 8;
st->town->supplied[cs->Index()].new_act += accepted;

В стандартном OpenTTD 1.7 этот код выглядит как:

/* Increase town's counter for town effects */
const CargoSpec *cs = CargoSpec::Get(cargo_type);
st->town->received[cs->town_effect].new_act += accepted;

То есть st->town->supplied[cs->Index()].new_act вроде как не должен тут меняться, кроме того, в Spring2013 модифицируется полученное количество грузов (для еды и воды умножается на 1000), что тоже приведет к некорректной работе скриптов, использующих эти значения.

Можно это как-то исправить, чтобы функции GSTown возвращали корректные значения?
Update: заменил товары на грузы для точности.

И еще вопрос, пытался скомпилировать OpenTTD Spring 2013 Patchpack v2.4.291 source в VS2010 по инструкции отсюда:
https://wiki.openttd.org/Compiling_on_W ... 2B%2B_2012

Вылезли ошибки:
7>zlibstat.lib(gzwrite.obj) : error LNK2005: _vsnprintf already defined in string.obj
7>LIBCMT.lib(sprintf.obj) : error LNK2005: _sprintf already defined in libfreetype2.lib(bdf.obj)
7>rail_cmd.obj : error LNK2001: unresolved external symbol "unsigned int _opengfx_grf_file_index" (?_opengfx_grf_file_index@@3IA)
7>rail_cmd.obj : error LNK2001: unresolved external symbol "unsigned int _first_user_grf_file_index" (?_first_user_grf_file_index@@3IA)
7>icuuc.lib(unames.obj) : error LNK2001: unresolved external symbol ___report_rangecheckfailure
...
ну и так далее.

Проблема, видимо, в первых _vsnprintf already defined и _sprintf already defined. Подскажите, как это исправить?

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Вт дек 05, 2017 16:12
pi1985
по быстрому. supplied обозначает "поставлено", в не " произведено", т. е. всё верно.

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Вт дек 05, 2017 16:17
Se7en
pi1985 писал(а):по быстрому. supplied обозначает "поставлено", в не " произведено", т. е. всё верно.

По логике это именно поставлено городом на городские станции. Нигде больше такого кода нет, я смотрел транк, стабильный и JGR - там везде все корректно считается, и поставки товаров и процент перевозки.

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Вт дек 05, 2017 16:24
pi1985
Ок, проверим. Кода также ого конечно, нет, так как патч только тут такой.

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Ср дек 06, 2017 03:51
pi1985
Se7en писал(а):Разбирался тут с работой GS, и возник вопрос:
Скрипт использует функцию GSTown.GetLastMonthSupplied для получения количества товаров, созданных городом за прошлый месяц и поставленных на станции, однако в Spring2013 к этому значению прибавляется объем товаров, выгруженных на городских станциях, что приводит к некорректной работе скрипта, неправильному отображению в окне города количества товаров, поставленных городом на станции за прошлый месяц.


Насколько я помню, город сам производит только два груза: пассажиры и почту (в ECS ещё туристов), но не производит товары. Патч использует только те грузы, которые имеют пометку TE_GOODS, TE_FOOD или TE_WATER). Ни пассажиры, ни почта, ни туристы к этим категориям не относятся (для них есть свои категории TE_PASSENGERS и TE_MAIL), поэтому патч работает правильно (хотя можно сделать, чтобы эти категории так же учитывались).

Но в общем, согласен, использовать Town::supplied[] для хранения количества привезенного груза неправильно и нужно создать что-то вроде Town::delivered[].

А каким образом город начал производить товары?

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Ср дек 06, 2017 15:21
Se7en
Насколько я помню, город сам производит только два груза: пассажиры и почту (в ECS ещё туристов), но не производит товары. Патч использует только те грузы, которые имеют пометку TE_GOODS, TE_FOOD или TE_WATER). Ни пассажиры, ни почта, ни туристы к этим категориям не относятся (для них есть свои категории TE_PASSENGERS и TE_MAIL), поэтому патч работает правильно (хотя можно сделать, чтобы эти категории так же учитывались).

А каким образом город начал производить товары?

Товары имелись в виду в общем смысле как груз, то есть в данном случае пассажиры.
При разгрузке транспорта на станции количество пассажиров прибавляется к значению supplied, это неправильно, потому что supplied это пассажиры, которых произвел сам город и поставил на городские станции, через это вычисляется процент перевозки пассажиров как supplied/max за прошлый месяц.
Также при прибытии воды и еды на городские станции значение received умножается на 1000, что тоже неправильно, потому что эта переменная доступна скриптам через интерфейс города и может использоваться.

Но в общем, согласен, использовать Town::supplied[] для хранения количества привезенного груза неправильно и нужно создать что-то вроде Town::delivered[].

Именно так, поскольку supplied и received могут использоваться скриптами, они должны работать как в стандартном OTTD, иначе ломается совместимость.

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Ср дек 06, 2017 22:06
Sky_Turner
А я всё жду, когда автор добавит Terminus Airports в сборку :(

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Сб дек 16, 2017 15:01
Brek
Приветствую, а нет ли у кого скомпилированной версии под OSX, или хотя бы инструкции как ее заполучить. Стандартные ./configure, make выдает такое

[code]
OpenTTD/src/ai/../tilearea_type.h:430:103: error: no viable conversion from 'MainMap' to 'Map *'
TransformationTileIteratorT(const GenericTileArea &src_area, TileTransformation transformation, Map *dst_map = _main_map)
penTTD/src/ai/../tilearea_type.h:430:103: note: passing argument to parameter 'dst_map' here
[/code]

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Ср янв 24, 2018 22:22
Kozinsky
При сохранении/загрузке игры сбрасываются некоторые настройки игры на значения по умолчанию (из того, на что я обратил внимание):
"Показывать время в минутах, а не днях", "Тиков в минуте" и "Разрешить финансирование строительства зданий".
Если первые два параметра корректно сохраняются/загружаются при автосейве, то третий никак не хочет сохраняться.

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Пт фев 09, 2018 12:47
Leo_gris
Установил так: сначала распаковал в новую папку архив с пометкой "source", потом в эту же папку с заменой файлов "х64".
Все настройки перешли с уже установленной ОТТД, кроме графики и звуков OpenGFX. Установил их.
В игре не работает передвижение карты по ПКМ - просто на месте дёргается картинка. Установил передвижение на ЛКМ. Хотя в оригинальной версии всё работает нормально.
Ещё хотел узнать про работу над FIRS: с последней версией эта сборка не дружит, а в теме писали, что может быть обновят на НГ. Хотел узнать, стоит ли ждать?

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Сб фев 10, 2018 18:52
Aleksey
Leo_gris писал(а):Установил так: сначала распаковал в новую папку архив с пометкой "source", потом в эту же папку с заменой файлов "х64".
Все настройки перешли с уже установленной ОТТД, кроме графики и звуков OpenGFX. Установил их.
В игре не работает передвижение карты по ПКМ - просто на месте дёргается картинка. Установил передвижение на ЛКМ. Хотя в оригинальной версии всё работает нормально.
Ещё хотел узнать про работу над FIRS: с последней версией эта сборка не дружит, а в теме писали, что может быть обновят на НГ. Хотел узнать, стоит ли ждать?

Стоит ждать. Автор pi1985 планирует обновить патчпак. Просто пока нет времени на это.

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Ср фев 21, 2018 18:34
Ivan-r
Leo_gris писал(а):Установил так: сначала распаковал в новую папку архив с пометкой "source", потом в эту же папку с заменой файлов "х64".
...

Зачем?!

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Ср мар 07, 2018 09:43
vovchik45
Помогите как вылечить сетевую игру?
Клиенты после подключения и загрузки карты вылетают с ошибкой синхронизации.
Куда копать?

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Вс мар 11, 2018 13:36
Ivan-r
vovchik45 писал(а):Помогите как вылечить сетевую игру?
Клиенты после подключения и загрузки карты вылетают с ошибкой синхронизации.
Куда копать?

Графика подключена?

Re: OpenTTD Spring 2013 2.4.291

СообщениеДобавлено: Пн мар 12, 2018 08:17
vovchik45
Ivan-r писал(а):
vovchik45 писал(а):Помогите как вылечить сетевую игру?
Клиенты после подключения и загрузки карты вылетают с ошибкой синхронизации.
Куда копать?

Графика подключена?

Да.
upd: Переключился на aBase - работает пока
upd: нет, выкидывает. На паузе даёт подключится. как только снимаем - вылетает.