X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fcommon%2Fnotifications.qh;h=b905f67061ec282c21038e7e6850bb9305bfb537;hb=ba0988ca930f50286f8cf3b6c114ebc6584964af;hp=a17f703ff5fb5d76247e75acb37e58e8a42ee21e;hpb=b01594de6b197691b1d8dd5d82d3d07dcbc74223;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/notifications.qh b/qcsrc/common/notifications.qh index a17f703ff..b905f6706 100644 --- a/qcsrc/common/notifications.qh +++ b/qcsrc/common/notifications.qh @@ -1,19 +1,101 @@ +#ifndef NOTIFICATIONS_H +#define NOTIFICATIONS_H + +#if defined(CSQC) + #include "util-pre.qh" + #include "../client/sys-pre.qh" + #include "../dpdefs/csprogsdefs.qc" + #include "../client/sys-post.qh" + #include "../client/Defs.qc" + #include "../dpdefs/keycodes.qc" + #include "constants.qh" + #include "stats.qh" + #include "../warpzonelib/anglestransform.qh" + #include "../warpzonelib/mathlib.qh" + #include "../warpzonelib/common.qh" + #include "../warpzonelib/client.qh" + #include "playerstats.qh" + #include "teams.qh" + #include "util.qh" + #include "nades.qh" + #include "buffs.qh" + #include "test.qh" + #include "counting.qh" + #include "weapons/weapons.qh" + #include "mapinfo.qh" + #include "command/markup.qh" + #include "command/rpn.qh" + #include "command/generic.qh" + #include "command/shared_defs.qh" + #include "urllib.qh" + #include "animdecide.qh" + #include "../client/command/cl_cmd.qh" + #include "monsters/monsters.qh" + #include "../client/autocvars.qh" +#elif defined(MENUQC) +#elif defined(SVQC) + #include "util-pre.qh" + #include "../server/sys-pre.qh" + #include "../dpdefs/progsdefs.qc" + #include "../dpdefs/dpextensions.qc" + #include "../server/sys-post.qh" + #include "../warpzonelib/anglestransform.qh" + #include "../warpzonelib/mathlib.qh" + #include "../warpzonelib/common.qh" + #include "../warpzonelib/util_server.qh" + #include "../warpzonelib/server.qh" + #include "constants.qh" + #include "stats.qh" + #include "teams.qh" + #include "util.qh" + #include "nades.qh" + #include "buffs.qh" + #include "test.qh" + #include "counting.qh" + #include "urllib.qh" + #include "command/markup.qh" + #include "command/rpn.qh" + #include "command/generic.qh" + #include "command/shared_defs.qh" + #include "net_notice.qh" + #include "animdecide.qh" + #include "monsters/monsters.qh" + #include "monsters/sv_monsters.qh" + #include "monsters/spawn.qh" + #include "weapons/config.qh" + #include "weapons/weapons.qh" + #include "../server/weapons/accuracy.qh" + #include "../server/weapons/common.qh" + #include "../server/weapons/csqcprojectile.qh" + #include "../server/weapons/hitplot.qh" + #include "../server/weapons/selection.qh" + #include "../server/weapons/spawning.qh" + #include "../server/weapons/throwing.qh" + #include "../server/weapons/tracing.qh" + #include "../server/weapons/weaponstats.qh" + #include "../server/weapons/weaponsystem.qh" + #include "../server/t_items.qh" + #include "../server/autocvars.qh" + #include "../server/constants.qh" + #include "../server/defs.qh" +#endif + // ================================================ // Unified notification system, written by Samual // Last updated: March, 2013 // ================================================ // main types/groups of notifications -#define MSG_ANNCE 1 // "Global" AND "personal" announcer messages -#define MSG_INFO 2 // "Global" information messages -#define MSG_CENTER 3 // "Personal" centerprint messages -#define MSG_CENTER_CPID 4 // Kill centerprint message -#define MSG_MULTI 5 // Subcall MSG_INFO and/or MSG_CENTER notifications -#define MSG_CHOICE 6 // Choose which subcall wrapper to activate +const int MSG_ANNCE = 1; // "Global" AND "personal" announcer messages +const int MSG_INFO = 2; // "Global" information messages +const int MSG_CENTER = 3; // "Personal" centerprint messages +const int MSG_CENTER_CPID = 4; // Kill centerprint message +const int MSG_MULTI = 5; // Subcall MSG_INFO and/or MSG_CENTER notifications +const int MSG_CHOICE = 6; // Choose which subcall wrapper to activate // negative confirmations -#define NO_MSG -12345 // allows various things to know when no information is added -#define NOTIF_ABORT -1234 // allows Send_Notification to safely abort sending +const int NO_MSG = -12345; // allows various things to know when no information is added +const int NOTIF_ABORT = -1234; // allows Send_Notification to safely abort sending #define EIGHT_VARS_TO_VARARGS_VARLIST \ VARITEM(1, 0, s1) \ @@ -45,7 +127,7 @@ void Destroy_All_Notifications(void); void Create_Notification_Entity( float var_default, float var_cvar, - float typeid, + float typeId, float nameid, string namestring, float strnum, @@ -94,12 +176,12 @@ float prev_soundtime; #endif #ifdef SVQC // SERVER ONLY -#define NOTIF_ONE 1 -#define NOTIF_ONE_ONLY 2 -#define NOTIF_TEAM 3 -#define NOTIF_TEAM_EXCEPT 4 -#define NOTIF_ALL 5 -#define NOTIF_ALL_EXCEPT 6 +const float NOTIF_ONE = 1; +const float NOTIF_ONE_ONLY = 2; +const float NOTIF_TEAM = 3; +const float NOTIF_TEAM_EXCEPT = 4; +const float NOTIF_ALL = 5; +const float NOTIF_ALL_EXCEPT = 6; void Kill_Notification( float broadcast, entity client, @@ -340,6 +422,11 @@ void Send_Notification_WOCOVA( #define MSG_INFO_NOTIFICATIONS \ MSG_INFO_NOTIF(2, INFO_CHAT_NOSPECTATORS, 0, 0, "", "", "", _("^F4NOTE: ^BGSpectator chat is not sent to players during the match"), "") \ + MSG_INFO_NOTIF(2, INFO_COINTOSS, 1, 0, "s1", "", "", _("^F2Throwing coin... Result: %s^F2!"), "") \ + MSG_INFO_NOTIF(1, INFO_JETPACK_NOFUEL, 0, 0, "", "", "", _("^BGYou don't have any fuel for the ^F1Jetpack"), "") \ + MSG_INFO_NOTIF(2, INFO_SUPERSPEC_MISSING_UID, 0, 0, "", "", "", _("^F2You lack a UID, superspec options will not be saved/restored"), "") \ + MSG_INFO_NOTIF(1, INFO_CA_JOIN_LATE, 0, 0, "", "", "", _("^F1Round already started, you will join the game in the next round"), "") \ + MSG_INFO_NOTIF(1, INFO_CA_LEAVE, 0, 0, "", "", "", _("^F2You will spectate in the next round"), "") \ MULTITEAM_INFO(1, INFO_CTF_CAPTURE_, 2, 1, 0, "s1", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag"), "") \ MULTITEAM_INFO(1, INFO_CTF_CAPTURE_BROKEN_, 2, 2, 2, "s1 f1p2dec s2 f2p2dec", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG%s^BG's previous record of ^F2%s^BG seconds"), "") \ MULTITEAM_INFO(1, INFO_CTF_CAPTURE_TIME_, 2, 1, 1, "s1 f1p2dec", "s1", "notify_%s_captured", _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"), "") \ @@ -438,8 +525,6 @@ void Send_Notification_WOCOVA( MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_ROCKET, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"), "") \ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VOID, 2, 1, "s1 s2loc spree_lost", "s1", "notify_void", _("^BG%s^K1 was in the wrong place%s%s"), "") \ MULTITEAM_INFO(1, INFO_DEATH_TEAMKILL_, 4, 3, 1, "s1 s2 s3loc spree_end", "s2 s1", "notify_teamkill_%s", _("^BG%s^K1 was betrayed by ^BG%s^K1%s%s"), "") \ - MSG_INFO_NOTIF(1, INFO_CA_JOIN_LATE, 0, 0, "", "", "", _("^F1Round already started, you will join the game in the next round"), "") \ - MSG_INFO_NOTIF(1, INFO_CA_LEAVE, 0, 0, "", "", "", _("^F2You will spectate in the next round"), "") \ MSG_INFO_NOTIF(1, INFO_DOMINATION_CAPTURE_TIME, 2, 2, "s1 s2 f1 f2", "", "", _("^BG%s^BG%s^BG (%s points every %s seconds)"), "") \ MSG_INFO_NOTIF(1, INFO_FREEZETAG_FREEZE, 2, 0, "s1 s2", "", "", _("^BG%s^K1 was frozen by ^BG%s"), "") \ MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED, 2, 0, "s1 s2", "", "", _("^BG%s^K3 was revived by ^BG%s"), "") \ @@ -530,6 +615,7 @@ void Send_Notification_WOCOVA( MSG_INFO_NOTIF(1, INFO_WEAPON_KLEINBOTTLE_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weapontuba", _("^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"), "") \ MSG_INFO_NOTIF(1, INFO_WEAPON_MACHINEGUN_MURDER_SNIPE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponuzi", _("^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"), "") \ MSG_INFO_NOTIF(1, INFO_WEAPON_MACHINEGUN_MURDER_SPRAY, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponuzi", _("^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"), "") \ + MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_LIMIT, 0, 1, "f1", "", "", _("^BGYou cannot place more than ^F2%s^BG mines at a time"), "") \ MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponminelayer", _("^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"), "") \ MSG_INFO_NOTIF(1, INFO_WEAPON_MINELAYER_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponminelayer", _("^BG%s^K1 forgot about their mine%s%s"), "") \ MSG_INFO_NOTIF(1, INFO_WEAPON_MORTAR_MURDER_BOUNCE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapongrenadelauncher", _("^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"), "") \ @@ -583,6 +669,7 @@ void Send_Notification_WOCOVA( MSG_CENTER_NOTIF(1, CENTER_ROUND_TIED, 0, 0, "", CPID_ROUND, "0 0", _("^BGRound tied"), "") \ MSG_CENTER_NOTIF(1, CENTER_ROUND_OVER, 0, 0, "", CPID_ROUND, "0 0", _("^BGRound over, there's no winner"), "") \ MSG_CENTER_NOTIF(1, CENTER_CAMPCHECK, 0, 0, "", CPID_CAMPCHECK, "0 0", _("^F2Don't camp!"), "") \ + MSG_CENTER_NOTIF(1, CENTER_COINTOSS, 1, 0, "s1", NO_CPID, "0 0", _("^F2Throwing coin... Result: %s^F2!"), "") \ MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_FREE, 0, 0, "", CPID_CTF_CAPSHIELD, "0 0", _("^BGYou are now free.\n^BGFeel free to ^F2try to capture^BG the flag again\n^BGif you think you will succeed."), "") \ MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_SHIELDED, 0, 0, "", CPID_CTF_CAPSHIELD, "0 0", _("^BGYou are now ^F1shielded^BG from the flag\n^BGfor ^F2too many unsuccessful attempts^BG to capture.\n^BGMake some defensive scores before trying again."), "") \ MULTITEAM_CENTER(1, CENTER_CTF_CAPTURE_, 2, 0, 0, "", CPID_CTF_LOWPRIO, "0 0", _("^BGYou captured the ^TC^TT^BG flag!"), "") \ @@ -684,6 +771,7 @@ void Send_Notification_WOCOVA( MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_SCAN, 0, 1, "", CPID_KEYHUNT_OTHER, "f1 0", _("^BGScanning frequency range..."), "") \ MULTITEAM_CENTER(1, CENTER_KEYHUNT_START_, 4, 0, 0, "", CPID_KEYHUNT, "0 0", _("^BGYou are starting with the ^TC^TT Key"), "") \ MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_WAIT, 0, 1, "missing_teams", CPID_KEYHUNT_OTHER, "0 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \ + MSG_CENTER_NOTIF(1, CENTER_LMS_NOLIVES, 0, 0, "", CPID_LMS, "0 0", _("^BGYou have no lives left, you must wait until the next match"), "") \ MSG_CENTER_NOTIF(1, CENTER_MISSING_TEAMS, 0, 1, "missing_teams", CPID_MISSING_TEAMS, "-1 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \ MSG_CENTER_NOTIF(1, CENTER_MISSING_PLAYERS, 0, 1, "f1", CPID_MISSING_PLAYERS, "-1 0", _("^BGWaiting for %s player(s) to join..."), "") \ MSG_CENTER_NOTIF(1, CENTER_INSTAGIB_FINDAMMO, 0, 0, "", CPID_INSTAGIB_FINDAMMO,"1 9", _("^F4^COUNT^BG left to find some ammo!"), "") \ @@ -693,8 +781,13 @@ void Send_Notification_WOCOVA( MSG_CENTER_NOTIF(1, CENTER_NIX_COUNTDOWN, 0, 2, "item_wepname", CPID_NIX, "1 f2", _("^F2^COUNT^BG until weapon change...\nNext weapon: ^F1%s"), "") \ MSG_CENTER_NOTIF(1, CENTER_NIX_NEWWEAPON, 0, 1, "item_wepname", CPID_NIX, "0 0", _("^F2Active weapon: ^F1%s"), "") \ MSG_CENTER_NOTIF(1, CENTER_NADE, 0, 0, "", NO_CPID, "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"), "") \ + MSG_CENTER_NOTIF(1, CENTER_ONS_NOTSHIELDED, 0, 0, "", CPID_ONSLAUGHT, "0 0", _("^K1Your generator is NOT shielded!\n^BGRe-capture controlpoints to shield it!"), "") \ MSG_CENTER_NOTIF(1, CENTER_OVERTIME_FRAG, 0, 0, "", CPID_OVERTIME, "0 0", _("^F2Now playing ^F4OVERTIME^F2!\nKeep fragging until we have a winner!"), _("^F2Now playing ^F4OVERTIME^F2!\nKeep scoring until we have a winner!")) \ + MSG_CENTER_NOTIF(1, CENTER_OVERTIME_CONTROLPOINT, 0, 0, "", CPID_OVERTIME, "5 0", _("^F2Now playing ^F4OVERTIME^F2!\n\nGenerators are now decaying.\nThe more control points your team holds,\nthe faster the enemy generator decays"), "") \ MSG_CENTER_NOTIF(1, CENTER_OVERTIME_TIME, 0, 1, "f1time", CPID_OVERTIME, "0 0", _("^F2Now playing ^F4OVERTIME^F2!\n^BGAdded ^F4%s^BG to the game!"), "") \ + MSG_CENTER_NOTIF(1, CENTER_PORTO_CREATED_IN, 0, 0, "", NO_CPID, "0 0", _("^K1In^BG-portal created"), "") \ + MSG_CENTER_NOTIF(1, CENTER_PORTO_CREATED_OUT, 0, 0, "", NO_CPID, "0 0", _("^F3Out^BG-portal created"), "") \ + MSG_CENTER_NOTIF(1, CENTER_PORTO_FAILED, 0, 0, "", NO_CPID, "0 0", _("^K1Portal deployment failed.\n\n^F2Catch it to try again!"), "") \ MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_INVISIBILITY, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Invisibility has worn off"), "") \ MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SHIELD, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Shield has worn off"), "") \ MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SPEED, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Speed has worn off"), "") \ @@ -716,7 +809,8 @@ void Send_Notification_WOCOVA( MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SPECTATE, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Spectating in ^COUNT"), "") \ MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SUICIDE, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Suicide in ^COUNT"), "") \ MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_BEGINNING, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout begins in ^COUNT"), "") \ - MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_ENDING, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout ends in ^COUNT"), "") + MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_ENDING, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout ends in ^COUNT"), "") \ + MSG_CENTER_NOTIF(1, CENTER_WEAPON_MINELAYER_LIMIT, 0, 1, "f1", NO_CPID, "0 0", _("^BGYou cannot place more than ^F2%s^BG mines at a time"), "") #define MULTITEAM_MULTI2(default,prefix,anncepre,infopre,centerpre) \ MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \ @@ -825,6 +919,7 @@ void Send_Notification_WOCOVA( MSG_MULTI_NOTIF(1, ITEM_WEAPON_NOAMMO, NO_MSG, INFO_ITEM_WEAPON_NOAMMO, CENTER_ITEM_WEAPON_NOAMMO) \ MSG_MULTI_NOTIF(1, ITEM_WEAPON_PRIMORSEC, NO_MSG, INFO_ITEM_WEAPON_PRIMORSEC, CENTER_ITEM_WEAPON_PRIMORSEC) \ MSG_MULTI_NOTIF(1, ITEM_WEAPON_UNAVAILABLE, NO_MSG, INFO_ITEM_WEAPON_UNAVAILABLE, CENTER_ITEM_WEAPON_UNAVAILABLE) \ + MSG_MULTI_NOTIF(1, MULTI_COINTOSS, NO_MSG, INFO_COINTOSS, CENTER_COINTOSS) \ MSG_MULTI_NOTIF(1, MULTI_COUNTDOWN_BEGIN, ANNCE_BEGIN, NO_MSG, CENTER_COUNTDOWN_BEGIN) \ MSG_MULTI_NOTIF(1, MULTI_INSTAGIB_FINDAMMO, ANNCE_NUM_10, NO_MSG, CENTER_INSTAGIB_FINDAMMO_FIRST) \ MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_MURDER, NO_MSG, INFO_WEAPON_ACCORDEON_MURDER, NO_MSG) \ @@ -858,6 +953,7 @@ void Send_Notification_WOCOVA( MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_SUICIDE, NO_MSG, INFO_WEAPON_KLEINBOTTLE_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ MSG_MULTI_NOTIF(1, WEAPON_MACHINEGUN_MURDER_SNIPE, NO_MSG, INFO_WEAPON_MACHINEGUN_MURDER_SNIPE, NO_MSG) \ MSG_MULTI_NOTIF(1, WEAPON_MACHINEGUN_MURDER_SPRAY, NO_MSG, INFO_WEAPON_MACHINEGUN_MURDER_SPRAY, NO_MSG) \ + MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_LIMIT, NO_MSG, INFO_WEAPON_MINELAYER_LIMIT, CENTER_WEAPON_MINELAYER_LIMIT) \ MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_MURDER, NO_MSG, INFO_WEAPON_MINELAYER_MURDER, NO_MSG) \ MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_SUICIDE, NO_MSG, INFO_WEAPON_MINELAYER_SUICIDE, CENTER_DEATH_SELF_GENERIC) \ MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_BOUNCE, NO_MSG, INFO_WEAPON_MORTAR_MURDER_BOUNCE, NO_MSG) \ @@ -920,32 +1016,32 @@ 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) var float autocvar_notification_##name = default; +#define NOTIF_ADD_AUTOCVAR(name,default) float autocvar_notification_##name = default; -var float autocvar_notification_show_location = FALSE; -var string autocvar_notification_show_location_string = ""; //_(" at the %s"); -var float autocvar_notification_show_sprees = TRUE; -var float autocvar_notification_show_sprees_info = 3; // 0 = off, 1 = target only, 2 = attacker only, 3 = target and attacker -var float autocvar_notification_show_sprees_info_newline = TRUE; -var float autocvar_notification_show_sprees_info_specialonly = TRUE; -var float autocvar_notification_errors_are_fatal = TRUE; -var float autocvar_notification_lifetime_runtime = 0.5; -var float autocvar_notification_lifetime_mapload = 10; -var float autocvar_notification_debug = FALSE; +float autocvar_notification_show_location = false; +string autocvar_notification_show_location_string = ""; //_(" at the %s"); +float autocvar_notification_show_sprees = true; +float autocvar_notification_show_sprees_info = 3; // 0 = off, 1 = target only, 2 = attacker only, 3 = target and attacker +float autocvar_notification_show_sprees_info_newline = true; +float autocvar_notification_show_sprees_info_specialonly = true; +float autocvar_notification_errors_are_fatal = true; +float autocvar_notification_lifetime_runtime = 0.5; +float autocvar_notification_lifetime_mapload = 10; +float autocvar_notification_debug = false; #ifdef SVQC .float FRAG_VERBOSE; void Notification_GetCvars(void); -var float autocvar_notification_server_allows_location = 1; // 0 = no, 1 = yes +float autocvar_notification_server_allows_location = 1; // 0 = no, 1 = yes #else -var float autocvar_notification_item_centerprinttime = 1.5; +float autocvar_notification_item_centerprinttime = 1.5; // 0 = no, 1 = yes, 2 = forced on for all MSG_INFO notifs // DISABLED IN CODE, BUT ENABLED IN CONFIG FOR COMPATIBILITY WITH OLD CLIENTS -var float autocvar_notification_allow_chatboxprint = 0; +float autocvar_notification_allow_chatboxprint = 0; -var float autocvar_notification_show_sprees_center = TRUE; -var float autocvar_notification_show_sprees_center_specialonly = TRUE; +float autocvar_notification_show_sprees_center = true; +float autocvar_notification_show_sprees_center_specialonly = true; #endif @@ -999,18 +1095,18 @@ var float autocvar_notification_show_sprees_center_specialonly = TRUE; death_team: show the full name of the team a player is switching from */ -#define NOTIF_MAX_ARGS 7 -#define NOTIF_MAX_HUDARGS 2 -#define NOTIF_MAX_DURCNT 2 +const float NOTIF_MAX_ARGS = 7; +const float NOTIF_MAX_HUDARGS = 2; +const float NOTIF_MAX_DURCNT = 2; string arg_slot[NOTIF_MAX_ARGS]; -#define ARG_CS_SV_HA 1 // enabled on CSQC, SVQC, and Hudargs -#define ARG_CS_SV_DC 2 // enabled on CSQC, SVQC, and durcnt centerprint -#define ARG_CS_SV 3 // enabled on CSQC and SVQC -#define ARG_CS 4 // unique result to CSQC -#define ARG_SV 5 // unique result to SVQC -#define ARG_DC 6 // unique result to durcnt/centerprint +const float ARG_CS_SV_HA = 1; // enabled on CSQC, SVQC, and Hudargs +const float ARG_CS_SV_DC = 2; // enabled on CSQC, SVQC, and durcnt centerprint +const float ARG_CS_SV = 3; // enabled on CSQC and SVQC +const float ARG_CS = 4; // unique result to CSQC +const float ARG_SV = 5; // unique result to SVQC +const float ARG_DC = 6; // unique result to durcnt/centerprint // todo possible idea.... declare how many floats/strings each arg needs, and then dynamically increment the input // this way, we don't need to have duplicates like i.e. s2loc and s3loc? @@ -1040,7 +1136,7 @@ string arg_slot[NOTIF_MAX_ARGS]; 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, "missing_teams", notif_arg_missing_teams(f1)) \ ARG_CASE(ARG_CS, "pass_key", ((((tmp_s = getcommandkey("pass", "+use")) != "pass") && !(strstrofs(tmp_s, "not bound", 0) >= 0)) ? sprintf(CCR(_(" ^F1(Press %s)")), tmp_s) : "")) \ - ARG_CASE(ARG_CS, "frag_ping", notif_arg_frag_ping(TRUE, f2)) \ + 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)) : ""))*/ \ ARG_CASE(ARG_CS, "spree_cen", (autocvar_notification_show_sprees ? notif_arg_spree_cen(f1) : "")) \ @@ -1054,7 +1150,9 @@ string arg_slot[NOTIF_MAX_ARGS]; ARG_CASE(ARG_SV, "death_team", Team_ColoredFullName(f1)) \ ARG_CASE(ARG_CS, "death_team", Team_ColoredFullName(f1 - 1)) -#define NOTIF_HIT_MAX(count,funcname) if(sel_num == count) { backtrace(sprintf("%s: Hit maximum arguments!\n", funcname)); break; } +#define NOTIF_HIT_MAX(count,funcname) do { \ + if(sel_num == count) { backtrace(sprintf("%s: Hit maximum arguments!\n", funcname)); break; } \ +} while(0) #define NOTIF_HIT_UNKNOWN(token,funcname) { backtrace(sprintf("%s: Hit unknown token in selected string! '%s'\n", funcname, selected)); break; } #define KILL_SPREE_LIST \ @@ -1078,9 +1176,9 @@ string notif_arg_frag_ping(float newline, float fping) string notif_arg_frag_stats(float fhealth, float farmor, float fping) { if (!(fhealth < 1)) - return sprintf(CCR(_("\n(Health ^1%d^BG / Armor ^2%d^BG)%s")), fhealth, farmor, notif_arg_frag_ping(FALSE, fping)); + return sprintf(CCR(_("\n(Health ^1%d^BG / Armor ^2%d^BG)%s")), fhealth, farmor, notif_arg_frag_ping(false, fping)); else - return sprintf(CCR(_("\n(^F4Dead^BG)%s")), notif_arg_frag_ping(FALSE, fping)); + return sprintf(CCR(_("\n(^F4Dead^BG)%s")), notif_arg_frag_ping(false, fping)); } string notif_arg_missing_teams(float f1) @@ -1255,21 +1353,52 @@ string notif_arg_spree_inf(float type, string input, string player, float spree) // Initialization/Create Declarations // ==================================== +enum { + NO_CPID +, CPID_ASSAULT_ROLE +, CPID_ROUND +, CPID_CAMPCHECK +, CPID_CTF_CAPSHIELD +, CPID_CTF_LOWPRIO +, CPID_CTF_PASS +, CPID_STALEMATE +, CPID_NADES +, CPID_IDLING +, CPID_ITEM +, CPID_PREVENT_JOIN +, CPID_KEEPAWAY +, CPID_KEEPAWAY_WARN +, CPID_KEYHUNT +, CPID_KEYHUNT_OTHER +, CPID_LMS +, CPID_MISSING_TEAMS +, CPID_MISSING_PLAYERS +, CPID_INSTAGIB_FINDAMMO +, CPID_MOTD +, CPID_NIX +, CPID_ONSLAUGHT +, CPID_OVERTIME +, CPID_POWERUP +, CPID_RACE_FINISHLAP +, CPID_TEAMCHANGE +, CPID_TIMEOUT +// always last +, NOTIF_CPID_COUNT +}; // notification counts -#define NOTIF_FIRST 1 +const float NOTIF_FIRST = 1; float NOTIF_ANNCE_COUNT; float NOTIF_INFO_COUNT; float NOTIF_CENTER_COUNT; float NOTIF_MULTI_COUNT; float NOTIF_CHOICE_COUNT; -float NOTIF_CPID_COUNT; // notification limits -- INCREASE AS NECESSARY -#define NOTIF_ANNCE_MAX 100 -#define NOTIF_INFO_MAX 300 -#define NOTIF_CENTER_MAX 200 -#define NOTIF_MULTI_MAX 200 -#define NOTIF_CHOICE_MAX 20 +const float NOTIF_ANNCE_MAX = 100; +const float NOTIF_INFO_MAX = 300; +const float NOTIF_CENTER_MAX = 200; +const float NOTIF_MULTI_MAX = 200; +const float NOTIF_CHOICE_MAX = 20; // notification entities entity msg_annce_notifs[NOTIF_ANNCE_MAX]; @@ -1284,8 +1413,8 @@ entity msg_choice_notifs[NOTIF_CHOICE_MAX]; .float nent_type; .float nent_id; .string nent_name; -.float nent_stringcount; -.float nent_floatcount; +.int nent_stringcount; +.int nent_floatcount; // MSG_ANNCE entity values .float nent_channel; @@ -1338,7 +1467,7 @@ float notif_global_error; /* COMMON ======================== */ \ default, /* var_default */ \ ACVNN(name), /* var_cvar */ \ - MSG_ANNCE, /* typeid */ \ + MSG_ANNCE, /* typeId */ \ name, /* nameid */ \ strtoupper(#name), /* namestring */ \ NO_MSG, /* strnum */ \ @@ -1371,7 +1500,7 @@ float notif_global_error; #define MSG_INFO_NOTIF(default,name,strnum,flnum,args,hudargs,icon,normal,gentle) \ NOTIF_ADD_AUTOCVAR(name, default) \ - float name; \ + int name; \ void RegisterNotification_##name() \ { \ SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_INFO_COUNT) \ @@ -1380,7 +1509,7 @@ float notif_global_error; /* COMMON ======================== */ \ default, /* var_default */ \ ACVNN(name), /* var_cvar */ \ - MSG_INFO, /* typeid */ \ + MSG_INFO, /* typeId */ \ name, /* nameid */ \ strtoupper(#name), /* namestring */ \ strnum, /* strnum */ \ @@ -1414,17 +1543,15 @@ float notif_global_error; #define MSG_CENTER_NOTIF(default,name,strnum,flnum,args,cpid,durcnt,normal,gentle) \ NOTIF_ADD_AUTOCVAR(name, default) \ float name; \ - float cpid; \ void RegisterNotification_##name() \ { \ SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CENTER_COUNT) \ - SET_FIELD_COUNT(cpid, NOTIF_FIRST, NOTIF_CPID_COUNT) \ CHECK_MAX_COUNT(name, NOTIF_CENTER_MAX, NOTIF_CENTER_COUNT, "MSG_CENTER") \ Create_Notification_Entity( \ /* COMMON ======================== */ \ default, /* var_default */ \ ACVNN(name), /* var_cvar */ \ - MSG_CENTER, /* typeid */ \ + MSG_CENTER, /* typeId */ \ name, /* nameid */ \ strtoupper(#name), /* namestring */ \ strnum, /* strnum */ \ @@ -1466,7 +1593,7 @@ float notif_global_error; /* COMMON ======================== */ \ default, /* var_default */ \ ACVNN(name), /* var_cvar */ \ - MSG_MULTI, /* typeid */ \ + MSG_MULTI, /* typeId */ \ name, /* nameid */ \ strtoupper(#name), /* namestring */ \ NO_MSG, /* strnum */ \ @@ -1511,7 +1638,7 @@ float notif_global_error; /* COMMON ======================== */ \ default, /* var_default */ \ ACVNN(name), /* var_cvar */ \ - MSG_CHOICE, /* typeid */ \ + MSG_CHOICE, /* typeId */ \ name, /* nameid */ \ strtoupper(#name), /* namestring */ \ NO_MSG, /* strnum */ \ @@ -1544,7 +1671,7 @@ float notif_global_error; void RegisterNotifications_First() { - notif_global_error = FALSE; + notif_global_error = false; #ifdef SVQC #define dedi (server_is_dedicated ? "a dedicated " : "") @@ -1563,7 +1690,7 @@ void RegisterNotifications_First() #else if(autocvar_notification_version_mismatch_server_error) #endif - notif_global_error = TRUE; + notif_global_error = true; printf("^1NOTIFICATION VERSION MISMATCH: ^7program = %s, config = %d, code = %d.\n", PROGNAME, autocvar_notification_version, NOTIF_VERSION); @@ -1598,3 +1725,4 @@ ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotifications_Done); #undef MSG_CHOICE_NOTIF #undef NOTIF_ADD_AUTOCVAR +#endif \ No newline at end of file