Announcement

Collapse
No announcement yet.

Brauche Hilfe mit JS

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Brauche Hilfe mit JS

    Hey @ll,

    ich bin dabei mein altes, textbasiertes Browsergame zu akltualisieren und bin beim PVP-Kampf auf ein Problem gestoßen welches ich bisher nicht selbst lösen konnte.
    Das komische dabei, das PVE-Kampf-Skript habe ich alleine geschaft zum laufen zu bringen - hier war es eig nur nötig den HTML-Teil zu aktualisieren - weswegen ich mir auch nicht zu 100% sicher bin ob es beim PVP auch wirklich nur am JS liegt. <- das ist aber ein Grund mehr das hier zu posten, damit ich nicht die ganze Zeit an der falschen Stelle suche (da ich mich mit JS auch nicht so gut auskenne).

    Wie äußert sich das Problem? - Beim starten eines PVP-Kampfes verläuft erst noch alles gut, bis dann beide Spieler im Kampf sind und das Kampf-Skript ständig durchläuft, es startet also nicht mal die erste Runde - als würde er die neue Runde nicht berechnen können, oder zumindest nicht wer anfangen soll (wirkt zumindest so auf mich wenn ich mit den Werkzeugen des Web-Entwicklers arbeite - allerdings ist das auch schwer zu sagen da durch das ständige durchlaufen des Codes auch die Netzwerkanalyse ständig neu angezeigt wird).

    Den PHP-Code habe ich schon aktualisiert und der gibt soweit auch keine Fehlermeldung aus.
    Der HTML-Teil ist auch schon überarbeitet und funktioniert so wie er ist auch beim PVE-Kampf.


    Wenn sich das mal jemand anschauen könnte wäre ich ihm sehr dankbar
    Auch gibt es die Möglichkeit sich das auf der Seite selbst anzuschauen, wenn erwünscht.



    Code folgt als Antwort da sonst Post zu lang ist.


    HTML-Code:
    Code:
    <body bgcolor="#D4D4D4" onLoad="start('<?= $start ?>','<?= $special_load ?>','<?= $zeit_wenn ?>','<?= $zeit_wert1337 ?>');">
            <form action="" name="kampfsystem" onsubmit="saveData(); return false;">
    <!-- Linke Tabelle -->
                <table style="position: absolute; left: 20; top: 37; width: 252px; height: 370px;" id="AutoNumber1">
                    <tr>
                        <td bgcolor="#763131">
                            <p style="text-align: left;"><b>&nbsp;Jutsus</b></p>
                        </td>
                    </tr>
                    <tr>
                        <td bgcolor="#5F704F" >
                            <div id="loadattacke">L&auml;dt Jutsus..</div>
                        </td>
                    </tr>
                    <tr>
                        <td bgcolor="#763131">&nbsp;<b>Verbrauch</b></td>
                    </tr>
                    <tr>
                        <td bgcolor="#5F704F">&nbsp;
                            HP: <b id="hpanzeige">0%</b><br>&nbsp;
                            Chakra: <b id="mpanzeige">0%</b><br>&nbsp;
                            SP: <b id="spanzeige">0%</b>
                        </td>
                    </tr>
                    <tr>
                        <td bgcolor="#763131"><b>&nbsp;Special Attacken</b></td>
                    </tr>
                    <tr>
                        <td bgcolor="#5F704F">&nbsp;<div id="loadspattacke"></div></td>
                    </tr>
                    <tr>
                        <td bgcolor="#763131">&nbsp;Ziel</td>
                    </tr>
                    <tr>
                        <td bgcolor="#5F704F">&nbsp;
                            <div id="loadziel"></div>
                            <br><br>&nbsp;
                            <form action="../index.php?as=kampf_lobby" name="back" method="post">
                                <input type="submit" value="warten auf Gegner(90)" name="submit1" disabled>
                            </form>
                            <form action="kampf.php" name="submit2" method="post"></form>&nbsp;
                        </td>
                    </tr>
                </table>
                <div id="leiste_links"></div>
                <div style="position: absolute; left: 192; top: 17; width:400; height:142">
                    <p>
                        <div id="start_anfang"></div>
                        <div id="start_kampf2" style="position: absolute; left: 40; top: 171; width:544; height:142">Auf Angriff warten...</div>
                        <div id="debug"></div>
                    </p>
                </div>
                <div id="info_text" style="position: absolute; left: 250; top: 10; width:544; height:142">Fight</div><br><br>
            </form>
        </body>
    Zuletzt editiert von Kapa; 14.10.2021, 18:30.

  • #2
    JS-Code:
    Code:
    var xmlHttp = false;
    var old;
    var sec1;
    var casttime1;
    var casttime2;
    var wieschnell1;
    var wieschnell2;
    var zeit_kampf_beginn;
    var hpanzeige;
    var aktiv_kampf;
    var sec_nach;
    var save_wert;
    var new_round;
    var old_round;
    var pfad1;
    var pfad2;
    var debug1 = 0;
    new_round = 0;
    old_round = 0;
    aktiv_kampf = 0;
    sec1 = 30;
    casttime1 = 0;
    casttime2 = 0;
    var ultra_script_sperre;
    ultra_script_sperre = 0;
    var absturz = 0;
    var old_absturz = 0;
    var Round9 = 1;
    
    
    // XMLHttpRequest-Instanz erstellen
    // ... fuer Internet Explorer
    try {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e) {
        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e) {
            xmlHttp = false;
        }
    }
    // ... fuer Mozilla, Opera und Safari
    if(!xmlHttp && typeof XMLHttpRequest != 'undefined') {
        xmlHttp = new XMLHttpRequest();
    }
    
    
    function popup(link) {
        var Info = window.open(link,"","status=no,hotkeys=no,Height=250,Width=300,scrollbars=yes");
    }
    
    
    function daten_attacken_anzeige() {
        var a = document.kampfsystem.technik1.value.split(",")
        document.getElementById("hpanzeige").innerHTML = a[1];
        document.getElementById("mpanzeige").innerHTML = a[2];
        document.getElementById("spanzeige").innerHTML = a[3];
    }
    
    
    function zeitablauf(sec,wert1) {
        // wert1 = 1 wenn kampf gestartet ist
        if(wert1 != 1) {
            if(sec1 < 1) {
                sec1 = 0;
                document.kampfsystem.submit1.disabled = false;
                document.kampfsystem.submit1.value = 'Kampf Beenden';
            }
            else {
                sec1 = sec1 - 1;
                document.kampfsystem.submit1.value = 'warten auf Gegner('+sec+')';
                setTimeout("zeitablauf(sec1,0)",1000);
            }
        }
        else {
        // Gegner ist weg kampf vorbei...
            if(sec1 < 1) {
                // bug finden....
                document.submit2.submit();
            }
            else {
                gegner_am_zug();
            }
        }
    
        if(wert1 != 1) {
            setInterval("loadData('kampf.php?action=gegner_da','info_text')",4000);
        }
    }
    
    
    function gegner_am_zug() {
    
        sec1 = sec1 - 1;
        if(zeit_kampf_beginn == 1) {
            setTimeout("zeitablauf(sec1,1)",1000);
            // sie sind dran
            document.kampfsystem.submit1.value = 'Angreifen('+sec1+')';
            document.kampfsystem.submit1.disabled = false;
        }
        else {
            setTimeout("zeitablauf(sec1,1)",1000);
            document.kampfsystem.submit1.value = 'Gegner am zug('+sec1+')';
            document.kampfsystem.submit1.disabled = true;
        }
    }
    
    
    function start(wert_start,special_load,zeit1,anfangs_zeit) {
        sec_nach = anfangs_zeit;
    
        if(wert_start == 0) {
            setTimeout("loadData('kampf.php?action=gegner_da','info_text')",4000);
            setTimeout("zeitablauf(sec1,0)",1000);
        }
        else {
        // beide spieler sind da....
            sec1 = zeit1;
            aktiv_kampf = 1;
            document.kampfsystem.submit1.value = 'Bitte warten...';
            loadData('kampf.php?action=start_daten','start_anfang');
        }
    }
    
    
    function saveData() {
        if(sec1 > 1 && aktiv_kampf == 0) {
            alert('Error Zeit noch nicht vorbei!');
        }
        else {
            if(aktiv_kampf == 0) {
                loadData('kampf.php?action=verloren','info_text');
            }
            if(aktiv_kampf == 1) {
                var technik_id = document.kampfsystem.technik1.value;
                loadData('kampf2.php?action=aktion&technik_id='+technik_id,'start_kampf');
            }
        }
    }
    
    
    function pruef(text) {
    // function um zu gucken ob ich noch dran bin oder nicht
    // alle 3sec ueberpruefen ob ich dran bin
        var b = text.split(",")
        setTimeout("loadData('kampf2.php?action=am_zug','pruef')",3500);
        // echo 1 = du bist dran // 2 = gegner ist dran
    
        if(b[1] == 1) {
            zeit_kampf_beginn = 1;
        }
        else {
            zeit_kampf_beginn=0;
        }
        sec1 = b[0];
        // zeit_kampf_beginn
    }
    
    
    function loadData(datei,ausgabe) {
        pfad1 = datei;
        pfad2 = ausgabe;
    
        if(ultra_script_sperre == 0) {
        // DAMIT ES ZU KEINE Doubleanfragen kommen
            if(xmlHttp) {
                ultra_script_sperre = 1;
                xmlHttp.open('GET', datei, true);
                xmlHttp.onreadystatechange = function () {
                    if(xmlHttp.readyState == 4) {    // 4 fuer fertig
                        ultra_script_sperre = 0;
                        old_absturz = 0;
                        if(ausgabe != "nix" && ausgabe != "pruef" && ausgabe != "start_kampf" && ausgabe != "neue_runde" && ausgabe != "leiste_links2" && ausgabe != "leiste_links") {
                            if(ausgabe == "start_kampf2") {
                                var ae = xmlHttp.responseText.split(",")
                                document.getElementById(ausgabe).innerHTML = ae[0];
                            }
                            else {
                                document.getElementById(ausgabe).innerHTML = xmlHttp.responseText;
                            }
                        }
    
    
                        if(ausgabe == "pruef") {
                            save_wert = xmlHttp.responseText;
                            // pruef(xmlHttp.responseText);
                            // er ueberprueft erstmal ob es eine neue runde gibt...
                            loadData('kampf.php?action=neue_runde','neue_runde');
                        }
    
                        // fuer den reload der techniken
                        if(ausgabe == "leiste_links2") {
                            var g = xmlHttp.responseText.split("$/")
                            document.getElementById("loadattacke").innerHTML = g[0];
                            document.getElementById("loadspattacke").innerHTML = g[1];
                            document.getElementById("loadziel").innerHTML = g[2];
                            loadData('kampf.php?action=start_kampf','start_kampf2');
                        }
    
                        if(ausgabe == "neue_runde") {
                            new_round = xmlHttp.responseText;
                            if(old_round == 9 && new_round == 10) {
                                old_round = new_round;
                            //    loadData('kampf.php?action=technik_auswahl&load=1','leiste_links2');
                                document.submit2.submit();
                            }
    
    
                            if(new_round > old_round) {
                                old_round = new_round;
                                loadData('kampf.php?action=technik_auswahl&load=1','leiste_links2');
                            }
                            else {
                                pruef(save_wert);
                            }
                        }
    
    
                        if(ausgabe == "start_kampf2") {
                        // Damit das Javascript beendet wird nach dem kampf...
                            absturz++;
    
                            var cv = xmlHttp.responseText.split(",")
                            if(cv[1] == "CLOSE") {
                                document.kampfsystem.submit1.value = 'Kampf Beendet';
                                document.kampfsystem.submit1.disabled = true;
                                return;
                            }
    
                            pruef(save_wert);
                        }
    
                        if(ausgabe == "start_kampf") {
    
                            if(xmlHttp.responseText == 57) {
                                loadData('kampf2.php?action=am_zug&zeit_data='+sec_nach,'pruef');
                            }
                            else {
                                var myerrors = xmlHttp.responseText.split(",")
                                if(myerrors[0] == 13374) {
                                    alert(myerrors[1]);
                                }
    
                                if(myerrors[0] == 17723) {
                                document.getElementById("info_text").innerHTML = myerrors[1];
                                }
                            }
                        }
    
                        // Wenn Kampf begonnen hat der Button Change
                        if(ausgabe == "leiste_links") {
                            var g = xmlHttp.responseText.split("$/")
    
                            document.getElementById("loadattacke").innerHTML = g[0];
                            document.getElementById("loadspattacke").innerHTML = g[1];
                            document.getElementById("loadziel").innerHTML = g[2];
                            loadData('kampf2.php?action=am_zug&zeit_data='+sec_nach,'pruef');
                        }
    
                        // Script um nach laden der Start Daten
                        if(ausgabe == "start_anfang") {
                            loadData('kampf.php?action=start_kampf&id=1','nix');
                        }
    
                        // Wer ist dran?
                        if(ausgabe == "nix") {
                            zeit_kampf_beginn = xmlHttp.responseText;
                            gegner_am_zug();
                            // Hier laedt er die Attacken alle^^
                            loadData('kampf.php?action=technik_auswahl','leiste_links');
                        }
    
                        if(xmlHttp.responseText == 23 && ausgabe == "info_text") {
                            document.submit2.submit();
                        }
                    }
                };
                xmlHttp.send(null);
            }
        }
        else {
            debug1++;
            if(debug1 > 7) {
                ultra_script_sperre = 0;
                debug1 = 0;
            }
            setTimeout("loadData(pfad1,pfad2)",1500);
        }
    // ULLTRA SPERRE ENDET HIER
    }
    Zuletzt editiert von Kapa; 14.10.2021, 18:29.

    Comment


    • #3
      Nutze einen externen Anbieter und poste den Link
      https://justpaste.it/

      ...allerdings...wer soll sich das ohne irgendeinen Hinweis anschauen
      Christian

      Comment


      • #4
        Bloß weil deine anderen Programmteile keine Fehler anzeigen, muss das ja nicht heißen, dass sie logisch richtig arbeiten
        Wenn du der Meinung bist, dass das Problem im Javascriptteil liegt, dann debugge und schreibe Zustände und Werte in die Console
        Christian

        Comment


        • #5
          Danke, habe es jetzt aber ohne head und meta tags hinbekommen.

          Das mit dem debuggen, wie gesagt kenne ich mich kaum mit JS aus, deswegen brauch ich da eben Hilfe.

          Im Groben würde es mir vllt schon reichen wenn mir jemand sagen kann ob das so alles Sinn ergibt und Syntax-Technisch aktuell und korrekt ist (Der Code ist ja mittlerweile auch schon etwas älter).

          Comment


          • #6
            Das genau aber kann keiner sagen. Keiner weiß was du programmierst.Offenbar ein Spiel. Keiner kennt deine Logik, wann was passieren soll
            Im Firefox:
            F12 drücken
            Reiter DEBUGGER
            Deine Javascriptdatei öffnen
            Es sollten die Fehler angezeigt werden.
            Darunter ist die Console.
            Mit console.log("Hallo");
            kannst du zur Laufzeit da Variablen o.a. reinschreiben und schauen, was für Werte da sind

            Des Weiteren wirst du doch wohl eine IDE benutzen, die dir syntaktische Fehler im PHP, HTML und Javascript anzeigt
            Christian

            Comment


            • #7
              HTML veraltet.
              Inline style, nutzt man nicht mehr genauso wie bgcolor
              JS erhält teils alten bzw. unnötigen Code.
              Was ist PVP PVE ?
              Kann damit nix anfangen und habe deswegen auch erst gar nicht genauer geschaut.

              Comment


              • #8
                Christian Marquardt Das mit dem DEBUGGER werde ich mit heute nochmal genauer anschauen - Danke.

                basti1012 Erstmal, mit PVE meine ich den Kampf gegen NPCs und mit PVP meine ich den Kampf in der Lobby gegen andere Spieler/User.
                Das style auch nicht mehr benutzt wird wusste ich zb garnicht, also auch danke dafür, pack ich dann heute noch in classes!
                Und ja das meinte ich eben, veralteter JS-Code - wie gesagt ist das Browsergame schon etwas älter - damals noch in PHP 4.2 geschrieben. Ausserdem stammt der JS-Teil nicht von mir.

                Ich versuche dann erstmal den HTML-Teil komplett zu aktualisieren - evtl klappts dann ja schon.

                Comment


                • #9
                  Code:
                  Das style auch nicht mehr benutzt wird wusste ich zb garnicht,
                  Ist ja auch Unsinn. Sonst würde das ja aus der Definition entfernt werden.
                  Sicherlich ist CSS zu globalisieren, aber wenn man nur an 1 Stelle das nutzt, macht eine Auslagerung keinen Sinn
                  Christian

                  Comment


                  • #10
                    Dass es verboten ist, sagt ja keiner , aber Inline style macht man nicht mehr.
                    Wozu gibt es die CSS Datei oder <style> Element.?
                    Der Inline Style hier dürfte sowieso kaum laufen, da fehlen ja überall die großen Einheiten.

                    Der Validator zeigt 34 Fehler in den HTML Code
                    Sowas
                    <br>
                    &nbsp;
                    könnte man auch über die Css regeln

                    Comment


                    • #11
                      , aber Inline style macht man nicht mehr.
                      Ein schlagendes Argument man

                      Sicherlich sind Einheiten da nennen sich px (und das sie an 2 Stellen fehlen ist ein Fehler ja -> wird je nach Mode der Seite als px geshen)
                      https://www.w3.org/Style/Examples/007/units.de.html
                      https://www.w3schools.com/cssref/css_units.asp
                      Warum sollte das nicht laufen.

                      Wozu gibt es die CSS Datei oder <style> Element.?
                      Ev. Styles auszulagern, die seitenübergreifend sind oder elementübergreifend

                      Sicherlich ist der Code nicht der beste.

                      Aber vielleicht kannst du ja zum eigentlichen Problem beitragen
                      Zuletzt editiert von Christian Marquardt; 16.10.2021, 14:43.
                      Christian

                      Comment


                      • #12
                        <style> habe ich bisher immer benutzt solange ich an einem Projekt gearbeitet habe - von dem her hats jetzt nicht viel ausgemacht das jetzt schon per class zu machen - vor hatte ich das sowieso.

                        Allerdings hat es nicht viel gebracht, das Skript aktualisiert sich immer noch ständig sobald beide Spieler im Kampf sind - das letzte das ausgeführt wird bevor es von vorne beginnt ist "neue_runde" mit dem Wert "0"

                        Ist es vielleicht möglich das folgende Zeile falsch ist - bzw die Syntax falsch ist:

                        Code:
                        <form action="" name="kampfsystem" onsubmit="saveData(); return false;">
                        Ich bin mir nicht sicher ob das "onsubmit" so richtig ist - soweit ich weiss soll das ja verhindern dass das Skript ständig durchläuft?!


                        basti1012 Was zb meinst du mit "JS erhält teils alten bzw. unnötigen Code" kannst du mir vielleicht eine Zeile rausnehmen und mir ein Beispiel machen?

                        Comment


                        • #13
                          Natürlich bringt das nichts an deinem Problem. Auch als Klasse sinnlos oder wird das mehrfach genutzt? Wenn dann mit einem ID Selektor (#) und die Tabelle bekommt eine ID
                          Die von basti1012 angestoßene Diskussion hat nichts mit dem Thema zu tun

                          onsubmit ist das Ereignis, welches aufgerufen wird, wenn ein Submit des Formulars erfolgt.
                          Es wird die Funktion saveData aus deinem obigen Code aufgerufen.

                          Auch ist es für dein Problem völlig unwesentlich, ob im Javascriptcode unnötige Zeilen sind.
                          Du hast ein logisches Problem mit deinem Spiel das man nur lösen kann, wenn man weiß um was es geht, was wann passieren soll und wie das Ergebnis sein soll.
                          Wer soll sich in deinen Code einarbeiten? Wo ist die Erklärung (Dokumentation) was wie ablaufen soll?
                          Zuletzt editiert von Christian Marquardt; 16.10.2021, 19:03.
                          Christian

                          Comment


                          • #14
                            Mir geht es da ehrlich gesagt ein bisschen wie euch, das Skript stammt nicht von mir. Ich denke aber nicht das es ein Logikfehler ist, da es ja im NPC-Kampf auch funktioniert.

                            Wenn ich in einem Skript das durch kampf.js angesprochen wird einen PHP-Fehler habe, könnte das zum selben Fehler führen, so das JS bis zu einem Punkt durchläuft und dann wierder von vorne beginnt?
                            Fehler könnte zb eine Variable sein die es nicht gibt, oder das per SQL ein DB-Eintrag gesucht wird den es nicht gibt? - Wenn es auch daran liegen könnte würde ich mir erst nochmal den ganzen PHP-Code anschauen - mein Gefühl sagt mir zumindest eher da zu schauen als im JS

                            Comment


                            • #15
                              Kapa kannst du das Spiel mal online stellen?
                              Dann können wir beim Spielen die Konsole beobachten, ob uns da was auffällt.
                              Kennst du dich mit PHP aus?
                              Du schreibst ja das der PHP Code in 4.2 geschrieben wahr und du ihn schon aktualisiert hast.
                              Von PHP 4.2 bis 7++ ist viel geschehen.

                              Kann man sich das komplette Spiel irgendwo herunterladen / anschauen?

                              Comment

                              Working...
                              X