]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/notifications.qc
Updates to how frag sprees are shown in info notifications
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / notifications.qc
index 9c6159d60977024a405753c3b12d840f3f75c6a1..d0bf7bb053a6fbc29a869a2b0cfec2c19ed1a074 100644 (file)
@@ -23,42 +23,112 @@ entity Get_Notif_Ent(float net_type, float net_name)
 
 void Dump_Notifications(float fh, float alsoprint)
 {
 
 void Dump_Notifications(float fh, float alsoprint)
 {
-       #define NOTIF_WRITE(type,name,text) { \
-               notif_msg = sprintf("seta %s 1 // %s - %s\n", name, #type, strreplace("\n", "\\n", text)); \
-               fputs(fh, notif_msg); \
-               if(alsoprint) { print(strreplace("^", "^^", notif_msg)); } }
+       #define NOTIF_WRITE(a) { \
+               fputs(fh, a); \
+               if(alsoprint) { print(a); } }
+       #define NOTIF_WRITE_SETA(name,default,text) { \
+               notif_msg = \
+                       sprintf( \
+                               "seta notification_%s %d \"notif string: %s^7\"\n", \
+                               name, default, strreplace("\{3}", "", strreplace("\n", "\\n", text)) \
+                       ); \
+               NOTIF_WRITE(notif_msg) }
 
        string notif_msg;
        float i;
        entity e;
 
 
        string notif_msg;
        float i;
        entity e;
 
-       for(i = 0; i < NOTIF_INFO_COUNT; ++i) {
+       // Note: This warning only applies to the notifications.cfg file that is output...
+
+       // You ARE supposed to manually edit this function to add i.e. hard coded
+       // notification variables for mutators or game modes or such and then
+       // regenerate the notifications.cfg file from the new code.
+
+       NOTIF_WRITE("// ********************************************** //\n");
+       NOTIF_WRITE("// ** WARNING - DO NOT MANUALLY EDIT THIS FILE ** //\n");
+       NOTIF_WRITE("// **                                          ** //\n");
+       NOTIF_WRITE("// **  This file is automatically generated    ** //\n");
+       NOTIF_WRITE("// **  by code with the command 'dumpnotifs'.  ** //\n");
+       NOTIF_WRITE("// **                                          ** //\n");
+       NOTIF_WRITE("// **  If you add a new notification, please   ** //\n");
+       NOTIF_WRITE("// **  regenerate this file with that command  ** //\n");
+       NOTIF_WRITE("// **  making sure that the output matches     ** //\n");
+       NOTIF_WRITE("// **  with the lists and defaults in code.    ** //\n");
+       NOTIF_WRITE("// **                                          ** //\n");
+       NOTIF_WRITE("// ********************************************** //\n");
+
+       NOTIF_WRITE("\n// Version number to identify mismatches between code and config file...\n");
+       NOTIF_WRITE("// Increment NOTIF_VERSION in common/notifications.qh with any\n");
+       NOTIF_WRITE("// new notifications or other changes to notif cvars/this config.\n");
+       
+       NOTIF_WRITE(sprintf("set notification_version %d\n", NOTIF_VERSION));
+
+       // These notifications will also append their string as a comment...
+       // This is not necessary, and does not matter if they vary between config versions,
+       // it is just a semi-helpful tool for those who want to manually change their user settings.
+
+       NOTIF_WRITE(sprintf("\n// MSG_INFO notifications (count = %d):\n", NOTIF_INFO_COUNT));
+       for(i = 1; i <= NOTIF_INFO_COUNT; ++i)
+       {
                e = Get_Notif_Ent(MSG_INFO, i);
                e = Get_Notif_Ent(MSG_INFO, i);
-               NOTIF_WRITE(MSG_INFO, e.nent_name, e.nent_string); }
-               
-       for(i = 0; i < NOTIF_CENTER_COUNT; ++i) {
+               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
+               NOTIF_WRITE_SETA(e.nent_name, e.nent_default, e.nent_string);
+       }
+
+       NOTIF_WRITE(sprintf("\n// MSG_CENTER notifications (count = %d):\n", NOTIF_CENTER_COUNT));
+       for(i = 1; i <= NOTIF_CENTER_COUNT; ++i)
+       {
                e = Get_Notif_Ent(MSG_CENTER, i);
                e = Get_Notif_Ent(MSG_CENTER, i);
-               NOTIF_WRITE(MSG_CENTER, e.nent_name, e.nent_string); }
-       
-       for(i = 0; i < NOTIF_WEAPON_COUNT; ++i) {
+               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
+               NOTIF_WRITE_SETA(e.nent_name, e.nent_default, e.nent_string);
+       }
+
+       NOTIF_WRITE(sprintf("\n// MSG_WEAPON notifications (count = %d):\n", NOTIF_WEAPON_COUNT));
+       for(i = 1; i <= NOTIF_WEAPON_COUNT; ++i)
+       {
                e = Get_Notif_Ent(MSG_WEAPON, i);
                e = Get_Notif_Ent(MSG_WEAPON, i);
-               NOTIF_WRITE(MSG_WEAPON, e.nent_name, sprintf("infoname: %s, centername: %s",
-                       e.nent_msginfo.nent_name, e.nent_msgcenter.nent_name)); }
-               
-       for(i = 0; i < NOTIF_DEATH_COUNT; ++i) {
+               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
+               NOTIF_WRITE_SETA(e.nent_name, e.nent_default, sprintf("infoname: %s, centername: %s",
+                       e.nent_msginfo.nent_name, e.nent_msgcenter.nent_name));
+       }
+
+       NOTIF_WRITE(sprintf("\n// MSG_DEATH notifications (count = %d):\n", NOTIF_DEATH_COUNT));
+       for(i = 1; i <= NOTIF_DEATH_COUNT; ++i)
+       {
                e = Get_Notif_Ent(MSG_DEATH, i);
                e = Get_Notif_Ent(MSG_DEATH, i);
-               NOTIF_WRITE(MSG_DEATH, e.nent_name, sprintf("infoname: %s, centername: %s",
-                       e.nent_msginfo.nent_name, e.nent_msgcenter.nent_name)); }
+               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
+               NOTIF_WRITE_SETA(e.nent_name, e.nent_default, sprintf("infoname: %s, centername: %s",
+                       e.nent_msginfo.nent_name, e.nent_msgcenter.nent_name));
+       }
 
 
-       print(sprintf("Notification counts: MSG_INFO = %d, MSG_CENTER = %d, MSG_WEAPON = %d, MSG_DEATH = %d\n",
+       // edit these to match whichever cvars are used for specific notification options
+       NOTIF_WRITE("\n// HARD CODED notification variables:\n");
+       NOTIF_WRITE("seta notification_allow_chatboxprint 1 \"Allow notifications to be printed to chat box by setting notification cvar to 2 (You can also set this cvar to 2 to force ALL notifications to be printed to the chatbox)\"\n");
+       NOTIF_WRITE("seta notification_show_sprees 1 \"Print information about sprees in death/kill messages\"\n");
+       NOTIF_WRITE("seta notification_version_mismatch_client_error 0 \"Cause a notif error on client if the version in notifications.cfg mismatches the code\"\n");
+       NOTIF_WRITE("seta notification_version_mismatch_server_error 1 \"Cause a notif error on server if the version in notifications.cfg mismatches the code\"\n");
+       NOTIF_WRITE("seta notification_errors_are_fatal 1 \"If a notification fails upon initialization, cause a Host_Error to stop the program\"\n");
+       NOTIF_WRITE("seta notification_ctf_pickup_team_verbose 1 \"Show extra information if a team mate picks up a flag\"\n");
+       NOTIF_WRITE("seta notification_ctf_pickup_enemy_verbose 1 \"Show extra information if an enemy picks up a flag\"\n");
+       NOTIF_WRITE("seta notification_ctf_capture_verbose 1 \"Show extra information when someone captures a flag\"\n");
+       NOTIF_WRITE("seta notification_frag_verbose 1 \"Show extra information when you frag someone (or when you are fragged\"\n");
+
+       NOTIF_WRITE(sprintf("\n// Notification counts (total = %d): MSG_INFO = %d, MSG_CENTER = %d, MSG_WEAPON = %d, MSG_DEATH = %d\n",
+               (NOTIF_INFO_COUNT + NOTIF_CENTER_COUNT + NOTIF_WEAPON_COUNT + NOTIF_DEATH_COUNT), 
                NOTIF_INFO_COUNT, NOTIF_CENTER_COUNT, NOTIF_WEAPON_COUNT, NOTIF_DEATH_COUNT));
        
        return;
                NOTIF_INFO_COUNT, NOTIF_CENTER_COUNT, NOTIF_WEAPON_COUNT, NOTIF_DEATH_COUNT));
        
        return;
+       #undef NOTIF_WRITE_SETA
        #undef NOTIF_WRITE
 }
 
        #undef NOTIF_WRITE
 }
 
-#define HIT_MAX(count,funcname) if(sel_num == count) { backtrace(sprintf("%s: Hit maximum arguments!\n", funcname)); break; }
-#define HIT_UNKNOWN(token,funcname) default: { backtrace(sprintf("%s: Hit unknown token in selected string! '%s'\n", funcname, selected)); break; }
+#ifdef SVQC
+void Notification_GetCvars()
+{
+       GetCvars_handleFloat(get_cvars_s, get_cvars_f, FRAG_VERBOSE, "notification_frag_verbose");
+}
+#endif
+
 string Local_Notification_sprintf(string input, string args, 
        string s1, string s2, string s3, string s4,
        float f1, float f2, float f3, float f4)
 string Local_Notification_sprintf(string input, string args, 
        string s1, string s2, string s3, string s4,
        float f1, float f2, float f3, float f4)
@@ -85,22 +155,22 @@ string Local_Notification_sprintf(string input, string args,
        for(sel_num = 0;(args != "");)
        {
                selected = car(args); args = cdr(args);
        for(sel_num = 0;(args != "");)
        {
                selected = car(args); args = cdr(args);
-               HIT_MAX(NOTIF_MAX_ARGS, "Local_Notification_sprintf")
+               NOTIF_HIT_MAX(NOTIF_MAX_ARGS, "Local_Notification_sprintf")
                switch(strtolower(selected))
                {
                        #define ARG_CASE(prog,selected,result) \
                                #ifdef CSQC \
                switch(strtolower(selected))
                {
                        #define ARG_CASE(prog,selected,result) \
                                #ifdef CSQC \
-                                       #if (prog == ARG_BOTH) || (prog == ARG_TRIPLE) || (prog == ARG_CSQC) \
+                                       #if (prog == ARG_DOUBLE) || (prog == ARG_TRIPLE) || (prog == ARG_CSQC) \
                                                case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \
                                        #endif \
                                #else \
                                                case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \
                                        #endif \
                                #else \
-                                       #if (prog == ARG_BOTH) || (prog == ARG_TRIPLE) || (prog == ARG_SVQC) \
+                                       #if (prog == ARG_DOUBLE) || (prog == ARG_TRIPLE) || (prog == ARG_SVQC) \
                                                case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \
                                        #endif \
                                #endif
                        NOTIF_ARGUMENT_LIST
                        #undef ARG_CASE
                                                case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \
                                        #endif \
                                #endif
                        NOTIF_ARGUMENT_LIST
                        #undef ARG_CASE
-                       HIT_UNKNOWN(NOTIF_MAX_ARGS, "Local_Notification_sprintf")
+                       NOTIF_HIT_UNKNOWN(NOTIF_MAX_ARGS, "Local_Notification_sprintf")
                }
        }
        return sprintf(input, arg_slot[0], arg_slot[1], arg_slot[2], arg_slot[3], arg_slot[4], arg_slot[5], arg_slot[6]);
                }
        }
        return sprintf(input, arg_slot[0], arg_slot[1], arg_slot[2], arg_slot[3], arg_slot[4], arg_slot[5], arg_slot[6]);
@@ -116,7 +186,7 @@ void Local_Notification_HUD_Notify_Push(string icon, string hudargs, string s1,
        for(sel_num = 0;(hudargs != "");)
        {
                selected = car(hudargs); hudargs = cdr(hudargs);
        for(sel_num = 0;(hudargs != "");)
        {
                selected = car(hudargs); hudargs = cdr(hudargs);
-               HIT_MAX(NOTIF_MAX_HUDARGS, "Local_Notification_HUD_Notify_Push")
+               NOTIF_HIT_MAX(NOTIF_MAX_HUDARGS, "Local_Notification_HUD_Notify_Push")
                switch(strtolower(selected))
                {
                        #define ARG_CASE(prog,selected,result) \
                switch(strtolower(selected))
                {
                        #define ARG_CASE(prog,selected,result) \
@@ -125,14 +195,12 @@ void Local_Notification_HUD_Notify_Push(string icon, string hudargs, string s1,
                                #endif
                        NOTIF_ARGUMENT_LIST
                        #undef ARG_CASE
                                #endif
                        NOTIF_ARGUMENT_LIST
                        #undef ARG_CASE
-                       HIT_UNKNOWN(NOTIF_MAX_HUDARGS, "Local_Notification_HUD_Notify_Push")
+                       NOTIF_HIT_UNKNOWN(NOTIF_MAX_HUDARGS, "Local_Notification_HUD_Notify_Push")
                }
        }
        HUD_Notify_Push(icon, arg_slot[0], arg_slot[1]);
 }
 #endif
                }
        }
        HUD_Notify_Push(icon, arg_slot[0], arg_slot[1]);
 }
 #endif
-#undef HIT_MAX
-#undef HIT_UNKNOWN
 
 void Local_Notification(float net_type, float net_name, ...count)
 {
 
 void Local_Notification(float net_type, float net_name, ...count)
 {
@@ -243,7 +311,7 @@ void Local_Notification(float net_type, float net_name, ...count)
                        if(notif.nent_msginfo)
                        if(notif.nent_msginfo.nent_enabled)
                        {
                        if(notif.nent_msginfo)
                        if(notif.nent_msginfo.nent_enabled)
                        {
-                               Local_Notification_Without_VarArgs(
+                               Local_Notification_WOVA(
                                        MSG_INFO,
                                        notif.nent_msginfo.nent_id, 
                                        notif.nent_msginfo.nent_stringcount, 
                                        MSG_INFO,
                                        notif.nent_msginfo.nent_id, 
                                        notif.nent_msginfo.nent_stringcount, 
@@ -255,7 +323,7 @@ void Local_Notification(float net_type, float net_name, ...count)
                        if(notif.nent_msgcenter)
                        if(notif.nent_msgcenter.nent_enabled)
                        {
                        if(notif.nent_msgcenter)
                        if(notif.nent_msgcenter.nent_enabled)
                        {
-                               Local_Notification_Without_VarArgs(
+                               Local_Notification_WOVA(
                                        MSG_CENTER,
                                        notif.nent_msgcenter.nent_id, 
                                        notif.nent_msgcenter.nent_stringcount, 
                                        MSG_CENTER,
                                        notif.nent_msgcenter.nent_id, 
                                        notif.nent_msgcenter.nent_stringcount, 
@@ -269,7 +337,8 @@ void Local_Notification(float net_type, float net_name, ...count)
        }
 }
 
        }
 }
 
-void Local_Notification_Without_VarArgs(float net_type, float net_name,
+// WOVA = Without Variable Arguments 
+void Local_Notification_WOVA(float net_type, float net_name,
        float stringcount, float floatcount,
        string s1, string s2, string s3, string s4,
        float f1, float f2, float f3, float f4)
        float stringcount, float floatcount,
        string s1, string s2, string s3, string s4,
        float f1, float f2, float f3, float f4)
@@ -309,30 +378,102 @@ void Read_Notification(float is_new)
        dprint(sprintf("Read_Notification(%d) at %f: net_name = %s.\n", is_new, time, notif.nent_name));
        #endif
        
        dprint(sprintf("Read_Notification(%d) at %f: net_name = %s.\n", is_new, time, notif.nent_name));
        #endif
        
-       if(is_new) { Local_Notification_Without_VarArgs(net_type, net_name, notif.nent_stringcount, notif.nent_floatcount, s1, s2, s3, s4, f1, f2, f3, f4); }
+       if(is_new)
+       {
+               Local_Notification_WOVA(
+                       net_type, net_name,
+                       notif.nent_stringcount,
+                       notif.nent_floatcount,
+                       s1, s2, s3, s4,
+                       f1, f2, f3, f4);
+       }
 }
 #endif
 
 #ifdef SVQC
 }
 #endif
 
 #ifdef SVQC
-void Notification_Remove()
+void Net_Notification_Remove()
 {
        float i;
        for(i = 0; i < 4; ++i) { if(self.nent_strings[i]) { strunzone(self.nent_strings[i]); } }
        remove(self);
 }
 
 {
        float i;
        for(i = 0; i < 4; ++i) { if(self.nent_strings[i]) { strunzone(self.nent_strings[i]); } }
        remove(self);
 }
 
-float Write_Notification(entity client, float sf)
+float Net_Write_Notification(entity client, float sf)
 {
        float i, send = FALSE;
        
        switch(self.nent_broadcast)
        {
 {
        float i, send = FALSE;
        
        switch(self.nent_broadcast)
        {
-               case NOTIF_ONE: { if((client == self.nent_client) || (client.classname == STR_SPECTATOR && client.enemy == self.nent_client)) { send = TRUE; } break; }
-               case NOTIF_ONE_ONLY: { if(client == self.nent_client) { send = TRUE; } break; }
-               case NOTIF_TEAM: { if((client.team == self.nent_client.team) || (client.classname == STR_SPECTATOR && client.enemy.team == self.nent_client.team)) { send = TRUE; } break; }
-               case NOTIF_TEAM_EXCEPT: { if(((client != self.nent_client) && (client.team == self.nent_client.team) && !(client.classname == STR_SPECTATOR && client.enemy == self.nent_client))) { send = TRUE; } break; }
-               case NOTIF_ANY: { send = TRUE; break; }
-               case NOTIF_ANY_EXCEPT: { if((client != self.nent_client) && !(client.classname == STR_SPECTATOR && client.enemy == self.nent_client)) { send = TRUE; } break; }
+               case NOTIF_ONE: // send to one client and their spectator
+               {
+                       if(
+                               (client == self.nent_client)
+                               ||
+                               (
+                                       (client.classname == STR_SPECTATOR)
+                                       &&
+                                       (client.enemy == self.nent_client)
+                               )
+                       ) { send = TRUE; }
+                       break;
+               }
+               case NOTIF_ONE_ONLY: // send ONLY to one client
+               {
+                       if(client == self.nent_client) { send = TRUE; }
+                       break;
+               }
+               case NOTIF_TEAM: // send only to X team and their spectators
+               {
+                       if(
+                               (client.team == self.nent_client.team)
+                               ||
+                               (
+                                       (client.classname == STR_SPECTATOR)
+                                       &&
+                                       (client.enemy.team == self.nent_client.team)
+                               )
+                       ) { send = TRUE; }
+                       break;
+               }
+               case NOTIF_TEAM_EXCEPT: // send only to X team and their spectators, except for Y person and their spectators
+               {
+                       if(
+                               (client != self.nent_client)
+                               &&
+                               (
+                                       (client.team == self.nent_client.team)
+                                       ||
+                                       (
+                                               (client.classname == STR_SPECTATOR)
+                                               &&
+                                               (
+                                                       (client.enemy != self.nent_client)
+                                                       &&
+                                                       (client.enemy.team == self.nent_client.team)
+                                               )
+                                       )
+                               )
+                       ) { send = TRUE; }
+                       break;
+               }
+               case NOTIF_ANY: // send to everyone
+               {
+                       send = TRUE;
+                       break;
+               }
+               case NOTIF_ANY_EXCEPT: // send to everyone except X person and their spectators
+               {
+                       if(
+                               (client != self.nent_client)
+                               &&
+                               !(
+                                       (client.classname == STR_SPECTATOR)
+                                       &&
+                                       (client.enemy == self.nent_client)
+                               )
+                       ) { send = TRUE; }
+                       break;
+               }
                default: { send = FALSE; break; }
        }
 
                default: { send = FALSE; break; }
        }
 
@@ -369,20 +510,39 @@ void Send_Notification(float broadcast, entity client,
        switch(broadcast)
        {
                case NOTIF_ONE:
        switch(broadcast)
        {
                case NOTIF_ONE:
-               case NOTIF_ONE_ONLY: { if(clienttype(client) == CLIENTTYPE_NOTACLIENT) { checkargs = sprintf("%sNo client provided!", checkargs); } break; }
-               case NOTIF_ANY_EXCEPT: { if(clienttype(client) == CLIENTTYPE_NOTACLIENT) { checkargs = sprintf("%sException can't be a non-client!", checkargs); } break; }
-               case NOTIF_ANY: { if(client) { checkargs = sprintf("%sEntity provided when world was required!", checkargs); } break; }
+               case NOTIF_ONE_ONLY:
+               {
+                       if(IS_NOT_A_CLIENT(client))
+                               { checkargs = sprintf("%sNo client provided!", checkargs); }
+                       break;
+               }
+               
+               case NOTIF_ANY_EXCEPT:
+               {
+                       if(IS_NOT_A_CLIENT(client))
+                               { checkargs = sprintf("%sException can't be a non-client!", checkargs); }
+                       break;
+               }
+               
+               case NOTIF_ANY:
+               {
+                       if(client)
+                               { checkargs = sprintf("%sEntity provided when world was required!", checkargs); }
+                       break;
+               }
+               
                case NOTIF_TEAM:
                case NOTIF_TEAM_EXCEPT:
                {
                        if not(teamplay) { checkargs = sprintf("%sTeamplay not active!", checkargs); }
                case NOTIF_TEAM:
                case NOTIF_TEAM_EXCEPT:
                {
                        if not(teamplay) { checkargs = sprintf("%sTeamplay not active!", checkargs); }
-                       else if(clienttype(client) == CLIENTTYPE_NOTACLIENT)
+                       else if(IS_NOT_A_CLIENT(client))
                        {
                                if(broadcast == NOTIF_TEAM) { checkargs = sprintf("%sNo client provided!", checkargs); }
                                else { checkargs = sprintf("%sException can't be a non-client!", checkargs); }
                        }
                        break;
                }
                        {
                                if(broadcast == NOTIF_TEAM) { checkargs = sprintf("%sNo client provided!", checkargs); }
                                else { checkargs = sprintf("%sException can't be a non-client!", checkargs); }
                        }
                        break;
                }
+               
                default: { checkargs = sprintf("%sImproper broadcast: %d!", checkargs, broadcast); break; }
        }
        if(checkargs != "") { backtrace(sprintf("Incorrect usage of Send_Notification: %s\n", checkargs)); return; }
                default: { checkargs = sprintf("%sImproper broadcast: %d!", checkargs, broadcast); break; }
        }
        if(checkargs != "") { backtrace(sprintf("Incorrect usage of Send_Notification: %s\n", checkargs)); return; }
@@ -439,40 +599,37 @@ void Send_Notification(float broadcast, entity client,
        for(i = 0; i < net_notif.nent_stringcount; ++i) { net_notif.nent_strings[i] = strzone(...(i, string)); }
        for(i = 0; i < net_notif.nent_floatcount; ++i) { net_notif.nent_floats[i] = ...((net_notif.nent_stringcount + i), float); }
        
        for(i = 0; i < net_notif.nent_stringcount; ++i) { net_notif.nent_strings[i] = strzone(...(i, string)); }
        for(i = 0; i < net_notif.nent_floatcount; ++i) { net_notif.nent_floats[i] = ...((net_notif.nent_stringcount + i), float); }
        
-       net_notif.think = Notification_Remove;
+       net_notif.think = Net_Notification_Remove;
        net_notif.nextthink = (time + 0.5); 
 
        net_notif.nextthink = (time + 0.5); 
 
-       Net_LinkEntity(net_notif, FALSE, 0, Write_Notification);
+       Net_LinkEntity(net_notif, FALSE, 0, Net_Write_Notification);
 
        if((!server_is_local) && (broadcast == NOTIF_ANY || broadcast == NOTIF_ANY_EXCEPT) && (net_type != MSG_CENTER))
 
        if((!server_is_local) && (broadcast == NOTIF_ANY || broadcast == NOTIF_ANY_EXCEPT) && (net_type != MSG_CENTER))
-               { Local_Notification_Without_VarArgs(net_type, net_name, notif.nent_stringcount, notif.nent_floatcount,
-                       IFSTR(0), IFSTR(1), IFSTR(2), IFSTR(3), IFFL(0), IFFL(1), IFFL(2), IFFL(3)); }
+       {
+               Local_Notification_WOVA(
+                       net_type, net_name,
+                       notif.nent_stringcount,
+                       notif.nent_floatcount,
+                       IFSTR(0), IFSTR(1), IFSTR(2), IFSTR(3),
+                       IFFL(0), IFFL(1), IFFL(2), IFFL(3));
+       }
 }
 
 }
 
-void Send_Notification_Without_VarArgs(float broadcast, entity client,
+// WOVA = Without Variable Arguments 
+void Send_Notification_WOVA(float broadcast, entity client,
        float net_type, float net_name,
        float net_type, float net_name,
-       float stringcount, float floatcount,
        string s1, string s2, string s3, string s4,
        float f1, float f2, float f3, float f4)
 {
        string s1, string s2, string s3, string s4,
        float f1, float f2, float f3, float f4)
 {
-       #define VARITEM(stringc,floatc,args) if((stringcount == stringc) && (floatcount == floatc)) \
-               { Send_Notification(broadcast, client, net_type, net_name, args); return; }
+       entity notif = Get_Notif_Ent(net_type, net_name);
+       #define VARITEM(stringc,floatc,args) \
+               if((notif.nent_stringcount == stringc) && (notif.nent_floatcount == floatc)) \
+                       { Send_Notification(broadcast, client, net_type, net_name, args); return; }
        EIGHT_VARS_TO_VARARGS_VARLIST
        #undef VARITEM
        Send_Notification(broadcast, client, net_type, net_name); // some notifications don't have any arguments at all
 }
 
        EIGHT_VARS_TO_VARARGS_VARLIST
        #undef VARITEM
        Send_Notification(broadcast, client, net_type, net_name); // some notifications don't have any arguments at all
 }
 
-void Send_Notification_Legacy_Wrapper(float broadcast, entity client,
-       float net_type, float net_name,
-       string s1, string s2,
-       float f1, float f2, float f3)
-{
-       entity notif = Get_Notif_Ent(net_type, net_name);
-       Send_Notification_Without_VarArgs(broadcast, client, net_type, net_name,
-               notif.nent_stringcount, notif.nent_floatcount,
-               s1, s2, "", "", f1, f2, f3, 0);
-}
-
 
 // =============================
 //  LEGACY NOTIFICATION SYSTEMS
 
 // =============================
 //  LEGACY NOTIFICATION SYSTEMS
@@ -496,8 +653,4 @@ void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration,
                });
        }
 }
                });
        }
 }
-void Send_CSQC_Centerprint_Generic_Expire(entity e, float id)
-{
-       Send_CSQC_Centerprint_Generic(e, id, "", 1, 0);
-}
 #endif // ifdef SVQC
 #endif // ifdef SVQC