]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Translate sprite names on the client
authorMario <zacjardine@y7mail.com>
Tue, 11 Nov 2014 11:37:56 +0000 (22:37 +1100)
committerMario <zacjardine@y7mail.com>
Tue, 11 Nov 2014 11:37:56 +0000 (22:37 +1100)
qcsrc/client/waypointsprites.qc
qcsrc/common/buffs.qc
qcsrc/common/buffs.qh
qcsrc/server/mutators/mutator_buffs.qc

index 1367501a8a3743ab17b2c2fa5dbb02c9a7870911..38d1579282eed5650d36d556b21a4d4041cb6206 100644 (file)
@@ -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");
index f9075d05a5c5e63f880ffeb09d638318a614acf1..2f8e0fc23895dd34e773773a8cddf67f6bc266c8 100644 (file)
@@ -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 "";
+}
index fe2dcc6ac35f309b5ce07d5d4466c3575773fc91..2beea209c476a99aeac56a0e0f942fae62b9fcff 100644 (file)
@@ -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);
index 12c3e4febb5e8d5661a49bce7ed453b9f55605b1..cb2c9bb4480758f2cebb39f81e73f5166bc756a3 100644 (file)
@@ -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);