Beiträge von ray187

    Um mal zu helfen und nicht nur abzuschrecken:


    Du musst dir überlegen:



    - Welche Variablen brauche ich, sprich was muss extern gespeichert werden? -> Unique ID, Modell, Farben, Position, Mods (da hast du natürlich freie Wahl in wie weit dein Script Details speichern soll)


    - Welches Dateimanagement werde ich benutzen? Filesystems, SQL-DB?


    - Welche Sachen lager ich auf dem Server aus? -> Variable die nicht an die externe Datenbank weitergegeben werden, Variablen die den Daten der DB zugesignt werden...



    Mit den drei Schritten (sofern du über genug Basiswissen verfügst) kannst dir dein dyn. Vehiclesys locker schreiben. Das gehört sicherlich nicht zu den Meisterleistungen im pawnscripten.

    Glaub mir, SAMP scripting ist eines der einfachsten Gebiete des Scriptens - vom Programmieren/Coden mal gar nicht erst angefangen.


    Wenn ich mir heutzutage die Tutorials und Beispiele auf SAMP angucke wäre ich besser dran gewesen mir diese deutlicher durchzulesen als ich es in der Anfangszeit getan habe. Klar hilft es immer mal wieder andere zu fragen aber was da eig. an Wissen drinsteckt deckt fast alles notwendige ab, um mal ein Grundgerüst an Kentnissen zu schaffen.


    Mit dem Wiki auf sa-mp.com, manchen Tutorials im Forum (da gibts auch sehr viel Mist) und der PAWN documentation ist man prinzipiell bestens bedient. Leider macht sich kaum wer die Mühe insbesondere diese nachzuschlagen weils vielen einfacher vorkommt sich alles von anderen scripten/erklären zu lassen.

    Es gibt einen mMn echt dummen Ansatz um das jetzt auf die simpelste Weise zu debuggen. Das machste aber nur wenn du allein auf dem Server bist:



    Wenn ich mal wirklich an nem Punkt angelangt bin an dem ich nicht mehr weiterweiß, debugge ich Abschnitt für Abschnitt. Dann kannst in deine server_log (linux) oder windowsbox gucken was geprinted wird. Falls das zu erwarten geprintet wird kannst auch noch eine Stufe tiefer gehen und dir alle Variablen anzeigen lassen bis du weißt was falsch ist.


    Das ist kein guter programmiertechnischer Ansatz aber wenn alles andere nicht hilft... was will man dann machen.

    Zitat

    Super Ray und dann müsste er jedesmal den Cache neu leeren und kann eh sofort das fCarID löschen womit er dann wieder sich weiter verwirrt ^^. Es war auch seine Entscheidung ob er das Script CPU oder RAM freundlich macht.


    Ehh, nö. Was du da vorschlägst bring keine Verbesserung zwecks CPU oder Ram Ressourcen, sondern ist entweder gleichzustellen mit dem oder schlechter als das was ich vorgeschlagen habe - aber gut ;).


    Er hat ja anscheinend eine Unique ID für jedes Auto also muss er die schon mit einbringen, nur geht das cleverer als so.

    Dann würde ich aber die Datei ID aber als variable speichern und nicht die vehicleid, also z.B.


    FDaten[vehicleid][fCarId] = ...


    So machst du es ja auch mit player arrays -> pInfo[playerid][...].


    Insgesamt ändert sich der Loop Umfang dann drastisch, du musst kaum mehr loopen.

    Ich denke du hast den richtigen Grundgedanken, verstehe nur nicht genau deinen Aufbau.


    Warum gehst du es nicht anders an und verwendest dein Array FDaten für die jeweilige vehicleid:



    OnVehicleSpawn(vehicleid)
    {
    FDaten[vehicleid][wasauchimmer]=blabla;
    }


    Somit werden bei jedem Spawn gleich die richtigen Daten der richtigen Vehicleid zugesignt.


    Jedesmal zu schleifen und die vehid in eine extra Variable packen ist überflüssig.


    Dann kannst auch direkt bei VehicleDeath das richtige machen:


    OnVehicleDeath(vehicleid)
    {
    FDaten[vehicleid][wasauchimmer]=-1; //parameter resetten
    }

    Und Ray nein das meint er nicht...


    Wow vielen Dank für die ausführliche Erklärung was er dann meint :).


    Steve:


    Jetzt versteh ich was du meinst, welche Art von Datenspeicherung benutzt du denn? File systems?


    Im Kürze erklärt: Du schnappst dir ne Variable in die du die Jailtime des Spielers speicherst welche du dann in einer Funktion runterzählst. Wenn der Player disconnected speicherst du die Variable ab, lädst die wieder bei connecten und lässt sie weiteren runterzählen bis sie z.B. 0 erreicht.

    Warscheinlich müsste aber - selbst wenn die Funktion die Ursache ist - SendClientMessage(playerid, COLOR_RED, " Fahrt Abgrebrochen!"); und die andere ausgeführt werden. Dass aber gar nichts auf dem Screen erscheint wundert mich sehr.

    Ein Beispiel:


    Als global eine Variable deklarieren:


    new timer;


    In deiner Funktion in der du Settimer oder SetTimerEx aufrufst dann:



    blabla()
    {


    timer = SetTimer(...); // bzw = SetTimerEx


    }


    Nun kannst du z.B. den Timer killen:


    KillTimer(timer);


    Ich bin mir aber weder sicher ob du das meinst, noch ob ich dir hilfreich war, da deine Fragestellung einfach zu undeutlich formuliert ist.

    Sorry hab natürlich das falsche gequotet :/


    Meinte ZUGCP[playerid] = 1; (ich schätz ma CheckPoint?).


    Erstmal zum Code an sich:


    In OnPlayerExitVehicle hast du die vehicleid schon zur Verfügung, dieser Code ist redundant:


    new VID;
    VID = GetPlayerVehicleID(playerid);
    new carid = GetPlayerVehicleID(playerid);


    (ich versteh eh nicht warum VID *und* carid).


    Passiert absolut gar nichts oder nur ein Teil des gewünschten Ergebnisses?


    Ansonsten sieht's soweit man das vom Überfliegen des Codes sagen kann eigentlich ganz gut aus.

    Deine Timer Funktion könnte aber das Resultat für nicht korrekt ausgeführten Code sein, ich würde es nicht ansprechen wenn es gänzlich unrealistisch wäre ;).


    Anstelle deines Codes kannst du die else if Verknüpfung wie folgt schreiben:



    Das macht aber von der Logik keinen Unterschied.

    Code technisch müsste das aber zum gleichen Resultat führen, deswegen glaube ich kaum, dass eine Änderung der if/else einen Unterschied macht. Kann es sein, dass irgendwas mit der Timer Funktion nicht stimmt?

    Hab grad gesehen dass du Windows Vista benutzt (hast in nem anderen post angegeben).


    Wie gesagt, suche über windows nach der Datei savedpositions. Bin mir zu 99% sicher dass die Firewall nix mit zu tun hat.


    0.3 hat das Directory zu Eigene Dokumente/GTA blabla geändert.

    Wie gesagt, wenn ich nur schnell drüber gucke, kommts mir vor wie wenn einfach nicht alle notwendigen Codeausschnitte von Dir gepostet wurden, also nein ich weiß es nicht ;).


    Nimm meinen Rat an, erspart uns allen einen Haufen Arbeit :P

    Musst mit Variablen in irgend einem Dateimanagement Form speichern.


    Wenn der Gamemode beim Serverstart geladen wird, diese Daten auslesen und je nachdem Funktionen aufrufen die dein Auto modden.