Beiträge von Jeffry

    Dadurch, dass du es direkt in AddStaticVehicle stehen hast, musst du es mit einem switch-case machen.
    PolizeiFahrzeuge[0] = AddStaticVehicle(597,-1595.8781,693.9594,-5.4741,180.1654,198,1); // CC1
    PolizeiFahrzeuge[1] = AddStaticVehicle(597,-1600.1920,693.9489,-5.4725,179.5844,198,1); // CC2


    Hättest du es in einem Array drin stehen gehabt (als ein enum, in dem die Werte sind, und dann die Fahrzeuge durch eine Schleife erstellen), dann wäre es ohne switch gegangen.
    Was du natürlich machen kannst, du trägst alle diese Werte in ein Array ein. Das musst du entscheiden, wie du es machen willst.

    Ahh, achso.
    Werden die Sachen wie "Heroin" und "Gras" richtig geladen? Poste ggf. mal den MySQL Log vom starten des Servers.
    Möglicherweise wird der Code gar nicht aufgerufen.


    Übrigens, ändere beim Speichern:
    new query[128];
    zu:
    new query[256];


    Du bist da ganz knapp an der Grenze. Eins ist bei 118, die Werte die in die Platzhalter kommen könnten das überfüllen.

    Klar geht das. ;)


    EDIT:
    ICy.:
    Yup. :thumbup:
    Allerdings wäre es noch besser, die ganzen Variablen weg zu lassen, und es direkt so zu schreiben, dann zeigt es die Nachricht auch an, falls sie länger ist als 144 Zeichen (eben abgeschnitten). Dann macht das mit dem format auch Sinn.

    Spoiler anzeigen
    ocmd:ot(playerid,params[])
    {
    if(Spieler[playerid][Adminlevel] < 1)return SendClientMessage(playerid,GRAU,"KeinAdmin");
    new pID,string[145];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,COLOR_GREY,"Benutze: /ot [ID/Name]");
    new pname[MAX_PLAYER_NAME],save[64],DerAdmin[MAX_PLAYER_NAME];
    GetName(pID,pname,sizeof pname);
    format(save,sizeof save,"Tickets/%s.ini",pname);
    if(dini_Exists(save))
    {
    GetName(playerid,DerAdmin,sizeof DerAdmin);
    format(string,sizeof string,"%s schrieb folgende Supportnachricht:",pname);
    SendClientMessage(playerid,COLOR_YELLOW,string);
    format(string, sizeof(string), dini_Get(save,"Suptext"));
    SendClientMessage(playerid,gold,string);
    format(string, sizeof(string), dini_Get(save,"Suptext2"));
    SendClientMessage(playerid,gold,string);
    format(string, sizeof(string), dini_Get(save,"Suptext3"));
    SendClientMessage(playerid,gold,string);
    format(string,sizeof string,"Du kannst per /do [ID] antworten (Spieler %s)",pname);
    SendClientMessage(pID,COLOR_YELLOW,string);
    format(string,sizeof string,"%s hat dein Support Ticket geöffnet. Du kannst nun per /sup direkt mit ihm schreiben!",DerAdmin);
    SendClientMessage(pID,gold,string);
    format(string,sizeof string,"[ SUPPORT ] %s hat das Ticket von %s geöffnet!",DerAdmin,pname);
    SendAdminMessage(COLOR_YELLOW,string);
    DeinSupport[pID] = playerid;
    TicketAngenommen[pID] = 1;
    }
    return 1;
    }

    Kommt darauf an, wie du deine Autos zur Zeit erstellst. Wenn du die aber alle Übertragen haben willst, dann musst du es so machen ja, für jedes Fahrzeug einen case.


    Übrigens, ich sehe du fängst bei den Fahrzeugen bei 1 an zu zählen:
    for(new i=1; i < MAX_VEHICLES; i++)
    Fange da bei 0 an, da es sonst zu Fehlern kommen kann. Bei den Kassen ist dies ja anders, da Fraktion 0 = Zivilist ist.


    for(new i = 0; i < MAX_VEHICLES; i++)


    Dein SaveVehicles passt, soweit ich das überblicken kann.


    Poste mal, wie du die Fahrzeuge momentan (altes System) erstellst, dann schau ich mir das mal an, vielleicht lässt sich das schnell er und einfacher lösen.

    Prinzipiell machbar: Ja, natürlich! ;)


    Wie musst du vorgehen?
    Ich schreibe dir jetzt ein paar Stichpunkte auf, an denen du dich entlang hangeln kannst, das ist nicht alles was du gefragt hast, aber ich denke wenn du das erst mal gemacht hast, dann bist du ziemlich weit gekommen und weißt dann vielleicht auch schon selbst, wie du den Rest machst, bzw. kannst es von alleine gleich machen, ohne nachzudenken. Wenn nicht, dann gehen wir darauf danach ein, aber das Folgende ist sicherlich erst mal genug Arbeit. Wenn zwischendurch oder zum Ende hin Fragen auftreten, einfach nachfragen.


    1) Erstelle eine Tabelle "autos" in der du deine aufgezählten Daten als Spalten anlegst.
    2) Erstelle in deinem Code ein enum mit diesen Daten und die Variable, bzw. das enum, dazu.
    3) Erstelle eine Lade- und Speicherfunktion wie bei deinen Kassen, das Prinzip ist im Endeffekt das gleiche. Daten auslesen und Daten einlesen. Musst eben die Variablen und die Namen anpassen.
    4) Beim Laden erstellst du die Fahrzeuge dann (CreateVehicle).
    5) Bei OnPlayerEnterVehicle kannst du dann abfragen, in welches Fahrzeug der Spieler einsteigt, indem du eine Schleife durch deine Fahrzeuge machst, zum Beispiel so:
    for(new i=0; i<MAX_FRAKCARS; i++)
    {
    if(vehicleid == frakCar[i][vehID])
    {
    //Spieler versucht in das Fraktionsfahrzeug mit der Index ID "i" einzusteigen.
    if(frakCar[i][allowedFrak] == SpielerInfo[playerid][Fraktion])
    {
    //Darf rein
    }
    else
    {
    //Darf nicht rein.
    TogglePlayerControllable(playerid, false);
    TogglePlayerControllable(playerid, true);
    }
    break;
    }
    }


    Das wichtigste um herauszufinden in welchem Index du arbeitest ist eben die Schleife. Auch wenn du das Fahrzeug abschleppen willst, oder so. Wenn du wissen willst, welches Fraktionsfahrzeug es ist, dann immer diese Schleife verwenden:
    for(new i=0; i<MAX_FRAKCARS; i++)
    {
    if(vehicleid == frakCar[i][vehID])
    {
    //Fahrzeug ist das frakCar "i".
    break; //Den break setzen wir, weil es ja nicht noch ein Fahrzeug mit derselben ID geben kann, daher muss die Schleife nicht weiterlaufen.
    }
    }


    Ansonsten kannst du eigentlich wie bei deinen Kassen vorgehen.


    Du musst dir nur überlegen wie du die Fahrzeuge in die Datenbank eintragen lassen willst. Da gibt es zwei Möglichkeiten:
    - Entweder du trägst es manuell ein, über dein NaviCat,
    - oder du erstellst dir einen Code wie bei dem Laden der Kassen, mit dem du prüfst ob das Fahrzeug schon in der Datenbank steht (gleiches Prinzip) und wenn nicht (ebenfalls gleiches Prinzip) dann erstellst du das Fahrzeug über den switch (wie bei den Kassen) und gibst dort die Werte an. Danach rufst du (wie bei den Kassen) das SaveFrakCars auf, falls ein neues Fahrzeug dazu kam.


    Wie du siehst, kannst du dich prinzipiell an den Kassen orientieren, da vieles gleich bzw. ähnlich ist. Natülich musst du etwas Zeit für dieses System einplanen, da es nicht in 5 Minuten geschrieben ist, aber ich denke, dessen bist du dir bewusst.

    Du überschreitest wahrscheinlich das Limit von 144 Zeichen.


    SendClientMessage(playerid, COLOR_YELLOW, "[ SUPPORT ] Du hast ein Ticket mit folgendem Text geöffnet:");
    format(string, sizeof(string), "%s", text);

    Zu
    SendClientMessage(playerid, COLOR_YELLOW, "[ SUPPORT ] Du hast ein Ticket mit folgendem Text geöffnet:");
    format(string, 145, text);

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    new query[256], key[50];
    if(dialogid == DIALOG_REGISTER)
    {
    if(!response) return Kick(playerid);
    if(strlen(inputtext) < 6 || strlen(inputtext) > 12)
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", "{FFFFFF}Willkommen auf \n\nEs wurde kein Account unter diesem Namen gefunden, gib dein Passwort niemals weiter.\nAuch nicht an Supporter, Du kannst dich nun Registrieren.\nBitte gib nun dein Passwort ein:", "Register", "Abbrechen");
    SendClientMessage(playerid, Grau, "Dein Passwort ist zu kurz oder zu lang (mind 6 zeichen & max 12 Zeichen!");
    return 1;
    }
    format(key, 50, "%s", inputtext);
    mysql_escape_string(Spielername(playerid), query);
    mysql_escape_string(key, key);
    format(query, sizeof(query), "INSERT INTO Spieler (Name, Passwort) VALUES ('%s',MD5('%s'))", query, key);
    mysql_tquery(Handle, query);
    SendClientMessage(playerid, -1, "Dein Account wurde erstellt.");
    GivePlayerMoney(playerid, 50000),
    SetPlayerScore(playerid, 10);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    if(!response) return Kick(playerid);
    format(key, 50, "%s", inputtext);
    mysql_escape_string(Spielername(playerid), query);
    mysql_escape_string(key, key);
    format(query, sizeof(query), "SELECT * FROM Spieler WHERE Name = '%s' AND password = '%s'", query, key);
    mysql_tquery(Handle, query, "OnPasswordResponse", "i", playerid);
    return 1;
    }
    return 1;
    }


    Wenn es so auch nicht geht, poste bitte den MySQL Log der kommt, wenn du dich registrieren willst.

    Hast du das beim erstellen auch so geschrieben?
    AdminObjects[CreateObject(...)][AObjectID];
    (Beachte, dass das CreateObject in der Klammer steht!)


    Wenn ja, dann poste bitte den Code, wie du in jetzt hast, also alle Teile die hier besprochen worden sind, und erkläre nochmal kurz und knapp, was du eingibst.

    Gewöhne dir bitte an, bei MySQL Problemen immer den Log mitzuposten.
    format(query, sizeof(query), "INSERT INTO (Name, Passwort) VALUES ('%s',MD5('%s')", Spielername(playerid), key);
    zu:
    format(query, sizeof(query), "INSERT INTO Spieler (Name, Passwort) VALUES ('%s',MD5('%s'))", Spielername(playerid), key);

    Erstellst du mit der gleichen Spieler ID mehrere Objekte?
    Wenn ja, dann musst du alle entsprechenden [playerid]'s zu [objectid] ändern. Und beim Erstellen:
    AdminObjects[CreateObject(...)][AObjectID];


    Und den Befehl zu:
    if(strcmp("/objects", cmd, true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 3)
    {
    SendClientMessage(playerid, COLOR_YELLOW, "Objecte:");
    for(new i = 0; i < sizeof(AdminObjects); i++)
    {
    if(AdminObjects[i][AObjectID] != -1)
    {
    format(string, sizeof(string), "ID %d, X %f, Y %f, Z %f", AdminObjects[i][AObjectID], AdminObjects[i][AObjectX], AdminObjects[i][AObjectY], AdminObjects[i][AObjectZ]);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    }
    }
    }
    }
    return 1;
    }