1 #include "net_notice.qh"
3 REGISTER_NET_TEMP(TE_CSQC_SVNOTICE)
6 void sv_notice_join_think()
9 int argc = tokenizebyseparator(autocvar_sv_join_notices, "|");
10 if (argc <= 0) return;
11 for (int i = 0; i < argc; ++i)
12 sv_notice_to(this, argv(i), autocvar_sv_join_notices_time, false);
15 void sv_notice_join(entity _to)
17 // to-do: make sv_join_notices support per-entry times
18 if (autocvar_sv_join_notices == "") return;
19 defer(_to, 1, sv_notice_join_think);
22 void sv_notice_to(entity _to, string _notice, float _howlong, float _modal)
25 WriteHeader(MSG_ONE, TE_CSQC_SVNOTICE);
26 WriteString(MSG_ONE, _notice);
27 WriteLong(MSG_ONE, _howlong);
28 WriteByte(MSG_ONE, _modal);
31 void sv_notice_toall(string _notice, float _howlong, float _modal)
33 FOREACH_CLIENT(IS_REAL_CLIENT(it), LAMBDA(sv_notice_to(it, _notice, _howlong, _modal)));
39 NET_HANDLE(TE_CSQC_SVNOTICE, bool isNew)
45 STATIC_INIT(cl_notice)
47 cl_notices = LL_NEW();
51 entity _notice = new(sv_notice);
53 _notice.netname = strzone(ReadString());
54 _notice.alpha = ReadLong() + time;
55 _notice.skin = ReadByte();
56 LL_PUSH(cl_notices, _notice);
62 LL_EACH(cl_notices, it.alpha > time, LAMBDA(flag = true; break));
67 vector v1 = '1 1 0' * M1;
69 v2.x = vid_conwidth - (2 * M1);
70 v2.y = vid_conheight - (2 * M1);
71 drawfill(v1, v2, '0 0 0', 0.5, DRAWFLAG_NORMAL);
73 v1 = '1 1 0' * (M1 + M2);
74 v2.x = vid_conwidth - (2 * (M1 + M2));
75 v2.y = vid_conheight - (2 * (M1 + M2));
76 drawfill(v1, v2, '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);
78 vector v3 = v1 + '10 10 0';
79 #define OUT(s, z) MACRO_BEGIN { drawcolorcodedstring(v3, s, '1 1 0' * z, 1, DRAWFLAG_NORMAL); v3.y += z + 4; } MACRO_END
81 OUT(_("^1Server notices:"), 32);
82 LL_EACH(cl_notices, it.alpha > time, LAMBDA(
83 string s = sprintf(_("^7%s (^3%d sec left)"), it.netname , rint(it.alpha - time));