X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmiscfunctions.qc;h=4babf32b22eb8c9e8cb8db51b5c7b066b488becf;hb=6e0ac89b3f58dbf7d1b0edc7e62968b5841ee59c;hp=965c2743b590878c0e0e4c7bc8f2eef42e82c760;hpb=2b2f4843f735c217616212640a58e88f5dc2a5f0;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 965c2743b..4babf32b2 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -8,6 +8,21 @@ void crosshair_trace(entity pl) { traceline_antilag(pl, pl.cursor_trace_start, pl.cursor_trace_start + normalize(pl.cursor_trace_endpos - pl.cursor_trace_start) * MAX_SHOT_DISTANCE, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl)); } +void crosshair_trace_plusvisibletriggers(entity pl) +{ + entity first; + entity e; + first = findchainfloat(solid, SOLID_TRIGGER); + + for (e = first; e; e = e.chain) + if (e.model != "") + e.solid = SOLID_BSP; + + crosshair_trace(pl); + + for (e = first; e; e = e.chain) + e.solid = SOLID_TRIGGER; +} void WarpZone_traceline_antilag (entity source, vector v1, vector v2, float nomonst, entity forent, float lag); void WarpZone_crosshair_trace(entity pl) { @@ -136,25 +151,9 @@ 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; - float spawnpoint_nag; void relocate_spawnpoint() { - 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'); @@ -537,7 +536,6 @@ void GetCvars(float f) MUTATOR_CALLHOOK(GetCvars); GetCvars_handleFloat(s, f, autoswitch, "cl_autoswitch"); GetCvars_handleFloat(s, f, cvar_cl_autoscreenshot, "cl_autoscreenshot"); - GetCvars_handleFloat(s, f, cvar_cl_playerdetailreduction, "cl_playerdetailreduction"); GetCvars_handleString(s, f, cvar_g_xonoticversion, "g_xonoticversion"); GetCvars_handleFloat(s, f, cvar_cl_handicap, "cl_handicap"); GetCvars_handleFloat(s, f, cvar_cl_clippedspectating, "cl_clippedspectating"); @@ -1007,20 +1005,6 @@ void readplayerstartcvars() if (g_jetpack) start_items |= IT_JETPACK; - if (g_weapon_stay == 2) - { - if (!start_ammo_shells) start_ammo_shells = g_pickup_shells; - if (!start_ammo_nails) start_ammo_nails = g_pickup_nails; - if (!start_ammo_cells) start_ammo_cells = g_pickup_cells; - if (!start_ammo_rockets) start_ammo_rockets = g_pickup_rockets; - if (!start_ammo_fuel) start_ammo_fuel = g_pickup_fuel; - if (!warmup_start_ammo_shells) warmup_start_ammo_shells = g_pickup_shells; - if (!warmup_start_ammo_nails) warmup_start_ammo_nails = g_pickup_nails; - if (!warmup_start_ammo_cells) warmup_start_ammo_cells = g_pickup_cells; - if (!warmup_start_ammo_rockets) warmup_start_ammo_rockets = g_pickup_rockets; - if (!warmup_start_ammo_fuel) warmup_start_ammo_fuel = g_pickup_fuel; - } - MUTATOR_CALLHOOK(SetStartItems); for (i = WEP_FIRST; i <= WEP_LAST; ++i) @@ -1086,6 +1070,12 @@ void readlevelcvars(void) MUTATOR_ADD(mutator_rocketflying); if(cvar("g_vampire")) MUTATOR_ADD(mutator_vampire); + if(cvar("g_spawn_near_teammate")) + MUTATOR_ADD(mutator_spawn_near_teammate); + + // is this a mutator? is this a mode? + if(cvar("g_sandbox")) + MUTATOR_ADD(sandbox); if(cvar("sv_allow_fullbright")) serverflags |= SERVERFLAG_ALLOW_FULLBRIGHT; @@ -1115,11 +1105,6 @@ void readlevelcvars(void) #ifdef ALLOW_FORCEMODELS sv_clforceplayermodels = cvar("sv_clforceplayermodels"); #endif - sv_loddistance1 = cvar("sv_loddistance1"); - sv_loddistance2 = cvar("sv_loddistance2"); - - if(sv_loddistance2 <= sv_loddistance1) - sv_loddistance2 = 1073741824; // enough to turn off LOD 2 reliably sv_clones = cvar("sv_clones"); sv_gentle = cvar("sv_gentle"); @@ -1445,15 +1430,12 @@ void precache_playermodel(string m) if(substring(m, -9,5) == "_lod2") return; precache_model(m); - if(sv_loddistance1) - { - f = strcat(substring(m, 0, -5), "_lod1", substring(m, -4, -1)); - if(fexists(f)) - precache_model(f); - f = strcat(substring(m, 0, -5), "_lod2", substring(m, -4, -1)); - if(fexists(f)) - precache_model(f); - } + f = strcat(substring(m, 0, -5), "_lod1", substring(m, -4, -1)); + if(fexists(f)) + precache_model(f); + f = strcat(substring(m, 0, -5), "_lod2", substring(m, -4, -1)); + if(fexists(f)) + precache_model(f); globhandle = search_begin(strcat(m, "_*.sounds"), TRUE, FALSE); if (globhandle < 0) @@ -2027,14 +2009,6 @@ void URI_Get_Callback(float id, float status, string data) } } -void print_to(entity e, string s) -{ - if (e) - sprint(e, strcat(s, "\n")); - else - print(s, "\n"); -} - string uid2name(string myuid) { string s; s = db_get(ServerProgsDB, strcat("/uid2name/", myuid)); @@ -2147,292 +2121,6 @@ string race_placeName(float pos) { else return strcat(ftos(pos), "th"); } -string getrecords(float page) // 50 records per page -{ - float rec; - string h; - float r; - float i; - string s; - - rec = 0; - - s = ""; - - if (g_ctf) - { - for (i = page * 200; i < MapInfo_count && i < page * 200 + 200; ++i) - { - if (MapInfo_Get_ByID(i)) - { - r = stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/captimerecord/time"))); - if (r == 0) - continue; - // TODO: uid2name - h = db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/captimerecord/netname")); - s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-6, ftos_decimals(r, 2)), " ", h, "\n"); - ++rec; - } - } - } - - if (g_race) - { - for (i = page * 200; i < MapInfo_count && i < page * 200 + 200; ++i) - { - if (MapInfo_Get_ByID(i)) - { - r = race_readTime(MapInfo_Map_bspname, 1); - if (r == 0) - continue; - h = race_readName(MapInfo_Map_bspname, 1); - s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-8, TIME_ENCODED_TOSTRING(r)), " ", h, "\n"); - ++rec; - } - } - } - - if (g_cts) - { - for (i = page * 200; i < MapInfo_count && i < page * 200 + 200; ++i) - { - if (MapInfo_Get_ByID(i)) - { - r = race_readTime(MapInfo_Map_bspname, 1); - if (r == 0) - continue; - h = race_readName(MapInfo_Map_bspname, 1); - s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-8, TIME_ENCODED_TOSTRING(r)), " ", h, "\n"); - ++rec; - } - } - } - - MapInfo_ClearTemps(); - - if (s == "" && page == 0) - return "No records are available on this server.\n"; - else - return s; -} - -string getrankings() -{ - string n; - float t; - float i; - string s; - string p; - string map; - - s = ""; - - map = GetMapname(); - - for (i = 1; i <= RANKINGS_CNT; ++i) - { - t = race_readTime(map, i); - if (t == 0) - continue; - n = race_readName(map, i); - p = race_placeName(i); - s = strcat(s, strpad(8, p), " ", strpad(-8, TIME_ENCODED_TOSTRING(t)), " ", n, "\n"); - } - - MapInfo_ClearTemps(); - - if (s == "") - return strcat("No records are available for the map: ", map, "\n"); - else - return strcat("Records for ", map, ":\n", s); -} - -#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]; -string getladder() -{ - float i, j, k, uidcnt; - string s, temp_s; - - s = ""; - temp_s = ""; - - string rr; - if(g_cts) - rr = CTS_RECORD; - else - rr = RACE_RECORD; - - string myuid; - - for (k = 0; k < MapInfo_count; ++k) - { - if (MapInfo_Get_ByID(k)) - { - 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(MapInfo_Map_bspname, rr, "speed/speed"))) == 0) - continue; - - myuid = db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, rr, "speed/crypto_idfp")); - } - else // normal record, if it exists (else break) - { - if(race_readTime(MapInfo_Map_bspname, i) == 0) - continue; - - myuid = race_readUID(MapInfo_Map_bspname, i); - } - - // string s contains: - // arg 0 = # of speed recs - // arg 1 = # of 1st place recs - // arg 2 = # of 2nd place recs - // ... etc - // LADDER_CNT+1 = total points - - temp_s = db_get(TemporaryDB, strcat("ladder", myuid)); - if (temp_s == "") - { - db_put(TemporaryDB, strcat("uid", ftos(uidcnt)), myuid); - ++uidcnt; - for (j = 0; j <= LADDER_CNT + 1; ++j) - { - if(j != LADDER_CNT + 1) - temp_s = strcat(temp_s, "0 "); - else - temp_s = strcat(temp_s, "0"); - } - } - - tokenize_console(temp_s); - s = ""; - - if(i == 0) // speed award - for (j = 0; j <= LADDER_CNT; ++j) // loop over each arg in the string - { - if(j == 0) // speed award - s = strcat(s, ftos(stof(argv(j)) +1)); // add 1 to speed rec count and write - else - s = strcat(s, " ", argv(j)); // just copy over everything else - } - else // record - for (j = 0; j <= LADDER_CNT; ++j) // loop over each arg in the string - { - if(j == 0) - s = strcat(s, argv(j)); // speed award, dont prefix with " " - else if(j == i) // wanted rec! - s = strcat(s, " ", ftos(stof(argv(j)) +1)); // update argv(j) - else - s = strcat(s, " ", argv(j)); // just copy over everything else - } - - // total points are (by default) calculated like this: - // speedrec = floor(100 / 10) = 10 points - // 1st place = floor(100 / 1) = 100 points - // 2nd place = floor(100 / 2) = 50 points - // 3rd place = floor(100 / 3) = 33 points - // 4th place = floor(100 / 4) = 25 points - // 5th place = floor(100 / 5) = 20 points - // ... etc - - if(i == 0) - s = strcat(s, " ", ftos(stof(argv(LADDER_CNT+1)) + LADDER_FIRSTPOINT / 10)); // speed award, add LADDER_FIRSTPOINT / 10 points - else - s = strcat(s, " ", ftos(stof(argv(LADDER_CNT+1)) + floor(LADDER_FIRSTPOINT / i))); // record, add LADDER_FIRSTPOINT / i points - - db_put(TemporaryDB, strcat("ladder", myuid), s); - } - } - } - - float thiscnt; - string thisuid; - 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)); - tokenize_console(temp_s); - thiscnt = stof(argv(LADDER_CNT+1)); - - if(thiscnt > top_scores[LADDER_SIZE-1]) - for (j = 0; j < LADDER_SIZE; ++j) // for each place in ladder - { - if(thiscnt > top_scores[j]) - { - for (k = LADDER_SIZE-1; k >= j; --k) - { - top_uids[k] = top_uids[k-1]; - top_scores[k] = top_scores[k-1]; - } - top_uids[j] = thisuid; - top_scores[j] = thiscnt; - break; - } - } - } - - s = "^3-----------------------\n\n"; - - s = strcat(s, "Pos ^3|"); - s = strcat(s, " ^7Total ^3|"); - for (i = 1; i <= LADDER_CNT; ++i) - { - s = strcat(s, " ^7", race_placeName(i), " ^3|"); - } - s = strcat(s, " ^7Speed awards ^3| ^7Name"); - - s = strcat(s, "\n^3----+--------"); - 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) - { - temp_s = db_get(TemporaryDB, strcat("ladder", top_uids[i])); - tokenize_console(temp_s); - if (argv(LADDER_CNT+1) == "") // total is 0, skip - 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 <= 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 - } - - MapInfo_ClearTemps(); - - if (s == "") - return "No ladder on this server!\n"; - else - return strcat("Top ", ftos(LADDER_SIZE), " ladder rankings:\n", s); -} - float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance) { @@ -2822,71 +2510,6 @@ void SoundEntity_Detach(entity pl) SoundEntity_StopSound(pl, i); } - -float ParseCommandPlayerSlotTarget_firsttoken; -entity GetCommandPlayerSlotTargetFromTokenizedCommand(float tokens, float idx) // idx = start index -{ - string s; - entity e, head; - float n; - - s = string_null; - - ParseCommandPlayerSlotTarget_firsttoken = -1; - - if (tokens > idx) - { - if (substring(argv(idx), 0, 1) == "#") - { - s = substring(argv(idx), 1, -1); - ++idx; - if (s == "") if (tokens > idx) - { - s = argv(idx); - ++idx; - } - ParseCommandPlayerSlotTarget_firsttoken = idx; - n = stof(s); - if (s == ftos(n) && n > 0 && n <= maxclients) - { - e = edict_num(n); - if (e.flags & FL_CLIENT) - return e; - } - } - else - { - // it must be a nick name - s = argv(idx); - ++idx; - ParseCommandPlayerSlotTarget_firsttoken = idx; - - n = 0; - FOR_EACH_CLIENT(head) - if (head.netname == s) - { - e = head; - ++n; - } - if (n == 1) - return e; - - s = strdecolorize(s); - n = 0; - FOR_EACH_CLIENT(head) - if (strdecolorize(head.netname) == s) - { - e = head; - ++n; - } - if (n == 1) - return e; - } - } - - return world; -} - .float scale2; float modeleffect_SendEntity(entity to, float sf) @@ -3135,29 +2758,3 @@ float isPushable(entity e) return TRUE; return FALSE; } - -// used by gamecommand/clientcommand/votecommand/bancommand system -float GetFilteredNumber(string input) -{ - entity tmp_player, selection; - float output, matches; - - // check and see if we can get a number from input like "#3" or "3" - if(substring(input, 0, 1) == "#") - output = stof(substring(input, 1, -1)); - else - output = stof(input); - - // if we can't, check and see if we can match the input to the netname of any player in the game - if not(output) - { - FOR_EACH_CLIENT(tmp_player) - if (strdecolorize(tmp_player.netname) == strdecolorize(input)) - selection = tmp_player; - - if (selection) { output = num_for_edict(selection); } - } - - print(strcat("input: ", input, ", output: ", ftos(output), ",\n")); - return output; -}