-/*
-=============
-GetCvars
-=============
-Called with:
- 0: sends the request
- >0: receives a cvar from name=argv(f) value=argv(f+1)
-*/
-void GetCvars_handleString(entity this, entity store, string thisname, float f, .string field, string name)
-{
- if (f < 0)
- {
- strfree(store.(field));
- }
- else if (f > 0)
- {
- if (thisname == name)
- {
- strcpy(store.(field), argv(f + 1));
- }
- }
- else
- stuffcmd(this, strcat("cl_cmd sendcvar ", name, "\n"));
-}
-void GetCvars_handleString_Fixup(entity this, entity store, string thisname, float f, .string field, string name, string(entity, string) func)
-{
- GetCvars_handleString(this, store, thisname, f, field, name);
- if (f >= 0) // also initialize to the fitting value for "" when sending cvars out
- if (thisname == name)
- {
- string s = func(this, strcat1(store.(field)));
- if (s != store.(field))
- {
- strcpy(store.(field), s);
- }
- }
-}
-void GetCvars_handleFloat(entity this, entity store, string thisname, float f, .float field, string name)
-{
- if (f < 0)
- {
- }
- else if (f > 0)
- {
- if (thisname == name)
- store.(field) = stof(argv(f + 1));
- }
- else
- stuffcmd(this, strcat("cl_cmd sendcvar ", name, "\n"));
-}
-void GetCvars_handleFloatOnce(entity this, entity store, string thisname, float f, .float field, string name)
-{
- if (f < 0)
- {
- }
- else if (f > 0)
- {
- if (thisname == name)
- {
- if (!store.(field))
- {
- store.(field) = stof(argv(f + 1));
- if (!store.(field))
- store.(field) = -1;
- }
- }
- }
- else
- {
- if (!store.(field))
- stuffcmd(this, strcat("cl_cmd sendcvar ", name, "\n"));
- }
-}
-string W_FixWeaponOrder_ForceComplete_AndBuildImpulseList(entity this, string wo)
-{
- string o = W_FixWeaponOrder_ForceComplete(wo);
- strcpy(CS(this).weaponorder_byimpulse, W_FixWeaponOrder_BuildImpulseList(o));
- return o;
-}
-
-/**
- * @param f -1: cleanup, 0: request, 1: receive
- */
-void GetCvars(entity this, entity store, int f)
-{
- string s = string_null;
-
- if (f == 0)
- LOG_INFO("Warning: requesting cvar values is deprecated. Client should send them automatically using REPLICATE.\n");
-
- if (f > 0)
- s = strcat1(argv(f));
-
- get_cvars_f = f;
- get_cvars_s = s;
- MUTATOR_CALLHOOK(GetCvars);
-
- Notification_GetCvars(this);
-
- ReplicateVars(this, store, s, f);
-
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriority, "cl_weaponpriority", W_FixWeaponOrder_ForceComplete_AndBuildImpulseList);
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriorities[0], "cl_weaponpriority0", W_FixWeaponOrder_AllowIncomplete);
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriorities[1], "cl_weaponpriority1", W_FixWeaponOrder_AllowIncomplete);
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriorities[2], "cl_weaponpriority2", W_FixWeaponOrder_AllowIncomplete);
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriorities[3], "cl_weaponpriority3", W_FixWeaponOrder_AllowIncomplete);
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriorities[4], "cl_weaponpriority4", W_FixWeaponOrder_AllowIncomplete);
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriorities[5], "cl_weaponpriority5", W_FixWeaponOrder_AllowIncomplete);
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriorities[6], "cl_weaponpriority6", W_FixWeaponOrder_AllowIncomplete);
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriorities[7], "cl_weaponpriority7", W_FixWeaponOrder_AllowIncomplete);
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriorities[8], "cl_weaponpriority8", W_FixWeaponOrder_AllowIncomplete);
- GetCvars_handleString_Fixup(this, store, s, f, cvar_cl_weaponpriorities[9], "cl_weaponpriority9", W_FixWeaponOrder_AllowIncomplete);
-
- GetCvars_handleFloat(this, store, s, f, cvar_cl_allow_uidtracking, "cl_allow_uidtracking");
-
- // fixup of switchweapon (needed for LMS or when spectating is disabled, as PutClientInServer comes too early)
- if (f > 0)
- {
- if (s == "cl_weaponpriority")
- {
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- .entity weaponentity = weaponentities[slot];
- if (this.(weaponentity) && (this.(weaponentity).m_weapon != WEP_Null || slot == 0))
- this.(weaponentity).m_switchweapon = w_getbestweapon(this, weaponentity);
- }
- }
- if (s == "cl_allow_uidtracking")
- PlayerStats_GameReport_AddPlayer(this);
- //if (s == "cl_gunalign")
- //W_ResetGunAlign(this, store.cvar_cl_gunalign);
- }
-}
-
-// decolorizes and team colors the player name when needed
-string playername(entity p, bool team_colorize)
-{
- string t;
- if (team_colorize && teamplay && !intermission_running && IS_PLAYER(p))
- {
- t = Team_ColorCode(p.team);
- return strcat(t, strdecolorize(p.netname));
- }
- else
- return p.netname;
-}
-