Jump to content

Neue Beta-Version V5


Neo

Empfohlene Beiträge

vor 20 Stunden schrieb ralf3:

Thema Virtuelle verkehrswege:

 Was mach ich falsch?

rätselnde Grüße, Ralf

 

 

Hi Ralf

Im grunde nix. System-/ design-bedingt haben die verschiedenen modelle von befahrbaren verkehrswegen verschiedene hoehen. Bei den strassen liegt diese  z.b. genau 2.5mm ueber 0. Am einfachsten ist wirklich die befahrbaren verkehrswege modelle ihrer fahrspuren zu entledigen und sie danach auf die hoehenlage der virtuellen verkehrswege (oder umgekehrt) auszurichten.

Cheers

Tom

Bearbeitet von metallix
c
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Neo,
erstmal Danke für das Update.
Als ich die neuen Features gesehen habe, habe ich mich riesig gefreut, dass nun die dritte Dimension in den Modelleditor eingezogen ist.
Leider nicht so, wie ich es mir eigentlich erhofft habe. Ich hätte mir gewünscht, dass wir da was bekommen können, das die Verwindung einer Kurve in einer Steigung rausrechnet. Sodaß der Anfang des Gleises plan auf der Ebene liegt und das Ende ebenfalls plan auf der höheren Ebene. So wie es nun ist, ist immer noch das Gleis selbst in einer Ebene, liegt halt rotiert in der Landschaft. Das wird wohl nur ausnahmsweise gebraucht werden.
Habe ein Bild angehängt, wie ich's mir gewünscht hätte.
Und dann ... habe ich mal drüber nachgedacht, wie denn ein Zug auf so einem Gleis stehen würde, wenn das nicht wirklich ziemlich lang und mit relativ geringer Steigung ist.
Ach, irgendwas ist immer.

beste Grüße
  Andy

 

Clipboard01.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 10 Minuten schrieb Andy:

Ich hätte mir gewünscht, dass wir da was bekommen können, das die Verwindung einer Kurve in einer Steigung rausrechnet.

mit Verwindungen hat das Rotationsupdate nichts zu tun, hier geht es darum, Gleise schon im 3D-Modell anstellen zu können, z.B. für echte Rampen, wie man sie z.B. bei Holzeisenbahnen kennt. Das Thema Verwindungen bei Gleisen wird mal ein eigenes Thema werden, hab ich aber auf dem Schirm.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Automatische Höhenanpassung

Hallo @Neo, allo @alle,

die automatische Höhenanpassung (auf Ebenen mit unterschiedlichen Höhen) funktioniert auf alle Ebenen und wenn man Objekte "auf die Platte" zieht.

Nur in einer Version funktioniert sie nicht: zurück auf die Standard-Ebene, falls die Grundplatte gerade transparent ist. Ich glaub nicht, dass das so sein soll?

Gruß
Reinhard

Link zu diesem Kommentar
Auf anderen Seiten teilen

Guten Morgen Neo,

mir sind heute nacht wieder ein paar Fragen bezüglich der EV aufgekommen:

1. eine table, die ich in einem Ereignis anlege, wird die global, oder ist die immer automatisch lokal und wird immer neu angelegt, wenn ich in das Ereignis komme?
Wenn ich sie in ein Modulskript lege, findet er $-Einträge nicht. Wann werden die da initalisiert?

2. Ist ein Modulskript ausführbar? Oder dient es nur als Ablage von tables und Funktionen? Wie rufe ich die Ausführung auf? Das 'Hauptskript' in "Ereignisse" läuft beim Einschalten der Ereignisprotokollierung ab. Ist es einfach so, dass alle Modulskripte nacheinander ablaufen, wenn auf '>' (play) gedrückt wird?

3. Beim Umbenennen von Modulvariablen hatten wir das Thema, dass Du sagst, dass es nicht so einfach ist, die Umbenennung auch in Skripten durchzuführen. Wäre es dann nicht doch sinnvoll, so etwas wie einen Sammelexport für Skripte in eine txt-Datei zu ermöglichen, damit man wenigstens checken kann, wo entsprechende Stellen sind? Zumal im Skripteditor Strg-F für Finden und Strg-H für Ersetzen ja auch nicht gehen.

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Andy

Alle Skripte, die direkt im Hauptmodul oder einem der Untermodule angelegt sind, werden gleich nach dem Start der EV einmal komplett abgearbeitet.

 

@Neo

Zu diesem Zeitpunkt stehen die Library Funktionen von Lua noch nicht zur Verfügung. Beispielsweise führt ein print() oder ein layout:getEntityByName() im Skript zu der Fehlermeldung, dass diese globale Funktion nicht definiert sei. Somit akzeptieren diese Skripte auch noch keine Objekte. Ein $("Dingsbums") liefert nil zurück. 

Ich kann also eine Tabelle 

Dinge = {
  "Dings 1",
  "Dings 2",
  "Dings 3",
  "Dings 4"
}

im Hauptskript anlegen und sie steht mir anschließend zur Verfügung.

Aber eine Tabelle

Dinge = {
  $("Dings 1"),
  $("Dings 2"),
  $("Dings 3"),
  $("Dings 4")
}

bleibt leer, weil die Funktion $() zu diesem Zeitpunkt noch nichts zurück gibt. 

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 16 Stunden schrieb Reinhard:

Nur in einer Version funktioniert sie nicht: zurück auf die Standard-Ebene, falls die Grundplatte gerade transparent ist. Ich glaub nicht, dass das so sein soll?

das gilt für jede transparente Grundplatte, die automatische Höhenanpassung funktioniert dort nicht. Das ist jetzt nicht explizit so gewollt, ergibt sich eher aus den technischen Interna. Führt das zu einem bestimmten Problem?

@Andy und @Goetz

Alle Skripte, egal ob Modulskript oder Ereignisskript, landen am Ende in einer "Datei", die von Lua kompiliert wird. Somit arbeiten alle Bereiche der EV im gleichen Environment. Wird also irgendwo ein Variable ohne local gesetzt, ist sie anschließend Teil des globalen Environments und steht überall zur Verfügung.

Ausgeführt wird die zusammengesetzte Lua-Datei beim Kompilieren. Das geschieht sowohl beim Laden der Anlage sowie nach einer Änderung der EV. Mit dem Play-Button hat das nichts zu tun, dieser steuert nur die Animationen. Alles, was nicht in einer Funktion steht, wird beim Kompilieren von Lua ausgeführt. Ereignisskripte stehen immer in einer Funktion, die vom Studio generiert wird, somit werden also nur die Modulskripte direkt beim Kompilieren ausgeführt, die Ereignisskripte immer dann, wenn das Ereignis eintritt.

Die Library-Funktionen des Studios stehen zur Kompilierung noch nicht zur Verfügung, weil ich vermeiden möchte, dass während der Kompilierung Anlagenzustände geändert oder sogar Ereignisse aufgerufen werden. Und da die Kompilierung nach jeder EV-Änderung durchgeführt wird (und später vielleicht auch in anderen Situationen), kann sich ein Anlagenplaner nie genau darauf verlassen, wann und wie oft seine Skripte kompiliert/ausgeführt werden.

Das ist auch der Grund, warum die $-Funktion noch nicht funktioniert, weil es beim Kompilieren noch keine Verbindung zur Anlage und den Objekten darin gibt. In welcher Situation wird so etwas benötigt? Für explizite Initialisierungen gibt es Möglichkeiten, z.B. ein Ereignis, was nur beim Laden einer Anlage einmalig aufgerufen wird. In so einem Ereignis könnte man dann seine One-Time-Initialisierungen vornehmen. Zuvor würde mich aber interessieren, was das für Initialisierungen typischerweise sind.

vor 6 Stunden schrieb Andy:

Wäre es dann nicht doch sinnvoll, so etwas wie einen Sammelexport für Skripte in eine txt-Datei zu ermöglichen

Einen EV-Export wird es mit V5 noch geben, wobei ich aber auch gern Suchen und Ersetzen im Skript-Editor noch mit einbauen kann.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Neo,

vor 36 Minuten schrieb Neo:

Führt das zu einem bestimmten Problem?

Nein das führt es nicht. Jetzt, da ich es weiß schon gar nicht mehr. Hatte mich nur gewundert, weil ich eine Weile mit transparenter Grundplatte gearbeitet habe. Wie gesagt, jetzt weiß ich ja, dass es so ist und woran es liegt.

Gruß
Reinhard

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb Neo:

Zuvor würde mich aber interessieren, was das für Initialisierungen typischerweise sind

Bei mir sind ist es (bislang) ein Table mit den 'Stammdaten' meiner Fahrpläne. Ich habe da die Read-Only-OV der zugehörigen Objekte herausgezogen, damit alles übersichtlicher und editierbarer wird. Die brauchen natürlich einen Bezug zu ihrem Objekt, oder anderen beteiligten Objekten. Da möchte ich natürlich mit $ arbeiten, damit ggf. bei Namensänderungen alles mitgeändert wird.
Wenn es jetzt aber so ist, dass ich mich drauf verlassen kann, dass diese Tables global bleiben, ihre Namen also auch überall bekannt sind, dann lege ich die mitsamt der Initialisierungsfunktion, die die variablen Teile, die noch in den OV der angekoppelten Objekte liegen, presetted, einfach in das Ereignis, das jene Funktion aufruft.
Ich wollte es halt so organisieren, dass meine Daten (hier Fahrpläne) eines Ereignismodul zusammen bleiben, dafür in das Modulskript legen und auch die init_funktion, damit eine gewisse Ordnung in allem ist! Und dann gibt es da ein Ereignis Variable 'Automatik' wird gesetzt mit Inhalt Skript ausführen init_fahrplaene().

So wie Du es schreibst, lege ich das jetzige Modulskript einfach genau in dieses initialisierende Ereignis und meine $ leben.

Test. Funktioniert! Damit bin ich doch zufrieden. Ich hoffe Du verstehst aber, dass diese Frage ohne jene Hintergrundkenntnisse kommen mußte und nun sind wir alle ein Stück schlauer. (y)

Gruß
  Andy

Bearbeitet von Andy
Link zu diesem Kommentar
Auf anderen Seiten teilen

Jener Table hat einen großen Vorteil:

Fahrplan =
{
  ...,
{
Obj = $("Fahrplan14"),
Data = {
  { $("A Abs4-Umsetz"), 813, "Abstellgl.4", "Werkstatt" },
  { $("A Umsetz-LS1"), 0, "", "" },
  { $("A LS1-Umsetz"), 1605, "Werkstatt", "Abstellgl.4" },
  { $("A Umsetz-Abs4"), 0, "", "" },
  { "end" }
}},
  ...
}

function init_fahrplaene()
-- wird gerufen beim Einschalten der Automatik

  local i = 1
  while Fahrplan[i] ~= nil do
    Fahrplan[i].Obj.idx = i
    Fahrplan[i].Obj.variables["Auftrag"] = ""
    Fahrplan[i].Obj.variables["von"] = ""
    Fahrplan[i].Obj.variables["nach"] = ""
    Fahrplan[i].Obj.variables["delayed"] = 0
    Fahrplan[i].Obj.variables["Fehler"] = 0
    Fahrplan[i].Obj.variables["Starttick"] = 3000
    Fahrplan[i].Obj.variables["skip"] = 0
    Fahrplan[i].Obj.variables["xtick"] = 0
    Fahrplan[i].Obj.variables["Counter"] = 1
    Fahrplan[i].Obj.variables["Status"] = "Ankunft"
    Fahrplan[i].Obj.state = (Fahrplan[i].Obj.state + 1) % Fahrplan[i].Obj.stateCount
    i = i + 1
  end
end

da diese 17 Fahrpläne alle einen Rückverweis idx besitzen, kann ich auf ihnen als Objekte trotzdem indiziert operieren, als wären sie ein Array.

Warum ich das nun eigentlich gerne im Modulskript des Ereignismoduls Fahrpläne gehabt hätte?
Weil damit ein komplett neues Szenario der Anlage aufsetzbar ist und ich zur Anlage noch Skripte zur Verfügung hätte stellen können, bei denen ich dem Nutzer sage, leg' das in Fahrpläne Skript! Naja, jetzt muß er's halt in einem 'versteckteren' Platz unterbringen.

Bearbeitet von Andy
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hello,

Is there a way to apply the same value to a lot (list) of variables?  Something like :

Set the value "#" to all "reserve" object variables  Or is it possible in Lua?

When I switch the "start button", I first want to reset certain variables and captions to the initial value, for example setting the variable "reserve" present on every switches in the layout to the value "#".
Thank you

André

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also, das mit der Table-Initialisierung ist so noch nicht schön.
Ich gehe auf Automatik, was das Skript auslöst, das den Table mit den $ fertig initialisiert. Der Table steht nun wunderbar zur Verfügung.
Ich halte die Animation an, weil ich noch etwas ändern möchte, mache das, starte die Animation wieder weiter - und peng, weil ihn die Recompilierung wieder zerstört hat und keiner die Reinitialisierung gerufen hat.
Möglicherweise könnte es Sinn machen, print und $ nach Kompilierung scharf zu machen, aber das rekursive Verhalten (was ja offensichtlich das Risiko darstellt) für Modulskripte noch abgeschaltet zu lassen und es erst nach Abarbeitung der Modulskripte zu aktivieren. Vielleicht würde es sogar Sinn machen, dass beim Aufrufen von Funktionen, die in Modulskripten liegen, das rekursive Verhalten ebenfalls ausgesetzt wird, bzw. das es sogar ein Flag gibt, das der Nutzer toggeln kann. Aber, da habe ich jetzt überhaupt keine Vorstellung, ob das überhaupt realisierbar ist.

Gruß
  Andy

Bearbeitet von Andy
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich meine eine Lücke gefunden zu haben:

 vehicle.variables["Fahrplan"].variables["Status"] = "Ankunft"

Die Lok hat gerade ein Gleis betreten, hat eine OV namens "Fahrplan", die vom Typ Objekt ist!
Das dort eingetragene Objekt hat eine Text-OV "Status". Dieser soll "Ankunft" zugewiesen werden.
Jetzt versuche das mal mit den Zahnrädchen einzustellen! Ich hab's nicht geschafft.
Er geht irgendwie immer über Name und endet mit layout:GetEntityByName, aber dann gibt's ein Peng.

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 18 Stunden schrieb Andy:

Ich hoffe Du verstehst aber, dass diese Frage ohne jene Hintergrundkenntnisse kommen mußte

ich habe auf diese Frage gewartet, auch weil die jetzige Implementierung noch nicht final sein muss. Ich denke, es wird hier noch Änderungen geben, sodass mindestens $ beim Laden von Modulskripten zur Verfügung steht. Auf jeden Fall wird das Verhalten am Ende im Wiki dokumentiert.

vor 16 Stunden schrieb ademes:

Is there a way to apply the same value to a lot (list) of variables?

Yes, but only in Lua.

vor 14 Minuten schrieb Andy:

Ich hab's nicht geschafft.

Fahrplan.jpg.3af2651ff53ac0d4fe88afc526dffd12.jpg

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke! Ich hatte da irgendwie immer Name* drin. Ich teste das mal. Bei dem dann entstandenen Ausdruck mit GetEntityByName war es merkwürdig. In einem Ereignis (Ankunft am Signal) hat er es geschafft. Im anderen Ereignis, Ankunft am Prellbock, stand genau das Gleiche drin, da kam nil-Fehler im Protokoll. Unterschied nur das Schlagwort des Gleises und andere Funktionen. Mit dem Lua-Ausdruck von oben ging's dann in beiden Fällen gut.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Neo und all

Wenn man sich im ereignis protokol ("EP" waere wohl eine griffige abkuerzung) eine verzoegerung anzeigen laest mag es das EP fenster gar nicht wenn man es auch nur mit der maus anklickt oder gar verschiebt. Dann bleibt die verzoegerungsanzeige stehen:/. Um sie wieder zum anzeigen zu bewegen hilft nur die gewaehlte anzeige zu loeschen und neu abzurufen. Das gillt auch wenn gerade keine verzoegerung angezeigt ist und man das fenster bewegt. Wird anschliessend eine verzoegerung ausgeloest wird sie nur angezeigt wenn man zuvor wieder die loesch/abruf action ausgefuehrt hat.

Cheers

Tom

 

Bearbeitet von metallix
c
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallali,

ich hätte doch da mal eine Frage, wenn ich in V5 mehrere Objekte gruppiere und dann unter Eigenschaften das "i" Symbol klicke, steht dann ganz unten Content-ID: Nicht Teil des Katalogs.

Ist das nur weil die Gruppe die ich verbunden habe, so nicht im Katalog erscheint?

Bearbeitet von CC.SDL
Rechtschreibung
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @CC.SDL,

vor 36 Minuten schrieb CC.SDL:

Ist das nur weil die Gruppe die ich verbunden habe, so nicht im Katalog erscheint?

Genau so ist es, gruppierte Objekte erhalten nur dann eine Content-ID, wenn die Modellbauerin/der Modellbauer diese als Gruppe in den Katalog hochlädt. Wenn du von dir aus einzelne Objekte als Gruppe zusammenfasst, ist diese Gruppe nicht Bestandteil des Katalogs und hat somit keine Content-ID.

Gruß
Reinhard

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @CC.SDL,

so ist es. Insbesondere die Bedingung, dass die verwendeten Objekte Bestandteil des (Online-)Kataloges sind. Das heißt, sie müssen von einer Modellbauerin/einem Modellbauer hochgeladen und von Neo freigegeben worden sein.

Damit meine ich, dass du ja durchaus eigene Modelle erstellen kannst und zum Katalog (offline) hinzufügen kannst. Damit diese Modelle (egal ob später in Gruppen oder einzeln) auf von dir veröffentlichten Anlagen von allen gesehen (genutzt) werden können, müssen sie ... wie oben. Ansonsten sehen die User stattdessen ein gruoßes weißes (halbdiurchlässiges) Fragezeichen.

Gruß
Reinhard

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

mal schnell ne andere Frage.

Bisher startete mein MBS V5 immer mit meiner Professional Version, also ohne anmelden.

Seit paar Tagen muß ich mich immer neu anmelden und den Lizenz-Assistent aufrufen.

Ich arbeite immer mit den selben PC bin auch der alleinige Benutzer desselben

Warum ist das jetzt so ??

Grüße Maik

Bearbeitet von Easydiver
Link zu diesem Kommentar
Auf anderen Seiten teilen

 Hi Maik

Kann es sein das du noch mit windows7 auf dem rechner arbeitest? Da gab es ein eiliges sicherheitsupdate weil da von dem herrn gate seinen schlauen knechten eine gefahr entdeck worden war welche boesen zeitgenossen durch eine hintertuer ziemlich volle kontrolle ueber einen mit dieser luecke gekaperten rechner geben koennte.

Ich habe in meiner werkstatt ein laptop mit windows7, das oft den ganzen tag SWR3 an meine lauscher streamed. Dem musste ich anfang der woche wieder das login fuer das wifi eintragen, nachdem ich das update zugelassen hatte (Hatte im spiegel darueber gelesen). Herrn gates schergen haben vor dieser sicherheitsluecke anscheinend riesigen respekt, weil sie u a sogar ein update fuer XP, was ja eigendlich schon seit laengeem nicht mehr von der gates-bande unterstuetz wird, nun bereit halten, lt spiegel.

Cheers

Tom

Bearbeitet von metallix
c
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...