Beiträge von Jeffry

    Gut, die Spalten haben sich ja geändert, sprich das musst du anpassen.


    So:
    stock LoadKassen()
    {
    fraktionskasse[Grove] = mysql_GetInt("kassen", "Geld", "Name", "Grove");
    }

    Mit dem Query sollte es klappen:


    SQL
    DROP TABLE IF EXISTS `kassen`;
    CREATE TABLE `kassen` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `Name` varchar(24) NOT NULL,
        `Geld` int(11) NOT NULL DEFAULT '0',
        PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
    INSERT INTO `kassen` (`Name`) VALUES ('Grove'), ('Ballas'), ('Russen'), ('Vagos'), ('Rifa'), ('Yakuza'), ('Triaden'), ('LCN'), ('Staats');


    Dann hättest du für jede Fraktion eine Zeile, das macht dich später flexibler, wenn du etwas hinzufügen willst.

    Die Zeile 30 in der ocmd Include hat ganz sicher was mit ocmd zu tun. ;) Nicht Zeile 30 in deinem Gamemode, Zeile 30 in der ocmd.inc.
    Poste das mal.


    Nutzt du nebenher, außer strcmp und ocmd, noch andere Command Prozessoren (dcmd, zcmd, ycmd,...)?

    Ja, das. Gut, du hast die Tabelle falsch aufgebaut. So macht man das nicht. Erstelle drei Spalten:


    ID (auto Increment)
    Name
    Geld


    Dann kannst du für jede Fraktion eine Zeile erstellen, dort wird dann der Name eingetragen. Und dann kannst du über den Namen der Fraktion auf die Kasse (Geld) zugreifen. Sonst müsstest du ja für jede Fraktion DIE Datenbank Struktur ändern, und das macht man nicht.



    mysql_SetInt("kassen", "Geld", fraktionskasse[Grove], "Name", FraktionsName);

    Zitat

    C:\Users\PC\Desktop\Samp Server\pawno\include\ocmd.inc:30


    Was steht denn in Zeile 30 der ocmd Include?
    Nutzt du die aktuellste ocmd Version?
    Hast du irgendwelche Meldungen im Compiler?

    Anstatt
    SpielerName(playerid)
    Musst du dann den Name der Fraktion hinsetzen. Dann kannst du es nach dem gleichen Prinzip machen.

    Danke ^^


    1.)
    if(strcmp(cmd, "/destroycars", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(Spieler[playerid][Admin] < 4)
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Dir ist es nicht erlaubt, diesen Befehl zu benutzen!");
    return 1;
    }
    new carsDestroyed;
    for(new i = 0; i < sizeof(CreatedCars); i++)
    {
    if(CreatedCars[i] != 0)
    {
    DestroyVehicle(CreatedCars[i]);
    carsDestroyed++;
    }
    }
    new str[145];
    if(carsDestroyed > 0) format(string, sizeof(string), "Es wurden %d erschaffene Fahrzeuge zerstört!", carsDestroyed);
    else format(string, sizeof(string), "Es wurden keine zu zerstörenden Fahrzeuge gefunden!");
    SendClientMessage(playerid, COLOR_GREY, string);
    }
    return 1;
    }


    2.)
    if(GetVehicleModel(vID) == 0)return SendClientMessage(playerid, COLOR_GRAD2, "Dieses Fahrzeug gibt es nicht.");





    Edit:
    kreetkev: Gerne, kein Problem! Ja, so machst! :)

    stock GetPlayerSex(playerid) //Im englischen heißt es halt so ;)
    {
    new sex[16];
    switch(sInfo[playerid][pGeschlecht])
    {
    case 1: sex = "Männlich";
    case 2: sex = "Weiblich";
    default: sex = "Unbekannt";
    }
    return sex;
    }


    In einer Nachricht kannst du das dann so ausgeben:
    format(string, sizeof(string), "Mein Geschlecht ist %s!", GetPlayerSex(playerid));

    Die Schleife muss auf jeden Fall so sein:
    for(new i = 0; i < sizeof(CreatedCars); i++)
    {
    if(CreatedCars[i] != 0)
    {
    DestroyVehicle(CreatedCars[i]);
    }
    }


    Sonst löschst du ja die Fahrzeuge 1 - 99, die sind aber keine CreatedCars.
    Geht dann der Rest auch richtig?

    Ich verstehe nicht was du meinst, mit "Genau wie vorher stimmt kurz nach der Abfrage der Wert noch, aber wie durch Zauberhand ist er später geändert.".


    Woran siehst du, dass der Wert geändert ist? Ich sehe in dem Log nämlich nichts.
    Umd stimmen die prints eigentlich?



    EDIT:
    Oskaar1994:

    Zitat

    Frage mich trotzdem wieso dann die ModelID geändert wurde (obwohl die nichtmal betroffen war), aber alle anderen Werte gleich geblieben sind


    Das liegt daran, weil die Werte in einem Array alle hintereinander stehen (anschaulich gesagt). Wenn du in einen Integer einen String rein packst, dann ist das natürlich zu viel, somit werden die Teile dahinter auf entsprechender Länge überschrieben.


    Sehr gut, dass du den Fehler selbst entdeckt hast. :thumbup:

    Gerne, dafür bin ich ja da :)


    Nein, das kannst du nicht, außer du erstellst 500 Dummy-Cars, aber das macht ja keinen Sinn.
    Es wäre gut, wenn du Schritt für Schritt erklärst was du machst, welche Codes ausgeführt werden (dazu posten) und dann jeweils beschreibst, ab wann etwas falsch ist, also den falschen Wert hat. So genau wie möglich bitte.

    Dann ist der Vorschlag von Kaliber falsch. Das wird nur funktionieren, wenn der Spieler der die ID 0 hat auch ein Admin ist.
    Generell ist es auch schlecht das so zu schreiben, besser wäre es, das ganze über eine Funktion zu machen.


    Sprich, du nimmst den Code (außer die Admin-Abfrage) aus dem Befehl und fügst ihn in eine Funktion ein:
    forward DeleteAllCars();
    public DeleteAllCars()
    {
    //Hier hin.
    return 1;
    }


    An die Stelle des entfernten Codes im Befehl schreibst du:
    DeleteAllCars();


    Und den Timer startest du bei OnGameModeInit so:
    SetTimer("DestroyAllCars",30000,false);

    Es können nicht zwei Fahrzeuge mit der ID 1 existieren. :wacko:
    Wenn du ein Fahrzeug löschst, dann musst du auch dessen Kilometerstand auf 0 setzen, es existiert ja dann nicht mehr.


    Kann dein "/destroycars" Befehl von allen Spielern oder nur von Admins ausgeführt werden?