In arrys ein string speichern

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,
    ich versage schon seit tagen dabei, in einer Arry einen String zu speichern.
    So sieht die Arry aus:
    enum langeArrys
    {
    nummer[32]
    }


    new Schild[MAX_PLAYERS][2000][langeArrys];
    und so sollte der String gespeichert werden:
    for(new i=1;i<=2000,i++;)
    {
    format(datei,50,"car%d",i);
    format(Schild[playerid][i][nummer],32,dini_Get(accFormat,datei));
    time=i*0.05;
    format(datei,50,"%.2f Prozent Fertig",Float:time);
    printf("Schild: %s",Schild[playerid][i][nummer]);
    SendClientMessage(playerid,0xFFFFFFFF,datei);
    }
    Aber beim Laden wird immer eine 0 geprintet.
    Was mach ich falsch und wie definier ich die Arry ohne enum?

  • Ich hab mal iim Wiki geschaut, da stand zwar auch nicht viel Hilfreiches aber so wie es nun im Scritp steht hat der compiler kein Error ich teste mal.
    Was ich reinschreiben will. . .
    In die arry will ich das reinschreiben was in der dini unter carid[i] steht
    //EDIT:Also nun steht in der arry garnichts mehr, der compiler printet nichtmal eine 0
    habs so im script
    strmid(Schild[playerid][i][nummer],dini_Get(accFormat,datei),0,strlen(dini_Get(accFormat,datei)));

  • Sicher das der DateiPfad stimmt?
    Immerhin sagst du:
    dini_get(Cardateipfad(die vllt mit nummer ist also einzigartig?),datei was "carZAHL" entspricht)


    Das bedeutet du hast laut meiner Auffassung
    Eine Ordner mit vielen Dateien die alle einzigartig für ein Fahrzeug stehen und in jeder datei steht nochmal ein schlüssel der einzigartig nummeriert ist.
    Das ist doppelt gemoppelt und unnötig. Glaube da muss du nochmal dran schrauben

  • Ich habe es so, dass jeder spieler in seiner Datei 2000 Numemrnschilder hat.
    Damit bei befehlen nicht immer die dini geöffnet wird, wird das alles am anfang in der arry mit 2000 elementen pro spieler gespeichert.
    In dem befehlen werd ich dann abfragen ob eines der strngs in den Arrys mit einem anderen üßberein stimmt, das funktionirt soweit.
    Aber das laden funktionirt nicht so wie es soll.
    die Nummernschilder in der spielerdatei sehen so aus
    Car1=etwas
    Car2=nochwas
    Car3=wasanderes
    [...]
    Car2000=1234abcd


    und das soll alles in der arry stehen, für jeden eintrag in ein neues arryelement abspeichern

  • Dann tu das doch, so wie du es geschrieben hast:
    strmid(Schild[playerid][i][nummer],dini_Get(accFormat,datei),0,strlen(dini_Get(accFormat,datei)));
    Ist korrekt. Eigentlich... aber er kann das Schild nicht aus der Datei lesen, also stimmt etwas mit den 2 Variablen
    AccFormat und datei nicht, er kann den wert nicht finden, da musste jez nachschauen woran es liegt

  • Also eigentlich stimmen beide Werte
    format(accFormat,sizeof accFormat,"Spieler/%s.datei",pname);
    und in dem accFormat steht
    car1=lol
    d.h. es müste lol geprintet werden
    //EDIT:Haxler ich bin auch deiner meinung das die Schleife falsch ist, aber wenn ich es richtig machen will, vermisst der compiler das;
    C:\Scripting\samp server\The Sims RPG\samp03csvr_R2-2_win32\gamemodes\amx.pwn(611) : error 001: expected token: ";", but found ")"
    zeile 611 = die schleife

    Einmal editiert, zuletzt von carlos1710 ()

  • if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0) // Passwort Direkt aus der Datei Laden
    {
    Spieler[playerid][geld] = dini_Int(accFormat,"geld");
    Spieler[playerid][skin] = dini_Int(accFormat,"skin");
    Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
    Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
    Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
    Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt
    new datei[50];
    for(new i=1;i<=2000,i++)// beginn der Schleife
    {
    dass ist vor der schleife

  • Alsoo:
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    new Float:time;
    new pname[MAX_PLAYERS],accFormat[128],acccFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"Spieler/%s.datei",pname);
    format(acccFormat,sizeof accFormat,"Unregistriert/%s.datei",pname);
    switch(dialogid) // dialogid auswählen
    {
    case DIALOG_LOGIN: // ID Login
    {
    if(response)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast kein Passwort angegeben und wurdest gekickt!");
    Kick(playerid);
    return 1;
    }
    if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0) // Passwort Direkt aus der Datei Laden
    {
    Spieler[playerid][geld] = dini_Int(accFormat,"geld");
    Spieler[playerid][skin] = dini_Int(accFormat,"skin");
    Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
    Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
    Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
    Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt
    new datei[50];
    for(new i=1;i<=2000,i++)// ezile 611
    {
    format(datei,50,"car%d",i);
    strmid(Schild[playerid][i][nummer],dini_Get(accFormat,datei),0,strlen(dini_Get(accFormat,datei)));
    time=i*0.05;
    format(datei,50,"%.2f Prozent Fertig",Float:time);
    printf("Schild: %s",Schild[playerid][i][nummer]);
    SendClientMessage(playerid,0xFFFFFFFF,datei);
    }
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch und du wurdest gekickt!");
    Kick(playerid);
    }
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast abgebrochen und wurdest gekickt!");
    SendClientMessage(playerid,0xFFFFFFFF,"Du must dich einloggen um spielen zu können!");
    Kick(playerid);
    return 1;
    }
    }
    case DIALOG_REG: // ID Registrieren
    Das ist das ganze loginsystem
    glaub von blackfox erweitert
    Wenn alles funktionirt sollte in allen 2000 arryelementen ein string oder eine 0 stehen, jenachdem was hinter car[i] steht.
    Funktionirt nicht stadessen meldet der compiler den error
    C:\Scripting\samp server\The Sims RPG\samp03csvr_R2-2_win32\gamemodes\amx.pwn(611) : error 001: expected token: ";", but found ")"
    zeile 611 = die schleife
    Der error kommt weil ich das ";" wie Haxler sagte wegnahm (davor gigs udn die schleife lief durch)
    Nun hab ich die arrys printen lassen und sie sind alle leer keine 0 und kein nummernschild stehen drinne

  • Du machst immer den gleichen Fehler. Guck dir meine Schleife nochmal genau an und vergleich sie mit deiner...
    edit:

    Zitat

    (davor gigs udn die schleife lief durch)


    du weißt aber schon dass es davor ne Endlosschleife war? Ich glaub du hast noch nicht ganz verstanden wie man eine for-Schleife verwendet o.o

  • shit ja grad seh ichs ok mal ändern und testen
    //EDIT:So er error ist behoben, aber der string istz immernoch leer
    //EDIT2:Nun funktionirt alles hab noch 2 variabeln verändert, aber nun sagt mir der server bei einem cmd ,Das er ihn nicht kenne,
    Hier ein ausschnitt davon
    else//Sscanf hat alle Daten bekommen
    {
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"Spieler/%s.datei",pname);
    for(new i=1;i<=2000;i++)
    {
    if(strcmp(nummernschild,Schild[playerid][i][nummer]) == 0)//wenn diese Abfrage positiv ist, funktionirt alles wie es soll.Wenn sie aber nicht übereinstimmt sagt der server Unknown Command anstatt das was unten steht.
    {
    new datei[50];
    format(datei,50,"car%d",i);
    dini_Set(accFormat,datei,"0");
    for(i=1;i<=2000;i++)
    {
    if(strcmp("0",Schild[playerid][i][nummer]) == 0)
    {
    new str[256];
    format(str,256,"Du hast von %s die Schlüssel für das Auto mit dem Kennzeichen %s bekommen",pname,nummernschild);
    SendClientMessage(pID,COLOR_BLUE,str);
    GetPlayerName(pID,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"Spieler/%s.datei",pname);
    format(datei,50,"car%d",i);
    dini_Set(accFormat,datei,nummernschild);
    format(str,256,"Du hast %s die Schlüssel für das Auto mit dem Kennzeichen %s gegeben",pname,nummernschild);
    SendClientMessage(playerid,COLOR_BLUE,str);
    return 1;
    }
    }
    }
    }
    return SendClientMessage(playerid,COLOR_RED,"Du hast kein Auto mit diesem Numemrnschild!");
    }
    }
    return 1;
    }

    2 Mal editiert, zuletzt von carlos1710 ()