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);
    }

})();