X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fnotifications%2Fall.qh;h=00bd94bb740066bc03810210ece3d6238d895da8;hb=fde12c3a1d9c6a3e336f000fd2568b8d8d40bfe1;hp=e5df019579e20a77225b46ffc06859a2b9b22d79;hpb=8dd669b2c3f0ce3ea01ef930b70d40045e949c1a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/notifications/all.qh b/qcsrc/common/notifications/all.qh index e5df01957..00bd94bb7 100644 --- a/qcsrc/common/notifications/all.qh +++ b/qcsrc/common/notifications/all.qh @@ -36,6 +36,7 @@ string Get_Notif_TypeName(MSG net_type) case MSG_CENTER: return "MSG_CENTER"; case MSG_MULTI: return "MSG_MULTI"; case MSG_CHOICE: return "MSG_CHOICE"; + case MSG_CENTER_KILL: return "MSG_CENTER_KILL"; } LOG_WARNF("Get_Notif_TypeName(%d): Improper net type!", ORDINAL(net_type)); return ""; @@ -61,14 +62,13 @@ 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) CASE(CPID, ONS_CAPSHIELD) CASE(CPID, OVERTIME) CASE(CPID, POWERUP) CASE(CPID, RACE_FINISHLAP) + CASE(CPID, SURVIVAL) CASE(CPID, TEAMCHANGE) CASE(CPID, TIMEOUT) CASE(CPID, TIMEIN) @@ -124,7 +124,8 @@ void Create_Notification_Entity_Annce(entity notif, float channel, string snd, float vol, - float position); + float position, + float queuetime); void Create_Notification_Entity_InfoCenter(entity notif, float var_cvar, @@ -160,7 +161,9 @@ void Create_Notification_Entity_Choice(entity notif, void Dump_Notifications(int fh, bool alsoprint); -GENERIC_COMMAND(dumpnotifs, "Dump all notifications into notifications_dump.txt", false) +#define DEFAULT_FILENAME "notifications_dump.cfg" +// NOTE: dumpeffectinfo, dumpnotifs, dumpturrets and dumpweapons use similar code +GENERIC_COMMAND(dumpnotifs, "Dump all notifications into " DEFAULT_FILENAME, false) { switch (request) { @@ -171,12 +174,12 @@ GENERIC_COMMAND(dumpnotifs, "Dump all notifications into notifications_dump.txt" bool alsoprint = false; if (filename == "") { - filename = "notifications_dump.cfg"; + filename = DEFAULT_FILENAME; alsoprint = false; } else if (filename == "-") { - filename = "notifications_dump.cfg"; + filename = DEFAULT_FILENAME; alsoprint = true; } int fh = fopen(filename, FILE_WRITE); @@ -191,7 +194,7 @@ GENERIC_COMMAND(dumpnotifs, "Dump all notifications into notifications_dump.txt" LOG_INFOF("^1Error: ^7Could not open file '%s'!", filename); } #else - LOG_INFO(_("Notification dump command only works with cl_cmd and sv_cmd.")); + LOG_INFO("Notification dump command only works with cl_cmd and sv_cmd."); #endif return; } @@ -199,13 +202,14 @@ GENERIC_COMMAND(dumpnotifs, "Dump all notifications into notifications_dump.txt" case CMD_REQUEST_USAGE: { LOG_HELP("Usage:^3 ", GetProgramCommandPrefix(), " dumpnotifs []"); - LOG_HELP(" Where is the file to write (default is notifications_dump.cfg),"); + LOG_HELPF(" Where is the file to write (default is %s),", DEFAULT_FILENAME); LOG_HELP(" if supplied with '-' output to console as well as default,"); LOG_HELP(" if left blank, it will only write to default."); return; } } } +#undef DEFAULT_FILENAME #ifdef NOTIFICATIONS_DEBUG bool autocvar_notification_debug = false; @@ -355,8 +359,8 @@ float autocvar_notification_show_sprees_center_specialonly = true; f1points: point or points depending on f1 f1ord: count_ordinal of f1 f1time: process_time of f1 - f1race_time: mmssss of f1 - f2race_time: mmssss of f2 + f1race_time: TIME_ENCODED_TOSTRING of f1 + f2race_time: TIME_ENCODED_TOSTRING of f2 race_col: color of race time/position (i.e. good or bad) race_diff: show time difference between f2 and f3 missing_teams: show which teams still need players @@ -382,6 +386,18 @@ const float NOTIF_MAX_ARGS = 7; const float NOTIF_MAX_HUDARGS = 2; const float NOTIF_MAX_DURCNT = 2; +#ifdef CSQC +const int NOTIF_QUEUE_MAX = 10; +entity notif_queue_entity[NOTIF_QUEUE_MAX]; +MSG notif_queue_type[NOTIF_QUEUE_MAX]; +float notif_queue_time[NOTIF_QUEUE_MAX]; + +float notif_queue_next_time; +int notif_queue_length; + +void Local_Notification_Queue_Process(); +#endif + string arg_slot[NOTIF_MAX_ARGS]; const float ARG_CS_SV_HA = 1; // enabled on CSQC, SVQC, and Hudargs @@ -415,11 +431,11 @@ string BUFF_NAME(int i); ARG_CASE(ARG_CS, "f1points", (f1 == 1 ? _("point") : _("points"))) \ ARG_CASE(ARG_CS_SV, "f1ord", count_ordinal(f1)) \ ARG_CASE(ARG_CS_SV, "f1time", process_time(2, f1)) \ - ARG_CASE(ARG_CS_SV_HA, "f1race_time", mmssss(f1)) \ - ARG_CASE(ARG_CS_SV_HA, "f2race_time", mmssss(f2)) \ - ARG_CASE(ARG_CS_SV_HA, "f3race_time", mmssss(f3)) \ + ARG_CASE(ARG_CS_SV_HA, "f1race_time", TIME_ENCODED_TOSTRING(f1, true)) \ + ARG_CASE(ARG_CS_SV_HA, "f2race_time", TIME_ENCODED_TOSTRING(f2, true)) \ + ARG_CASE(ARG_CS_SV_HA, "f3race_time", TIME_ENCODED_TOSTRING(f3, true)) \ ARG_CASE(ARG_CS_SV, "race_col", CCR(((f1 == 1) ? "^F1" : "^F2"))) \ - ARG_CASE(ARG_CS_SV, "race_diff", ((f2 > f3) ? sprintf(CCR("^1[+%s]"), mmssss(f2 - f3)) : sprintf(CCR("^2[-%s]"), mmssss(f3 - f2)))) \ + ARG_CASE(ARG_CS_SV, "race_diff", ((f2 > f3) ? sprintf(CCR("^1[+%s]"), TIME_ENCODED_TOSTRING(f2 - f3, true)) : sprintf(CCR("^2[-%s]"), TIME_ENCODED_TOSTRING(f3 - f2, true)))) \ 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")) \ @@ -630,6 +646,7 @@ string notif_arg_item_wepammo(float f1, float f2) { string ammoitems = ""; Weapon wep = REGISTRY_GET(Weapons, f1); + // TODO: registry handles switch (wep.ammo_type) { case RES_SHELLS: ammoitems = ITEM_Shells.m_name; break; @@ -640,7 +657,7 @@ string notif_arg_item_wepammo(float f1, float f2) case RES_FUEL: ammoitems = ITEM_JetpackFuel.m_name; break; default: return ""; // doesn't use ammo } - return sprintf(_(" with %d %s"), f2, ammoitems); + return sprintf(_(" with %d %s"), f2, strtolower(ammoitems)); } @@ -662,6 +679,7 @@ string notif_arg_item_wepammo(float f1, float f2) .string nent_snd; .float nent_vol; .float nent_position; +.float nent_queuetime; // MSG_INFO and MSG_CENTER entity values .string nent_args; // used by both @@ -740,21 +758,22 @@ Notification Get_Notif_Ent(MSG net_type, int net_name) return it; } -#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_TEAM(teamnum, name, cvarname, defaultvalue, sound, channel, volume, position, queuetime) \ + MSG_ANNCE_NOTIF_(teamnum, ANNCE_##name, ANNCE_##cvarname, defaultvalue, sound, channel, volume, position, queuetime) -#define MSG_ANNCE_NOTIF(name, defaultvalue, sound, channel, volume, position) \ +#define MSG_ANNCE_NOTIF(name, defaultvalue, sound, channel, volume, position, queuetime) \ NOTIF_ADD_AUTOCVAR(ANNCE_##name, defaultvalue) \ - MSG_ANNCE_NOTIF_(0, ANNCE_##name, ANNCE_##name, defaultvalue, sound, channel, volume, position) + MSG_ANNCE_NOTIF_(0, ANNCE_##name, ANNCE_##name, defaultvalue, sound, channel, volume, position, queuetime) -#define MSG_ANNCE_NOTIF_(teamnum, name, cvarname, defaultvalue, sound, channel, volume, position) \ +#define MSG_ANNCE_NOTIF_(teamnum, name, cvarname, defaultvalue, sound, channel, volume, position, queuetime) \ REGISTER(Notifications, name, m_id, new_pure(msg_annce_notification)) { \ 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 */ \ - volume, /* vol */ \ - position); /* position */ \ + channel, /* channel */ \ + sound, /* snd */ \ + volume, /* vol */ \ + position, /* position */ \ + queuetime); /* queuetime */ \ } #define MSG_INFO_NOTIF_TEAM(teamnum, name, cvarname, defaultvalue, strnum, flnum, args, hudargs, icon, normal, gentle) \