//=require ../node_modules/dexie/dist/dexie.js class AutomaticDispose { // Variablen get ADisSettings() { return { url: "https://jf.git.rest/Jomaar/automatic-dispose/raw/branch/", branch: "master", all_missions: /***ADis_AllMissions***/ 0, name: this.name, runner: ['kt', 'om', 'os', 'vm', 've'], runner_divs: ['mission_list_krankentransporte', 'mission_list', 'mission_list_sicherheitswache', 'mission_list_alliance', 'mission_list_alliance_event'], runner_settings: ['Krankentransport-Automatic', 'MissionsOwn-Automatic', 'MissionsOwn-Automatic', 'Alliance-Automatic', 'AllianceEvent-Automatic'], runner_iframesName: ['adis-krankentransporte', 'adis-ownmissions', 'adis-plannedevents', 'adis-verbandmission', 'adis-verbandmission-event'], runner_iframes: ['adis-krankentransporte-frame', 'adis-ownmissions-frame', 'adis-plannedevents-frame', 'adis-verbandmission-frame', 'adis-verbandmission-event-frame'] } } constructor() { let self = this; this.ADis_MyHead = document.getElementsByTagName('head')[0]; this.ADis_MyBody = document.getElementsByTagName('body')[0]; // - // - Sprechwunsch Variablen // - this.Jails = []; this.JailRegEx = /\(Freie Zellen\:\s+(\d)\,\s+Entfernung\:\s+(\d+\,\d+)\s+km(?:\,\s+Abgabe an Besitzer\:\s+(\d+)%)?\)/g; this.Hospitals = []; this.RescueVehicleFrameWatchDog = null; this.PoliceVehicleFrameWatchDog = null; this.ADisDB = new Dexie('LSS_AutomaticDispo'); this.ADisDB.version(1).stores({ /** * AvailabelMissions * - missionID * - type * - name * - jsondata */ ADisAvailabelMissions: "++missionID,type,name", /** * Sprechwunsch * - vehicleID * - done */ ADisSprechwunsch: "++vehicleID,done", /** * Sprechwunsch Police * - missionID * - done */ ADisSprechwunschPolice: "++missionID,last_check,next_check,done", /** * Settings * - id * - name * - done */ ADisSettings: "&name,value", /** * MissionsOwn * MissionsVerband * MissionsVerbandEvent * - missionID * - type * - name * - available * - done * - street * - village * - last_check * - next_check * - runner - type (kt = krankentransport, om = own missions, os = sicherheitswache, vm = verband missions, ve = verband events) */ ADisMissions: "++missionID,runner,available,done,[missionID+available+done],[missionID+runner],[runner+available+done]" }); this.ADisDB.on("populate", () => { self.ADisDB.ADisSettings.add({ name: "Krankentransport-Automatic", value: 'true' }); self.ADisDB.ADisSettings.add({ name: "Sprechwunsch-Automatic", value: 'true' }); self.ADisDB.ADisSettings.add({ name: "MissionsOwn-Automatic", value: 'true' }); self.ADisDB.ADisSettings.add({ name: "Alliance-Automatic", value: 'false' }); self.ADisDB.ADisSettings.add({ name: "AllianceEvent-Automatic", value: 'false' }); }); this.ADisDB.open().catch((err) => { console.error(err.stack || err); }); this.ADisDB.on("ready", async () => { self.adis_settings = { 'Krankentransport-Automatic': false, 'Sprechwunsch-Automatic': false, 'MissionsOwn-Automatic': false, 'Alliance-Automatic': false, 'AllianceEvent-Automatic': false } await self.genSettings() setInterval(self.genSettings.bind(self), 1000); if (window.location.pathname === "/" || window.location.pathname === "/#") { self.GetAvailableMissions() self.IndexPage() setInterval(self.CollectRescueSprechwuensche.bind(self), 2500); setInterval(self.OpenNextRescueSprechwunsch.bind(self), 5000); self.CollectRescueSprechwuensche(); setInterval(self.CollectPoliceSprechwuensche.bind(self), 2500); setInterval(self.OpenNextPoliceSprechwunsch.bind(self), 5000); setTimeout(() => { self.CollectPoliceSprechwuensche(); self.CollectMissions(); self.ReadAndAddMissions(); }, 500); self.ADisSettings.runner.forEach((runner) => { self.OpenNextMission(runner) }) } /** * / /=require ../script/mission.js */ // - // - Sprechwunsch Handler Rettung // - if (window.location.pathname.indexOf("/vehicles/") !== -1 && window.name == 'adis-sprechwunsch-rescue') { self.Check_Call_Hospitals(); } // - // - Sprechwunsch Handler Polizei/Gefangene // - if (window.location.pathname.indexOf("/missions/") !== -1 && window.name == 'adis-sprechwunsch-police') { self.Check_Call_Police_Active(); } }); } get Settings() { console.log('static', this.ADisSettings); console.log('static WindowName', this); return this.ADisSettings; } includesString(string1, string2) { return string1.toLowerCase().includes(string2.toLowerCase()); } genSettings() { let self = this; return self.ADisDB.ADisSettings.each((setting) => { self.adis_settings[setting.name] = setting.value; }); } ADSettings() { let self = this; return new Promise(async (resolve, reject) => { return resolve(self.adis_settings); }) } get WindowName() { return window.name } // - // - Sprechwunsch Queue // - RemovePoliceSprechwunschFromQueue(WunschID) { return this.ADisDB.ADisSprechwunschPolice.where({ missionID: WunschID }).delete(); } RemoveRescueSprechwunschFromQueue(WunschID) { return this.ADisDB.ADisSprechwunsch.where({ vehicleID: WunschID }).delete(); } // - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // - Assign & Unassign Missions to Dispatchers // - // - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CollectRescueSprechwuensche() { let self = this; new Promise(async (resolve, reject) => { await self.ADisDB.ADisSprechwunsch.where({ done: 'false' }).each((myWunsch) => { if ($("#vehicle_list_" + myWunsch.vehicleID).find(".building_list_fms").text() != "5") { self.RemoveRescueSprechwunschFromQueue(myWunsch.vehicleID); } }) return resolve(); }).then(() => { $("#building_list").find(".building_list_vehicle_element").each(() => { var VehicleStatus = $(this).find(".building_list_fms").text(); var VehicleType = Number(parseInt($(this).find("a").attr("vehicle_type_id"))); var VehicleID = $(this).attr("vehicle_id"); if (VehicleStatus == "5" && [32, 52].indexOf(VehicleType) === -1) { self.AddRescueSprechwunschToQueue(VehicleID); } }); }); } OpenNextRescueSprechwunsch() { let self = this; this.ADSettings().then((setting) => { if (setting['Sprechwunsch-Automatic'] == 'true') { return self.ADisDB.ADisSprechwunsch.where({ done: 'false' }).limit(1) } }).then((Wunsch) => { if (Wunsch !== undefined) { Wunsch.each((myWunsch) => { let VehicleID = myWunsch.vehicleID; self.UpdateRescueSprechwunschToDone(VehicleID).then(() => { if ($("#adis-sprechwunsch-rescue-frame").attr("vehicle_id") == "empty") { $("#adis-sprechwunsch-rescue-frame").attr("src", "https://www.leitstellenspiel.de/vehicles/" + VehicleID); $("#adis-sprechwunsch-rescue-frame").attr("vehicle_id", VehicleID); self.RescueVehicleFrameWatchDog = setTimeout(async () => { self.RemoveRescueSprechwunschFromQueue(VehicleID).then((deleteCount) => { $("#adis-sprechwunsch-rescue-frame").attr("src", ""); $("#adis-sprechwunsch-rescue-frame").attr("vehicle_id", "empty"); }); }, 1500); } }); }); } }); } AddRescueSprechwunschToQueue(WunschID) { return this.ADisDB.ADisSprechwunsch.put({ vehicleID: WunschID, done: 'false' }).catch((err) => {}) } UpdateRescueSprechwunschToDone(WunschID) { return this.ADisDB.ADisSprechwunsch.put({ vehicleID: WunschID, done: 'true' }).catch((err) => {}) } Check_Call_Hospitals() { if ($("h4:contains('Eigene Krankenhäuser')").length > 0 || $("h4:contains('Verbandskrankenhäuser')").length > 0) { this.Collect_Hospitals(); } else { let VehicleID = document.location.pathname.substr(document.location.pathname.lastIndexOf("/") + 1); this.RemoveRescueSprechwunschFromQueue(VehicleID).then((deleteCount) => { $("#adis-sprechwunsch-rescue-frame").attr("src", ""); $("#adis-sprechwunsch-rescue-frame").attr("vehicle_id", "empty"); }); } } // Krankenhaus auswählen Collect_Hospitals() { let self = this; self.Hospitals = []; if ($("h4:contains('Eigene Krankenhäuser')").length > 0) { $("h4:contains('Eigene Krankenhäuser')").next("table").find("tbody").find("tr").each(() => { var HospitalHref = $(this).find("a:contains('Anfahren')").attr("href"); var HospitalID = Number(parseInt($(this).find("a:contains('Anfahren')").attr("id").replace("btn_approach_", ""))); var HospitalDistance = parseInt($(this).find("td").eq("1").text()); var HospitalFreeBeds = parseInt($(this).find("td").eq("2").text()); var HospitalValue = HospitalDistance * 450 * -1; HospitalValue += 2000; // Own Hospitals are better :-) if ($(this).find(".label:contains('Ja')").length > 0) { HospitalValue += 2000; } if (HospitalFreeBeds > 0) { self.Hospitals.push({ "id": HospitalID, "value": HospitalValue, "distance": HospitalDistance, "href": HospitalHref }); } }); } if ($("h4:contains('Verbandskrankenhäuser')").length > 0) { $("h4:contains('Verbandskrankenhäuser')").next("table").find("tbody").find("tr").each(() => { var HospitalHref = $(this).find("a").attr("href") var HospitalID = Number(parseInt(HospitalHref.substr(HospitalHref.lastIndexOf("/") + 1))); var HospitalDistance = parseInt($(this).find("td").eq("1").text()); var HospitalFreeBeds = parseInt($(this).find("td").eq("2").text()); var HospitalTaxes = parseInt($(this).find("td").eq("3").text()); var HospitalSpecialDepartment = false; // Add Button-ID to Alliance-Hospital $(this).find("a").attr("id", "btn_approach_" + HospitalID.toString()); var HospitalValue = HospitalDistance * 450 * -1; if ($(this).find(".label:contains('Ja')").length > 0) { HospitalSpecialDepartment = true; HospitalValue += 2000; } if (HospitalTaxes == 0) { HospitalValue += 2000; } else if (HospitalTaxes > 0 && HospitalTaxes <= 10) { HospitalValue += 1000; } else if (HospitalTaxes > 10 && HospitalTaxes <= 20) { HospitalValue += 0; } else { HospitalValue -= 5000; } if (HospitalFreeBeds > 0 && HospitalSpecialDepartment) { self.Hospitals.push({ "id": HospitalID, "value": HospitalValue, "taxes": HospitalTaxes, "distance": HospitalDistance, "href": HospitalHref }); } }); } self.Hospitals.sort((a, b) => { return a.value - b.value; }); self.Hospitals.reverse(); this.Send_Vehicle_To_Hospital() } // Krankenhaus einlieferung Send_Vehicle_To_Hospital() { //var HospitalID = Hospitals[0].id; var HospitalHref = this.Hospitals[0].href; // TODO: tellParent("ADisMissionDone(" + window.name + "," + MissionID + ");"); document.location.href = document.location.origin + HospitalHref; } // - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // - Assign & Unassign Missions to Dispatchers // - // - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CollectPoliceSprechwuensche() { let self = this; new Promise(async (resolve, reject) => { await self.ADisDB.ADisSprechwunschPolice.where({ done: 'false' }).each((myWunsch) => { if (!$("#mission_" + myWunsch.missionID).text().match(/Gefangene sollen abtransportiert werden/g)) { $("#mission_" + myWunsch.missionID).remove(); return self.RemovePoliceSprechwunschFromQueue(myWunsch.missionID); } }) return resolve(); }).then(() => { var MOIODOS = $('div#mission_list div.missionSideBarEntry:visible'); return MOIODOS.each(() => { if ($(this).text().match(/Gefangene sollen abtransportiert werden/g)) { var MissionID = $(this).attr("mission_id"); self.AddPoliceSprechwunschToQueue(MissionID); } }); }).then(() => { $("#building_list").find(".building_list_vehicle_element").each(() => { var VehicleStatus = $(this).find(".building_list_fms").text(); var VehicleType = Number(parseInt($(this).find("a").attr("vehicle_type_id"))); var VehicleID = $(this).attr("vehicle_id"); if (VehicleStatus == "5" && [32, 52].indexOf(VehicleType) !== -1) { var map2 = $('#radio_messages_important > li.radio_message_vehicle_' + VehicleID + ' a:contains("Zum Einsatz")'); if (map2.length > 0) { var _meap = String(map2.attr('href')); var MissionID = _meap.substr(_meap.lastIndexOf("/") + 1); if (MissionID) { self.AddPoliceSprechwunschToQueue(MissionID); } } } }); }); } OpenNextPoliceSprechwunsch() { let self = this; this.ADSettings().then((setting) => { if (setting['Sprechwunsch-Automatic'] == 'true') { return self.ADisDB.ADisSprechwunschPolice.where({ done: 'false' }).limit(1) } }).then((Wunsch) => { if (Wunsch !== undefined) { Wunsch.each((myWunsch) => { let MissionID = myWunsch.missionID; self.UpdatePoliceSprechwunschToDone(MissionID).then(() => { if ($("#adis-sprechwunsch-police-frame").attr("mission_id") == "empty") { $("#adis-sprechwunsch-police-frame").attr("src", "https://www.leitstellenspiel.de/missions/" + MissionID); $("#adis-sprechwunsch-police-frame").attr("mission_id", MissionID); self.PoliceVehicleFrameWatchDog = setTimeout(async (MissionID) => { self.RemovePoliceSprechwunschFromQueue(MissionID).then((deleteCount) => { $("#adis-sprechwunsch-police-frame").attr("src", ""); $("#adis-sprechwunsch-police-frame").attr("mission_id", "empty"); }); }, 2500, MissionID); } }); }); } }); } AddPoliceSprechwunschToQueue(WunschID) { return this.ADisDB.ADisSprechwunschPolice.put({ missionID: WunschID, done: 'false' }).catch((err) => {}) } UpdatePoliceSprechwunschToDone(WunschID) { return this.ADisDB.ADisSprechwunschPolice.add({ missionID: WunschID, done: 'true' }).catch((err) => {}) } Check_Call_Police_Active() { if ($('#h2_prisoners').length > 0) { this.Collect_Jails(); } else { this.RemovePoliceSprechwunschFromQueue(MissionID).then((deleteCount) => { $("#adis-sprechwunsch-police-frame").attr("src", ""); $("#adis-sprechwunsch-police-frame").attr("mission_id", "empty"); }); } } // Gefängnis auswählen Collect_Jails() { let self = this; self.Jails = []; var CountGefangene = Number(parseInt($('#h2_prisoners').text())); var parentNode = $('#mission_vehicle_at_mission tr > td:nth-child(5) > a:contains("Jomaar")').parent().parent(); var GefKw = parentNode.find('td:nth-child(2) > a[vehicle_type_id="52"]'); var FuStW = parentNode.find('td:nth-child(2) > a[vehicle_type_id="32"]'); var GefKwGefaegnisse = $(GefKw[0]).parent().parent().next('tr'); var FuStWGefaegnisse = $(FuStW[0]).parent().parent().next('tr'); GefKwGefaegnisse.find("a:contains('Freie Zellen')").each(() => { var JailHref = $(this).attr("href"); var JailID = JailHref.split("/").pop(); var JailText = $(this).text(); var JailFreeBeds = 0; var JailDistance = 0; var JailTax = 0; let m; while ((m = self.JailRegEx.exec(JailText)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === self.JailRegEx.lastIndex) { self.JailRegEx.lastIndex++; } // The result can be accessed through the `m`-variable. m.forEach((match, groupIndex) => { if (groupIndex == 1) { JailFreeBeds = parseInt(match.trim()); } else if (groupIndex == 2) { JailDistance = parseInt(match.trim()); } else if (groupIndex == 3 && typeof match != "undefined") { JailTax = parseInt(match.trim()); } }); } var JailValue = JailDistance * 450 * -1; JailValue += 11; //GefKw bevorzugt if (JailTax == 0) { JailValue += 10000; } else if (JailTax > 0 && JailTax <= 10) { JailValue += 5000; } else if (JailTax > 10 && JailTax <= 20) { JailValue += 1000; } else { JailValue -= 10000; } if (JailFreeBeds >= 5) { JailValue += 15000; } else if (JailFreeBeds >= 1) { JailValue += 1000; } else { JailValue -= 5000; } if (JailFreeBeds >= 5) { self.Jails.push({ "id": JailID, "value": JailValue + 1000, "text": JailText, "distance": JailDistance, "href": JailHref }); } else if (JailFreeBeds >= 1) { self.Jails.push({ "id": JailID, "value": JailValue, "text": JailText, "distance": JailDistance, "href": JailHref }); } }); FuStWGefaegnisse.find("a:contains('Freie Zellen')").each(() => { var JailHref = $(this).attr("href"); var JailID = JailHref.split("/").pop(); var JailText = $(this).text(); var JailFreeBeds = 0; var JailDistance = 0; var JailTax = 0; let m; while ((m = self.JailRegEx.exec(JailText)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === self.JailRegEx.lastIndex) { self.JailRegEx.lastIndex++; } // The result can be accessed through the `m`-variable. m.forEach((match, groupIndex) => { if (groupIndex == 1) { JailFreeBeds = parseInt(match.trim()); } else if (groupIndex == 2) { JailDistance = parseInt(match.trim()); } else if (groupIndex == 3 && typeof match != "undefined") { JailTax = parseInt(match.trim()); } }); } var JailValue = JailDistance * 450 * -1; if (JailTax == 0) { JailValue += 10000; } else if (JailTax > 0 && JailTax <= 10) { JailValue += 5000; } else if (JailTax > 10 && JailTax <= 20) { JailValue += 1000; } else { JailValue -= 10000; } if (JailFreeBeds >= 5) { JailValue += 15000; } else if (JailFreeBeds >= 1) { JailValue += 1000; } else { JailValue -= 5000; } if (JailFreeBeds >= CountGefangene) { self.Jails.push({ "id": JailID, "value": JailValue + 1000, "text": JailText, "distance": JailDistance, "href": JailHref }); } else if (JailFreeBeds >= 1) { self.Jails.push({ "id": JailID, "value": JailValue, "text": JailText, "distance": JailDistance, "href": JailHref }); } }); self.Jails.sort((a, b) => { return a.value - b.value; }); self.Jails.reverse(); if (self.Jails.length > 0) { this.Send_Vehicle_To_Jail() } else { $("#mission_vehicle_driving tbody, #mission_vehicle_at_mission tbody").find("tr").each(() => { var CalledVehicleID = parseInt($(this).find("a").first().attr("vehicle_type_id")); if (CalledVehicleID == 52) { CountGefangene -= 5; } else if (CalledVehicleID == 32) { CountGefangene -= 1; } }); if ($('#vehicle_show_table_all tr[vehicle_type="GefKw"] input[type="checkbox"]').size() > 0 && CountGefangene >= 5) { $('#vehicle_show_table_all tr[vehicle_type="GefKw"] input[type="checkbox"]').each(() => { if (CountGefangene > 0) { $(this).click() CountGefangene -= 5; } }); } if ($('#vehicle_show_table_all tr[vehicle_type="FuStW"] input[type="checkbox"]').size() > 0 && CountGefangene > 0) { $('#vehicle_show_table_all tr[vehicle_type="FuStW"] input[type="checkbox"]').each(() => { if (CountGefangene > 0) { $(this).click() CountGefangene -= 1; } }); } if ($('#vehicle_show_table_all input[type="checkbox"]:checked').size() > 0) { $('#mission_alarm_btn').click(); } } } // Gefängnis einlieferung Send_Vehicle_To_Jail() { var JailHref = this.Jails[0].href document.location.href = document.location.origin + JailHref; } // - // - Index Page Loader // - IndexPage() { let self = this; // - // - Google Font // - var styleElement = document.createElement("link"); styleElement.rel = "stylesheet"; styleElement.href = "https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700"; this.ADis_MyHead.appendChild(styleElement); // - // - FontAwesome 5 // - var scriptElement = document.createElement("script"); scriptElement.type = "text/javascript"; scriptElement.src = "https://use.fontawesome.com/releases/v5.5.0/js/all.js"; this.ADis_MyHead.appendChild(scriptElement); // - // - Navbar Dashboard // - var styleElement = document.createElement("link"); styleElement.rel = "stylesheet"; styleElement.type = "text/css"; styleElement.media = "screen"; styleElement.href = this.ADisSettings.url + this.ADisSettings.branch + "/style/interface.css"; this.ADis_MyHead.appendChild(styleElement); // Create Dashboard $('#news_li').before('
  • '); $('#adis-nav-item').html(`/***ADis_Navbar***/0`) $("#adis-dashboard").css({ display: "none", opacity: "0" }); // // Click Events // $("#adis-setting-krankentransport-automatic").click(() => { var tf = $(this).hasClass("active"); self.ADisDB.ADisSettings.put({ name: "Krankentransport-Automatic", value: !tf ? 'true' : 'false' }).then((res) => { self.UIUpdateSettings(); }); }); $("#adis-setting-full-automatic").click(() => { var tf = $(this).hasClass("active"); self.ADisDB.ADisSettings.put({ name: "MissionsOwn-Automatic", value: !tf ? 'true' : 'false' }).then(() => { self.UIUpdateSettings(); }); }); $("#adis-setting-sprechwunsch-automatic").click(() => { var tf = $(this).hasClass("active"); self.ADisDB.ADisSettings.put({ name: "Sprechwunsch-Automatic", value: !tf ? 'true' : 'false' }).then(() => { self.UIUpdateSettings(); }); }); $("#adis-setting-alliance-automatic").click(() => { var tf = $(this).hasClass("active"); self.ADisDB.ADisSettings.put({ name: "Alliance-Automatic", value: !tf ? 'true' : 'false' }).then(() => { self.UIUpdateSettings(); }); }); $("#adis-setting-alliance-automatic").click(() => { var tf = $(this).hasClass("active"); self.ADisDB.ADisSettings.put({ name: "AllianceEvent-Automatic", value: !tf ? 'true' : 'false' }).then(() => { self.UIUpdateSettings(); }); }); // // Dashboard Functions // $("#adis-open-button").click(() => { $("#adis-dashboard").css("display", "flex"); $("#adis-dashboard").animate({ opacity: 1 }, 200); }); $("#adis-dashboard-close-button").click(() => { $("#adis-dashboard").animate({ opacity: 0 }, 200, () => { $(this).css("display", "none"); }); }); // initial call to load the current setting state self.UIUpdateSettings(); // Create Iframes $("body").append('
    '); $("#adis-frame-container").html(`/***ADis_Iframes***/0`); $("#adis-frame-container").css({ display: "none", opacity: "0" }); } // // Display Settings // UIUpdateSettings() { this.ADisDB.ADisSettings.each((setting) => { if (setting.name == "Krankentransport-Automatic") { if (setting.value == "true") { $("#adis-setting-krankentransport-automatic").addClass("active"); } else { $("#adis-setting-krankentransport-automatic").removeClass("active"); } } else if (setting.name == "Sprechwunsch-Automatic") { if (setting.value == "true") { $("#adis-setting-sprechwunsch-automatic").addClass("active"); } else { $("#adis-setting-sprechwunsch-automatic").removeClass("active"); } } else if (setting.name == "MissionsOwn-Automatic") { if (setting.value == "true") { $("#adis-setting-full-automatic").addClass("active"); } else { $("#adis-setting-full-automatic").removeClass("active"); } } else if (setting.name == "Alliance-Automatic") { if (setting.value == "true") { $("#adis-setting-alliance-automatic").addClass("active"); } else { $("#adis-setting-alliance-automatic").removeClass("active"); } } else if (setting.name == "AllianceEvents-Automatic") { if (setting.value == "true") { $("#adis-setting-allianceevents-automatic").addClass("active"); } else { $("#adis-setting-allianceevents-automatic").removeClass("active"); } } }); } GetAvailableMissions() { let self = this; for (let i in self.ADisSettings.all_missions) { let Mission = self.ADisSettings.all_missions[i]; self.AddAvailableMissions(Mission); } } AddAvailableMissions(Mission) { return this.ADisDB.ADisAvailabelMissions.put({ missionID: Mission.id, type: Mission.type, name: Mission.name, jsondata: Mission }).catch((err) => { console.error(err) }) } // - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // - Collect Own Missions // - // - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CollectMissions() { const self = this; const MyOwnObserver = new MutationObserver((mutations) => { mutations.forEach((mutation) => { console.log(mutation.target.id); console.table(mutation); // <<-- includes text nodes if (mutation.addedNodes.length >= 1) { // do it here for (var i = 0; i < mutation.addedNodes.length; i++) { self.ReadAndAddMissions(mutation.addedNodes[i].attributes.getNamedItem("mission_id").value, mutation.target.id); } } }); }); const MyOwnConfig = { childList: true }; MyOwnObserver.observe($('#mission_list')[0], MyOwnConfig); MyOwnObserver.observe($('#mission_list_krankentransporte')[0], MyOwnConfig); MyOwnObserver.observe($('#mission_list_sicherheitswache')[0], MyOwnConfig); MyOwnObserver.observe($('#mission_list_alliance_event')[0], MyOwnConfig); MyOwnObserver.observe($('#mission_list_alliance')[0], MyOwnConfig); } ReadAndAddMissions(MissionID, Runner) { const self = this; return self.ADisDB.transaction('rw', [self.ADisDB.ADisMissions, self.ADisDB.ADisAvailabelMissions], () => { if (typeof MissionID != 'undefined') { self.AddMission(MissionID, Runner); } else { self.ADisSettings.runner_divs.forEach((RunnerX, index) => { $("#" + RunnerX).find(".missionSideBarEntry").each(async () => { MissionID = $(this).attr("mission_id"); await self.AddMission(MissionID, RunnerX); }); }) } }); } AddMission(ID, Runner) { const self = this; // convert Runnter to Settings const runnerID = self.ADisSettings.runner_divs.indexOf(Runner); const settingOpt = self.ADisSettings.runner_settings[runnerID]; const runnerOpt = self.ADisSettings.runner[runnerID]; console.table({ runnerID: runnerID, settingOpt: settingOpt, runnerOpt: runnerOpt }); return self.ADSettings().then((setting) => { console.log('setting', setting[settingOpt]); if (setting[settingOpt] == 'true') { let where = { missionID: ID, runner: runnerOpt }; console.table(where) return self.ADisDB.ADisMissions.where(where).limit(1) } }).then((Missions) => { console.log(Missions); if (typeof Missions === "undefined"){ return; } return Missions.count((count) => { if (count > 0) { return Missions.each(() => { var MissionElement = $("#mission_" + ID); var _MissionID = MissionElement.attr("mission_id"); var _MissionType = MissionElement.attr("mission_type_id"); var addr = MissionElement.find(".map_position_mover").text().split(",") var MissionName = addr[0]; var MissionStreet = addr[1]; var MissionVillage = addr[2]; return self.ADisDB.ADisAvailabelMissions.get({ type: MissionType }).then((available) => { return self.AddMissionsToQueue({ "id": _MissionID, "type": _MissionType, "runner": runnerOpt, "name": MissionName, "street": MissionStreet, "village": MissionVillage, "available": (available !== undefined), "done": false, "last_check": Math.floor(new Date().getTime() / 1000), "next_check": Math.floor(new Date().getTime() / 1000) + 1 }); }); }); } else { var MissionElement = $("#mission_" + ID); var MissionID = MissionElement.attr("mission_id"); var MissionType = MissionElement.attr("mission_type_id"); var addr = MissionElement.find(".map_position_mover").text().split(",") var MissionName = addr[0]; var MissionStreet = addr[1]; var MissionVillage = addr[2]; return self.ADisDB.ADisAvailabelMissions.get({ type: MissionType }).then((available) => { return self.AddMissionsToQueue({ "id": MissionID, "type": MissionType, "runner": runnerOpt, "name": MissionName, "street": MissionStreet, "village": MissionVillage, "available": (available !== undefined), "done": false, "last_check": Math.floor(new Date().getTime() / 1000), "next_check": Math.floor(new Date().getTime() / 1000) + 1 }); }); } }); }); } AddMissionsToQueue(Mission) { console.log(Mission); const self = this; return self.ADisDB.ADisMissions.put({ missionID: Mission.id, type: Mission.type, runner: Mission.runner, name: Mission.name, available: Mission.available ? 'true' : 'false', done: Mission.done ? 'true' : 'false', street: Mission.street, village: Mission.village, last_check: Mission.last_check, next_check: Mission.next_check }).catch((err) => { console.error(err) }); } UpdateMissions(Mission) { const self = this; return self.ADisDB.ADisMissions.put(Mission).catch((err) => { console.error(err) }) } UpdateMissionsToDone(MissionID) { const self = this; return self.ADisDB.ADisMissions.update(MissionID, { last_check: Math.floor(new Date().getTime() / 1000), next_check: Math.floor(new Date().getTime() / 1000) + 300 }).catch((err) => { console.error(err) }) } RemoveMissionsFromQueue(MissionID) { const self = this; return self.ADisDB.ADisMissions.where({ missionID: MissionID }).delete().catch((err) => { console.error(err) }) } OpenNextMission(Runner) { const self = this; const runnerID = self.ADisSettings.runner.indexOf(Runner) const runnerIframeName = self.ADisSettings.runner_iframesName[runnerID]; const runnerSettings = self.ADisSettings.runner_settings[runnerID]; return self.ADisDB.transaction('rw', [self.ADisDB.ADisMissions, self.ADisDB.ADisSettings, self.ADisDB.ADisAvailabelMissions], () => { self.ADSettings().then((setting) => { if (setting[runnerSettings] == 'true') { return self.ADisDB.ADisMissions.where({ runner: Runner, available: 'true', done: 'false' }).and(function (item) { return item.next_check <= Math.floor(new Date().getTime() / 1000) }).limit(1) } }).then((Wunsch) => { if (Wunsch !== undefined) { return Wunsch.count(function (count) { if (count > 0) { return Wunsch.each((myWunsch) => { let MissionID = myWunsch.missionID; if ($('#' + runnerIframeName).attr("mission_id") == "empty") { $('#' + runnerIframeName).attr("src", "https://www.leitstellenspiel.de/missions/" + MissionID); $('#' + runnerIframeName).attr("mission_id", MissionID); self.UpdateMissionsToDone(MissionID).then(() => { $('#' + runnerIframeName).attr("src", ''); $('#' + runnerIframeName).attr("mission_id", 'empty'); setTimeout(self.OpenNextMission.bind(self), 5000, Runner); }) } }); } else { return setTimeout(self.OpenNextMission.bind(self), 5000, Runner); } }); } return setTimeout(self.OpenNextMission.bind(self), 5000, Runner); }); }); } } window.AutomaticDisposeCall = new AutomaticDispose();