X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fscoreboard.qc;h=7dcf9876983761fb500f562da5fd62c026c1218f;hb=37cf62041a76248472ef6a78feaaed33e35a2260;hp=b00690ff86a8410bf44c6e14860d0b75b396a69c;hpb=17fb0cf62f914e4f77a90470d411eb870a410c9c;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/scoreboard.qc b/qcsrc/client/scoreboard.qc index b00690ff8..7dcf98769 100644 --- a/qcsrc/client/scoreboard.qc +++ b/qcsrc/client/scoreboard.qc @@ -1,13 +1,14 @@ #include "scoreboard.qh" -#include "quickmenu.qh" +#include "hud/panel/quickmenu.qh" #include "hud/all.qh" -#include "../common/constants.qh" -#include "../common/mapinfo.qh" -#include "../common/minigames/cl_minigames.qh" -#include "../common/stats.qh" -#include "../common/teams.qh" +#include +#include +#include +#include +#include +#include float scoreboard_alpha_bg; float scoreboard_alpha_fg; @@ -109,7 +110,7 @@ void HUD_UpdatePlayerTeams() for(pl = players.sort_next; pl; pl = pl.sort_next) { num += 1; - Team = GetPlayerColor(pl.sv_entnum); + Team = entcs_GetScoreTeam(pl.sv_entnum); if(SetTeam(pl, Team)) { tmp = pl.sort_prev; @@ -127,8 +128,9 @@ void HUD_UpdatePlayerTeams() */ } -int HUD_CompareScore(float vl, float vr, int f) +int HUD_CompareScore(int vl, int vr, int f) { + TC(int, vl); TC(int, vr); TC(int, f); if(f & SFL_ZERO_IS_WORST) { if(vl == 0 && vr != 0) @@ -146,8 +148,8 @@ int HUD_CompareScore(float vl, float vr, int f) float HUD_ComparePlayerScores(entity left, entity right) { float vl, vr, r; - vl = GetPlayerColor(left.sv_entnum); - vr = GetPlayerColor(right.sv_entnum); + vl = entcs_GetTeam(left.sv_entnum); + vr = entcs_GetTeam(right.sv_entnum); if(!left.gotscores) vl = NUM_SPECTATOR; @@ -303,8 +305,8 @@ void Cmd_HUD_Help() #define HUD_DefaultColumnLayout() \ "ping pl name | " \ -"-teams,rc,lms/kills +ft,tdm/kills -teams,lms/deaths +ft,tdm/deaths -teams,lms,rc,ka/suicides +ft,tdm/suicides -rc,dm,tdm,ka,ft/frags " /* tdm already has this in "score" */ \ -"dmg dmgtaken " \ +"-teams,cts,lms/kills +ft,tdm/kills -teams,lms/deaths +ft,tdm/deaths -teams,lms,rc,ka/suicides +ft,tdm/suicides -cts,dm,tdm,ka,ft/frags " /* tdm already has this in "score" */ \ +"-rc,cts,nb/dmg -rc,cts,nb/dmgtaken " \ "+ctf/caps +ctf/pickups +ctf/fckills +ctf/returns +ons/caps +ons/takes " \ "+lms/lives +lms/rank " \ "+kh/caps +kh/pushes +kh/destroyed " \ @@ -312,8 +314,9 @@ void Cmd_HUD_Help() "+as/objectives +nb/faults +nb/goals +ka/pickups +ka/bckills +ka/bctime +ft/revivals " \ "-lms,rc,nb/score" -void Cmd_HUD_SetFields(float argc) +void Cmd_HUD_SetFields(int argc) { + TC(int, argc); int i, j, slash; string str, pattern; float have_name = 0, have_primary = 0, have_secondary = 0, have_separator = 0; @@ -407,7 +410,7 @@ void Cmd_HUD_SetFields(float argc) if(str == strtolower(scores_label[j])) goto found; // sorry, but otherwise fteqcc -O3 miscompiles this and warns about "unreachable code" -:notfound +LABEL(notfound) if(str == "frags") j = SP_FRAGS; else @@ -416,7 +419,7 @@ void Cmd_HUD_SetFields(float argc) LOG_INFOF("^1Error:^7 Unknown score field: '%s'\n", str); continue; } -:found +LABEL(found) hud_field[hud_num_fields] = j; if(j == ps_primary) have_primary = 1; @@ -515,6 +518,7 @@ float hud_field_icon1_alpha; float hud_field_icon2_alpha; string HUD_GetField(entity pl, int field) { + TC(int, field); float tmp, num, denom; int f; string str; @@ -571,7 +575,7 @@ string HUD_GetField(entity pl, int field) hud_field_icon2_rgb = colormapPaletteColor(f % 16, 1); } } - return GetPlayerName(pl.sv_entnum); + return entcs_GetName(pl.sv_entnum); case SP_FRAGS: f = pl.(scores[SP_KILLS]); @@ -608,17 +612,17 @@ string HUD_GetField(entity pl, int field) case SP_DMG: num = pl.(scores[SP_DMG]); denom = 1000; - + str = sprintf("%.1f k", num/denom); return str; - + case SP_DMGTAKEN: num = pl.(scores[SP_DMGTAKEN]); denom = 1000; - + str = sprintf("%.1f k", num/denom); - return str; - + return str; + default: tmp = pl.(scores[field]); f = scores_flags[field]; @@ -639,6 +643,7 @@ float hud_fixscoreboardcolumnwidth_marginlen; string HUD_FixScoreboardColumnWidth(int i, string str) { + TC(int, i); float field, f; vector sz; field = hud_field[i]; @@ -703,14 +708,15 @@ string HUD_FixScoreboardColumnWidth(int i, string str) return str; } -void HUD_PrintScoreboardItem(vector pos, vector item_size, entity pl, float is_self, int pl_number) +void HUD_PrintScoreboardItem(vector pos, vector item_size, entity pl, bool is_self, int pl_number) { + TC(bool, is_self); TC(int, pl_number); vector tmp, rgb; rgb = Team_ColorRGB(pl.team); string str; int field; float is_spec; - is_spec = (GetPlayerColor(pl.sv_entnum) == NUM_SPECTATOR); + is_spec = (entcs_GetTeam(pl.sv_entnum) == NUM_SPECTATOR); if((rgb == '1 1 1') && (!is_spec)) { rgb.x = autocvar_scoreboard_color_bg_r + 0.5; @@ -986,7 +992,7 @@ float HUD_WouldDrawScoreboard() { return 1; else if (intermission == 2) return 0; - else if (spectatee_status != -1 && getstati(STAT_HEALTH) <= 0 && autocvar_cl_deathscoreboard && gametype != MAPINFO_TYPE_CTS && !active_minigame) + else if (spectatee_status != -1 && STAT(HEALTH) <= 0 && autocvar_cl_deathscoreboard && gametype != MAPINFO_TYPE_CTS && !active_minigame) return 1; else if (scoreboard_showscores_force) return 1; @@ -996,20 +1002,17 @@ float HUD_WouldDrawScoreboard() { float average_accuracy; vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) { - SELFPARAM(); WepSet weapons_stat = WepSet_GetFromStat(); WepSet weapons_inmap = WepSet_GetFromStat_InMap(); float initial_posx = pos.x; int disownedcnt = 0; - for (int i = WEP_FIRST; i <= WEP_LAST; ++i) { - setself(get_weaponinfo(i)); - if (!self.weapon) continue; - + FOREACH(Weapons, it != WEP_Null, { int weapon_stats = weapon_accuracy[i - WEP_FIRST]; - if (weapon_stats < 0 && !(weapons_stat & WepSet_FromWeapon(i) || weapons_inmap & WepSet_FromWeapon(i))) + WepSet set = it.m_wepset; + if (weapon_stats < 0 && !(weapons_stat & set || weapons_inmap & set)) ++disownedcnt; - } + }); int weapon_cnt = (Weapons_COUNT - 1) - disownedcnt; if (weapon_cnt <= 0) return pos; @@ -1063,12 +1066,11 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) vector tmpos = pos; int column = 0; - for (int i = WEP_FIRST; i <= WEP_LAST; ++i) { - setself(get_weaponinfo(i)); - if (!self.weapon) continue; + FOREACH(Weapons, it != WEP_Null, { int weapon_stats = weapon_accuracy[i - WEP_FIRST]; - if (weapon_stats < 0 && !(weapons_stat & WepSet_FromWeapon(i) || weapons_inmap & WepSet_FromWeapon(i))) + WepSet set = it.m_wepset; + if (weapon_stats < 0 && !(weapons_stat & set || weapons_inmap & set)) continue; float weapon_alpha; @@ -1078,7 +1080,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) weapon_alpha = 0.2 * scoreboard_alpha_fg; // weapon icon - drawpic_aspect_skin(tmpos, self.model2, '1 0 0' * weapon_width + '0 1 0' * weapon_height, '1 1 1', weapon_alpha, DRAWFLAG_NORMAL); + drawpic_aspect_skin(tmpos, it.model2, '1 0 0' * weapon_width + '0 1 0' * weapon_height, '1 1 1', weapon_alpha, DRAWFLAG_NORMAL); // the accuracy if (weapon_stats >= 0) { weapons_with_stats += 1; @@ -1103,7 +1105,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) pos.y += height; } ++column; - } + }); if (weapons_with_stats) average_accuracy = floor((average_accuracy * 100 / weapons_with_stats) + 0.5); @@ -1197,7 +1199,7 @@ vector HUD_DrawScoreboardRankings(vector pos, entity pl, vector rgb, vector bg_ return pos; float is_spec; - is_spec = (GetPlayerColor(pl.sv_entnum) == NUM_SPECTATOR); + is_spec = (entcs_GetTeam(pl.sv_entnum) == NUM_SPECTATOR); vector hl_rgb; hl_rgb.x = autocvar_scoreboard_color_bg_r + 0.5; hl_rgb.y = autocvar_scoreboard_color_bg_g + 0.5; @@ -1226,7 +1228,7 @@ vector HUD_DrawScoreboardRankings(vector pos, entity pl, vector rgb, vector bg_ continue; n = grecordholder[i]; p = count_ordinal(i+1); - if(grecordholder[i] == GetPlayerName(player_localnum)) + if(grecordholder[i] == entcs_GetName(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(!(i % 2) && scoreboard_highlight) drawfill(pos, '1 0 0' * sbwidth + '0 1.25 0' * hud_fontsize.y, hl_rgb, scoreboard_highlight_alpha, DRAWFLAG_NORMAL); @@ -1306,7 +1308,7 @@ void HUD_DrawScoreboard() pos.y += sb_heading_fontsize.y + hud_fontsize.y * 0.25; // Draw the scoreboard - vector bg_size = draw_getimagesize("gfx/scoreboard/scoreboard_bg") * autocvar_scoreboard_bg_scale; + vector bg_size = draw_getimagesize("gfx/scoreboard/scoreboard_bg") * ((autocvar_scoreboard_bg_scale > 0) ? autocvar_scoreboard_bg_scale : 0.25); if(teamplay) { @@ -1316,6 +1318,8 @@ void HUD_DrawScoreboard() { if(tm.team == NUM_SPECTATOR) continue; + if(!tm.team && teamplay) + continue; draw_beginBoldFont(); rgb = Team_ColorRGB(tm.team); @@ -1345,6 +1349,8 @@ void HUD_DrawScoreboard() { if(tm.team == NUM_SPECTATOR) continue; + if(!tm.team && teamplay) + continue; pos = HUD_Scoreboard_MakeTable(pos, tm, rgb, bg_size); } @@ -1402,8 +1408,8 @@ void HUD_DrawScoreboard() // Print info string float tl, fl, ll; str = sprintf(_("playing ^3%s^7 on ^2%s^7"), MapInfo_Type_ToText(gametype), shortmapname); - tl = getstatf(STAT_TIMELIMIT); - fl = getstatf(STAT_FRAGLIMIT); + tl = STAT(TIMELIMIT); + fl = STAT(FRAGLIMIT); ll = STAT(LEADLIMIT); if(gametype == MAPINFO_TYPE_LMS) {