Просмотр полной версии : Триггер "пассажирская платформа"
Наделал саму СССРовскую платформу :)
Выполнена в виде триггера. Устанавливается где-то посередине пути рядом с "реальной" платформой. Зелёный кубик находится справа от правильного направления пути (т.е. если в настройках ничего не менять, то он должен залезать на(под) платформу)
Естественно, пассажиров на платформу на карте он не ставит, но пронаблюдать за пассажирами в вагоне, отследив момент загрузки, вполне можно. (Загрузка происходит мгновенно - да простят меня те, кто хотят постепенного увеличения/уменьшения числа пассажиров)
Теперь настройки
1) автоматический режим открывания дверей/ не открывать двери
первый предназначен для обычного ПС. Двери открываются у всех вагонов, остановившихся у этой платформы. Для закрытия дверей надо
либо прогудеть, нажав h
либо отправиться
Не открывать двери - предназначен для скриптованного ПС. Погрузка, правда, при этом будет происходить и через закрытые двери.
2) вкл/выкл - понятно. Некоторые платформы могут не использоваться, или автору по сценарию надо останавливать пасс возле пригородной платформы без погрузки
3) платформа пригородная/станционная - первая наполняется быстрее (рандом от 15 до 40 секунд), но днём и ночью наполняется не полностью (хорошее наполнение с 5-30 до 9-00 (утром) и с 16-00 до 17-00 (вечером)). Станционная - наполняется дольше (30-70 секунд), но наполняемость всегда не меньше 70%
если вы закроете двери слишком рано, то загрузки не будет
4) конечная станция - понятно. Выгрузка всех пассажиров
5) платформа правая/левая - если по сценарию надо открыть двери с другой стороны
Лежит тут http://dump.ru/file/4406219
На движение составов не влияет. Стоп-кран не реализован :)
Жду отзывов :) . Если понравится, разрешаю выложить на trainz.ru
Gregory_777
07.03.2010, 08:33
Ухтышка!!!
Для тестов подойдет, но не для нормального использования.
Сообщение при нажатии T такое: "DriverDisplay", "ResetTripMeter"
в 2006 такого сообщения нет (я в ней пока работаю). Хорошо, сделаю
переделал http://dump.ru/file/4407050
Единственное что - протестировать не смог. А так должно работать :)
В 2006 двери открываются автоматически, в 2009 и выше - по клавише T (закрываются и по свистку, и по T)
Диспетчер
07.03.2010, 14:39
переделал http://dump.ru/file/4407050
Единственное что - протестировать не смог. А так должно работать :)
В 2006 двери открываются автоматически, в 2009 и выше - по клавише T (закрываются и по свистку, и по T)
Здорово получилось,спасибо!Теперь как в RW можно производить посадку пассажиров......:)
Tram, хорошая вещь, но почему в 2006-м до сих пор? Сапожник без сапог?;)
Всё, готово :)
http://dump.ru/file/4407305
оставшиеся баги поправил
Tram, хорошая вещь, но почему в 2006-м до сих пор? Сапожник без сапог?потому что у Volk'a 2006. А полувагон, сс*ка, заколдованный - одинаковые версии, а работает по-разному
Это сообщение появилось в классике с новой версией Custom HUD.
Это сообщение появилось в классике с новой версией Custom HUD.не знал :)
зы - тестить будешь?
Проверил. Работало все, кроме загрузки, число пассажиров не менялось.
Что нужно для готовой к употреблению версии:
Работа со скриптованным ПС. Через GetProperties(). Сразу предлагаю вариант:
Используется тег и именем scripteddoors, содержащий строку с форматом doors [d1] [d2] [d3] ..., где [d1], [d2], [d3] — номера открытых дверей, нечетные для левых, четные для правых.
В контейнере scripteddoorsconfig в extensions для каждого номера двери содержится скорость посадки/высадки, пассажиров/сек.
Примерный алгоритм: при остановке поезда триггер проверяет все (для пригородного — только вошедшие в его зону) вагоны в поезде, если нет ни одного со скриптованными дверьми — ждем сигнала T.
Иначе каждую секунду проверяем каждый вагон, в каждом вагоне проверяем открытые двери, через них загружаем количество пассажиров, указанное в конфиге.
Невозможно точно определить конечную станцию, поэтому я предлагаю при двойном нажатии T выводить браузер с вариантом выгрузить все.
Количество пассажиров на станции должно определяться временем суток. Вроде такого:
http://trainz.tramsim.com.ua/objects/tramstop/propwin.jpg
Должны быть месседжы "PassStationTrigger": "TrainStopped", "LoadStarted", "LoadCompleted", "LoadEnded" от триггера к поезду, для того, чтобы сценаристы имели возможность контролировать насколько хорошо машинист выполняет расписание и обслуживает пассажиров.
Для ИИ нужны команды. Значит, нужно предусмотреть хэндлеры.
В GetProperties должен быть признак для КЛУБа. Насчет этого стоит связаться с Александром :)
Если ты занят, я могу доработать твой вариант по 1, 2, и 5 пунктам как наиболее важным.
кроме загрузки, число пассажиров не менялосьждать надо :) . Для пригородной платформы - от 15 до 30 секунд
Примерный алгоритм: при остановке поезда триггер проверяет все (для пригородного — только вошедшие в его зону) вагоны в поезде, если нет ни одного со скриптованными дверьми — ждем сигнала T.
Иначе каждую секунду проверяем каждый вагон, в каждом вагоне проверяем открытые двери, через них загружаем количество пассажиров, указанное в конфиге.триггер он на то и триггер, чтобы не знать какие вагоны на него наехали. Только индустрии. А у индустрийных триггеров зона действия не более 150 метров. Так что не для обычного триггера это дело - это должны быть парные (типа X-маркеров сигналки) fixedtrack'и, обозванные industry
Невозможно точно определить конечную станцию, поэтому я предлагаю при двойном нажатии T выводить браузер с вариантом выгрузить все.можно. Но это потом
Количество пассажиров на станции должно определяться временем суток.у меня пока нет понятия "число пассажиров на станции". Загрузка ведётся чистым рандомом числа пассажиров в вагоне. НО. У пригородной платформы, как я сказал, этот рандом зависит от времени.
"TrainStopped", "LoadStarted", "LoadCompleted", "LoadEnded"у меня просто загрузка происходит мгоновенно - я это писал в заголовке. По сообщению "TriggerInd","Start" . "TrainStopped" - ловится при помощи Sniff'а с поезда :)
Для ИИ нужны команды. ИИ должен перед отправлением гудеть - согласно ИСИ.
Команда, которая бы имитировала "DriverDisplay", "ResetTripMeter" - да, нужна.
могу доработать твой вариант по 1, 2, и 5 пунктам как наиболее важным.я не против :)
триггер он на то и триггер, чтобы не знать какие вагоны на него наехали. Только индустрии. А у индустрийных триггеров зона действия не более 150 метров. Так что не для обычного триггера это дело - это должны быть парные (типа X-маркеров сигналки) fixedtrack'и, обозванные industry
Train.GetVehicles()
у меня пока нет понятия "число пассажиров на станции". Загрузка ведётся чистым рандомом числа пассажиров в вагоне. НО. У пригородной платформы, как я сказал, этот рандом зависит от времени.
Платформы бывают большие и маленькие :)
у меня просто загрузка происходит мгоновенно - я это писал в заголовке. По сообщению "TriggerInd","Start" . "TrainStopped" - ловится при помощи Sniff'а с поезда :)
Что означает, что триггер неприменим для интенсивного пригородного сообщения и метро, где длительностью процесса посадки/высадки пренебрегать нельзя.
ИИ должен перед отправлением гудеть - согласно ИСИ.
Команда, которая бы имитировала "DriverDisplay", "ResetTripMeter" - да, нужна.
В Мск собаки не свистят. Поэтому гудок — плохой признак. Лучше, опять же, T. Для ИИ нужна команды начала, окончания и всего процесса (с временем).
Train.GetVehicles()что то я затупил. GSTrackSearch. И Vehicle.GetLength()
Что означает, что триггер неприменим для интенсивного пригородного сообщения и метро, где длительностью процесса посадки/высадки пренебрегать нельзя.погрузка происходит через 15-30 секунд после открытия дверей. Если двери закроют раньше - погрузки вообще не произойдёт. Другое дело что погрузка не наблюдается в реальном времени - с этим минусом согласен. Хотя попробуй определи, закончили ли люди появляться или нет :)))), если в реальном времени
В Мск собаки не свистятна савёловском ещё как свистят :)
Платформы бывают большие и маленькиеа число пассажиров меняется мало :)
через них загружаем количество пассажиров, указанное в конфигене. Число пассажиров, определяемое рандомом, в диапазоне, указанном в конфиге
Tramwayz
07.03.2010, 22:52
В Мск собаки не свистят.
Я те дам "не свистят", ещё как свистят, по крайней мере на Кивухе.
Кстати, через SetMeshTranslation можно всякое веселье делать.
В GetProperties должен быть признак для КЛУБа. Насчет этого стоит связаться с Александром Пока остановились на признаке, что это ОП\станция и названии.
погрузка происходит через 15-30 секунд после открытия дверей. Если двери закроют раньше - погрузки вообще не произойдёт. Другое дело что погрузка не наблюдается в реальном времени - с этим минусом согласен. Хотя попробуй определи, закончили ли люди появляться или нет ))), если в реальном времени Еще в метро часто принудительно обрывают посадку, нужно и этот момент отработать :)
По свистку, ИМХО, делать не стоит. Ибо в пригородном часто свистят уже после дверей, в метро вообще не свистят и в целом это не связанные между собой вещи.
в 2006 свисток - единственная обрабатываема вещь. Новичкам - элекропоездникам такая штука понадобится. А метро для 2006 не будет - ты сам знаешь в какие тормоза превращаются полигоны тоннелей в ней. В 2009 уже этот триггер запускает посадку по клавише T (в 2006 - сразу, я на это заплатку поставил)
SetMeshTranslation можно всякое веселье делать.а если добавить поворот, и телескопические анимации, то получаем универсальный инструмент под перемычки
Еще в метро часто принудительно обрывают посадку, нужно и этот момент отработатькогда посадка мгновенная, её не оборвёшь (по определению слова "мгоновенный"). Тут алгоритм вычисления захода/ухода просто надо сделать
когда посадка мгновенная, её не оборвёшь (по определению слова "мгоновенный") Я про постепенную. В метро это (время посадки-высадки) определяющая величина для всего.
погрузка происходит через 15-30 секунд после открытия дверей. Если двери закроют раньше - погрузки вообще не произойдёт. Другое дело что погрузка не наблюдается в реальном времени - с этим минусом согласен. Хотя попробуй определи, закончили ли люди появляться или нет :)))), если в реальном времени
Но задача машиниста — следить за посадкой-высадкой. И не трогаться, пока всех не посадил. Я считаю, что будет интересно вести собаку в тяжелом графике с интенсивным пассажиропотоком, матерясь на ОП и нагоняя в пути.
А уж как следить — да хоть ХУД с красным и зеленым огнем.
а число пассажиров меняется мало :)
Ничуть, возможны и крутые различия.
На мелком ОП их может быть пяток-другой, для собаки — секунда. А на пересадочном узле — сотни.
К тому же, количество пассажиров требуется для объектов, генерирующих анимированных пассов. Это ты нас заразил, да? :)
не. Число пассажиров, определяемое рандомом, в диапазоне, указанном в конфиге
В конфиге скорость посадки/высадки.
Тут алгоритм вычисления захода/ухода просто надо сделатьу меня рандомно вычисляется новое количсество пассажиров вагоне. А делать рандом несколько раз - бессмыслено. А если сделать "количество садящихся пассажиров", "количество выходящих пассажиров" - это другое дело. Тогда погрузку растягивать по времени уже можно
К тому же, количество пассажиров требуется для объектов, генерирующих анимированных пассов. Это ты нас заразил, да?но надо ж и делать анимированных пассажиров, ожидающих поезд. И делать это всё как минимум полгода
А триггер сделан полностью за вчерашнюю ночь - с 20-00 по 4-30 (итого 8,5 часов моей жизни, но на полгода обеспечит сообщество вполне работоспособными платформами)
Кстати, через SetMeshTranslation можно всякое веселье делать.а, понял. У меня абсолютно идентичные идеи были ещё в начале 2009 (но с вложенной анимацией, о SetMeshTranslation тогда ещё не знал), аж 10 страниц описания пассажиров, занимающих очередь на погрузку тогда исписал :)
Я считаю, что будет интересно вести собаку в тяжелом графике с интенсивным пассажиропотоком, матерясь на ОП и нагоняя в пути. И утрамбовывание их дверями, срывы стоп-крана, если кого-то зажало...
В конфиге ПСа?
но надо ж и делать анимированных пассажиров, ожидающих поезд Ну это уж слишком... Хотя. ОЖИДающих и устремляющихся штурмовать двери) Мне все не дает покоя Выхино...
о SetMeshTranslation тогда ещё не знал Лол, я в каждой новой версии первым делом лезу в train.gs, locomotive.gs и meshobject.gs.
И утрамбовывание их дверями, срывы стоп-крана, если кого-то зажало...то появится новая каста в трс - "собаководы"...
ПСа?чего угодно :)
Лол, я в каждой новой версии первым делом лезу в train.gs, locomotive.gs и meshobject.gs.а я в Vehicle.gs :)
так, кому ещё удалось дождаться погрузки от этого триггера ? Или я опять его недотестил?
чего угодно Я просто вот думаю, должна ли эта информация быть статичной?
так, кому ещё удалось дождаться погрузки от этого триггера ? Или я опять его недотестил?
Вроде загружает, только необычно как то. Или так и задумано?
Подогнал эелектру в 11 вагонов. Где то пасы уже были. Постоял на тригере секунд 30. В середине состава оказались вагоны пустые, по краям забиты :D
Вроде загружает, только необычно как то. Или так и задумано?да
В середине состава оказались вагоны пустые, по краям забитырандом так сработал :)
да
рандом так сработал :)
Ну тогда классная вещь =) Спасиб. Как раз маршрут сейчас строю пригородный реальный. Ой как пригодится.
Новый вариант в процессе. Готовы пункты 1, 3, 4, 6.
в пункте 3 не забудь рандом сделать :)
А он нужен? Вряд ли кто-либо будет ползать по вагонам проверяя сколько именно загрузилось. Важно лишь затрачиваемое время.
Миша ! Я тебе сказал сделать рандом, заначит надо :) Тем более время тоже должно быть немного рандомным. А то что за смысл - " в этом сценарии на платформе А стоять 10 секунд, на платформе Б - 20 секунд " . Это не дело!
А можно я выскажу предложение? Ну думаю можно.
Закрытие по гудку (клавиша H) это отлично, так же как и закрытие при трогании. Но может стоит ещё добавить закрытие по свистку (клавиша b) Потому что в реальности редко кто даёт пронзительный длинный гудок в пригороде. Ну а если нет так нет.
И вопрос, а можно ли как то с помощью этой штуки реализовать следующее:
Имеем путь. По бокам от него платформы. Тоесть, электра подъезжая к станции может открыть двери с одной стороны и с другой. Так вот можно ли сделать как то так,что бы некоторые поезда открывали двери на одну сторону, а другие на другую?
кстати, у тебя какой трс? если 2009, то можешь закрывать и по t. А вообще подумаю насчёт b
по второму - думаю пока нет. Перед началом игры можно выбирать сторону (правый/левый), для отдельных сценариев вполне достаточно. Но вот менять эту сторону в процессе игры...
кстати, у тебя какой трс? если 2009, то можешь закрывать и по t. А вообще подумаю насчёт b
2009 и 2010. Сейчас уже всё на 2010 перетаскиваю.
по второму - думаю пока нет. Перед началом игры можно выбирать сторону (правый/левый), для отдельных сценариев вполне достаточно. Но вот менять эту сторону в процессе игры...
Перед началом я знаю :)
Кстати,а нужно именно точное физическое присутствие ПС на тригере для открытия дверей? Или существует какой то радиус действия, где тригер "захватывает" ПС? Я к тому что если не доехать например 1 метр физически до места установки тригера? Двери не откроются?
радиус действия около 50 м
20, если быть точным. Радиус триггера можно настроить там, где находится список с маркером, триггером и т.д.
Такс, вот и итог проб и ошибок: http://narod.ru/disk/18923127000/RF%20PassStationTrigger.cdp.html
Работает: начало и прекращение погрузки по Т, показ HUD'а по двойному Т.
В худе можно выбрать вид процесса, также отображается его прогрессбар.
В настройках указывается сторона платформы, имя, путь (в будущем это будет использоваться во всяких САВП), вид трафика (в пригородном, если поезд весь не влез, то накладывается штраф на скорость посадки/высадки), скорости посадки/высадки по умолчанию (скриптованные вагоны должны сами предоставлять эту инфу), длину платформы и величину трафика.
Все числа в таблице трафика — в процентах от общей емкости состава. Я посчитал, что это лучший вариант, так как с одной платформы могут отправляться поезда разной вместительности.
Возможно в дальнейшем стоит различать вид трафика не только по настройке в триггере, но и по поезду. Для этого можно создать отдельный продукт Local Passengers (пригородные пассажиры :)).
Касательно скриптового управления. Информация получается через GetProperties() от вагона. При наличии в нем тега scripteddoors ожидается, что за ним следует два числа — скорость погрузки/выгрузки слева и справа, пассажиров в секунду, дробные значения поддерживаются.
Вопрос, стоит ли различать скорость посадки и высадки (читать 4 числа)?
Месседжей-уведомлений есть три, отсылаются они поезду от триггера:
"PassStationTrigger.Notify", "ProcessStarted <тип процесса>" — о начале процесса
"PassStationTrigger.Notify", "ProcessCompleted" — об успешном его завершении
"PassStationTrigger.Notify", "ProcessAborted" — о неуспешном завершении.
Завершить процесс (в том числе закрыть двери) можно второй раз нажав на Т. Если сделать это до загорания на худе зеленого огня, то процесс будет считаться незавершенным.
О маневрах во время посадки/высадки: они не поддерживаются. Нужно или запускать процесс после их, или завершать до. Из-за невозможности надежно опираться на объект поезд при маневрах, а также необходимости дублировать процесс для двух расцепившихся частей, или сливать в один при сцепке код сильно осложнался, раздувался и работал ненадежно. Решение, которе сейчас у меня назрело — не использовать поезд, а проводить процесс над массивом вагонов. В принципе для этого уже многое в коде готово, но я не могу более заниматься этим маркером, ибо стоят проекты важнее. Кто желает, может этим заняться, скрипт свободен для некоммерческого использования.
АПИ, команды машинисту, правила сессии: их пока нет. Причина указана выше. Но, точно также, база под это дело заложена.
Пока выходные, я смогу исправить в работе баги, если таковые обнаружены. Потом уже мне будет не до этого триггера.
Из-за невозможности надежно опираться на объект поезд при маневрах, а также необходимости дублировать процесс для двух расцепившихся частей, или сливать в один при сцепке код сильно осложнался, раздувался и работал ненадежноприцепные вагоны - не редкость... Постараюсь посмотреть и, может, что-то придумаю
багов вроде не обнаружил. Навесил "внешнюю наблюдательную систему по слежению за расцепкой". Вместо того, чтобы сливать процесс в один, предлагаю просто прекращать старый (и запускать подготовку к новому). т.е.
1)при сцепке/расцепке погрузка в старом поезде прекращается
2)в образовавшемся после сцепки поезде можно выполнять загрузку
3)при отъезде далеко от триггера ожидание завершения загрузки прекращается.
http://ifolder.ru/16909453
тестировал на самые извращённые варианты манёвров у платформы, но багов и в этом варианте выудить не удалось
в общем то, что ночью написал, сегодня перепроверил. Как говорится, "финал" (http://dump.ru/file/4463252)
способен переваривать любые манёвры на станции в любых количествах
нет, оказалось что не финал. Нашёл рекурсию в логике работе, пришлось исправлять.
http://ifolder.ru/16920407
думаю, теперь вполне рабочий
в Д1 для работы с этим триггером дописываем в конфиге
queues
{
passengers
{
size 76
initial-count 12
passenger-queue 1
product-kuid <kuid:-3:10060>
}
}
:)
переделал систему таймеров...
или http://dump.ru/file/4466391 или http://ifolder.ru/16933398
Спасибо! Отличная вещь! А то я из-за этого проклятого "стоп-крана" на своих маршрутах давно посносил на фиг все платформы, и вообще убрал файл GenericPassengerStation.gsl из папки libraries, чтобы выключить посадку-высадку глобально (в играх до TRS 2009 этого делать нельзя, в 2010 - не знаю). Теперь - и вагоны непустые, и стоп-кран никто не рвёт, и двери сам открываешь и закрываешь. Только надо бы пассажиров других прописать - <kuid:-3:10060>, а то 11060 - это старомодные из Классика. А лучше сделать два варианта с разными пассажирами, а то ведь кто-то может и старый паровозный маршрут строить.
Николай44
05.12.2010, 13:43
А можно как-нибудь сделать чтобы поезд под управлением компьютера останавливался у триггера и двери открывал?
А можно как-нибудь сделать чтобы поезд под управлением компьютера останавливался у триггера и двери открывал?
Поддерживаю.
Причем, чтобы останавливался у триггера серединой состава.
earl-of-window
19.08.2011, 14:41
Ну вот я установил это. А где в игре эту станцию искать? Как она в игре называется?
RF pass station trigger если я правильно помню. Искать там же, где светофоры.
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot