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)
34 FOR_EACH_REALCLIENT(_head)
35 sv_notice_to(_head, _notice, _howlong, _modal);
42 NET_HANDLE(TE_CSQC_SVNOTICE, bool isNew)
48 STATIC_INIT(cl_notice)
50 cl_notices = LL_NEW();
54 entity _notice = new(sv_notice);
56 _notice.netname = strzone(ReadString());
57 _notice.alpha = ReadLong() + time;
58 _notice.skin = ReadByte();
59 LL_PUSH(cl_notices, _notice);
65 LL_EACH(cl_notices, it.alpha > time, LAMBDA(flag = true; break));
70 vector v1 = '1 1 0' * M1;
72 v2.x = vid_conwidth - (2 * M1);
73 v2.y = vid_conheight - (2 * M1);
74 drawfill(v1, v2, '0 0 0', 0.5, DRAWFLAG_NORMAL);
76 v1 = '1 1 0' * (M1 + M2);
77 v2.x = vid_conwidth - (2 * (M1 + M2));
78 v2.y = vid_conheight - (2 * (M1 + M2));
79 drawfill(v1, v2, '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);
81 vector v3 = v1 + '10 10 0';
82 #define OUT(s, z) do { drawcolorcodedstring(v3, s, '1 1 0' * z, 1, DRAWFLAG_NORMAL); v3.y += z + 4; } while (0)
84 OUT(_("^1Server notices:"), 32);
85 LL_EACH(cl_notices, it.alpha > time, LAMBDA(
86 string s = sprintf(_("^7%s (^3%d sec left)"), it.netname , rint(it.alpha - time));