Beiträge von Goldkiller

    Richtig einrücken und du siehst den Fehler,
    if (strcmp("/sellflaschen", cmdtext, true, 10) == 0)


    {
    tmp = strtok(cmdtext, idx);
    if(PlayerToPoint(10.0, playerid,-1991.258301, 209.510178, 28.342875) || PlayerToPoint(10.0, playerid,1478.815430, -1674.258179, 14.709888)) // Hier die Cords von den Verkaufspunkt der Flaschen

    {
    if(pfandflaschen[playerid] == 0)

    {
    SendClientMessage(playerid, COLOR_YELLOW,"Sie Besitzen keine Pfandflaschen");

    }
    if(!strlen(tmp))

    {
    SendClientMessage(playerid, COLOR_GRAD2, "Verwendung: sellflasche [anzahl]");
    format(string, sizeof(string), " Du hast %d Pflaschen bei dir",pfandflaschen);
    SendClientMessage(playerid, COLOR_GRAD3, string);
    return 1;

    }
    new pflasche;
    pflasche = strval(tmp);
    if(!strlen(tmp))

    {
    SendClientMessage(playerid, COLOR_GRAD2, "Verwendung: sellflasche [anzahl]");
    format(string, sizeof(string), " Du hast %d Pflaschen bei dir",pfandflaschen[playerid]);
    SendClientMessage(playerid, COLOR_GRAD3, string);
    return 1;

    }
    if(pflasche > pfandflaschen[playerid])

    {
    SendClientMessage(playerid, COLOR_GRAD2, " Du hast nicht soviele Pfand Flaschen !");
    return 1;

    }
    new check= pfandflaschen[playerid] - pflasche;
    if(check > pfandflaschen[playerid])

    {
    format(string, sizeof(string), " So Viele Flaschen haben sie nicht mehr.");
    SendClientMessage(playerid, COLOR_GREY, string);
    return 1;

    }
    new preis;
    pfandflaschen[playerid] -= pflasche;
    new geld = 8; // 8 Bestimmt den preis pro Flasche
    preis = geld * pflasche;
    GivePlayerMoney(playerid, preis);
    format(string, sizeof(string), " Du hast %d Pflaschen Abgegeben! und dafür %d $ Erhalten", pflasche,preis);
    SendClientMessage(playerid, COLOR_GRAD4, string);

    }
    else

    {
    SendClientMessage(playerid, COLOR_WHITE, "Du bist nicht am Abgabe punkt");

    }

    }
    return 1;
    }
    Der Fehler ist wohl noch drin.Woher weisst überhaupt,dass der Fehler dort liegt :-O ?

    Und wo liegt der Fehler ? Werden die Fahrzeuge nicht erstellt ? Du hast ja wirklich 0 Informationen gegeben über dein Problem,immerhin ist der Code dabei ;) .


    printf("model %d X %.1f Y %.1f Z %.1f Rot %.1f Col1 %d Col2 %d ID %d",Cmodel, CX,CY,CZ, Crot, Cc1, Cc2,Cid);
    Lass dir doch mal alle Daten ausgeben,vllt hilft das weiter.

    Es verschiebt die Bits pro Eintrag einen nach Links zum vorherigen.
    Den ersten Eintrag gebe ich die 1. Würde ich dort nichts angeben,wäre es bekanntlich 0 ( Wieso ? Da fehlt wohl die Information was so ein "enum" wirklich macht ) . Würde ich 0 um 1 nach Links verschieben,wäre es immernoch 0.
    Bringt also nichts.


    Falls es mit der Bitverschiebung nicht ganz klar wird,hier mal etwas leichter.
    enum e_Sachverhalte ( +=1 ) // Folgeeintrag ist immer +1
    bAdmin = 1
    bDeveloper, // 2
    bFuehrerscheinA, // 3
    bSpawned, // 4
    bLogin // 5
    }

    Ärgerlich,da hatte ich den Post schon fast fertig und drück auf "Vorschau", da bin ich nicht mehr angemeldet ... :pinch:


    Bit-Shiften / Bitverschiebung benutzt man, um wie der Name schon sagt Bits zu verschieben.
    Bei Wikipedia ist das ganz gut erklärt, die Bilder sind sehr deutlich wie ich finde.
    http://de.wikipedia.org/wiki/B…r#Bitweise_Verschiebungen

    Zitat

    Symbolik:


    „<<“ Verschieben nach links, um den jeweils dahinter angegeben Wert
    „>>“ Verschieben nach rechts, um den jeweils dahinter angegeben Wert
    „>>>“ ist eine Sonderform von „>>“; linke Seite wird mit Nullen aufgefüllt.


    <<< , so wie du es geschrieben hast, gibt es auch gar nicht.Kannst es mal in PAWN ausprobieren.
    new a = 4 <<< 3;



    Wozu man es braucht,gute Frage.Darauf hab ich leider auch keine Antwort,denn mir fällt keine "gute" Erklärung dafür ein. Es verschiebt nun mal die Bits, wofür du es am Ende konkret benutzt kann sicherlich sehr unterschiedlich sein.Ich weiss nur wofür ich es verwendet habe.
    Man kann damit Daten "komprimieren". Das umfasst aber den kompletten Bit-Operationen Bereich.
    Wie schon erwähnt hat eine Variable 32 Bits in PAWN.Bedeutet also,man könnten theoretisch auch 32 Unterschiedliche Sachverhalte damit darstellen, Vorrausgesetzt jeder Sachverhalt lässt sich durch wahr/falsch darstellen.Ein kleines Beispiel.


    bool:bAdmin
    bool:bDeveloper
    bool:bFuehrerscheinA
    bool:bSpawned
    bool:bLogin


    Wenn ich jetzt weiss,dass das 1. Bit den Sachverhalt Admin abbildet, das 2. Bit den Sachverhalt Developer usw usf, kann ich mit den Bits arbeiten.
    enum e_Sachverhalte ( <<=1 ) // << Verschieb immer 1 Bit nach LINKS
    bAdmin = 1 , 0b00001
    bDeveloper, // 2 , 2.Bit 0b00010
    bFuehrerscheinA, // 4 , 3.Bit 0b00100
    bSpawned, // 8 , 4.Bit 0b01000
    bLogin // 16 , 5.Bit 0b10000
    }
    new Sachverhalt = bAdmin | bSpawned;
    // 0b01001 , für bAdmin und bSpawned
    Jetzt hab zuerst einmal einiges an Platz gespart.Es ist in einigen Fällen auch leichter damit zu arbeiten.
    Der Fuehrerschein lässt sich eigentlich gut damit abbilden.Anstatt extra FüherscheinA - F für jeden Spieler als anzulegen, kann ich auch lediglich einen Führerschein anlegen und über die Bits verwalten, welcher vorhanden ist oder nicht.


    Das komprimieren kommt auch hier vor,hab den Code schon mal gepostet.
    stock Class_CompressWeaponInfo(weaponid,ammo) {
    new
    info;
    info = ( ammo << 7 ) | weaponid;
    return info;
    }
    2 unabhängige Wert in einer Zelle.Natürlich kannst du damit auch einfache Rechenaufgaben machen.
    Rechnungen wie * 2 , * 4 , * 8 , * 16 usw sind damit auch möglich.Sollen auch schneller sein wenn man das
    direkt per Bitverschiebung macht,hab es aber nie getestet.


    Die Möglichkeiten sind wohl letztendlich Umfangreich. Vielleicht hilft dir das ja wenigstens etwas.

    Falls du die Nachricht meinst,die man beim ersten betreten des Servers bekommt durch gPM, dann schau dir gPM_OnPlayerConnect ( pawno\includes\gPM.inc ).


    if( g_iUserID[playerid] == INVALID_USERID ) {
    new
    sString[ 128+32 ];
    gPM_AddUsername( sName );
    g_iUserID[ playerid ] = gPM_GetUserID( sName );
    format( sString , sizeof( sString ) , "Hey %s, willkommen auf unserem Server. Probier doch unser neues Nachrichten-System aus. <> Diese Nachricht wurde automatisch versendet. <>" , db_escape( sName ) );
    gPM_SendMessage( 1 , g_iUserID[ playerid ] , sString );
    }

    Leider ist es so auch nicht richtig,auch wenn es wohl auf den ersten Blick klappt.
    //Edit: Klappt wohl doch. Hab da eine Zeile übersehen :P
    Nicht jede Antwort die du hier im Forum bekommst ist auch nur halbwegs richtig ... ;)
    Der Beitrag von dir mit folgendem Code war schon richtig.
    public istZIVIAuto(carid)
    {
    for(new i = 0; i < sizeof(ZIVIAuto); i++)

    {
    if(carid == ZIVIAuto[i])

    {
    return 1;

    }

    }
    return 0;
    }
    Dann kannst du einfach abfragen,ob es sich um ein ZIVIAuto handelt und danach,ob es das ZIVIAuto vom Spieler ist.


    if(istZIVIAuto(vehicleid))

    {
    if(newcar == ZIVIAuto[playerid])

    {
    SendClientMessage(playerid,GRÜN,"Das ist dein Roller!");

    }
    else if(newcar != ZIVIAuto[playerid])

    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ROT,"Besorg dir selber einen Roller am Flughafen!");

    }

    }

    Gibt Limits von GTA, die kannst du via SA:MP Scripting nicht umgehen. Jetzt ist aber nicht geklärt,ob du diese Limits meinst.


    Zitat

    \Rockstar Games\GTA San Andreas\data\maps\country\countryS.ide
    18200, w_town_11, w_town2cs_t, 200, 0


    Die 200 bedeutet, dass das Object ( ModelID 18200 ) von GTA SA erst ab einer Weite von 200 angezeigt wird. Da ist es völlig egal,ob du dem Streamer sagst,er soll doch das Objekt schon bei einer Distanz von 300 streamen / erstellen. Sehen wirst du es trotzdem erst ab einer Distanz von 200.
    Daher macht es auch wenig Sinn, Objekte bei einer viel höheren Distanz streamen zu lassen, als sie am Ende tatsächlich erst bei dir durch GTA SA sichtbar sein werden.

    new vehicleid = GetPlayerVehicleID(playerid);
    new id = GetVehicleID(vehicleid);

    Was soll das bitte bewirken ? Wie auch immer. Es gibt wohl keinen Unterschied zwischen newcar und vehicleid. Beides soll wohl das Fahrzeug darstellen,was eventuell betreten wurde. Man blickt auch nicht wirklich bei dem Code durch, rück den mal korrekt ein. Das geht sogar via folgende Webseite:
    http://boylett.com/scripts/autoindent.php


    if(vehicleid == ZIVIAuto[playerid])

    {
    if(newcar == ZIVIAuto[playerid])

    {
    SendClientMessage(playerid,GRÜN,"Das ist dein Roller!");

    }
    else if(newcar != ZIVIAuto[playerid])

    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ROT,"Besorg dir selber einen Roller am Flughafen!");

    }

    }

    Diese Abfragen machen keinen Sinn.Du fragst erst ab,ob das neue Fahrzeug der Auto des Spielers ist und danach nochmal,ob das Fahrzeug das Auto des Spielers ist oder nicht. Du müsstest eher durch alle ZIVIAuto's durchgehen und schauen,ob die Vehicleid dort irgendwo zu gehört.Sollte dies der Fall sein, dann kannst du Abfragen,ob das Auto dem Spieler gehört oder nicht.
    Ich bezweifel aber leider, dass du weisst wie das funktioniert.
    Schaffst du denn einen Ansatz ?

    Zeig mal den kompletten Code dazu bei onplayerstatechange. Vielleicht machst du es beim falschen newstate.
    Auch macht bei mir folgendes keinen Sinn,da man nicht weiss,was der Unterschied zwischen vehicleid und newcar ist.
    if(vehicleid == ZIVIAuto[playerid])
    {
    if(newcar != ZIVIAuto[playerid])


    Zitat

    Ich erstelle mit einem Command:
    ZIVIAuto[playerid] = AddStaticVehicle(462,1706.9584,1455.1781,10.4136,256.6816,166,170);


    Funktioniert das überhaupt ? AddStaticVehicle sollte nämlich nur unter OnFilterscript/GamemodeInit funktionieren.
    http://wiki.sa-mp.com/wiki/AddStaticVehicle
    Daher ersetze das auch schon mal mit CreateVehicle.

    http://pastebin.com/kKVs7xUk


    Finde nur den pastebin Link,nix mehr dazu im sa-mp.com Forum.Da gab es nämlich mal einen Thread zu. Nicht ganz genau was du möchtest,aber immerhin geht es in die Richtung größere Zahlen als 2^31-1 darzustellen.


    //Edit:

    Zitat

    Unsigned integers


    There is no such thing as unsigned integers in pawn, but im adding this just so its balanced. The only difference between a signed integer and an unsigned integer is that unsigned integers can not store negative values; Integers still wrap around, but they wrap back to 0, instead of a negative value.


    Ob es stimmt,ist eine andere Frage.
    Binary#Unsigned_integers

    MySQL Plugins zu benutzen ohne Ahnung von MySQL bzw SQL Kommandos zu haben bringt nichts.Du kommst so nicht weiter.
    Da das hier kein MySQL bzw SQL - Hilfe Forum ist,bist du hier nicht ganz richtig. Natürlich kannst du hier Fragen zur Umsetzung stellen, aber wenn du nicht mal weisst,wie man einen Wert in einer MySQL Datenbank ändert wie man einen Neuen Tabelleneintrag anlegt, bist du definitiv falsch.


    Dir einfach jeden Befehl vormachen ist auch keine Gute Idee.

    Für den Fall du hast sscanf in deinem Script,kannst du auch damit den inputtext umwandeln lassen. Dann ist es nämlich egal,ob man den Spielernamen oder die SpielerID eingibt.
    sscanf(inputtext,"u",userid);
    if(!IsPlayerConnected(userid)) { printf("Spieler / ID '%s' gibt es nicht oder ist nicht Online",inputtext); }
    // userid ist jetzt verwendbar als der eingegebene Spieler