X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fnotifications%2Fall.qh;h=3b009b25637a296b28cf93d2978e858df993cf73;hp=12bd3b68395a519a2281d236fffb324e7a83e5e7;hb=65ba38c5228d8af26ac2b04b6e6e536a1772f446;hpb=f41f81f37e3ecf5a2d14f7bc7ffd7bbf09fff32e diff --git a/qcsrc/common/notifications/all.qh b/qcsrc/common/notifications/all.qh index 12bd3b6839..3b009b2563 100644 --- a/qcsrc/common/notifications/all.qh +++ b/qcsrc/common/notifications/all.qh @@ -5,11 +5,16 @@ #include #include #include +#include +#include #ifdef CSQC #include #endif +// Operator for bold notifications +#define BOLD_OPERATOR "^BOLD" + /** main types/groups of notifications */ ENUMCLASS(MSG) /** "Global" AND "personal" announcer messages */ @@ -60,6 +65,7 @@ ENUMCLASS(CPID) CASE(CPID, MISSING_TEAMS) CASE(CPID, MISSING_PLAYERS) CASE(CPID, INSTAGIB_FINDAMMO) + CASE(CPID, CAMPAIGN_MESSAGE) CASE(CPID, MOTD) CASE(CPID, NIX) CASE(CPID, ONSLAUGHT) @@ -158,7 +164,7 @@ void Create_Notification_Entity_Choice(entity notif, void Dump_Notifications(int fh, bool alsoprint); -GENERIC_COMMAND(dumpnotifs, "Dump all notifications into notifications_dump.txt") +GENERIC_COMMAND(dumpnotifs, "Dump all notifications into notifications_dump.txt", false) { switch (request) { @@ -293,7 +299,7 @@ void Send_Notification_WOCOVA( // MAKE SURE THIS IS ALWAYS SYNCHRONIZED WITH THE DUMP // NOTIFICATIONS FUNCTION IN THE .QC FILE! -#define NOTIF_ADD_AUTOCVAR(name,default) float autocvar_notification_##name = default; +#define NOTIF_ADD_AUTOCVAR(name,defaultvalue) float autocvar_notification_##name = defaultvalue; float autocvar_notification_show_location = false; string autocvar_notification_show_location_string = ""; //_(" at the %s"); @@ -308,7 +314,6 @@ float autocvar_notification_lifetime_mapload = 10; #endif #ifdef SVQC -.float FRAG_VERBOSE; void Notification_GetCvars(entity this); float autocvar_notification_server_allows_location = 1; // 0 = no, 1 = yes #else @@ -369,7 +374,7 @@ float autocvar_notification_show_sprees_center_specialonly = true; spree_end: placed at the end of murder messages to show ending of sprees spree_lost: placed at the end of suicide messages to show losing of sprees item_wepname: return full name of a weapon from weaponid - item_wepammo: ammo display for weapon from string + item_wepammo: ammo display for weapon from f1 and f2 item_centime: amount of time to display weapon message in centerprint item_buffname: return full name of a buff from buffid death_team: show the full name of the team a player is switching from @@ -422,6 +427,7 @@ string BUFF_NAME(int i); ARG_CASE(ARG_CS, "missing_teams", notif_arg_missing_teams(f1)) \ ARG_CASE(ARG_CS, "pass_key", getcommandkey(_("drop flag"), "+use")) \ ARG_CASE(ARG_CS, "nade_key", getcommandkey(_("throw nade"), "dropweapon")) \ + ARG_CASE(ARG_CS, "join_key", getcommandkey(_("jump"), "+jump")) \ ARG_CASE(ARG_CS, "frag_ping", notif_arg_frag_ping(true, f2)) \ ARG_CASE(ARG_CS, "frag_stats", notif_arg_frag_stats(f2, f3, f4)) \ /*ARG_CASE(ARG_CS, "frag_pos", ((Should_Print_Score_Pos(f1)) ? sprintf("\n^BG%s", Read_Score_Pos(f1)) : ""))*/ \ @@ -432,16 +438,17 @@ string BUFF_NAME(int i); ARG_CASE(ARG_CS_SV, "item_wepname", Weapons_from(f1).m_name) \ ARG_CASE(ARG_CS_SV, "item_buffname", BUFF_NAME(f1)) \ ARG_CASE(ARG_CS_SV, "f3buffname", BUFF_NAME(f3)) \ - ARG_CASE(ARG_CS_SV, "item_wepammo", (s1 != "" ? sprintf(_(" with %s"), s1) : "")) \ + ARG_CASE(ARG_CS_SV, "item_wepammo", (f2 > 0 ? notif_arg_item_wepammo(f1, f2) : "")) \ ARG_CASE(ARG_DC, "item_centime", ftos(autocvar_notification_item_centerprinttime)) \ ARG_CASE(ARG_SV, "death_team", Team_ColoredFullName(f1)) \ ARG_CASE(ARG_CS, "death_team", Team_ColoredFullName(f1 - 1)) \ ARG_CASE(ARG_CS_SV_HA, "minigame1_name",find(NULL,netname,s1).descriptor.message) \ ARG_CASE(ARG_CS_SV_HA, "minigame1_d", find(NULL,netname,s1).descriptor.netname) -#define NOTIF_HIT_MAX(count,funcname) MACRO_BEGIN { \ +#define NOTIF_HIT_MAX(count,funcname) MACRO_BEGIN \ if(sel_num == count) { backtrace(sprintf("%s: Hit maximum arguments!\n", funcname)); break; } \ -} MACRO_END +MACRO_END + #define NOTIF_HIT_UNKNOWN(token,funcname) { backtrace(sprintf("%s: Hit unknown token in selected string! '%s'\n", funcname, selected)); break; } #define KILL_SPREE_LIST \ @@ -623,6 +630,23 @@ string notif_arg_spree_inf(float type, string input, string player, float spree) return ""; } +string notif_arg_item_wepammo(float f1, float f2) +{ + string ammoitems = ""; + Weapon wep = Weapons_from(f1); + switch (wep.ammo_type) + { + case RES_SHELLS: ammoitems = ITEM_Shells.m_name; break; + case RES_BULLETS: ammoitems = ITEM_Bullets.m_name; break; + case RES_ROCKETS: ammoitems = ITEM_Rockets.m_name; break; + case RES_CELLS: ammoitems = ITEM_Cells.m_name; break; + case RES_PLASMA: ammoitems = ITEM_Plasma.m_name; break; + case RES_FUEL: ammoitems = ITEM_JetpackFuel.m_name; break; + default: return ""; // doesn't use ammo + } + return sprintf(_(" with %d %s"), f2, ammoitems); +} + // ==================================== // Initialization/Create Declarations @@ -680,7 +704,9 @@ REGISTRY_SORT(Notifications); STATIC_INIT(Notifications) { FOREACH(Notifications, true, it.m_id = i); } REGISTRY_CHECK(Notifications) -const int NOTIF_CHOICE_MAX = 50; +const int NOTIF_CHOICE_MAX = 20; +// NOTE: a team choice is actually made of 4 choices (one per team) with the same nent_choice_idx +// thus they are counted as 1 in nent_choice_count int nent_choice_count = 0; .int nent_choice_idx; .int msg_choice_choices[NOTIF_CHOICE_MAX]; // set on each player containing MSG_CHOICE choices @@ -688,12 +714,11 @@ int nent_choice_count = 0; bool notif_error; bool notif_global_error; -STATIC_INIT_LATE(Notif_Choices) { - int c = 0; - FOREACH(Notifications, it.nent_type == MSG_CHOICE, { c++; }); - if (c > NOTIF_CHOICE_MAX) { - LOG_FATALF("Too many MSG_CHOICE notifications (%d)", c); - } +STATIC_INIT_LATE(Notif_Choices) +{ + if (nent_choice_count > NOTIF_CHOICE_MAX) + LOG_FATALF("Too many MSG_CHOICE notifications (%d), hit NOTIF_CHOICE_MAX (%d) limit", + nent_choice_count, NOTIF_CHOICE_MAX); } string Get_Notif_CvarName(Notification notif) @@ -717,16 +742,16 @@ Notification Get_Notif_Ent(MSG net_type, int net_name) return it; } -#define MSG_ANNCE_NOTIF_TEAM(teamnum, name, cvarname, default, sound, channel, volume, position) \ - MSG_ANNCE_NOTIF_(teamnum, ANNCE_##name, ANNCE_##cvarname, default, sound, channel, volume, position) +#define MSG_ANNCE_NOTIF_TEAM(teamnum, name, cvarname, defaultvalue, sound, channel, volume, position) \ + MSG_ANNCE_NOTIF_(teamnum, ANNCE_##name, ANNCE_##cvarname, defaultvalue, sound, channel, volume, position) -#define MSG_ANNCE_NOTIF(name, default, sound, channel, volume, position) \ - NOTIF_ADD_AUTOCVAR(ANNCE_##name, default) \ - MSG_ANNCE_NOTIF_(0, ANNCE_##name, ANNCE_##name, default, sound, channel, volume, position) +#define MSG_ANNCE_NOTIF(name, defaultvalue, sound, channel, volume, position) \ + NOTIF_ADD_AUTOCVAR(ANNCE_##name, defaultvalue) \ + MSG_ANNCE_NOTIF_(0, ANNCE_##name, ANNCE_##name, defaultvalue, sound, channel, volume, position) -#define MSG_ANNCE_NOTIF_(teamnum, name, cvarname, default, sound, channel, volume, position) \ +#define MSG_ANNCE_NOTIF_(teamnum, name, cvarname, defaultvalue, sound, channel, volume, position) \ REGISTER(Notifications, name, m_id, new_pure(msg_annce_notification)) { \ - Create_Notification_Entity (this, default, ACVNN(cvarname), MSG_ANNCE, strtoupper(#name), teamnum); \ + Create_Notification_Entity (this, defaultvalue, ACVNN(cvarname), MSG_ANNCE, strtoupper(#name), teamnum); \ Create_Notification_Entity_Annce(this, ACVNN(cvarname), strtoupper(#name), \ channel, /* channel */ \ sound, /* snd */ \ @@ -734,16 +759,16 @@ Notification Get_Notif_Ent(MSG net_type, int net_name) position); /* position */ \ } -#define MSG_INFO_NOTIF_TEAM(teamnum, name, cvarname, default, strnum, flnum, args, hudargs, icon, normal, gentle) \ - MSG_INFO_NOTIF_(teamnum, INFO_##name, INFO_##cvarname, default, strnum, flnum, args, hudargs, icon, normal, gentle) +#define MSG_INFO_NOTIF_TEAM(teamnum, name, cvarname, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle) \ + MSG_INFO_NOTIF_(teamnum, INFO_##name, INFO_##cvarname, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle) -#define MSG_INFO_NOTIF(name, default, strnum, flnum, args, hudargs, icon, normal, gentle) \ - NOTIF_ADD_AUTOCVAR(INFO_##name, default) \ - MSG_INFO_NOTIF_(0, INFO_##name, INFO_##name, default, strnum, flnum, args, hudargs, icon, normal, gentle) +#define MSG_INFO_NOTIF(name, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle) \ + NOTIF_ADD_AUTOCVAR(INFO_##name, defaultvalue) \ + MSG_INFO_NOTIF_(0, INFO_##name, INFO_##name, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle) -#define MSG_INFO_NOTIF_(teamnum, name, cvarname, default, strnum, flnum, args, hudargs, icon, normal, gentle) \ +#define MSG_INFO_NOTIF_(teamnum, name, cvarname, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle) \ REGISTER(Notifications, name, m_id, new_pure(msg_info_notification)) { \ - Create_Notification_Entity (this, default, ACVNN(cvarname), MSG_INFO, strtoupper(#name), teamnum); \ + Create_Notification_Entity (this, defaultvalue, ACVNN(cvarname), MSG_INFO, strtoupper(#name), teamnum); \ Create_Notification_Entity_InfoCenter(this, ACVNN(cvarname), strtoupper(#name), strnum, flnum, \ args, /* args */ \ hudargs, /* hudargs */ \ @@ -755,12 +780,12 @@ Notification Get_Notif_Ent(MSG net_type, int net_name) } .string nent_iconargs; -#define MULTIICON_INFO(name, default, strnum, flnum, args, hudargs, iconargs, icon, normal, gentle) \ - MULTIICON_INFO_(INFO_##name, default, strnum, flnum, args, hudargs, iconargs, icon, normal, gentle) -#define MULTIICON_INFO_(name, default, strnum, flnum, args, hudargs, iconargs, icon, normal, gentle) \ - NOTIF_ADD_AUTOCVAR(name, default) \ +#define MULTIICON_INFO(name, defaultvalue, strnum, flnum, args, hudargs, iconargs, icon, normal, gentle) \ + MULTIICON_INFO_(INFO_##name, defaultvalue, strnum, flnum, args, hudargs, iconargs, icon, normal, gentle) +#define MULTIICON_INFO_(name, defaultvalue, strnum, flnum, args, hudargs, iconargs, icon, normal, gentle) \ + NOTIF_ADD_AUTOCVAR(name, defaultvalue) \ REGISTER(Notifications, name, m_id, new_pure(msg_info_notification)) { \ - Create_Notification_Entity (this, default, ACVNN(name), MSG_INFO, strtoupper(#name), 0); \ + Create_Notification_Entity (this, defaultvalue, ACVNN(name), MSG_INFO, strtoupper(#name), 0); \ Create_Notification_Entity_InfoCenter(this, ACVNN(name), strtoupper(#name), strnum, flnum, \ args, /* args */ \ hudargs, /* hudargs */ \ @@ -772,16 +797,16 @@ Notification Get_Notif_Ent(MSG net_type, int net_name) this.nent_iconargs = iconargs; \ } -#define MSG_CENTER_NOTIF_TEAM(teamnum, name, cvarname, default, strnum, flnum, args, cpid, durcnt, normal, gentle) \ - MSG_CENTER_NOTIF_(teamnum, CENTER_##name, CENTER_##cvarname, default, strnum, flnum, args, cpid, durcnt, normal, gentle) +#define MSG_CENTER_NOTIF_TEAM(teamnum, name, cvarname, defaultvalue, strnum, flnum, args, cpid, durcnt, normal, gentle) \ + MSG_CENTER_NOTIF_(teamnum, CENTER_##name, CENTER_##cvarname, defaultvalue, strnum, flnum, args, cpid, durcnt, normal, gentle) -#define MSG_CENTER_NOTIF(name, default, strnum, flnum, args, cpid, durcnt, normal, gentle) \ - NOTIF_ADD_AUTOCVAR(CENTER_##name, default) \ - MSG_CENTER_NOTIF_(0, CENTER_##name, CENTER_##name, default, strnum, flnum, args, cpid, durcnt, normal, gentle) +#define MSG_CENTER_NOTIF(name, defaultvalue, strnum, flnum, args, cpid, durcnt, normal, gentle) \ + NOTIF_ADD_AUTOCVAR(CENTER_##name, defaultvalue) \ + MSG_CENTER_NOTIF_(0, CENTER_##name, CENTER_##name, defaultvalue, strnum, flnum, args, cpid, durcnt, normal, gentle) -#define MSG_CENTER_NOTIF_(teamnum, name, cvarname, default, strnum, flnum, args, cpid, durcnt, normal, gentle) \ +#define MSG_CENTER_NOTIF_(teamnum, name, cvarname, defaultvalue, strnum, flnum, args, cpid, durcnt, normal, gentle) \ REGISTER(Notifications, name, m_id, new_pure(msg_center_notification)) { \ - Create_Notification_Entity (this, default, ACVNN(cvarname), MSG_CENTER, strtoupper(#name), teamnum); \ + Create_Notification_Entity (this, defaultvalue, ACVNN(cvarname), MSG_CENTER, strtoupper(#name), teamnum); \ Create_Notification_Entity_InfoCenter(this, ACVNN(cvarname), strtoupper(#name), strnum, flnum, \ args, /* args */ \ "", /* hudargs */ \ @@ -792,28 +817,30 @@ Notification Get_Notif_Ent(MSG net_type, int net_name) gentle); /* gentle */ \ } -#define MSG_MULTI_NOTIF(name, default, anncename, infoname, centername) \ - NOTIF_ADD_AUTOCVAR(name, default) \ +#define MSG_MULTI_NOTIF(name, defaultvalue, anncename, infoname, centername) \ + NOTIF_ADD_AUTOCVAR(name, defaultvalue) \ REGISTER(Notifications, name, m_id, new_pure(msg_multi_notification)) { \ - Create_Notification_Entity (this, default, ACVNN(name), MSG_MULTI, strtoupper(#name), 0); \ + Create_Notification_Entity (this, defaultvalue, ACVNN(name), MSG_MULTI, strtoupper(#name), 0); \ Create_Notification_Entity_Multi(this, ACVNN(name), strtoupper(#name), \ anncename, /* anncename */ \ infoname, /* infoname */ \ centername); /* centername */ \ } -#define MSG_CHOICE_NOTIF_TEAM(teamnum, name, cvarname, default, challow, chtype, optiona, optionb) \ - MSG_CHOICE_NOTIF_(teamnum, CHOICE_##name, CHOICE_##cvarname, default, challow, chtype, optiona, optionb) +#define MSG_CHOICE_NOTIF_TEAM(teamnum, name, cvarname, defaultvalue, challow, chtype, optiona, optionb) \ + MSG_CHOICE_NOTIF_(teamnum, CHOICE_##name, CHOICE_##cvarname, defaultvalue, challow, chtype, optiona, optionb) -#define MSG_CHOICE_NOTIF(name, default, challow, chtype, optiona, optionb) \ - NOTIF_ADD_AUTOCVAR(CHOICE_##name, default) \ +#define MSG_CHOICE_NOTIF(name, defaultvalue, challow, chtype, optiona, optionb) \ + NOTIF_ADD_AUTOCVAR(CHOICE_##name, defaultvalue) \ NOTIF_ADD_AUTOCVAR(CHOICE_##name##_ALLOWED, challow) \ - MSG_CHOICE_NOTIF_(0, CHOICE_##name, CHOICE_##name, default, challow, chtype, optiona, optionb) + MSG_CHOICE_NOTIF_(0, CHOICE_##name, CHOICE_##name, defaultvalue, challow, chtype, optiona, optionb) -#define MSG_CHOICE_NOTIF_(teamnum, name, cvarname, default, challow, chtype, optiona, optionb) \ +#define MSG_CHOICE_NOTIF_(teamnum, name, cvarname, defaultvalue, challow, chtype, optiona, optionb) \ REGISTER(Notifications, name, m_id, new_pure(msg_choice_notification)) { \ - this.nent_choice_idx = nent_choice_count++; \ - Create_Notification_Entity (this, default, ACVNN(cvarname), MSG_CHOICE, strtoupper(#name), teamnum); \ + this.nent_choice_idx = nent_choice_count; \ + if (!teamnum || teamnum == NUM_TEAM_4) \ + nent_choice_count++; \ + Create_Notification_Entity (this, defaultvalue, ACVNN(cvarname), MSG_CHOICE, strtoupper(#name), teamnum); \ Create_Notification_Entity_Choice(this, ACVNN(cvarname), strtoupper(#name), \ challow, /* challow_def */ \ autocvar_notification_##cvarname##_ALLOWED, /* challow_var */ \ @@ -837,4 +864,17 @@ REGISTRY_END(Notifications) LOG_SEVERE("Notification initialization failed! Read above and fix the errors!"); } +#ifdef CSQC +.int cvar_value; +void ReplicateVars(bool would_destroy) +{ + if (!would_destroy) + FOREACH(Notifications, it.nent_type == MSG_CHOICE && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), { + string cvarname = strcat("notification_", Get_Notif_CvarName(it)); + // NOTE: REPLICATE_SIMPLE can return; + REPLICATE_SIMPLE(it.cvar_value, cvarname); + }); +} +#endif + #include "all.inc"