#include "all.qh"
+
#if defined(CSQC)
#include <client/announcer.qh>
#elif defined(MENUQC)
#include <common/constants.qh>
#include <common/net_linked.qh>
#include <common/teams.qh>
- #include <server/autocvars.qh>
- #include <server/constants.qh>
- #include <server/defs.qh>
+ #include <server/command/getreplies.qh>
#include <server/mutators/_mod.qh>
+ #include <server/world.qh>
#endif
// ================================================
bool Notification_ShouldSend(NOTIF broadcast, entity to_client, entity other_client)
{
+ if(!IS_REAL_CLIENT(to_client))
+ return false;
+
switch (broadcast)
{
case NOTIF_ONE:
#ifdef SVQC
Kill_Notification(NOTIF_ALL, NULL, MSG_Null, CPID_Null);
#else
- reset_centerprint_messages();
+ centerprint_KillAll();
#endif
// kill all real notification entities
// used by MSG_CHOICE to build list of choices
#ifdef SVQC
-void Notification_GetCvars(entity this)
+void Notification_GetCvars(entity this, entity store)
{
- FOREACH(Notifications, it.nent_type == MSG_CHOICE, {
+ FOREACH(Notifications, it.nent_type == MSG_CHOICE && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), {
GetCvars_handleFloat(
this,
- CS(this),
+ store,
get_cvars_s,
get_cvars_f,
msg_choice_choices[it.nent_choice_idx],
// notification variables for mutators or game modes or such and then
// regenerate the notifications.cfg file from the new code.
- NOTIF_WRITE("// ********************************************** //\n");
- NOTIF_WRITE("// ** WARNING - DO NOT MANUALLY EDIT THIS FILE ** //\n");
- NOTIF_WRITE("// ** ** //\n");
- NOTIF_WRITE("// ** This file is automatically generated ** //\n");
- NOTIF_WRITE("// ** by code with the command 'dumpnotifs'. ** //\n");
- NOTIF_WRITE("// ** ** //\n");
- NOTIF_WRITE("// ** If you add a new notification, please ** //\n");
- NOTIF_WRITE("// ** regenerate this file with that command ** //\n");
- NOTIF_WRITE("// ** making sure that the output matches ** //\n");
- NOTIF_WRITE("// ** with the lists and defaults in code. ** //\n");
- NOTIF_WRITE("// ** ** //\n");
- NOTIF_WRITE("// ********************************************** //\n");
+ NOTIF_WRITE(
+ "// ********************************************** //\n"
+ "// ** WARNING - DO NOT MANUALLY EDIT THIS FILE ** //\n"
+ "// ** ** //\n"
+ "// ** This file is automatically generated ** //\n"
+ "// ** by code with the command 'dumpnotifs'. ** //\n"
+ "// ** ** //\n"
+ "// ** If you add a new notification, please ** //\n"
+ "// ** regenerate this file with that command ** //\n"
+ "// ** making sure that the output matches ** //\n"
+ "// ** with the lists and defaults in code. ** //\n"
+ "// ** ** //\n"
+ "// ********************************************** //\n");
// These notifications will also append their string as a comment...
// This is not necessary, and does not matter if they vary between config versions,
// it is just a semi-helpful tool for those who want to manually change their user settings.
- int NOTIF_ANNCE_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_ANNCE, { ++NOTIF_ANNCE_COUNT; });
+ int NOTIF_ANNCE_COUNT = 0;
+ int NOTIF_INFO_COUNT = 0;
+ int NOTIF_CENTER_COUNT = 0;
+ int NOTIF_MULTI_COUNT = 0;
+ int NOTIF_CHOICE_COUNT = 0;
+ FOREACH(Notifications, true, {
+ switch (it.nent_type)
+ {
+ case MSG_ANNCE: ++NOTIF_ANNCE_COUNT; break;
+ case MSG_INFO: ++NOTIF_INFO_COUNT; break;
+ case MSG_CENTER: ++NOTIF_CENTER_COUNT; break;
+ case MSG_MULTI: ++NOTIF_MULTI_COUNT; break;
+ case MSG_CHOICE: ++NOTIF_CHOICE_COUNT; break;
+ }
+ });
+
NOTIF_WRITE(sprintf("\n// MSG_ANNCE notifications (count = %d):\n", NOTIF_ANNCE_COUNT));
FOREACH(Notifications, it.nent_type == MSG_ANNCE && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), {
NOTIF_WRITE_ENTITY(it,
);
});
- int NOTIF_INFO_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_INFO, { ++NOTIF_INFO_COUNT; });
NOTIF_WRITE(sprintf("\n// MSG_INFO notifications (count = %d):\n", NOTIF_INFO_COUNT));
FOREACH(Notifications, it.nent_type == MSG_INFO && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), {
NOTIF_WRITE_ENTITY(it,
);
});
- int NOTIF_CENTER_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_CENTER, { ++NOTIF_CENTER_COUNT; });
NOTIF_WRITE(sprintf("\n// MSG_CENTER notifications (count = %d):\n", NOTIF_CENTER_COUNT));
FOREACH(Notifications, it.nent_type == MSG_CENTER && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), {
NOTIF_WRITE_ENTITY(it,
);
});
- int NOTIF_MULTI_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_MULTI, { ++NOTIF_MULTI_COUNT; });
NOTIF_WRITE(sprintf("\n// MSG_MULTI notifications (count = %d):\n", NOTIF_MULTI_COUNT));
FOREACH(Notifications, it.nent_type == MSG_MULTI && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), {
NOTIF_WRITE_ENTITY(it,
);
});
- int NOTIF_CHOICE_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_CHOICE, { ++NOTIF_CHOICE_COUNT; });
NOTIF_WRITE(sprintf("\n// MSG_CHOICE notifications (count = %d):\n", NOTIF_CHOICE_COUNT));
FOREACH(Notifications, it.nent_type == MSG_CHOICE && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), {
NOTIF_WRITE_ENTITY_CHOICE(it,
HUD_Notify_Push(icon, arg_slot[0], arg_slot[1]);
}
-void Local_Notification_centerprint_generic(
+void Local_Notification_centerprint_Add(
string input, string durcnt,
CPID cpid, float f1, float f2)
{
for (int sel_num = 0; (durcnt != ""); )
{
string selected = car(durcnt); durcnt = cdr(durcnt);
- NOTIF_HIT_MAX(NOTIF_MAX_DURCNT, "Local_Notification_centerprint_generic");
+ NOTIF_HIT_MAX(NOTIF_MAX_DURCNT, "Local_Notification_centerprint_Add");
switch (strtolower(selected))
{
#define ARG_CASE_ARG_CS_SV_HA(selected, result)
default:
{
if (/* wtf */ ftos(stof(selected)) != "") { arg_slot[sel_num++] = selected; }
- else { NOTIF_HIT_UNKNOWN(NOTIF_MAX_DURCNT, "Local_Notification_centerprint_generic") }
+ else { NOTIF_HIT_UNKNOWN(NOTIF_MAX_DURCNT, "Local_Notification_centerprint_Add") }
break;
}
}
}
#ifdef NOTIFICATIONS_DEBUG
Debug_Notification(sprintf(
- "Local_Notification_centerprint_generic('%s^7', '%s', %d, %d, %d, %d);\n",
+ "Local_Notification_centerprint_Add('%s^7', '%s', %d, %d, %d, %d);\n",
MakeConsoleSafe(input),
durcnt,
f1, f2,
stof(arg_slot[1])
));
#endif
- centerprint_generic(ORDINAL(cpid), input, stof(arg_slot[0]), stof(arg_slot[1]));
+ centerprint_Add(ORDINAL(cpid), input, stof(arg_slot[0]), stof(arg_slot[1]));
}
#endif
#ifdef CSQC
case MSG_CENTER:
{
- Local_Notification_centerprint_generic(
+ Local_Notification_centerprint_Add(
Local_Notification_sprintf(
notif.nent_string,
notif.nent_args,
int _net_name = net_name;
CPID net_name = ENUMCAST(CPID, _net_name);
if (net_name == CPID_Null) {
- // kill all
- reset_centerprint_messages();
+ centerprint_KillAll();
} else {
- // kill group
- centerprint_generic(ORDINAL(net_name), "", 0, 0);
+ centerprint_Kill(ORDINAL(net_name));// kill group
}
return;
}
MSG net_type, Notification net_name,
...count)
{
- if (broadcast != NOTIF_ALL && broadcast != NOTIF_ALL_EXCEPT && !IS_REAL_CLIENT(client)) return;
+ if (broadcast == NOTIF_ONE_ONLY && !IS_REAL_CLIENT(client)) return;
entity notif = net_name;
string parms = sprintf("%s, '%s', %s, %s",
Get_Notif_BroadcastName(broadcast),
#define RECURSE_FROM_CHOICE(ent,action) MACRO_BEGIN \
if (notif.nent_challow_var && (warmup_stage || (notif.nent_challow_var == 2))) { \
- switch (CS(ent).msg_choice_choices[net_name.nent_choice_idx]) \
+ switch (CS_CVAR(ent).msg_choice_choices[net_name.nent_choice_idx]) \
{ \
case 1: found_choice = notif.nent_optiona; break; \
case 2: found_choice = notif.nent_optionb; break; \
}
default:
{
- FOREACH_CLIENT(IS_REAL_CLIENT(it) && Notification_ShouldSend(broadcast, it, client), {
+ FOREACH_CLIENT(Notification_ShouldSend(broadcast, it, client), {
RECURSE_FROM_CHOICE(it, continue);
});
break;