forked from floflo3299/LSS-Scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAutoAssignTrailer.js
285 lines (187 loc) · 11.1 KB
/
AutoAssignTrailer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
// ==UserScript==
// @name Auto-Assign Trailes to Vehicles
// @namespace http://tampermonkey.net/
// @version 1.1.1
// @description try to take over the world!
// @author Silberfighter
// @match https://www.leitstellenspiel.de/
// @icon https://www.google.com/s2/favicons?sz=64&domain=leitstellenspiel.de
// @require https://raw.githubusercontent.com/floflo3299/LSS-Scripts/main/HelperScripts/HelperMethods.js
// @require https://raw.githubusercontent.com/floflo3299/LSS-Scripts/main/HelperScripts/UTF16Converter.js
// @grant GM_addStyle
// ==/UserScript==
(async function() {
// createOrAssigneDropdownmenu("autoAssignTrailer", "auto Assign Trailer", autoBuyVehiclesFromStartScreen);
createOrAssigneDropdownmenu("autoAssignTrailer", "auto Assign Trailer", showOwnCustomOverlay);
var links = [
//------------ab hier bearbeiten
// Was das Skript macht: Es weißt einem aktuell noch nicht zugewiesenem Anhänger ein entsprechendes Fahrzeug eines festgelgenten Fahrzeug-Typens zu
// - es ignoriert Anhänger, welche bereits einem Zugfahrzeug zugewiesen ist
// - es weist einem Fahrzeug maximal ein Anhänger zu. Fahrzeuge, die bereits als Zugfahrzeug eingesetzt werden, werden nicht nochmal zugewiesen
// - es kontrolliert nicht, ob das Fahrzeug ein valides Zugfahrzeug vom entsprechenden Anhänger ist. Dies muss der Spieler sicherstellen
// - das Zugfahrzeug wird zufällig ausgewählt. Entsprechende Namensgebungen (z.B. Fahrzeug/Anhänger eine speziellen Gruppe) werden nicht berücksichtigt
// - wenn kein passendes Zugfahrzeug vorhanden ist (weil alle bereits als Zugfahrzeug hinterlegt sind oder gar keins vorhanden ist), wird dem Anhänger kein Zugfahrzeug zugewiesen
// Wie das Skript richtig eingestellt wird:
// erstelle einen Eintrag wie folgt und füge ihn unterhalb der markierten Zeile ein
// [Fahrzeug-ID des Anhängers, Fahrzeug-ID des Zugfahrzeug],
// dies sieht dann z.B. wie folgt aus:
//[102,123],
// 102 ist die ID des "Anh 7" vom THW, 123 die ID vom Fahrzeug-Typ "LKW 7 Lbw (WP)"
// diese Zeile sorgt also dafür, dass dem Anh 7 LKW 7 Lbw (WP) als Zugfahrzeug zugewiesen wird. Stelle sicher, dass hinter der eckigen Klammer ein Komma eingefügt wird
// Unterhalb befindet sich meine aktuelle Einstellung. Diese dient als Beispiel wie die Einträge schlussendlich aussehen sollen. Lösche oder passe die Einträge entsprechend deinen Vorlieben an bevor du das Skript ein erstes Mal ausführst.
// Der Text nach den beiden // dient lediglich als Hinweis, wofür die IDs stehen und hat keine Auswirkung
// WICHTIG: nachdem die Einträge entsprechend den eigenen Vorlieben abgeänder wurden und gespeichert wurde, lade Leitstellenspiel neu, damit die Änderungen übernommen werden
// Zum Aktivieren des automatischen Zuweisens öffnet das Menü "Skripte", welches sich auf der Hauptseite oben in der Reihe (wo auch eure Credits angezeigt werden) ganz links befindet.
// Wählt dort "auto Assign Trailer" oder in deutsch "automatisches Anhänger-Zuweisen" aus.
//---- AB HIER EINTRÄGE EINFÜGEN
[43,42], //BRmG R LKW K 9
[112,122], //NEA200 LKW 7 Lbw (E)
[70,64], //MZB GW-Wasserrettung
//------------ab hier nur bearbeiten, wenn ihr wisst was ihr macht
];
var currentlyRunning = false
async function autoBuyVehiclesFromStartScreen(){
if (currentlyRunning){
return
}
currentlyRunning = true
if (!sessionStorage.c2Vehicles || JSON.parse(sessionStorage.c2Vehicles).lastUpdate < (new Date().getTime() - 5 * 1000 * 60) || JSON.parse(sessionStorage.c2Vehicles).userId != user_id) {
await $.getJSON('/api/vehicles').done(data => sessionStorage.setItem('c2Vehicles', JSON.stringify({ lastUpdate: new Date().getTime(), value: LZString.compressToUTF16(JSON.stringify(data)), userId: user_id })));
}
var allVehicles = JSON.parse(LZString.decompressFromUTF16(JSON.parse(sessionStorage.c2Vehicles).value));
//console.log(allVehicles.length)
document.getElementById(baseID + "WaitMessage").className = "hidden";
for(var i = 0; i < links.length; i++){
let foundTrailers = allVehicles.filter(e => e.vehicle_type == links[i][0]);
//console.log(foundTrailers.length);
//console.log(links[i]);
let foundTowingVehicle = allVehicles.filter(e => e.vehicle_type == links[i][1]);
for(var n = 0; n < foundTrailers.length; n++){
messageText.innerText = (links.length-i)+" Fahrzeugtypen verbleibend\n"+(foundTrailers.length-n-1)+" Fahrzeuge vom aktuellen Typ verbleibend\nFENSTER NICHT SCHLIEßEN";
//if(foundTrailers[n].tractive_vehicle_id == null || vehicleAssignedMultipleTimes(allVehicles, foundTrailers[n].tractive_vehicle_id)){
if(foundTrailers[n].tractive_vehicle_id == null || foundTrailers[n].tractive_random == true){
if(foundTrailers[n].tractive_vehicle_id != null){
let index = allVehicles.findIndex((obj => obj.id == foundTrailers[n].id));
allVehicles[index].tractive_vehicle_id = null
foundTrailers[n].tractive_vehicle_id = null
}
//console.log("assigne trailer" + foundTrailers[n].id);
let foundVehicles = foundTowingVehicle.filter(e => e.building_id == foundTrailers[n].building_id);
for(var j = 0; j < foundVehicles.length; j++){
if(vehicleAlreadyAssigned(allVehicles, foundVehicles[j].id) == 0){
//console.log(foundTrailers[n].id);
//console.log(foundVehicles[j].id);
//console.log("");
await $.post("https://www.leitstellenspiel.de/vehicles/"+ foundTrailers[n].id, {"_method": "put", "authenticity_token": $("meta[name=csrf-token]").attr("content"), "vehicle[tractive_random]": 0, "vehicle[tractive_vehicle_id]": foundVehicles[j].id});
await delay(500);
let index = allVehicles.findIndex((obj => obj.id == foundTrailers[n].id));
//console.log(allVehicles[index])
allVehicles[index].tractive_vehicle_id = foundVehicles[j].id
//console.log(allVehicles[index])
break;
}
}
}//else{
// await $.post("https://www.leitstellenspiel.de/vehicles/"+ foundTrailers[n].id, {"_method": "put", "authenticity_token": $("meta[name=csrf-token]").attr("content"), "vehicle[tractive_random]": 0, "vehicle[tractive_vehicle_id]": foundTrailers[n].tractive_vehicle_id});
// await delay(500);
//}
//await $.post("https://www.leitstellenspiel.de/vehicles/"+ foundTrailers[n].id, {"_method": "put", "authenticity_token": $("meta[name=csrf-token]").attr("content"), "vehicle[tractive_random]": 1, "vehicle[tractive_vehicle_id]": null});
//await delay(500);
//}
//console.log("remaining Vehicle Types " + (links.length - i));
}
}
messageText.innerText = "Zuweisung abgeschlossen";
currentlyRunning = false
}
function vehicleAlreadyAssigned(allVehicles, vehicleId){
let assignedVehicles = allVehicles.filter(e => e.tractive_vehicle_id == Number(vehicleId));
//console.log(assignedVehicles.length)
//console.log("pot vehicle" + vehicleId)
return assignedVehicles.length > 0;
}
function vehicleAssignedMultipleTimes(allVehicles, vehicleId){
let assignedVehicles = allVehicles.filter(e => e.tractive_vehicle_id == Number(vehicleId));
return assignedVehicles.length > 1;
}
function delay(time) {
return new Promise(resolve => setTimeout(resolve, time));
}
let baseID = "TrailerAssignment";
// Create the overlay container
var overlayContainer = document.createElement('div');
overlayContainer.id = baseID + '-overlay-container';
document.body.appendChild(overlayContainer);
// Create the overlay content
var overlayContent = document.createElement('div');
overlayContent.id = baseID + '-overlay-content';
overlayContent.className = "modal-content";
overlayContainer.appendChild(overlayContent);
/* // Create the close button
var closeButton = document.createElement('button');
closeButton.className = "close";
closeButton.setAttribute("type","button");
closeButton.innerHTML = `<span aria-hidden="true">×</span>`;
closeButton.addEventListener('click', hideOwnCustomOverlay);
overlayContent.appendChild(closeButton);*/
// Customize the overlay styles
GM_addStyle(`
#`+baseID+`-overlay-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 9999;
background-color: rgba(0, 0, 0, 0.5);
display: none;
}
#`+baseID+`-overlay-content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 20px;
border-radius: 5px;
height: 650px;
width: 1000px;
overflow-y: auto;
}
`);
// Function to show the overlay
async function showOwnCustomOverlay() {
document.getElementById(baseID + "-overlay-container").style.display = 'block';
document.getElementById(baseID + "WaitMessage").className = "";
autoBuyVehiclesFromStartScreen()
}
// Function to hide the overlay
function hideOwnCustomOverlay() {
document.getElementById(baseID + "-overlay-container").style.display = 'none';
}
// Add event listener to toggle the overlay on click
overlayContainer.addEventListener('click', function(event) {
if (event.target === overlayContainer) {
overlayContainer.style.display = 'none';
//event.stopPropagation(); // Prevent the click event from propagating to underlying elements
}
});
overlayContent.innerHTML += `
<div class="overlay-header" id="`+baseID+`OverlayHeader">
<div>
<h1 id="`+baseID+`WaitMessage" class="hidden" style="color:red;"><center>BITTE WARTEN, Daten laden</center></h1>
</div>
</div>
<div class="overlay-body" id="`+baseID+`OverlayBody">
</div>
`;
let messageText;
if(document.getElementById(baseID+"MessagetTxt")){
messageText = document.getElementById(baseID+"MessagetTxt");
}else{
messageText = document.createElement("div");
messageText.id = baseID+"MessagetTxt";
messageText.style.fontSize = "x-large";
messageText.style.fontWeight = "900";
document.getElementById(baseID + "OverlayBody").appendChild(messageText);
}
})();