X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fmiscfunctions.qc;h=f3f4d71bc45e7a841599447ae9883925f7490d66;hp=72872233fe3607ca22e8b0cb5779ad22e4f3932a;hb=405ed8bb55aac6155fe25e757bde8666176ee4c7;hpb=79af1d0a6a91cc42a4359ecdae84a9fa72593731 diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 72872233f..f3f4d71bc 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -708,7 +708,7 @@ void readplayerstartcvars() { // forcibly turn off weaponarena } - else if (s == "all") + else if (s == "all" || s == "1") { g_weaponarena = 1; g_weaponarena_list = "All Weapons"; @@ -904,34 +904,11 @@ float sv_autotaunt; float sv_taunt; string GetGametype(); // g_world.qc +void mutators_add(); // mutators.qc void readlevelcvars(void) { // load mutators - #define CHECK_MUTATOR_ADD(mut_cvar,mut_name,dependence) \ - { if(cvar(mut_cvar) && dependence) { MUTATOR_ADD(mut_name); } } - - CHECK_MUTATOR_ADD("g_dodging", mutator_dodging, 1); - CHECK_MUTATOR_ADD("g_spawn_near_teammate", mutator_spawn_near_teammate, 1); - CHECK_MUTATOR_ADD("g_physical_items", mutator_physical_items, 1); - CHECK_MUTATOR_ADD("g_touchexplode", mutator_touchexplode, 1); - CHECK_MUTATOR_ADD("g_minstagib", mutator_minstagib, 1); - CHECK_MUTATOR_ADD("g_invincible_projectiles", mutator_invincibleprojectiles, !cvar("g_minstagib")); - CHECK_MUTATOR_ADD("g_new_toys", mutator_new_toys, !cvar("g_minstagib")); - CHECK_MUTATOR_ADD("g_nix", mutator_nix, !cvar("g_minstagib")); - CHECK_MUTATOR_ADD("g_rocket_flying", mutator_rocketflying, !cvar("g_minstagib")); - CHECK_MUTATOR_ADD("g_vampire", mutator_vampire, !cvar("g_minstagib")); - CHECK_MUTATOR_ADD("g_superspectate", mutator_superspec, 1); - CHECK_MUTATOR_ADD("g_pinata", mutator_pinata, !cvar("g_minstagib")); - CHECK_MUTATOR_ADD("g_midair", mutator_midair, 1); - CHECK_MUTATOR_ADD("g_bloodloss", mutator_bloodloss, !cvar("g_minstagib")); - CHECK_MUTATOR_ADD("g_random_gravity", mutator_random_gravity, 1); - CHECK_MUTATOR_ADD("g_multijump", mutator_multijump, 1); - CHECK_MUTATOR_ADD("g_melee_only", mutator_melee_only, !cvar("g_minstagib")); - CHECK_MUTATOR_ADD("g_nades", mutator_nades, 1); - CHECK_MUTATOR_ADD("g_sandbox", sandbox, 1); - CHECK_MUTATOR_ADD("g_campcheck", mutator_campcheck, 1); - - #undef CHECK_MUTATOR_ADD + mutators_add(); if(cvar("sv_allow_fullbright")) serverflags |= SERVERFLAG_ALLOW_FULLBRIGHT; @@ -952,13 +929,11 @@ void readlevelcvars(void) g_bugrigs_speed_pow = cvar("g_bugrigs_speed_pow"); g_bugrigs_steer = cvar("g_bugrigs_steer"); - g_minstagib = cvar("g_minstagib"); + g_instagib = cvar("g_instagib"); sv_clones = cvar("sv_clones"); sv_foginterval = cvar("sv_foginterval"); g_cloaked = cvar("g_cloaked"); - if(g_cts) - g_cloaked = 1; // always enable cloak in CTS g_footsteps = cvar("g_footsteps"); g_grappling_hook = cvar("g_grappling_hook"); g_jetpack = cvar("g_jetpack"); @@ -1082,15 +1057,6 @@ float sound_allowed(float dest, entity e) return TRUE; } -#ifdef COMPAT_XON010_CHANNELS -void(entity e, float chan, string samp, float vol, float atten) builtin_sound = #8; -void sound(entity e, float chan, string samp, float vol, float atten) -{ - if (!sound_allowed(MSG_BROADCAST, e)) - return; - builtin_sound(e, chan, samp, vol, atten); -} -#else #undef sound void sound(entity e, float chan, string samp, float vol, float atten) { @@ -1098,7 +1064,6 @@ void sound(entity e, float chan, string samp, float vol, float atten) return; sound7(e, chan, samp, vol, atten, 0, 0); } -#endif void soundtoat(float dest, entity e, vector o, float chan, string samp, float vol, float atten) { @@ -1303,6 +1268,7 @@ void precache() { // gamemode related things precache_model ("models/misc/chatbubble.spr"); + precache_model("models/ice/ice.md3"); #ifdef TTURRETS_ENABLED if (autocvar_g_turrets) @@ -1624,6 +1590,44 @@ void Net_LinkEntity(entity e, float docull, float dt, float(entity, float) sendf } } + +entity eliminatedPlayers; +.float(entity) isEliminated; +float EliminatedPlayers_SendEntity(entity to, float sendflags) +{ + float i, f, b; + entity e; + WriteByte(MSG_ENTITY, ENT_CLIENT_ELIMINATEDPLAYERS); + WriteByte(MSG_ENTITY, sendflags); + + if(sendflags & 1) + { + for(i = 1; i <= maxclients; i += 8) + { + for(f = 0, e = edict_num(i), b = 1; b < 256; b *= 2, e = nextent(e)) + { + if(eliminatedPlayers.isEliminated(e)) + f |= b; + } + WriteByte(MSG_ENTITY, f); + } + } + + return TRUE; +} + +void EliminatedPlayers_Init(float(entity) isEliminated_func) +{ + if(eliminatedPlayers) + { + backtrace("Can't spawn eliminatedPlayers again!"); + return; + } + Net_LinkEntity(eliminatedPlayers = spawn(), FALSE, 0, EliminatedPlayers_SendEntity); + eliminatedPlayers.isEliminated = isEliminated_func; +} + + void adaptor_think2touch() { entity o; @@ -1826,82 +1830,6 @@ string uid2name(string myuid) { return s; } -float race_readTime(string map, float pos) -{ - string rr; - if(g_cts) - rr = CTS_RECORD; - else - rr = RACE_RECORD; - - return stof(db_get(ServerProgsDB, strcat(map, rr, "time", ftos(pos)))); -} - -string race_readUID(string map, float pos) -{ - string rr; - if(g_cts) - rr = CTS_RECORD; - else - rr = RACE_RECORD; - - return db_get(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(pos))); -} - -float race_readPos(string map, float t) { - float i; - for (i = 1; i <= RANKINGS_CNT; ++i) - if (race_readTime(map, i) == 0 || race_readTime(map, i) > t) - return i; - - return 0; // pos is zero if unranked -} - -void race_writeTime(string map, float t, string myuid) -{ - string rr; - if(g_cts) - rr = CTS_RECORD; - else - rr = RACE_RECORD; - - float newpos; - newpos = race_readPos(map, t); - - float i, prevpos = 0; - 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) -{ - string rr; - if(g_cts) - rr = CTS_RECORD; - else - rr = RACE_RECORD; - - return uid2name(db_get(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(pos)))); -} - float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance) { float m, i;