X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fnotifications.qc;h=a406df52419dc71d1bdf985e7aa963e83b988fa1;hp=c2420d4435ba7bdc7ca4647edcbfb015164ba9eb;hb=e72ae8623dbd67dc7d85ed16fa4a18dd75663629;hpb=1ea3b0365fd6fbb31c38cf6d22ee0b952e9010c1 diff --git a/qcsrc/common/notifications.qc b/qcsrc/common/notifications.qc index c2420d4435..a406df5241 100644 --- a/qcsrc/common/notifications.qc +++ b/qcsrc/common/notifications.qc @@ -1,9 +1,24 @@ +#if defined(CSQC) +#elif defined(MENUQC) +#elif defined(SVQC) + #include "../dpdefs/progsdefs.qh" + #include "../dpdefs/dpextensions.qh" + #include "constants.qh" + #include "teams.qh" + #include "counting.qh" + #include "../server/autocvars.qh" + #include "../server/constants.qh" + #include "../server/defs.qh" + #include "notifications.qh" + #include "../server/mutators/mutators_include.qh" +#endif + // ================================================ // Unified notification system, written by Samual // Last updated: August, 2013 // ================================================ -string Get_Notif_TypeName(float net_type) +string Get_Notif_TypeName(int net_type) { switch(net_type) { @@ -18,7 +33,7 @@ string Get_Notif_TypeName(float net_type) return ""; } -entity Get_Notif_Ent(float net_type, float net_name) +entity Get_Notif_Ent(int net_type, int net_name) { switch(net_type) { @@ -88,38 +103,38 @@ string Notification_CheckArgs( { checkargs = sprintf("%sNo client provided!", checkargs); } break; } - + case NOTIF_ALL_EXCEPT: { if(IS_NOT_A_CLIENT(client)) { checkargs = sprintf("%sException can't be a non-client!", checkargs); } break; } - + case NOTIF_ALL: { if(client) { checkargs = sprintf("%sEntity provided when world was required!", checkargs); } break; } - + case NOTIF_TEAM: { - if not(teamplay) + if (!teamplay) { checkargs = sprintf("%sTeamplay not active!", checkargs); } - //else if not(client.team) { checkargs = sprintf("%sNo team provided!", checkargs); } + //else if (!client.team) { checkargs = sprintf("%sNo team provided!", checkargs); } break; } - + case NOTIF_TEAM_EXCEPT: { - if not(teamplay) + if (!teamplay) { checkargs = sprintf("%sTeamplay not active!", checkargs); } else if(IS_NOT_A_CLIENT(client)) { checkargs = sprintf("%sException can't be a non-client!", checkargs); } break; } - + default: { checkargs = sprintf("%sImproper broadcast: %d!", checkargs, broadcast); break; } } return checkargs; @@ -139,12 +154,12 @@ float Notification_ShouldSend(float broadcast, entity to_client, entity other_cl && (to_client.enemy == other_client) ) - ) { return TRUE; } + ) { return true; } break; } case NOTIF_ONE_ONLY: // send ONLY to one client { - if(to_client == other_client) { return TRUE; } + if(to_client == other_client) { return true; } break; } case NOTIF_TEAM: // send only to X team and their spectators @@ -157,7 +172,7 @@ float Notification_ShouldSend(float broadcast, entity to_client, entity other_cl && (to_client.enemy.team == other_client.team) ) - ) { return TRUE; } + ) { return true; } break; } case NOTIF_TEAM_EXCEPT: // send only to X team and their spectators, except for Y person and their spectators @@ -178,12 +193,12 @@ float Notification_ShouldSend(float broadcast, entity to_client, entity other_cl ) ) ) - ) { return TRUE; } + ) { return true; } break; } case NOTIF_ALL: // send to everyone { - return TRUE; + return true; } case NOTIF_ALL_EXCEPT: // send to everyone except X person and their spectators { @@ -195,11 +210,11 @@ float Notification_ShouldSend(float broadcast, entity to_client, entity other_cl && (to_client.enemy == other_client) ) - ) { return TRUE; } + ) { return true; } break; } } - return FALSE; + return false; } #endif @@ -224,15 +239,16 @@ void Destroy_Notification_Entity(entity notif) void Destroy_All_Notifications(void) { entity notif; - float i; - - #define DESTROY_LOOP(type,count) \ + int i; + + #define DESTROY_LOOP(type,count) do { \ for(i = 1; i <= count; ++i) \ { \ notif = Get_Notif_Ent(type, i); \ - if not(notif) { backtrace("Destroy_All_Notifications(): Missing notification entity!\n"); return; } \ + if (!notif) { backtrace("Destroy_All_Notifications(): Missing notification entity!\n"); return; } \ Destroy_Notification_Entity(notif); \ - } + } \ + } while(0) // kill all networked notifications and centerprints #ifdef SVQC @@ -242,24 +258,24 @@ void Destroy_All_Notifications(void) #endif // kill all real notification entities - DESTROY_LOOP(MSG_ANNCE, NOTIF_ANNCE_COUNT) - DESTROY_LOOP(MSG_INFO, NOTIF_INFO_COUNT) - DESTROY_LOOP(MSG_CENTER, NOTIF_CENTER_COUNT) - DESTROY_LOOP(MSG_MULTI, NOTIF_MULTI_COUNT) - DESTROY_LOOP(MSG_CHOICE, NOTIF_CHOICE_COUNT) + DESTROY_LOOP(MSG_ANNCE, NOTIF_ANNCE_COUNT); + DESTROY_LOOP(MSG_INFO, NOTIF_INFO_COUNT); + DESTROY_LOOP(MSG_CENTER, NOTIF_CENTER_COUNT); + DESTROY_LOOP(MSG_MULTI, NOTIF_MULTI_COUNT); + DESTROY_LOOP(MSG_CHOICE, NOTIF_CHOICE_COUNT); #undef DESTROY_LOOP } string Process_Notif_Line( - float typeid, - float chat, + int typeId, + bool chat, string input, string notiftype, string notifname, string stringtype) { #ifdef CSQC - if(typeid == MSG_INFO) + if(typeId == MSG_INFO) { if((chat && autocvar_notification_allow_chatboxprint) || (autocvar_notification_allow_chatboxprint == 2)) @@ -281,7 +297,7 @@ string Process_Notif_Line( // done to both MSG_INFO and MSG_CENTER if(substring(input, (strlen(input) - 1), 1) == "\n") { - print(sprintf( + printf( strcat( "^1TRAILING NEW LINE AT END OF NOTIFICATION: ", "^7net_type = %s, net_name = %s, string = %s.\n" @@ -289,8 +305,8 @@ string Process_Notif_Line( notiftype, notifname, stringtype - )); - notif_error = TRUE; + ); + notif_error = true; input = substring(input, 1, (strlen(input) - 1)); } @@ -306,7 +322,7 @@ string Process_Notif_Args( string selected, remaining = args; float sel_num = 0; - for(;(remaining != "");) + for (;(remaining != "");) { selected = car(remaining); remaining = cdr(remaining); @@ -316,7 +332,7 @@ string Process_Notif_Args( { if(sel_num == NOTIF_MAX_ARGS) { - print(sprintf( + printf( strcat( "^1NOTIFICATION HAS TOO MANY ARGUMENTS: ", "^7net_type = %s, net_name = %s, max args = %d.\n" @@ -324,22 +340,31 @@ string Process_Notif_Args( notiftype, notifname, NOTIF_MAX_ARGS - )); - notif_error = TRUE; + ); + notif_error = true; break; } switch(strtolower(selected)) { - #define ARG_CASE(prog,selected,result) \ - #if (prog != ARG_DC) \ - case selected: { ++sel_num; break; } \ - #endif + #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { ++sel_num; break; } + #define ARG_CASE_ARG_CS_SV_DC(selected,result) case selected: { ++sel_num; break; } + #define ARG_CASE_ARG_CS_SV(selected,result) case selected: { ++sel_num; break; } + #define ARG_CASE_ARG_CS(selected,result) case selected: { ++sel_num; break; } + #define ARG_CASE_ARG_SV(selected,result) case selected: { ++sel_num; break; } + #define ARG_CASE_ARG_DC(selected,result) + #define ARG_CASE(prog,selected,result) ARG_CASE_##prog(selected,result) NOTIF_ARGUMENT_LIST #undef ARG_CASE + #undef ARG_CASE_ARG_DC + #undef ARG_CASE_ARG_SV + #undef ARG_CASE_ARG_CS + #undef ARG_CASE_ARG_CS_SV + #undef ARG_CASE_ARG_CS_SV_DC + #undef ARG_CASE_ARG_CS_SV_HA default: { - print(sprintf( + printf( strcat( "^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: ", "^7net_type = %s, net_name = %s, args arg = '%s'.\n" @@ -347,8 +372,8 @@ string Process_Notif_Args( notiftype, notifname, selected - )); - notif_error = TRUE; + ); + notif_error = true; break; } } @@ -358,7 +383,7 @@ string Process_Notif_Args( { if(sel_num == NOTIF_MAX_HUDARGS) { - print(sprintf( + printf( strcat( "^1NOTIFICATION HAS TOO MANY ARGUMENTS: ", "^7net_type = %s, net_name = %s, max hudargs = %d.\n" @@ -366,22 +391,31 @@ string Process_Notif_Args( notiftype, notifname, NOTIF_MAX_HUDARGS - )); - notif_error = TRUE; + ); + notif_error = true; break; } switch(strtolower(selected)) { - #define ARG_CASE(prog,selected,result) \ - #if (prog == ARG_CS_SV_HA) \ - case selected: { ++sel_num; break; } \ - #endif + #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { ++sel_num; break; } + #define ARG_CASE_ARG_CS_SV_DC(selected,result) + #define ARG_CASE_ARG_CS_SV(selected,result) + #define ARG_CASE_ARG_CS(selected,result) + #define ARG_CASE_ARG_SV(selected,result) + #define ARG_CASE_ARG_DC(selected,result) + #define ARG_CASE(prog,selected,result) ARG_CASE_##prog(selected,result) NOTIF_ARGUMENT_LIST #undef ARG_CASE + #undef ARG_CASE_ARG_DC + #undef ARG_CASE_ARG_SV + #undef ARG_CASE_ARG_CS + #undef ARG_CASE_ARG_CS_SV + #undef ARG_CASE_ARG_CS_SV_DC + #undef ARG_CASE_ARG_CS_SV_HA default: { - print(sprintf( + printf( strcat( "^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: ", "^7net_type = %s, net_name = %s, hudargs arg = '%s'.\n" @@ -389,18 +423,18 @@ string Process_Notif_Args( notiftype, notifname, selected - )); - notif_error = TRUE; + ); + notif_error = true; break; } } break; } - case 3: // durcnt + case 3: // durcnt { if(sel_num == NOTIF_MAX_DURCNT) { - print(sprintf( + printf( strcat( "^1NOTIFICATION HAS TOO MANY ARGUMENTS: ", "^7net_type = %s, net_name = %s, max durcnt = %d.\n" @@ -408,25 +442,34 @@ string Process_Notif_Args( notiftype, notifname, NOTIF_MAX_DURCNT - )); - notif_error = TRUE; + ); + notif_error = true; break; } switch(strtolower(selected)) { - #define ARG_CASE(prog,selected,result) \ - #if (prog == ARG_CS_SV_DC) || (prog == ARG_DC) \ - case selected: { ++sel_num; break; } \ - #endif + #define ARG_CASE_ARG_CS_SV_HA(selected,result) + #define ARG_CASE_ARG_CS_SV_DC(selected,result) case selected: { ++sel_num; break; } + #define ARG_CASE_ARG_CS_SV(selected,result) + #define ARG_CASE_ARG_CS(selected,result) + #define ARG_CASE_ARG_SV(selected,result) + #define ARG_CASE_ARG_DC(selected,result) case selected: { ++sel_num; break; } + #define ARG_CASE(prog,selected,result) ARG_CASE_##prog(selected,result) NOTIF_ARGUMENT_LIST #undef ARG_CASE + #undef ARG_CASE_ARG_DC + #undef ARG_CASE_ARG_SV + #undef ARG_CASE_ARG_CS + #undef ARG_CASE_ARG_CS_SV + #undef ARG_CASE_ARG_CS_SV_DC + #undef ARG_CASE_ARG_CS_SV_HA default: { if(ftos(stof(selected)) != "") { ++sel_num; } else { - print(sprintf( + printf( strcat( "^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: ", "^7net_type = %s, net_name = %s, durcnt arg = '%s'.\n" @@ -434,8 +477,8 @@ string Process_Notif_Args( notiftype, notifname, selected - )); - notif_error = TRUE; + ); + notif_error = true; } break; } @@ -450,13 +493,13 @@ string Process_Notif_Args( void Create_Notification_Entity( float var_default, float var_cvar, - float typeid, - float nameid, + int typeId, + int nameid, string namestring, - float strnum, - float flnum, + int strnum, + int flnum, /* MSG_ANNCE */ - float channel, + float channel, string snd, float vol, float position, @@ -469,21 +512,21 @@ void Create_Notification_Entity( string normal, string gentle, /* MSG_MULTI */ - float anncename, - float infoname, - float centername, + int anncename, + int infoname, + int centername, /* MSG_CHOICE */ float challow_def, float challow_var, - float chtype, - float optiona, - float optionb) + int chtype, + int optiona, + int optionb) { // ===================== // Global Entity Setup // ===================== entity notif = spawn(); - switch(typeid) + switch(typeId) { case MSG_ANNCE: { @@ -523,7 +566,7 @@ void Create_Notification_Entity( "^1NOTIFICATION WITH IMPROPER TYPE: ", "^7net_type = %d, net_name = %s.\n" ), - typeid, + typeId, namestring )); return; // It's not possible to recover from this one @@ -531,25 +574,25 @@ void Create_Notification_Entity( } notif.nent_default = var_default; notif.nent_enabled = (1 <= var_cvar); - notif.nent_type = typeid; + notif.nent_type = typeId; notif.nent_id = nameid; notif.nent_name = strzone(namestring); - - string typestring = Get_Notif_TypeName(typeid); + + string typestring = Get_Notif_TypeName(typeId); // Other pre-notif-setup requisites - notif_error = FALSE; + notif_error = false; // ==================== // Notification Setup // ==================== - switch(typeid) + switch(typeId) { case MSG_ANNCE: { // Set MSG_ANNCE information and handle precaching #ifdef CSQC - if not(GENTLE && (var_cvar == 1)) + if (!(GENTLE && (var_cvar == 1))) { if(snd != "") { @@ -564,25 +607,25 @@ void Create_Notification_Entity( } else { - print(sprintf( + printf( strcat( "^1NOTIFICATION WITH NO SOUND: ", "^7net_type = %s, net_name = %s.\n" ), typestring, namestring - )); - notif_error = TRUE; + ); + notif_error = true; } } - else { notif.nent_enabled = FALSE; } + else { notif.nent_enabled = false; } #else - notif.nent_enabled = FALSE; + notif.nent_enabled = false; #endif break; } - + case MSG_INFO: case MSG_CENTER: { @@ -594,7 +637,7 @@ void Create_Notification_Entity( #ifdef SVQC float should_process_args = server_is_dedicated; #else - float should_process_args = TRUE; + float should_process_args = true; #endif if(should_process_args) @@ -611,7 +654,7 @@ void Create_Notification_Entity( } else if((hudargs == "") && (durcnt =="")) { - print(sprintf( + printf( strcat( "^1NOTIFICATION HAS ARG COUNTS BUT NO ARGS OR HUDARGS OR DURCNT: ", "^7net_type = %s, net_name = %s, strnum = %d, flnum = %d\n" @@ -620,8 +663,8 @@ void Create_Notification_Entity( namestring, strnum, flnum - )); - notif_error = TRUE; + ); + notif_error = true; } } else if(args != "") @@ -641,53 +684,53 @@ void Create_Notification_Entity( { notif.nent_hudargs = strzone( Process_Notif_Args(2, hudargs, typestring, namestring)); - + if(icon != "") { notif.nent_icon = strzone(icon); } else { - print(sprintf( + printf( strcat( "^1NOTIFICATION HAS HUDARGS BUT NO ICON: ", "^7net_type = %s, net_name = %s.\n" ), typestring, namestring - )); - notif_error = TRUE; + ); + notif_error = true; } } else if(icon != "") { - print(sprintf( + printf( strcat( "^1NOTIFICATION HAS ICON BUT NO HUDARGS: ", "^7net_type = %s, net_name = %s.\n" ), typestring, namestring - )); - notif_error = TRUE; + ); + notif_error = true; } if(durcnt != "") { notif.nent_durcnt = strzone( Process_Notif_Args(3, durcnt, typestring, namestring)); - + if(cpid != NO_MSG) { notif.nent_cpid = cpid; } else { - print(sprintf( + printf( strcat( "^1NOTIFICATION HAS DURCNT BUT NO CPID: ", "^7net_type = %s, net_name = %s.\n" ), typestring, namestring - )); - notif_error = TRUE; + ); + notif_error = true; } - } + } else if(cpid != NO_MSG) { notif.nent_cpid = cpid; } #endif @@ -695,39 +738,39 @@ void Create_Notification_Entity( // ====================== // Process Notif String // ====================== - #define SET_NOTIF_STRING(string,stringname) \ + #define SET_NOTIF_STRING(string,stringname) do { \ notif.nent_string = strzone(CCR( \ Process_Notif_Line( \ - typeid, \ + typeId, \ (var_cvar > 1), \ string, \ typestring, \ namestring, \ stringname \ )) \ - ); + ); \ + } while(0) if(GENTLE) { - if(gentle != "") { SET_NOTIF_STRING(gentle, "GENTLE") } - else if(normal != "") { SET_NOTIF_STRING(normal, "NORMAL") } + if(gentle != "") { SET_NOTIF_STRING(gentle, "GENTLE"); } + else if(normal != "") { SET_NOTIF_STRING(normal, "NORMAL"); } } - else if(normal != "") { SET_NOTIF_STRING(normal, "NORMAL") } - + else if(normal != "") { SET_NOTIF_STRING(normal, "NORMAL"); } #undef SET_NOTIF_STRING // Check to make sure a string was chosen if(notif.nent_string == "") { - print(sprintf( + printf( strcat( "^1EMPTY NOTIFICATION: ", "^7net_type = %s, net_name = %s.\n" ), typestring, namestring - )); - notif_error = TRUE; + ); + notif_error = true; } } @@ -739,43 +782,43 @@ void Create_Notification_Entity( // Set MSG_MULTI string/float counts if((anncename == NO_MSG) && (infoname == NO_MSG) && (centername == NO_MSG)) { - print(sprintf( + printf( strcat( "^1NOTIFICATION WITH NO SUBCALLS: ", "^7net_type = %s, net_name = %s.\n" ), typestring, namestring - )); - notif_error = TRUE; + ); + notif_error = true; } else { // announcements don't actually need any arguments, so lets not even count them. if(anncename != NO_MSG) { notif.nent_msgannce = msg_annce_notifs[anncename - 1]; } - + float infoname_stringcount = 0, infoname_floatcount = 0; float centername_stringcount = 0, centername_floatcount = 0; - + if(infoname != NO_MSG) { notif.nent_msginfo = msg_info_notifs[infoname - 1]; infoname_stringcount = notif.nent_msginfo.nent_stringcount; infoname_floatcount = notif.nent_msginfo.nent_floatcount; } - + if(centername != NO_MSG) { notif.nent_msgcenter = msg_center_notifs[centername - 1]; centername_stringcount = notif.nent_msgcenter.nent_stringcount; centername_floatcount = notif.nent_msgcenter.nent_floatcount; } - + // set the requirements of THIS notification to the totals of its subcalls notif.nent_stringcount = max(infoname_stringcount, centername_stringcount); notif.nent_floatcount = max(infoname_floatcount, centername_floatcount); } - + break; } @@ -783,15 +826,15 @@ void Create_Notification_Entity( { if((chtype == NO_MSG) || (optiona == NO_MSG) || (optionb == NO_MSG)) { - print(sprintf( + printf( strcat( "^1NOTIFICATION IS MISSING CHOICE PARAMS: ", "^7net_type = %s, net_name = %s.\n" ), typestring, namestring - )); - notif_error = TRUE; + ); + notif_error = true; } else { @@ -821,7 +864,7 @@ void Create_Notification_Entity( notif.nent_optionb = msg_multi_notifs[optionb - 1]; break; } - case MSG_CHOICE: // should we REALLY allow nested options?... + case MSG_CHOICE: // should we REALLY allow nested options?... { notif.nent_optiona = msg_choice_notifs[optiona - 1]; notif.nent_optionb = msg_choice_notifs[optionb - 1]; @@ -830,15 +873,15 @@ void Create_Notification_Entity( default: { - print(sprintf( + printf( strcat( "^1NOTIFICATION WITH IMPROPER TYPE: ", "^7net_type = %d, net_name = %s.\n" ), - typeid, + typeId, namestring - )); - notif_error = TRUE; + ); + notif_error = true; break; } } @@ -846,7 +889,7 @@ void Create_Notification_Entity( notif.nent_challow_var = challow_var; // 0: never allowed, 1: allowed in warmup, 2: always allowed notif.nent_stringcount = max(notif.nent_optiona.nent_stringcount, notif.nent_optionb.nent_stringcount); notif.nent_floatcount = max(notif.nent_optiona.nent_floatcount, notif.nent_optionb.nent_floatcount); - + /*#ifdef NOTIFICATIONS_DEBUG Debug_Notification(sprintf( "Create_Notification_Entity(...): MSG_CHOICE: %s\n%s\n%s\n", @@ -870,27 +913,27 @@ void Create_Notification_Entity( } break; } - + default: { - print(sprintf( + printf( strcat( "^1NOTIFICATION WITH IMPROPER TYPE: ", "^7net_type = %d, net_name = %s.\n" ), - typeid, + typeId, namestring - )); - notif_error = TRUE; + ); + notif_error = true; break; } } - // now check to see if any errors happened + // now check to see if any errors happened if(notif_error) { - notif.nent_enabled = FALSE; // disable the notification so it can't cause trouble - notif_global_error = TRUE; // throw the red flag that an error happened on init + notif.nent_enabled = false; // disable the notification so it can't cause trouble + notif_global_error = true; // throw the red flag that an error happened on init } } @@ -903,8 +946,7 @@ void Create_Notification_Entity( #ifdef SVQC void Notification_GetCvars(void) { - float i; - for(i = 0; i <= NOTIF_CHOICE_COUNT; ++i) + for(int i = 0; i <= NOTIF_CHOICE_COUNT; ++i) { GetCvars_handleFloat( get_cvars_s, @@ -947,7 +989,7 @@ void Dump_Notifications(float fh, float alsoprint) NOTIF_WRITE(notif_msg) } string notif_msg; - float i; + int i; entity e; // Note: This warning only applies to the notifications.cfg file that is output... @@ -977,10 +1019,10 @@ void Dump_Notifications(float fh, float alsoprint) for(i = 1; i <= NOTIF_ANNCE_COUNT; ++i) { e = Get_Notif_Ent(MSG_ANNCE, i); - if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; } - + if (!e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; } + NOTIF_WRITE_ENTITY( - "Notification control cvar: 0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled)" + "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled" ); } @@ -988,10 +1030,10 @@ void Dump_Notifications(float fh, float alsoprint) for(i = 1; i <= NOTIF_INFO_COUNT; ++i) { e = Get_Notif_Ent(MSG_INFO, i); - if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; } - + if (!e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; } + NOTIF_WRITE_ENTITY( - "Notification control cvar: 0 = off, 1 = print to console, " + "0 = off, 1 = print to console, " "2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" ); } @@ -1000,10 +1042,10 @@ void Dump_Notifications(float fh, float alsoprint) for(i = 1; i <= NOTIF_CENTER_COUNT; ++i) { e = Get_Notif_Ent(MSG_CENTER, i); - if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; } - + if (!e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; } + NOTIF_WRITE_ENTITY( - "Notification control cvar: 0 = off, 1 = centerprint" + "0 = off, 1 = centerprint" ); } @@ -1011,10 +1053,10 @@ void Dump_Notifications(float fh, float alsoprint) for(i = 1; i <= NOTIF_MULTI_COUNT; ++i) { e = Get_Notif_Ent(MSG_MULTI, i); - if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; } - + if (!e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; } + NOTIF_WRITE_ENTITY( - "Notification control cvar: 0 = off, 1 = trigger subcalls" + "Enable this multiple notification" ); } @@ -1022,94 +1064,96 @@ void Dump_Notifications(float fh, float alsoprint) for(i = 1; i <= NOTIF_CHOICE_COUNT; ++i) { e = Get_Notif_Ent(MSG_CHOICE, i); - if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; } - + if (!e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; } + NOTIF_WRITE_ENTITY_CHOICE( - "Notification control cvar: 0 = off, 1 = trigger option A subcall, 2 = trigger option B subcall", - "Notification control cvar: 0 = off, 1 = allowed in warmup mode, 2 = always allowed" + "Choice for this notification 0 = off, 1 = default message, 2 = verbose message", + "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always" ); } // edit these to match whichever cvars are used for specific notification options NOTIF_WRITE("\n// HARD CODED notification variables:\n"); - + NOTIF_WRITE_HARDCODED( "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)" + "Allow INFO notifications to be printed to chat box" + "0 = do not allow, " + "1 = allow only if allowed by individual notification_INFO* cvars, " + "2 = force all INFO notifications to be printed to the chatbox" ); - + NOTIF_WRITE_HARDCODED( "debug", "0", "Print extra debug information on all notification function calls " "(Requires -DNOTIFICATIONS_DEBUG flag to be enabled on QCSRC compilation)... " "0 = disabled, 1 = dprint, 2 = print" ); - + NOTIF_WRITE_HARDCODED( "errors_are_fatal", "1", "If a notification fails upon initialization, cause a Host_Error to stop the program" ); - + NOTIF_WRITE_HARDCODED( "item_centerprinttime", "1.5", "How long to show item information centerprint messages (like 'You got the Electro' or such)" ); - + NOTIF_WRITE_HARDCODED( "lifetime_mapload", "10", "Amount of time that notification entities last immediately at mapload (in seconds) " "to help prevent notifications from being lost on early init (like gamestart countdown)" ); - + NOTIF_WRITE_HARDCODED( "lifetime_runtime", "0.5", "Amount of time that notification entities last on the server during runtime (In seconds)" ); - + NOTIF_WRITE_HARDCODED( "server_allows_location", "1", "Server side cvar for allowing death messages to show location information too" ); - + NOTIF_WRITE_HARDCODED( "show_location", "0", "Append location information to MSG_INFO death/kill messages" ); - + NOTIF_WRITE_HARDCODED( "show_location_string", "", "Replacement string piped into sprintf, " "so you can do different messages like this: ' at the %s' or ' (near %s)'" ); - + NOTIF_WRITE_HARDCODED( "show_sprees", "1", "Print information about sprees in death/kill messages" ); - + NOTIF_WRITE_HARDCODED( "show_sprees_center", "1", "Show spree information in MSG_CENTER messages... " "0 = off, 1 = target (but only for first victim) and attacker" ); - + NOTIF_WRITE_HARDCODED( "show_sprees_center_specialonly", "1", "Don't show spree information in MSG_CENTER messages if it isn't an achievement" ); - + NOTIF_WRITE_HARDCODED( "show_sprees_info", "3", "Show spree information in MSG_INFO messages... " "0 = off, 1 = target only, 2 = attacker only, 3 = target and attacker" ); - + NOTIF_WRITE_HARDCODED( "show_sprees_info_newline", "1", "Show attacker spree information for MSG_INFO messages on a separate line than the death notification itself" ); - + NOTIF_WRITE_HARDCODED( "show_sprees_info_specialonly", "1", "Don't show attacker spree information in MSG_INFO messages if it isn't an achievement" @@ -1133,7 +1177,7 @@ void Dump_Notifications(float fh, float alsoprint) NOTIF_MULTI_COUNT, NOTIF_CHOICE_COUNT )); - + return; #undef NOTIF_WRITE_HARDCODED #undef NOTIF_WRITE_ENTITY @@ -1157,9 +1201,9 @@ void Debug_Notification(string input) #endif string Local_Notification_sprintf( - string input, string args, + string input, string args, string s1, string s2, string s3, string s4, - float f1, float f2, float f3, float f4) + int f1, float f2, float f3, float f4) { #ifdef NOTIFICATIONS_DEBUG Debug_Notification(sprintf( @@ -1170,9 +1214,9 @@ string Local_Notification_sprintf( sprintf("%d, %d, %d, %d", f1, f2, f3, f4) )); #endif - + string selected; - float sel_num; + int sel_num; for(sel_num = 0; sel_num < NOTIF_MAX_ARGS; ++sel_num) { arg_slot[sel_num] = ""; } string tmp_s; @@ -1180,21 +1224,33 @@ string Local_Notification_sprintf( for(sel_num = 0;(args != "");) { selected = car(args); args = cdr(args); - NOTIF_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 \ - #if (prog != ARG_SV) && (prog != ARG_DC) \ - case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \ - #endif \ - #else \ - #if (prog != ARG_CS) && (prog != ARG_DC) \ - case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \ - #endif \ - #endif + #ifdef CSQC + #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE_ARG_CS_SV_DC(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE_ARG_CS_SV(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE_ARG_CS(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE_ARG_SV(selected,result) + #define ARG_CASE_ARG_DC(selected,result) + #else + #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE_ARG_CS_SV_DC(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE_ARG_CS_SV(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE_ARG_CS(selected,result) + #define ARG_CASE_ARG_SV(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE_ARG_DC(selected,result) + #endif + #define ARG_CASE(prog,selected,result) ARG_CASE_##prog(selected,result) NOTIF_ARGUMENT_LIST #undef ARG_CASE + #undef ARG_CASE_ARG_DC + #undef ARG_CASE_ARG_SV + #undef ARG_CASE_ARG_CS + #undef ARG_CASE_ARG_CS_SV + #undef ARG_CASE_ARG_CS_SV_DC + #undef ARG_CASE_ARG_CS_SV_HA default: NOTIF_HIT_UNKNOWN(NOTIF_MAX_ARGS, "Local_Notification_sprintf") } } @@ -1230,7 +1286,7 @@ void Local_Notification_sound( soundposition )); #endif - + sound( world, soundchannel, @@ -1242,7 +1298,7 @@ void Local_Notification_sound( soundvolume, soundposition ); - + if(prev_soundfile) { strunzone(prev_soundfile); } prev_soundfile = strzone(soundfile); prev_soundtime = time; @@ -1273,33 +1329,44 @@ void Local_Notification_sound( void Local_Notification_HUD_Notify_Push( string icon, string hudargs, - string s1, string s2, string s3, string s4) + string s1, string s2, string s3, string s4, + float f1, float f2, float f3, float f4) { string selected; - float sel_num; arg_slot[0] = ""; arg_slot[1] = ""; + int sel_num; for(sel_num = 0;(hudargs != "");) { selected = car(hudargs); hudargs = cdr(hudargs); - NOTIF_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) \ - #if (prog == ARG_CS_SV_HA) \ - case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \ - #endif + #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE_ARG_CS_SV_DC(selected,result) + #define ARG_CASE_ARG_CS_SV(selected,result) + #define ARG_CASE_ARG_CS(selected,result) + #define ARG_CASE_ARG_SV(selected,result) + #define ARG_CASE_ARG_DC(selected,result) + #define ARG_CASE(prog,selected,result) ARG_CASE_##prog(selected,result) NOTIF_ARGUMENT_LIST #undef ARG_CASE + #undef ARG_CASE_ARG_DC + #undef ARG_CASE_ARG_SV + #undef ARG_CASE_ARG_CS + #undef ARG_CASE_ARG_CS_SV + #undef ARG_CASE_ARG_CS_SV_DC + #undef ARG_CASE_ARG_CS_SV_HA default: NOTIF_HIT_UNKNOWN(NOTIF_MAX_HUDARGS, "Local_Notification_HUD_Notify_Push") } } #ifdef NOTIFICATIONS_DEBUG Debug_Notification(sprintf( - "Local_Notification_HUD_Notify_Push('%s^7', '%s', %s, %s);\n", + "Local_Notification_HUD_Notify_Push('%s^7', '%s', %s, %s, %s);\n", icon, hudargs, MakeConsoleSafe(sprintf("'%s^7', '%s^7', '%s^7', '%s^7'", s1, s2, s3, s4)), + sprintf("%d, %d, %d, %d", f1, f2, f3, f4), MakeConsoleSafe(sprintf("'%s^7', '%s^7'", stof(arg_slot[0]), stof(arg_slot[1]))) )); #endif @@ -1308,24 +1375,31 @@ void Local_Notification_HUD_Notify_Push( void Local_Notification_centerprint_generic( string input, string durcnt, - float cpid, float f1, float f2) + int cpid, float f1, float f2) { - string selected; - float sel_num; arg_slot[0] = ""; arg_slot[1] = ""; - for(sel_num = 0;(durcnt != "");) + for(int sel_num = 0;(durcnt != "");) { - selected = car(durcnt); durcnt = cdr(durcnt); - NOTIF_HIT_MAX(NOTIF_MAX_DURCNT, "Local_Notification_centerprint_generic") + string selected = car(durcnt); durcnt = cdr(durcnt); + NOTIF_HIT_MAX(NOTIF_MAX_DURCNT, "Local_Notification_centerprint_generic"); switch(strtolower(selected)) { - #define ARG_CASE(prog,selected,result) \ - #if (prog == ARG_CS_SV_DC) || (prog == ARG_DC) \ - case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \ - #endif + #define ARG_CASE_ARG_CS_SV_HA(selected,result) + #define ARG_CASE_ARG_CS_SV_DC(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE_ARG_CS_SV(selected,result) + #define ARG_CASE_ARG_CS(selected,result) + #define ARG_CASE_ARG_SV(selected,result) + #define ARG_CASE_ARG_DC(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; } + #define ARG_CASE(prog,selected,result) ARG_CASE_##prog(selected,result) NOTIF_ARGUMENT_LIST #undef ARG_CASE + #undef ARG_CASE_ARG_DC + #undef ARG_CASE_ARG_SV + #undef ARG_CASE_ARG_CS + #undef ARG_CASE_ARG_CS_SV + #undef ARG_CASE_ARG_CS_SV_DC + #undef ARG_CASE_ARG_CS_SV_HA default: { if(ftos(stof(selected)) != "") { arg_slot[sel_num] = selected; ++sel_num; } @@ -1348,7 +1422,7 @@ void Local_Notification_centerprint_generic( } #endif -void Local_Notification(float net_type, float net_name, ...count) +void Local_Notification(int net_type, int net_name, ...count) { // check if this should be aborted if(net_name == NOTIF_ABORT) @@ -1362,7 +1436,7 @@ void Local_Notification(float net_type, float net_name, ...count) #endif return; } - + // check supplied type and name for errors string checkargs = Notification_CheckArgs_TypeName(net_type, net_name); if(checkargs != "") @@ -1380,7 +1454,7 @@ void Local_Notification(float net_type, float net_name, ...count) // retreive entity of this notification entity notif = Get_Notif_Ent(net_type, net_name); - if not(notif) + if (!notif) { #ifdef NOTIFICATIONS_DEBUG Debug_Notification(sprintf( @@ -1394,7 +1468,7 @@ void Local_Notification(float net_type, float net_name, ...count) } // check if the notification is enabled - if not(notif.nent_enabled) + if (!notif.nent_enabled) { #ifdef NOTIFICATIONS_DEBUG Debug_Notification(sprintf( @@ -1424,13 +1498,13 @@ void Local_Notification(float net_type, float net_name, ...count) sprintf("%d, %d, %d, %d", f1, f2, f3, f4) )); #endif - + if((notif.nent_stringcount + notif.nent_floatcount) > count) { backtrace(sprintf( strcat( "Not enough arguments for Local_Notification(%s, %s, ...)! ", - "stringcount(%d) + floatcount(%d) > count(%d)\n", + "stringcount(%d) + floatcount(%d) > count(%d)\n", "Check the definition and function call for accuracy...?\n" ), Get_Notif_TypeName(net_type), @@ -1457,7 +1531,7 @@ void Local_Notification(float net_type, float net_name, ...count) )); return; } - + switch(net_type) { case MSG_ANNCE: @@ -1474,35 +1548,36 @@ void Local_Notification(float net_type, float net_name, ...count) #endif break; } - + case MSG_INFO: { print( Local_Notification_sprintf( notif.nent_string, - notif.nent_args, + notif.nent_args, s1, s2, s3, s4, f1, f2, f3, f4) ); - #ifdef CSQC + #ifdef CSQC if(notif.nent_icon != "") { Local_Notification_HUD_Notify_Push( notif.nent_icon, notif.nent_hudargs, - s1, s2, s3, s4); - } - #endif + s1, s2, s3, s4, + f1, f2, f3, f4); + } + #endif break; } - + #ifdef CSQC case MSG_CENTER: { Local_Notification_centerprint_generic( Local_Notification_sprintf( notif.nent_string, - notif.nent_args, + notif.nent_args, s1, s2, s3, s4, f1, f2, f3, f4), notif.nent_durcnt, @@ -1511,7 +1586,7 @@ void Local_Notification(float net_type, float net_name, ...count) break; } #endif - + case MSG_MULTI: { if(notif.nent_msginfo) @@ -1519,9 +1594,9 @@ void Local_Notification(float net_type, float net_name, ...count) { Local_Notification_WOVA( MSG_INFO, - notif.nent_msginfo.nent_id, - notif.nent_msginfo.nent_stringcount, - notif.nent_msginfo.nent_floatcount, + notif.nent_msginfo.nent_id, + notif.nent_msginfo.nent_stringcount, + notif.nent_msginfo.nent_floatcount, s1, s2, s3, s4, f1, f2, f3, f4); } @@ -1531,8 +1606,8 @@ void Local_Notification(float net_type, float net_name, ...count) { Local_Notification_WOVA( MSG_ANNCE, - notif.nent_msgannce.nent_id, - 0, 0, + notif.nent_msgannce.nent_id, + 0, 0, "", "", "", "", 0, 0, 0, 0); } @@ -1541,11 +1616,11 @@ void Local_Notification(float net_type, float net_name, ...count) { Local_Notification_WOVA( MSG_CENTER, - notif.nent_msgcenter.nent_id, - notif.nent_msgcenter.nent_stringcount, - notif.nent_msgcenter.nent_floatcount, + notif.nent_msgcenter.nent_id, + notif.nent_msgcenter.nent_stringcount, + notif.nent_msgcenter.nent_floatcount, s1, s2, s3, s4, - f1, f2, f3, f4); + f1, f2, f3, f4); } #endif break; @@ -1554,10 +1629,10 @@ void Local_Notification(float net_type, float net_name, ...count) case MSG_CHOICE: { entity found_choice; - + if(notif.nent_challow_var && (warmup_stage || (notif.nent_challow_var == 2))) { - switch(cvar_string(sprintf("notification_%s", notif.nent_name))) + switch(cvar(sprintf("notification_%s", notif.nent_name))) { case 1: found_choice = notif.nent_optiona; break; case 2: found_choice = notif.nent_optionb; break; @@ -1565,21 +1640,21 @@ void Local_Notification(float net_type, float net_name, ...count) } } else { found_choice = notif.nent_optiona; } - + Local_Notification_WOVA( found_choice.nent_type, - found_choice.nent_id, - found_choice.nent_stringcount, - found_choice.nent_floatcount, + found_choice.nent_id, + found_choice.nent_stringcount, + found_choice.nent_floatcount, s1, s2, s3, s4, - f1, f2, f3, f4); + f1, f2, f3, f4); } } } -// WOVA = Without Variable Arguments +// WOVA = Without Variable Arguments void Local_Notification_WOVA( - float net_type, float net_name, + int 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) @@ -1600,8 +1675,8 @@ void Local_Notification_WOVA( #ifdef CSQC void Read_Notification(float is_new) { - float net_type = ReadByte(); - float net_name = ReadShort(); + int net_type = ReadByte(); + int net_name = ReadShort(); entity notif; @@ -1616,7 +1691,7 @@ void Read_Notification(float is_new) net_name )); #endif - + if(is_new) { if(net_name == 0) { reset_centerprint_messages(); } @@ -1632,13 +1707,13 @@ void Read_Notification(float is_new) is_new, time )); - } + } } } else { notif = Get_Notif_Ent(net_type, net_name); - if not(notif) { backtrace("Read_Notification: Could not find notification entity!\n"); return; } + if (!notif) { backtrace("Read_Notification: Could not find notification entity!\n"); return; } #ifdef NOTIFICATIONS_DEBUG Debug_Notification(sprintf( @@ -1658,7 +1733,7 @@ void Read_Notification(float is_new) float f2 = ((1 < notif.nent_floatcount) ? ReadLong() : 0); float f3 = ((2 < notif.nent_floatcount) ? ReadLong() : 0); float f4 = ((3 < notif.nent_floatcount) ? ReadLong() : 0); - + if(is_new) { Local_Notification_WOVA( @@ -1675,8 +1750,8 @@ void Read_Notification(float is_new) #ifdef SVQC void Net_Notification_Remove() { - if not(self) { backtrace(sprintf("Net_Notification_Remove() at %f: Missing self!?\n", time)); return; } - + if (!self) { backtrace(sprintf("Net_Notification_Remove() at %f: Missing self!?\n", time)); return; } + #ifdef NOTIFICATIONS_DEBUG Debug_Notification(sprintf( "Net_Notification_Remove() at %f: %s '%s - %s' notification\n", @@ -1686,25 +1761,23 @@ void Net_Notification_Remove() self.owner.nent_name )); #endif - - float i; - for(i = 0; i < 4; ++i) { if(self.nent_strings[i]) { strunzone(self.nent_strings[i]); } } + + for(int i = 0; i < 4; ++i) { if(self.nent_strings[i]) { strunzone(self.nent_strings[i]); } } remove(self); } -float Net_Write_Notification(entity client, float sf) +float Net_Write_Notification(entity client, int sf) { if(Notification_ShouldSend(self.nent_broadcast, client, self.nent_client)) { - float i; WriteByte(MSG_ENTITY, ENT_CLIENT_NOTIFICATION); WriteByte(MSG_ENTITY, self.nent_net_type); WriteShort(MSG_ENTITY, self.nent_net_name); - for(i = 0; i < self.nent_stringcount; ++i) { WriteString(MSG_ENTITY, self.nent_strings[i]); } - for(i = 0; i < self.nent_floatcount; ++i) { WriteLong(MSG_ENTITY, self.nent_floats[i]); } - return TRUE; + for(int i = 0; i < self.nent_stringcount; ++i) { WriteString(MSG_ENTITY, self.nent_strings[i]); } + for(int i = 0; i < self.nent_floatcount; ++i) { WriteLong(MSG_ENTITY, self.nent_floats[i]); } + return true; } - else { return FALSE; } + else { return false; } } void Kill_Notification( @@ -1720,13 +1793,13 @@ void Kill_Notification( net_name )); #endif - + string checkargs = Notification_CheckArgs(broadcast, client, 1, 1); if(checkargs != "") { backtrace(sprintf("Incorrect usage of Kill_Notification: %s\n", checkargs)); return; } entity notif, net_notif; float killed_cpid = NO_CPID; - + switch(net_type) { case 0: @@ -1734,14 +1807,14 @@ void Kill_Notification( killed_cpid = 0; // kill ALL centerprints break; } - + case MSG_CENTER: { if(net_name) { entity notif = Get_Notif_Ent(net_type, net_name); - if not(notif) { backtrace("Kill_Notification: Could not find notification entity!\n"); return; } - + if (!notif) { backtrace("Kill_Notification: Could not find notification entity!\n"); return; } + if(notif.nent_cpid) killed_cpid = notif.nent_cpid; else @@ -1769,7 +1842,7 @@ void Kill_Notification( net_notif.nent_client = client; net_notif.nent_net_type = MSG_CENTER_CPID; net_notif.nent_net_name = killed_cpid; - Net_LinkEntity(net_notif, FALSE, autocvar_notification_lifetime_runtime, Net_Write_Notification); + Net_LinkEntity(net_notif, false, autocvar_notification_lifetime_runtime, Net_Write_Notification); } for(notif = world; (notif = find(notif, classname, "net_notification"));) @@ -1819,7 +1892,7 @@ void Send_Notification( #endif return; } - + // check supplied broadcast, target, type, and name for errors string checkargs = Notification_CheckArgs(broadcast, client, net_type, net_name); if(checkargs != "") @@ -1839,7 +1912,7 @@ void Send_Notification( // retreive entity of this notification entity notif = Get_Notif_Ent(net_type, net_name); - if not(notif) + if (!notif) { #ifdef NOTIFICATIONS_DEBUG Debug_Notification(sprintf( @@ -1883,7 +1956,7 @@ void Send_Notification( backtrace(sprintf( strcat( "Not enough arguments for Send_Notification(%s, ...)! ", - "stringcount(%d) + floatcount(%d) > count(%d)\n", + "stringcount(%d) + floatcount(%d) > count(%d)\n", "Check the definition and function call for accuracy...?\n" ), sprintf( @@ -1962,12 +2035,12 @@ void Send_Notification( // It's slow, but it's better than the alternatives: // 1. Constantly networking all info and letting client decide // 2. Manually handling each separate call on per-usage basis (See old CTF usage of verbose) - entity found_choice; + entity found_choice; - #define RECURSE_FROM_CHOICE(ent,action) \ + #define RECURSE_FROM_CHOICE(ent,action) do { \ if(notif.nent_challow_var && (warmup_stage || (notif.nent_challow_var == 2))) \ { \ - switch(ent.msg_choice_choices[net_name]) \ + switch(ent.msg_choice_choices[net_name - 1]) \ { \ case 1: found_choice = notif.nent_optiona; break; \ case 2: found_choice = notif.nent_optionb; break; \ @@ -1983,22 +2056,29 @@ void Send_Notification( found_choice.nent_stringcount, \ found_choice.nent_floatcount, \ s1, s2, s3, s4, \ - f1, f2, f3, f4); + f1, f2, f3, f4); \ + } while(0) switch(broadcast) { case NOTIF_ONE_ONLY: // we can potentially save processing power with this broadcast method { if(IS_REAL_CLIENT(client)) - { RECURSE_FROM_CHOICE(client, return) } + { + RECURSE_FROM_CHOICE(client, return); + } break; } default: { entity to; FOR_EACH_REALCLIENT(to) - { if(Notification_ShouldSend(broadcast, to, client)) - { RECURSE_FROM_CHOICE(to, continue) } } + { + if(Notification_ShouldSend(broadcast, to, client)) + { + RECURSE_FROM_CHOICE(to, continue); + } + } break; } } @@ -2014,11 +2094,10 @@ void Send_Notification( net_notif.nent_net_name = net_name; net_notif.nent_stringcount = notif.nent_stringcount; net_notif.nent_floatcount = notif.nent_floatcount; - - float i; - for(i = 0; i < net_notif.nent_stringcount; ++i) + + for(int 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) + for(int i = 0; i < net_notif.nent_floatcount; ++i) { net_notif.nent_floats[i] = ...((net_notif.nent_stringcount + i), float); } net_notif.think = Net_Notification_Remove; @@ -2028,13 +2107,13 @@ void Send_Notification( (time + autocvar_notification_lifetime_runtime) : autocvar_notification_lifetime_mapload - ); + ); - Net_LinkEntity(net_notif, FALSE, 0, Net_Write_Notification); + Net_LinkEntity(net_notif, false, 0, Net_Write_Notification); } } -// WOVA = Without Variable Arguments +// WOVA = Without Variable Arguments void Send_Notification_WOVA( float broadcast, entity client, float net_type, float net_name, @@ -2059,7 +2138,7 @@ void Send_Notification_WOVA( sprintf("%d, %d, %d, %d", f1, f2, f3, f4) )); #endif - + #define VARITEM(stringc,floatc,args) \ if((stringcount == stringc) && (floatcount == floatc)) \ { Send_Notification(broadcast, client, net_type, net_name, args); return; } @@ -2068,7 +2147,7 @@ void Send_Notification_WOVA( Send_Notification(broadcast, client, net_type, net_name); // some notifications don't have any arguments at all } -// WOCOVA = Without Counts Or Variable Arguments +// WOCOVA = Without Counts Or Variable Arguments void Send_Notification_WOCOVA( float broadcast, entity client, float net_type, float net_name, @@ -2076,7 +2155,7 @@ void Send_Notification_WOCOVA( float f1, float f2, float f3, float f4) { entity notif = Get_Notif_Ent(net_type, net_name); - + #ifdef NOTIFICATIONS_DEBUG Debug_Notification(sprintf( "Send_Notification_WOCOVA(%s, %s, %s);\n", @@ -2091,7 +2170,7 @@ void Send_Notification_WOCOVA( sprintf("%d, %d, %d, %d", f1, f2, f3, f4) )); #endif - + #define VARITEM(stringc,floatc,args) \ if((notif.nent_stringcount == stringc) && (notif.nent_floatcount == floatc)) \ { Send_Notification(broadcast, client, net_type, net_name, args); return; }