[ACS] problem with the scoreboard

Discuss all aspects related to modding Zandronum here.
Post Reply
User avatar
doomjoshuaboy
Developer
Posts: 304
Joined: Thu Aug 02, 2012 5:36 am
Location: Australia
Contact:

[ACS] problem with the scoreboard

#1

Post by doomjoshuaboy » Wed Sep 28, 2016 4:02 am

hi guys
I'm having trouble with the scoreboard when playing a doom level. i added the first bot and its makes the same name then i added the second bot and its worked but not the same user.

Image

and heres my code:

Code: Select all

#library "TEMP"
#include "zcommon.acs"

#define DEATH_PENALTY 100

#define MAX_PLAYERS 32
int score[MAX_PLAYERS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int sorted[MAX_PLAYERS] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32};

script 4 ENTER
{
  int addPoints = CheckInventory("ScoreItem2");
  if (addPoints > 0)
  {
    score[PlayerNumber()] += addPoints;
    TakeInventory("ScoreItem2", addPoints);
  }
  SetHudSize(1920, 1080, true);
  int y = 595.2;
  int best = GetBestPlayerNumber();
  for (int i = PlayerCount() - 1; i >= 0; i--)
  {
    if (i == best)
    {
      HudMessage(i:(i+1), s:" ", n:i, s:": ", i:score[i]; HUDMSG_PLAIN, 103 + i, CR_GOLD, 9.1, y, 0);
    }
    else
    {
      HudMessage(i:(i+1), s:" ", n:i, s:": ", i:score[i]; HUDMSG_PLAIN, 103 + i, CR_GREEN, 9.1, y, 0);
    }
    y -= 16.0;
  }
  y -= 3.0;
  HudMessage(s:"Points:"; HUDMSG_PLAIN, 102, CR_WHITE, 9.1, y, 0);
  Delay(5);
  Restart;
}

script 5 DEATH
{
  score[PlayerNumber()] -= DEATH_PENALTY;
}

script 6 UNLOADING
{
  for (int k = 0; k < PlayerCount(); k++)
  {
    sorted[k] = k;
  }
  
  // good old bubble sort
  for (int i = 0; i < PlayerCount() - 1; i++)
  {
    bool change = false;
    for (int j = 0; j < PlayerCount() - 1; j++)
    {
      if (score[sorted[j]] < score[sorted[j+1]])
      {
        int x = sorted[j];
        sorted[j] = sorted[j+1];
        sorted[j+1] = x;
        change = true;
      }
    }
    if (!change) break;
  }
  
  Print(s:"Final scores");
  for (int l = 0; l < PlayerCount(); l++)
  {
    // at this point, players are no longer in the game, so we can't
    // print their real names. So we just print "player" and a number
    Print(i:(l+1), s:". player ", i:(sorted[l] + 1), s:": ", i:score[sorted[l]]);
  }
}

function int GetBestPlayerNumber(void)
{
  int best = 0;
  int maxscore = score[0];
  for (int i = 1; i < PlayerCount(); i++)
  {
    if (score[i] > maxscore)
    {
      best = i;
      maxscore = score[i];
    }
  }
  return best;
}

script 123 RESPAWN
{
GiveInventory("TemporaryProtectionGiver",1);
GiveInventory("MegaSphere",1);
}
cheers
Doomjoshuaboy

Post Reply