A %f-nek semmi köze hozzá. Az valós számokat ír ki, tehát pl. 2,3893935393.
120-nál 120-at ír, mert (120/120)*100 az 1*100 azaz 100. Ha pedig az éhség 120-nál kisebb, pl. 119/120, akkor 0 lesz az eredmény, mert sima osztást használsz. 0*100 pedig 0. Pontosan mit szeretnél kiszámolni, mit kéne kiírnia milyen esetekben? És akkor segítek megadni a megfelelő műveletet, amelyben valószínűleg szerepelni fog a maradékos osztás.
Szerk.: Ha pl. a változó értéke 90 és a 100% egyenlő 120-al, akkor itt egy ilyen trükk, amelyhez nem is kell modulózni: (90*100)/120 = 75%
format(textstr, sizeof(textstr), \"Ehseg: ~w~%d%\", (ehseg[playerid]*100)/120);
TextDrawSetString(ehsegtext[playerid], textstr);
TextDrawShowForPlayer(playerid, ehsegtext[playerid]);
Szerintem te is valami ilyesmit akartál, csak felcserélted őket.