]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/notifications.qh
Process notification arguments on init
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / notifications.qh
index 4b3262efc15d60c5f7f49f5051503ef16d4c55b1..f787d581b387e532156763edf899c9a6ef6815c6 100644 (file)
@@ -165,14 +165,14 @@ void Dump_Notifications(float fh, float alsoprint);
                MSG_INFO_NOTIF(prefix##PINK, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STR_TEAM_4)), TCR(normal, COL_TEAM_4, strtoupper(STR_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(STR_TEAM_4))) \
        #endif
 #define MSG_INFO_NOTIFICATIONS \
-       /*MSG_INFO_NOTIF(INFO_EMPTY,                                            0, 0, NO_STR_ARG, XPD("", ""),                                          "",                                             "", "")*/ \
-       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_DROPPED_, 2,         0, 0, NO_STR_ARG, XPD("", ""),                                          "",                                             _("^BGThe ^TC^TT^BG flag was dropped in the base and returned itself\n"), "") \
-       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_DAMAGED_, 2,         0, 0, NO_STR_ARG, XPD("", ""),                                          "",                                             _("^BGThe ^TC^TT^BG flag was destroyed and returned to base\n"), "") \
-       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_SPEEDRUN_, 2,        0, 1, f1/100, XPD("", ""),                                                      "",                                             _("^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned itself\n"), "") \
-       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_NEEDKILL_, 2,        0, 0, NO_STR_ARG, XPD("", ""),                                          "",                                             _("^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to base\n"), "") \
-       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_ABORTRUN_, 2,        0, 0, NO_STR_ARG, XPD("", ""),                                          "",                                             _("^BGThe ^TC^TT^BG flag was returned to base by its owner\n"), "") \
-       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_TIMEOUT_, 2,         0, 0, NO_STR_ARG, XPD("", ""),                                          "",                                             _("^BGThe ^TC^TT^BG flag has returned to the base\n"), "") \
-       MULTITEAM_INFO(INFO_CTF_PICKUP_, 2,                                     1, 0, s1, XPD(s1, ""),                                                          "notify_%s_taken",              _("^BG%s^BG got the ^TC^TT^BG flag\n"), "") \
+       /*MSG_INFO_NOTIF(INFO_EMPTY,                                            0, 0, "", "",                                           "",                                             "", "")*/ \
+       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_DROPPED_, 2,         0, 0, "", "",                                           "",                                             _("^BGThe ^TC^TT^BG flag was dropped in the base and returned itself\n"), "") \
+       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_DAMAGED_, 2,         0, 0, "", "",                                           "",                                             _("^BGThe ^TC^TT^BG flag was destroyed and returned to base\n"), "") \
+       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_SPEEDRUN_, 2,        0, 1, "f1/100", "",                                                     "",                                             _("^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned itself\n"), "") \
+       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_NEEDKILL_, 2,        0, 0, "", XPD("", ""),                                          "",                                             _("^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to base\n"), "") \
+       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_ABORTRUN_, 2,        0, 0, "", XPD("", ""),                                          "",                                             _("^BGThe ^TC^TT^BG flag was returned to base by its owner\n"), "") \
+       MULTITEAM_INFO(INFO_CTF_FLAGRETURN_TIMEOUT_, 2,         0, 0, "", XPD("", ""),                                          "",                                             _("^BGThe ^TC^TT^BG flag has returned to the base\n"), "") \
+       MULTITEAM_INFO(INFO_CTF_PICKUP_, 2,                                     1, 0, "s1", XPD(s1, ""),                                                                "notify_%s_taken",              _("^BG%s^BG got the ^TC^TT^BG flag\n"), "") \
        MULTITEAM_INFO(INFO_CTF_RETURN_, 2,                                     1, 0, s1, XPD(s1, ""),                                                          "notify_%s_returned",   _("^BG%s^BG returned the ^TC^TT^BG flag\n"), "") \
        MULTITEAM_INFO(INFO_CTF_LOST_, 2,                                       1, 0, s1, XPD(s1, ""),                                                          "notify_%s_lost",               _("^BG%s^BG lost the ^TC^TT^BG flag\n"), "") \
        MULTITEAM_INFO(INFO_CTF_CAPTURE_, 2,                            1, 0, s1, XPD(s1, ""),                                                          "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag\n"), "") \
@@ -597,11 +597,33 @@ string Process_Notif_Line(float check_newline, string input, string notiftype, s
        if(check_newline) 
        if(substring(input, (strlen(input) - 1), 1) != "\n")
        {
-               print(sprintf("^1MISSING/BROKEN NEW LINE AT END OF NOTIFICATION: ^7net_type = MSG_%s, net_name = %s, %s string.\n", notiftype, notifname, stringtype));
+               print(sprintf("^1MISSING/BROKEN NEW LINE AT END OF NOTIFICATION: ^7net_type = MSG_%s, net_name = %s, string = %s.\n", notiftype, notifname, stringtype));
                return strcat(input, "\n");
        }
        return input;
 }
+string Process_Notif_Args(float is_hudargs, string args, string notiftype, string notifname)
+{
+       string selected, remaining = args;
+       float sel_num = 0;
+       float maxargs = (is_hudargs ? 2 : 7);
+
+       for(;(remaining != "");)
+       {
+               selected = car(remaining); remaining = cdr(remaining);
+
+               switch(strtolower(selected))
+               {
+                       #undef ARG_CASE
+                       default: { print(sprintf("^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: ^7net_type = MSG_%s, net_name = %s, %s = '%s'.\n",
+                               notiftype, notifname, (is_hudargs ? "hudargs" : "args"), selected)); break; }
+               }
+               if(sel_num == maxargs) { print(sprintf("^1NOTIFICATION HAS TOO MANY ARGUMENTS: ^7net_type = MSG_%s, net_name = %s, max %s = %d.\n",
+                       notiftype, notifname, (is_hudargs ? "hudargs" : "args"), maxargs))); break; }
+       }
+
+       return args;
+}
 #define ADD_AUTOCVAR(name) var float autocvar_notification_##name = TRUE;
 
 #define CREATE_NOTIF_ENTITY(type,name,infoname,centername,strnum,flnum,args,hudargs,icon,cpid,durcnt,normal,gentle,check_newline,subcalls) \
@@ -631,6 +653,8 @@ string Process_Notif_Line(float check_newline, string input, string notiftype, s
        #else \
                notif.nent_stringcount = strnum; \
                notif.nent_floatcount = flnum; \
+               if(args != "") { notif.nent_args = strzone(Process_Notif_Args(FALSE, args, strtoupper(#type), #name)); } \
+               if(hudargs != "") { notif.nent_hudargs = strzone(Process_Notif_Args(TRUE, hudargs, strtoupper(#type), #name)); } \
                if(icon != "") { notif.nent_icon = strzone(icon); } \
                if(GENTLE) \
                { \