Beiträge von Tomarr

    Aber, das kannst du doch mit dem Event alles machen. Du musst ja nur den entsprechenden Code einfügen. Die Lichtkurve würde ich dann vielleicht als Timeline erstellen, und wenn die Timeline abgelaufen ist, dann löscht sich das Licht halt. Moment, dauert etwas, bis ich den Screenshot gebaut habe.

    Ja, wie gesagt, das ist ja das standard Third Person Template. Im Zweifelsfall einfach mal erstellen und dir den gesamten Code anschauen. Ich habe ja jetzt nur einen Teil herauskopiert, alles wäre ein wenig umständlich gewesen. ^^

    Ich habe mal das BP vom Third Person Template rauskopiert (Version 5.3). Dort sprintet die Figur eigentlich sofort, wenn du W drückst.

    Die haben das ein wenig anders gelöst, aber vielleicht hilft dir das ja.

    Externer Inhalt blueprintue.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Ich probiere am das am Wochenende aus.

    Kein Problem, ist ja nicht mehr so lange hin. :P

    Aber es müsste eigentlich probieren, da ich ja den Screenshot machen musste, habe ich es dann auch gleich ausprobiert und bei mir funktioniert es einwandfrei.

    Die Variable Time machst du am besten noch "Instance Editable" und "Expose on Spawn" dann kannst du eben halt auch zur Laufzeit noch gut an der Zeit drehen.

    Der Vorteil zum Timer by Event ist übrigens, du kannst es gleich am Anfang setzen und danach, falls da noch etwas kommt, anderen Code des Actors schreiben, also so wie bei mir gleich nach Begin Play. Dann stimmt auch die Zeit bis zum Despawn. Wenn er vielleicht noch anderen Code vorher abarbeiten würde, dann wäre das mit der Zeit eher so ein Glücksspiel, je nachdem wie lange der andere Code benötigt und dann erst der Timer gestartet wird.

    Aber da kannst ja selber nochmal schauen, was du da hin und her basteln willst, von der Grundlage her sollte es so aber funktionieren.

    Die Engine benutzt ja eher C++, das ist doch etwas anders als C#. Spontan würde ich dir da eher zu den Blueprints raten, denn inzwischen hat die Programmierung über Blueprints keine Nachteile mehr. Bei früheren Versionen habe ich noch immer so einen Mix genommen, eine eigene BP-Nodes mit C++ programmiert, die ich dann halt ins BP-Projekt eingebaut habe, aber das benötigte ich schon sehr lange nicht mehr. Ansonsten, egal ob du mit rein C++ oder teilweise mit C++ arbeiten willst, brauchst du noch Visual Studio Code. Was du dafür dann alles installieren musst, dafür gibt es dann auch einige Tutorials, bzw. er meckert auch von sich aus, wenn ihm etwas fehlt. Kann aber auch ab und zu etwas tricky werden.

    Ansonsten, wenn du jetzt ein Projekt meinst, das ist immer etwas schwierig. Ich selber hatte kein spezielles Projekt, angefangen, habe ich mit Materialien und so einigen Codes, die ich einfach nur ausprobiert habe, Stichwort Shader etc. Es ist am Anfang schon sehr umfangreich, was du alles beachten musst, denn so ein Spiel ist umfangreich. Die ganze Logik, die 3D-Modelle, Shader usw. Da ist es egal, womit du anfängst. Aber aufgrund des reinen Umfangs würde ich dir empfehlen so ein paar Arcade-Spiele, wie Pac-Man, Pong, Moon Patrol oder irgendetwas ganz Einfaches, wo du dich auch noch nicht so sehr auf die 3D-Modelle konzentrieren musst, bei Pong reichen ja zwei Rechtecke und eine Kugel als Ball oder so. Später dann vielleicht auch Spaceinvaders, Galaga, R-Type und wie sie nicht alle heißen. Grundregel ist so in die Richtung, was auf einem C64 machbar war und teilweise sogar in Heften zum Abtippen veröffentlicht wurde, eignet sich eigentlich ganz gut zum Üben.


    Ich habe selber schon überlegt, ob ich mal ein paar Schritte zurückgehe und solche kleinen Spiele, vielleicht auch mal hier als Tutorial veröffentliche. Weil, viele, und davon kann ich mich leider nicht ausschließen, starten immer gleich mit dem Gedanken, mit dem Spiel zu starten, was es später auch im Epicstore oder Steamstore dann für 79,99 Euro im Summersaleangebot zu kaufen gibt. :D

    Ich weiß gar nicht, ob es das noch gibt, aber schau doch mal, ob du noch den Sourcecode von RunUO herunterladen kannst. RunUO ist quasi eine Fanversion des Ultima Online Servers und ist, glaube ich, in C# geschrieben. Der Code ist also, mal abgesehen von seinem Umfang, relativ leicht zu lesen.

    Zwar ist das ein sehr altes Spiel, entsprechend auch alte Servertechnik, aber ich denke, dass du aus dem Code trotzdem einiges über Login, Regionsverwaltung usw. lernen kannst, zumindest was das Konzept eines solchen Servers angeht. Einen Versuch ist es auf jeden Fall wert.

    Eigentlich habe ich noch nie Waffen gesehen, die sich selbst leveln. Normalerweise nehmen die Skills des Spielers zu. Und wenn man eine Waffe aufrüstet, zum Beispiel wie bei Diablo mit Gems, oder Seelensteinen, was auch immer, dann würde ich ja eher dem Edelstein ein Wertepaket mitgeben und dies dann über Interfaces hinzufügen. Sprich die ID des Edelsteins im Slot abfragen und über den dann nach Bedarf einfügen.

    Aber trotzdem niemals von jeder Schadensart alles in der Waffe speichern. Wie gesagt, die meisten Schadensarten werden ja hoffentlich eh 0 haben, weil eine Waffe, die alles hat und kann, ist einfach overpowerd. Und Werte, die eh nur 0 haben, brauchst du auch nicht speichern. Wozu? Normal hast du einen Hauptschaden und einen Nebenschaden.

    Man stelle sich mal vor, du machst einen Hieb mit einem Schwert, dieses hat zum Beispiel Hiebschaden, Feuerschaden, Giftschaden, Frostschaden, Blitzschaden, Magieschaden, usw.

    Jetzt sagt der Würfel, alle Schäden sind ein Treffer. Dann kommt in der Aktionsanzeige, Hieb Hit -20, Feuer Hit, -8, Gift Hit -9, Frost Hit -15, Blitz Hit -11.

    Erstmal liest du dir dann eine Minute die Hits durch und was für eine Chance soll denn noch der Gegner haben? Oder du hast vielleicht nur bei Hieb und Feuer einen Wert, alles andere ist 0. Dann hast du entweder bei Gift Hit 0, Frost Hit 0, Blitz Hit 0. Also der Spieler kriegt 3 Mal angezeigt er hat getroffen, macht aber keinen Schaden. Wie frustrierend. Alternativ fragst du vorher ab, ob es einen Wert größer 0 in der jeweiligen Schadensart gibt, ist aber auch wieder unnötige Loopberechnung, dann kannst du unnötige Werte auch gleich weglassen.

    Und jetzt verknüpf das noch zusätzlich mit den Skills des Spielers.

    Ich meine, wie ich schon sagte, mich geht das ja nichts an, zumal er ja auch resistent für Verbesserungsvorschläge ist und darauf keinen Bock hat. Und ich lasse mich da ja auch gerne eines Besseren belehren, von daher, alles gut so weit.

    In Spielen ist es doch so: Du findest oder bekommst eine Waffe. Dann kannst du diese Waffe verbessern, indem du sie levelst oder modifizierst.

    Von der Logik her, wenn man die Waffe findet, erhält die Waffe ein NEUES Array, in das die Werte aus der Tabelle gespeichert werden. Im besten Fall handelt es sich hierbei nur um Floatwerte. Andernfalls würde man für jede Waffe wiederum ein Struct benötigen, das sowohl Strings als auch Floats und Integers usw. enthält.

    Also werden alle Informationen (in Form von Floatwerten) aus dem extra für die Waffe angelegten Array bezogen. Informationen wie der Name der Waffe (z.B. Langschwert) werden jedoch weiterhin aus der Tabelle bezogen. Die Werte ändern sich normalerweise auch nicht.


    Im Array können diese Werte Überschrieben werden die default Werte in der Tabelle bleiben aber wie sie sind.

    Na ganz so kenne ich das nicht. Ich kenne es eher so in die Richtung

    Hauptschadensart: Hieb
    HauptschadenMax: 10
    Nebenschadensart: Feuer

    NebenschadenMax: 5

    So, oder auch so ähnlich. Ich habe noch nie ein Rollenspiel gesehen, wo in jeder Waffe alle Werte gleichzeitig vorhanden sind, egal ob der Wert dann 0 oder 100 ist. Aus mehrerlei Gründen, erstens würde das viel Speicher verbrauchen, was auch wieder gleich bedeutet, dass mehr Daten übertragen werden müssen. Mit dem Debuggen und verlängertem Durchlauf einer Schleife habe ich ja schon erwähnt. Was ich aber noch nicht erwähnt habe ist, wenn der Spieler dann auch beliebig diese Werte in irgendeiner Form der Waffe ändern kann, zum Beispiel durch Training, hat plötzlich ein Spieler eine völlig überpowerte Waffe, die ihn quasi unbesiegbar macht und das dann noch unter dem Aspekt, dass derartig viele Werte schlecht auf Glitsches oder Cheating überwacht werden können. Und, was noch dazu kommt, das hatte ich ja auch schon erwähnt, wonach soll der Spieler am Ende dann seine Waffe auswählen oder vergleichen, welche besser ist. Dann hat der Spieler da auf einmal eine irre lange Liste mit irgendwelchen Werten, die er alle vergleichen muss, dann ist Feuer plötzlich Wert +1 gegenüber seiner vorherigen Waffe, aber Gift -1, ja, was bringt ihm nun mehr?

    Also wenn ich bei einem Spiel erstmal eine Stunde analysieren müsste, welche Waffe jetzt besser ist und dann auch noch vielleicht unterschiedlich bei jedem Gegner oder so, das wäre bei mir eine 1A Rückerstattung bei Steam.

    Aber, ich lasse mich da ja gerne eines Besseren belehren, vielleicht gibt es ja Spieler, die sich sowas antun wollen.

    An der Stelle, da schließe ich mich IRO an, ist dann die Suche nach Tutorials eben halt doch beschränkt, auch wenn man angeblich alles im Internet findet.

    Ich weiß aber aus meiner Erfahrung durch Ultima Online, dass das Ganze durch Multiserver gelöst wird. Denn, egal wie schnell ein Rechner ist, egal wie schnell auch die Internetanbindung ist, irgendwann sind die Kapazitäten erschöpft, weswegen man die Welt dann in mehrere Server aufteilt, die dann untereinander wieder die entsprechenden Daten austauschen, bzw. auch Teile einer Welt auf unterschiedlichen Servern laufen.

    Vielleicht findest du ja unter dem Stichwort "Multiserver" eher etwas in den Tutorials, im Zweifelsfall gibt, oder zumindest gab es mal eine Bücherreihe, wo Profis dann ihre Programmiertricks verraten haben. Ich weiß nur leider nicht mehr, wie die hieß. Das Problem dabei ist nur, diese Buchreihe bezieht sich nicht explizit auf die Unreal Engine, ist auch schon was älter, jedes Buch war echt teuer und bezieht sich natürlich nur auf C++.

    Ich weiß gar nicht, ob ich irgendwo in meinen Umzugskartons noch das eine oder andere Buch aus der Reihe habe, vielleicht gibt es ja auch neuere Auflagen davon. Ich befürchte allerdings, selbst wenn dem so ist, dass der Preis und die anderen Einschränkungen bleiben würden.

    Eine einzige Tabelle, in der alle Informationen zu allen Waffen und allen Werten gespeichert sind.

    Dann kannst du die gesamte Tabelle in ein Struct packen und mit einem Break die verschiedenen Datentypen auslesen.

    Das wäre die Alternative zu einzelnen Variablen. Hätte dann auch den Vorteil, wenn man schon alle Werte unbedingt gleichzeitig haben möchte, diese dann auch in einer Schleife im Schadensalgorithmus durchgehen zu können. Macht aber dennoch die Schadensberechnung nicht unbedingt einfacher und auch fehleranfällig, das sollte man dazu sagen. Aber ich war der Meinung, ich hätte die Struct schon vorgeschlagen? OK, war vielleicht auch an einer anderen Stelle.

    Am Ende sehe ich aber das Hauptproblem darin, dass er einen Gegenstand aus irrwitzig vielen Gegenständen heraussuchen will.

    Ich würde auch vorschlagen erstmal so einen kleinen Testserver aufzulegen, vielleicht mit ein paar Kumpels das Spiel dann ausprobieren, schauen, was funktioniert und was nicht. Wenn es im Kleinen funktioniert, wird es auch auf einem sehr leistungsfähigen Rechner funktionieren. Höchstens kann es dann ja noch Problem mit der Anzahl der Spieler geben, falls die zu hoch ist für die Leistung des Rechners oder der Internetanbindung. Zudem, wenn es sich wirklich um riesige Massen an Spielern handelt, dann werden sich wohl eher mehrere Server die Arbeit und Internetanfragen aufteilen müssen, also ein Multiserversystem. Das wird aber wohl am Anfang noch nicht der Fall sein.

    Ich habe das vorherige Thema beendet, weil man mir nicht zuhören will.

    Nun, du hast ja auch recht wenig an Infos gegeben. Du hast nur gesagt, dass du über 100 Variablen brauchst, aber nicht wieso. Ich habe dir beschrieben, wie du sie nicht brauchst. Auch habe ich dir klar dargelegt, dass selbst große Softwareschmieden solch einen Wahnsinn niemals tun würden, nicht nur aus Performancegründen, sondern auch aus Debugginggründen.

    Somit bist DU derjenige der nicht zuhört.

    Und was erwartest du jetzt für Antworten, wenn die Frage lautet "Wie machen Megaserver, jetzt"?

    Schattenschaden? Naja, von mir aus.

    Aber es wird ja wohl hoffentlich keine Waffe geben, die jede Schadensart hat. Da nimmst du halt eine Variable rein mit Schadensart und dann den Schadenswert.

    Du machst eigentlich genau denselben Fehler, den ich am Anfang auch immer gemacht habe, und zugegeben ab und zu noch immer mache. Du denkst, du musst alle Eigenschaften, wirklich alle, in ein Objekt programmieren, so wie du sie dir in der realen Welt vorstellst. Spiele sind aber nur eine Simulation und bei denen muss man halt viele Abstriche machen. Es ergibt ja auch keinen Sinn, alles in eine Waffe zu packen.

    Ich würde es eher so machen.

    Typ: Schwert
    Schadensart: Hieb
    Schadenvolumen: 30
    Sekundäre Schadensart: Feuer
    Sekundärer Schade: 5

    Oder irgendetwas in dieser Richtung. Weil, wenn du mehr machst, das wird die Spieler überfordern. Vielleicht kannst du noch Sockel für Gems mit besonderen Eigenschaften auf das Schwert packen, aber dann addierst du das mit der Gem-ID, der auf dem Schwert ist und bekommst von dem seine Bonuswerte.

    Du musst dir das so vorstellen, dass du im Idealfall, die Schadens und Schutzberechnung mit jeder Waffe in einer Routine berechnen kannst, mit minimalen Änderungen. Da musst du hinkommen. Da helfen dir unter anderem auch Interfaces.

    Und dann brauchst du auch, um mal auf deinen ersten Post zurückzukommen, nicht tausende oder abertausende komplizierte Objekte in einer Datenbank durchsuchen. Die Waffe, die der Spieler bei sich hat, hat halt ihre Werte, dafür ist die Objektorientierung erfunden worden. Legt der Spieler seine Waffe zum Beispiel in eine Truhe mit mehreren anderen Objekten, dann speicherst du im Inventar der Truhe nur die ID der Waffe, eventuell noch mit einem kleinen Bildchen. Nimmt er die Waffe wieder aus der Truhe, wird halt das Objekt mit seinen Werten über die ID wieder hergestellt. Genau dasselbe, wenn der Spieler die Waffe nur in seinem Inventar hat. Schlau wäre es auch, wenn die Waffen und Gegenstände ab und zu mal kaputtgehen. Das wurde nicht wegen des Realismus eingeführt, sondern damit die Datenbanken nicht endlos groß werden.

    Naja, die Frage ist doch, wieso brauchst du 11 Variablen um alleine festzustellen, was für ein Objekt das ist.

    Und ich habe es dir doch geschrieben.

    Variablen:

    Waffenname: String
    Waffenschussrate: Integer
    Waffenstärke: Integer
    Benötigtes Geschick: Integer
    Waffenklasse: Structure

    Was willst du denn da noch alles reinpacken? Wozu die 11 Variablen um die Art eines Gegenstandes festzustellen?

    Wie sieht das bei dir aus?

    Variable 1: Art: Löffel
    Variable 2: Geeignet für Tee
    Variable 3: Durchmesser
    Variable 4: Kurz
    Variable 5: Geeignet für Umrühren
    Variable 6: Geeignet damit zu essen
    Variable 7: Haltbarkeit
    Variable 8: Kann geworfen werden

    Variable 9: Schaden 0.0001


    Du siehst, ich habe so schon Schwierigkeiten auf 11 Variablen für die Art des Objektes zu kommen, die letzten gehören ja schon eigentlich nicht mehr zur Art des Objektes.

    Das Problem ist halt, je mehr Variablen du da reinpackst, um so unwahrscheinlicher ist es, dass es gut funktioniert. Siehe deine erste Frage in diesem Post.

    Und wenn du jetzt noch anfängst, dass in deiner Spielewelt dinge jenseits der Spieler passieren, sprich die Welt, bzw. die NPCs wuseln auf der ganzen Welt umher, obwohl kein Spieler in der Nähe ist, ich weiß noch nicht einmal, ob das geht, weil normalerweise wird nichts berechnet, was der Spieler nicht sieht, aber nehmen wir mal an, du kriegst das so hin, was für einen Server willst du da dann bereitstellen? Einen Großrechner einer Uni? Es hat schon einen Grund, warum derartige Mechaniken in Engines eingebaut sind, nämlich um den Prozessor zu entlasten.

    Du kannst natürlich entgegen jeder Regel der Programmierung etwas Neues versuchen, versuchen etwas umzusetzen, was noch nicht einmal die ganz großen Spielehersteller machen, aber dann darfst du dich auch nicht wundern, wenn es nicht funktioniert.

    Und was deine nicht vorhandene Diskussionsbereitschaft angeht, über die Sinnhaftigkeit so vieler Variablen zu reden, dann kann dir hier halt keiner helfen. Dann mache es so wie du denkst und beschwer dich dann aber nicht, wenn es nicht funktioniert.

    Alles unnötig. Immerhin darfst du ja auch nicht vergessen, dass du, wenn du das so beibehältst, das Ganze im Code so verarbeiten musst, dass es auch einen Einfluss hat. Viel Spaß beim debuggen, falls da ein Fehler überhaupt auffällt.

    Gehen wir mal durch, die Einflüsse der Fähigkeiten des Charakters hänge ich jetzt mal nicht immer hinten ran, weil die kommen noch immer dazu.

    30 Variablen für Schusswaffen? Wozu? Stärke, also Schaden, Feuerrate, benötigtes Geschick. Reicht.
    Munition, Schadensbonus, Schussratenbonus, in Relation zur Schusswaffe, reicht.

    25 Variablen für Gegenstand. Das ist jetzt recht allgemein gehalten, aber wozu? Und da kommen dann noch 11 Variablen für die Art des Gegenstandes dazu? Du brauchst nur eine Variable für die Art des Gegenstandes, eine Enumvariable. Mehr brauchst du nicht.

    Wieso 14 Variablen für Schaden? Eine. Schadenswert von 0 - 100. Was willst du denn mit 14 unterschiedlichen Variablen?

    Wenn du den Schaden unterscheiden willst, Effektivität oder so, dann bau in die Gegner halt noch einen Wert ein, der angibt, ob eine Waffe bei diesem Gegner effektiver ist als andere, zum Beispiel ist ein Skelett effektiver mit Stabwaffen zu bekämpfen, als mit einer Armbrust, weil da die Pfeile eher durch die Rippen gehen.

    Das mit dem 100 Werte auf dem Gegenstand ist ja nur ein Beispiel. Es könnten viel mehr sein. Für den Spieler werden alle unwichtigen herausgefiltert. Aber man muss diese Werte ja trotzdem abspeichern!

    Erstaunlich, ich habe schon die 100 kritisiert und du meinst, es könnten ja noch mehr sein. :D


    Nein, du musst die nicht alle speichern. Rollenspiele würfeln Ergebnisse aus. Auch MMORPGs funktionieren wie Pen & Paper Rollenspiele. Du hast ein paar Werte, zum Beispiel die Geschwindigkeit der Waffe, einen Grundschadenswert der Waffe, vielleicht noch die Haltbarkeit. Deine Figur hat dann ebenfalls ein paar Werte wie Ausdauer, Intelligenz und Agilität. Dazu kommt noch ein Skillwert für die jeweilige Waffengattung.

    Diese beiden Werte, also die Werte deines Spielers und der Waffe kombinierst du dann mit Würfelergebnissen. Dazu hast du einen Satz von Würfeln, mit den Werten 1-4, 1-6, 1-8, 0-9, 1-12, 1-20 und einen Multiplikatorwürfel, der in Zehnerschritten von 00-90 geht. Die kannst du ja auch ganz einfach programmieren und ist eigentlich die Grundlage eines jeden Rollenspiels.

    Diese Würfel haben, je nach Rollenspielregel, also AD&D, Pathfinder, oder was auch immer, sind aber alles Pen & Paper Rollenspiele, werden verschiedene Würfel halt genutzt für einen Angriff oder Verteidigung oder andere Aktionen, zum Beispiel, ob es dir gelingt Preise zu verhandeln. Es sind also Erfolgswürfe. Und da kommt dann grundsätzlich folgendes zum Einsatz. Der Angreifer würfelt zum einen, wie stark der Angriff ist, dafür werden die gewürfelten Werte in Kombination mit den Werten der Waffe und den Werten Intelligenz, Ausdauer und Agilität, je nachdem welche Werte für diese Waffe benötigt werden. Ob der Schlag erfolgreich ist, hängt dann vom Würfel und dem Skillwert in der Waffenklasse ab.

    Das sind so die Grundlagen, wenn du da detaillierter einsteigen willst, empfehle ich dir ein Basisset von Dungeons and Dragons zu kaufen, das ist nicht zu teuer, hat aber alle Würfel und Anleitungen und hat halt das Regelwerk für AD&D oder, wenn du die alte Version nimmst D&D. A steht hier für "Advanced", also erweitert und kam später in das Dungeons and Dragonsregelwerk.

    Aber, was das Wichtigste ist, du brauchst in deiner Waffe nur 3, max. bis 5 Werte, plus Name, zu speichern. Die restlichen Werte hat dein Playercharakter, eben halt die drei Grundwerte, wie Intelligenz, Stärke und Agilität, auf diesen Werten bauen auch die anderen Werte auf, zum Beispiel Stärke 5 ergibt HP 10, oder Intelligenz 3 ergibt Mana 6 und Agilität 7 ergibt Ausdauer 14 oder so. Du musst es nicht verdoppeln, war jetzt nur ein Beispiel.

    Skills könnten zum Beispiel sein, Swordman, Wrestling, Anatomie, Archery usw. Wenn du es noch etwas komplexer machen willst, brauchst du den Erfolg auch nicht nur berechnen, mit zum Beispiel, wenn er ein Schwert nutzt, dass dann nur der Skill Swordman Einfluss darauf hat. Wenn er sich zum Beispiel gut mit Anatomy auskennt, kann ja das zusätzlich ebenfalls seine Treffer verbessern, usw.

    Aber am wichtigsten ist halt, deine Gegenstände haben wenig Aufwand, was die verschiedenen Werte angeht. Der Rest sind Werte vom Player. Die brauchst du aber ja nicht zu suchen, die hängst du einfach nur dem jeweiligen Spieler an.