Omich

Пользователь
  • Публикации

    369
  • Зарегистрирован

  • Посещение

Все публикации пользователя Omich

  1. @Клерри, Microsoft Visual Studio Express или Microsoft Visual C# Express Edition, любая новее 2008, доступна для скачивания бесплатно с MSDN/MSDC. У линуксойдов/яблочников есть альтернатива - MonoDevelop. Редактируются, собственно, файлы с исходным кодом C# .cs (иногда .ccs), а из них компилируется dll. Хотя можно и декомпилировать какую-нибудь готовую dll назад в исходный код с помощью программ типа Reflector.
  2. @X-18, да, с очередным апдейтом игры патчер опять сломался, починю когда-нибудь (мне сейчас уже, просто, не очень интересна данная игра). Как вариант: запустить игру с нужными параметрами в последней версии, где всё работает, сохраниться и перенести сейв в текущую.
  3. @X-18, должно работать, но особого смысла в этом, обычно, нету.
  4. Мне тут, внезапно, пришла в голову идея. В общем, суть такова: в подобной транспортной игре заторы и неразбериха в движении поездов будут всегда возникать рано или поздно, если в основе регулирования движения транспорта лежит только сигналка. В любой, сколько-нибудь приближенной к реальности, подобной игре в основе движения поездов должен лежать график движения (скрещений). Примерно вот такой: По вертикали наносятся станции, а по горизонтали время. Ломаные линии - перемещения поездов между станций. Смысл в том, что там, где линии пересекаются (происходит скрещение поездов), должно быть достаточное число путей перегона или станции. Если провести кривую, удовлетворяющую данному условию нельзя, то маршрут нельзя сформировать в этот момент времени и некоторые поезда (по приоритету, например) надо будет задержать для формирования свободного пути. Я считаю, что если положить в основу движения поездов что-то вроде этого, то у нас не будет заторов и сбоев в движении поездов (при достаточном числе путей, но всё же гораздо меньшем, чем число поездов), поезда прибывают на свободный путь предусмотренный графиком, а сигналка, кроме как для разграничения блок-участков, не нужна (по крайней мере, в магистральном движении) и вообще всё будет хорошо, да. К несчастью, текущие возможности скриптинга в Train Fever совершенно недостаточны, чтобы реализовать подобный концепт. Так что пока это просто мысли вслух, вот.
  5. Версия 0.1

    334 скачивания

    Стандартный вагон республики Тилимилитряндии для перевозки 30 литров музыки (если это можно назвать музыкой) и 16 человек. Не рекомендуется вцеплять в состав больше штуки.
  6. Думаю, возможно реализовать мод, который проверял бы модель здания и заданным образом изменял его параметры, вроде населения, например. Но у меня сейчас особо времени нету ковыряться с этим, может быть на днях.
  7. @MrIgr, https://translate.google.com/translate?hl=ru&sl=zh-CN&tl=ru&u=http%3A%2F%2Fwww.trainfevercn.com%2Fcategory%2Fmod&sandbox=1 Как-то у них всё очень печально там.
  8. @Kapusta, есть мод, включающий отключенные модами ачивки... Только есть мнение, что он с последним патчем не работает. Но я вот не спешу разрешать игре обновляться и всё нормально. Кстати, школы, вроде, по крайней мере, в краткосрочной перспективе, преступность очень даже повышают.
  9. @strong, попробуйте другие версии драйверов, другую ОС (если есть возможность), другую видеокарту (также, если есть такая возможность). Говорить о том, что видеокарта отдаёт концы, можно, пожалуй, если драйвер стабильно отваливается в различных хорошо нагружающих видеокарту программах.
  10. Версия 1.0 (beta)

    703 скачивания

    4Е10 - односекционный Грузинский электровоз постоянного тока 3 кВ, разработанный на базе ВЛ10. Позиционировался как грузовой, однако используется, в основном, в пассажирском движение. Для работы мода нужны запчасти ВЛ10.
  11. @Alex, если быть точным, если задать уровень насильно выше текущего, то на этом месте строится здание на уровень выше текущего, оно тут же сносится и возникает здание ещё уровнем выше и т.д. Если задать уровень ниже текущего, то ничего не происходит, если только тут же не вызвать снос здания... и оно опять начнёт левелиться с нуля. Вообще, по поводу всех этих "возможно" - т.к. игра чуть менее чем полностью написана на C# поверх Unity и никак не обфусцирована, её скрипты очень легко декомпилируется и заменяются. Возможно всё, в теории. На практике, без какой-либо документации (кроме минималистичного "моддинг апи") в этих скриптах чёрт ногу сломит и разбираться, что и откуда берётся требует довольно много времени.
  12. Возможно. Воу-воу, да тут сурцы на гитхабе под GPLv2. Стиль кода ужасает, но тут гораздо лучший способ получать ид здания и панельку гуя, чем до которого докопался я. Схороню.
  13. А ещё можно попробовать сократить число перекрёстков, пустив улицу зигзагом, например.
  14. @Hitzu, насчёт кистей изменения рельефа, думаю, возможно. На счёт мостов хз. Завтра гляну, можно ли с этим что-то сделать.
  15. @Alex, https://yadi.sk/d/P6YidqSQfNWkQ, в окне зональных зданий появляется кнопка рядом с уровнем, позволяющая запретить левелинг. Основная проблема сейчас: если не закрывая окно кликнуть по другому зданию, кнопки остаются связаны с предыдущим зданием. А ещё я пока толком не тестировал, будет ли оно правильно сохраняться/загружаться и не похерит ли сейв, так что к имеющимся городам это не стоит сразу применять. Ну или бекапы наше всё. На счёт расширения полей под зональные здания пока ничего не знаю, но боюсь, что подобное захардкожено.
  16. 10 лет разработки и 4 миллиарда долларов, чтобы узнать, по какому домику кликнул игрок Подвижки есть, кликнутый дом я научился получать рейкастингом. Но пока остаются некоторые не решённые проблемы, например: нельзя просто кликнуть по другому дому - окно информации надо обязательно закрыть и открыть снова, чтобы кнопки в нём обновились. Если кому интересно и не отпугивают подобные косяки, могу скинуть текущую версию. И да, принимаю идеи для модов.
  17. @Alex, в общем я пока не нашёл, как: Получить идентификатор выделенного здания; Получить объект этой самой панели, чтобы добавить в неё кнопку. Просто пришпандорить кнопку на экране не представляет проблемы, но выглядеть это будет не очень. Upd. Способ найден. У меня есть ряд предположений, как это можно сделать, но тестирование этого происходит крайне медленно, так как: Если я запущу одновременно VS и игру, ноут впадает в полный транс, так что игру я перезапускаю; Каждый перезапуск CS занимает минут 15. Пляски с бубном сократили время загрузки игры до 3-5 минут, что вполне приемлемо. Такие дела.
  18. @Alex, так как в метод передаётся идентификатор здания, можно просто хранить идентификаторы "замороженных" зданий и проверять, не входит ли идентификатор здания в их число. Самое сложное тут - сделать кнопку
  19. @Alex, а вот с этим всё достаточно просто, поскольку разработчики удосужились создать отвечающий за это интерфейс ILevelUpExtension и соответствующий класс LevelUpExtensionBase. Он содержит четыре метода: ResidentialLevelUp OnCalculateResidentialLevelUp(ResidentialLevelUp levelUp, int averageEducation, int landValue, ushort buildingID, Service service, SubService subService, Level currentLevel); CommercialLevelUp OnCalculateCommercialLevelUp(CommercialLevelUp levelUp, int averageWealth, int landValue, ushort buildingID, Service service, SubService subService, Level currentLevel); IndustrialLevelUp OnCalculateIndustrialLevelUp(IndustrialLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID, Service service, SubService subService, Level currentLevel); OfficeLevelUp OnCalculateOfficeLevelUp(OfficeLevelUp levelUp, int averageEducation, int serviceScore, ushort buildingID, Service service, SubService subService, Level currentLevel); Если я правильно понимаю, один из данных методов вызывается в зависимости от типа здания, когда изменяются окружающие его условия. Через параметры передаётся: текущий уровень здания (currentLevel); уровень, к которому оно стремится (поле targetLevel структур *LevelUp); идентификатор здания, по которому можно получить дополнительную информацию о нём через менеджеры; некоторые условия окружающей среды, вроде цены земли; service - судя по всему, условие, из-за которого был вызван метод. Возвращает метод структуру аналогичную *LevelUp, в которой может изменить уровень, к которому здание стремится. Можно, к примеру, переопределить метод OnCalculateResidentialLevelUp так: public override ResidentialLevelUp OnCalculateResidentialLevelUp(ResidentialLevelUp levelUp, int averageEducation, int landValue, ushort buildingID, Service service, SubService subService, Level currentLevel) { levelUp.targetLevel = Level.Level1; return levelUp; } Тогда жилые здания совсем не будут левелиться. Если же, например, изменить в третьей строке Level1 на Level5, то здания сразу после постройки будут начинать левелиться до максимума. А вот так можно ограничить рост зданий 3 уровнем: public override ResidentialLevelUp OnCalculateResidentialLevelUp(ResidentialLevelUp levelUp, int averageEducation, int landValue, ushort buildingID, Service service, SubService subService, Level currentLevel) { if (levelUp.targetLevel > Level.Level3) levelUp.targetLevel = Level.Level3; return levelUp; } Полный скрипт, запрещающий жилым зданиям левелиться выше 3 уровня (у них всего 5 уровней) и другим зданиям выше 2 (у них, вроде, всего 3): http://pastebin.com/b2p49eJG. Поскольку, кроме ICities там ничего не используется, должно заработать, если просто скопировать код в файл %AppData%\Local\Colossal Order\Cities_Skylines\Addons\Mods\LevelingLimit\Source\LevelingLimit.cs Думаю, можно попробовать переделать это в виде районной политики или т.п., только тут уже придётся привлекать ColossalFramework и делать dll.
  20. @Bochkarev, пока не знаю, буду копать. По крайней мере, можно получить подробную информацию о каждой машине в игре: её тип, состояние, а главное - путь, по которому она следует. А в пути, вроде, можно и вносить изменения.
  21. Немного потыкался в API, имеющиеся опенсорсные моды и реддит. В общем, на сколько я понял: каждый мод должен лежать в своей подпапке в %AppData%\Local\Colossal Order\Cities_Skylines\Addons\Mods; мод может состоять из файлов исходного кода в подпапке Source, тогда игра сама его откомпилирует (главный файл должен быть одноимённым с папкой и содержать одноимённый главный класс), либо из откомпилированной dll (также одноимённой с папкой); в случае компиляции самой игрой можно использовать библиотеки ICities и UnityEngine из игры, в случае же самостоятельной сборки dll возможности гораздо шире; мод должен содержать одноимённый класс, наследующий IUserMod и может переопределять классы или интерфейсы из библиотеки ICities игры, в них то можно повесить свою логику на различные события игры. На основе пары примеров я набросал вот такой код для теста (работает только как dll из-за использования библиотеки ColossalFramework): using ColossalFramework.Plugins; using ColossalFramework.UI; using ICities; using UnityEngine; namespace TestMod { public class TestMod : IUserMod { public string Name { get { return "Test mod"; } } public string Description { get { return "Test mod"; } } } public class LoadingExtension : LoadingExtensionBase { public override void OnLevelLoaded(LoadMode mode) { var uiView = UIView.GetAView(); var button = (UIButton)uiView.AddUIComponent(typeof(UIButton)); button.text = "Test"; button.width = 100; button.height = 30; button.normalBgSprite = "ButtonMenu"; button.disabledBgSprite = "ButtonMenuDisabled"; button.hoveredBgSprite = "ButtonMenuHovered"; button.focusedBgSprite = "ButtonMenuFocused"; button.pressedBgSprite = "ButtonMenuPressed"; button.textColor = new Color32(255, 255, 255, 255); button.disabledTextColor = new Color32(7, 7, 7, 255); button.hoveredTextColor = new Color32(7, 132, 255, 255); button.focusedTextColor = new Color32(255, 255, 255, 255); button.pressedTextColor = new Color32(30, 30, 44, 255); button.playAudioEvents = true; button.transformPosition = new Vector3(-1.5f, 0.9f); button.eventClick += delegate { DebugOutputPanel.AddMessage(PluginManager.MessageType.Warning, "Button clicked!"); }; } } } Скомпилированная dll. При запуске игры оно создаёт в левом верхнем углу экрана кнопку в стиле стандартных кнопок меню, а при её нажатие выводит сообщение в консоль отладки (F7 в игре). Так то, вроде, всё работает. И, похоже, тут нам разработчики дали гораздо большие возможности моддинга, чем в том же Train Fever.
  22. Я пока особо не вникал, но http://www.skylineswiki.com/Modding_API
  23. @Demigod12345, могу, но... пока не знаю, когда у меня до этого руки дойдут.
  24. А мне продолжает везти на баги... Он тихонько сполз в нормальное положение сквозь порт. Это вообще законно?