X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmiscfunctions.qc;h=bea0bf7e02c00a3af2aad3ee78ec4f6adb0f4cae;hb=69e51ab7d82fb98e5437cc367ef7ca45e5c27602;hp=9965d5232e1c0c36de49006239656ccb13e4572a;hpb=f8ae5c12c52bbaf38e7137335c1d227712b4eda9;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 9965d5232..bea0bf7e0 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -79,26 +79,27 @@ float DistributeEvenly_GetRandomized(float weight) #define move_out_of_solid(e) WarpZoneLib_MoveOutOfSolid(e) - string STR_PLAYER = "player"; string STR_SPECTATOR = "spectator"; string STR_OBSERVER = "observer"; -#if 0 -#define FOR_EACH_CLIENT(v) for(v = world; (v = findflags(v, flags, FL_CLIENT)) != world; ) -#define FOR_EACH_REALCLIENT(v) FOR_EACH_CLIENT(v) if(clienttype(v) == CLIENTTYPE_REAL) -#define FOR_EACH_PLAYER(v) for(v = world; (v = find(v, classname, STR_PLAYER)) != world; ) -#define FOR_EACH_REALPLAYER(v) FOR_EACH_PLAYER(v) if(clienttype(v) == CLIENTTYPE_REAL) -#else +#define IS_PLAYER(v) (v.classname == STR_PLAYER) +#define IS_SPEC(v) (v.classname == STR_SPECTATOR) +#define IS_OBSERVER(v) (v.classname == STR_OBSERVER) +#define IS_CLIENT(v) (v.flags & FL_CLIENT) +#define IS_BOT_CLIENT(v) (clienttype(v) == CLIENTTYPE_BOT) +#define IS_REAL_CLIENT(v) (clienttype(v) == CLIENTTYPE_REAL) +#define IS_NOT_A_CLIENT(v) (clienttype(v) == CLIENTTYPE_NOTACLIENT) + #define FOR_EACH_CLIENTSLOT(v) for(v = world; (v = nextent(v)) && (num_for_edict(v) <= maxclients); ) -#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 FOR_EACH_CLIENT(v) FOR_EACH_CLIENTSLOT(v) if(IS_CLIENT(v)) +#define FOR_EACH_REALCLIENT(v) FOR_EACH_CLIENT(v) if(IS_REAL_CLIENT(v)) + +#define FOR_EACH_PLAYER(v) FOR_EACH_CLIENT(v) if(IS_PLAYER(v)) +#define FOR_EACH_SPEC(v) FOR_EACH_CLIENT(v) if not(IS_PLAYER(v)) // Samual: shouldn't this be IS_SPEC(v)? and rather create a separate macro to include observers too +#define FOR_EACH_REALPLAYER(v) FOR_EACH_REALCLIENT(v) if(IS_PLAYER(v)) -#define CENTER_OR_VIEWOFS(ent) (ent.origin + ((ent.classname == STR_PLAYER) ? ent.view_ofs : ((ent.mins + ent.maxs) * 0.5))) +#define CENTER_OR_VIEWOFS(ent) (ent.origin + (IS_PLAYER(ent) ? 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 @@ -106,15 +107,6 @@ string strcat1(string s) = #115; // FRIK_FILE float logfile_open; float logfile; -void bcenterprint(string s) -{ - // TODO replace by MSG_ALL (would show it to spectators too, though)? - entity head; - FOR_EACH_PLAYER(head) - if (clienttype(head) == CLIENTTYPE_REAL) - centerprint(head, s); -} - void GameLogEcho(string s) { string fn; @@ -545,7 +537,11 @@ void GetCvars(float f) get_cvars_f = f; get_cvars_s = s; + MUTATOR_CALLHOOK(GetCvars); + + Notification_GetCvars(); + GetCvars_handleFloat(s, f, autoswitch, "cl_autoswitch"); GetCvars_handleFloat(s, f, cvar_cl_autoscreenshot, "cl_autoscreenshot"); GetCvars_handleString(s, f, cvar_g_xonoticversion, "g_xonoticversion"); @@ -573,10 +569,6 @@ void GetCvars(float f) self.cvar_cl_accuracy_data_share = boolean(self.cvar_cl_accuracy_data_share); self.cvar_cl_accuracy_data_receive = boolean(self.cvar_cl_accuracy_data_receive); -#ifdef ALLOW_FORCEMODELS - GetCvars_handleFloat(s, f, cvar_cl_forceplayermodels, "cl_forceplayermodels"); - 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"); GetCvars_handleFloat(s, f, cvar_cl_allow_uidtracking, "cl_allow_uidtracking"); @@ -832,27 +824,12 @@ void readplayerstartcvars() if (g_weaponarena) { - g_minstagib = 0; // incompatible g_pinata = 0; // incompatible g_weapon_stay = 0; // incompatible WEPSET_COPY_AA(start_weapons, g_weaponarena_weapons); if(!(g_lms || g_ca)) start_items |= IT_UNLIMITED_AMMO; } - else if (g_minstagib) - { - g_pinata = 0; // incompatible - g_weapon_stay = 0; // incompatible - g_bloodloss = 0; // incompatible - start_health = 100; - start_armorvalue = 0; - WEPSET_COPY_AW(start_weapons, WEP_MINSTANEX); - g_minstagib_invis_alpha = cvar("g_minstagib_invis_alpha"); - start_items |= IT_UNLIMITED_SUPERWEAPONS; - - if (g_minstagib_invis_alpha <= 0) - g_minstagib_invis_alpha = -1; - } else { for (i = WEP_FIRST; i <= WEP_LAST; ++i) @@ -874,12 +851,7 @@ void readplayerstartcvars() if(cvar("g_nexball")) start_items |= IT_UNLIMITED_SUPERWEAPONS; // FIXME BAD BAD BAD BAD HACK, NEXBALL SHOULDN'T ABUSE PORTO'S WEAPON SLOT - if(g_minstagib) - { - start_ammo_cells = cvar("g_minstagib_ammo_start"); - start_ammo_fuel = cvar("g_start_ammo_fuel"); - } - else if(start_items & IT_UNLIMITED_WEAPON_AMMO) + if(start_items & IT_UNLIMITED_WEAPON_AMMO) { start_ammo_rockets = 999; start_ammo_shells = 999; @@ -1010,15 +982,9 @@ 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) { - g_minstagib = cvar("g_minstagib"); - // load ALL the mutators if(cvar("g_dodging")) MUTATOR_ADD(mutator_dodging); @@ -1026,21 +992,21 @@ void readlevelcvars(void) MUTATOR_ADD(mutator_spawn_near_teammate); if(cvar("g_physical_items")) MUTATOR_ADD(mutator_physical_items); - if(!g_minstagib) - { - if(cvar("g_invincible_projectiles")) - MUTATOR_ADD(mutator_invincibleprojectiles); - if(cvar("g_new_toys")) - MUTATOR_ADD(mutator_new_toys); - if(cvar("g_nix")) - MUTATOR_ADD(mutator_nix); - if(cvar("g_rocket_flying")) - MUTATOR_ADD(mutator_rocketflying); - if(cvar("g_vampire")) - MUTATOR_ADD(mutator_vampire); - if(cvar("g_superspectate")) - MUTATOR_ADD(mutator_superspec); - } + if(cvar("g_minstagib")) + MUTATOR_ADD(mutator_minstagib); + if(cvar("g_invincible_projectiles")) + MUTATOR_ADD(mutator_invincibleprojectiles); + if(cvar("g_new_toys")) + MUTATOR_ADD(mutator_new_toys); + if(!cvar("g_minstagib")) // TODO: nix support? + if(cvar("g_nix")) + MUTATOR_ADD(mutator_nix); + if(cvar("g_rocket_flying")) + MUTATOR_ADD(mutator_rocketflying); + if(cvar("g_vampire")) + MUTATOR_ADD(mutator_vampire); + if(cvar("g_superspectate")) + MUTATOR_ADD(mutator_superspec); // is this a mutator? is this a mode? if(cvar("g_sandbox")) @@ -1064,6 +1030,8 @@ void readlevelcvars(void) g_bugrigs_speed_ref = cvar("g_bugrigs_speed_ref"); g_bugrigs_speed_pow = cvar("g_bugrigs_speed_pow"); g_bugrigs_steer = cvar("g_bugrigs_steer"); + + g_minstagib = cvar("g_minstagib"); g_touchexplode = cvar("g_touchexplode"); g_touchexplode_radius = cvar("g_touchexplode_radius"); @@ -1071,10 +1039,6 @@ void readlevelcvars(void) g_touchexplode_edgedamage = cvar("g_touchexplode_edgedamage"); g_touchexplode_force = cvar("g_touchexplode_force"); -#ifdef ALLOW_FORCEMODELS - sv_clforceplayermodels = cvar("sv_clforceplayermodels"); -#endif - sv_clones = cvar("sv_clones"); sv_foginterval = cvar("sv_foginterval"); g_cloaked = cvar("g_cloaked"); @@ -1097,7 +1061,7 @@ void readlevelcvars(void) g_warmup_allguns = cvar("g_warmup_allguns"); g_warmup_allow_timeout = cvar("g_warmup_allow_timeout"); - if ((g_race && g_race_qualifying == 2) || g_runematch || g_arena || g_assault || cvar("g_campaign")) + if ((g_race && g_race_qualifying == 2) || g_arena || g_minstagib || g_assault || cvar("g_campaign")) inWarmupStage = 0; // these modes cannot work together, sorry g_pickup_respawntime_weapon = cvar("g_pickup_respawntime_weapon"); @@ -1169,10 +1133,6 @@ void readlevelcvars(void) 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(); } @@ -1434,11 +1394,6 @@ void precache() { // gamemode related things precache_model ("models/misc/chatbubble.spr"); - if (g_runematch) - { - precache_model ("models/runematch/curse.mdl"); - precache_model ("models/runematch/rune.mdl"); - } #ifdef TTURRETS_ENABLED if (autocvar_g_turrets) @@ -2036,22 +1991,6 @@ string race_readName(string map, float pos) return uid2name(db_get(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(pos)))); } -string race_placeName(float pos) { - if(floor((mod(pos, 100))/10) * 10 != 10) // examples: 12th, 111th, 213th will not execute this block - { - if(mod(pos, 10) == 1) - return strcat(ftos(pos), "st"); - else if(mod(pos, 10) == 2) - return strcat(ftos(pos), "nd"); - else if(mod(pos, 10) == 3) - return strcat(ftos(pos), "rd"); - else - return strcat(ftos(pos), "th"); - } - else - return strcat(ftos(pos), "th"); -} - float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance) { float m, i; @@ -2651,8 +2590,3 @@ float isPushable(entity e) return TRUE; return FALSE; } - -void dedicated_print(string input) // print(), but only print if the server is not local -{ - if not(server_is_local) { print(input); } -}