Beiträge von Jeffry

    Wenn sich die Texte pro Level "aufaddieren" sollen, dann musst du mit if arbeiten, sonst siehst du immer nur den einen Text des entsprechenden Levels.
    Zwei Dialoge auf einmal lassen sich nicht anzeigen.


    dcmd_ahelp(playerid,params[])
    {
    #pragma unused params
    new string[1000];
    if(sSpieler[playerid][Adminlevel] == 0) return SendClientMessage(playerid,FehlerRot,"Du hast nicht die benötigten Rechte, um diesen Befehl auszuführen!");
    if(sSpieler[playerid][Adminlevel] >= 1)
    {
    format(string,sizeof(string),"%s{ff8b00}/a - Adminchat\n{ff8b00}/cnnn - Globale Ankündigung (Textdeaw)\n{ff8b00}/cnn - Globale Ankündigung\n{ff8b00}/clearchat - Chat löschen\n",string);
    format(string,sizeof(string),"%s{ff8b00}/amodus - Adminmodus aktiveren/Deaktivieren\n{ff8b00}/goto - Zu Spieler Teleportieren\n{ff8b00}/tome - Spieler zu sich Teleportieren\n",string);
    format(string,sizeof(string),"%s{ff8b00}/mute - Spieler im Chat muten\n{ff8b00}/unmute - Spieler im Chat unmuten\n{ff8b00}/admingoto - Zu wichtigen Orten Teleportieren",string);
    }
    if(sSpieler[playerid][Adminlevel] >= 2)
    {
    format(string,sizeof(string),"%s{ff8b00}/ban - Bannt einen Spieler vom Server\n{ff8b00}/kick - Kickt einen Spieler vom Server\n{ff8b00}/sethp - HP eines Spielers ändern\n{ff8b00}/veh - Fahrzeug Spawnen\n{ff8b00}/freeze - Freezed einen Spieler\n",string);
    format(string,sizeof(string),"%s{ff8b00}/unfreeze - Unfreezed einen Spieler\n{ff8b00}/ahelp - Adminhilfe\n{ff8b00}/a - Adminchat\n{ff8b00}/cnnn - Globale Ankündigung (Textdraw)\n{ff8b00}/cnn - Globale Ankündigung\n{ff8b00}/clearchat - Chat löschen\n{ff8b00}/amodus - Adminmodus Aktivieren/Deaktivieren\n{ff8b00}/goto - Zu Spieler Teleportieren\n",string);
    format (string,sizeof(string),"%s{ff8b00}/tome - Spieler zu sich Teleportieren\n{ff8b00}/mute - Spieler im Chat muten\n{ff8b00}/unmute - Spieler im Chat unmuten\n{ff8b00}/admingoto - Zu wichtigen Orten Teleportieren",string);
    }
    ShowPlayerDialog(playerid,ADMINHELP1,DIALOG_STYLE_MSGBOX,"Adminhilfe",string,"Fertig","");
    return 1;
    }

    Jo, ziemlich gut auf den Punkt gebracht.


    Bezüglich den Ressourcen, die die Plugins nutzen, lässt sich pauschal keine Aussage treffen. In den meisten Fällen aber, arbeiten diese besser als PAWN, da in der Plugin Entwicklung mehr und bessere Möglichkeiten zur Verfügung stehen.
    Bei Command Prozessoren ist das aber unwesentlich.

    Hast du bei OnGameModeInit vor dem Laden der Shops das hier drin?
    for(new i = 0; i < sizeof(Shops); i++)
    {
    Shops[i][h_pickup] = -1;
    Shops[i][s_text] = Text3D:-1;
    }


    Wenn nicht, füge das ein.

    Das geht problemlos in kurzer Zeit.


    Die Dcmd define mit der OCMD Include tauschen, bei OnPlayerCommandText die dcmd Aufrufe entfernen und dann mit STRG+H alle dcmd_ mit ocmd: ersetzen.

    Pawn.CMD dürfte von der Performance her das beste sein, ist allerdings ein Plugin, ich persönlich vertrete die Meinung, möglichst wenig Plugins zu nutzen, da Plugins immer gewissermaßen abhängig machen.


    OCMD ist von der Einfachheit her, zusammen mit Funktionen und Performance, wohl die beste Wahl.


    Grundsätzlich muss man aber sagen, dass es so gut wie keine Rolle spielt, von der Performance her, welchen Command Prozessor man nutzt, da dies nur ein minimaler Bruchteil der gesamten Leistung ausmacht.

    @Jeffry geiler BMW, wie lange hast du den schon und was hast du bezahlt wenn ich fragen darf ?

    Danke! Ich habe ihn letztes Jahr im August gekauft, hier der Link zum Post vom September: Zeigt her euren Fahrbaren Unterbau .
    Den Preis sage ich dir gleich in PN.



    Und was ist das für ne Abdeckung auf dem Kennzeichen ? Hast du doch nicht extra drauf getan um's zu zensieren, oder ?

    Ist keine spezielle Abdeckung.
    Das hab ich nur mit GIMP so rein editiert, siehste auf dem einen Bild wo der VW Beetle links hinten im Bild steht (http://i.imgur.com/P95HSys.jpg), da ist das Kennzeichen auch entfernt.
    Ich mach das nur nicht mit den weißen/schwarzen Balken, sondern nehme die Farbe des Kennzeichens wie es auf dem Bild ist und verteile die auf dem Kennzeichen. Das sieht dann besser aus, weil es natürlicher wirkt.

    Letzte Woche bin ich endlich dazu gekommen, einen Rundum-Putz-und-Pflege-Tag zu machen.


    Folgende Schritte habe ich gemacht:

    • Zur Shell in die Waschanlage (Textile Bürsten = keine Kratzer) mit der Basispflege (7,95€), das heißt Waschen, ohne Wachs am Ende.
    • Zu Hause die restlichen Stellen, die die Anlage nicht trocken bekommen hat, von Hand mit Mikrofasertüchern trocknen.
    • Von Hand die Felgen reinigen (geht auch in der Anlage, aber nur in Verbindung mit Heißwachs am Ende, den wollte ich natürlich nicht, wenn ich Hartwachs drauf mache)
    • Innenraum reinigen (Saugen, Fenster, etc...)
    • Als dann gegen Nachmittag ein paar Wolken kamen, den Hartwachs (Soft99 Fusso Coat 12M Wachs) von Hand aufgetragen.

    Insgesamt habe ich für alles zusammen ca. 6 Stunden benötigt.



    Hier das Ergebnis:



    Ich möchte euch auch noch speziell den Effekt vom Soft99 Fusso Coat Wachs zeigen.

    https://www.idealo.de/preisver…ax-dark-color-soft99.html
    https://www.autopflege24.net/s…so-coat-12m-wax-dark.html


    So sah es aus, als ich die Hälfte der Motorhaube mit dem Wachs eingerieben hatte (mit Wachs-Applicator-Pad):

    Man erkennt klar, dass die rechte Seite den Wachs drauf hat. Zu beachten ist, dass man das Wachs nur ganz dünn aufträgt, sonst quält man sich beim Auspolieren mit dem Mikrofastertuch nach ca. 10 Minuten nur unnötig.


    Hier nach dem Auspolieren, man sieht den Unterschied deutlich an der Tropfenbildung im Vergleich (links: ohne Wachs / rechts: mit Wachs)


    Hier nochmal in groß (links: ohne Wachs / rechts: mit Wachs):


    Es ist klar zu erkennen, dass die Tropfenbildung beim Soft99 Fusso Coat der Hammer ist. Die Tropfen sind perfekt rund wo der Wachs drauf ist. Auf der Seite auf der nichts drauf ist sind die Tropfen nur irgendwelche unförmigen Pfützen.
    Es wird sich in den nächsten Wochen und Monaten zeigen, wie lange das Wachs hält. Da man aber so gut wie nichts an Menge von dem Wachs verbraucht (habe das ganze Auto gewachst und am Inhalt hat sich so gut wie nichts verändert), dürfte die Dose über 10 Jahre reichen, selbst wenn man 2-4 mal im Jahr das Wachs aufträgt.

    playerData[playerid][pSkinClicked] = sizeof(FamaleSkins);
    zu:
    playerData[playerid][pSkinClicked] = sizeof(FamaleSkins)-1;
    Gleiches für die MaleSkins.


    Und bei der Deklaration:
    new FamaleSkins[80] = {
    zu:
    new FamaleSkins[] = {


    Gleiches für die MaleSkins.

    Nutze anstatt PlayerTextDrawSetString die Funktion http://wiki.sa-mp.com/wiki/PlayerTextDrawSetPreviewModel
    Gegebenenfalls musst du danach dem Spieler das Textdraw mit PlayerTextDrawShow nochmal anzeigen, das wird bei diversen Änderungen am Textdraw notwendig.



    Außerdem hast du diese Abfrage zwei mal drin:

    if(playertextid == playerData[playerid][pRegisterTD][4]){

    Die Abfrage auf Textdraw [5] fehlt.



    Zusätzlich scheint das hier nicht richtig:

    if(playerData[playerid][pSkinClicked] -1){

    Da dürfte vor dem -1 ein "==" fehlen.

    Auf Nachfrage in PN hier die Erklärung dafür:


    Als erstes benötigst du ein Query beim Login des Spielers, das in etwa so aussieht (für deine Bezeichnungen anpassen):
    new query[128];
    format(query, sizeof(query), "SELECT * FROM user_fahrzeuge WHERE besitzer='%d'", PlayerInfo[playerid][p_id]);
    mysql_pquery(handle, query, "OnUserLoadCars", "d", playerid);


    Danach dann das OnUserLoadCars:
    forward OnUserLoadCars(playerid);
    public OnUserLoadCars(playerid)
    {
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    new rows, id;
    cache_get_row_count(rows);
    if(rows == 0)
    {
    //Der Spieler hat keine Fahrzeuge
    return 1;
    }
    else
    {
    //Es existiert ein Ergebnis, das heißt der Spieler hat Fahrzeuge
    //Wir lesen nun die Zeilen des Caches aus
    for(new i = 0; i < rows; i++)
    {
    id = GetFreeCarInfoID();
    if(id == -1) return 0; //Zu viele Fahrzeuge existieren
    //cache_get_value_name_int(i, "id", CarInfo[id][db_id]); //Wichtig, noch hinzufügen!
    cache_get_value_name_int(i, "model", CarInfo[id][model]);
    cache_get_value_name_float(i, "x", CarInfo[id][c_x]);
    cache_get_value_name_float(i, "y", CarInfo[id][c_y]);
    cache_get_value_name_float(i, "z", CarInfo[id][c_z]);
    cache_get_value_name_float(i, "r", CarInfo[id][c_r]);
    CarInfo[id][besitzer] = PlayerInfo[playerid][p_id];
    CarInfo[id][id_x] = CreateVehicle(CarInfo[id][model],CarInfo[id][c_x],CarInfo[id][c_y],CarInfo[id][c_z],CarInfo[id][c_r],-1,-1,-1);
    }
    }
    return 1;
    }


    Dazu dann noch den stock um einen leeren Index zu finden:
    stock GetFreeCarInfoID()
    {
    for(new i=0; i<sizeof(CarInfo); i++)
    {
    if(CarInfo[i][id_x] == 0) return i;
    }
    return -1;
    }



    Beim OnUserLoadCars habe ich dir eine Zeile auskommentiert, das solltest du beim Erstellen des Fahrzeugs noch hinzufügen, dass dort die DB ID zurück gegeben wird, dann kann diese hier auch geladen werden.
    Das ist dann auch wichtig, wenn du dem Spieler seine Fahrzeuge beim Logout speichern lässt.
    Ich sehe du hast das ja schon angefangen.


    Wie du beim INSERT an die ID kommst, kannst du hier herausfinden: [jTuT] MySQL R41-2 (Installation, XAMPP, Verwendung, Bedienung & Registrations-System)
    Gehe dort zum Punkt 6 (Register & Login System), wo OnUserRegister erklärt wird.