Gibt es einen Unterschied zwischen Public und Stock

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Tag liebe Community,
    vielleicht Fragen sich einige von euch schon, warum ich diesen Post erstelle, doch es muss einfach sein, da ich mit dieser kleinen Frage einfach nicht weiterkomme. Also in Pawno kann man sich eigene Funktionen erstellen durch public und/oder stock oder eventuell durch etwas anderes, was ich nicht kenne.
    Dazu hätte ich einige Fragen an euch. Gibt es einen Unterschied zwischen Public und Stock? Wenn ja welche Unterschiede denn? Welches System wäre nach eurer Meinung nach besser? Welches System muss man wo benutzen?
    Wenn ihr mir diese Fragen beantworten könntet, würde ich mich freuen.

  • Sogar ein sehr großer Unterschied.
    Kurz gesagt, Public´s werden von dem Compiler IMMER immer "durchgelesen", d.h beim Kompilieren wird der ganze Code durchgecheckt.
    Beim stock ist es aber so(zum Stock allgemein gibt es eigentlich schon viel zu erzählen das aber mal bei Seite) dass der nur "durchgecheckt" wird, wenn er auch tatsächlich in einem Callback verwendet wird.


    //edit/2, Als System kann man dies leider nicht sehen, in Includes arbeiten die meisten mit Stocks, diese werden so vom Compiler nicht "gesehen" besser gesagt er fängt garnicht an ihn zu prüfen, da sie garnicht benutzt wurden
    nachdem Funktionen im Hauptscript benutzt wurden, sieht man die Error/warning, falls welche gemacht wurden.

  • Viel wichtiger ist außerdem, dass man publics zwangläufig braucht, wenn man eine Funktion (von außerhalb) abrufen will.
    (CallRemoteFunction oder CallLocalFuntion)


    Den dritten Initialiser den du nicht kennst ist "native". Kannst du benutzen um Pseudo-native Funktionen zu erstellen. Macht man das in einem include, werden die Funktionen sogar rechts in der Tabelle angezeigt.


    Das hällt man ja im Kopf nicht aus.


    CallRemoteFunction im Script selber ist also ein Aufruf von Außerhalb - ahja...
    Du kommst schon mit der pawn-lang.pdf, hast du die mal gelesen oder gibst du einfach nur das stumpf wieder was man dir, scheinbar sehr Fehler-/Lückenhaft, erzählt hat?


    Eine Funktion kann ich auch ohne "public" oder "stock" aufrufen.
    "stock" ist KEINE Funktionsbeschreibung.


    PAWN macht es sich hier ganz einfach.
    Es gibt nur "public" als "initialisierer" von Funktionen, keine weiteren.
    Der Rest ist sogesehen "private" und kann nicht wie "publics" aufgerufen werden.


    Publics sind in SA:MP Scripts notwendig, wenn diese vom Server aufgerufen werden.
    Beispielsweise Callbacks, Timer(SetTimer) und die CallFunctions.
    Das Sind alles Funktionen, die der Server/Interpreter aufruft, dass hat mit dem Script selber rein gar nichts zu tun.
    Aus dem Grund braucht man halt "public".


    Dann komm ich mal zu deinem "native" quatsch.
    Was sind bitte Pseudo Natives?


    Natives die du dir ausdenkst?


    Wenn du natives in deine Includes oder ins Script schreibst und dann den Server startest,
    was passiert dann?


    Richtig -> Runtime Error 19: File or Function is not found.


    Warum?
    Ganz einfach, weil man natives nicht einfach so erstellen kann, wie man gerade lustig ist.
    Natives müssen vorher registriert werden, entweder im Interpreter/Server selbst, oder via Plugin.
    Dann hat man die Natives trotzdem nicht im Script, sondern im Plugin.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski