Mehr als 4 Klassenräume zeitgleich nutzen

  • Also ich habs jetzt ein paar mal nur mit dem Script probiert, nach 5 min, nach 10 min, nach 15 min - nichts zwischendurch neu geladen. Und es erscheint weiterhin kein buildings in der Konsole. Ist das vllt der Ansatz, dass es das bei mir nicht lädt? :/

    Kann ich bestätigen. Aber ich hab mit meinen knapp 90.000 Fahrzeugen und über 9.200 Gebäuden ja mit mehreren Scripten Probleme.
    Und auch die gut 2.000 Verbandsschulen machen die Sache sicher nicht einfacher...

  • Wenn ich mehrere Lehrgänge hintereinander öffne, werden irgendwann nicht mehr die gewünschte Anzahl freigegeben. Ich habe es nicht genau analysiert, jedoch habe ich folgenden Eindruck: Die Gebäudeliste wird einmalig geladen und gecacht. Die bereits verwendeten offenen Zimmer werden im Cache nicht aktualisiert. In der Folge wird versucht bereits verwendete Räume freizugeben, was fehlschlägt. Am Ende werden nicht so viele Räume freigegeben, wie es gewünscht wurde.


    Ein mehrfaches Neuladen der Gebäudeliste, wie auch die Seite zum Öffnen von Lehrgängen hat keinen Einfluss auf diesen Fehler.


    Kann das Jemand reproduzieren? Stimmt meine Vermutung oder liegt der Fehler wo anders?

  • Stimmt meine Vermutung oder liegt der Fehler wo anders?

    Jopp, das ist absolut korrekt.

    Ich hatte irgendwann mal versucht das zu beheben, ist aber deutlich aufwändiger als erwartet. Schließlich muss ich mir über den gesamten, gecachten Zeitraum merken welche Schulen (getrennt nach HiOrg) bereits besetzt sind. Nachdem der Cache wieder mit neuen Daten gefüllt wurde (alle 5 Minuten) muss das geleert werden.

    Das ganze kann durch Aushebeln des "5 Minuten Timers" umgangen werden, allerdings stelle ich diese Lösung bewusst nicht zur Verfügung.

    Mein Script greift nicht nur auf die Seiten betreffend Schulungen zu, sondern auf jede Seite die etwas mit einem Gebäude zutun hat. Und das passiert wirklich sehr häufig. Entsprechend häufig würden die APIs neu geladen werden. Und das muss nicht häufiger passieren als wirklich notwendig.


    Diese Funktionalität mit dem 5 Minuten Timer greift im übrigen scriptübergreifend. Entwickler, die dieses Schema nutzen, nehmen gleichzeitig an diesem Timer teil und leisten so ihren Beitrag zum serverschonenderen Betrieb. Bei keinerlei Konsequenzen gegenüber der Funktionalität des Scriptes.


    Zugegeben, aktuell ist dieses Problem sehr, sehr ärgerlich. Mich nervt es zwischendurch auch ganz schön. Jedoch lässt es meine Zeit momentan kaum zu größere Arbeiten an Scripten zu tätigen. Wenn sich also ein anderer Entwickler dessen annehmen möchte: nur zu.

    Die Probleme mit der Häufigkeit des Aufrufs des Scriptes (es aufzurufen wenn man eine Wache "betritt" ist völliger Quatsch) und, dass es teilweise die "Absenden"-Buttons mancher Seiten überlagert (ruft mal mit aktiviertem Script eine Wache auf und versucht dessen Namen zu bearbeiten, dann wisst ihr was ich meine), gibt es ja auch noch. Viel zutun für derzeit zu wenig Zeit.


    Ich hoffe das erklärt die derzeit ausblenden Lösungen für dieses und so manche, andere Scripte.

  • Das Problem mit dem Laden des Scripts bei Gebäuden, in denen es nicht laden soll, sollte relativ leicht gelöst sein.
    Setz doch ein return, wenn der building_type nicht dem einer Schule entspricht.

  • Das Problem mit dem Laden des Scripts bei Gebäuden, in denen es nicht laden soll, sollte relativ leicht gelöst sein.
    Setz doch ein return, wenn der building_type nicht dem einer Schule entspricht.

    Hättest du mal ins Script geschaut ;-)


    Code
    1. var schoolToSearch = +$("h1:first").attr("building_type") || null;
    2. var accessibleBuildings = [1,3,8,10];
    3. if((schoolToSearch == null || !accessibleBuildings.includes(schoolToSearch)) && window.location.pathname.indexOf("schoolings").length == -1){
    4. return false;
    5. }

    Problem: "schoolToSearch" kann z.B. bei der Bearbeiten-Seite nicht ausgelesen werden. In dem h1-Tag existiert das Attribut "building-type" nicht.


    Es gibt natürlich eine Lösung, aber eben nicht sofort. Muss ich genauer reinschauen.

  • Vielen Dank für die ausführliche Antwort und Bestätigung. Würde es dich stören, falls ich mich etwas einarbeite und einen Lösungsversuch starte (ohne Garantie)?

  • Vielen Dank für die ausführliche Antwort und Bestätigung. Würde es dich stören, falls ich mich etwas einarbeite und einen Lösungsversuch starte (ohne Garantie)?

    Nur zu. Jeder kann jederzeit via Github am Script schreiben. Ich muss es dann ohnehin mergen.


    Tipp: versuch es mit einem im SessionStorage gespeicherten Object nach HiOrg getrennt. Vielleicht reicht das ja schon.

  • Nur zu. Jeder kann jederzeit via Github am Script schreiben. Ich muss es dann ohnehin mergen.


    Tipp: versuch es mit einem im SessionStorage gespeicherten Object nach HiOrg getrennt. Vielleicht reicht das ja schon.

    Habe eine Änderung vorgenommen, die bei mir recht gut zu funktionieren scheint. Es werden für die belegten Räume ein Pseudoeintrag im jeweiligen SessionStorage generiert. Dies dürfte andere Scripte nicht beeinflussen, behebt jedoch hier das Problem der mehrfachen Buchung gleicher Räume. Freue mich aufs Feedback, ob es so klappt oder noch Anpassungen braucht.

  • Eigentlich dürfte es doch ganz einfach sein:

    Jeder Request leitet ja entweder auf die Schul-Seite oder auf die Lehrgangs-Seite weiter. Aus der response müsste man doch Daten über den jeweiligen Lehrgang / die jeweiligen Lehrgänge auslesen können. Entsprechend dieser Daten kann man das gespeicherte der jeweiligen Schule im storage überschreiben. Das würde sogar verhindern, weiteren Speicher zu belegen.


    Oder hab ich da grade nen Denkfehler drin?

  • Eigentlich dürfte es doch ganz einfach sein:

    Jeder Request leitet ja entweder auf die Schul-Seite oder auf die Lehrgangs-Seite weiter. Aus der response müsste man doch Daten über den jeweiligen Lehrgang / die jeweiligen Lehrgänge auslesen können. Entsprechend dieser Daten kann man das gespeicherte der jeweiligen Schule im storage überschreiben. Das würde sogar verhindern, weiteren Speicher zu belegen.


    Oder hab ich da grade nen Denkfehler drin?

    Nur, wenn auch nur 1 Schule verwendet wird. Wenn in mehrere Schulen Lehrgänge eröffnet werden, würde jeweils nur die Schule im Storage aktualisiert werden, auf welcher man landet.

  • Nur, wenn auch nur 1 Schule verwendet wird. Wenn in mehrere Schulen Lehrgänge eröffnet werden, würde jeweils nur die Schule im Storage aktualisiert werden, auf welcher man landet.

    Wieso? Es wird doch für jede Schule ein request gesendet. Und die Response kann man verwursteln und davon die Daten auslesen.

  • Okay, bei dem Vorschlag müsste die neue Location gefetcht und dann geparst werden. Die Transformation vom Parsen ins JSON wäre zusätzlicher Aufwand, der m.E. in keinem Verhältnis zum Nutzen steht. Ist es möglich ein einzelnes Gebäude über die API zu fetchen? Das wäre eine einfachere Alternative.


    Ansonsten würde ich es beim jetzt ausgearbeiteten Vorschlag belassen.

  • BOS-Ernie schau mal:

    Code
    1. $.post("/buildings/6140894/education", {
    2. education: 9,
    3. building_rooms_use: 1,
    4. duration: 3600,
    5. cost: 500,
    6. }, function (cb) {
    7. const schoolingId = +$("span[id^=education_schooling_]", cb).attr("id").match(/\d+/)[0];
    8. console.log(schoolingId);
    9. });

    Hier wird ein FW-Notarzt Lehrgang auf einer meiner FW-Schulen für den Verband geöffnet, mit 1 Stunde Wartezeit und 500 Credits Kosten. Im response wird schoolingId mit der ID des gerade erstellten Lehrgangs gefüllt. Tada! Da hast du deine ID vom gerade geöffneten Lehrgang.


    Grundsätzlich finde ich eure Ideen wirklich sehr nett und durchaus auch umsetzbar, aber - und ich will wirklich nicht Mutter Theresa spielen -:

    kann man das gespeicherte der jeweiligen Schule im storage überschreiben.

    Macht das bitte nicht. Niemals. Pfuscht nicht an der Quelle eurer Daten rum - ihr könnt danach niemals die Korrektheit garantieren und am Ende hantiert ihr mit falschen Datum rum. Oder noch schlimmer: andere Scripte, die auf diese Daten angewiesen sind, könnten völlig verrückt spielen.

    Das

    dürfte andere Scripte nicht beeinflussen

    , wird es aber 100%ig!


    Baut euch ein Object oder was-auch-immer mit euren eigenen Daten, $.merge()d euch alles zusammen und baut euch daraus eine saubere Datenquelle ohne irgendwelche Manipulationen an "der" Quelle. Ihr sägt euch am Ende den Ast ab auf dem ihr sitzt ...


    Kurzum: Danke für dein PR BOS-Ernie, aber ich werde es ablehnen solange Quelldaten bearbeitet werden. Ganz oben steht mein Name und ich bin dafür verantwortlich, dass andere Scripte nur funktionieren "dürften", aber nicht unbedingt werden.

  • Kurzum: Danke für dein PR BOS-Ernie, aber ich werde es ablehnen solange Quelldaten bearbeitet werden. Ganz oben steht mein Name und ich bin dafür verantwortlich, dass andere Scripte nur funktionieren "dürften", aber nicht unbedingt werden.

    Würdest du es in Betracht ziehen, wenn das Gebäude über die API abgefragt und im SessionStorage ersetzt wird?