Beiträge von Lead0b110010100

    Bugfreie Systeme? Niemand.

    Und das ist auch gut so! Ich erkläre dir auch gerne warum:


    Ich und alle anderen Softwareentwickler der Welt wären damit abgelöst und arbeitslos, da unsere Arbeit komplett frei von Bugs wäre. Demnach müsste man eine Software ja nur ein Mal entwickeln und danach nie wieder warten oder ändern. Neue Anforderungen und Features würden immer direkt funktionieren und auf jedem der mittlerweile gefühlt 680 Millionen Typen von Medien, Browsern und Endgeräten problemlos funktionieren.


    Daher: Ich habe noch nie ein System entwickelt, was komplett frei von Bugs ist, nur Software, bei denen die Bugs noch nicht aufgefallen sind.

    Wenn das so einfach wäre: Warum braucht Google tausende Entwickler, wahrscheinlich die Besten der Besten, immernoch?


    Die Anzahl an Bugs, Sicherheitslücken etc pp. steigt exponential, da die Komplexität von Anwendungen über die Jahre stark zugenommen hat.

    Damals war ein simples Bildbearbeitungsprogramm zum Anzeigen völlig genügend auf den alten 'Apple 1' und 'Apple 2' PC's.


    Heute wird Photoshop immernoch jährlich erweitert mit hochmodernen Algorithmen, die für dich einen Gegenstand aus einem Bild rauskopieren

    und die freigewordenen Pixel errechnen und erraten, damit es natürlich aussieht.

    Arbeit reinstecken, oder nen alten Rubi client entpacken, da findest Du einige Sprachen vorgaben

    Arbeit reinstecken ist ja kein Ding, wollt nur wissen ob sowas schneller geht.

    Wenn das nur per Hand alles geht, dann ist das ok. :)

    Du kannst dir auch ein Script schreiben, 3-5€ in die DeepL API bezahlen und dann jede Sprache über das Script übersetzen lassen.

    Also zumindestens jede außer Deutsch, Türkisch und Englisch.

    Für die drei findest du sicher noch händische Übersetzer. Bei Arabisch wirds zum Beispiel meist schwieriger.

    Jede lib wird für eine bestimmte Version des Betriebssystems kompiliert.

    Ergo: Zu sagen "suche lib xy" ist an sich schon falsch. Du kannst die Libs btw. über Google finden, für dein bestimmtes Betriebssystem.


    Falls dus nicht findest, kannst du kurz ne virtuelle Maschine mit der exakten Version aufsetzen und die Libs rüberkopieren. Achte darauf, dass der Standart Metinsource auf und mit 32 Bit Libs kompiliert wird.

    Okay, bevor ich anfange zu disskutieren. Schaut auch folgenden Codeschnipsel in Java an:


    Das Ergebnis dieses Schnipsels ist folgendes:

    Code
    1. Integer.parseInt 5
    2. Integer.valueOf 5
    3. Integer.decode 5
    4. Ints.tryParse 5
    5. Scanner 5
    6. new Integer 5
    7. Character.getNumericValue 5
    8. NumberUtils.toInt 5
    9. NumberUtils.stringToInt 5


    Fällt euch was auf?


    Jede einzelne dieser Funktionsaufrufe tut das Selbe bzw. liefert das selbe Ergebnis. Ist das in anderen Programmiersprachen genauso schlimm?

    Also für manche Hauseigene Funktionen von Java hab ich noch Verständnis. Zum Beispiel liefert

    Code
    1. Integer.parseInt


    einen primitive int. Wohingegen

    Code
    1. Integer.valueOf

    ein Integer Objekt liefert. Welches cached ist, ergo bis zu einem bestimmten Wert sind diese einmalig abgespeichert und im Speichert wird kein neuer Integer erstellt. Bei mir sinds aktuell die Werte im Wertebereich von -128 und 128, wohingegen der high wert anpassbar ist. Aber das nur nebenbei.


    Ok, das sei Java geschenkt. Integer.valueOf ist ja auch deprecated, fällt also hoffentlich bald weg (Wenn auch das seit Java 9 deprecated ist.. Wir sind schon bei Java 17...)


    Code
    1. Integer.decode

    ist einfach nur noch traurig. Es ist dafür da, um sowas wie "0x55" von HEX als String auf einen Integer zu mappen. 0x55 wären z.B 85 im Dezimalsystem. Der Code zu dieser Funktion sieht aber einfach nur traurig aus, samt Dependency zu anderen internen Funktionen, temporären Variablen, random magic strings mitten in der Funktion und vielen mehr. Aber seht selbst:

    Das sieht btw. 1:1 so aus, wie jede einzelne Funktion die YMIR jemals geschrieben hat. Das ist doch auch nicht performant, dass man es irgendwie so rechtfertigen könnte, wie die C++ Champions ihren Source Code rechtfertigen. ("Ja ist unlesbar, aber dafür schnell!" - Wer da keinen Fehler im Design erkennt, dem kann ich auch nicht helfen.)


    Ok zurück zu Java, wir sind noch nicht fertig.

    Code
    1. new Integer


    ruft einfach parseInt auf von oben mit dem zweiten Parameter "10" fürs Zahlensytem, was eh default ist. Also einfach nur ein anderer Name für eine Funktion. Aber warum?

    Ok, auch diese Funktion ist deprecated, aber warum dachte jemals ein API Designer, dass das eine gute Idee wäre?


    Jetzt kommen wir zu Librarys, die sich dachten: Es gibt noch nicht genug Wege, lass mal noch ein bisschen mehr reinscheißen!


    Code
    1. Ints.tryParse

    ist von Google Guava und gibt null zurück falls der String nicht geparsed werden kann. Man ist also gezwungen den Integer am Ende auf 'null' zu prüfen, um damit zu arbeiten. Na super! Vllt. gut wo ein Nutzer einen String reingeben soll, aber da würd ich doch lieber das von Apache nutzen:


    Code
    1.  NumberUtils.toInt

    Hier kann man als zweiten Parameter einen default value reingeben, der bei so einem Exception case wie einem String wie "haha15" den default value returnen würde.

    Die rufen intern auch nur Integer.parseInt auf. Hier ist der Code aber wenigstens lesbar.


    Auf

    Code
    1. Scanner
    2. NumberUtils.stringToInt
    3. Character.getNumericValue

    geh ich jetzt nicht mehr ein, das wird nur noch traurig.


    Meine Frage ist: Ist das nur in Java so? Ich denke, dass so Sprachen wie Python genau deshalb so beliebt sind und immer beliebter werden und warum Anfänger darauf schwören. Es gibt nur einen Weg etwas zu tun, keine 10. C++ dagegen sagt: Es gibt 10 Wege und bei 9/10 schießt du dir ins Knie. Nr. 10 wirft einen Segfault, du Hurensohn. Jetzt geh debuggen.


    Ok, das war mein Rant.

    Danke fürs Lesen, lasst mir gern eure Meinung da. Würde mich echt interessieren wie da eure Erfahrungen sind.

    It will only iterate over the existing sectree, so taking 2147483647 as a range won't break anything, because that's the maximum positive number the DISTANCE_APPROX method could return. The check itself only will affect the monsters in your current sectree, so maybe a range of 10.000 in max?


    So: Over do it, but don't overflow by using a number > INT_MAX. And now don't be silly and take a range between 5.000 and 10.000.

    In the threeway_war.cpp there are there two lines:

    Code
    1. x = (thecore_random() & 1) ? x - number(200, 1000) : x + number(200, 1000);
    2. y = (thecore_random() & 1) ? y - number(200, 1000) : y + number(200, 1000);


    Do you have a suggestion on how to replace this two calls?

    Should be something around:

    Code
    1. x = (number(0, INT_MAX) & 1) ? x - number(200, 1000) : x + number(200, 1000);
    2. y = (number(0, INT_MAX) & 1) ? y - number(200, 1000) : y + number(200, 1000);


    right?

    Ich weiß, diese Art Antworten sind immer unbefriedigend.. Aber gar nicht.


    Update dein Betriebssystem auf 13.X und lad dir gcc10 (?) runter. Musst ein paar Libs neu ziehen und Kompatibilitäten fixxen - Aber bist dann für die nächsten paar Jahre befreit von solchen Schwierigkeiten.


    Es gibt das Paket gcc49 nicht mehr im Repo, weder unter 11.2 noch unter 11.3. Beide sind EOL.

    Find ich auch. Das was er sagt. Genau.

    Andere sprechen Englisch, aber der Junge spricht einfach die Wahrheit.

    Klingt alles super. Wärt ihr bereit ab und zu über den Sourcecode zu schauen? Nicht das irgendwelche bösen Bugs auftauchen. Allein übersieht man gerne mal was

    Ich bin leider absolut nicht kompetent genug um ein fundiertes Source Code Review anzustellen (für React, Javascript etc.).

    Da sind aus meiner Sicht Leute wie metho deine Ansprechpartner, die aber auch nicht besonders viel Zeit haben nach meiner Einschätzung.

    Lead0b110010100 super danke, ich schau mir mal alles an und gucke ich es packe oder nicht. Ich hab mal alle Punkte oben in Thread gepackt und dort den aktuellen Stand gepostet.

    Sollen Gesamtes Gold, Getötete Monster etc nur für den Admin sehen oder für alle?

    Nur für den Admin im Adminpanel.

    Wichtig sind Statistiken, die wirklich jeden Tag erfasst werden. Damit man solche Peaks sehen kann und z.B darauf kommt, dass man einen Goldbug hat.

    Habe dieses von Google gefunden(Bitte melden Sie sich an, um diesen Link zu sehen.).

    Genau, das ist so der Industriestandard. Recaptcha V2 sollte für das Vorhaben genügen, V3 ist etwas komplexer und wird bei so einem kleinen Server nichts bringen (Hat damit zutun wie Recaptcha V3 intern funktioniert hab ich mir von erfahreneren Menschen hier sagen lassen). Das kriegt jeder hin dort seinen Server einzutragen.


    Wie stellst du dir das mit dem Login via Third Partys vor? Soll sich damit auch ingame eingeloggt werden etc?(also quasi nen ganz normaler account?)

    Ja, man sollte sich ingame einloggen können. Dafür müsste man natürlich auch noch bei Seiten Server Anpassungen vornehmen und diese Buttons entsprechend einfügen. Wäre alles im Rahmen des Möglichen, wenn dir diese Kenntnisse aber fehlen, dann skip diesen Punkt einfach.


    Was verstehst du unter Discordeinbindung?(Lediglich eine Verlinkung zum Server?)

    Nein. Eine Box die unten rechts aufploppt, die man anklicken und zum Discord Server desjenigen gehen kann.

    Alternativ vllt. (an und ausschaltbar) eine Preview der Discord Channel wie wir sie hier auf dem Forum haben oder allgemein von Woltlab Plugins kennen.

    - Recaptcha Einbindung

    - PayPal / PSC / Amazon Cashout

    - Discord Einbindung

    - Login via Discord / Github / Apple

    - Statistiken (für Gold, getötete Monster und Items im Adminpanel)

    - Rechtesystem für Adminpanel (Inventar von Spielern ansehen für SUPERVISOR, Spieler sperren für SYSTEMADMIN usw.)

    - Spieler Online Anzeige

    - Wiki

    - Anpassbare News

    - Passwort vergessen

    - Sidebar mit nützlichen Links

    - Slider mit Bildern auf Hauptseite

    - Multi Language System (DeepL Einbindung für Sprachen, die der Admin nicht übersetzt hat)