X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fmiscfunctions.qc;h=b074164a5f5dbd90d0750b56e1e78a214cc37ecf;hp=0b3501b2f6e42eeaca259bd56f0b4d3153472aa4;hb=02ebfe5d7fdbff506b9beec14375d04c33066c8e;hpb=1e69841aa48c5f20c383321839e0bc82d79eb6ad diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 0b3501b2f6..b074164a5f 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -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; @@ -191,6 +192,7 @@ 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_HEAD = stov(cvar_string("sv_player_headsize")); 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")); @@ -578,9 +580,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 +609,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 +637,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) @@ -1171,7 +1184,7 @@ 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); g_bugrigs = cvar("g_bugrigs"); @@ -1719,7 +1732,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 @@ -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 }