Beiträge von Franz99

    Ist 2.5 eine gerade oder ungerade Zahl? ;)
    Sie ist gerade wenn man abrundet und ungerade wenn man aufrundet.
    Es ist also als Dezimalzahl erstmal nicht klar aus welcher Perspektive man rechnet.
    Schneidet man die Zahlen zur Gerade/Ungerade-Bestimmung nach dem Komma ab, erhält man einen einfachen Integer.
    Das ist das, was Todesklinge sicherlich meint.

    Also ich dachte immer, dass folgendes Schema gültig ist:


    C++ Experte --> Blueprint = Kinderkram
    Blueprint-Experte --> C++ = Studium erforderlich


    Übrigens... anhand der Random Bool with Weight Lösung sieht man bereits wie einfach man denken sollte und was ich meinte:

    Mach mal ein Screenshot von deinem Blueprint.
    Sonst weiß ja keiner, was du falsch machst. :)


    Allein das hier in dein Character-Blueprint gesetzt (siehe Screenshot) sollte genügen, dass bei Taste B der Charackter zu 500,500,500 gesetzt wird.


    Die Option "Teleport" ist gesetzt damit die Physik des Characters keinen Einfluss nimmt, wenn der Character zur neuen Position gesetzt wird.
    Wenn du eine Velocity durch den Teleport auslösen möchtest, musst du das Häkchen weglassen. - z.B. bei Ragdoll-Geschichten usw.
    Und mit "Sweep" würdest du zusätzlich mit Objekten kollidieren, die zwischen alter und neuer Position stehen - falls du das benötigst.
    In dem Fall wird an der Kollisionsstelle der Teleport beendet.

    Bewege deinen Character mit einem SetActorLocation Node zur neuen Position.
    Das "Teleport"-Node macht gerade in Verbindung mit dem Character Movement oft Probleme und lösst dann einfach nicht aus, was im Spiel später ein sehr unsicheres Unterfangen wäre.

    Das Ganze hier ist ein simples Beispiel, wie man sich in Codes und Logiken verlieren kann, ohne dabei zu beachten, dass die Lösung im Grunde so einfach und sogar Anfängerhaft ist.
    Oh je - entweder man löscht den Thread oder nutzt meinen Quatsch für andere Ideen.


    Dass man natürlich, wie auch z.B. das Bool Weight Node, einfach nur Zufallswert und Wahrscheinlichkeitswert jeweils für Min und Max mit einem >= vergleichen muss, ist meinem Gehirn nicht so schnell entsprungen.
    Das Ganze jetzt als Lösung nochmal mit Screenshot zu präsentieren, wäre sogar zu peinlich und nicht den Webspace wert das zu tun.


    Sorry, dass ich evtl. den einen oder anderen verwirrt habe, aber das unglaubliche Feedback auf meinen Thread, hätte mir schon mal eher verraten können, dass da irgendwas nicht hinhaut. ^^
    Also überlest diesen Thread einfach - er existiert überhaupt nicht! <-- Fehler in der Matrix! ;)

    Leider erwies sich die Vorstellung alles rechnerisch zu gestalten doch als Pleite.
    Das Problem ist wirklich, dass das Clamp alle Werte jeweils auf Min und Max abschneidet, wenn der Bereich vergrößert wird.
    Und dementsprechend sieht auch das Resultat aus.


    Ergo habe ich eine neue Version erstellt und diese funktioniert nun wie gewünscht und einwandfrei.
    Mit dem Random Bool Weight und leider 2 Selects konnte ich zumindest die Branches umschiffen.
    Dafür ist das Gewicht jetzt auch absolut anzugeben.


    Beispiel:
    Setzt man einen Weight-Wert von 0.1 wird die Chance 90% sein, dass sich der Zufallswert in den ersten 10% des Bereiches befindet.
    Im Grunde strecht man die Wahrscheinlichkeitsverteilung um den Mittelpunkt eines definierten Bereichs ohne, dass Werte durch erweiterte Bereiche verloren gehen.
    Warum stellt Epic nicht so ein Node zur Verfügung oder habe ich es nur noch nicht gefunden?

    Hallo,


    immer wieder stehe ich vor dem "Problem" einen Zufallsbereich so zu verschieben, dass sich nicht der Bereich an sich verschiebt sondern nur die Wahrscheinlichkeit.


    Beispiel:
    Aus einem Bereich 10-20 sollen Zahlen per Zufall generiert werden.
    Allerdings sollten mehr kleinere Zahlen herauskommen als größere in Abhängigkeit einer Gewichtungsangabe.
    Wichtig hierbei ist aber, dass sich der Bereich nicht verkleinern soll.
    Das heißt - natürlich soll nach wie vor auch mal die 20 gezogen werden, aber immer prozentual nicht so oft wie eben die 10 oder eben alle Zahlen dazwischen.
    Also reicht ein einfaches Shifting / Bias nicht aus.


    Leider habe ich bis jetzt kein Node gefunden, was diese auf den ersten Blick einfache Aufgabe erfüllen kann.
    Es gibt als einiges das Bool with Weight Node, aber nichts in Richtung Float.
    Folglich geht man selbst ran und bastelt sich eine Funktion, die auf folgender Überlegung fußt.


    Vorab ist es wichtig eine hochperformante Lösung zu bieten.
    Die Angabe der Gewichtung erfolgt von 0-1 - wobei 0.5 gleich 50% - also eine Normalverteilung darstellt.
    Alle anderen Werte darunter und darüber verschieben die Wahrscheinlichkeit.
    Meine Überlegung ist jetzt je nach Richtung der 0.5 Referenz den Zufallsbereich einfach zu vergrößern, um ihn abschließend mit einem Clamp wieder abzuschneiden.
    Ich wollte auf jeden Fall verhindern, dass ich mich mit < und >= rumschlagen muss.
    Es sollte eine rein rechnerische Funktion sein ohne zusätzliche Branch- oder Select-Abfragen.
    Daher muss alles, was unter 0.5 liegt automatisch vom Min abgezogen und darüber liegende Wert zum Max dazuaddiert werden ohne den jeweiligen anderen Pol zu beeinflußen.
    Allerdings möchte ich aus Performancegründen, wenn möglich, nur addieren und multiplizieren.
    Subtraktion und Division sind rechnerisch viel aufwändiger für die CPU als ihre Gegenspieler.
    "*0.5" ist schneller als "/2" - eine Erkenntniss, die man seit der BASIC-Scripterei aus den 80ern mal gelernt hat. ;)
    Einzig das Ermitteln des effektiven Bereichs lässt nur Subtraktion zu, da ein Negieren mit anschließender Addition dann doch wieder kontraproduktiv wäre.
    Das Schöne ist, dass man sein Random bequem in nur eine Vector-Variable setzen kann: x=min, y=max, z= weight.


    Siehe Screenshot ist das, was ich als Lösung präsentieren kann.


    Der Sinn des Threads ist:
    1. für alle, die das benötigen ist das hier eine gut funktionierende Lösung
    2. die Frage, ob ihr Verbesserungen der Funktion sehen könnt.


    Nachtrag:
    Ein kleines Problem ist, dass alle Zahlen, die in den vergrößerten Bereich kommen dann immer absolut zu Min oder Max werden.
    Man müßte die erweiterte Range dann anstatt zu clampen wieder zusammenstauchen.
    Vielleicht fällt euch ja etwas dazu ein.

    1.
    Irgendwo hat ich das schon mal geschrieben, dass es ab und an Crashes und Structur-Compiler-Errors gibt.
    Dann verabschieden sich alle Structur-Variablen, die auf die defekte Structur verweisen
    Und das kann, je nach Komplexität, das ganze Projekt zerschießen.
    UE4 hat wohl sehr stark damit zu kämpfen, wenn man Structuren verschachtelt - also Structur in Structur in Structur usw.


    Beispiel: Setup --> Item --> Props --> Orientation --> Location --> Vector
    Bis zu "Vector" sind das alles Structuren. (4fach verschachtelt)
    Da reicht es manchmal nur irgendwas in einer mittleren Structur zu ändern und schon macht die Haupstructur - in diesem Beispiel "Setup" - einen Compiler-Error, den man auch nicht mehr weg bekommt.
    Vor der geänderten Variable ist dann ein rotes ! mit dem Hinweis, dass darauf nicht mehr zugegriffen werden kann.
    Abhilfe schafft man nur indem man die betreffende Structur-Variable löscht und wieder neu hinzufügt.
    Problem ist nur, dass dabei in allen Blueprints die "Setup"-Structur-Variablen verschwinden mit dementsprechend Konsequenzen für die ganze Verdrahtung.


    Nun frage ich mich, ob ich nur irgendwas falsch mache oder es ein bekanntes Problem der Unreal-Engine ist.
    Ich meine - es gibt nunmal Projekte mit ein paar hundert oder tausend Variablen - da muss man das einfach in Structuren verschachteln, sonst scrollt man sich ja einen Wolf.
    Und Änderungen, weil man vielleicht neue Variablen benötigt oder umbenennen möchte ect.pp, ist ja nun wirklich ein oft gemachter Entwicklungsschritt.


    Die Frage ist also: habt ihr denn ähnliche Probleme und was macht ihr dagegen?


    2.
    Wenn man wie in oben beschriebenen Beispiel den Vector ändern möchte hat man erstmal ein Problem.
    Ein Direktzugriff gibt es erstmal nur mit Set-Members auf ein Member der Structur, aber nicht wiederum auf dessen Members.
    Ich löse das indem ich mit einer Funktion erstmal alle Variablen in locale Variablen schrreibe, dann die Variable setze und am Ende wieder zusammen baue.
    Gibt es dafür eine Lösung?
    Noch lustiger wirds, wenn die zu setzende Variable ein Array ist.
    Mit "Set Array Elem" kann man ja eine Array-Referenz angeben - allerdings darf diese nicht direkt aus einer Structur kommen, denn dann wird einfach nix gesetzt.
    Habt ihr da einen guten Workflow?


    NACHTRAG:
    Zu den Compiler Fehlern bei veränderten Structuren gibt es bereits 2 Bugreports: UE-40033 und UE-41411
    Vor 4.19 ist da wohl keine Besserung in Sicht. :/

    Ja eine wahrscheinlich recht alte Frage, aber mir geht es nicht wirklich darum Beleidigungen zu filtern.
    Wer sein Username "A.......h" nennen will, soll das gerne tun. :D
    Ich suche eher nach Listen mit Wörtern, die verboten oder zumindest rechtlich heikel sind.
    Zb. "Hit..r" oder auch urheberrechtlich geschützte Markennamen wie "Co..Col." usw. (evtl. sogar einige Prominente)
    Die meisten Listen im Netz bestehen größtenteils aus Beleidigungen und solche Dinge.
    Es soll sich in einem Forum später keiner so nennen können, dass man unter umständen des Namenswegen als Administrator Schwierigkeiten bekommen könnte.
    Einfach gesprochen: ich möchte gerne nur Wörter filtern, die gegen irgendwelche Gesetze verstoßen.
    Wer hätte da etwas für mich? :)

    Ich habe das Thema Viren überhaupt nicht ins Spiel gebracht.
    Ich habe nur erwähnt, dass man grundsätzlich alles in die Installationsroutine bringen kann, um Sicherheitsdinge zu umschiffen.
    Und wer hat gesagt, dass ich gecrackte Sachen benutze.
    Also ehrlich mal.
    Also besser der Thread geht zu.

    Ihr vergesst ganz, dass das gecrackte Spiel, was man ganz normal installiert, ja bereits alles umbiegen kann.
    Du installierst es und stimmst vorher allem dadurch zu - da können bereits hundert Viren enthalten sein.
    Wo ist denn da das Problem?
    Genauso funktioniert es ja.
    Es gibt ne Menge Software, die eigentlich mit dem Server telefonieren, um sich gegen Raubkopien zu schützen.
    Ob GTA oder 3DSMAX - um nur 2 simple Beispiele zu nennen - gecrackt liefern die einen eigenen kleinen Server mit, der den offiziellen quasi offline simuliert bzw. das online-Lizensing System austrickst.
    Und man geht auch davon aus, dass in den meisten gecrackten Spielen Trojaner usw. enthalten sind.
    Du führst doch die Installations-EXE aus, wenn du das gecrackte Spiel installierst.
    Da kann man alles mit dem Rechner anstellen - sogar die Platte formatieren.
    Man kann alles in die Installationsroutine des Spiels einbauen ohne das man was davon merkt.

    Ui... ein paar Tage nicht da und schon türmen sich die Antworten. :D
    Danke dafür! :)


    @LucyDemoon
    Doch doch.. ein Server zu faken ist ultra leicht.
    Das Spiel sendet und empfängt Daten zu einer oder mehrer URLs.
    Diese kann man locker abfangen.
    Ein Webserver kann nun mit entsprechenden Registry-Einträgen die Domains zu den Fake-Server umbiegen.
    Es wird weiterhin auf eine bestimmte URL gesendet oder empfangen, aber der Webserver bzw. Weindows selbst fängt die Adresse vorher ab und routet zb. auf localhost ectpp.
    Und selbst die URLs selbst die das Spiel sendet kann man einfach einfach vorher ändern bevor etwas ins Netz geht.
    Dafür hat Windows selbst schon einige Funktionen.
    Eigentlich zur Sicherheit gedacht kann man das aber auch zu Softwarecracks missbrauchen.


    @Socke
    Mir geht es darum so gut wie möglich gecrackte Raubkopien zu verhindern.
    Bzw. es eben so schwer wie möglich zu machen.
    Dass es nicht möglich ist weiß man allgemein - sonst wären alle Spiele auf dem Markt sicher.
    Aber es gilt den Crackern es so schwer zu machen, dass sie gar kein Bock aufs cracken haben.
    Zumindest wenn es nicht gerade Blockbuster-Spiele sind. ;)


    @VieleKekse
    Na die Theorie ist mir auch bekannt.
    Das ist ja der Sinn meines Threads. :)
    Ich sucher aber explizite Lösungsvorschläge.
    Das verstecken in Audiofiles finde ich immer noch recht attraktiv - da kommt so schnell keiner drauf.


    @Dj EKI
    Wie heißt denn das Plugin?

    Danke für eure Antworten.


    Server bringen leider nicht viel, da man auch locker einen virtuellen Fake-Server starten kann, der den offiziellen einfach emuliert.
    Und schon "denkt" das Spiel es sei zum offiziellen Server verbunden.


    Ich dachte eher an z.B. Seriennummern.
    Die Berechnung der Seriennummer muss ja im Spiel enthalten sein damit das Spiel die eingegebene Nummer überhaupt validieren kann.
    Und diese Berechnung gilt es gut zu verstecken oder irgendwie nicht lesbar unterzubringen.

    Ich stelle mir immer wieder die Frage inwiefern ein gebackenes UE4 Spiel eigentlich decompilierbar oder lesbar ist.
    Bzw. vom Hex-Editor bis zum MEM-Reader kann man natürlich grundsätzlich in alle compilierten Codes hineinschauen und evtl. Werte interpretiren oder mit Glück in Klarschrift erhaschen.


    Wie sieht es da eigentlich mit der Sicherheit aus?
    Kann man in eine UE4 Spiel Werte irgendwie sicher verstecken?
    Sobald ich einen Wert in eine Variable packe, könnte ich mir vorstellen, dass, sobald das Spiel die Variable benutzt, diese auch im RAM zu finden wäre.


    Und was ist mit Algorithmen zur Verschlüsselung?
    Wenn ich mir einen Rechenweg mit vielen Operationen ausdenke, diesen im BP oder C++ in das Spiel einbinde, kann ein guter Cracker diesen Algorythmus später irgendwie aus einem gebackenen Spiel extrahieren?


    Es gibt ja auch nicht nur direkte Variablen, sondern z.B. auch Datentabellen, Kurven und selbt in Audiofiles können Werte gespeichert sein...also stelle ich mal die Abschlussfrage:
    Wenn man jetzt an Seriennummern, Masterkeys und Passwörter im Spiel denkt - wie würdet ihr diese im Spiel am sichersten unterbringen?

    Der Rowname sollte keine Zahl sein, sondern ein eindeutiger Name mit einer Syntax.

    Also ich benenne zwar die RowNames eher auch nach dem, was der Gegenstand darstellen soll, aber was spricht denn gegen eine Zahl?
    Der Name ist doch in erster Linie intern einfach nur eine ASCI Reihenfolge und der Engine müsste es ergo völlig egal sein, ob das 123 oder ABC ist.
    Genau aus dem Grund kann auch jede Datei auf dem Computer einfach nur aus Zahlen im Namen bestehen.
    Ich empfinde das mit den Zahlen sogar als kreativen Vorteil, denn was immer man auch so verrücktes machen kann, man könnte thoeretisch sogar mit den RowNames richtig rechnen. 8)
    Der Grund warum ich auch keine IDs als Name benutze ist aber nur, dass ich mir die ganzen IDs nicht merken muss wenn ich im Editor mal ein bestimmten Gegenstand ändern oder hinzufügen möchte.
    Vielleicht ist das ja auch deine Argumentation, die gegen eine Numerierung spricht.