28 CASE(MSG, CENTER_KILL)
32#define Get_Notif_Name(notif) notif.registered_id
38 case MSG_ANNCE:
return "MSG_ANNCE";
39 case MSG_INFO:
return "MSG_INFO";
40 case MSG_CENTER:
return "MSG_CENTER";
41 case MSG_MULTI:
return "MSG_MULTI";
42 case MSG_CHOICE:
return "MSG_CHOICE";
43 case MSG_CENTER_KILL:
return "MSG_CENTER_KILL";
50 CASE(CPID, ASSAULT_ROLE)
53 CASE(CPID, CTF_CAPSHIELD)
54 CASE(CPID, CTF_LOWPRIO)
61 CASE(CPID, PREVENT_JOIN)
63 CASE(CPID, KEEPAWAY_WARN)
65 CASE(CPID, KEYHUNT_OTHER)
67 CASE(CPID, MISSING_PLAYERS)
68 CASE(CPID, INSTAGIB_FINDAMMO)
71 CASE(CPID, ONS_CAPSHIELD)
74 CASE(CPID, RACE_FINISHLAP)
76 CASE(CPID, TEAMCHANGE)
80 CASE(CPID, VEHICLES_OTHER)
88#define APP_TEAM_NUM(num, prefix) (((num) == NUM_TEAM_1) ? prefix##_RED : (((num) == NUM_TEAM_2) ? prefix##_BLUE : (((num) == NUM_TEAM_3) ? prefix##_YELLOW : prefix##_PINK)))
89#define APP_NUM(num, prefix) ((num) ? APP_TEAM_NUM(num, prefix) : prefix##_NEUTRAL)
91#define EIGHT_VARS_TO_VARARGS_VARLIST(stringcount, floatcount) \
92 if (stringcount >= 0 && stringcount <= 4 && floatcount >= 0 && floatcount <= 4) \
93 switch ((floatcount) * 10 + stringcount) \
95 case 1: VARITEM( s1) \
96 case 2: VARITEM(XPD(s1, s2)) \
97 case 3: VARITEM(XPD(s1, s2, s3)) \
98 case 4: VARITEM(XPD(s1, s2, s3, s4)) \
99 case 10: VARITEM( f1) \
100 case 11: VARITEM(XPD(s1, f1)) \
101 case 12: VARITEM(XPD(s1, s2, f1)) \
102 case 13: VARITEM(XPD(s1, s2, s3, f1)) \
103 case 14: VARITEM(XPD(s1, s2, s3, s4, f1)) \
104 case 20: VARITEM(XPD( f1, f2)) \
105 case 21: VARITEM(XPD(s1, f1, f2)) \
106 case 22: VARITEM(XPD(s1, s2, f1, f2)) \
107 case 23: VARITEM(XPD(s1, s2, s3, f1, f2)) \
108 case 24: VARITEM(XPD(s1, s2, s3, s4, f1, f2)) \
109 case 30: VARITEM(XPD( f1, f2, f3)) \
110 case 31: VARITEM(XPD(s1, f1, f2, f3)) \
111 case 32: VARITEM(XPD(s1, s2, f1, f2, f3)) \
112 case 33: VARITEM(XPD(s1, s2, s3, f1, f2, f3)) \
113 case 34: VARITEM(XPD(s1, s2, s3, s4, f1, f2, f3)) \
114 case 40: VARITEM(XPD( f1, f2, f3, f4)) \
115 case 41: VARITEM(XPD(s1, f1, f2, f3, f4)) \
116 case 42: VARITEM(XPD(s1, s2, f1, f2, f3, f4)) \
117 case 43: VARITEM(XPD(s1, s2, s3, f1, f2, f3, f4)) \
118 case 44: VARITEM(XPD(s1, s2, s3, s4, f1, f2, f3, f4)) \
164#define DEFAULT_FILENAME "notifications_dump.cfg"
173 string filename =
argv(1);
174 bool alsoprint =
false;
180 else if (filename ==
"-")
189 LOG_INFOF(
"Dumping notifications... File located in ^2data/data/%s^7.", filename);
193 LOG_INFOF(
"^1Error: ^7Could not open file '%s'!", filename);
195 LOG_INFO(
"Notification dump command only works with cl_cmd and sv_cmd.");
203 LOG_HELP(
" if supplied with '-' output to console as well as default,");
204 LOG_HELP(
" if left blank, it will only write to default.");
208#undef DEFAULT_FILENAME
210#ifdef NOTIFICATIONS_DEBUG
211int autocvar_notification_debug = 0;
212void Debug_Notification(
string input)
214 switch (autocvar_notification_debug)
226 string s1,
string s2,
string s3,
string s4,
227 float f1,
float f2,
float f3,
float f4);
247 CASE(NOTIF, ONE_ONLY)
251 CASE(NOTIF, TEAM_EXCEPT)
255 CASE(NOTIF, ALL_EXCEPT)
262 case NOTIF_ONE:
return "NOTIF_ONE";
263 case NOTIF_ONE_ONLY:
return "NOTIF_ONE_ONLY";
264 case NOTIF_ALL_EXCEPT:
return "NOTIF_ALL_EXCEPT";
265 case NOTIF_ALL:
return "NOTIF_ALL";
266 case NOTIF_TEAM:
return "NOTIF_TEAM";
267 case NOTIF_TEAM_EXCEPT:
return "NOTIF_TEAM_EXCEPT";
269 LOG_WARNF(
"Get_Notif_BroadcastName(%d): Improper broadcast!", broadcast);
274 NOTIF broadcast,
entity client,
275 MSG net_type, CPID net_name);
277 NOTIF broadcast,
entity client,
281 NOTIF broadcast,
entity client,
283 string s1,
string s2,
string s3,
string s4,
284 float f1,
float f2,
float f3,
float f4);
310float autocvar_notification_item_centerprinttime = 1.5;
314int autocvar_notification_allow_chatboxprint = 0;
316bool autocvar_notification_show_sprees_center =
true;
317bool autocvar_notification_show_sprees_center_specialonly =
true;
394string hash_replace(
string full_msg,
int ent_msg_num,
string ent_msg,
string attacker_name)
397 while (--ent_msg_num >= 0)
398 s_ofs +=
strstrofs(full_msg,
"%s", s_ofs);
401 int hash_ofs =
strstrofs(ent_msg,
"#", 0);
403 ent_msg =
strcat(ent_msg,
" ",
CCR(
"^BG"), attacker_name, col);
405 ent_msg = strreplace(
"#",
strcat(
CCR(
"^BG"), attacker_name, col), ent_msg);
409#define HASH_REPLACE(full_msg, num, attacker_name) hash_replace(input, num, s##num, attacker_name)
424#define NOTIF_ARGUMENT_LIST \
425 ARG_CASE(ARG_CS_SV_HA, "s1", s1) \
426 ARG_CASE(ARG_CS_SV_HA, "s2", s2) \
427 ARG_CASE(ARG_CS_SV_HA, "s3", s3) \
428 ARG_CASE(ARG_CS_SV_HA, "s4", s4) \
429 ARG_CASE(ARG_CS_SV, "s2loc", ((autocvar_notification_show_location && (s2 != "")) ? sprintf(( ((tmp_s = autocvar_notification_show_location_string) != "") ? tmp_s : _(" (near %s)") ), s2) : "")) \
430 ARG_CASE(ARG_CS_SV, "s3loc", ((autocvar_notification_show_location && (s3 != "")) ? sprintf(( ((tmp_s = autocvar_notification_show_location_string) != "") ? tmp_s : _(" (near %s)") ), s3) : "")) \
431 ARG_CASE(ARG_CS_SV, "s4loc", ((autocvar_notification_show_location && (s4 != "")) ? sprintf(( ((tmp_s = autocvar_notification_show_location_string) != "") ? tmp_s : _(" (near %s)") ), s4) : "")) \
432 ARG_CASE(ARG_CS_SV_DC, "f1", ftos(f1)) \
433 ARG_CASE(ARG_CS_SV_DC, "f2", ftos(f2)) \
434 ARG_CASE(ARG_CS_SV, "f3", ftos(f3)) \
435 ARG_CASE(ARG_CS_SV, "f4", ftos(f4)) \
436 ARG_CASE(ARG_CS_SV, "f1dtime", ftos_decimals(TIME_DECODE(f1), 2)) \
437 ARG_CASE(ARG_CS_SV, "f2dtime", ftos_decimals(TIME_DECODE(f2), 2)) \
438 ARG_CASE(ARG_CS, "f2primsec", (f2 ? _("secondary") : _("primary"))) \
439 ARG_CASE(ARG_CS, "f3primsec", (f3 ? _("secondary") : _("primary"))) \
440 ARG_CASE(ARG_CS, "f1secs", count_seconds(f1)) \
441 ARG_CASE(ARG_CS, "f1points", (f1 == 1 ? _("1 point") : sprintf(_("%d points"), f1))) \
442 ARG_CASE(ARG_CS_SV, "f1ord", count_ordinal(f1)) \
443 ARG_CASE(ARG_CS_SV, "f1time", process_time(2, f1)) \
444 ARG_CASE(ARG_CS_SV_HA, "f1race_time", TIME_ENCODED_TOSTRING(f1, true)) \
445 ARG_CASE(ARG_CS_SV_HA, "f2race_time", TIME_ENCODED_TOSTRING(f2, true)) \
446 ARG_CASE(ARG_CS_SV_HA, "f3race_time", TIME_ENCODED_TOSTRING(f3, true)) \
447 ARG_CASE(ARG_CS_SV, "race_col", CCR((f1 == 1) ? "^F1" : "^F2")) \
448 ARG_CASE(ARG_CS_SV, "race_diff", ((TIME_ENCODED_TOSTRING(fabs(f2 - f3), true) == "0.00") ? "^3[+0.0]" : (f2 > f3) ? sprintf("^1[+%s]", TIME_ENCODED_TOSTRING(f2 - f3, true)) : sprintf("^2[-%s]", TIME_ENCODED_TOSTRING(f3 - f2, true)))) \
449 ARG_CASE(ARG_CS, "pass_key", getcommandkey(_("drop flag"), "+use")) \
450 ARG_CASE(ARG_CS, "nade_key", getcommandkey(_("throw nade"), "dropweapon")) \
451 ARG_CASE(ARG_CS, "join_key", getcommandkey(_("jump"), "+jump")) \
452 ARG_CASE(ARG_CS, "frag_ping", notif_arg_frag_ping(true, f2)) \
453 ARG_CASE(ARG_CS, "frag_stats", notif_arg_frag_stats(f2, f3, f4)) \
455 ARG_CASE(ARG_CS, "spree_cen", (autocvar_notification_show_sprees ? notif_arg_spree_cen(f1) : "")) \
456 ARG_CASE(ARG_CS_SV, "spree_inf", (autocvar_notification_show_sprees ? notif_arg_spree_inf(1, input, s2, f2) : "")) \
457 ARG_CASE(ARG_CS_SV, "spree_end", (autocvar_notification_show_sprees ? notif_arg_spree_inf(-1, "", "", f1) : "")) \
458 ARG_CASE(ARG_CS_SV, "spree_lost", (autocvar_notification_show_sprees ? notif_arg_spree_inf(-2, "", "", f1) : "")) \
459 ARG_CASE(ARG_CS_SV, "item_wepname", REGISTRY_GET(Weapons, f1).m_name) \
460 ARG_CASE(ARG_CS_SV, "item_buffname", BUFF_NAME(f1)) \
461 ARG_CASE(ARG_CS_SV, "f3buffname", BUFF_NAME(f3)) \
462 ARG_CASE(ARG_CS_SV, "item_wepammo", (f2 > 0 ? notif_arg_item_wepammo(f1, f2) : "")) \
463 ARG_CASE(ARG_DC, "item_centime", ftos(autocvar_notification_item_centerprinttime)) \
464 ARG_CASE(ARG_SV, "death_team", Team_ColoredFullName(f1)) \
465 ARG_CASE(ARG_CS, "death_team", Team_ColoredFullName(f1 - 1)) \
466 ARG_CASE(ARG_SV, "s3#s2", s3) \
467 ARG_CASE(ARG_SV, "#s2", s2) \
468 ARG_CASE(ARG_CS, "s3#s2", HASH_REPLACE(input, 3, s2)) \
469 ARG_CASE(ARG_CS, "#s2", "") \
470 ARG_CASE(ARG_CS_SV_HA, "minigame1_name",find(NULL, netname, s1).descriptor.message) \
471 ARG_CASE(ARG_CS_SV_HA, "minigame1_d", find(NULL, netname, s1).descriptor.netname)
473#define NOTIF_HIT_MAX(count, funcname) MACRO_BEGIN \
474 if (sel_num == count) \
476 backtrace(sprintf("%s: Hit maximum arguments!\n", funcname)); \
481#define NOTIF_HIT_UNKNOWN(token, funcname) \
483 backtrace(sprintf("%s: Hit unknown token in selected string! '%s'\n", funcname, selected)); \
487#define KILL_SPREE_LIST \
488 SPREE_ITEM(3, 03, _("TRIPLE FRAG!"), _("%s^K1 made a TRIPLE FRAG!"), _("%s^K1 made a TRIPLE SCORE!")) \
489 SPREE_ITEM(5, 05, _("RAGE!"), _("%s^K1 unlocked RAGE!"), _("%s^K1 made FIVE SCORES IN A ROW!")) \
490 SPREE_ITEM(10, 10, _("MASSACRE!"), _("%s^K1 started a MASSACRE!"), _("%s^K1 made TEN SCORES IN A ROW!")) \
491 SPREE_ITEM(15, 15, _("MAYHEM!"), _("%s^K1 executed MAYHEM!"), _("%s^K1 made FIFTEEN SCORES IN A ROW!")) \
492 SPREE_ITEM(20, 20, _("BERSERKER!"), _("%s^K1 is a BERSERKER!"), _("%s^K1 made TWENTY SCORES IN A ROW!")) \
493 SPREE_ITEM(25, 25, _("CARNAGE!"), _("%s^K1 inflicts CARNAGE!"), _("%s^K1 made TWENTY FIVE SCORES IN A ROW!")) \
494 SPREE_ITEM(30, 30, _("ARMAGEDDON!"), _("%s^K1 unleashes ARMAGEDDON!"), _("%s^K1 made THIRTY SCORES IN A ROW!"))
499 string s = newline ?
"\n" :
" ";
501 return sprintf(
CCR(_(
"%s(^F1Bot^BG)")), s);
503 return sprintf(
CCR(_(
"%s(Ping ^F1%d^BG)")), s, fping);
510 return sprintf(
CCR(_(
"\n(Health ^1%d^BG / Armor ^2%d^BG)%s")), fhealth, farmor, s);
512 return sprintf(
CCR(_(
"\n(^F4Dead^BG)%s")), s);
518 if (autocvar_notification_show_sprees_center)
522 #define SPREE_ITEM(counta, countb, center, normal, gentle) \
524 return strcat(normal_or_gentle(center, sprintf(_("%d score spree!"), spree)), " ");
530 if (!autocvar_notification_show_sprees_center_specialonly)
542 else if (spree == -1)
544 else if (spree == -2)
563 ? ((
substring(input, 0, 1) ==
"\{3}") ?
"\n\{3}" :
"\n")
573 #define SPREE_ITEM(counta, countb, center, normal, gentle) \
575 return sprintf(CCR(strcat(normal_or_gentle(normal, gentle), " %s^BG")), \
576 player, spree_newline);
585 _(
"%s^K1 has %d frags in a row!"),
586 _(
"%s^K1 made %d scores in a row!")
597 else if (spree == -1)
600 _(
"%s^K1 drew first blood!"),
601 _(
"%s^K1 got the first score!")
613 _(
", ending their %d frag spree"),
614 _(
", ending their %d score spree")
623 _(
", losing their %d frag spree"),
624 _(
", losing their %d score spree")
693 #define ACVNN(name, defaultvalue) autocvar_notification_##name
694 #define ACVNNA(name, defaultvalue) autocvar_notification_##name##_ALLOWED
695 #define NOTIF_ADD_AUTOCVAR(name, defaultvalue) int autocvar_notification_##name = defaultvalue;
696 #define NOTIF_ADD_AUTOCVAR_ALLOWED(name, defaultvalue) int autocvar_notification_##name##_ALLOWED = defaultvalue;
699 #define ACVNN(name, defaultvalue) (defaultvalue)
700 #define ACVNNA(name, defaultvalue) (defaultvalue)
701 #define NOTIF_ADD_AUTOCVAR(name, defaultvalue)
702 #define NOTIF_ADD_AUTOCVAR_ALLOWED(name, defaultvalue)
712 FOREACH(Notifications,
true, it.m_id = i);
729 LOG_FATALF(
"Too many MSG_CHOICE notifications (%d), hit NOTIF_CHOICE_MAX (%d) limit",
735 if (!notif.nent_teamnum)
743 if (it.nent_type != net_type)
745 LOG_WARNF(
"Get_Notif_Ent(%s (%d), %s (%d)): Improper net type '%s'!",
755#define MSG_ANNCE_NOTIF_TEAM(teamnum, name, cvarname, defaultvalue, sound, channel, volume, position, queuetime) \
756 MSG_ANNCE_NOTIF_(teamnum, ANNCE_##name, ANNCE_##cvarname, defaultvalue, sound, channel, volume, position, queuetime)
757#define MSG_ANNCE_NOTIF(name, defaultvalue, sound, channel, volume, position, queuetime) \
758 NOTIF_ADD_AUTOCVAR(ANNCE_##name, defaultvalue) \
759 MSG_ANNCE_NOTIF_(0, ANNCE_##name, ANNCE_##name, defaultvalue, sound, channel, volume, position, queuetime)
761#define MSG_ANNCE_NOTIF_(teamnum, name, cvarname, defaultvalue, sound, channel, volume, position, queuetime) \
762 REGISTER(Notifications, name, m_id, new_pure(msg_annce_notification)) \
764 Create_Notification_Entity(this, defaultvalue, ACVNN(cvarname, defaultvalue), MSG_ANNCE, teamnum); \
765 Create_Notification_Entity_Annce(this, ACVNN(cvarname, defaultvalue), \
773#define MSG_INFO_NOTIF_TEAM(teamnum, name, cvarname, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle) \
774 MSG_INFO_NOTIF_(teamnum, INFO_##name, INFO_##cvarname, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle)
776#define MSG_INFO_NOTIF(name, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle) \
777 NOTIF_ADD_AUTOCVAR(INFO_##name, defaultvalue) \
778 MSG_INFO_NOTIF_(0, INFO_##name, INFO_##name, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle)
780#define MSG_INFO_NOTIF_(teamnum, name, cvarname, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle) \
781 REGISTER(Notifications, name, m_id, new_pure(msg_info_notification)) \
783 Create_Notification_Entity(this, defaultvalue, ACVNN(cvarname, defaultvalue), MSG_INFO, teamnum); \
784 Create_Notification_Entity_InfoCenter(this, ACVNN(cvarname, defaultvalue), strnum, flnum, \
795#define MULTIICON_INFO(name, defaultvalue, strnum, flnum, args, hudargs, iconargs, icon, normal, gentle) \
796 MULTIICON_INFO_(INFO_##name, defaultvalue, strnum, flnum, args, hudargs, iconargs, icon, normal, gentle)
798#define MULTIICON_INFO_(name, defaultvalue, strnum, flnum, args, hudargs, iconargs, icon, normal, gentle) \
799 NOTIF_ADD_AUTOCVAR(name, defaultvalue) \
800 REGISTER(Notifications, name, m_id, new_pure(msg_info_notification)) \
802 Create_Notification_Entity(this, defaultvalue, ACVNN(name, defaultvalue), MSG_INFO, 0); \
803 Create_Notification_Entity_InfoCenter(this, ACVNN(name, defaultvalue), strnum, flnum, \
811 this.nent_iconargs = iconargs; \
814#define MSG_CENTER_NOTIF_TEAM(teamnum, name, cvarname, defaultvalue, strnum, flnum, args, cpid, durcnt, normal, gentle) \
815 MSG_CENTER_NOTIF_(teamnum, CENTER_##name, CENTER_##cvarname, defaultvalue, strnum, flnum, args, cpid, durcnt, normal, gentle)
816#define MSG_CENTER_NOTIF(name, defaultvalue, strnum, flnum, args, cpid, durcnt, normal, gentle) \
817 NOTIF_ADD_AUTOCVAR(CENTER_##name, defaultvalue) \
818 MSG_CENTER_NOTIF_(0, CENTER_##name, CENTER_##name, defaultvalue, strnum, flnum, args, cpid, durcnt, normal, gentle)
820#define MSG_CENTER_NOTIF_(teamnum, name, cvarname, defaultvalue, strnum, flnum, args, cpid, durcnt, normal, gentle) \
821 REGISTER(Notifications, name, m_id, new_pure(msg_center_notification)) \
823 Create_Notification_Entity(this, defaultvalue, ACVNN(cvarname, defaultvalue), MSG_CENTER, teamnum); \
824 Create_Notification_Entity_InfoCenter(this, ACVNN(cvarname, defaultvalue), strnum, flnum, \
834#define MSG_MULTI_NOTIF(name, defaultvalue, anncename, infoname, centername) \
835 NOTIF_ADD_AUTOCVAR(name, defaultvalue) \
836 REGISTER(Notifications, name, m_id, new_pure(msg_multi_notification)) \
838 Create_Notification_Entity(this, defaultvalue, ACVNN(name, defaultvalue), MSG_MULTI, 0); \
839 Create_Notification_Entity_Multi(this, ACVNN(name, defaultvalue), \
845#define MSG_CHOICE_NOTIF_TEAM(teamnum, name, cvarname, defaultvalue, challow, chtype, optiona, optionb) \
846 MSG_CHOICE_NOTIF_(teamnum, CHOICE_##name, CHOICE_##cvarname, defaultvalue, challow, chtype, optiona, optionb)
847#define MSG_CHOICE_NOTIF(name, defaultvalue, challow, chtype, optiona, optionb) \
848 NOTIF_ADD_AUTOCVAR(CHOICE_##name, defaultvalue) \
849 NOTIF_ADD_AUTOCVAR_ALLOWED(CHOICE_##name, challow) \
850 MSG_CHOICE_NOTIF_(0, CHOICE_##name, CHOICE_##name, defaultvalue, challow, chtype, optiona, optionb)
852#define MSG_CHOICE_NOTIF_(teamnum, name, cvarname, defaultvalue, challow, chtype, optiona, optionb) \
853 REGISTER(Notifications, name, m_id, new_pure(msg_choice_notification)) \
855 this.nent_choice_idx = nent_choice_count; \
856 if (!teamnum || teamnum == NUM_TEAM_4) \
857 ++nent_choice_count; \
858 Create_Notification_Entity(this, defaultvalue, ACVNN(cvarname, defaultvalue), MSG_CHOICE, teamnum); \
859 Create_Notification_Entity_Choice(this, ACVNN(cvarname, defaultvalue), \
861 ACVNNA(cvarname, challow), \
878 LOG_FATAL(
"Notification initialization failed! Read above and fix the errors!");
880 LOG_SEVERE(
"Notification initialization failed! Read above and fix the errors!");
888 FOREACH(Notifications, it.nent_type == MSG_CHOICE && (!it.nent_teamnum || it.nent_teamnum ==
NUM_TEAM_1),
890 string cvarname = strcat(
"notification_", Get_Notif_CvarName(it));
892 REPLICATE_SIMPLE(it.cvar_value, cvarname);
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
limitations: NULL cannot be present elements can only be present once a maximum of IL_MAX lists can e...
fields which are explicitly/manually set are marked with "M", fields set automatically are marked wit...
Resource ammo_type
M: ammotype : main ammo type.
const int CMD_REQUEST_COMMAND
const int CMD_REQUEST_USAGE
#define GENERIC_COMMAND(id, description, menubased)
string find_last_color_code(string s)
#define normal_or_gentle(normal, gentle)
string strtolower(string s)
#define ENUMCLASS_END(id)
#define GetProgramCommandPrefix()
#define FOREACH(list, cond, body)
spree_inf s1 s2 s3loc s2 spree_inf s1 s2 s3loc s2 spree_inf s1 s2 s3loc s2 s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2 f1points f2
spree_inf s1 s2 s3loc s2 s1
spree_inf s1 s2 s3loc s2 spree_inf s1 s2 s3loc s2 spree_inf s1 s2 s3loc s2 s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2 f1points s1 s2
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
const int NOTIF_MAX_HUDARGS
const int ARG_CS_SV_HA
enabled on CSQC, SVQC, and Hudargs
void Local_Notification_Core(MSG net_type, Notification net_name, string s1, string s2, string s3, string s4, float f1, float f2, float f3, float f4)
glue for networking, forwards to Local_Notification
#define Get_Notif_Name(notif)
main types/groups of notifications
const int NOTIF_MAX_DURCNT
void Kill_Notification(NOTIF broadcast, entity client, MSG net_type, CPID net_name)
void Create_Notification_Entity_InfoCenter(entity notif, int var_cvar, int strnum, int flnum, string args, string hudargs, string icon, CPID cpid, string durcnt, string normal, string gentle)
int msg_choice_choices[NOTIF_CHOICE_MAX]
set on each player containing MSG_CHOICE choices
const string BOLD_OPERATOR
string arg_slot[NOTIF_MAX_ARGS]
void ReplicateVars(bool would_destroy)
bool autocvar_notification_show_location
const int ARG_DC
unique result to durcnt/centerprint
float notif_queue_next_time
void Send_Notification_Core(NOTIF broadcast, entity client, MSG net_type, Notification net_name, string s1, string s2, string s3, string s4, float f1, float f2, float f3, float f4)
void Send_Notification(NOTIF broadcast, entity client, MSG net_type, Notification net_name,...count)
entity notif_queue_entity[NOTIF_QUEUE_MAX]
void Local_Notification(MSG net_type, Notification net_name,...count)
IntrusiveList g_notifications
bool autocvar_notification_show_sprees
float autocvar_notification_lifetime_mapload
Notification Get_Notif_Ent(MSG net_type, int net_name)
void Create_Notification_Entity_Multi(entity notif, int var_cvar, Notification anncename, Notification infoname, Notification centername)
const int NOTIF_QUEUE_MAX
MSG notif_queue_type[NOTIF_QUEUE_MAX]
const int ARG_CS_SV
enabled on CSQC and SVQC
bool autocvar_notification_server_allows_location
int autocvar_notification_show_sprees_info
string notif_arg_item_wepammo(float f1, float f2)
float autocvar_notification_lifetime_runtime
string Get_Notif_BroadcastName(NOTIF broadcast)
send to one client and their spectators
void Create_Notification_Entity_Choice(entity notif, int var_cvar, int challow_def, int challow_var, MSG chtype, Notification optiona, Notification optionb)
void Create_Notification_Entity_Annce(entity notif, int var_cvar, int channel, string snd, float vol, float position, float queuetime)
string notif_arg_frag_ping(bool newline, float fping)
entity Notification
always last
void Create_Notification_Entity(entity notif, int var_default, int var_cvar, MSG typeId, int teamnum)
void Local_Notification_Queue_Process()
string Get_Notif_TypeName(MSG net_type)
string autocvar_notification_show_location_string
string hash_replace(string full_msg, int ent_msg_num, string ent_msg, string attacker_name)
replaces # with attacker_name in ent_msg (if not found attacker_name is appended)
string notif_arg_spree_cen(float spree)
void Destroy_All_Notifications()
float notif_queue_time[NOTIF_QUEUE_MAX]
bool autocvar_notification_show_sprees_info_specialonly
const int NOTIF_CHOICE_MAX
string notif_arg_spree_inf(float type, string input, string player, float spree)
const int ARG_CS
unique result to CSQC
bool autocvar_notification_errors_are_fatal
string notif_arg_frag_stats(float fhealth, float farmor, float fping)
void Dump_Notifications(int fh, bool alsoprint)
Used to output notifications.cfg file.
bool autocvar_notification_show_sprees_info_newline
const int ARG_CS_SV_DC
enabled on CSQC, SVQC, and durcnt centerprint
const int ARG_SV
unique result to SVQC
string Get_Notif_CvarName(Notification notif)
void Notification_GetCvars(entity this, entity store)
Used by MSG_CHOICE to build list of choices.
#define REGISTRY_SORT(...)
#define REGISTRY_BEGIN(id)
Called before initializing a registry.
#define REGISTRY_END(id)
Called after initializing a registry.
#define REGISTER_REGISTRY(id)
#define REGISTRY(id, max)
Declares a new registry.
#define REGISTRY_CHECK(id)
#define REGISTRY_DEFINE_GET(id, null)
#define REGISTRY_GET(id, i)
#define STATIC_INIT_LATE(func)
directly after STATIC_INIT
#define STATIC_INIT(func)
during worldspawn
string CCR(string input)
color code replace, place inside of sprintf and parse the string
string Static_Team_ColorName(int teamid)