Problem mit den Auslesen eines Strings!

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
  • Hey Leute, ich bin momentan an meinem Nummernschildsystem! Habe nur ein Problem. Wenn ich den string auslesen lasse steht auf dem Nummernschild nur {} mehr nicht eig sollte es so aussehen {farbe}TEXT


    Farbe ist dann logischerweiße nichtmehr sichtbar, sondern der Text nimmt die Farbe dann an.
    Ich glaube ich muss mit strcmp arbeiten ich versteh das aber nicht so wirklich wäre nett wenn ihr mir helfen würdet!


    PlayerCar[playerid][Slot][CarId] = CreateVehicle(PlayerCar[playerid][Slot][CarModel],PlayerCar[playerid][Slot][CarPos_x],PlayerCar[playerid][Slot][CarPos_y],PlayerCar[playerid][Slot][CarPos_z],PlayerCar[playerid][Slot][CarRotate],PlayerCar[playerid][Slot][CarC1],PlayerCar[playerid][Slot][CarC2], 60000);/*vehicle spawn*/
    new nummernschild[8];
    format(nummernschild, sizeof(nummernschild), "%s", PlayerCar[playerid][Slot][CarNummernschild]);
    new nummernschildfarbe[5];
    format(nummernschildfarbe, sizeof(nummernschildfarbe), "%s",PlayerCar[playerid][Slot][CarNummernschildFarbe]);
    new nummernschildtext[26];
    format(nummernschildtext, sizeof(nummernschildtext), "{%d}%d",PlayerCar[playerid][Slot][CarNummernschildFarbe], PlayerCar[playerid][Slot][CarNummernschild]);
    SetVehicleNumberPlate(PlayerCar[playerid][Slot][CarId],"{FF0000}EW-1996");
    SetVehicleToRespawn(PlayerCar[playerid][Slot][CarId]);

  • Sry falscher version vom code hatte da was getestet!


    So hab ichs normal gemacht und wo bitte wird der string als vehicleid gesetzt??


    PlayerCar[playerid][Slot][CarId] = CreateVehicle(PlayerCar[playerid][Slot][CarModel],PlayerCar[playerid][Slot][CarPos_x],PlayerCar[playerid][Slot][CarPos_y],PlayerCar[playerid][Slot][CarPos_z],PlayerCar[playerid][Slot][CarRotate],PlayerCar[playerid][Slot][CarC1],PlayerCar[playerid][Slot][CarC2], 60000);/*vehicle spawn*/
    new nummernschild[8];
    format(nummernschild, sizeof(nummernschild), "%s", PlayerCar[playerid][Slot][CarNummernschild]);
    new nummernschildfarbe[5];
    format(nummernschildfarbe, sizeof(nummernschildfarbe), "%s",PlayerCar[playerid][Slot][CarNummernschildFarbe]);
    new nummernschildtext[26];
    format(nummernschildtext, sizeof(nummernschildtext), "{%s}%s",nummernschildfarbe,nummernschild);
    SetVehicleNumberPlate(PlayerCar[playerid][Slot][CarId],nummernschildtext);
    SetVehicleToRespawn(PlayerCar[playerid][Slot][CarId]);

  • Also habs nochmal mit %d getestet dann kommt das {0}0 wenn mans mit %s macht kommt nur das {} eigentlich sollte da stehen in rot EW-1996


    Kann es vllt auch an dieser Zeile liegen, in der das Nummerschild und die Farbe ausgelesen werden??



    if( strcmp( key , "CarNummernschildFarbe" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerCar[playerid][x][CarNummernschildFarbe] = strval( val ); }
    if( strcmp( key , "CarNummernschild" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerCar[playerid][x][CarNummernschild] = strval( val ); }


    2 Mal editiert, zuletzt von Erich96 ()

  • Ich will dich ja ned enttäuschen, aber PAWN unterstützt maximal nur 3 dimensionale-Arrays, daher kann folgendes nicht stimmen.


    format(nummernschildfarbe, sizeof(nummernschildfarbe), "%s",PlayerCar[playerid][Slot][CarNummernschildFarbe]);


    Da ja sonst die Variable letztendlich so wäre (kann Abweichend von Nutzung einer enum-Struktur sein:


    PlayerCar[MAX_PLAYERS][MAX_CAR_SLOTS][500][MAX_NUMMERNSCHILD_FARBE];
    Man bedenke, dass ich die Definitionen MAX_CAR_SLOTS und MAX_NUMMERNSCHILD_FARBE (obwohl diese eigentlich klarerweise eh 10 wäre) und die Zahl 500, welche sozusagen eine enum-Struktur "nachstellt" ^^ frei erfunden sind.


    Aber hey, du bist einer der glücklichen bei denen man es "leicht" umgehen kann, anstatt wieder ein Ram-Saugendes Array zu erstellen :p


    Lösche im enum bei CarNummernschildFarbe das []-Array, damit du es als Integer behandelst und beachte natürlich im Rest vom Script, dass du die Variable tatsächlich als Integer verwendest.


    Dann kannst du beim setzen der Farbe mithilfe von HexToInt die Variable setzen und per IntToHex umwandeln in einen Hex-Code. Du wirst natürlich auch keine Probleme haben, sofern du auch bei der Abfrage beim setzen überprüfst, ob Spieler eine 24 Bit Farbe angibt und keine 32Bit, da sonst du das Limit von PAWNs 32Bit-Integer Limit brichst.


    32Bit Farben sind nämlich bei Textnachrichten unnötig, da diese keine Transparenz haben (laut meines Wissenstandarts, außer es sich seit 0.3a geändert hat.)


    //Edit: Nur mal so ne Frage, hast du in deiner enum-Struktur für PlayerCar weitere enum-Variablen, jene Arrays besitzen? Mich wunderts nämlich, dass PAWN es überhaupt kompiliert hat.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

    Einmal editiert, zuletzt von Templer ()

  • Danke, sehr nett das du dir die Mühe gemacht hast mir es so datailliert zu beschreiben! Ich verstehe das Problem jetzt auch, komme jedoch mit hextoint und inttohex nicht richtig klar könntest du es mir an dem Beispiel hier zeigen?


    new farbe =000000;
    SendClientMessage(playerid, COLOR_GREEN, "Dein Nummernschild ist jetzt schwarz, bis du dir eine neue Farbe kaufst!");
    PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarNummernschildFarbe] = farbe;


    Da müsste ich doch dann hextoint verwenden, aber wie?


    //EDIT: Zu deiner Frage, nein bisher habe ich in dem enum nur mit integer Werten gearbeitet und bin desshalb jetzt echt überfordert! Sowas wie neons... Das ist kein Problem für mich aber ich kenne mich mit strings.. nicht aus desshalb komme ich hier auch nicht weiter!

  • PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarNummernschildFarbe] = HexToInt(farbe);


    Natürlich nur, wenn das return von HexToInt einen Integer zurückweist.


    Sollte es einen String zurückweißen, so bitte die Funktion 'HexToInt' posten.


    //EDIT: Und natürlich auch beachten, dass die Variable 'farbe' ein String sein sollte ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • So hier einmal überarbeitet!


    new farbe[7] ="000000";
    SendClientMessage(playerid, COLOR_GREEN, "Dein Nummernschild ist jetzt schwarz, bis du dir eine neue Farbe kaufst!");
    PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarNummernschildFarbe] = HexToInt(farbe);
    Und einmal HexToInt


    stock HexToInt(string[])
    {
    if (string[0] == 0)
    {
    return 0;
    }
    new i;
    new cur = 1;
    new res = 0;
    for (i = strlen(string); i > 0; i--)
    {
    if (string[i-1] < 58)
    {
    res = res + cur * (string[i - 1] - 48);
    }
    else
    {
    res = res + cur * (string[i-1] - 65 + 10);
    cur = cur * 16;
    }
    }
    return res;
    }


    Ich finde allerdings nirgendwo den stock InToHex, hast du den grade zufällig irgendwo?


    //EDIT: Also lässt sich soweit schonmal compilen keine Errors oder Warnings! :)

  • Hier bitte http://forum.sa-mp.com/showthread.php?t=218179.


    Ein tolles Universal-Code-sparendes-hyper-end Stock ^^


    Nebenbei find ich es klasse, dass du einer von den einzig besonderen bist, die wirklich Kompetenz in Programmieren zeigen :p

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Danke sehr nett von dir,
    Ja ich bemühe mich aber da kam ich echt ins Grübeln! :D
    Und dir muss ich ein Lob aussprechen das du super erklären kannst und ich es toll finde das du nicht einfach nur eine Antwort in den Thread schreibst und dann nicht nochmal schaust ob noch Fragen offen sind! Finde ich lobenswert!

  • Ja ne is klar, entweder wir loben uns weiterhin, oder machen dat Ding fertisch ^^


    Nur ein kleiner Ansatz, um die Variable auszulesen und umzuwandeln in Hex (ich weiß leider grad ned ob es notwendig is, aber schaden tut es ned), dann machst du folgendes:


    format(nummernschildtext, sizeof(nummernschildtext), "{%s}%s",IntToHex(PlayerCar[playerid][Slot][CarNummernschildFarbe]),nummernschild);


    oder


    format(nummernschildtext, sizeof(nummernschildtext), "{%x}%s",PlayerCar[playerid][Slot][CarNummernschildFarbe],nummernschild);


    Wobei ich beim zweiteren eher schmunzle, ob das PAWN auch richtig umwandelt, wie die Funktion IntToHex. Irgendeinen Grund muss es ja geben, dass die Funktion IntToHex gibt und keiner den Platzhalter %x verwendet xD

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • new nummernschild[8];
    format(nummernschild, sizeof(nummernschild), "%s", PlayerCar[playerid][Slot][CarNummernschild]);
    new nummernschildtext[26];
    format(nummernschildtext, sizeof(nummernschildtext), "{%s}%s",IntToHex(PlayerCar[playerid][Slot][CarNummernschildFarbe]),nummernschild);
    SetVehicleNumberPlate(PlayerCar[playerid][Slot][CarId],nummernschildtext);
    SetVehicleToRespawn(PlayerCar[playerid][Slot][CarId]);


    So sieht das ganze jetzt aus! Es klappt aber irgendwie immernoch nicht und mir fällt keine Fehler auf! Compilen geht auch Fehlerfrei!


    //EDIT Es steht einfach {} auf dem Nummernschild!

  • format(nummernschildtext, sizeof(nummernschildtext), "{0x%s}%s",IntToHex(PlayerCar[playerid][Slot][CarNummernschildFarbe]),nummernschild);


    Probieren geht über studieren ^^ Ansonsten nutze mal bei meinem letzten Beitrag als 3. Variante den Platzhalter %x!

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Also wenn ich %x nehme steht da {0} wenn ich 0x%s nehme steht da {0x} und wenn ich %.3f nehme dann steht da
    {0.000} ... :D maaaan iwie muss es doch gehen! :D


    //EDIT Hier nochmal alle, wirklich alles wo iwas mim Nummernschild gemacht wird!


    Beim Spawnen des cars!


    new nummernschild[8];
    format(nummernschild, sizeof(nummernschild), "%s", PlayerCar[playerid][Slot][CarNummernschild]);
    new nummernschildtext[26];
    format(nummernschildtext, sizeof(nummernschildtext), "{%s}%s",IntToHex(PlayerCar[playerid][Slot][CarNummernschildFarbe]),nummernschild);
    SetVehicleNumberPlate(PlayerCar[playerid][Slot][CarId],nummernschildtext);
    SetVehicleToRespawn(PlayerCar[playerid][Slot][CarId]);


    Im enum


    CarNummernschildFarbe,
    CarNummernschild[8],


    new farbe[7] ="000000";
    SendClientMessage(playerid, COLOR_GREEN, "Dein Nummernschild ist jetzt schwarz, bis du dir eine neue Farbe kaufst!");
    PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarNummernschildFarbe] = HexToInt(farbe);


    Festlegung standart Nummernschildfarbe + Nummernschild


    format(var, 32, "CarNummernschild=0\n");fwrite(hFile, var);
    format(var, 32, "CarNummernschildFarbe=000000\n");fwrite(hFile, var);


    Laden des files!


    if( strcmp( key , "CarNummernschildFarbe" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerCar[playerid][x][CarNummernschildFarbe] = strval( val ); }
    if( strcmp( key , "CarNummernschild" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerCar[playerid][x][CarNummernschild] = strval( val ); }


    Abspeichern unter onplayercarupdate!


    format(var, 32, "CarNummernschild=%s\n",PlayerCar[playerid][x][CarNummernschild]);fwrite(hFile, var);
    format(var, 32, "CarNummernschildFarbe=%s\n",PlayerCar[playerid][x][CarNummernschildFarbe]);fwrite(hFile, var);


    DAS IST ALLES :D


    Einmal editiert, zuletzt von Erich96 ()

  • Ich möchte hier an der Stelle kurz ein Zitat von jemanden nochmals erwähnen, ohne den Namen zu nennen. Der betroffene weiß schon, worums geht ^^


    *** sagt: %x wird richtig umgewandelt^^




    und nun heißt es bei ihm, dass es früher funktioniert hätte. Jaja ^^


    -------


    Also ich würde mal per printf paar Debug Nachrichten machen, in dem Fall:


    new color = PlayerCar[playerid][Slot][CarNummernschildFarbe];printf("ColorID: %| HexColor: %x | HexConverted: %s", color, color, HexToInt(color));


    EDIT: Sry wegen der blöden Formatierung, aber ich denke es schadet ned, oder? ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • printf("ColorID: %d| HexColor: %x | HexConverted: %s", color, color, HexToInt(color));


    Bitte nächstes mal auch gucken, wat fürn Schwachsinn ich poste. Danke ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!