X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmiscfunctions.qc;h=e8972ca8e4c75c317bbfceea7495d2e80451abaa;hb=7ac0b97ab2ffbeec850e622df8bf9af77a1a349d;hp=1b8585eb60c9fd2e36819745406198c320ed4e71;hpb=6c4aca14b76d71f2ebabb059cd1ee30f6cb7c790;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 1b8585eb6..e8972ca8e 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -67,6 +67,16 @@ float DistributeEvenly_Get(float weight) DistributeEvenly_amount -= f; return f; } +float DistributeEvenly_GetRandomized(float weight) +{ + float f; + if (weight <= 0) + return 0; + f = floor(random() + DistributeEvenly_amount * weight / DistributeEvenly_totalweight); + DistributeEvenly_totalweight -= weight; + DistributeEvenly_amount -= f; + return f; +} #define move_out_of_solid(e) WarpZoneLib_MoveOutOfSolid(e) @@ -85,9 +95,12 @@ string STR_OBSERVER = "observer"; #define FOR_EACH_CLIENT(v) FOR_EACH_CLIENTSLOT(v) if(v.flags & FL_CLIENT) #define FOR_EACH_REALCLIENT(v) FOR_EACH_CLIENT(v) if(clienttype(v) == CLIENTTYPE_REAL) #define FOR_EACH_PLAYER(v) FOR_EACH_CLIENT(v) if(v.classname == STR_PLAYER) +#define FOR_EACH_SPEC(v) FOR_EACH_CLIENT(v) if(v.classname != STR_PLAYER) #define FOR_EACH_REALPLAYER(v) FOR_EACH_REALCLIENT(v) if(v.classname == STR_PLAYER) #endif +#define CENTER_OR_VIEWOFS(ent) (ent.origin + ((ent.classname == STR_PLAYER) ? ent.view_ofs : ((ent.mins + ent.maxs) * 0.5))) + // copies a string to a tempstring (so one can strunzone it) string strcat1(string s) = #115; // FRIK_FILE @@ -415,7 +428,7 @@ string formatmessage(string msg) else replacement = "batteries"; // ;) } else if (escape == "x") { replacement = cursor_ent.netname; - if (!replacement || !cursor_ent) + if (replacement == "" || !cursor_ent) replacement = "nothing"; } else if (escape == "s") replacement = ftos(vlen(self.velocity - self.velocity_z * '0 0 1')); @@ -772,7 +785,6 @@ float warmup_start_ammo_fuel; float warmup_start_health; float warmup_start_armorvalue; float g_weapon_stay; -float g_ghost_items; entity get_weaponinfo(float w); @@ -1095,10 +1107,6 @@ float g_touchexplode_force; float sv_autotaunt; float sv_taunt; -float sv_pitch_min; -float sv_pitch_max; -float sv_pitch_fixyaw; - string GetGametype(); // g_world.qc void readlevelcvars(void) { @@ -1109,6 +1117,8 @@ void readlevelcvars(void) MUTATOR_ADD(mutator_dodging); if(cvar("g_spawn_near_teammate")) MUTATOR_ADD(mutator_spawn_near_teammate); + if(cvar("g_physical_items")) + MUTATOR_ADD(mutator_physical_items); if(!g_minstagib) { if(cvar("g_invincible_projectiles")) @@ -1120,7 +1130,9 @@ void readlevelcvars(void) if(cvar("g_rocket_flying")) MUTATOR_ADD(mutator_rocketflying); if(cvar("g_vampire")) - MUTATOR_ADD(mutator_vampire); + MUTATOR_ADD(mutator_vampire); + if(cvar("g_superspectate")) + MUTATOR_ADD(mutator_superspec); } // is this a mutator? is this a mode? @@ -1171,7 +1183,6 @@ void readlevelcvars(void) g_bloodloss = cvar("g_bloodloss"); sv_maxidle = cvar("sv_maxidle"); sv_maxidle_spectatorsareidle = cvar("sv_maxidle_spectatorsareidle"); - g_ctf_reverse = cvar("g_ctf_reverse"); sv_autotaunt = cvar("sv_autotaunt"); sv_taunt = cvar("sv_taunt"); @@ -1249,18 +1260,9 @@ void readlevelcvars(void) if(!g_weapon_stay) g_weapon_stay = cvar("g_weapon_stay"); - g_ghost_items = cvar("g_ghost_items"); - - if(g_ghost_items >= 1) - g_ghost_items = 0.25; // default alpha value - if not(inWarmupStage && !g_ca) game_starttime = cvar("g_start_delay"); - sv_pitch_min = cvar("sv_pitch_min"); - sv_pitch_max = cvar("sv_pitch_max"); - sv_pitch_fixyaw = cvar("sv_pitch_fixyaw"); - readplayerstartcvars(); } @@ -1591,9 +1593,6 @@ void precache() precache_sound ("player/lava.wav"); precache_sound ("player/slime.wav"); - if (g_jetpack) - precache_sound ("misc/jetpack_fly.wav"); - precache_model ("models/sprites/0.spr32"); precache_model ("models/sprites/1.spr32"); precache_model ("models/sprites/2.spr32"); @@ -1816,7 +1815,7 @@ void InitializeEntitiesRun() self = e_old; } //dprint("Delayed initialization: ", self.classname, "\n"); - if(func != func_null) + if(func) func(); else { @@ -1830,7 +1829,6 @@ void InitializeEntitiesRun() .float uncustomizeentityforclient_set; .void(void) uncustomizeentityforclient; -void(void) SUB_Nullpointer = #0; void UncustomizeEntitiesRun() { entity oldself; @@ -1843,7 +1841,7 @@ void SetCustomizer(entity e, float(void) customizer, void(void) uncustomizer) { e.customizeentityforclient = customizer; e.uncustomizeentityforclient = uncustomizer; - e.uncustomizeentityforclient_set = (uncustomizer != SUB_Nullpointer); + e.uncustomizeentityforclient_set = !!uncustomizer; } .float nottargeted; @@ -2402,8 +2400,8 @@ vector shotorg_adjust_values(vector vecs, float y_is_right, float visual, float { if (visual) { - vecs_y = 0; - vecs_z -= 2; + if (autocvar_g_shootfromclient) { vecs = shotorg_adjustfromclient(vecs, y_is_right, (autocvar_g_shootfromclient >= 2), algn); } + else { vecs_y = 0; vecs_z -= 2; } } else { @@ -2442,12 +2440,8 @@ vector shotorg_adjust(vector vecs, float y_is_right, float visual) void attach_sameorigin(entity e, entity to, string tag) { vector org, t_forward, t_left, t_up, e_forward, e_up; - vector org0, ang0; float tagscale; - ang0 = e.angles; - org0 = e.origin; - org = e.origin - gettaginfo(to, gettagindex(to, tag)); tagscale = pow(vlen(v_forward), -2); // undo a scale on the tag t_forward = v_forward * tagscale; @@ -2525,43 +2519,6 @@ vector gettaginfo_relative(entity e, float tag) return gettaginfo(gettaginfo_relative_ent, tag); } -void SoundEntity_StartSound(entity pl, float chan, string samp, float vol, float attn) -{ - float p; - p = pow(2, chan); - if (pl.soundentity.cnt & p) - return; - soundtoat(MSG_ALL, pl.soundentity, gettaginfo(pl.soundentity, 0), chan, samp, vol, attn); - pl.soundentity.cnt |= p; -} - -void SoundEntity_StopSound(entity pl, float chan) -{ - float p; - p = pow(2, chan); - if (pl.soundentity.cnt & p) - { - stopsoundto(MSG_ALL, pl.soundentity, chan); - pl.soundentity.cnt &~= p; - } -} - -void SoundEntity_Attach(entity pl) -{ - pl.soundentity = spawn(); - pl.soundentity.classname = "soundentity"; - pl.soundentity.owner = pl; - setattachment(pl.soundentity, pl, ""); - setmodel(pl.soundentity, "null"); -} - -void SoundEntity_Detach(entity pl) -{ - float i; - for (i = 0; i <= 7; ++i) - SoundEntity_StopSound(pl, i); -} - .float scale2; float modeleffect_SendEntity(entity to, float sf) @@ -2795,6 +2752,8 @@ float isPushable(entity e) { if(e.iscreature) return TRUE; + if(e.pushable) + return TRUE; switch(e.classname) { case "body":