Просмотр полной версии : Организация движения ПС, появляющегося из порталов
Всем привет!
Тема возникла в связи с необходимостью организовать движение ПС, который появляется из порталов, в сессии с помощью правил в определенной последовательности. Проблема заключается в том, что правила, которые существуют подразумевают явное указание в редакторе или ПС или машиниста. Но в редакторе то их не существует! Они уже в Drive session появятся.
Например, Schedule Rule, Drive Shedule Rule и т.д.
Задача в следующем. Когда ПС наедет на маркер, в зависимости от того, что или кто именно наехал вставить определенные команды машинисту. SheduleAtTrakMark не подходит, т.к. сначала нужно определить что именно или кто наехал на маркер. Если организовывать подчиненные правила, то две проверки в одной иерархии подчинения не сработают...
Как быть?:confused:
Kompozitor
02.02.2011, 13:56
Животрепещущую тему поднял. Лично я давно мечтаю о команде, которая бы приписывала уникальное имя ПСу, что выехал из портала.
в зависимости от того, что или кто именно наехал
А какже проверка по именам машинистов?
Опиши по порядку схему правил, хочется у себя попробовать, что и как. Или кинь тестовую сессию на какой нибудь дефолтной карте с дефолтным ПС.
А какже проверка по именам машинистов?
Ну и что толку? Ну проверил командой Consist Check. Там можно указывать тип ПС (точнее, сам ПС) из всего списка, а не только из того, что стоит на карте. Но дальше то мне всё равно, кому-то конкретно нужно список команд всучить.
Опиши по порядку схему правил, хочется у себя попробовать, что и как.
Chack trackside
подч- Consist Check
подч- подч- а вот тут что!?
Любому набору команд требуется указание кому именно их присвоить. Вот тут и загвоздка.
DonCapone
02.02.2011, 15:47
Я понял в чем дело. Решал я такую проблему, и кстати тут где-то описано такое решение.
Во-первых, в некоторых сессиях командой driver schedule rule можно задавать команды машинистам, которых нету на карте. Это было на дефолтной карте Avery-drexel. Композитор выдвинул теорию, что для такого эффекта необходима уникольность имён машинистов(в дальнейшем это подтвердилось для дефолтной карты). Но на других картах мне достичь такого не удавалось. Потому, решение только одно:
Создаём на карте ПС с машинистами, имена которых идентичны именам поездов в портале(тех, которым ты собираешься задавать команды). Это будут "фиктивные" машинисты. В редакторе ты назначаешь через driver schedule rule команды нужному машинисту, так как он есть на карте. Чтобы небыло одинаковых машинистов, делаешь так, чтобы в начале сессии "фиктивные" машинисты сразу уехали в порталы и пропали. Затем команды будут задаваться портальным машинистам. Мной это было опробовано и проверено в сценарии: http://www.trainsim.ru/forum/showthread.php?t=13473 Правда там команда задаётся редко, и может не задаться вообще(события сценария построены по рандомному принципу).
Ну а проверку ПС, проходящего по триггеру делаем тупо правилом triggercheck с проверкой по имени машиниста. Там можно задавать имена вообще любых машинистов.
О! Эврика! DriveScheleRule! Можно задать имя одного машиниста. Ну и хрен с ним, если на маршруте боты, таскающие грузовые составы у меня будут все Андреи, а пассажирские - Томы. Только в редакторе они должны по одному существовать на момент заведения правила!
Это, правда, только теория. Сейчас проверю работоспособность этой идеи.
Не, не взлетит... Даже без теста прозрел. Если на карте два Андрея - кому из них команды присваивать? Коллапс...
А что касается уникальности имен машинистов, портал может штамповать один и тот же поезд хоть три подряд. И вот уже не уникальны...
Думаем дальше...
DonCapone
03.02.2011, 07:30
Не, не взлетит... Даже без теста прозрел. Если на карте два Андрея - кому из них команды присваивать? Коллапс...
Команды даст тому, кто появился первый.
А что касается уникальности имен машинистов, портал может штамповать один и тот же поезд хоть три подряд.
Да, тут только отказ от рандома поможет.
Думаем дальше...
Остаётся только понять, в каком случает DSR позволяет задавать имена всем машинистам, даже тем, которых нет на карте. Попробуй убрать всех машинистов из правила Driver setup, тогда появится возможность задавать через DSR команды любому из имеющихся машинистов. Потом снова поставишь машинистов в driver setup.
Kompozitor
03.02.2011, 08:16
А что касается уникальности имен машинистов, портал может штамповать один и тот же поезд хоть три подряд.
Насчет "подряд" - это же можно, видимо, урегулировать триггерными командами, чтоб первой командой в плане триггерного бота было ожидание какого-либо события, например, дождаться, пока "тёзка" исчезнет в портале.
Мы вот с Don Capone где-то тут перетирали насчет необходимости бота, который будет ездить где-то в лесу, наступая на триггеры через определенное время и выполняя роль часов.
Лично у меня в портальных делах свой интерес - к примеру, должны встретитmся два поезда в пункте смены локомотива и поменяться локами - пофиг, что кто-то раньше или позже прибудет, лишь бы в портале сидел бот и по прибытию поезда через проверку уникального имени вагона был готов сменить лок.
Да, кстати, а как задать появление ПС из портала не рандомно, а по порядку, как задал?
А вообще, я вот подумал, что использование порталов для появления и исчезновения ПС годится только для покатушек. Если делать серьёзную сессию/сценарий, то в них ПС должен использоваться по назначению. То есть, вагоны - разгружаться и загружаться, соответственно нужно устраивать оборот вагонов. Локомотивы должны "жить" в депо и становиться под состав по мере необходимости и т.д.
Так что, не так страшен черт, как его малютка. :-)
DonCapone
03.02.2011, 16:15
Да, кстати, а как задать появление ПС из портала не рандомно, а по порядку, как задал?
Отвечает Капитан Очевидность: в настройках портала Order to emit вместо Random поставить Sequential
При условии, конечно, что ты изначально добавил поезда в портал в нужном порядке.
Если делать серьёзную сессию/сценарий
Твои планы ещё страшнее планов Композитора :)
Твои планы ещё страшнее планов Композитора :)
это нереальный объем работ:crazy:
DonCapone
03.02.2011, 16:23
Ну... объём работ ещё может уложиться в голове. Нереально время, нужное на тесты. При создании сессий работа - это процентов 30 времени. Остальное - тесты.
Скорее ауран допилит мультиплеер/взломают мультиплеер, и такие функции будут выполнять игроки, чем кто-то заставит грамотно работать по такому алгоритму ботов.
О да, я этого и жду)
Процентов 30...если куча крупных станций и ПС, и каждому ПС нужно куча заданий...проценты резко повысятся:)
DonCapone
03.02.2011, 16:45
Нет. Тут затраты на тесты растут пропорционально затратам на разработку. Особенно ближе к концу создания. Ну... конечно если у тебя на этих крупных станциях куча ПС должна выполнить задания минут за 20, то да, тут время на тесты не много потратится :)
Ууу, как всё запущено! Да тут не только и не столько в порталах дело, в конце концов, можно обойтись и без них, а сколько вообще о необходимости какой-то конструкции, которая бы четко проверяла кто/что именно проехало по маркеру, прежде, чем командой ScheduleAttrackMark изменять набор команд проехавшему.
У меня маневровый на станции во время маневра наткнулся на маркер с командами, предназначенными поездному составу. А как это обойти с помощью правил (собственно, и команды правилом добавляются) пока не придумал и подозреваю, что весьма затруднительно это сделать, если вообще возможно.
DonCapone
04.02.2011, 13:59
роверять кто/что проехало по маркеру можно обычным триггерчеком. Триггер ставь прямо радом с маркером, на котором задаётся ScheduleATTrackmarck. В триггерчеке укажи, кого именно проверять, и обязательно сними галочку "wait for child rules to complete even if there is no train at trigger". Тогда SAT будет работать только когда на триггере находится нужный поезд. Когда нужный поезд съедет с триггера, SAT перестанет выполняться.
Kompozitor
04.02.2011, 19:16
портал может штамповать один и тот же поезд хоть три подряд. И вот уже не уникальны...
Грубо говоря, я примерно такое хочу - в портале, находящемся, допустим, в депо Полтава и построенном специально для ночного экспресса "Киев-Харьков", находится лок и по триггеру ждет только этот поезд. А для дневного экспресса можно отдельный портал поставить с другим именем бота и с проверкой другого состава по имени вагона.
А следующий "подряд" должен выполниться, когда поезд совершит полный оборот и опять прибудет на станцию. К этому времени первый лок, вышедший из этого же портала уж точно должен исчезнуть в портале конечной станции своего плеча и вопрос с "однофамильцами" отпадает.
То есть в моих "страшных" )) задумках порталов должно быть очень много и они только для локов. вагоны не должны ни попадать, ни исчезать в порталах, т.к. их уникальные имена важны для сессии.
Не, в итоге я от порталов отказался. Вагоны должны на путях стоять, а локомотивы - в депо. И оттуда выходить под состав.
Сейчас другой вопрос возник. Впрочем, сначала о Check trigger. Там третья галка, как я понял, обуславливает срабатывание проверки триггера. Вот фраза мне не понятна: "... train is heading forward/backward inti the trigger". Поезд всегда передом идёт. Что это означает?
И теперь мой вопрос. Перед конечной, тупиковой станцией нужно убрать по маркеру все команды и заменить на другие. Так сказать, прибытия на конечною станцию. Есть такое правило, но там нужно указать машиниста конкретного.
Kompozitor
04.02.2011, 22:13
а локомотивы - в депо. И оттуда выходить под состав.
Ну считай, что ты, допустим, приехал в депо, сдал лок маневровой бригате, которая погнала его в цех(в нашем случае-портал в цеху) Тебе на это уже фиолетово, ты этого не видишь, ты вообще сел в электричку и поехал с работы домой.
Просто для бесконечной сессии без порталов 100500 локов надо.
фраза мне не понятна: "... train is heading forward/backward inti the trigger". Поезд всегда передом идёт. Что это означает?
Видимо, направление триггера. Триггер, хоть и симметрично выхлядит, имеет свой зад и перед. Вот в этом смысле, наверно - в спину или в лицо триггеру ПС смотрит, когда едет.
Реализовать бы еще появление вагонов.. впринципе дать команду маневровому, чтоб он выкатил состав и уехал обратно в портал. Но выкатывать до бесконечности он не может, да и игрок ездит не со скоростью самолета:(
Kompozitor
04.02.2011, 22:33
Реализовать бы еще появление вагонов..
Да они и без лока могут появляться из портала. Я, например, хочу сесть в вагон в начале карты, и проехать всю карту в этом вагоне, а портальные локи пусть меняются.
Тут вариантов много, смотря кем ты хочешь быть в сессии - машинистом или пассажиром. Мне нужно и то и то в одной сессии.
Я например хочю так: появились вагоны из портала, я подцепил и уехал. Потом например приехал на ту же станцию - и стоит другой состав, который опять же я подцепляю и т.д. Но станция тоже не резиновая:) Пути закончатся и усё(
Kompozitor
05.02.2011, 00:02
Dublin, да не вопрос. Из другого портала может появляться лок, который и будет забирать твои вагоны куда ты хочешь.
И в том, что имена вагонов не уникальны, нет проблем - есть команды, позволяющие цепляться не по имени вагона, а по маркеру или собранному маршруту.
Я имею ввиду если бот будет на ОДНУ станцию вагоны приганять из портала)Он их будет ставить и ставить, а я не буду успевать их вывозить)Или лучше большой интервал времени "вывозки" боту дать
Триггер, хоть и симметрично выхлядит, имеет свой зад и перед. Вот в этом смысле, наверно - в спину или в лицо триггеру ПС смотрит, когда едет.
"Рыбаки ловили рыбу,
А поймали рака.
Целый день они искали
Где у рака срака!" :rofl:
Это из народных частушек. Сто баллов! За "хоть и симметрично выхлядит, имеет свой зад и перед." Ржал до опупения!.. А общем методом тыка придется...
Рыбаки ловили рыбу,
А поймали рака.
Целый день они искали
Где у рака срака!если я правильно помню курс 7 класса по биологии, то выделительная система у рака на морде.
"хоть и симметрично выхлядит, имеет свой зад и перед."в одной из версий он был сдвинут в сторону (?), тогда можно было бы определять.
Kompozitor
05.02.2011, 02:04
А общем методом тыка придется...
Дык создай триггер с другой мешью, чтоб было ясно, куда он смотрит.
А меня можешь в оффтопе АПа занести в соответствуюшую хохмотему.
На память, так-скать. :p
в одной из версий он был сдвинут в сторону (?),
О, точно - тег trackside поменять.
DonCapone
05.02.2011, 05:45
Видимо, направление триггера. Триггер, хоть и симметрично выхлядит, имеет свой зад и перед. Вот в этом смысле, наверно - в спину или в лицо триггеру ПС смотрит, когда едет.
Этож надо так смысл переврать! "train is heading forward/backward inti the trigger". Выделенный текст не наводит ни на какие мысли? :)
У триггера нет зада и переда, он симметричен. Зад и перед есть у маркера.
Сие означает "Срабатывать если поезд проезжает триггер передом/задом". То есть, грубо говоря, вперёд едет поезд, или реверсом.
Реализовать бы еще появление вагонов.. впринципе дать команду маневровому, чтоб он выкатил состав и уехал обратно в портал.
Так и делается: в портале сразу создаётся нужный состав, в голове у него маневровый. Машинисту маневрового сразу задаются команды после вывода вагонов загрузить их, отцепиться, уехать в портал.
Но выкатывать до бесконечности он не может
Это ещё почему? Выкатили состав - те его взял, и уехал. Пока ты уехал - выкатывают новый состав туда же. Ты его потом опять цепляешь. Так до бесконечности. А там, куда ты привёз состав - выезжает другой маневровый, уже без вагонов, и загоняет в портал привезённый состав.
Он их будет ставить и ставить, а я не буду успевать их вывозить)
А, вот что. Ну так ты выводи составы не по времени, а по условям, используя CPC:Emit train.
Это, в общем-то, и было частью концепции моей бесконечной сессии, но всё споткнулось об один момент: портал жрёт поезда и передом и задом, поэтому при прицепке состава портал, предназначенный для пожирания маневрового поезда может съесть и тебя.
Перед конечной, тупиковой станцией нужно убрать по маркеру все команды и заменить на другие. Так сказать, прибытия на конечною станцию. Есть такое правило, но там нужно указать машиниста конкретного.
Можно менять команды тем же ScheduleAtTrackmarok, в связке с триггерчеком с временным срабатыванием. Я уже выше объяснил, как это.
А там, куда ты привёз состав - выезжает другой маневровый, уже без вагонов, и загоняет в портал привезённый состав.
А, вот что. Ну так ты выводи составы не по времени, а по условям, используя CPC:Emit train.
А можно в этих моментах поподробнее? Я не силен в правилах:(
И какое все таки правило давать маневровому, что бы забрал состав когда я его привезу? По идее если указать номер вагона, маневряк будет ждать его появления "на свет" из портала, а затем он за этим вагоном должен поехать!?
Kompozitor
06.02.2011, 23:06
Dublin, возьми еще пачку правил и команд с ДЛС. Там есть интересные команды для прицепки к ПС независимо от имени вагона. Это важно, например, если вагон из портала.
Поосто можно указать, за каким маркером или сигналом цепляться.
http://rghost.ru/3264886
А можно сделать как то проще, чем боту прописывать каждое название станции? А если это электричка, так этих станций вообще с ху тучу:confused:
Kompozitor
07.02.2011, 02:31
Dublin, "как-то проще" - это, допустим, выполнять запакованные "Shedule Library", например, чтоб не прописывать одни и те же задания всем ботам. На трамвайных и метрошных картах это повсеместно применяется.
Как бы полаконичней - допустим, в нем указано, что должен делать машинист между Харьковом и Киевом. И не важно, откуда и куда поезд - из Москвы или до Львова. бот приехал в определенную точку, выполнил "Copy command" из библиотеки, а дальше другую библиотеку выполнит. И потом, это удобно, когда в бесконечной сессии хочешь взять у бота управление на себя. выкинул мышкой запакованное "Shedule Library" и сам рули. А дальше отдал лок боту и он уже следующий план распакует и выполнит.
Это стандартная команда или из пака команд с ДЛС?
Kompozitor
07.02.2011, 02:53
Это из пака Js-Trf, где path Control. А по поводу тех, что я выложил, там много неясностей. Вроде и куиды все, только не ясно, что с чем надо употреблять.
зы: "Shedule Library" - это не команда, а правило. Команды - "Copy commands".
А если это электричка
Отож-бо для них это самое удобное. Один раз насоздавал командный список, и пущай выполняют все.
WaitUntilNotRed
А это правило что творит?
Поезд будет стоять и выполнять эту команду до тех пор, пока на светофоре красный. Когда будет жёлтый или зелёный, команда выполнится и поезд будет выполнять следующую.
Так а смысл. Бот и так на красный не проедет
стрелки бот лишний раз дёргать не будет.
Вобщем составил я маршруты в path control, поставил в задании машиниста этот контрол+автодрайв(к какому то трэкмарку). Когда зашел в игру - вроде все нормально, поезд потихоньку выкатывается из портала, в списке заданий почему то пропал path control...И когда поезд подъезжал к стрелке - остановился, ждал освобождения состава, потому что стрелка была переведена не в его направление. Что я не так сделал? Стрелки сам бот не переводит!:mad:
Нельзя заходить из-под редактора при использовании path control. Надо выходить из него и загружать миссию отдельно.
У меня и привычки то нет из редактора запускать. Может пропустил какой то момент?
И как ставить автодрайв, если он требует назначение к маркеру(drive to), тогда какой смысл path-control?
Kompozitor
08.02.2011, 01:11
Dublin, если ты будешь использовать команды типа "navigate..." совместно с path-control, то перед первой же стрелкой или светофором ПС остановится "в недоумении".
Стандартные команды можно применять, когда голова уже проследовала сигнал или стрелку.
Стрелки сам бот не переводит
А он какбэ и не должен их переводить.
Так автодрайв и поставил (уже неважно куда ему путь)
Kompozitor, я стрелку перевел - и бот стоит ждет пока ему переведут ее обратно!:mad:
Вобщем то пока это единственное что мне не нравится: при переводе стрелки в другую сторону(вручную) бот переходит в режим "Ожидает освобождения пути"
Хотя еще одно есть: на какой маркер ставить автодрайв (а может и неважно при path control)
Kompozitor
08.02.2011, 01:44
на какой маркер ставить автодрайв (а может и неважно при path control)
На тот, который лежит на пути собранного маршрута.
Иначе бот будет вечно ехать, пока ему не подвернется маркер "Владивосток" по пути из Харькова в Мариуполь. ))
(вручную)
Ничего не надо "вручную", если эта стрелка участвует в "path". Отдавай просто команды, а если отдал "set path", то по нему надо обязательно проехать ПС ом с начала до конца. И вообще, вся эта система не должна давать тебе перключить вручную, стрелки блокируются, пока хвост ПС не проедет маршрут в направлении сборки от сигнала к сигналу.
Я вот нифига не пойму: собрал бот маршрут или нет?
Если переводить боту стрелки вручную, то крыша съедет окончательно. Поидее контрол должен блокировать стрелки?
Может какой то порядок заданий должен быть: сначала драйв, потом контрол или наоборот?
Kompozitor
08.02.2011, 01:59
сначала драйв, потом контрол или наоборот?
Сначала set path, лучше с "wait", а то вдруг другие боты что-то рядом творят, так тебе не соберется, пока не проедет тот, кто собрал на секунду первее.
маршрут в редакторе должен быть заделан, допустим - от выходного до первого проходного. Как только твой хвост или хвост первого бота проедет этот проходной, команда set path (wait), которую к тому моменту отдал другой бот, сработает и он отправится.
В общем, на перегон отправляешься после срабатывания set path (wait) с avtodrive "через" маркер, что лежит или в горловине, или на перегоне, желательно до того самого первого проходного. Дальше по всему перегону, если нет примыканий можно вообще не использовать set path, иначе заключишь в свои объятья впередиидущего бота.
А вот при подходе к следующей станции можно доверить точно такой же set path (wait) отдельному боту, который поймает твой ПС по триггерной команде или правилу и начнет выполнять команду по сборке маршрута прибытия или транзита. Если станционные пути заняты, ты в любом случае остановишься перед красным входным.
ага, главное маркер поставить перед проходным...а я методом тыка указывал в драйве, отчего бот и ехал все время прямо, независимо где маркер находится.
А маркер ставить "трекмаркер"?
Kompozitor
08.02.2011, 02:14
А маркер ставить "трекмаркер"?
В принципе, любой, который видится машинистом, как trackmark, хоть от сигналки "Z".
а я методом тыка указывал в драйве, отчего бот и ехал все время прямо, независимо где маркер находится.
Ну вообще-то, если маршрут собран НЕ прямо, то и бот будет ехать туда же, даже если ты укажешь маркер, не лежащий на этом пути.
Kompozitor
08.02.2011, 02:30
Для удобства после срабатывания set path открой мини-карту, маршрут будет выделен жирной линией - вот там и должен лежать маркер.
На пути ПСа и больше нигде.
А прокатит ли такой вариант: я например собираю полностью маршрут из кусков.Тоесть в path control полностью собрать марш. не удается, приходится разбивать на куски. Если так в команды машинисту кинуть все куски (например штук 6)маршрут не собьется? Или лучше куски собрать в группу? Или без разницы?:)
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot