MediaWiki:Cluedo generator.js
Aus Werwolf Online
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
(function () {
var inputField = document.createElement('input');
inputField.type = 'text';
inputField.value = '4_6_3_543';
inputField.id = 'textfield';
var inputButton = document.createElement('input');
inputButton.type = 'button';
inputButton.value = 'Erzeuge Setting';
inputButton.addEventListener('click', action);
var inputDiv = document.getElementById('loadCustomJS');
inputDiv.innerHTML = '';
inputDiv.appendChild(inputField);
inputDiv.appendChild(inputButton);
// Code von Sareon
function Info(text, wwText) {
this.text = text;
this.wwText = wwText;
}
Info.prototype.toString = function toString() {
return this.text + " (" + this.wwText + ")";
}
Info.prototype.getText = function (isWW) {
if (isWW) {
return this.wwText;
} else {
return this.text;
}
}
var p00 = new Info("Lord Walson", "David");
var p01 = new Info("Oberst von Gatow", "Nyth");
var p02 = new Info("Reverend Grün", "Daro");
var p03 = new Info("Lady Sarah", "Sareon");
var p04 = new Info("Prof. Bloom", "Datalog");
var p05 = new Info("Frau Weiß", "Samaraner");
var p06 = new Info("Fräulein Gloria", "Alohomora");
var p07 = new Info("Baronin von Porz", "Xaver");
var p08 = new Info("Köchin Dora", "Jopnu");
var p09 = new Info("Pferdeknecht Anthony", "Lexi");
var p10 = new Info("Gärtner Horst", "Xsí");
var p11 = new Info("Kammerzofe Margareth", "Sunset");
var p12 = new Info("Kutscher Norman", "Vince");
var o00 = new Info("Wohnzimmer", "S" + "eher");
var o01 = new Info("Küche", "H" + "exe");
var o02 = new Info("Speisezimmer", "W" + "olf");
var o03 = new Info("Salon", "A" + "mor");
var o04 = new Info("Garten", "J" + "äger");
var o05 = new Info("Schlafzimmer", "F" + "lötenspieler");
var o06 = new Info("Dachboden", "J" + "ason");
var o07 = new Info("Gästezimmer", "M" + "euchelmörder");
var o08 = new Info("Treppenhaus", "R" + "abe");
var o09 = new Info("Wintergarten", "W" + "aisenmädchen");
var o10 = new Info("Bibliothek", "P" + "hantom");
var o11 = new Info("Galerie", "T" + "ratschtante");
var o12 = new Info("Trophäenraum", "P" + "rinz");
var o13 = new Info("Billardzimmer", "R" + "otkäppchen");
var o14 = new Info("Kaminzimmer", "F" + "reimaurer");
var o15 = new Info("Gewächshaus", "Z" + "aubermeister");
var o16 = new Info("Weinkeller", "G" + "ünstling");
var o17 = new Info("Stallungen", "V" + "erfluchter");
var w00 = new Info("Dolch", "Erschießen");
var w01 = new Info("Arsen", "Vergiften");
var w02 = new Info("Pistole", "Erstechen");
var w03 = new Info("Rasenmäher", "Outen");
var w04 = new Info("Leuchter", "Waldlauf");
var w05 = new Info("Rohrzange", "Fressen");
var w06 = new Info("Kissen", "Liebeskummer");
var w07 = new Info("Seil", "Lynchen");
var w08 = new Info("Holzpfahl", "Inaktivität");
var w09 = new Info("Peitsche", "Todeslasern");
var w10 = new Info("Hufeisen", "Foltern");
var w11 = new Info("Wurfmesser", "Ge-Holde-Maiden");
var w12 = new Info("Rattengift", "T" + "odesamulett");
var w13 = new Info("Stricknadeln", "Ü" + "berrennen");
var w14 = new Info("Baseballschläger", "Misstrauen");
var w15 = new Info("Motorsäge", "Verzaubern");
var r00 = new Info("Morgengrauen", "Forenspiel");
var r01 = new Info("Frühstück", "Finsterwald");
var r02 = new Info("Vormittag", "Einsatzzentrale");
var r03 = new Info("Mittagsstunde", "Organisation");
var r04 = new Info("Mittagessen", "Mentorenzentrale");
var r05 = new Info("Nachmittag", "Friedhof der Forenspiele");
var r06 = new Info("Teezeit", "Wirtshaus");
var r07 = new Info("Abendrot", "Spielwiese");
var r08 = new Info("Abendessen", "Kreativecke");
var r09 = new Info("Nacht", "Düsterwald");
var r10 = new Info("Mitternacht", "Draft-Lounge");
//Global Infos
var move1,
move2,
move3,
pos;
var isWith4,
isWithWW;
function generateGame(key) {
var allOrte = [o00, o01, o02, o03, o04, o05, o06, o07, o08, o09, o10, o11, o12, o13, o14, o15, o16, o17];
var allWaffen = [w00, w01, w02, w03, w04, w05, w06, w07, w08, w09, w10, w11, w12, w13, w14, w15];
var allPersons = [p00, p01, p02, p03, p04, p05, p06, p07, p08, p09, p10, p11, p12];
var allZeiten = [r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, r10];
//Key has to be P_Anzahl_WW_ZahlZahlZahl
var splitted = key.split("_");
if (splitted.length != 4) {
document.getElementById("infoBox").innerHTML = "Key hat keine 4 Teile.";
return;
}
var spieler = parseInt(splitted[0]);
var anzahl = parseInt(splitted[1]);
var version = parseInt(splitted[2]);
var p1 = parseInt(splitted[3].substring(0, 1)) + 1;
var p2 = parseInt(splitted[3].substring(1, 2)) + 1;
var p3 = parseInt(splitted[3].substring(2, 3)) + 1;
var check = checkCorrectness(spieler, anzahl, version, p1, p2, p3);
if (check != "") {
document.getElementById("infoBox").innerHTML = check;
return;
}
//Set Globals
//Version 1=Normal3, 2=Normal4, 3=WW3, 4=WW4
isWith4 = true;
if (version === 1 | version === 3) {
isWith4 = false;
}
isWithWW = true;
if (version === 1 | version === 2) {
isWithWW = false;
}
move1 = p1 * p2;
move2 = p1 * p3;
move3 = p2 * p3;
pos = 0;
//Fill all
reduzieren(allPersons, allOrte, allWaffen, allZeiten, anzahl);
uebersichtFuellen(allPersons, allOrte, allWaffen, allZeiten);
loesungFuellen(allPersons, allOrte, allWaffen, allZeiten);
var rest = erstelleRest(allPersons, allOrte, allWaffen, allZeiten);
spielerInfoFuellen(rest, spieler);
pos = (pos + move1 + move2 + move3) % spieler + 1;
document.getElementById("infoBox").innerHTML = "Spoiler gefüllt! Es beginnt Spieler " + pos;
}
function reduzieren(allPersons, allOrte, allWaffen, allZeiten, anzahl) {
while (allPersons.length > anzahl) {
pos = (pos + move1) % allPersons.length;
allPersons.splice(pos, 1);
}
while (allOrte.length > anzahl) {
pos = (pos + move2) % allOrte.length;
allOrte.splice(pos, 1);
}
while (allWaffen.length > anzahl) {
pos = (pos + move3) % allWaffen.length;
allWaffen.splice(pos, 1);
}
while (allZeiten.length > anzahl) {
pos = (pos + move1) % allZeiten.length;
allZeiten.splice(pos, 1);
}
}
function uebersichtFuellen(t1, t2, t3, t4) {
document.getElementById("personen").innerHTML = arrayToString(t1);
document.getElementById("orte").innerHTML = arrayToString(t2);
document.getElementById("waffen").innerHTML = arrayToString(t3);
if (isWith4) {
document.getElementById("zeit").innerHTML = arrayToString(t4);
} else {
document.getElementById("zeit").innerHTML = "Keine 4. Kategorie";
}
if (isWithWW) {
document.getElementById("feld1").innerHTML = "Forenuser:";
document.getElementById("feld2").innerHTML = "Opfer:";
document.getElementById("feld3").innerHTML = "Tödliche Aktionen:";
document.getElementById("feld4").innerHTML = "Orte:";
} else {
document.getElementById("feld1").innerHTML = "Personen:";
document.getElementById("feld2").innerHTML = "Orte:";
document.getElementById("feld3").innerHTML = "Tatwaffen:";
document.getElementById("feld4").innerHTML = "Tageszeiten:";
}
}
function loesungFuellen(allPersons, allOrte, allWaffen, allZeiten) {
pos = (pos + move3) % allPersons.length;
var loesungPerson = allPersons.splice(pos, 1)[0];
pos = (pos + move2) % allOrte.length;
var loesungOrt = allOrte.splice(pos, 1)[0];
pos = (pos + move1) % allWaffen.length;
var loesungWaffe = allWaffen.splice(pos, 1)[0];
pos = (pos + move3) % allZeiten.length;
var loesungZeit = allZeiten.splice(pos, 1)[0];
var array = [loesungPerson, loesungOrt, loesungWaffe];
var string = "";
if (isWithWW) {
string = loesungPerson.wwText + " tötete den/die/das " + loesungOrt.wwText + " durch " + loesungWaffe.wwText;
if (isWith4) {
string += " im/in der " + loesungZeit.wwText;
}
} else {
string = loesungPerson.text + " tötete mit einer/einem " + loesungWaffe.text + " im " + loesungOrt.text;
if (isWith4) {
string += " zur/zum/am " + loesungZeit.text;
}
}
document.getElementById("loesung").innerHTML = string;
}
function erstelleRest(allPersons, allOrte, allWaffen, allZeiten) {
var rest = [];
allPersons.forEach(function (entry) {
rest.push(entry);
});
allOrte.forEach(function (entry) {
rest.push(entry);
});
allWaffen.forEach(function (entry) {
rest.push(entry);
});
if (isWith4) {
allZeiten.forEach(function (entry) {
rest.push(entry);
});
}
return rest;
}
function spielerInfoFuellen(rest, spieler) {
var spielerInfo = [];
for (var index = 0; index < spieler; index++) {
spielerInfo[index] = [];
}
var zaehler = 0;
while (rest.length > 0) {
pos = (pos + move1 + move2 + move3) % rest.length;
spielerInfo[zaehler].push(rest.splice(pos, 1)[0]);
zaehler = (zaehler + 1) % spieler;
}
for (var index = 0; index < spieler; index++) {
document.getElementById("Spieler" + (index + 1)).innerHTML = arrayToString(spielerInfo[index], isWithWW);
}
}
function arrayToString(array) {
var erg = "";
array.forEach(function (entry) {
erg += entry.getText(isWithWW) + ", ";
});
return erg.substr(0, erg.length - 2);
}
function checkCorrectness(spieler, anzahl, version, p1, p2, p3) {
if (spieler % 1 != 0) {
return "Der Key-Wert für Spieler ist keine Zahl.";
} else if (spieler < 2 | spieler >= 9) {
return "Spielerzahl von " + spieler + " unmöglich."
} else if (anzahl % 1 != 0) {
return "Der Key-Wert für die Anzahl an Objekten ist keine Zahl.";
} else if (anzahl < 2 | anzahl * 3 < spieler | anzahl > 12) {
return "Die Anzahl an Objekten (" + anzahl + ") ist unmöglich.";
} else if (p1 % 1 != 0 | p2 % 1 != 0 | p3 % 1 != 0) {
return "Der Key-Wert am Schluss ist keine dreistellige Zahl.";
} else if (version < 1 | version > 4) {
return "Der Key-Wert für Version ist inkorrekt.";
} else {
return ""
}
}
function action() {
var key = document.getElementById('textfield').value;
generateGame(key);
}
})();