X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fmiscfunctions.qc;h=28f86af2f0dc54ceb2ee9ab4286f8cf021609b07;hp=0b3501b2f6e42eeaca259bd56f0b4d3153472aa4;hb=f2e164498652107708fdfc9103412d219b035a28;hpb=1e69841aa48c5f20c383321839e0bc82d79eb6ad diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 0b3501b2f6..28f86af2f0 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -21,8 +21,8 @@ string ColoredTeamName(float t); string admin_name(void) { - if(cvar_string("sv_adminnick") != "") - return cvar_string("sv_adminnick"); + if(autocvar_sv_adminnick != "") + return autocvar_sv_adminnick; else return "SERVER ADMIN"; } @@ -92,16 +92,16 @@ string GetAdvancedDeathReports(entity enPlayer) // Extra fragmessage information else strPlayerPingColor = "^2"; - if((cvar("sv_fragmessage_information_stats")) && (enPlayer.health >= 1)) + if((autocvar_sv_fragmessage_information_stats) && (enPlayer.health >= 1)) strMessage = strcat(strMessage, "\n^7(Health ^1", ftos(nPlayerHealth), "^7 / Armor ^2", ftos(nPlayerArmor), "^7)"); - if(cvar("sv_fragmessage_information_ping")) { + if(autocvar_sv_fragmessage_information_ping) { if(clienttype(enPlayer) == CLIENTTYPE_BOT) // Bots have no ping strMessage = strcat(strMessage, " ^7(^2Bot"); else strMessage = strcat(strMessage, " ^7(Ping ", strPlayerPingColor, ftos(nPlayerPing), "ms"); - if(cvar("sv_fragmessage_information_handicap")) - if(cvar("sv_fragmessage_information_handicap") == 2) + if(autocvar_sv_fragmessage_information_handicap) + if(autocvar_sv_fragmessage_information_handicap == 2) if(nPlayerHandicap <= 1) strMessage = strcat(strMessage, "^7 / Handicap ^2Off^7)"); else @@ -110,8 +110,8 @@ string GetAdvancedDeathReports(entity enPlayer) // Extra fragmessage information strMessage = strcat(strMessage, "^7 / Handicap ^2", ftos(nPlayerHandicap), "^7)"); else strMessage = strcat(strMessage, "^7)"); - } else if(cvar("sv_fragmessage_information_handicap")) { - if(cvar("sv_fragmessage_information_handicap") == 2) + } else if(autocvar_sv_fragmessage_information_handicap) { + if(autocvar_sv_fragmessage_information_handicap == 2) if(nPlayerHandicap <= 1) strMessage = strcat(strMessage, "\n^7(Handicap ^2Off^7)"); else @@ -135,29 +135,29 @@ void GameLogEcho(string s) string fn; float matches; - if (cvar("sv_eventlog_files")) + if (autocvar_sv_eventlog_files) { if (!logfile_open) { logfile_open = TRUE; - matches = cvar("sv_eventlog_files_counter") + 1; + matches = autocvar_sv_eventlog_files_counter + 1; cvar_set("sv_eventlog_files_counter", ftos(matches)); fn = ftos(matches); if (strlen(fn) < 8) fn = strcat(substring("00000000", 0, 8 - strlen(fn)), fn); - fn = strcat(cvar_string("sv_eventlog_files_nameprefix"), fn, cvar_string("sv_eventlog_files_namesuffix")); + fn = strcat(autocvar_sv_eventlog_files_nameprefix, fn, autocvar_sv_eventlog_files_namesuffix); logfile = fopen(fn, FILE_APPEND); fputs(logfile, ":logversion:3\n"); } if (logfile >= 0) { - if (cvar("sv_eventlog_files_timestamps")) + if (autocvar_sv_eventlog_files_timestamps) fputs(logfile, strcat(":time:", strftime(TRUE, "%Y-%m-%d %H:%M:%S", "\n", s, "\n"))); else fputs(logfile, strcat(s, "\n")); } } - if (cvar("sv_eventlog_console")) + if (autocvar_sv_eventlog_console) { print(s, "\n"); } @@ -181,6 +181,7 @@ void GameLogClose() vector PL_VIEW_OFS; vector PL_MIN; vector PL_MAX; +vector PL_HEAD; vector PL_CROUCH_VIEW_OFS; vector PL_CROUCH_MIN; vector PL_CROUCH_MAX; @@ -188,12 +189,13 @@ vector PL_CROUCH_MAX; float spawnpoint_nag; void relocate_spawnpoint() { - PL_VIEW_OFS = stov(cvar_string("sv_player_viewoffset")); - PL_MIN = stov(cvar_string("sv_player_mins")); - PL_MAX = stov(cvar_string("sv_player_maxs")); - PL_CROUCH_VIEW_OFS = stov(cvar_string("sv_player_crouch_viewoffset")); - PL_CROUCH_MIN = stov(cvar_string("sv_player_crouch_mins")); - PL_CROUCH_MAX = stov(cvar_string("sv_player_crouch_maxs")); + PL_VIEW_OFS = stov(autocvar_sv_player_viewoffset); + PL_MIN = stov(autocvar_sv_player_mins); + PL_MAX = stov(autocvar_sv_player_maxs); + PL_HEAD = stov(autocvar_sv_player_headsize); + PL_CROUCH_VIEW_OFS = stov(autocvar_sv_player_crouch_viewoffset); + PL_CROUCH_MIN = stov(autocvar_sv_player_crouch_mins); + PL_CROUCH_MAX = stov(autocvar_sv_player_crouch_maxs); // nudge off the floor setorigin(self, self.origin + '0 0 1'); @@ -211,7 +213,7 @@ void relocate_spawnpoint() print(" needs to be moved out of solid, e.g. by '", ftos(self.origin_x - o_x)); print(" ", ftos(self.origin_y - o_y)); print(" ", ftos(self.origin_z - o_z), "'\n"); - if (cvar("g_spawnpoints_auto_move_out_of_solid")) + if (autocvar_g_spawnpoints_auto_move_out_of_solid) { if (!spawnpoint_nag) print("\{1}^1NOTE: this map needs FIXING (it contains spawnpoints in solid, see server log)\n"); @@ -235,7 +237,7 @@ void relocate_spawnpoint() if (self.team) have_team_spawns = 1; - if (cvar("r_showbboxes")) + if (autocvar_r_showbboxes) { // show where spawnpoints point at too makevectors(self.angles); @@ -466,28 +468,6 @@ string formatmessage(string msg) replacement = ftos(vlen(self.velocity - self.velocity_z * '0 0 1')); else if (escape == "S") replacement = ftos(vlen(self.velocity)); - else if (escape == "v") { - float weapon_number; - local entity stats; - - if(self.classname == "spectator") - stats = self.enemy; - else - stats = self; - - weapon_number = stats.weapon; - - if (!weapon_number) - weapon_number = stats.switchweapon; - - if (!weapon_number) - weapon_number = stats.cnt; - - if(stats.cvar_cl_accuracy_data_share && stats.stats_fired[weapon_number - 1]) - replacement = ftos(bound(0, floor(100 * stats.stats_hit[weapon_number - 1] / stats.stats_fired[weapon_number - 1]), 100)); - else - replacement = "~"; // or something to indicate NULL, not available - } msg = strcat(substring(msg, 0, p), replacement, substring(msg, p+2, strlen(msg) - (p+2))); p = p + strlen(replacement); @@ -578,9 +558,19 @@ void GetCvars_handleFloatOnce(string thisname, float f, .float field, string nam stuffcmd(self, strcat("cl_cmd sendcvar ", name, "\n")); } } -string W_FixWeaponOrder_ForceComplete(string s); -string W_FixWeaponOrder_AllowIncomplete(string s); float w_getbestweapon(entity e); +string W_FixWeaponOrder_ForceComplete_AndBuildImpulseList(string wo) +{ + string o; + o = W_FixWeaponOrder_ForceComplete(wo); + if(self.weaponorder_byimpulse) + { + strunzone(self.weaponorder_byimpulse); + self.weaponorder_byimpulse = string_null; + } + self.weaponorder_byimpulse = strzone(W_FixWeaponOrder_BuildImpulseList(o)); + return o; +} void GetCvars(float f) { string s; @@ -597,7 +587,7 @@ void GetCvars(float f) GetCvars_handleFloat(s, f, cvar_cl_shownames, "cl_shownames"); GetCvars_handleString(s, f, cvar_g_xonoticversion, "g_xonoticversion"); GetCvars_handleFloat(s, f, cvar_cl_handicap, "cl_handicap"); - GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriority, "cl_weaponpriority", W_FixWeaponOrder_ForceComplete); + GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriority, "cl_weaponpriority", W_FixWeaponOrder_ForceComplete_AndBuildImpulseList); GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[0], "cl_weaponpriority0", W_FixWeaponOrder_AllowIncomplete); GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[1], "cl_weaponpriority1", W_FixWeaponOrder_AllowIncomplete); GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[2], "cl_weaponpriority2", W_FixWeaponOrder_AllowIncomplete); @@ -625,6 +615,7 @@ void GetCvars(float f) GetCvars_handleFloat(s, f, cvar_cl_forceplayermodelsfromxonotic, "cl_forceplayermodelsfromxonotic"); #endif GetCvars_handleFloatOnce(s, f, cvar_cl_gunalign, "cl_gunalign"); + GetCvars_handleFloat(s, f, cvar_cl_allow_uid2name, "cl_allow_uid2name"); // fixup of switchweapon (needed for LMS or when spectating is disabled, as PutClientInServer comes too early) if (f > 0) @@ -647,8 +638,8 @@ float fexists(string f) void backtrace(string msg) { float dev, war; - dev = cvar("developer"); - war = cvar("prvm_backtraceforwarnings"); + dev = autocvar_developer; + war = autocvar_prvm_backtraceforwarnings; cvar_set("developer", "1"); cvar_set("prvm_backtraceforwarnings", "1"); print("\n"); @@ -803,6 +794,8 @@ vector randompos(vector m1, vector m2) return v; }; +//#NO AUTOCVARS START + float g_pickup_shells; float g_pickup_shells_max; float g_pickup_nails; @@ -842,6 +835,7 @@ float g_pickup_ammo_anyway; float g_pickup_weapons_anyway; float g_weaponarena; float g_weaponarena_random; +float g_weaponarena_random_with_laser; string g_weaponarena_list; float g_weaponspeedfactor; float g_weaponratefactor; @@ -886,8 +880,10 @@ float want_weapon(string cvarprefix, entity weaponinfo, float allguns) t = (weaponinfo.spawnflags & WEP_FLAG_NORMAL); else if(t < -1) t = 0; - else if (g_race || g_cts) - t = (i == WEP_LASER); + else if (g_race) + t = (i == WEP_LASER || i == WEP_SHOTGUN); + else if (g_cts) + t = (i == WEP_SHOTGUN); else if (g_nexball) t = 0; // weapon is set a few lines later else @@ -982,20 +978,28 @@ void readplayerstartcvars() g_weaponarena_random = cvar("g_weaponarena_random"); else g_weaponarena_random = 0; + g_weaponarena_random_with_laser = cvar("g_weaponarena_random_with_laser"); if (g_weaponarena) { start_weapons = g_weaponarena; - if (g_weaponarena & (WEPBIT_GRENADE_LAUNCHER | WEPBIT_MINE_LAYER | WEPBIT_HAGAR | WEPBIT_ROCKET_LAUNCHER)) - start_ammo_rockets = 999; - if (g_weaponarena & WEPBIT_SHOTGUN) - start_ammo_shells = 999; - if (g_weaponarena & (WEPBIT_ELECTRO | WEPBIT_CRYLINK | WEPBIT_NEX | WEPBIT_MINSTANEX | WEPBIT_HLAC | WEPBIT_HOOK)) - start_ammo_cells = 999; - if (g_weaponarena & (WEPBIT_UZI | WEPBIT_CAMPINGRIFLE)) - start_ammo_nails = 999; - if (g_weaponarena & WEPBIT_HOOK) - start_ammo_fuel = 999; + for (j = WEP_FIRST; j <= WEP_LAST; ++j) + { + e = get_weaponinfo(j); + if(start_weapons & e.weapons) + { + if(e.items & IT_ROCKETS) + start_ammo_rockets = 999; + if(e.items & IT_SHELLS) + start_ammo_shells = 999; + if(e.items & IT_CELLS) + start_ammo_cells = 999; + if(e.items & IT_NAILS) + start_ammo_nails = 999; + if(e.items & IT_FUEL) + start_ammo_fuel = 999; + } + } start_items |= IT_UNLIMITED_AMMO; } else if (g_minstagib) @@ -1162,8 +1166,6 @@ float sv_pitch_min; float sv_pitch_max; float sv_pitch_fixyaw; -float sv_accuracy_data_share; - void readlevelcvars(void) { // first load all the mutators @@ -1171,8 +1173,13 @@ void readlevelcvars(void) MUTATOR_ADD(mutator_nix); if(cvar("g_dodging")) MUTATOR_ADD(mutator_dodging); - if(cvar("g_rocket_flying") || (cvar("g_balance_rocketlauncher_detonatedelay") == 0 && stof(cvar_defstring("g_balance_rocketlauncher_detonatedelay")) != 0)) + if(cvar("g_rocket_flying")) MUTATOR_ADD(mutator_rocketflying); + if(cvar("g_vampire")) + MUTATOR_ADD(mutator_vampire); + + if(cvar("sv_allow_fullbright")) + serverflags |= SERVERFLAG_ALLOW_FULLBRIGHT; g_bugrigs = cvar("g_bugrigs"); g_bugrigs_planar_movement = cvar("g_bugrigs_planar_movement"); @@ -1209,15 +1216,15 @@ void readlevelcvars(void) sv_gentle = cvar("sv_gentle"); sv_foginterval = cvar("sv_foginterval"); g_cloaked = cvar("g_cloaked"); + if(g_cts) + g_cloaked = 1; // always enable cloak in CTS g_jump_grunt = cvar("g_jump_grunt"); g_footsteps = cvar("g_footsteps"); g_grappling_hook = cvar("g_grappling_hook"); g_jetpack = cvar("g_jetpack"); - g_laserguided_missile = cvar("g_laserguided_missile"); g_midair = cvar("g_midair"); g_minstagib = cvar("g_minstagib"); g_norecoil = cvar("g_norecoil"); - g_vampire = cvar("g_vampire"); g_bloodloss = cvar("g_bloodloss"); sv_maxidle = cvar("sv_maxidle"); sv_maxidle_spectatorsareidle = cvar("sv_maxidle_spectatorsareidle"); @@ -1311,30 +1318,10 @@ void readlevelcvars(void) sv_pitch_max = cvar("sv_pitch_max"); sv_pitch_fixyaw = cvar("sv_pitch_fixyaw"); - sv_accuracy_data_share = boolean(cvar("sv_accuracy_data_share")); - readplayerstartcvars(); } -/* -// TODO sound pack system -string soundpack; - -string precache_sound_builtin (string s) = #19; -void(entity e, float chan, string samp, float vol, float atten) sound_builtin = #8; -string precache_sound(string s) -{ - return precache_sound_builtin(strcat(soundpack, s)); -} -void play2(entity e, string filename) -{ - stuffcmd(e, strcat("play2 ", soundpack, filename, "\n")); -} -void sound(entity e, float chan, string samp, float vol, float atten) -{ - sound_builtin(e, chan, strcat(soundpack, samp), vol, atten); -} -*/ +//#NO AUTOCVARS END // Sound functions string precache_sound (string s) = #19; @@ -1363,7 +1350,7 @@ float sound_allowed(float dest, entity e) if (e == msg_entity) return TRUE; // sounds by players can be removed - if (cvar("bot_sound_monopoly")) + if (autocvar_bot_sound_monopoly) if (clienttype(e) == CLIENTTYPE_REAL) return FALSE; // anything else may pass @@ -1509,7 +1496,7 @@ void play2team(float t, string filename) { local entity head; - if (cvar("bot_sound_monopoly")) + if (autocvar_bot_sound_monopoly) return; FOR_EACH_REALPLAYER(head) @@ -1521,7 +1508,7 @@ void play2team(float t, string filename) void play2all(string samp) { - if (cvar("bot_sound_monopoly")) + if (autocvar_bot_sound_monopoly) return; sound(world, CHAN_AUTO, samp, VOL_BASE, ATTN_NONE); @@ -1586,12 +1573,12 @@ void precache() } #ifdef TTURRETS_ENABLED - if (cvar("g_turrets")) + if (autocvar_g_turrets) turrets_precash(); #endif // Precache all player models if desired - if (cvar("sv_precacheplayermodels")) + if (autocvar_sv_precacheplayermodels) { PrecachePlayerSounds("sound/player/default.sounds"); precache_all_playermodels("models/player/*.zym"); @@ -1601,22 +1588,22 @@ void precache() precache_all_playermodels("models/player/*.iqm"); } - if (cvar("sv_defaultcharacter")) + if (autocvar_sv_defaultcharacter) { string s; - s = cvar_string("sv_defaultplayermodel_red"); + s = autocvar_sv_defaultplayermodel_red; if (s != "") precache_playermodel(s); - s = cvar_string("sv_defaultplayermodel_blue"); + s = autocvar_sv_defaultplayermodel_blue; if (s != "") precache_playermodel(s); - s = cvar_string("sv_defaultplayermodel_yellow"); + s = autocvar_sv_defaultplayermodel_yellow; if (s != "") precache_playermodel(s); - s = cvar_string("sv_defaultplayermodel_pink"); + s = autocvar_sv_defaultplayermodel_pink; if (s != "") precache_playermodel(s); - s = cvar_string("sv_defaultplayermodel"); + s = autocvar_sv_defaultplayermodel; if (s != "") precache_playermodel(s); } @@ -1676,7 +1663,7 @@ void precache() precache_sound ("weapons/hook_impact.wav"); // hook } - if(cvar("sv_precacheweapons")) + if(autocvar_sv_precacheweapons) { //precache weapon models/sounds local float wep; @@ -1719,7 +1706,6 @@ void precache() #define INITPRIO_FIRST 0 #define INITPRIO_GAMETYPE 0 #define INITPRIO_GAMETYPE_FALLBACK 1 -#define INITPRIO_CVARS 5 #define INITPRIO_FINDTARGET 10 #define INITPRIO_DROPTOFLOOR 20 #define INITPRIO_SETLOCATION 90 @@ -1768,6 +1754,14 @@ void objerror(string s) objerror_builtin(s); } +.float remove_except_protected_forbidden; +void remove_except_protected(entity e) +{ + if(e.remove_except_protected_forbidden) + error("not allowed to remove this at this point"); + remove_builtin(e); +} + void remove_unsafely(entity e) { remove_builtin(e); @@ -1818,6 +1812,11 @@ void InitializeEntitiesRun() entity startoflist; startoflist = initialize_entity_first; initialize_entity_first = world; + remove = remove_except_protected; + for (self = startoflist; self; self = self.initialize_entity_next) + { + self.remove_except_protected_forbidden = 1; + } for (self = startoflist; self; ) { entity e; @@ -1827,6 +1826,7 @@ void InitializeEntitiesRun() self.initialize_entity_order = 0; self.initialize_entity = func_null; self.initialize_entity_next = world; + self.remove_except_protected_forbidden = 0; if (self.classname == "initialize_entity") { entity e_old; @@ -1835,9 +1835,16 @@ void InitializeEntitiesRun() self = e_old; } //dprint("Delayed initialization: ", self.classname, "\n"); - func(); + if(func != func_null) + func(); + else + { + eprint(self); + backtrace(strcat("Null function in: ", self.classname, "\n")); + } self = e; } + remove = remove_unsafely; } .float uncustomizeentityforclient_set; @@ -2031,11 +2038,12 @@ float WarpZone_Projectile_Touch_ImpactFilter_Callback() } #define PROJECTILE_TOUCH if(WarpZone_Projectile_Touch()) return -float MAX_IPBAN_URIS = 16; - -float URI_GET_DISCARD = 0; -float URI_GET_IPBAN = 1; -float URI_GET_IPBAN_END = 16; +float MAX_IPBAN_URIS = 16; + +float URI_GET_DISCARD = 0; +float URI_GET_IPBAN = 1; +float URI_GET_IPBAN_END = 16; +float URI_GET_PLAYERSTATS_SENT = 17; void URI_Get_Callback(float id, float status, string data) { @@ -2052,6 +2060,10 @@ void URI_Get_Callback(float id, float status, string data) // online ban list OnlineBanList_URI_Get_Callback(id, status, data); } + else if (id == URI_GET_PLAYERSTATS_SENT) + { + PlayerStats_Sent_URI_Get_Callback(id, status, data); + } else { print("Received HTTP request data for an invalid id ", ftos(id), ".\n"); @@ -2067,10 +2079,6 @@ void print_to(entity e, string s) } string uid2name(string myuid) { - // TODO TODO TODO! - // store uid in separate uid2name db IF CLIENT ALLOWS THIS - // - make it global for all mods - // perhaps show 10 first digits here if missing name? string s; s = db_get(ServerProgsDB, strcat("uid2name", myuid)); @@ -2118,13 +2126,30 @@ void race_writeTime(string map, float t, string myuid) else rr = RACE_RECORD; - float pos; - pos = race_readPos(map, t); + float newpos; + newpos = race_readPos(map, t); - if(pos) { // don't even ALLOW writing unranked times into the db, less stuff to worry about in other code then :-) - db_put(ServerProgsDB, strcat(map, rr, "time", ftos(pos)), ftos(t)); - db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(pos)), myuid); + float i, prevpos; + for(i = 1; i <= RANKINGS_CNT; ++i) + { + if(race_readUID(map, i) == myuid) + prevpos = i; + } + if (prevpos) { // player improved his existing record, only have to iterate on ranks between new and old recs + for (i = prevpos; i > newpos; --i) { + db_put(ServerProgsDB, strcat(map, rr, "time", ftos(i)), ftos(race_readTime(map, i - 1))); + db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(i)), race_readUID(map, i - 1)); + } + } else { // player has no ranked record yet + for (i = RANKINGS_CNT; i > newpos; --i) { + db_put(ServerProgsDB, strcat(map, rr, "time", ftos(i)), ftos(race_readTime(map, i - 1))); + db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(i)), race_readUID(map, i - 1)); + } } + + // store new time itself + db_put(ServerProgsDB, strcat(map, rr, "time", ftos(newpos)), ftos(t)); + db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(newpos)), myuid); } string race_readName(string map, float pos) @@ -2253,15 +2278,16 @@ string getrankings() return strcat("Records for ", map, ":\n", s); } -const float LADDER_FIRSTPOINT = 100; -const float LADDER_CNT = 10; // position X still gives LADDER_FIRSTPOINT/X points -const float LADDER_SIZE = 30; // ladder shows the top X players +#define LADDER_FIRSTPOINT 100 +#define LADDER_CNT 10 + // position X still gives LADDER_FIRSTPOINT/X points +#define LADDER_SIZE 30 + // ladder shows the top X players string top_uids[LADDER_SIZE]; float top_scores[LADDER_SIZE]; -float UIDCNT; string getladder() { - float i, j, k; + float i, j, k, uidcnt; string s, temp_s; s = ""; @@ -2282,17 +2308,17 @@ string getladder() for (i = 0; i <= LADDER_CNT; ++i) { // i = 0 because it is the speed award if(i == 0) // speed award { - if(stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/speed"))) == 0); - break; + if(stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, rr, "speed/speed"))) == 0) + continue; - myuid = db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/crypto_idfp")); + myuid = db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, rr, "speed/crypto_idfp")); } else // normal record, if it exists (else break) { - if(race_readTime(GetMapname(), i) == 0) - break; + if(race_readTime(MapInfo_Map_bspname, i) == 0) + continue; - myuid = race_readUID(GetMapname(), i); + myuid = race_readUID(MapInfo_Map_bspname, i); } // string s contains: @@ -2305,8 +2331,8 @@ string getladder() temp_s = db_get(TemporaryDB, strcat("ladder", myuid)); if (temp_s == "") { - db_put(TemporaryDB, strcat("uid", ftos(UIDCNT)), myuid); - ++UIDCNT; + db_put(TemporaryDB, strcat("uid", ftos(uidcnt)), myuid); + ++uidcnt; for (j = 0; j <= LADDER_CNT + 1; ++j) { if(j != LADDER_CNT + 1) @@ -2359,7 +2385,7 @@ string getladder() float thiscnt; string thisuid; - for (i = 0; i <= UIDCNT; ++i) // for each known uid + for (i = 0; i <= uidcnt; ++i) // for each known uid { thisuid = db_get(TemporaryDB, strcat("uid", ftos(i))); temp_s = db_get(TemporaryDB, strcat("ladder", thisuid)); @@ -2394,10 +2420,17 @@ string getladder() s = strcat(s, " ^7Speed awards ^3| ^7Name"); s = strcat(s, "\n^3----+--------"); - for (i = 1; i <= LADDER_CNT; ++i) + for (i = 1; i <= min(9, LADDER_CNT); ++i) { s = strcat(s, "+-----"); } +#if LADDER_CNT > 9 + for (i = 1; i <= LADDER_CNT - 9; ++i) + { + s = strcat(s, "+------"); + } +#endif + s = strcat(s, "+--------------+--------------------\n"); for (i = 0; i < LADDER_SIZE; ++i) @@ -2408,10 +2441,17 @@ string getladder() continue; s = strcat(s, strpad(4, race_placeName(i+1)), "^3| ^7"); // pos s = strcat(s, strpad(7, argv(LADDER_CNT+1)), "^3| ^7"); // total - for (j = 1; j <= LADDER_CNT; ++j) + for (j = 1; j <= min(9, LADDER_CNT); ++j) { s = strcat(s, strpad(4, argv(j)), "^3| ^7"); // 1st, 2nd, 3rd etc cnt } +#if LADDER_CNT > 9 + for (j = 10; j <= LADDER_CNT; ++j) + { + s = strcat(s, strpad(4, argv(j)), " ^3| ^7"); // 1st, 2nd, 3rd etc cnt + } +#endif + s = strcat(s, strpad(13, argv(0)), "^3| ^7"); // speed award cnt s = strcat(s, uid2name(top_uids[i]), "\n"); // name } @@ -2639,7 +2679,7 @@ vector shotorg_adjust_values(vector vecs, float y_is_right, float visual, float string s; vector v; - if (cvar("g_shootfromeye")) + if (autocvar_g_shootfromeye) { if (visual) { @@ -2651,7 +2691,7 @@ vector shotorg_adjust_values(vector vecs, float y_is_right, float visual, float vecs_z = 0; } } - else if (cvar("g_shootfromcenter")) + else if (autocvar_g_shootfromcenter) { if (visual) { @@ -2663,7 +2703,7 @@ vector shotorg_adjust_values(vector vecs, float y_is_right, float visual, float vecs_z -= 2; } } - else if ((s = cvar_string("g_shootfromfixedorigin")) != "") + else if ((s = autocvar_g_shootfromfixedorigin) != "") { v = stov(s); if (y_is_right) @@ -2673,9 +2713,9 @@ vector shotorg_adjust_values(vector vecs, float y_is_right, float visual, float vecs_y = v_y; vecs_z = v_z; } - else if (cvar("g_shootfromclient")) + else if (autocvar_g_shootfromclient) { - vecs = shotorg_adjustfromclient(vecs, y_is_right, (cvar("g_shootfromclient") >= 2), algn); + vecs = shotorg_adjustfromclient(vecs, y_is_right, (autocvar_g_shootfromclient >= 2), algn); } return vecs; }