LINUX.ORG.RU
ФорумGames

Две баги в FreeCol

 


0

1
  1. если у игрока нет ни одного города (сначала создал, а затем всех жителей выселил - «Abadon City»),
    то выдаётся «ошибка сервера» с текстом «net.sf.freecol.common.model.Player clientError
    WARNING: Player can not recruit fathers»

  2. на экране города, там где можно делать drag & drop грузов есть какая-то ошибка с подпиской на события этого D&D
    Проявляется это в том, что процессор начинает сильно греться, и перестаёт после закрытия диалога. Возникает эта ошибка не сразу, и в начале игры её незаметно (трудно воспроизвести).

Ссылка к новости: FreeCol 1.0

★★★★

С пулл-реквестами непросто всё. Для начала, Drag & Drop в X11 это эпически сложно, никто мне на LOR никогда не объяснял, как оно работает, там же протокол на протоколе!

Xdnd - https://freedesktop.org/wiki/Specifications/XDND/ «This page was created from Google’s cache» То есть, они сами признают, что тайное знание было утрачено. И даже этому, восстановленному, уже́ 20 лет.

Там, в конце, упоминается что сверху у него какой-то Java DND API. А снизу ICCCM (Inter-Client Communications Conventions Manual). В общем, это с самого начала выглядит крайне устрашающе.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

https://docs.oracle.com/javase/tutorial/uiswing/dnd/defaultsupport.html

«drag gesture» - это вообще что такое? gestures эти? Для работы с ними есть какое-то API? Как я могу переопределить эту gesture или добавить ещё одну?

Drag and Drop and Data Transfer

  • Introduction to DnD
  • Default DnD Support
    • Demo - BasicDnD
  • TransferHandler Class
    • Export Methods
    • Import Methods
  • TransferSupport Class
  • Setting the Drop Mode
  • Demo - DropDemo
  • Choosing the Drop Action
    • Demo - ChooseDropAction
  • Showing the Drop Location
  • Location Sensitive Drop
    • Demo - LocationSensitiveDemo
  • Empty Table Drop
  • Drop Location Rendering
  • Top-Level Drop
  • Adding Cut, Copy and Paste (CCP)
  • CCP in a Text Component
  • CCP in a non-Text Component
  • Using and Creating a DataFlavor
  • Putting it All Together - DnD and CCP
  • Solving Common Data Transfer Problems

Очевидно, что нужно читать последний пункт. Проблема же - драгдроп где-то начинает перегружать процессор, где не должен.

Но такая проблема там отсутствует среди двух перечисленных.

Shushundr ★★★★
() автор топика
Ответ на: комментарий от Shushundr

public final class ColonyPanel extends PortPanel
выглядит подходящим кусоком кода.

Но как понять, что именно в нём «не так»?

    private void setTransferHandlers(boolean enable) {
        DefaultTransferHandler dth = (enable) ? defaultTransferHandler : null;
        cargoPanel.setTransferHandler(dth);
        inPortPanel.setTransferHandler(dth);
        outsideColonyPanel.setTransferHandler(dth);
        warehousePanel.setTransferHandler(dth);
    }

В документации написано: «If the new TransferHandler is not null, this method also installs a new DropTarget on the component to activate drop handling through the TransferHandler and activate any built-in support (such as calculating and displaying potential drop locations). If you do not wish for this component to respond in any way to drops, you can disable drop support entirely either by removing the drop target (setDropTarget(null)) or by de-activating it (getDropTaget().setActive(false)).»

А я не вижу по setTransferHandlers(false) чтобы проводилось «removing the drop target». Но я ничего не понимаю, так что утверждать наверняка не могу.

Shushundr ★★★★
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Ну в общем, это нормально, что человек прежде чем заводить багу, интересуется, повторяется ли она у кого-нибудь. Заодно может получиться уточнить обстоятельства её выполнения.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Нет, делать это надо обязательно на английском языке перволюдей, в почтовой рассылке обсуждаемого продукта. Русскоговорящие не имеют таких прав.

Shushundr ★★★★
() автор топика

Поскольку одну багу профигсили, для того, чтобы заголовок темы оставался корректным, я нашел новую багу.

Допустим еды в городе почти 200 единиц, программа считает, что должен народиться юнит

Я погружаю 100 единиц еды в караван, в городе всё равно рождается новый гражданин, затем из остатка вычитается 200, получается отрицательное число, которое заменяется на ноль, один колонист (специалист) умирает от голода рождается новый неспециализированный гражданин.

Должно быть не так. Специалист не должен умирать, новый гражданин не должен рождаться, еда не должна обнуляться.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от hobbit

Конечно это баг. Если бы это была фича, то еда из каравана бы пропала. А так 100 единиц еды осталось. Т.е. чуть меньше 100 пошло на удаление специальности и снятие специалиста с работы и выдворение с рабочего места. Это действие, не вписывающееся в логику. Не фича.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)