2 Problemchen (/showweapons, und %f)

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
  • Hi,


    ich habe 2 Probleme.


    1:


    Ich möchte das wenn ich einen Float in einen String einbinde dort nicht die ganzen Stellen hinter dem Komma zu sehen sind.
    Sagen wir der Spieler hat 50% Lebensenergie. Dann soll in dem String auch 50 stehen und nicht 50.000000.
    Ich habe gelesen das das so geht %0.f aber das funktioniert irgendwie nicht.


    new Float:health, string[50];
    GetPlayerHealth(i,health);
    format(string, sizeof(string), "Health: %0.f",health);


    2:


    Ich bin dabei einen /showweapons Befehl zu erstellen der mir die Waffen eines Spielers zeigt. Das sieht bisher so aus:


    ocmd:sweapons(playerid,params[])
    {
    new pID;
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,0xFFFFFFFF,"Hmhmh");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,0xFFFFFFFF,"Blub");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,0xFFFFFFFF,"Bla");
    new bullets[13];
    new curweapons[13];
    for(new i = 0; i < 12; i++)
    {
    GetPlayerWeaponData(pID, i+1, curweapons[i], bullets[i]);
    }
    new string1[60],string2[60],string3[60],string4[60],string5[60],string6[60],string7[60],string8[60],string9[60],string10[60],string11[60],string12[60],string13[60],rest[800];
    format(string1, sizeof string1, "Waffen von: %s (Id: %d)",SpielerName(pID),pID);
    format(string2, sizeof string2, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[1]-1],curweapons[1],bullets[1]);
    format(string3, sizeof string3, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[2]-1],curweapons[2],bullets[2]);
    format(string4, sizeof string4, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[3]-1],curweapons[3],bullets[3]);
    format(string5, sizeof string5, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[4]-1],curweapons[4],bullets[4]);
    format(string6, sizeof string6, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[5]-1],curweapons[5],bullets[5]);
    format(string7, sizeof string7, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[6]-1],curweapons[6],bullets[6]);
    format(string8, sizeof string8, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[7]-1],curweapons[7],bullets[7]);
    format(string9, sizeof string9, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[8]-1],curweapons[8],bullets[8]);
    format(string10, sizeof string10, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[9]-1],curweapons[9],bullets[9]);
    format(string11, sizeof string11, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[10]-1],curweapons[10],bullets[10]);
    format(string12, sizeof string12, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[11]-1],curweapons[11],bullets[11]);
    format(string13, sizeof string13, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[12]-1],curweapons[12],bullets[12]);
    format(rest, sizeof rest, "%s\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", string1,string2,string3,string4,string5,string6,string7,string8,string9,string10,string11,string12,string13);
    ShowPlayerDialog(playerid,WEAPON_DIA,DIALOG_STYLE_MSGBOX,"Waffen:",rest,"Ok","");
    return 1;
    }
    (Die format Zeilen stehen bei mir alle untereinander)


    Leider geht das nicht. Wenn ich /sweapons (ohne Id) eingebe bekomme ich wie gescriptet eine Nachricht. Wenn ich aber z.B. die Waffen von Id 1 wissen will gebe ich /sweapons 1 ein.
    Dann sagt der Server immer Unknown Command und es passiert gar nichts :/
    Ich glaube das liegt an dem großen Dialog, da bis dahin der Befehl klappt.


    Hat jemand eine Ahnung?

  • 1.


    new Float:health, string[50];
    GetPlayerHealth(i,health);
    format(string, sizeof(string), "Health: %f",health);


    2. Zu faul ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 1.


    new Float:health, string[50];
    GetPlayerHealth(i,health);
    format(string, sizeof(string), "Health: %f",health);


    Aber wenn es macht keinen Unterschied ob ich %0.f oder %f mache. Es sind immer die Zahlen hinter dem Komma da (50.00000)

  • versuche es mal so:


    new Float:health, string[50];
    GetPlayerHealth(i,health);
    health = floatround(health);
    format(string, sizeof(string), "Health: %f",health);


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • :whistling:


    new Float:health, string[50];
    GetPlayerHealth(i,health);
    format(string, sizeof(string), "Health: %.2f",health);



    Zum 2. Problem:
    Sieht so aus, als ob da etwas nicht funktioniert und der Compiler abbricht, ich habe da konkret die Variable "Waffenname" im Verdacht.
    Probier mal nach jeweils ein paar Zeilen ein print("0"); zu setzen,
    dann können wir rausfinden, in welcher Zeile der Fehler auftritt.



    BlackLegend

  • new Float:health, string[50];
    GetPlayerHealth(i,health);
    format(string, sizeof(string), "Health: %.2f",health);


    Das bringt doch nichts, jetzt zeigt er 2 Stellen hinter dem Komma an, er will aber keine ^^


    mfg. :whistling:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Das war ein Beispiel :whistling: .
    Genauso könnte ich zu dir sagen, dass bei %f alle Stellen angezeigt werden, er aber nur eine will.
    Natürlich kann ers auch einfach zu


    new Float:health, string[50];
    GetPlayerHealth(i,health);
    format(string, sizeof(string), "Health: %.0f",health);


    ändern.....



    BlackLegend


  • Ich habe floatround benutzt, schau genauer hin, dadurch wird der float auf eine grade Zahl gerundet !^^


    mfg. :sleeping:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Dann schreib mal das:


    new Float:bla = 51.051345;
    bla = floatround(bla);
    printf("%f", bla);
    printf("%0.f", bla);
    printf("%.0f", bla);


    unter OnGameModeInit() in ein Beispielscript.


    Besserwisser solltens besser wissen...
    Aufjedenfall ist die richtige Lösung (und damit b2t) die, die ich bereits gepostet habe.
    Denn er möchte ja erreichen, dass nur die Zahl angezeigt wird, ohne Nachkommastellen,
    er möchte die Zahl nicht runden.


    BlackLegend

  • Zu 1: Mit %.0f hat es funktioniert.


    Zu 2:


    Also, bis einschließlich Zeile 12 haut alles hin. Ich habe unter Zeile 12 printf("%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[1]-1],curweapons[1],bullets[1]); gemacht und es auch ausgegeben bekommen.
    Allerdings wurden die bullets nicht richtig angezeigt (Ich hatte da %d stehen und dann stand da eine minus Zahl).
    printf hat funktioniert aber der Dialog nicht :/

  • 1. Wie gesagt.


    2. Ich habe es gerade bei mir lokal getestet, so funktioniert es:


    ocmd:sweapons(playerid,params[])
    {
    new pID;
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,0xFFFFFFFF,"Hmhmh");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,0xFFFFFFFF,"Blub");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,0xFFFFFFFF,"Bla");
    new bullets[13];
    new curweapons[13];
    for(new i = 0; i < 12; i++)
    {
    GetPlayerWeaponData(pID, i+1, curweapons[i], bullets[i]);
    }
    new string1[60],string2[60],string3[60],string4[60],string5[60],string6[60],string7[60],string8[60],string9[60],string10[60],string11[60],string12[60],string13[60],rest[800];
    format(string1, sizeof string1, "Waffen von: %s (Id: %d)",SpielerName(pID),pID);
    format(string2, sizeof string2, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[1]],curweapons[1],bullets[1]);
    format(string3, sizeof string3, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[2]],curweapons[2],bullets[2]);
    format(string4, sizeof string4, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[3]],curweapons[3],bullets[3]);
    format(string5, sizeof string5, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[4]],curweapons[4],bullets[4]);
    format(string6, sizeof string6, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[5]],curweapons[5],bullets[5]);
    format(string7, sizeof string7, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[6]],curweapons[6],bullets[6]);
    format(string8, sizeof string8, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[7]],curweapons[7],bullets[7]);
    format(string9, sizeof string9, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[8]],curweapons[8],bullets[8]);
    format(string10, sizeof string10, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[9]],curweapons[9],bullets[9]);
    format(string11, sizeof string11, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[10]],curweapons[10],bullets[10]);
    format(string12, sizeof string12, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[11]],curweapons[11],bullets[11]);
    format(string13, sizeof string13, "%s (WpnId: %d) (Munition: %i)",Waffenname[curweapons[12]],curweapons[12],bullets[12]);
    format(rest, sizeof rest, "%s\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", string1,string2,string3,string4,string5,string6,string7,string8,string9,string10,string11,string12,string13);
    ShowPlayerDialog(playerid,WEAPON_DIA,DIALOG_STYLE_MSGBOX,"Waffen:",rest,"Ok","");
    return 1;
    }


    Undzwar trat dieser Fehler aus folgendem Grund auf:
    Wenn der Spieler keine Waffe hat, dann ist die Waffenid und somit curweapons[x] 0.
    Die Mathematik besagt, dass 0 - 1 = -1 ist.
    Und einem Array kann logischerweise keine negative Zahl übergeben werden.
    (Waffenname[-1] exisitiert nicht).


    Füge bei deinem Waffennamen Array an erster Stelle am besten einfach "Keine" ein:


    new Waffenname[][] =
    {
    "Keine","Schlagringe","Golfschläger","Schlagstock","Messer","Baseballschläger","Schaufel","Poolstock","Katana","Kettensege",
    "Dildo","Dildo","Vibrator","Vibrator","Blumen","Gehstock","Granate","Tränengas","Molotov-Cocktail","xxxx","xxxx","xxxx","Pistole","schallgedämpfte Pistole","Desert Eagle","Schrotflinte","abgesägte Schrotflinte","automatische Schrotflinte",
    "UZI","MP5","AK 47","M4","TEC9","Rifle","Sniper","Raketenwerfer","Bazuka","Flammenwerfer","Minigun","Auslöser","Rucksackbombe","Farbspray","Feuerlöscher","Kamera","XXXX","XXXX","Fallschirm"
    };


    BlackLegend

  • Vielen Dank BlackLegend.


    Das einzige Problem ist jetzt noch das ich bei bullets immer eine Minuszahl angezeigt bekomme. Woran liegt das? (-37000 oder so)

  • Eh ja :D Das ist das Problem. Ok vielen Dank nochmal und das mit der Muniton werde ich noch ändern :)