- Symulator MaSzyna -
Symulator EU07 (i nie tylko) => Pomoc w tworzeniu => Wątek zaczęty przez: P.J. w 11 Sierpnia 2012, 15:53:56
-
Witam.
Próbuję za pomocą komórki pamięci doprowadzić do uruchomienia pojazdu przez AI. Kombinuję na różne sposoby no i coś nie chce wyjść. Poniżej wpis komend jaki zastosowałem. Nie wiem w którym miejscu jest błąd.
node -1 0 Uruchom_AI memcell 0 0 0.1 Wait_for_orders 0 0 start endmemcell
event UruchomAI updatevalues 0 Uruchom_AI Prepare_engine 1 1 endevent
event Uruchom multiple 5.0 UruchomAI condition memcompare * * * endevent
-
A dałeś coś co te eventy uruchomi?
-
1. Potrzebna jest nazwa toru, na którym stoi AI (tu: start).
2. Komórka pamięci musi być podłączona do tego toru (jest).
3. Event UpdateValues zmienia zawartość komórki (OK).
4. Komenda Prepare_engine powinna mieć drugi argument zerowy.
5. Coś musi uruchomić event UpdateValues (np. eventlauncher), albo trzeba użyć nazwy KeyCtrl0x i odpalać z klawiatury.
6. Fraza condition memcompare * * * jest bez sensu (zawsze prawdziwa).
PS Czasowniki próbuje i kombinuje to trzecia osoba (on/ona).
-
Można uruchomić pojazd AI bez użycia żadnych komend. Niestety większość początkujących o tym nie wie lub nie chce o tym wiedzieć. Tyle razy pisałem o tym w postach na forum, PW, GG, na co prawie zawsze dostawałem taką odpowiedź jakby ten ktoś tego zdania w ogóle nie zauważył. Może łatwiej męczyć się z komendami zamiast poczytać forum... Być może akurat w tym temacie autor świadomie wybiera tę opcję, mówię ogólnie.
-
Krzychu przypomnij proszę kolejny raz. Wiesz jak to bywa nie raz trzeba przypominać na forum do skutku ;).
-
Wystarczy ustawić niezerową prędkość początkową i można zapomnieć o wszystkich komendach i innych nieszczęściach ;) Komendy trzeba stosować wtedy kiedy jest taka konieczność (np., żeby lokomotywa, która stoi koło nas się uruchomiła). Jeśli tylko można ustawić niezerową prędkość początkową i w żaden sposób nie psuje to estetyki scenerii, to tak właśnie należy uczynić. Prędkość początkowa składu to ostatnia liczba (z reguły) w pierwszej linijce wpisu trainset. Wpis trainset ma taką składnię (tylko początek):
trainset nazwa_rozkładu nazwa_toru przesunięcie prędkość_początkowa
Czyli w tym przykładzie:
trainset pe1301 start-su46 20 0
Można zamienić ostatnią cyfrę na wartość niezerową (np. 0.1), by od razu po uruchomieniu skład był włączony.
trainset pe1301 start-su46 20 0.1
-
A dałeś coś co te eventy uruchomi?
No to teraz już widzę, że mi czegoś brakuje - super.
4. Komenda Prepare_engine powinna mieć drugi argument zerowy.
Czyli rozumiem, że powinno być ...Prepare_engine 1 0...
5. Coś musi uruchomić event UpdateValues (np. eventlauncher), albo trzeba użyć nazwy KeyCtrl0x i odpalać z klawiatury.
Próbuję za pomocą generatora ewentów stworzyć eventlunchera ale coś muszę jeszcze nie tak wypełniać. Screen w załączeniu. Czy można uruchomić te eventy za pomocą zwykłego eventu multiple?
PS Czasowniki próbuje i kombinuje to trzecia osoba (on/ona).
Słusznie.
Można uruchomić pojazd AI bez użycia żadnych komend. Niestety większość początkujących o tym nie wie lub nie chce o tym wiedzieć...Wystarczy ustawić niezerową prędkość początkową i można zapomnieć o wszystkich komendach...
Dzięki, zależy mi jednak na tej komórce pamięci. Komendy multiple są proste, ale zależy mi na zapoznaniu się z innymi "tajnikami" maszyny...
Pozdro
-
Czyli rozumiem, że powinno być ...Prepare_engine 1 0...
Tak. Aczkolwiek zależy jeszcze, jaki efekt chcesz uzyskać. Na dotychczasowych wersjach EXE lokomotywa po takiej komendzie pojedzie w trybie manewrowym do przodu, natomiast na najnowszym będzie tylko stać przygotowana do jazdy, ale ze zgaszonymi światłami.
Czy można uruchomić te eventy za pomocą zwykłego eventu multiple?
Ale coś musi to zwykłe multiple uruchomić.
-
Dorzuciłem event multiple shift+6 ale nadal jest coś nie tak:
node -1 0 Uruchom_AI memcell 0 0 0.1 Wait_for_orders 0 0 start endmemcell
event UruchomAI updatevalues 0 Uruchom_AI Prepare_engine 1 0 endevent
event Uruchom multiple 0.0 UruchomAI endevent
event keyctrl06 multiple 0.1 none UruchomAI endevent
-
Po kolei ;)
Masz komórkę pamięci:
node -1 0 Uruchom_AI memcell 0 0 0.1 Wait_for_orders 0 0 start endmemcell
Zwykła komórka pamięci, egzystuje gdzieś w scenerii. Sama nic nie znaczy. Ma wpisaną komendę, która zasadniczo nic nie robi (może coś tam robi, ale nie znam się na teorii) oraz nazwę toru, na którym stoi ten pojazd.
Żeby zmienić jej wartość (bo event updatevalues zmienia wartość komórki) na taką, która zostanie zinterpretowana przez EXE jako komenda i wykonana, należy taki event uruchomić. Uruchomienie to inaczej odpalenie eventu, wywołanie go. Można to zrobić na kilka sposób, event w torze, zajęcie odcinka, rozprucie rozjazdu, Eventlauncher, inny Multiple...event UruchomAI updatevalues 0 Uruchom_AI Prepare_engine 1 0 endevent
Jak ten updatevalues odpalić? Jak już wspomniałem możliwości jest kilka. Możesz to zrobić przez Multiple. Na zakładce Multiple w Generatorze wybierasz jako typ pojedynczego zdarzenia inne i wklejasz tam tą nazwę. Jako wyzwolenie możesz wybrać SHIFT+... . Jeśli to Cię nie zadowala, możesz uruchomić event o określonej godzinie. Domyślna godzina w MaSzynie do 10:30, choć można ją zmienić wpisem time. W tym celu na zakładce Eventlauncher jako nazwę eventlaunchera podajesz dowolną nazwę, wybierasz Wyzwalanie o określonej godzinie. Współrzędne podajesz dowolne, jako nazwę zdarzenia, gdy shift jest wciśnięty wpisujesz none, ale o ile dobrze pamiętam, jeśli nic tam nie wpiszesz, to program sam to zrobi. Jako Zdarzenie podajesz nazwę Updatevaluesa. Pola Warunek najlepiej w ogóle nie zaznaczaj. Warunek służy do warunkowego wykonania eventu z eventlaunchera, czyli np. jeśli jakiś skład wjedzie na dany tor, to wtedy dopiero EXE dostanie "pozwolenie" na wykonanie zdarzenia.
Nie znam się za bardzo na teorii, być może moje określenia dotyczące updatevaluesa i memcella są niepoprawne, ale piszę tak jak ja to rozumiem, tak jak łatwiej zrozumieć, a nie tak jak w "książce" jest napisane.
EDIT: A w Generatorze to był błąd, sprawdzał nieodpowiednie pola tekstowe. Poprawię w następnej wersji.
I taka rada na przyszłość, używaj najnowszej wersji, jest w niej sporo ułatwień.
-
Do ręcznego wysłania komendy wystarczy dać:
event KeyCtrl06 updatevalues 0 Uruchom_AI Prepare_engine 1 0 endevent
Ma wpisaną komendę, która zasadniczo nic nie robi (może coś tam robi, ale nie znam się na teorii)
Komenda w komórce pamięci nic nie robi, istotny jest moment zmiany zawartości komórki, wtedy komenda jest wysyłana do wskazanego toru.
-
Do ręcznego wysłania komendy wystarczy dać:
Kod: [Zaznacz]
event KeyCtrl06 updatevalues 0 Uruchom_AI Prepare_engine 1 0 endevent
Sorry, że dopiero dzisiaj, ale wcześniej mi nie pasowało.
Niestety dalej nie działa i wygenerował się komunikat błędów:
"EU07.EXE 1.8.595.355
Missed event: prepare_engine in multiple keyctrl06
Missed event: 1 in multiple keyctrl06
Missed event: 0 in multiple keyctrl06"
Nie mam pojęcia...
Dorzucę resztę:
1. Eventy i komórka pamięci:
node -1 0 Uruchom_AI memcell 0 0 0.1 Wait_for_orders 0 0 start endmemcell
event UruchomAI updatevalues 0 Uruchom_AI Prepare_engine 1 0 endevent
event Uruchom multiple 0.0 UruchomAI endevent
event keyctrl06 multiple 0.1 none UruchomAI Prepare_engine 1 0 endevent
2. Tor na którym stoi pojazd:
node 1000 0 start track normal 100.0 1.435 0.25 25.0 20 0 flat vis
rail_screw_used1 4 tpbps-new2 0.2 0.5 1.1
0.396825 0.2 136.111 0.0 //point 1
0.0 0.0 0.0 //control vector 1
0.0 0.0 0.0 //control vector 2
0.396825 0.2 236.111 0.0 //point 2
0
event0 UruchomAI
endtrack
3. Przypisanie pojazdu do toru
trainset rozklad start 0.0 0.0
//$o Tor doświadczalny.
node -1 0 EN57-1051ra dynamic pkp\en57_v1 en57-1051ra 6baii 0.0 headdriver 55 0 enddynamic
node -1 0 EN57-1051s dynamic pkp\en57_v1 en57-1051s 6bsii 0.0 connected 55 0 enddynamic
node -1 0 EN57-1051rb dynamic pkp\en57_v1 en57-1051rb 6bbii 0.0 connected 0 0 enddynamic
endtrainset
-
Usuń event Uruchom , jest on niepotrzebny.
event keyctrl06 multiple 0.1 none UruchomAI Prepare_engine 1 0 endevent
Wartości za none to nazwy eventów, które multiple ma wywołać. W twoim przypadku jest to niepotrzebne. Daj ten kod co podał Ra, i usuń odwołanie eventu UruchomAI z toru (jeśli ma być wywoływany tylko ręcznie).
-
Teraz mam taki wpis i dalej nic
node -1 0 Uruchom_AI memcell 0 0 0.1 Wait_for_orders 0 0 start endmemcell
event KeyCtrl06 updatevalues 0 Uruchom_AI Prepare_engine 1 0 endevent
wyskakuje do tego informacja przy ładowaniu
"Event0 Uruch... does not exist"
-
Jedyny event jaki istnieje to updatevalues o nazwie KeyCtrl06. Więc informacja o nieistnieniu Uruch... jest całkowicie normalna.
-
Zobacz załącznik AI_start.7z z tej wiadomości (http://eu07.pl/forum/index.php/topic,19208.msg229679.html#msg229679). Jest tam automat uruchamiający AI z wyzwalaczem godzinowym. Komórka pamięci jest podłączona z torem start, na którym stoi skład MM1301:
node -1 0 mem_start7 memcell 0 0 0.1 Wait_for_orders 0 0 start endmemcell
istotne jest też przesunięcie 20 m w trainset, przy przesunięciu 0 skład stałby zaraz przed torem start i nie odbierałby komend z tego toru:trainset mm1301 start 20 0
(...)
wyzwalacz uruchamia się minutę od rozpoczęcia symulacji:time 10:09 1:10 1:10 endtime
node -1 0 launch7-2 eventlauncher 1 1 1 -1 none 1010 start7-2 none endnode
uruchamiany jest najpierw event multiple, który z opóźnieniem jednej sekundy ustawia zwrotnice i wysyła komendy do AI:event start7-2 multiple 1.0 none test_zwr01+ zwr02+ start7-1 start7-3 endevent
pierwszą komendą jest uruchomienie silnika, drugą (5 sekund później) nakaz jazdy manewrowej:
event start7-1 updatevalues 0.0 mem_start7 Prepare_engine 1 0 endevent
event start7-3 updatevalues 5.0 mem_start7 ShuntVelocity 40 0 endevent
W praktyce wysyłanie komendy Prepare_engine 1 0 nie jest wymagane, ponieważ każda komenda oprócz Wait_for_orders oraz Prepare_engine 0 0 spowoduje automatyczne uruchomienie silnika. Komendę Prepare_engine 1 0 wysyłamy oddzielnie tylko wtedy, jeśli lokomotywa ma się uruchomić ze zgaszonymi światłami (tak to działa na ostatnich wersjach EXE, na wcześniejszych będzie automatycznie przechodzić do jazdy manewrowej).
-
istotne jest też przesunięcie 20 m w trainset, przy przesunięciu 0 skład stałby zaraz przed torem start i nie odbierałby komend z tego toru:
Przesunąłem pojazd o 10 metrów i zadziało - w końcu.
Komendę Prepare_engine 1 0 wysyłamy oddzielnie tylko wtedy, jeśli lokomotywa ma się uruchomić ze zgaszonymi światłami (tak to działa na ostatnich wersjach EXE, na wcześniejszych będzie automatycznie przechodzić do jazdy manewrowej).
No mam exe z 12 czerwca (chyba jest to wersja 355) i niestety po uruchomieniu odjeżdża mi w siną dal.
-
Dopiero w kolejnej będzie stał. W 355 i wcześniejszych nie da się zrobić tak, żeby AI stało z włączonym silnikiem: AI można zatrzymać tylko wstawiając sygnalizator (dokładniej komórkę pamięci z SetVelocity 0 0, przypisaną do toru przez Event1 albo Event2). Tak uprzedzam na przyszłość, że będzie zmiana w tym zakresie.
-
Ok. Dzięki.
Na razie problem rozwiązany.
Jakby coś dalej mi nie pasowało to będę jeszcze pytał.
Pozdrawiam