X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fnotifications%2Fall.qc;h=b8e0d5c6998c8a37cc8ec5ea9d809116d2c3e235;hp=5d8e9341ce9523f9c3ee55e10b0fc32ecc427821;hb=991de5e6922cd3c283de56c3249624f0f1bfe767;hpb=4ee2807b2d8f808928ef14b3e814945b3edb4350 diff --git a/qcsrc/common/notifications/all.qc b/qcsrc/common/notifications/all.qc index 5d8e9341ce..b8e0d5c699 100644 --- a/qcsrc/common/notifications/all.qc +++ b/qcsrc/common/notifications/all.qc @@ -1,13 +1,14 @@ +#include "all.qh" #if defined(CSQC) #include #elif defined(MENUQC) #elif defined(SVQC) #include + #include #include #include #include #include - #include "all.qh" #include #endif @@ -84,11 +85,7 @@ bool Notification_ShouldSend(NOTIF broadcast, entity to_client, entity other_cli return ( (to_client == other_client) || - ( - IS_SPEC(to_client) - && - (to_client.enemy == other_client) - ) + (IS_SPEC(to_client) && (to_client.enemy == other_client)) ); case NOTIF_ONE_ONLY: return (to_client == other_client); @@ -203,7 +200,7 @@ string Process_Notif_Line( LOG_INFOF( ( "^1TRAILING NEW LINE AT END OF NOTIFICATION: " - "^7net_type = %s, net_name = %s, string = %s.\n" + "^7net_type = %s, net_name = %s, string = %s." ), notiftype, notifname, @@ -238,7 +235,7 @@ string Process_Notif_Args( LOG_INFOF( ( "^1NOTIFICATION HAS TOO MANY ARGUMENTS: " - "^7net_type = %s, net_name = %s, max args = %d.\n" + "^7net_type = %s, net_name = %s, max args = %d." ), notiftype, notifname, @@ -250,11 +247,11 @@ string Process_Notif_Args( switch(strtolower(selected)) { - #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_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 @@ -270,7 +267,7 @@ string Process_Notif_Args( LOG_INFOF( ( "^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: " - "^7net_type = %s, net_name = %s, args arg = '%s'.\n" + "^7net_type = %s, net_name = %s, args arg = '%s'." ), notiftype, notifname, @@ -289,7 +286,7 @@ string Process_Notif_Args( LOG_INFOF( ( "^1NOTIFICATION HAS TOO MANY ARGUMENTS: " - "^7net_type = %s, net_name = %s, max hudargs = %d.\n" + "^7net_type = %s, net_name = %s, max hudargs = %d." ), notiftype, notifname, @@ -301,7 +298,7 @@ string Process_Notif_Args( switch(strtolower(selected)) { - #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { ++sel_num; break; } + #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) @@ -321,7 +318,7 @@ string Process_Notif_Args( LOG_INFOF( ( "^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: " - "^7net_type = %s, net_name = %s, hudargs arg = '%s'.\n" + "^7net_type = %s, net_name = %s, hudargs arg = '%s'." ), notiftype, notifname, @@ -340,7 +337,7 @@ string Process_Notif_Args( LOG_INFOF( ( "^1NOTIFICATION HAS TOO MANY ARGUMENTS: " - "^7net_type = %s, net_name = %s, max durcnt = %d.\n" + "^7net_type = %s, net_name = %s, max durcnt = %d." ), notiftype, notifname, @@ -353,11 +350,11 @@ string Process_Notif_Args( switch(strtolower(selected)) { #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_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_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 @@ -375,7 +372,7 @@ string Process_Notif_Args( LOG_INFOF( ( "^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: " - "^7net_type = %s, net_name = %s, durcnt arg = '%s'.\n" + "^7net_type = %s, net_name = %s, durcnt arg = '%s'." ), notiftype, notifname, @@ -397,7 +394,8 @@ void Create_Notification_Entity(entity notif, float var_default, float var_cvar, MSG typeId, - string namestring) + string namestring, + int teamnum) { // ===================== // Global Entity Setup @@ -406,6 +404,7 @@ void Create_Notification_Entity(entity notif, notif.nent_enabled = (var_cvar >= 1); notif.nent_type = typeId; notif.nent_name = strzone(namestring); + notif.nent_teamnum = teamnum; // Other pre-notif-setup requisites notif_error = false; @@ -422,7 +421,7 @@ void Create_Notification_Entity(entity notif, LOG_INFOF( ( "^1NOTIFICATION WITH IMPROPER TYPE: " - "^7net_type = %d, net_name = %s.\n" + "^7net_type = %d, net_name = %s." ), typeId, namestring @@ -439,6 +438,8 @@ void Create_Notification_Entity(entity notif, } } +#define AnnouncerFilename(snd) sprintf("announcer/%s/%s.wav", AnnouncerOption(), snd) + void Create_Notification_Entity_Annce(entity notif, float var_cvar, string namestring, @@ -457,7 +458,7 @@ void Create_Notification_Entity_Annce(entity notif, { if(notif.nent_enabled) { - precache_sound(sprintf("announcer/%s/%s.wav", AnnouncerOption(), snd)); + precache_sound(AnnouncerFilename(snd)); notif.nent_channel = channel; notif.nent_snd = strzone(snd); notif.nent_vol = vol; @@ -470,7 +471,7 @@ void Create_Notification_Entity_Annce(entity notif, LOG_INFOF( ( "^1NOTIFICATION WITH NO SOUND: " - "^7net_type = %s, net_name = %s.\n" + "^7net_type = %s, net_name = %s." ), typestring, namestring @@ -528,7 +529,7 @@ void Create_Notification_Entity_InfoCenter(entity notif, LOG_INFOF( ( "^1NOTIFICATION HAS ARG COUNTS BUT NO ARGS OR HUDARGS OR DURCNT: " - "^7net_type = %s, net_name = %s, strnum = %d, flnum = %d\n" + "^7net_type = %s, net_name = %s, strnum = %d, flnum = %d" ), typestring, namestring, @@ -562,7 +563,7 @@ void Create_Notification_Entity_InfoCenter(entity notif, LOG_INFOF( ( "^1NOTIFICATION HAS HUDARGS BUT NO ICON: " - "^7net_type = %s, net_name = %s.\n" + "^7net_type = %s, net_name = %s." ), typestring, namestring @@ -607,7 +608,7 @@ void Create_Notification_Entity_InfoCenter(entity notif, // ====================== // Process Notif String // ====================== - #define SET_NOTIF_STRING(string,stringname) MACRO_BEGIN { \ + #define SET_NOTIF_STRING(string,stringname) MACRO_BEGIN \ notif.nent_string = strzone(CCR( \ Process_Notif_Line( \ typeId, \ @@ -618,7 +619,7 @@ void Create_Notification_Entity_InfoCenter(entity notif, stringname \ )) \ ); \ - } MACRO_END + MACRO_END if(GENTLE) { @@ -634,7 +635,7 @@ void Create_Notification_Entity_InfoCenter(entity notif, LOG_INFOF( ( "^1EMPTY NOTIFICATION: " - "^7net_type = %s, net_name = %s.\n" + "^7net_type = %s, net_name = %s." ), typestring, namestring @@ -660,7 +661,7 @@ void Create_Notification_Entity_Multi(entity notif, LOG_INFOF( ( "^1NOTIFICATION WITH NO SUBCALLS: " - "^7net_type = %s, net_name = %s.\n" + "^7net_type = %s, net_name = %s." ), typestring, namestring @@ -712,7 +713,7 @@ void Create_Notification_Entity_Choice(entity notif, LOG_INFOF( ( "^1NOTIFICATION IS MISSING CHOICE PARAMS: " - "^7net_type = %s, net_name = %s.\n" + "^7net_type = %s, net_name = %s." ), typestring, namestring @@ -763,10 +764,11 @@ void Notification_GetCvars(entity this) FOREACH(Notifications, it.nent_type == MSG_CHOICE, { GetCvars_handleFloat( this, + CS(this), get_cvars_s, get_cvars_f, msg_choice_choices[it.nent_choice_idx], - sprintf("notification_%s", it.nent_name) + sprintf("notification_%s", Get_Notif_CvarName(it)) ); }); } @@ -775,95 +777,95 @@ void Notification_GetCvars(entity this) /** used to output notifications.cfg file */ void Dump_Notifications(int fh, bool alsoprint) { - #define NOTIF_WRITE(a) MACRO_BEGIN { \ - fputs(fh, a); \ - if (alsoprint) LOG_INFO(a); \ - } MACRO_END + #define NOTIF_WRITE(str) write_String_To_File(fh, str, alsoprint) - #define NOTIF_WRITE_ENTITY(e, description) MACRO_BEGIN { \ - string notif_msg = sprintf( \ + #define NOTIF_WRITE_ENTITY(e, description) \ + NOTIF_WRITE(sprintf( \ "seta notification_%s \"%d\" \"%s\"\n", \ - e.nent_name, e.nent_default, description \ - ); \ - NOTIF_WRITE(notif_msg); \ - } MACRO_END + Get_Notif_CvarName(e), e.nent_default, description \ + )) - #define NOTIF_WRITE_ENTITY_CHOICE(e, descriptiona, descriptionb) MACRO_BEGIN { \ - string notif_msg = sprintf( \ + #define NOTIF_WRITE_ENTITY_CHOICE(e, descriptiona, descriptionb) \ + NOTIF_WRITE(sprintf( \ "seta notification_%s \"%d\" \"%s\"\n" \ "seta notification_%s_ALLOWED \"%d\" \"%s\"\n", \ - e.nent_name, e.nent_default, descriptiona, \ - e.nent_name, e.nent_challow_def, descriptionb \ - ); \ - NOTIF_WRITE(notif_msg); \ - } MACRO_END - - #define NOTIF_WRITE_HARDCODED(cvar, default, description) MACRO_BEGIN { \ - string notif_msg = sprintf( \ - "seta notification_%s \"%s\" \"%s\"\n", \ - cvar, default, description \ - ); \ - NOTIF_WRITE(notif_msg); \ - } MACRO_END + Get_Notif_CvarName(e), e.nent_default, descriptiona, \ + Get_Notif_CvarName(e), e.nent_challow_def, descriptionb \ + )) + + #define NOTIF_WRITE_HARDCODED(cvar, default, description) \ + NOTIF_WRITE("seta notification_" cvar " \"" default "\" \"" description "\"\n") // 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" + "// ** WARNING - DO NOT MANUALLY EDIT THIS FILE ** //\n" + "// ** ** //\n" + "// ** This file is automatically generated ** //\n" + "// ** by code with the command 'dumpnotifs'. ** //\n" + "// ** ** //\n" + "// ** If you add a new notification, please ** //\n" + "// ** regenerate this file with that command ** //\n" + "// ** making sure that the output matches ** //\n" + "// ** with the lists and defaults in code. ** //\n" + "// ** ** //\n" + "// ********************************************** //\n"); // 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. - int NOTIF_ANNCE_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_ANNCE, { ++NOTIF_ANNCE_COUNT; }); + int NOTIF_ANNCE_COUNT = 0; + int NOTIF_INFO_COUNT = 0; + int NOTIF_CENTER_COUNT = 0; + int NOTIF_MULTI_COUNT = 0; + int NOTIF_CHOICE_COUNT = 0; + FOREACH(Notifications, true, { + switch (it.nent_type) + { + case MSG_ANNCE: ++NOTIF_ANNCE_COUNT; break; + case MSG_INFO: ++NOTIF_INFO_COUNT; break; + case MSG_CENTER: ++NOTIF_CENTER_COUNT; break; + case MSG_MULTI: ++NOTIF_MULTI_COUNT; break; + case MSG_CHOICE: ++NOTIF_CHOICE_COUNT; break; + } + }); + NOTIF_WRITE(sprintf("\n// MSG_ANNCE notifications (count = %d):\n", NOTIF_ANNCE_COUNT)); - FOREACH(Notifications, it.nent_type == MSG_ANNCE, { + FOREACH(Notifications, it.nent_type == MSG_ANNCE && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), { NOTIF_WRITE_ENTITY(it, "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled" ); }); - int NOTIF_INFO_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_INFO, { ++NOTIF_INFO_COUNT; }); NOTIF_WRITE(sprintf("\n// MSG_INFO notifications (count = %d):\n", NOTIF_INFO_COUNT)); - FOREACH(Notifications, it.nent_type == MSG_INFO, { + FOREACH(Notifications, it.nent_type == MSG_INFO && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), { NOTIF_WRITE_ENTITY(it, "0 = off, 1 = print to console, " "2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" ); }); - int NOTIF_CENTER_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_CENTER, { ++NOTIF_CENTER_COUNT; }); NOTIF_WRITE(sprintf("\n// MSG_CENTER notifications (count = %d):\n", NOTIF_CENTER_COUNT)); - FOREACH(Notifications, it.nent_type == MSG_CENTER, { + FOREACH(Notifications, it.nent_type == MSG_CENTER && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), { NOTIF_WRITE_ENTITY(it, "0 = off, 1 = centerprint" ); }); - int NOTIF_MULTI_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_MULTI, { ++NOTIF_MULTI_COUNT; }); NOTIF_WRITE(sprintf("\n// MSG_MULTI notifications (count = %d):\n", NOTIF_MULTI_COUNT)); - FOREACH(Notifications, it.nent_type == MSG_MULTI, { + FOREACH(Notifications, it.nent_type == MSG_MULTI && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), { NOTIF_WRITE_ENTITY(it, "Enable this multiple notification" ); }); - int NOTIF_CHOICE_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_CHOICE, { ++NOTIF_CHOICE_COUNT; }); NOTIF_WRITE(sprintf("\n// MSG_CHOICE notifications (count = %d):\n", NOTIF_CHOICE_COUNT)); - FOREACH(Notifications, it.nent_type == MSG_CHOICE, { + FOREACH(Notifications, it.nent_type == MSG_CHOICE && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), { NOTIF_WRITE_ENTITY_CHOICE(it, "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" @@ -875,7 +877,7 @@ void Dump_Notifications(int fh, bool alsoprint) NOTIF_WRITE_HARDCODED( "allow_chatboxprint", "1", - "Allow INFO notifications to be printed to chat box" + "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" @@ -1009,15 +1011,15 @@ string Local_Notification_sprintf( string tmp_s; // used by NOTIF_ARGUMENT_LIST switch (strtolower(selected)) { - #define ARG_CASE_ARG_CS_SV_HA(selected, result) case selected: { arg_slot[sel_num++] = result; break; } - #define ARG_CASE_ARG_CS_SV_DC(selected, result) case selected: { arg_slot[sel_num++] = result; break; } - #define ARG_CASE_ARG_CS_SV(selected, result) case selected: { arg_slot[sel_num++] = result; break; } + #define ARG_CASE_ARG_CS_SV_HA(selected, result) case selected: arg_slot[sel_num++] = result; break; + #define ARG_CASE_ARG_CS_SV_DC(selected, result) case selected: arg_slot[sel_num++] = result; break; + #define ARG_CASE_ARG_CS_SV(selected, result) case selected: arg_slot[sel_num++] = result; break; #ifdef CSQC - #define ARG_CASE_ARG_CS(selected, result) case selected: { arg_slot[sel_num++] = result; break; } + #define ARG_CASE_ARG_CS(selected, result) case selected: arg_slot[sel_num++] = result; break; #define ARG_CASE_ARG_SV(selected, result) #else #define ARG_CASE_ARG_CS(selected, result) - #define ARG_CASE_ARG_SV(selected, result) case selected: { arg_slot[sel_num++] = result; break; } + #define ARG_CASE_ARG_SV(selected, result) case selected: arg_slot[sel_num++] = result; break; #endif #define ARG_CASE_ARG_DC(selected, result) #define ARG_CASE(prog, selected, result) ARG_CASE_##prog(selected, result) @@ -1045,9 +1047,7 @@ string Local_Notification_sprintf( } #ifdef CSQC -void Local_Notification_sound( - int soundchannel, string soundfile, - float soundvolume, float soundposition) +void Local_Notification_sound(int soundchannel, string soundfile, float soundvolume, float soundposition) { if ((soundfile != prev_soundfile) || (time >= (prev_soundtime + autocvar_cl_announcer_antispam))) { @@ -1055,30 +1055,15 @@ void Local_Notification_sound( Debug_Notification(sprintf( "Local_Notification_sound(%f, '%s', %f, %f);\n", soundchannel, - sprintf( - "announcer/%s/%s.wav", - AnnouncerOption(), - soundfile - ), + AnnouncerFilename(soundfile), soundvolume, soundposition )); #endif - _sound( - NULL, - soundchannel, - sprintf( - "announcer/%s/%s.wav", - AnnouncerOption(), - soundfile - ), - soundvolume, - soundposition - ); + _sound(NULL, soundchannel, AnnouncerFilename(soundfile), soundvolume, soundposition); - if (prev_soundfile) strunzone(prev_soundfile); - prev_soundfile = strzone(soundfile); + strcpy(prev_soundfile, soundfile); prev_soundtime = time; } else @@ -1086,15 +1071,11 @@ void Local_Notification_sound( #ifdef NOTIFICATIONS_DEBUG Debug_Notification(sprintf( ( - "Local_Notification_sound(NULL, %f, '%s', %f, %f) " + "Local_Notification_sound(%f, '%s', %f, %f) " "^1BLOCKED BY ANTISPAM:^7 prevsnd: '%s', timediff: %f, limit: %f\n" - ), - soundchannel, - sprintf( - "announcer/%s/%s.wav", - AnnouncerOption(), - soundfile ), + soundchannel, + AnnouncerFilename(soundfile), soundvolume, soundposition, prev_soundfile, @@ -1118,7 +1099,7 @@ void Local_Notification_HUD_Notify_Push( NOTIF_HIT_MAX(NOTIF_MAX_HUDARGS, "Local_Notification_HUD_Notify_Push"); switch (strtolower(selected)) { - #define ARG_CASE_ARG_CS_SV_HA(selected, result) case selected: { arg_slot[sel_num++] = result; break; } + #define ARG_CASE_ARG_CS_SV_HA(selected, result) case selected: arg_slot[sel_num++] = result; 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) @@ -1162,11 +1143,11 @@ void Local_Notification_centerprint_generic( switch (strtolower(selected)) { #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; break; } + #define ARG_CASE_ARG_CS_SV_DC(selected, result) case selected: arg_slot[sel_num++] = result; 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; break; } + #define ARG_CASE_ARG_DC(selected, result) case selected: arg_slot[sel_num++] = result; break; #define ARG_CASE(prog, selected, result) ARG_CASE_##prog(selected,result) NOTIF_ARGUMENT_LIST #undef ARG_CASE @@ -1227,10 +1208,10 @@ void Local_Notification(MSG net_type, Notification net_name, ...count) return; } - string s1 = ((notif.nent_stringcount > 0) ? ...(0, string) : ""); - string s2 = ((notif.nent_stringcount > 1) ? ...(1, string) : ""); - string s3 = ((notif.nent_stringcount > 2) ? ...(2, string) : ""); - string s4 = ((notif.nent_stringcount > 3) ? ...(3, string) : ""); + string s1 = CCR((notif.nent_stringcount > 0) ? ...(0, string) : ""); + string s2 = CCR((notif.nent_stringcount > 1) ? ...(1, string) : ""); + string s3 = CCR((notif.nent_stringcount > 2) ? ...(2, string) : ""); + string s4 = CCR((notif.nent_stringcount > 3) ? ...(3, string) : ""); float f1 = ((notif.nent_floatcount > 0) ? ...((notif.nent_stringcount + 0), float) : 0); float f2 = ((notif.nent_floatcount > 1) ? ...((notif.nent_stringcount + 1), float) : 0); float f3 = ((notif.nent_floatcount > 2) ? ...((notif.nent_stringcount + 2), float) : 0); @@ -1268,12 +1249,7 @@ void Local_Notification(MSG net_type, Notification net_name, ...count) case MSG_ANNCE: { #ifdef CSQC - Local_Notification_sound( - notif.nent_channel, - notif.nent_snd, - notif.nent_vol, - notif.nent_position - ); + Local_Notification_sound(notif.nent_channel, notif.nent_snd, notif.nent_vol, notif.nent_position); #else backtrace("MSG_ANNCE on server?... Please notify Samual immediately!\n"); #endif @@ -1366,7 +1342,7 @@ void Local_Notification(MSG net_type, Notification net_name, ...count) { entity found_choice = notif.nent_optiona; if (notif.nent_challow_var && (warmup_stage || (notif.nent_challow_var == 2))) { - switch (cvar(sprintf("notification_%s", notif.nent_name))) + switch (cvar(sprintf("notification_%s", Get_Notif_CvarName(notif)))) { case 1: break; case 2: found_choice = notif.nent_optionb; break; @@ -1490,7 +1466,7 @@ void Net_Notification_Remove(entity this) this.owner.nent_name )); #endif - for (int i = 0; i < this.nent_stringcount; ++i) { if (this.nent_strings[i]) strunzone(this.nent_strings[i]); } + for (int i = 0; i < this.nent_stringcount; ++i) { strfree(this.nent_strings[i]); } delete(this); } @@ -1532,8 +1508,7 @@ void Kill_Notification( net_notif.nent_net_name = ORDINAL(net_cpid); Net_LinkEntity(net_notif, false, autocvar_notification_lifetime_runtime, Net_Write_Notification); - FOREACH_ENTITY_CLASS( - "net_notification", + IL_EACH(g_notifications, (it.owner.nent_type == net_type || net_type == MSG_Null) && (it.owner.nent_cpid == net_cpid || net_cpid == CPID_Null), { it.nent_net_name = -1; @@ -1606,20 +1581,9 @@ void Send_Notification( return; } - if ( - server_is_dedicated - && - ( - broadcast == NOTIF_ALL - || - broadcast == NOTIF_ALL_EXCEPT - ) - && - !( - net_type == MSG_ANNCE - || - net_type == MSG_CENTER - ) + if (server_is_dedicated + && (broadcast == NOTIF_ALL || broadcast == NOTIF_ALL_EXCEPT) + && !(net_type == MSG_ANNCE || net_type == MSG_CENTER) ) { Local_Notification_WOVA( @@ -1639,9 +1603,9 @@ void Send_Notification( // 2. Manually handling each separate call on per-usage basis (See old CTF usage of verbose) entity found_choice; - #define RECURSE_FROM_CHOICE(ent,action) MACRO_BEGIN { \ + #define RECURSE_FROM_CHOICE(ent,action) MACRO_BEGIN \ if (notif.nent_challow_var && (warmup_stage || (notif.nent_challow_var == 2))) { \ - switch (ent.msg_choice_choices[net_name.nent_choice_idx]) \ + switch (CS(ent).msg_choice_choices[net_name.nent_choice_idx]) \ { \ case 1: found_choice = notif.nent_optiona; break; \ case 2: found_choice = notif.nent_optionb; break; \ @@ -1659,7 +1623,7 @@ void Send_Notification( found_choice.nent_floatcount, \ s1, s2, s3, s4, \ f1, f2, f3, f4); \ - } MACRO_END + MACRO_END switch (broadcast) { @@ -1682,6 +1646,7 @@ void Send_Notification( else { entity net_notif = new_pure(net_notification); + IL_PUSH(g_notifications, net_notif); net_notif.owner = notif; net_notif.nent_broadcast = broadcast; net_notif.nent_client = client;