Космическая кухня
Космическая кухня

Как зажигаются звёзды

Здравствуйте, гость ( Вход | Регистрация )

entry Oct 16 2010, 19:32
Некоторое время назад ко мне обратилась группа товарищей с интересной просьбой. Они хотели «переиграть» партию ww6 с 27 хода. Вернее, переиграть результаты одной войны (поменявшись местами). Для удовлетворения этой просьбы нужно было решить две проблемы — создание партии по данным частных отчётов игроков и реализация т. н. «бомбы». Хотя это и не давало в принципе ничего интересного для сервера, я согласился, потому, что по обоим подзадачам уже были незаконченные наработки, кроме того, это давало повод внести кое-какие давно ожидающие нужные изменения.


Задача импорта отчётов возникла не впервые. Некогда ко мне обращались по вопросу доигрывания на ГЛ последнего командника умершего Первого московского сервера. Тогда я был готов взяться за это, но сперва посоветовал попытаться достучаться до Антона Круглова и воскресить сервер хотя бы на одну игру. Это удалось. Срочная надобность в конверторе отпала.

Имея опыт разбора отчётов по многочисленным скриптам и утилитам, конвертор для одного отчёта я написал за вечер, за второй отладил. Потом, правда, оказалось, что данных одного отчёта не достаточно, ещё некоторое время ушло на обработку и слияние нескольких отчётов. Скрипт я писал для конкретной задачи, поэтому он достаточно ограничен — не импортируются маршруты, голоса, отношения рас, команды. Всё это было не нужно для текущей цели. Скрипт не работает правильно со слепыми партиями или с персональными картами, со специальными общими типами производства (терраформирование, клонирование и т. п.), с турбонауками. Не отлавливает несогласованность отчётов. Пароли устанавливаются случайные, адреса — nobody@localhost, неподтверждённые. Если надо будет — допишу.
Прикрепленный файл  rep2game.py.txt ( 13.89 килобайт ) Кол-во скачиваний: 177



С конкретными предложениями по «бомбе» ко мне обратился Глайдер более года назад. Правда, после предварительного обсуждения, исправления явных ошибок и согласования деталей, он потерял интерес к своей идее и разработка остановилась.

Поднял старые архивы, перечитал. Внеся два изменения, увеличивающих гибкость и расширяемость сервера (я о них писал в двух предыдущих постах), удалось реализовать бомбу довольно просто. Понадобилось три новых класса, от которых остальной код совершенно не зависит, их я вынес в отдельный пакет extra.hyperbomb (в будущем собираюсь вынести extra различные устаревшие, малоиспользуемые и узкоспециальные опции, а со временем собирать их отдельно от ядра сервера). И лишь одну небольшую правку в основной код — поле для временного признака взорвавшейся бомбы (можно было бы обойтись и без этого, усложнив код бомбы).

Для включения «бомбы» (вернее «гиперпространственной бомбы», или «гипербомбы», чтобы отличать её от обычных бомбардировок) следует в настройках партии сделать следующие изменения:
  • Определить тип корабля _Bomb (имя, к сожалению, вшито) и добавить его к списку типов производства:
    CODE
    Galaxy.ProductionType._Bomb=objects.production.SpecialShipType_Production
    ShipType._Bomb.Drive=346
    ShipType._Bomb.Attacks=1
    ShipType._Bomb.Weapons=1
    ShipType._Bomb.Shields=0
    ShipType._Bomb.Cargo=345
    Galaxy.ProductionTypes=... _Bomb
    В test11 этот шаг пропущен, из-за особенностей конвертора тип корабля _Bomb уже определён у игроков.
    Заметил из отчётов, что Глайдер проигнорировал моё замечание о конструкции бомбы — её скорость меньше 50%.
  • Определить опцию битвы для extra.hyperbomb.HyperbombBattleFilter и добавить её в список опций битвы. Если используется захват, то перед захватом, если вы хотите, чтобы бомбы взрывались, а не захватывались.
    CODE
    Battle.HYPERBOMB=extra.hyperbomb.HyperbombBattleFilter
    Battle.Options=HYPERBOMB
    Эта опция отвечает за взрыв бомбы при поражении в битве.
  • Определить фазу ходопроизводства для extra.hyperbomb.HyperbombArrivePhase и вставить её сразу перед фазой движения кораблей.
    CODE
    Phase.HYPERBOMBARRIVE=extra.hyperbomb.HyperbombArrivePhase
    Galaxy.Phases=... HYPERBOMBARRIVE MOVE ...
    Эта фаза отвечает за взрыв бомбы по прибытии (не в составе флота).
  • Определить фазу ходопроизводства для extra.hyperbomb.HyperbombPhase и вставить её после второй битвы, но перед нормальной бомбардировкой.
    CODE
    Phase.HYPERBOMB=extra.hyperbomb.HyperbombPhase
    Galaxy.Phases=... FIGHT HYPERBOMB BOMB ...
    Эта фаза отвечает за сам процесс нанесения повреждения планетам и кораблям в результате взрыва бомбы. Без неё смысла в бомбах нет.

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

От предложения Глайдера реализация отличается тем, что пока нет ограничения (уровнем карго) для возможности постройки бомбы. Для данной партии это не существенно, заинтересованные стороны уже имеют доступ к бомбам. А дальше — увидим.

В результате была создана на тестовом сервере партия test11. Что-то, правда, игроки не торопятся. А надо бы, ведь в реализации возможны ошибки. Пока я доступен — смогу оперативно исправить.

 
« Предыдущий · Космическая кухня · Следующий »
 
ВПВСЧПС
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31


Ссылки моего Блога


Поиск по моему Блогу