Callbacks ( Rückruffunktionen)

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

    • Callbacks ( Rückruffunktionen)

      Ersteinmal, dieses Tutorial ist eher optional,
      es erleichtert euch die Arbeit und ist für alle gedacht,
      die die Grundlagen verstanden haben und anwenden koennen.

      1. Was ist ein Callback?
      Callbacks sind Funktionen, welche aufgerufen werden, wenn ein bestimmtes Ereignis eintritt.
      Diese liefern dann bestimmte Werte usw. zurück, z.b.:
      einen Integer ( Ganze Zahl, z.b. 1 oder -5 ),
      einen String ( Zeichenkette, z.b. "Hallo" )
      oder auch einen boolschen Ausdruck ( true oder false ).


      2. Callbacks in MTA
      MTA verfügt bereits über verschiedenste Arten von Callbacks, z.b.
      liefert die Funktion

      Quellcode

      1. getElementPosition()

      x, y und z-Koordinate eines Objektes zurück.
      Dieses Abfrage kann dann z.b. zum belegen von Variabeln
      benutzt werden, damit das Script flexibel bleibt und man nicht jedes mal
      neue Zahlen eintragen muss
      Beispiel:

      Quellcode

      1. local x, y, z = getElementPosition ( player )
      2. createVehicle ( 500, x, y, z )

      Die Variabeln x, y und z werden mit den Koordinaten des Elements "player" ( z.b. ein Spieler ) belegt
      und anschliessend verwendet, um ein Fahrzeug an der Position zu erstellen.

      3. Callbacks selber schreiben
      Nehmen wir nun an, dass man abfragen moechte, ob ein bestimmtes
      Fahrzeug ein "Mesa" ( kleinerer Jeep ) ist.
      Dazu muessen wir nun zunächst das Callback schreiben:

      Quellcode

      1. function isVehicleAMesa ( theVehicle )
      2. if getElementModel ( theVehicle ) == 500 then
      3. return true
      4. else
      5. return false
      6. end
      7. end

      Wird nun die Funktion gerufen,
      belegt die Funktion die Variabel aus dem "Kopf" mit dem ersten Argument, das weiter gegeben wurde:

      Quellcode

      1. isVehicleAMesa ( getPedOccupiedVehicle ( player ) )

      Das Callback isVehicleAMesa wird gerufen und die Variabel theVehicle des Callbacks
      mit dem Fahrzeug des Spielers gefuellt.

      Quellcode

      1. isVehicleAMesa ( getPedOccupiedVehicle ( player ), false )

      Wieder wird das Callback gerufen und die Variabel theVehicle mit dem Fahrzeug des Spielers
      gefuellt, jedoch wird ebenfalls false als 2. Argument weitergegeben - da jedoch im "Kopf" des Callbacks
      nur eine Variabel belegt werden soll, ist der Effekt der selbe, wie im oberen Beispiel.
      Wollte man false ebenfalls weitergeben, so muesste man im Kopf des Callbacks
      eine weitere Variabel angeben, die mit dem Wert gefuellt werden soll:

      Quellcode

      1. function isVehicleAMesa ( theVehicle, xyz )


      Im Script wuerde man dann z.b. folgendes verwenden:

      Quellcode

      1. function checkIfItsAMesa ( vehicle ) -- Die Funktion, die gerufen wird, falls ein Spieler ein Fahrzeug betritt.
      2. if isVehicleAMesa ( vehicle ) then -- Unser Callback wird gerufen - falls das Fahrzeug ein Mesa ist, trifft der erste Fall zu, da das Callback isVehicleAMesa den Wert true zurückliefert
      3. outputChatBox ( "Das Fahrzeug ist ein Mesa.", source )
      4. else -- Wenn das Fahrzeug kein Mesa ist, tritt der else-fall in Kraft
      5. outputChatBox ( "Das Fahrzeug ist kein Mesa.", source )
      6. end
      7. end
      8. addEventHandler ( "onPlayerVehicleEnter", getRootElement(), checkIfItsAMesa )


      Wird noch ergänzt, falls ich mich irgendwo vertippt habe, bitte sagen
      Chumba Wumba!

      Deutscher MTA-Reallife Server - Lua Tutorial zum Thema Callbacks - Magnet Helikopter - Texas Hold'em ( No Limit )
      Ärzte - Nightwish - Rammstein - AC/DC - Bob Marley - Knorkator - Black Sabbath

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von [Vio]Zipper ()

    • Weitere Beispiele:

      1.

      Quellcode

      1. function timestamp ()
      2. local regtime = getRealTime()
      3. local year = regtime.year + 1900
      4. local month = regtime.month+1
      5. local day = regtime.monthday
      6. local hour = regtime.hou
      7. if hour == 24 then hour = 0 end
      8. local minute = regtime.minute
      9. local timestamp = tostring(day.."."..month.."."..year..", "..hour..":"..minute)
      10. return timestamp
      11. end
      Alles anzeigen

      Liefert einen String mit Zeit/Datum zurück,
      z.b. folgendes:
      "14.2.2010, 19:14"

      Benutzung:

      Quellcode

      1. outputChatBox ( "Zeit: "..timestamp() )

      Zeigt Zeit und Datum für den ganzen Server an


      2.

      Quellcode

      1. function getVehicleOccupantNames ( veh )
      2. local driver = getVehicleOccupant ( veh, 0 )
      3. if not driver then
      4. driver = "Keiner"
      5. else
      6. driver = getPlayerName( passanger1 )
      7. end
      8. local passanger1 = getVehicleOccupant ( veh, 1 )
      9. if not passanger1 then
      10. passanger1 = "Keiner"
      11. else
      12. passanger1 = getPlayerName( passanger1 )
      13. end
      14. local passanger2 = getVehicleOccupant ( veh, 2 )
      15. if not passanger2 then
      16. passanger2 = "Keiner"
      17. else
      18. passanger2 = getPlayerName( passanger2 )
      19. end
      20. local passanger3 = getVehicleOccupant ( veh, 3 )
      21. if not passanger3 then
      22. passanger3 = "Keiner"
      23. else
      24. passanger3 = getPlayerName( passanger2 )
      25. end
      26. return driver, passanger1, passanger2, passanger3
      27. end
      Alles anzeigen

      Liefert bei Benutzung die jeweiligen Namen der Spieler auf den Sitzen.

      Anwendung:

      Quellcode

      1. local d, p1, p2, p3 = getVehicleOccupantNames ( veh )
      2. outputChatBox ( "Fahrer:"..d..",Beifahrer"..p1..",Passagier 1:"..p2..",Passagier 2:"..p3 )

      gibt die Namen Spieler aus.

      Sry wegen dem Einrücken, irgendwie spackt das bei mir...
      Chumba Wumba!

      Deutscher MTA-Reallife Server - Lua Tutorial zum Thema Callbacks - Magnet Helikopter - Texas Hold'em ( No Limit )
      Ärzte - Nightwish - Rammstein - AC/DC - Bob Marley - Knorkator - Black Sabbath
    • Für Anfänger ist das Tutorial Recht gut aber den Vorwurf das die MTA Community keinen Support bietet kann man nicht so stehen lassen,
      in deren Wikipedia steht mehr als du dir je erträumen kannst, alle Funktionen zudem auch diverse Erklärungen auf Deutsch aber auch wenn das
      meiste auf Englisch ist kann ich dazu nur sagen das Englisch halt eine Weltsprache ist die man ja in der Schule lernt, normal sollte man mit gutem Englisch Basiswissen
      an den Tutorials nicht scheitern
      Mfg. BlackFoX_UD_ alias [BFX]Explosion

    • Naja, Sachlich gesehen, ist das Ding ja total falsch.

      "Ein Callback ist eine Funktion, die einen Wert zurückliefert - ", nö.
      Callbacks sind Funktionen, welche aufgerufen werden, wenn ein bestimmtes Ereignis eintritt.
      DMA @ Twitter: hier
      C & JAVA Videotutorials auf DevCornerNow

      Programmieraufträge & kalkulationen per PN.
      SA:MP Egal ob Fehlerreparatur oder Scriptteile, beides wird erstellt. (Auch Nischen wie SQLite können bedient werden. ;-))
      sonstige Sprachen:
      • C
      • C++
      • C#
      • D
      • PAWN
      • JavaScript (HTML5)
      • PHP
      • Perl
      • SQL
      Assembler:
      • 6502
      • x86
      • IA64
      • PowerPC

      Momentan
      • Z-C (programming language)
      • CGI-PAWN (pawn for webprogramming)


    • DMA schrieb:

      Naja, Sachlich gesehen, ist das Ding ja total falsch.

      "Ein Callback ist eine Funktion, die einen Wert zurückliefert - ", nö.
      Callbacks sind Funktionen, welche aufgerufen werden, wenn ein bestimmtes Ereignis eintritt.
      habs verbessert, danke für den Hinweis - habe mich da etwas vertan...
      Chumba Wumba!

      Deutscher MTA-Reallife Server - Lua Tutorial zum Thema Callbacks - Magnet Helikopter - Texas Hold'em ( No Limit )
      Ärzte - Nightwish - Rammstein - AC/DC - Bob Marley - Knorkator - Black Sabbath
    • BlackFoX_UD_ schrieb:

      Für Anfänger ist das Tutorial Recht gut aber den Vorwurf das die MTA Community keinen Support bietet kann man nicht so stehen lassen,
      in deren Wikipedia steht mehr als du dir je erträumen kannst, alle Funktionen zudem auch diverse Erklärungen auf Deutsch aber auch wenn das
      meiste auf Englisch ist kann ich dazu nur sagen das Englisch halt eine Weltsprache ist die man ja in der Schule lernt, normal sollte man mit gutem Englisch Basiswissen
      an den Tutorials nicht scheitern


      Er meint vermutlich den Support über die Spieler weil in Mta nicht viel los ist.
      Stimme aber Blackfox zu die machen einen guten Job dort, haben uns bei -XIII- bei einem Problem direkt ein Clientseitiges Html/Stylsheet-Auslesungs Patch für das Adminsystem
      gebaut. Wer von Sa-mp würde das tun ? Niemand.

      @Zipper gutes Tutorial aber du kannste deine Abfrage kürzer gestalten und musst ne Abfrage einfügen, wie viele Plätze das Fahrzeuge überhaupt hat.
      Falls es nur ein Roller ist, der nur 2 Slots hat, stellst du unnötige Anfragen auf die Slots 3 und 4

      PAWN-Quellcode

      1. function getVehicleOccupantNames ( veh )
      2. local driver = getVehicleOccupant ( veh, 0 )
      3. if not driver then
      4. driver = "Keiner"
      5. else
      6. driver = getPlayerName( passanger1 )
      7. end
      8. local passanger1 = getVehicleOccupant ( veh, 1 )
      9. if not passanger1 then
      10. passanger1 = "Keiner"
      11. else
      12. passanger1 = getPlayerName( passanger1 )
      13. end
      14. local passanger2 = getVehicleOccupant ( veh, 2 )
      15. if not passanger2 then
      16. passanger2 = "Keiner"
      17. else
      18. passanger2 = getPlayerName( passanger2 )
      19. end
      20. local passanger3 = getVehicleOccupant ( veh, 3 )
      21. if not passanger3 then
      22. passanger3 = "Keiner"
      23. else
      24. passanger3 = getPlayerName( passanger2 )
      25. end
      26. return driver, passanger1, passanger2, passanger3
      27. end
      Alles anzeigen


      Falls die variable platz_2, platz_3 und platz_4 nicht benötigt werden gibt dir return ein false wieder.

      PAWN-Quellcode

      1. function getVehicleOccupantNames ( veh )
      2. for i=1, getVehicleMaxPassengers ( veh ), 1 do
      3. local platz_"..i = getVehicleOccupant ( veh, i )
      4. if not platz_"..i then
      5. platz_"..i = "Keiner"
      6. else
      7. platz_"..i = getPlayerName( platz_"..i)
      8. end
      9. end
      10. return platz_1, platz_2, platz_3, platz_4
      11. end
      Alles anzeigen

      Mta Script Editor - Work in Progress