Farb String zu HEX Farbe (ARGB Format)

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
  • Heya,
    hänge seit knapp 2 Tagen an einem problem, ich versuchs einfach mal kurz zu fassen in der Hoffnung das mir vielleicht doch irgend einer helfen kann.


    Ich versuche ein bisschen mit SetObjectMaterialText herum und bin derzeitig dabei das InGame erstellen solch "Fliegender Texte" zu ermöglichen. Das problem ist nun das SetObjectMaterialText eine Text Farb Angabe im ARGB Format benötigt, funktionieren tut es nur wenn ich schon vordefinierte Farben in der Funktion direkt angebe (Sprich jeder Text hat die Farbe COLOUR_WHITE zb.)


    Ich möchte jedoch das ich in meinem Command eine Farbe angebe (BLUE zb.) und diese dann über eine Funktion in einem ARGB Format ausgegeben wird, die Funktion dazu besteht auch schon. Das problem ist nur das die Farbe ein Integer sein muss, und wenn ich über meine Funktion die Farbe returne kommt komischerweise nie das raus was raus kommen sollte.


    Kurz anhand meiner Schnipsel erklärt:
    GetFarbe Funktion:
    stock GetFarbe(farbe[])
    {
    new PremadeColors[][] =
    {
    { 0xFF0000FF , "Red" },
    { 0xFFFFFFFF , "White" },
    { 0x00FFFFFF , "Cyan" },
    { 0xC0C0C0FF , "Silver" },
    { 0x0000FFFF , "Blue" },
    { 0x808080FF , "Grey" },
    { 0x0000A0FF , "DarkBlue" },
    { 0x000000FF , "Black" },
    { 0xADD8E6FF , "LightBlue" },
    { 0xFFA500FF , "Orange" },
    { 0x800080FF , "Purple" },
    { 0xA52A2AFF , "Brown" },
    { 0xFFFF00FF , "Yellow" },
    { 0x800000FF , "Maroon" },
    { 0x00FF00FF , "Lime" },
    { 0x008000FF , "Green" },
    { 0xFF00FFFF , "Fuchsia" },
    { 0x808000FF , "Olive" }
    },cfgfarbe;


    for(new x; x != sizeof(PremadeColors); x++) if(!strcmp(PremadeColors[x][1], farbe, true)){
    cfgfarbe = PremadeColors[x][0];
    return cfgfarbe;
    }
    return -1;
    }


    So returned es jedoch nur die Zahlen... Richtig funktioniert es nur im folgenden zusammenhang:
    new newcolor[30]; format(newcolor, 30, "0x%04x%04x",GetFarbe(color) >>> 16, GetFarbe(color) & 0xFFFF);


    Das problem ist nun aber das es nun ein String ist und daher ein argument missmatch fehler auftaucht wenn ich versuche den String als Farb angabe zu nutzen.



    Meine Frage ist nun ob jemand eine Ahnung hat wie ich den Farbcode richtig als Integer ausgeben kann.


  • Die Threads hab ich schon gestern gefunden gehabt, jedoch konnte ich daraus nicht schlauer werden. Ich hab jediglich herausgefunden das ich die Farbe selbst aus RGB zusammensetzen soll, jedoch brauch ich sie im ARGB Format und hab aus dem Bereich der Farb konstruktion sowieso keine ahnung...


    Das einzige was ich noch gefunden hatte war die möglichkeit sscanf zu nutzen, große vor Freude das es funktioniert, jedoch dann bemerkt das die Farbe als RGB ausgegeben wird (Oder so etwas)


    Beispiel:
    new newcolor[30]; format(newcolor, 30, "0x%04x%04x",GetFarbe("Blue") >>> 16, GetFarbe("Blue") & 0xFFFF);
    new hexcolor;
    sscanf(newcolor, "x", hexcolor);
    printf("0x%04x%04x (%i)",GetFarbe(color) >>> 16, GetFarbe(color) & 0xFFFF,hexcolor);


    Ausgabe:
    0x0000FFFF (65535)

  • Vielleicht hilft dir ja diese Funktion:
    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;
    }



  • Wenn ich jetzt noch wüsste was genau die Funktion tut (Oder was genau ein HEX Code ist)

  • was willst du im Endeffekt erreichen?
    so wie ich das bisher verstanden habe, willst du einfach nur bestimtmen hexcodes, die eine farbe darstellen sollen, ihre farbe durch einen String angeben.
    Wenndu diese dann nur für sendclientmessage benutzt kannst du genauso zB #define WEIS 0xFFFFFFFF verwenden


    aber ich denke da wärst du selbst auch draufgekommen ?
    also was willst du wirklich ?

  • HexToInt bringt mir in dem fall wenig, ich brauche eine Farbe im ARGB Format. Das heißt wenn ich 0x0000FFFF in einen Integer mit der Funktion umwandle kommt "65535" raus, was mir natürlich herzlich wenig bringt.


    Und was ich brauch ist einfach eine Möglichkeit einen ARGB Farb Code über meine Funktion zu bekommen (GetFarbe(FarbName[])), diese returned dann eigentlich den Code zb. im Format "0x0000FFFF", jedoch funktioniert das nicht so wie ich will. Damit die Farbe stimmt müsste ich sie nochmal formatieren, was das ganze dann jedoch zu einem String wandelt... (new newcolor[30]; format(newcolor, 30, "0x%04x%04x",GetFarbe(color) >>> 16, GetFarbe(color) & 0xFFFF);)