Beiträge von ray187

    Zum zweiten Mal: Nimm deinen original Code den du anfangs gepostet hast und ändere


    if(IsANoobCar(vehicle)) // <---- Problem zeile


    zu


    if(IsANoob(vehicle)) // <---- Problem zeile


    denn wie bereits gesagt - deine Fkt heißt "IsANoob". Warum Du die Public gemacht hast, ist mir unklar - allerdings kann es natürlich sein dass weiterer Code den Du verwendest das dann begründet.

    Immer den Typ verwenden, den man auch benutzt. Wenn man einen "normalen" Dezimalwert hat, dann %d ;). Macht unterm Strich keine Unterschiede, pawn verwendet für alles 32bit cells - aber es ist "besserer" Code.


    Verwende SetTimerEx so wie dir gezeigt wurde und zieh zur Not nochmal das Wiki von sa-mp.com ran, dort wird alles bestens erklärt.

    Dann bin ich mir ziemlich sicher dass OnPlayerRequestClass gar nicht aufgerufen wird - bis Du wirklich selbst auf die Pfeile klickst die dann die Funktion aufrufen. Das kann zum Beispiel daran liegen, dass du bereits Dialoge unter OnPlayerConnect verwendest die "verhindern", dass im nächsten Moment aufgerufen wird - ich hatte mal das selbe Problem als ich angefangen habe Dialogfelder fürs Einloggen zu verwenden.

    Das Problem ist, dass du (warsch.) gerade ausgibst - wie lange die jeweilige Funktion zum Ausführen braucht die durch SetTimer/Ex aufgerufen wird - nicht jedoch wann diese ausgeführt wird (denn letzten Endes geht es darum).


    Das könntest du z.B. mit einer global "_SekTimer" machen.


    Unter OnGameModeInit:


    _SekTimer = GetTIckCount();
    SetTimer(...); // Funktion welche jede Sek aufgerufen werden soll



    Unter:
    public ...()// Funktion welche jede Sek aufgerufen werden soll
    {
    print("Timed callback:");
    printf("-> Difference: %d ms",GetTickCount()-_SekTimer);
    }


    Da wirste überrascht sein was zum Teil rauskommen wird anstelle der erwarteten 1000ms ;)

    Die Funktion wird immer aufgerufen wenn man auf die Pfeile klickt. Mir ist es allerdings passiert dass sie aufgrund von Verwendung von Dialogs unter OnPlayerConnect nicht aufgerufen wurde.


    War aber auch nur ne Vermutung, da ich mir grade selbst nicht erklären kann warum es bei dir nicht funktionieren sollte. Aber dennoch... wenn du connectest und abwartest kommst du zu dem Screen, der Pfeile und "Spawn" darstellt , hast aber immer noch die Kamera, die auf einen Teil der Stadt von oben zeigt? Sobald du aber auf einen der Pfeile klickst ist alles richtig?

    Kann es sein, dass irgendwas den Aufruf von OnPlayerRequestClass bei dir "blockt"? Ich hatte ein ähnliches verhalten wenn ich den Server via gmx neugestartet habe. Schliess das Spiel mal komplett und connecte nochmal zum Server.


    Ansonsten mal Schritt für Schritt die Funktionen die aufgerufen werden sollten im Spiel anzeigen lassen.

    Templer habe es gerade getestet da bringt dein Return nichts, meins hat wunderbar funktioniert man könnte rein theoretisch eine if Abfrage mehr verwenden und das letzte in einen else. Nein ich habe mich nicht selbst erniedrigt und ich kann sehr deutlich lesen.


    \Edit\ Ray hör doch mal auf zu Spammen um Beiträge zu sammeln oO


    Les Dir mal kurz meine Beiträge in diesem Thread durch und Du wirst sehen, dass sie im Gegensatz zu deinem jetzt zitierten der Problemlösung geholfen haben.


    Was Templer geschrieben hat funktioniert ohne Probleme. Wenn Du dich nicht gut genug auskennst, unterstelle bitte anderen nicht solche Sachen.

    Wie gesagt, der Code Ausschnitt der Dir von Templer vorgestellt wurde funktioniert als solcher. Entweder Du hast weitere Funktionen die aufgerufen werden und die Cameraposition verändern - oder die Werte für die if-Abfragen sind nicht korrekt gesetzt


    if(Spieler[playerid][Eingeloggt] < 1)
    {
    if(fexist(accFormat))
    {


    Viele andere Möglichkeiten gibt es nicht mehr.

    Ich meinte im oberen Beispiel was anders , es ist zu 100% besser einen SetTimer zu haben als einen SetTimerEx pro spieler ....


    Soleid es mir tut aber wenn Du versuchst einer Person etwas zu erklären solltest Dich dann auch verständlich genug ausdrücken.


    Zitat

    Natürlich verhelfen nur timer zum gewünschten Ergebnis , aber du wirst es nach und nach merken , bei wachsender Spieleranzahl , dass sich dein Server verlangsamt . Das ist keine Vermutung oder so , da spreche ich aus erfahrung .


    Das Timer den Server u.U. bei großer Spielerzahl verlangsamern können ist ein Fakt. Darauf habe ich auch nicht geantwortet. Die Vermutung/Unterstellung die Du geäußerst hast betraf folgendes Zitat (welches ich direkt verwendet habe, von daher dachte ich hier könnten gar keine Missverständnisse auftreten):


    Zitat

    und dass du 7 timer verwenden musst zeigt auch , dass du nicht ressourcensparend scripten kannst


    Du kennst meinen Code nicht, Du sprichst hier von absolut keiner "Erfahrung" denn soweit ich weiß warst Du innerhalb der letzten 2-3 Jahre nicht auf einem unserer Server. Ob der Server sich spürbar verlangsamern würde bei einer Spielerzahl jenseits der 150 konnten wir bis jetzt noch nicht feststellen, bis 150 war es jedoch kein Problem und sollte es mal zu einem werden ist es auch kein Problem dem vorzubeugen.


    Zitat

    Mich würde auch mal deine Prozessorauslastung und Ram auslastung interessieren . Zum loggen empfehle ich mysql vor allem das Plugin von strickenkid da es multi threading unterstützt . Aja wenn du jedes Query loggst merkt es der Spieler ja auch nicht , aber hier ist wieder der Punkt , dass bei Wachsender Spieleranzahl der server immer mehr zu tun haben wird ;)


    Ich hab noch kein Api dafür geschrieben, da es im Moment nicht nötig ist, werde es aber demnächst machen. ServerFFS ist unser host - dessen Ressourcen sind völlig ausreichend für uns. Was Du meinst ist threading - nicht multi-threading - was von allen "großen" mySQL plugins mittlerweile unterstützt wird... und jetzt nochmal, mit Halbwissen bitte nicht Neulinge in Versuchung führen.

    Jetzt mal ganz langsam ;).


    Sowas wie "returns manchmal braucht mans manchmal net" gibt's in diesem Kontext nicht. Das ist schon sehr klar definiert. Ich würde Dir auch vom verwenden von Returns mittem im Code abraten - aber das ist Geschmackssache.


    Nochmal meine Frage die Du leider noch nicht beantwortet hast:


    Verändert OnDialogResponse etwas an den Camerapositionen?


    Ansonsten (außer Du machst etwas was man anhand deiner Ausschnitte nicht sehen kann) funkioniert der Code der Dir vorgestellt wurde.

    schön da wird die cam auf den spieler gesetzt aber erst nachdem er eingeloggt ist ich erkenn da nix grosartiges 8|
    (dan wirds halt peinlich hab ich auch kein problem mit)


    Naja, dass du da die Camera wieder zu einer anderen Position settest solltest aber schon selbst erkennen ;)

    Das ist korrekt. Allerdings muss man von threaded processes die nur den jeweiligen Spieler und solche die alle betreffen unterscheiden.


    Das mysql plugin das ich verwende beispielsweise loggt jedes Query, an einem Tag entstehen da im Schnitt gut 100mb an Logfile - allerdings als threaded process, von daher kriegt wenn dann nur der Spieler der es ausgelöst hat was mit - und selbst die merken davon nix ;). Man muss aber hinzufügen, dass es über C/C++ und nicht über pwn geloggt wird.

    das allg. gerücht dass timer laggs verursachen hat hier auch keiner verbreitet , und dass du 7 timer verwenden musst zeigt auch , dass du nicht ressourcensparend scripten kannst .


    Wenn ich 7 Timer gleichzeitig ohne jedwede Nachteile verwenden kann und damit andere Stellen im Script entlaste, neue oder bessere Features schaffe kann man von "ressourcensparend" nicht reden - darunter wird allg. etwas anderes verstanden. Zum Thema Codeoptimierung zeigt es vll. dass es mit sauberem Code durchaus möglich ist, eine hohe Zahl an Timern laufen zu lassen. Sprech doch bitte keine Vermutungen aus und unterstelle mir nicht was Du nicht wissen kannst.


    Zitat

    Oder was auch besser ist , man hat einen SetTimer der jede minute läuft dann sollte man auch keine settimerex machen die eine minute laufen


    Auch das ist leider eine weitere Fehlinformation - bzw. zwei Dinge werden hier vermischt. Um serverseitige Events hervorzurufen bleibt dir nicht viel anderes übrig als auf SetTimer/SetTimerEx zurückzugreifen. Nun spielt es aber gar keine Rolle, welche Zeitspannen deine SetTimer im Vgl. zu SetTimerEx calls haben oder ob es sich um SetTimerEx anstelle von SetTimer handelt. Der Unterschied im Übrigen zw. SetTimer und -Ex ist auch nur die Variablenübergabe als Funktionsparameter. Ob man SetTimer oder SetTimerEx verwendet macht für die reine Laufzeit keine merklichen Unterschiede.

    Um mal kurz die Leute die grad viel mit "logischem Denken" um sich werfen aufzuklären und zu verhindern, dass Neulinge in diesem Bereich sofort mit Fehlinformationen konfrontiert werden und diese dann auch noch glauben:



    Ich betreue seit mehr als 2 Jahre Scripts unterschiedlicher Personen deren ursprünglichen Zustände mit heutigen nicht mehr vergleichbar sind (vorallem war häufig der Code anfangs Mist, aber es hat sich auch viel getan, neue Callbacks, SA-MP updates etc.). Es war oft der Fall das unnötige Timer aufgestellt wurden, Timer Funktionen aufruften die es gar nicht gab etc.pp.


    All diese Scripts funktionierten jedoch ohne Lags.


    Das Script, dass ich - auch auf Basis dieser Erfahrungen - "from scratch" geschrieben habe kommuniziert so gut wie permanent mit dem mySQL server.


    Ich verwende momentan 7 Timer die OnGameModeInit gestartet werden und zusätzl. nochmal ca. 10 weitere Timer die durch bestimmte Events während des Gameplays ausgelöst werden können. Ob 10 Spieler oder 80 - der Server laggt nicht.


    Ich habe mich lange mit dem Verhalten von Timern beschäftigt insbesondere ihrer Latenzen im Vgl. zu den eig. ms mit denen man sie aufruft, habe Testserver etliche Zeit laufen lassen um Vergleichswerte auszuspucken und letzten Endes bin ich zu dem Schluss gekommen, dass die Timer wie ich sie verwende keine Probleme darstellen. Das mag sich vll mit einem Playercount jenseits der 150 dann mal ändern, jedoch glaube ich es kaum. Und selbst wenn wäre es ein leichtes den Code umzuschreiben und zu optimieren.


    Dennoch, was ich damit sagen will, verbreitet bitte nicht Euer Halbwissen wenn Ihr nicht wisst wovon gesprochen wird bzw. nur Aufgeschnapptes nachsprecht. Ihr schadet damit einzig und allein denen die Euch Glauben schenken.


    Timer sind eine Frage des Servers und des optimierten Codes. Das allg. Gerücht Timer würden immer Lags hervorrufen stimmt einfach nicht.