Best killer problem
#1

Hi guys, I've encountered a bug with my best killer calculator. If a player has 0 kills, it will send multiple message saying that he's the MVP. Can you help? As always, my scripts are in italian and I'll translate sideways.
pawn Код:
for(new i=0; i < (MAX_PLAYERS-1); i++)
{
if (a<Giocatore[i+1][Uccisioni]) //Player's kills
a=Giocatore[i+1][Uccisioni]; //Player's kills
}
for(new i=0; i < (MAX_PLAYERS-1); i++)
{
id[i]=-1;
if (a==Giocatore[i][Uccisioni]) //Player's kills
{
id[count]=i;
count++;
}
}
if (id[0]!=-1)
{
new i=0;
while (id[i]!=-1)
{
GetPlayerName(id[i],nome,sizeof(nome));
format(stringa,sizeof(stringa),"MVP: %s \nNumero uccisioni:%d",nome,Giocatore[i][Morti]); /*Message for 1 MVP (this on is the message that it sends when it glitches)*/
SendClientMessageToAll(Rosso,stringa);
i++;
}
}
else
{
GetPlayerName(a,nome,sizeof(nome));
format(stringa,sizeof(stringa),"L'MVP %s ha il maggior numero di uccisioni pari a %d",nome,Giocatore[a][Morti]); //Message for more MVPs
SendClientMessageToAll(Rosso,stringa);
}
for(new i; i < MAX_PLAYERS; i++)
 {
  if (gTeam[i] == Attack || gTeam[i] == Defense)
  {
  ResetPlayerWeapons(i);
  SetPlayerInterior(i, 0);
  SetPlayerPos(i,2441.3555,1042.6689,57.5016);
  }
 }
new id2[MAX_PLAYERS];
new a2=Giocatore[0][Morti];
new count2=0;
for(new i=0; i < (MAX_PLAYERS-1); i++)
{
if (a2<Giocatore[i+1][Morti])
a2=Giocatore[i+1][Morti];
}
for(new i=0; i < (MAX_PLAYERS-1); i++)
{
id2[i]=-1;
if (a2==Giocatore[i][Morti])
{
id2[count2]=i;
count2++;
}
}
if (id2[0]!=-1)
{
new i=0;
while (id2[i]!=-1)
{
GetPlayerName(id2[i],nome,sizeof(nome));
format(stringa,sizeof(stringa),"Peggior giocatore: %s \nNumero morti:%d",nome,Giocatore[i][Uccisioni]); //Message for 1 worst player
SendClientMessageToAll(Rosso,stringa);
i++;
}
}
else
{
GetPlayerName(a2,nome,sizeof(nome));
format(stringa,sizeof(stringa),"Il peggior giocatore %s ha il maggior numero di morti pari a %d",nome,Giocatore[a][Uccisioni]); //multiples worst players
SendClientMessageToAll(Rosso,stringa);
}
return 1;}
Reply
#2

You don't need to translate texts, but if you want to help us helping you, learn how to indent your code (protip: use tab to indent, and shift+tab to outdent), and use descriptive variable names. Read about scripting basics https://sampwiki.blast.hk/wiki/Scripting_Basics , and later search for foreach to increase your code efficiency.

pawn Код:
new
    killsId[MAX_PLAYERS] = { INVALID_PLAYER_ID },
    deathsId[MAX_PLAYERS] = { INVALID_PLAYER_ID },
    maxKills = 1,
    maxDeaths = 1,
    arrayIndexKills = 0,
    arrayIndexDeaths = 0;

for(new i = 0; i != MAX_PLAYERS; i++)
{
    if(maxKills <= Giocatore[i][Uccisioni]) {
        maxKills = Giocatore[i][Uccisioni];
        killsId[arrayIndexKills++] = i;
    }
   
    if(maxDeaths <= Giocatore[i][Morti]) {
        maxDeaths = Giocatore[i][Morti];
        deathsId[arrayIndexDeaths++] = i;
    }
   
    if (gTeam[i] == Attack || gTeam[i] == Defense)
    {
        ResetPlayerWeapons(i);
        SetPlayerInterior(i, 0);
        SetPlayerPos(i,2441.3555,1042.6689,57.5016);
    }
}

//Messages for kills
if(killsId[0] != INVALID_PLAYER_ID && killsId[1] == INVALID_PLAYER_ID) {   
    GetPlayerName(maxKills, nome, sizeof(nome));
    format(stringa, sizeof(stringa), "L'MVP %s ha il maggior numero di uccisioni pari a %d", nome, Giocatore[killsId[0]][Uccisioni]); //Message for __single__ MVP
    SendClientMessageToAll(Rosso,stringa);
}
else if (killsId[1] != INVALID_PLAYER_ID)
{
    new i = 0;
    do {
        GetPlayerName(killsId[i], nome, sizeof(nome));
        format(stringa, sizeof(stringa), "MVP: %s \nNumero uccisioni:%d", nome, Giocatore[i][Uccisioni]); /*Message for __many__ MVPs */
        SendClientMessageToAll(Rosso, stringa);
    } while(killsId[i++] != INVALID_PLAYER_ID);
}
else
{
    SendClientMessageToAll(Rosso, "Nobody earned MVP status");
}

if(deathsId[0] != INVALID_PLAYER_ID && deathsId[1] == INVALID_PLAYER_ID) { 
    GetPlayerName(maxKills, nome, sizeof(nome));
    format(stringa, sizeof(stringa), "Il peggior giocatore %s ha il maggior numero di morti pari a %d", nome, Giocatore[deathsId[0]][Morti]); //Message for __single__ retard
    SendClientMessageToAll(Rosso,stringa);
}
else if (deathsId[1] != INVALID_PLAYER_ID)
{
    new i = 0;
    do {
        GetPlayerName(deathsId[i], nome, sizeof(nome));
        format(stringa, sizeof(stringa), "Il peggior giocatore %s ha il maggior numero di morti pari a %d", nome, Giocatore[i][Morti]); /*Message for __many__ retards */
        SendClientMessageToAll(Rosso, stringa);
    } while(deathsId[i++] != INVALID_PLAYER_ID);
}
else
{
    SendClientMessageToAll(Rosso, "Nobody earned retard status");
}
Reply
#3

The code is indented, the copy and paste screwed it :/
By the way, thanks mate, it works really fine! REP +!
Reply
#4

Ok, sorry. Next time I'll indent it better.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)