X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fscoreboard.qc;h=3124b4b9b4d68056f968c4ca87f15c993edf8c99;hb=6fefb38d7618ba85d7ec2484d18231a76373f313;hp=37ace81a322ef33aaebcfc8831d3935e5bcd3145;hpb=168ad453c4365703f38247b28321f1c420a41deb;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/scoreboard.qc b/qcsrc/client/scoreboard.qc index 37ace81a3..3124b4b9b 100644 --- a/qcsrc/client/scoreboard.qc +++ b/qcsrc/client/scoreboard.qc @@ -240,11 +240,11 @@ void Cmd_HUD_Help(float argc) print(_("^3|---------------------------------------------------------------|\n")); print(_("Usage:\n")); print(_("^2scoreboard_columns_set default\n")); - print(_("^2scoreboard_columns_set ^7filed1 field2 ...\n")); + print(_("^2scoreboard_columns_set ^7field1 field2 ...\n")); print(_("The following field names are recognized (case insensitive):\n")); print(_("You can use a ^3|^7 to start the right-aligned fields.\n\n")); - print(_("^3name^7 or ^3nick^7 Name of a player\n")); + print(_("^3name^7 or ^3nick^7 Name of a player\n")); print(_("^3ping^7 Ping time\n")); print(_("^3pl^7 Packet loss\n")); print(_("^3kills^7 Number of kills\n")); @@ -509,7 +509,7 @@ string HUD_GetField(entity pl, float field) case SP_PING: if not(pl.gotscores) return "\xEE\x82\x8D\xEE\x82\x8D\xEE\x82\x8D"; // >>> sign - //str = getplayerkey(pl.sv_entnum, "ping"); + //str = getplayerkeyvalue(pl.sv_entnum, "ping"); f = pl.ping; if(f == 0) return _("N/A"); @@ -538,7 +538,7 @@ string HUD_GetField(entity pl, float field) } else if(!teamplay) { - f = stof(getplayerkey(pl.sv_entnum, "colors")); + f = stof(getplayerkeyvalue(pl.sv_entnum, "colors")); { hud_field_icon0 = "gfx/scoreboard/playercolor_base"; hud_field_icon1 = "gfx/scoreboard/playercolor_shirt"; @@ -597,7 +597,7 @@ string HUD_FixScoreboardColumnWidth(float i, string str) if(hud_field_icon0 != "") { - sz = drawgetimagesize(hud_field_icon0); + sz = draw_getimagesize(hud_field_icon0); f = sz_x / sz_y; if(hud_fixscoreboardcolumnwidth_iconlen < f) hud_fixscoreboardcolumnwidth_iconlen = f; @@ -605,7 +605,7 @@ string HUD_FixScoreboardColumnWidth(float i, string str) if(hud_field_icon1 != "") { - sz = drawgetimagesize(hud_field_icon1); + sz = draw_getimagesize(hud_field_icon1); f = sz_x / sz_y; if(hud_fixscoreboardcolumnwidth_iconlen < f) hud_fixscoreboardcolumnwidth_iconlen = f; @@ -613,7 +613,7 @@ string HUD_FixScoreboardColumnWidth(float i, string str) if(hud_field_icon2 != "") { - sz = drawgetimagesize(hud_field_icon2); + sz = draw_getimagesize(hud_field_icon2); f = sz_x / sz_y; if(hud_fixscoreboardcolumnwidth_iconlen < f) hud_fixscoreboardcolumnwidth_iconlen = f; @@ -894,7 +894,7 @@ vector HUD_Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_siz { if(pl.team != tm.team) continue; - HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1), i); + HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localnum), i); pos_y += 1.25 * hud_fontsize_y; ++i; } @@ -903,7 +903,7 @@ vector HUD_Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_siz { if(pl.team == COLOR_SPECTATOR) continue; - HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1), i); + HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localnum), i); pos_y += 1.25 * hud_fontsize_y; ++i; } @@ -978,10 +978,10 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) if(rows == 2) pos_x += weapon_width / 2; - if(getstati(STAT_SWITCHWEAPON) == WEP_MINSTANEX) + if(switchweapon == WEP_MINSTANEX) g_minstagib = 1; // TODO: real detection for minstagib? - float weapon_stats, weapon_number; + float weapon_stats; if (!acc_levels) rgb = '1 1 1'; @@ -1053,6 +1053,59 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) return pos; } +vector HUD_DrawKeyValue(vector pos, string key, string value) { + float px = pos_x; + pos_x += hud_fontsize_x * 0.25; + drawstring(pos, key, hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); + pos_x = xmax - stringwidth(value, FALSE, hud_fontsize) - hud_fontsize_x * 0.25; + drawstring(pos, value, hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); + pos_x = px; + pos_y+= hud_fontsize_y; + + return pos; +} + +vector HUD_DrawMapStats(vector pos, vector rgb, vector bg_size) { + float stat_secrets_found, stat_secrets_total; + float rows; + string val; + + // get secrets stats + stat_secrets_found = getstatf(STAT_SECRETS_FOUND); + stat_secrets_total = getstatf(STAT_SECRETS_TOTAL); + + // get number of rows + rows = (stat_secrets_total ? 1 : 0); + + // if no rows, return + if not(rows) + return pos; + + // draw table header + drawstring(pos, _("Map stats:"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); + pos_y += 1.25 * hud_fontsize_y + autocvar_scoreboard_border_thickness; + + // draw table + vector tmp; + tmp_x = sbwidth; + tmp_y = hud_fontsize_y * rows; + + if (teamplay) + drawpic_tiled(pos, "gfx/scoreboard/scoreboard_bg", bg_size, tmp, rgb * autocvar_scoreboard_color_bg_team, scoreboard_alpha_bg, DRAWFLAG_NORMAL); + else + drawpic_tiled(pos, "gfx/scoreboard/scoreboard_bg", bg_size, tmp, rgb, scoreboard_alpha_bg, DRAWFLAG_NORMAL); + drawborderlines(autocvar_scoreboard_border_thickness, pos, tmp, '0 0 0', scoreboard_alpha_bg * 0.75, DRAWFLAG_NORMAL); + + // draw secrets + val = sprintf("%d/%d", stat_secrets_found, stat_secrets_total); + pos = HUD_DrawKeyValue(pos, _("Secrets found:"), val); + + // update position + pos_y += 1.25 * hud_fontsize_y; + return pos; +} + + vector HUD_DrawScoreboardRankings(vector pos, entity pl, vector rgb, vector bg_size) { float i; @@ -1094,7 +1147,7 @@ vector HUD_DrawScoreboardRankings(vector pos, entity pl, vector rgb, vector bg_ continue; n = grecordholder[i]; p = race_PlaceName(i+1); - if(grecordholder[i] == GetPlayerName(player_localentnum - 1)) + if(grecordholder[i] == GetPlayerName(player_localnum)) drawfill(pos, '1 0 0' * sbwidth + '0 1.25 0' * hud_fontsize_y, hl_rgb, scoreboard_highlight_alpha_self, DRAWFLAG_NORMAL); else if(!mod(i, 2) && scoreboard_highlight) drawfill(pos, '1 0 0' * sbwidth + '0 1.25 0' * hud_fontsize_y, hl_rgb, scoreboard_highlight_alpha, DRAWFLAG_NORMAL); @@ -1151,11 +1204,11 @@ void HUD_DrawScoreboard() entity pl, tm; string str; - xmin = autocvar_scoreboard_offset_left * vid_conwidth; - ymin = autocvar_con_notify * autocvar_con_notifysize; + xmin = (autocvar_scoreboard_offset_left * vid_conwidth); + ymin = max((autocvar_con_notify * autocvar_con_notifysize), (autocvar_scoreboard_offset_vertical * vid_conwidth)); - xmax = (1 - autocvar_scoreboard_offset_right) * vid_conwidth; - ymax = vid_conheight - ymin; + xmax = ((1 - autocvar_scoreboard_offset_right) * vid_conwidth); + ymax = (vid_conheight - ymin); sbwidth = xmax - xmin; @@ -1168,14 +1221,11 @@ void HUD_DrawScoreboard() vector sb_heading_fontsize; sb_heading_fontsize = hud_fontsize * 2; drawstring(pos, _("Scoreboard"), sb_heading_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - centerprint_start_x = vid_conwidth - 0.5 * (pos_x + stringwidth(_("Scoreboard"), FALSE, sb_heading_fontsize)); - centerprint_start_y = pos_y; pos_y += sb_heading_fontsize_y + hud_fontsize_y * 0.25; // Draw the scoreboard - vector bg_size = drawgetimagesize("gfx/scoreboard/scoreboard_bg") * autocvar_scoreboard_bg_scale; + vector bg_size = draw_getimagesize("gfx/scoreboard/scoreboard_bg") * autocvar_scoreboard_bg_scale; if(teamplay) { @@ -1231,6 +1281,12 @@ void HUD_DrawScoreboard() pos = HUD_DrawScoreboardAccuracyStats(pos, rgb, bg_size); } + + if(teamplay) + pos = HUD_DrawMapStats(pos, GetTeamRGB(myteam), bg_size); + else + pos = HUD_DrawMapStats(pos, rgb, bg_size); + // List spectators float specs; specs = 0; @@ -1240,7 +1296,7 @@ void HUD_DrawScoreboard() if(pl.team != COLOR_SPECTATOR) continue; pos_y += 1.25 * hud_fontsize_y; - HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1), specs); + HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localnum), specs); ++specs; }