From b6b4dcb309713ec659c472b179ca3a44ee7b6890 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 11 Nov 2014 22:37:56 +1100 Subject: [PATCH] Translate sprite names on the client --- qcsrc/client/waypointsprites.qc | 1 + qcsrc/common/buffs.qc | 19 +++++++++++++++++++ qcsrc/common/buffs.qh | 4 ++++ qcsrc/server/mutators/mutator_buffs.qc | 18 ++++++++++++++++-- 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/qcsrc/client/waypointsprites.qc b/qcsrc/client/waypointsprites.qc index 1367501a8a..38d1579282 100644 --- a/qcsrc/client/waypointsprites.qc +++ b/qcsrc/client/waypointsprites.qc @@ -241,6 +241,7 @@ vector spritelookupcolor(string s, vector def) } string spritelookuptext(string s) { + if(substring(s, 0, 5) == "buff-") { return Buff_PrettyName(Buff_Type_FromSprite(s)); } switch(s) { case "as-push": return _("Push"); diff --git a/qcsrc/common/buffs.qc b/qcsrc/common/buffs.qc index f9075d05a5..2f8e0fc238 100644 --- a/qcsrc/common/buffs.qc +++ b/qcsrc/common/buffs.qc @@ -34,6 +34,16 @@ float Buff_Type_FromName(string buff_name) return 0; } +float Buff_Type_FromSprite(string buff_sprite) +{ + entity e; + for(e = Buff_Type_first; e; e = e.enemy) + if(buff_sprite == e.model2) + return e.items; + return 0; +} + + float Buff_Skin(float buff_id) { entity e; @@ -42,3 +52,12 @@ float Buff_Skin(float buff_id) return e.skin; return 0; } + +string Buff_Sprite(float buff_id) +{ + entity e; + for(e = Buff_Type_first; e; e = e.enemy) + if(buff_id == e.items) + return e.model2; + return ""; +} diff --git a/qcsrc/common/buffs.qh b/qcsrc/common/buffs.qh index fe2dcc6ac3..2beea209c4 100644 --- a/qcsrc/common/buffs.qh +++ b/qcsrc/common/buffs.qh @@ -8,6 +8,7 @@ var float BUFF_LAST = 1; .string netname; // buff name .string message; // human readable name .vector colormod; // buff color +.string model2; // buff sprite .float skin; // buff skin #define REGISTER_BUFF(hname,sname,NAME,bskin,bcolor) \ @@ -23,6 +24,7 @@ var float BUFF_LAST = 1; Buff_Type##sname.message = hname; \ Buff_Type##sname.skin = bskin; \ Buff_Type##sname.colormod = bcolor; \ + Buff_Type##sname.model2 = strzone(strcat("buff-", #sname)); \ if(!Buff_Type_first) \ Buff_Type_first = Buff_Type##sname; \ if(Buff_Type_last) \ @@ -87,4 +89,6 @@ vector Buff_Color(float buff_id); string Buff_PrettyName(float buff_id); string Buff_Name(float buff_id); float Buff_Type_FromName(string buff_name); +float Buff_Type_FromSprite(string buff_sprite); float Buff_Skin(float buff_id); +string Buff_Sprite(float buff_id); diff --git a/qcsrc/server/mutators/mutator_buffs.qc b/qcsrc/server/mutators/mutator_buffs.qc index 12c3e4febb..cb2c9bb448 100644 --- a/qcsrc/server/mutators/mutator_buffs.qc +++ b/qcsrc/server/mutators/mutator_buffs.qc @@ -46,7 +46,7 @@ float buff_Waypoint_visible_for_player(entity plr) void buff_Waypoint_Spawn(entity e) { - WaypointSprite_Spawn(Buff_PrettyName(e.buffs), 0, autocvar_g_buffs_waypoint_distance, e, '0 0 1' * e.maxs_z, world, e.team, e, buff_waypoint, TRUE, RADARICON_POWERUP, e.glowmod); + WaypointSprite_Spawn(Buff_Sprite(e.buffs), 0, autocvar_g_buffs_waypoint_distance, e, '0 0 1' * e.maxs_z, world, e.team, e, buff_waypoint, TRUE, RADARICON_POWERUP, e.glowmod); WaypointSprite_UpdateTeamRadar(e.buff_waypoint, RADARICON_POWERUP, e.glowmod); e.buff_waypoint.waypointsprite_visible_for_player = buff_Waypoint_visible_for_player; } @@ -518,6 +518,19 @@ MUTATOR_HOOKFUNCTION(buffs_RemovePlayer) return FALSE; } +MUTATOR_HOOKFUNCTION(buffs_CustomizeWaypoint) +{ + entity e = WaypointSprite_getviewentity(other); + + // if you have the invisibility powerup, sprites ALWAYS are restricted to your team + // but only apply this to real players, not to spectators + if((self.owner.flags & FL_CLIENT) && (self.owner.buffs & BUFF_INVISIBLE) && (e == other)) + if(DIFF_TEAM(self.owner, e)) + return TRUE; + + return FALSE; +} + MUTATOR_HOOKFUNCTION(buffs_OnEntityPreSpawn) { if(autocvar_g_buffs_replace_powerups) @@ -753,7 +766,7 @@ void buffs_Initialize() MUTATOR_DEFINITION(mutator_buffs) { MUTATOR_HOOK(PlayerDamage_SplitHealthArmor, buffs_PlayerDamage_SplitHealthArmor, CBC_ORDER_ANY); - MUTATOR_HOOK(PlayerDamage_Calculate, buffs_PlayerDamage_Calculate, CBC_ORDER_LAST); + MUTATOR_HOOK(PlayerDamage_Calculate, buffs_PlayerDamage_Calculate, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerSpawn, buffs_PlayerSpawn, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerPhysics, buffs_PlayerPhysics, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerJump, buffs_PlayerJump, CBC_ORDER_ANY); @@ -767,6 +780,7 @@ MUTATOR_DEFINITION(mutator_buffs) MUTATOR_HOOK(MakePlayerObserver, buffs_RemovePlayer, CBC_ORDER_ANY); MUTATOR_HOOK(ClientDisconnect, buffs_RemovePlayer, CBC_ORDER_ANY); MUTATOR_HOOK(OnEntityPreSpawn, buffs_OnEntityPreSpawn, CBC_ORDER_ANY); + MUTATOR_HOOK(CustomizeWaypoint, buffs_CustomizeWaypoint, CBC_ORDER_ANY); MUTATOR_HOOK(WeaponRateFactor, buffs_WeaponRate, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerPreThink, buffs_PlayerThink, CBC_ORDER_ANY); MUTATOR_HOOK(GetCvars, buffs_GetCvars, CBC_ORDER_ANY); -- 2.39.2