Teleport Tiles erstellen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Teleport Tiles erstellen

      Leider hat es nicht lange gedauert bis ich vorm ersten großem Problem stehe.
      Ich habe keine Ahnung wie ich das Teleport-System umsetzen soll, denn ich habe keine Lust ein System von Race Mod zu übernehmen.



      Was ich weis ist, dass man, wenn man mehrere Tiles hat, einen neuen Eintrag in die enumeration von CCollisionhinzufügen soll, der aber nicht den Wert hat, der aus sich einem anderen Eintrage ergibt. (Beispiel: COFLAG_TELE = 5, [5 = 4 + 1, was dafür das es binär die Flag COFLAG_NOHOOK enthält]


      Also für ein Tile würde man in der Datei mapitems.h das Tile hinzufügen, z.B TILE_BOOST, da man aber nicht für jeden Teleporter Eingang und Ausgang einen Eintrag extra machen möchte muss man das irgendwie anders machen. Und hier komm ich nicht weiter :((


      Ich hoffe das jemand mir das erklären könnte.
      Meine HP könnte dich auch intressieren
    • Hey,

      falls du dir das Tutorial zu einem neuen Tile noch nicht angeschaut hast: Toast: Wie füge ein neues Tile ein?

      solltest du das nocheinmal tun, auch wenn es nur einen Überblick gibt und ich die eigentliche Herangehensweise nicht so schön finde (für dein Teleporter Problem erst recht nicht ;) ).

      Also,
      was du tun musst:
      Dir Überlegen, wie du die Positionen der Teleporter speicherst, wobei nur die Position des Tiles wichtig ist, zu dem du dich teleportieren möchtest.
      Die Tiles in MapItems.h schlau (!) definieren, natürlich kannst du alle x TeleporterTiles einzeln definieren, aber eine Zusammenfassung macht letztendlich mehr Sinn.
      Die Initialisierung in Collission::Init für deine Tiles anpassen und die Positionen wie in (1) speichern.
      Eine Collision-Funktion machen, die prüft, ob dein aktuelles Tile ein Teleporter ist und wenn ja, entweder den Index des Teleporters (dann mit Speicherzugriff auf die gespeicherten Positionen) oder die Position, zu der teleportiert wird, zurückgibt.
      Danach die Abfrage in Character::Tick einbauen und wenn nötig teleportieren.
      Fertig :)


      Mit freundlichen Grüßen,

      Pata
    • Also mit den Tiles definieren in mapitems.h würde ich nun folgendes machen:

      unter mapitems.h einfügen:
      [cpp]TILE_TELE_TO_START=36,TILE_TELE_FROM_START,TILE_TELE_TO_END=189,TILE_TELE_FROM_END,[/cpp]

      unter collision.cpp einfügen:
      Init Funktion
      [cpp]if((Index >= TILE_TELE_TO_START && Index <= TILE_TELE_TO_END) || (Index >= TILE_TELE_FROM_START && Index <= TILE_TELE_FROM_END)) m_pTiles.m_Index = Index;[/cpp]


      neu Funktionen
      [cpp]bool CCollision::IsTileTele(int x, int y){ int index = GetTile(x, y); return (index >= TILE_TELE_TO_START && index <= TILE_TELE_TO_END) || (index >= TILE_TELE_FROM_START && index <= TILE_TELE_FROM_END)}[/cpp]

      Nun verstehe ich nicht wie ich herausfinden soll, welcher Eingang X mich auch zum richtigen Ausgang Y bringt!
      Meine HP könnte dich auch intressieren
    • So ich habe erstmal versucht andere Tiles zu machen, aber ich komme nicht am Problem vorbei mit der binären Collision Flags

      Also in der Klasse CCollision ist ein enum definiert, welches binäre Collision Flags haben (COLFLAG_SOLID = 1, COFLAG_DEATH = 2, COFLAG_NOHOOK = 4)
      Diese werden zur Überprüfung von Tiles Kollisionen verwendet, nehme ich mal an. Wenn ein Tile vom Index her diesen Bit besitzt wird diese FLAG auch verwendet.

      Beispiel:
      Index 5 ist binär 0101 uns besitzt damit die Flags COLFLAG_SOLID (binär 0001) und COFLAG_NOHOOK (binär 0100)

      Sollte jemand wissen, wie man dieses Problem lösen kann, so währe ich ihm sehr dankbar, weil ich da schon seit 4 Tagen dran sitze. Und sollte ich etwas daran falsch verstanden haben, korrigiert mich bitte.
      Meine HP könnte dich auch intressieren
    • Ok also soll ich am besten die ganzen Flags rausnehmen. Und da wird wirklich nichts beeinträchtigt?

      Ich werde es mal versuche! Vielen Dank


      ---------------------------------


      Wie sich herausgestellt hat, kann man die Kollision Flags nicht entfernen, da sich sonst die Server Version ändert.
      Nun habe ich einfach in collision.cpp die Funktion GetTile so geändert, das er jedes Tile ignoriert, was einen Index höher als 5 hat. (5 Weil die AND-Verknüpfung aus COFLAG_SOLID und COFLAG_NOHOOK 5 ergibt).

      Nun kann ich aber nicht das Tile mit dem Index 5 benutzen, da es die Flags SOLID und NOHOOK hat. Irgendwelche Vorschläge :?:

      //P.S. Ich möchte nicht den Index 5 auslassen, da ich sonst alle meine Maps und Tilesets umändern muss.


      EDIT Pata: Bitte keine Doppelposts -> Edits nutzen
      Meine HP könnte dich auch intressieren

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Patafix ()

    • Falls du meinen Post ordentlich durchgelsen hast, dann muss dir trotzdem die Phrase "Die Flags nicht benutzen" überlesen haben.
      Natürlich kannst du mit den Flags arbeiten; jedoch scheint es bei dir ja auf diesem Wege nicht zu klappen, weshalb ich dir raten würde, es ohne Flags zu probieren.
      Dafür nimmst du anstatt der Flags der Tiles, ihren direkten TileIndex (AIR, HOOK, NO_HOOK, DEATH)!

      PS: Man kann dir zudem wenig helfen, wenn man nicht weiß, wie dein code ausschaut. Also Code entweder hier (am besten im Spoiler) oder auf externen Seiten wie z.B. pastebin.com/ posten.