Autor Wątek:  Problem z memcell'em  (Przeczytany 4183 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Dolmio89

  • Wiadomości: 1185
    • Zobacz profil
  • Otrzymane polubienia: 9
Problem z memcell'em
« dnia: 15 Września 2008, 19:54:03 »
Chciałem napisać misje do mojej trasy i mam problem z komórką pamięci. Założenie jest takie, że po kilku manewrach symek ma wpuścić na stację skład towarowy, żeby nie narobić zamieszania chciałem użyć memcell'a ale niestety nie działa. Czytałem oczywiście scenery.doc i tutoriale, wydaje mi się że wszystkie wpisy mam dobre. Może ktoś z większym doświadczeniem zauważy gdzie popełniłem błąd.
node -1 0 sm_mem memcell 0 0 1 manewry 0 0  none endmemcell

event manewry2 updatevalues 0.0 sm_mem manewry 0 1 endevent
event wjazd multiple 1.0 sm_mem dolmiowo_zeberko1z dolmiowo10W_F_s1 dol_zw3+ dol_zw7ad dolmiowo_wj1N_B_s13 update1 condition memcompare manewry 0 1 endevent
event update1 updatevalues 0.0 sm_mem manewry 1 1 endevent

event KeyCtrl02 multiple 0 none manewry2 endevent

Event "manewry2" uruchomiony po najechaniu loka na pewien tor ma zmienić wartość komórki pamięci "sm_mem", a to na spowodować podanie wjazdu na stację. W celach testowych dodałem aktywacje eventu "manewry2" przez shift+2 no i jak już mówiłem nie działa.

Jeszcze może fragment loga:
Cytuj
Player train init OK
EVENT ADDED TO QUEUE:
keyctrl02
EVENT LAUNCHED:
keyctrl02
Multiple passed
EVENT ADDED TO QUEUE:
manewry2
EVENT LAUNCHED:
manewry2

Czy ktoś z was uświadomi mi co zrobiłem źle?
Z góry dzięki za pomoc.

Offline AtapiCl

  • Zasłużony dla Symulatora
  • Wiadomości: 4426
    • Zobacz profil
    • O warszawskiej części linii kolejowej nr 7 Warszawa – Lublin i nie tylko ;)
  • Otrzymane polubienia: 212
Odp: Problem z memcell'em
« Odpowiedź #1 dnia: 15 Września 2008, 20:03:30 »
Event 'wjazd' wykona się, jeśli komórka o nazwie 'sm_mem' będzie mieć parametry: 'manewry 0 1'.
Event 'manewry2' nie wykonuje eventu wjazd. On tylko aktualizuje stan komórki 'sm_mem'.
Event 'update1' aktualizuje stan komórki 'sm_mem' na 'manewry 1 1'.
Event 'KeyCtrl02' - wiadomo, odpala...

A zrobiłeś to tak - Wciskasz Shift + 2, wykonuje się event aktualizujący komórkę 'sm_mem' ze stanu 'manewry 0 0' na stan 'manewry 0 1'. I to wszystko, co się wykonuje.

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3926
    • Zobacz profil
  • Otrzymane polubienia: 279
Odp: Problem z memcell'em
« Odpowiedź #2 dnia: 15 Września 2008, 20:17:43 »
Zbytnio nie wnikam, ale mnie na 1 rzut oka logika założeń eventów jest ok, tylko wydaje mi się, że deklaracja jak i updaty są złe. Z tego co pamiętam komórka może spamiętać jeden ciąg znaków i 2 wartości liczbowe, czyli powinny być deklarowane 3 wartości a są dwie.
Ja deklarowałem tak:
//komorka pamieci, ktora wpisuje status, czy pośpiech Koniewice-Skawrki istnieje
node -1 0 pospskw-status memcell 0 0 0.3 BRAK 0 0 none endmemcell

a zmieniałem:
event zatwpospskw updatevalues 0.0 pospskw-status Podczepiony * * endevent

sprawdzałem warunek tak:
//Wyzwala, gdy pośpiech Koniewiece-Skwarki wjeżdża do Wielkiego Kaca
event wjazd_do_Wielki_K multiple 0.0 pospskw-status
duza5pocz_s1
duzaendwl_S13
duza13+
duza11+
duza9+
zatwpospskwwjazdWK
condition memcompare Podczepiony * *
endevent

Czyli ja zmieniałem ciąg znaków, Ty możesz zmieniać tylko liczby.
Gwiazdka oznacza, iż dana zapamiętana wartość w komórce nie będzie zmieniana lub porównywana.
Reasumując, nie wiem jak traktuje taką deklarację komórek,i porównywanie symek, jakie Ty zrobiłeś.
« Ostatnia zmiana: 15 Września 2008, 20:44:02 wysłana przez Mariusz1970 »

Offline Dolmio89

  • Wiadomości: 1185
    • Zobacz profil
  • Otrzymane polubienia: 9
Odp: Problem z memcell'em
« Odpowiedź #3 dnia: 15 Września 2008, 20:26:53 »
Cytuj
A zrobiłeś to tak - Wciskasz Shift + 2, wykonuje się event aktualizujący komórkę 'sm_mem' ze stanu 'manewry 0 0' na stan 'manewry 0 1'.

Cytuj
Event 'wjazd' wykona się, jeśli komórka o nazwie 'sm_mem' będzie mieć parametry: 'manewry 0 1'.

Więc po odpaleniu "manewry2" powinien się odpalić "wjazd". Czy coś jeszcze pominąłem?

Mariusz1970 komórka ma 3 wartości manewry 0 0 i chciałem je zmienić na manewry 0 1

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3926
    • Zobacz profil
  • Otrzymane polubienia: 279
Odp: Problem z memcell'em
« Odpowiedź #4 dnia: 15 Września 2008, 20:29:11 »
i chciałem je zmienić na
Kod:
manewry 0 1

No ale nadal są 2 wartości.
Zrób jak Ci sugerowałem, bo prochu nie wymyślisz, a to o czym pisałem jest sprawdzone.

Offline AtapiCl

  • Zasłużony dla Symulatora
  • Wiadomości: 4426
    • Zobacz profil
    • O warszawskiej części linii kolejowej nr 7 Warszawa – Lublin i nie tylko ;)
  • Otrzymane polubienia: 212
Odp: Problem z memcell'em
« Odpowiedź #5 dnia: 15 Września 2008, 20:46:21 »
Więc po odpaleniu "manewry2" powinien się odpalić "wjazd". Czy coś jeszcze pominąłem?

Nie, bo Ty odpalasz tylko 'manewry2', a ten event z kolei nie odpala 'wjazd'.

To, co się wykona zależy od eventu 'wjazd'. To, czy się event 'wjazd' wykona zależy od parametrów komórki pamięci. A eventy typu 'updatevalues' tylko modyfikują stand komórki pamięci. Nadal jednak aby wszystko grało, event 'wjazd' musi być zainicjowany.
« Ostatnia zmiana: 15 Września 2008, 20:50:07 wysłana przez ZiomalCl »

Offline Dolmio89

  • Wiadomości: 1185
    • Zobacz profil
  • Otrzymane polubienia: 9
Odp: Problem z memcell'em
« Odpowiedź #6 dnia: 15 Września 2008, 20:55:32 »
Ja to planowałem tak:
"manewry2" zmieniają wartość komórki pamięci => "wjazd" sprawdza stan komórki pamięci i odpala się po zmianie

W logu nie widać żadnego wpisu na temat zmiany w memcell, ale widać, że event "manewry2" się odpalił. Zupełnie nic już z tego nie rozumiem.

Mariusz1970 nie wiem czy dobrze zrozumiałem o co Ci chodziło, ale spróbowałem takiego kodu:
node -1 0 sm_mem memcell 0 0 1 manewry 0 0  none endmemcell

event KeyCtrl02 multiple 0 none manewry2 endevent

event manewry2 updatevalues 0.0 sm_mem wjazd * * endevent

event wjazd multiple 0.0 sm_mem
dolmiowo_zeberko1z
dolmiowo10W_F_s1
dol_zw3+
dol_zw7ad
dolmiowo_wj1N_B_s13
update1
condition memcompare wjazd 0 0 endevent

event update1 updatevalues 0.0 sm_mem * * 1 endevent

I efekt żaden. Może ktoś z was mógłby mi to jakoś krok po kroku rozpisać z objaśnieniami bo naprawdę zupełnie nie wiem co zrobiłem źle.

Offline AtapiCl

  • Zasłużony dla Symulatora
  • Wiadomości: 4426
    • Zobacz profil
    • O warszawskiej części linii kolejowej nr 7 Warszawa – Lublin i nie tylko ;)
  • Otrzymane polubienia: 212
Odp: Problem z memcell'em
« Odpowiedź #7 dnia: 15 Września 2008, 20:57:19 »
A jak ten event ma Ci sprawdzić, skoro on nie został odpalony? Heh?

Offline Dolmio89

  • Wiadomości: 1185
    • Zobacz profil
  • Otrzymane polubienia: 9
Odp: Problem z memcell'em
« Odpowiedź #8 dnia: 15 Września 2008, 21:03:23 »
hmm no to ja chyba jednak źle rozumiałem zasadę działania memcell'a

Czyli jak np. przypiszę do toru event1 wjazd to odpali się on dopiero po zmianie wartości komórki pamięci?

Bo myślałem że symek cały czas sprawdza stan tej komórki i po jej zmianie sam odpali event.

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3926
    • Zobacz profil
  • Otrzymane polubienia: 279
Odp: Problem z memcell'em
« Odpowiedź #9 dnia: 15 Września 2008, 21:06:29 »
node -1 0 sm_mem memcell 0 0 1 manewry 0 0  none endmemcell

event manewry2 updatevalues 0.0 sm_mem manewry 0 1 endevent

event wjazd multiple 1.0 sm_mem dolmiowo_zeberko1z dolmiowo10W_F_s1 dol_zw3+ dol_zw7ad dolmiowo_wj1N_B_s13 update1 condition memcompare manewry 0 1 endevent
event update1 updatevalues 0.0 sm_mem manewry 1 1 endevent

event KeyCtrl02 multiple 0 none manewry2 endevent


Pomijam tutaj deklarację, ale wydaje mi się, że logika jest ok, gdyż:
1)stan początkowy: kom. pam- stan 0 0.
2)wyzawalny jest event manewry2 za pomocą czegoś tam lub key, zmienia sie wartość kom. pam na 0 1
3)za pomocą czegoś tam event wjazd jest wyzwalany i warunek porównania komórki pamięci jest spłeniony
4)event wjazd zmienia wartość komórki pamięci na 1 1

Jedynie mi jeszcze przychodzi do głowy, iż ten sam event, który porównuje kom. pam, jednocześnie ją aktualizuje. Możesz dla bezpieczeństwa dać opóźnienie wykonania aktualizacji komórki w tym momencie.

PS
teraz dostrzegłem, że deklaracje są ok :), nie dowidziałem ciągu znaku "manewry".
Cytuj
to odpali się on dopiero po zmianie wartości komórki pamięci?

Odpali się, gdy jest spełniony warunek, ale tylko w tym momencie wyzwalania eventu.
komórki pamięci spełniają li tylko funkcję tworzącą dodatkowe warunki i albo warunek jest spełniony w danej chwili i się wtedy wyzwala event, albo nie spełniony i się event nie wyzwoli, nawet jeśli kiedyś tam później stan komórki się zmieni i sam warunek jest spełniony, ale symek już dawno zapomniał o evencie. trzeba wtedy ponownie wyzwolić event.

« Ostatnia zmiana: 15 Września 2008, 21:14:29 wysłana przez Mariusz1970 »

Offline Dolmio89

  • Wiadomości: 1185
    • Zobacz profil
  • Otrzymane polubienia: 9
Odp: Problem z memcell'em
« Odpowiedź #10 dnia: 15 Września 2008, 21:15:49 »
Panowie dzięki serdeczne za pomoc i cierpliwość. Wszystko już rozumiem, na dowód załączam obrazek: