[Script] Mission Filter by Requirements

  • Mephisto616

    Danke für deine Antwort.

    Realleben geht vor - gar keine Frage - also bei mir wird das Script garnicht mehr angezeigt Siehe Bild).



    Ich werd mal im Laufe des Tages noch ein paar Versuche machen.

    Liebe Grüße

    :evil: aus Niederbayernl

    Spielername: DJGrisu112

    System: WIN10

    Browser: Firefox aktuelle Version

    ID: 237708

    Telekom-Leitung mit 175MB


    "Gott zur Ehr - Dem Nächsten zur Wehr":saint:

    Wenn ich einzelne Wörter fett und in Großbuchstaben schreibe ist das kein Schreien sondern eine Hervorhebung:!:

    Ich wünsch mir den DISLIKE-Button wieder :!:

  • forum.leitstellenspiel.de/cms/index.php?attachment/134198/


    Der Einsatzfilter funktioniert bei mir auch, mit den zu sehenden Einstellungen bzgl. der dilettantischen InGame-Sortierungsmöglichkeit.


    Da aber bei dir EG112 auch das Skript für die Einsatzgeschwindigkeit angezeigt wird, welches theoretisch auch bei einem Button einen Fehler aufweisen könnte, müsste in der Theorie auch der Einsatzfilter angezeigt werden. Kann natürlich sein, dass ich den doch mehr modifiziert habe, von daher wäre es echt gut, den Code von dir zu sehen. Oder hier einfach das Skript, so wie ich es verwende und wie es bei mir funktioniert:


    Humor ist, wenn man trotzdem lacht.


    Infos:


    Bin ADHSler mit autistischen Zügen.

    Bin arg kompliziert. Habe Ecken & Kanten & stoße mit ihnen nur allzu oft an.

    Spielername: Mephisto616

    Zum Spielerprofil: KLICK MICH AN! Na los, klick mich schon, ich bin ein schöner Link.

    Mein Verband: Feuerwehrverband Weimar


    Nie vergessen, alle Feuerwehrangehörigen, die ihr Leben für die Rettung anderer Menschen gelassen haben.

    Sie leben in unseren Herzen weiter und begleiten uns jeden Tag bei unseren Herausforderungen.

  • Mephisto616


    Ich hab mal deinen Code eingefügt - leider kommt die Auswahlleiste nicht.

    Habe das Script für die Einsatzgeschwindigkeit deaktiviert - bringt auch nichts.

    Hab mal alle Scripte deaktiviert - bringt auch keinen Erfolg.


    in beiden Versionen kommen bei mir viele Fehlermeldungen (in beiden Vers. in den selben Zeilen) mit folgender Meldung:

    eslint: no-undef - `$` is not defined.



    Nachfolgen mal der Code vom alten Script:


    // ==UserScript==

    // @name Mission Filter by Requirements

    // @namespace https://www.leitstellenspiel.de/

    // @version 1.13

    // @description Filters missions by required Stations

    // @author LennardTFD

    // @match https://www.leitstellenspiel.de/

    // @match https://www.missionchief.com/

    // @match https://www.meldkamerspel.com/

    // @updateURL https://github.com/LennardTFD/…/missionReqFilter.user.js

    // @downloadURL https://github.com/LennardTFD/…/missionReqFilter.user.js

    // @grant GM_addStyle

    // ==/UserScript==


    GM_addStyle(`

    .filterShow {

    display: block;

    }


    .filterHide {

    display: none;

    }

    `);


    function filterElement(mission, arr, n = undefined) {

    let types = ["fw", "rd", "pol", "thw", "water"];


    if(n == undefined)

    {

    n = types.length;

    }


    let typeIndex = types.length - n;

    let type = types[typeIndex];


    //console.log("FilterElement()");

    //console.log(mission.attr("class"));

    if(mission.attr("class").includes("mission_deleted"))

    {

    //console.log(mission);

    //console.log("Mission is finished!");

    mission.remove();

    return;

    }



    if(n < 1)

    {

    return;

    }


    //If (mission is fw and looking for fw || not fw and looking for not fw) || ignoring fw || (mission is not fw && not looking for fw)

    if(

    (String(arr[typeIndex]) == mission.attr(types[typeIndex]))

    ||

    ((String(arr[typeIndex])) == "undefined")

    ||

    (mission.attr(types[typeIndex]) == undefined && String(arr[typeIndex]) == "false")

    )

    {

    //Show Element, start recursion for next Filter

    //mission.css("display", "block");

    //if((mission.css("display") != "none" && mission.attr("class").includes("filterHide"))|| mission.css("display") == undefined)

    //if(mission.attr("class").includes("filterHide") && !mission.attr("class").includes("mission_deleted"))

    //{

    mission.addClass("filterShow");

    mission.removeClass("filterHide");

    // }

    //else

    // {

    //mission.remove();

    //}


    filterElement(mission, arr, n - 1);

    //return false;

    }

    else

    {

    //Hide Element

    //mission.css("display", "none");

    mission.addClass("filterHide");

    mission.removeClass("filterShow");

    //return true;

    }

    }


    //function filter(fw, rd, pol, n = 3) {

    function filter(fw, rd, pol, thw, water) {


    let missions = $("#mission_list").find("div[class*='missionSideBarEntry missionSideBarEntrySearchable']");

    let deletedMissions = $("#mission_list").find("div[class*='mission_deleted']");


    deletedMissions.each((e, t) => {

    $(t).remove();

    });


    missions.each((e, t) => {

    let mission = $(t);

    //console.log(mission);

    filterElement(mission, [fw, rd, pol, thw, water]);

    });

    }


    (function() {

    'use strict';


    let requirements;


    function getRequirements()

    {

    return new Promise(resolve => {

    $.ajax({

    url: "https://www.leitstellenspiel.de/einsaetze.json",

    method: "GET",

    }).done((res) => {

    //resolve(JSON.parse(res));

    resolve(res);

    });

    });

    }


    function removeFilter()

    {

    let missions = $("#mission_list").find("div[class*='missionSideBarEntry missionSideBarEntrySearchable']");


    missions.each((e, t) => {

    // 0 = FW, 2 = RD, 6 = POL, 9 = THW, 11 = BePOL, 13 = PolHeli, 15 = Wasserrettung, werk = Werk, sek = SEK, mek = MEK

    let mission = $(t);

    mission.removeAttr("fw");

    mission.removeAttr("rd");

    mission.removeAttr("pol");

    mission.removeAttr("thw");

    mission.removeAttr("water");

    });


    }


    //Apply needed Stations to mission

    async function applyFilter()

    {

    let missions = $("#mission_list").find("div[class*='missionSideBarEntry missionSideBarEntrySearchable']");

    missions.each(async (e, t) => {

    // 0 = FW, 2 = RD, 6 = POL, 9 = THW, 11 = BePOL, 13 = PolHeli, 15 = Wasserrettung, werk = Werk, sek = SEK, mek = MEK

    let mission = $(t);

    let missionId = mission.attr("mission_type_id");

    let missionDetails = requirements.filter(e => e.id == parseInt(missionId))[0];

    if(missionDetails == undefined)

    {

    requirements = await getRequirements();

    missionDetails = requirements.filter(e => e.id == parseInt(missionId))[0];

    }

    let req = missionDetails.prerequisites;

    //let req = requirements[missionId].stations;

    //let req = Object.keys(missionDetails.requirements).filter(e => e.includes("_stations")).reduce((obj, key) => {obj[key] = missionDetails.requirements[key]; return obj}, {});


    let stations = Object.keys(req);

    //console.log(stations);

    for(let i = 0; i < stations.length; i++)

    {

    switch (stations[i]) {

    case "fire_stations":

    case "werkfeuerwehr":

    //fw = true;

    mission.attr("fw", true);

    break;

    case "rescue_stations":

    case "rescue_dog_units":

    case "max_rescue_stations":

    //rd = true;

    mission.attr("rd", true);

    break;

    case "police_stations":

    case "police_helicopter_stations":

    case "bereitschaftspolizei":

    case "max_police_stations":

    case "sek":

    case "mek":

    mission.attr("pol", true);

    //pol = true;

    break;

    case "thw":

    //thw = true;

    mission.attr("thw", true);

    break;

    case "fire_boat_docks":

    case "rescue_boat_docks":

    case "wasserrettung":

    //water = true;

    mission.attr("water", true);

    break;

    }

    }

    });

    }


    function switchStatus(element) {

    element = $(element);

    let status = element.attr("status");

    //console.log(element);

    if(status == "true")

    {

    element.removeClass("btn-success");

    element.addClass("btn-default");

    element.attr("status", "undefined");

    } else if(status == "undefined")

    {

    element.removeClass("btn-default");

    element.addClass("btn-danger");

    element.attr("status", "false");

    } else if(status == "false")

    {

    element.removeClass("btn-danger");

    element.addClass("btn-success");

    element.attr("status", "true");

    }

    //console.log(status);


    filter(

    $("#req_select_fw").attr("status"),

    $("#req_select_rd").attr("status"),

    $("#req_select_pol").attr("status"),

    $("#req_select_thw").attr("status"),

    $("#req_select_water").attr("status")

    );

    }


    function createListener(elem) {


    elem.addEventListener("click", (event) => {

    event.preventDefault();

    switchStatus(elem);

    });

    }


    function createFilterBtns()

    {

    let filterDiv = $("#btn-group-mission-select");

    let html = `<br>

    <a id='req_select_fw' class='btn btn-xs btn-default mission_selection' status="undefined" href='' classshow='mission_list' title='Grün = Einsätze werden gezeigt. Rot = Einsätze werden ausgeblendet. Schwarz = Einsätze werden ignoriert'>FW</a>

    <a id='req_select_rd' class='btn btn-xs btn-default mission_selection' status="undefined" href='' classshow='mission_list' title='Grün = Einsätze werden gezeigt. Rot = Einsätze werden ausgeblendet. Schwarz = Einsätze werden ignoriert'>RD</a>

    <a id='req_select_pol' class='btn btn-xs btn-default mission_selection' status="undefined" href='' classshow='mission_list' title='Grün = Einsätze werden gezeigt. Rot = Einsätze werden ausgeblendet. Schwarz = Einsätze werden ignoriert'>POL</a>

    <a id='req_select_thw' class='btn btn-xs btn-default mission_selection' status="undefined" href='' classshow='mission_list' title='Grün = Einsätze werden gezeigt. Rot = Einsätze werden ausgeblendet. Schwarz = Einsätze werden ignoriert'>THW</a>

    <a id='req_select_water' class='btn btn-xs btn-default mission_selection' status="undefined" href='' classshow='mission_list' title='Grün = Einsätze werden gezeigt. Rot = Einsätze werden ausgeblendet. Schwarz = Einsätze werden ignoriert'>Wasser</a>

    `;

    let filterBtns = filterDiv.append(html);


    createListener($("#req_select_fw")[0]);

    createListener($("#req_select_rd")[0]);

    createListener($("#req_select_pol")[0]);

    createListener($("#req_select_thw")[0]);

    createListener($("#req_select_water")[0]);

    }



    async function init()

    {

    createFilterBtns();

    if(sessionStorage.getItem("LSS_MissionCache") == null)

    {

    requirements = await getRequirements();

    sessionStorage.setItem("LSS_MissionCache", JSON.stringify(requirements));

    }

    else

    {

    requirements = JSON.parse(sessionStorage.getItem("LSS_MissionCache"));

    }


    applyFilter();


    var mutationObserver = new MutationObserver(function(mutations) {

    mutations.forEach(function(mutation) {

    if(!$("#search_input_field_missions").is(":focus"))

    {

    removeFilter();

    applyFilter();

    filter(

    $("#req_select_fw").attr("status"),

    $("#req_select_rd").attr("status"),

    $("#req_select_pol").attr("status"),

    $("#req_select_thw").attr("status"),

    $("#req_select_water").attr("status")

    );

    }


    });

    });

    mutationObserver.observe($("#mission_list")[0], {

    childList: true

    });


    }


    init();

    })();

    Liebe Grüße

    :evil: aus Niederbayernl

    Spielername: DJGrisu112

    System: WIN10

    Browser: Firefox aktuelle Version

    ID: 237708

    Telekom-Leitung mit 175MB


    "Gott zur Ehr - Dem Nächsten zur Wehr":saint:

    Wenn ich einzelne Wörter fett und in Großbuchstaben schreibe ist das kein Schreien sondern eine Hervorhebung:!:

    Ich wünsch mir den DISLIKE-Button wieder :!:

  • Mephisto616

    So letzter Versuch:

    das alte script entfernt - deine Code eingefügt - und siehe da die Zeile zum Filtern nach HiOrg ist wieder da!


    DANKE;):*

    Liebe Grüße

    :evil: aus Niederbayernl

    Spielername: DJGrisu112

    System: WIN10

    Browser: Firefox aktuelle Version

    ID: 237708

    Telekom-Leitung mit 175MB


    "Gott zur Ehr - Dem Nächsten zur Wehr":saint:

    Wenn ich einzelne Wörter fett und in Großbuchstaben schreibe ist das kein Schreien sondern eine Hervorhebung:!:

    Ich wünsch mir den DISLIKE-Button wieder :!:

  • Mephisto616

    So letzter Versuch:

    das alte script entfernt - deine Code eingefügt - und siehe da die Zeile zum Filtern nach HiOrg ist wieder da!


    DANKE;):*

    Sehr gerne.
    Schon, dass die Zeile wieder angezeigt wird. Ich hoffe die Funktion ist damit auch wieder vorhanden. Und wenn du gerade dabei bist, das zu checken, checke doch bitte mal das Script zur Einsatzgeschwindigkeit bei dir.

    Das Ding:


    Warum ich das so sage, bei mir hatte das Skript einen Fehler bzgl. der Einsatzgeschwindigkeit. Der Button, der dafür sorgen sollte, dass die Einsätze jede Minute generiert werden, hat leider auf die Einstellung geswitcht, dass die Einsätze alle 2 Minuten geniert werden.

    Ich weiß nicht ob das nur bei mir ein Fehler war oder ob der mit der Spielerei durch den Betreiber entstanden ist. Wenn das so wäre, würde ich den Fix in nem anderen Forenthema dann zur Verfügung stellen.


    Humor ist, wenn man trotzdem lacht.


    Infos:


    Bin ADHSler mit autistischen Zügen.

    Bin arg kompliziert. Habe Ecken & Kanten & stoße mit ihnen nur allzu oft an.

    Spielername: Mephisto616

    Zum Spielerprofil: KLICK MICH AN! Na los, klick mich schon, ich bin ein schöner Link.

    Mein Verband: Feuerwehrverband Weimar


    Nie vergessen, alle Feuerwehrangehörigen, die ihr Leben für die Rettung anderer Menschen gelassen haben.

    Sie leben in unseren Herzen weiter und begleiten uns jeden Tag bei unseren Herausforderungen.

  • Mephisto616


    Bei mir wird die Einsatzgeschwindigkeit "1min" richtig eingestellt.



    Liebe Grüße

    :evil: aus Niederbayernl

    Spielername: DJGrisu112

    System: WIN10

    Browser: Firefox aktuelle Version

    ID: 237708

    Telekom-Leitung mit 175MB


    "Gott zur Ehr - Dem Nächsten zur Wehr":saint:

    Wenn ich einzelne Wörter fett und in Großbuchstaben schreibe ist das kein Schreien sondern eine Hervorhebung:!:

    Ich wünsch mir den DISLIKE-Button wieder :!:

  • Mephisto616


    Bei mir wird die Einsatzgeschwindigkeit "1min" richtig eingestellt.

    Sehr gut, vielen Dank, dann lag der Fehler nur in meinem Script, wahrscheinlich, weil ich rumgebastelt habe. XD


    Humor ist, wenn man trotzdem lacht.


    Infos:


    Bin ADHSler mit autistischen Zügen.

    Bin arg kompliziert. Habe Ecken & Kanten & stoße mit ihnen nur allzu oft an.

    Spielername: Mephisto616

    Zum Spielerprofil: KLICK MICH AN! Na los, klick mich schon, ich bin ein schöner Link.

    Mein Verband: Feuerwehrverband Weimar


    Nie vergessen, alle Feuerwehrangehörigen, die ihr Leben für die Rettung anderer Menschen gelassen haben.

    Sie leben in unseren Herzen weiter und begleiten uns jeden Tag bei unseren Herausforderungen.