Hey,
Wie kann man die Hitrate ausrechnen in Rate und das dann anzeigen?
Ich denke mal die Hits bei OnPlayerTakeDamage zählen mit einer Variabel und dann?
Bräuchte einen denkanstoß.
mfg
Hey,
Wie kann man die Hitrate ausrechnen in Rate und das dann anzeigen?
Ich denke mal die Hits bei OnPlayerTakeDamage zählen mit einer Variabel und dann?
Bräuchte einen denkanstoß.
mfg
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
if(hitid != BULLET_HIT_TYPE_PLAYER){
//Nicht getroffen +1
}
else if(hitid == BULLET_HIT_TYPE_PLAYER){
//Getroffen +1
}
return 1;
}
Alles anzeigenpublic OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
if(hitid != BULLET_HIT_TYPE_PLAYER){
//Nicht getroffen +1
}
else if(hitid == BULLET_HIT_TYPE_PLAYER){
//Getroffen +1
}
return 1;
}
Wie sieht die Rechnung aus mit den Variabeln? also Getroffen/Schüsse *100 aber wie runde ich das z.b noch auf
In Prozent dann:
Anzahl aller Schuesse / 100 * Anzahl der Hits
Aufrunden dann mit
http://wiki.sa-mp.com/wiki/Floatround
Alles anzeigenIn Prozent dann:
Anzahl aller Schuesse / 100 * Anzahl der Hits
Aufrunden dann mit
In Prozent dann:
Anzahl aller Schuesse / 100 * Anzahl der Hits
Aufrunden dann mit
http://wiki.sa-mp.com/wiki/Floatroundpublic OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
if(hitid != BULLET_HIT_TYPE_PLAYER){
User[hitid][Shots] ++;
}
else if(hitid == BULLET_HIT_TYPE_PLAYER){
User[hitid][Hits] ++;
User[hitid][Hitrate] = User[hitid][Hits] / User[hitid][Shots] * 100;
floatround(User[hitid][Hitrate],floatround_round);
}
return 1;
}
Was muss ich nehmen? Hitid,playerid oder hittype?
Wenn du Integers miteinander teilst musst du, bzw kannst du, nicht mehr runden, die Nachkommastellen werden abgeschnitten.
Du musst playerid verwenden, das ist die ID des Spielers der schießt.
Wenn du Integers miteinander teilst musst du, bzw kannst du, nicht mehr runden, die Nachkommastellen werden abgeschnitten.
Du musst playerid verwenden, das ist die ID des Spielers der schießt.
Müsste es so gehen?
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
if(hitid != BULLET_HIT_TYPE_PLAYER){
User[playerid][Shots] ++;
}
else if(hitid == BULLET_HIT_TYPE_PLAYER){
User[playerid][Hits] ++;
}
return 1;
}
public InfoUpdate()
{
new lvlpunkte[34],kills[24],tode[24],hitrate[24];
for(new i=0; i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i)) continue;
if(User[i][TextDrawAktiv] == 1)
{
User[i][Hitrate] = User[i][Hits] / User[i][Shots] * 100;
format(lvlpunkte,34,"Level Up %d/3",User[i][LevelPunkte]);
format(kills,24,"Kills: %d",User[i][Kills]);
format(tode,24,"Tode: %d",User[i][Tode]);
format(hitrate,24,"Hitrate: %d%",User[i][Hitrate]);
PlayerTextDrawSetString(i,LevelUpDraw[i],lvlpunkte);
PlayerTextDrawSetString(i,StatsDraw[1][i],kills);
PlayerTextDrawSetString(i,StatsDraw[3][i],tode);
PlayerTextDrawSetString(i,StatsDraw[5][i],hitrate);
}
}
return 1;
}
Nein, es muss hittype sein.
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
User[playerid][Shots] ++;
if(hittype == BULLET_HIT_TYPE_PLAYER){
User[playerid][Hits] ++;
}
return 1;
}
So musst es machen.
Und bei dem Textdraw solltest du beachten, dass die Shots nicht 0 sind, du darfst nicht durch 0 teilen. Am besten du setzt es dem Spieler schon auf 1 wenn er sich registriert, eben bevor er das erste mal das Textdraw sieht.
Müsste es so gehen?
probieren geht über studieren
und wie Jeffry bereits sagte kommt beim Teilen zweier Integer kein Float raus.
probieren geht über studieren
und wie Jeffry bereits sagte kommt beim Teilen zweier Integer kein Float raus.
Okay danke euch
//Edit: funktioniert nicht Jeffry:
Dann hast du diese Variablen nicht zu Floats gemacht.
User[i][Hitrate] = User[i][Hits] / User[i][Shots] * 100;
Mach das zu
User[i][Hitrate] = User[i][Hits] * 100 / User[i][Shots];
Dann klappt die Rechnung.