]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/net_notice.qc
fa98b2feba5307dda7fe6ee1d921d0a9e439f0dd
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / net_notice.qc
1 #include "net_notice.qh"
2
3 REGISTER_NET_TEMP(TE_CSQC_SVNOTICE)
4
5 #ifdef SVQC
6 void sv_notice_join_think()
7 {
8     SELFPARAM();
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);
13 }
14
15 void sv_notice_join(entity _to)
16 {
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);
20 }
21
22 void sv_notice_to(entity _to, string _notice, float _howlong, float _modal)
23 {
24         msg_entity = _to;
25         WriteHeader(MSG_ONE, TE_CSQC_SVNOTICE);
26         WriteString(MSG_ONE, _notice);
27         WriteLong(MSG_ONE, _howlong);
28         WriteByte(MSG_ONE, _modal);
29 }
30
31 void sv_notice_toall(string _notice, float _howlong, float _modal)
32 {
33     FOREACH_CLIENT(IS_REAL_CLIENT(it), LAMBDA(sv_notice_to(it, _notice, _howlong, _modal)));
34 }
35
36 #endif // SVQC
37
38 #ifdef CSQC
39 NET_HANDLE(TE_CSQC_SVNOTICE, bool isNew)
40 {
41         cl_notice_read();
42         return true;
43 }
44 entity cl_notices;
45 STATIC_INIT(cl_notice)
46 {
47     cl_notices = LL_NEW();
48 }
49 void cl_notice_read()
50 {
51     entity _notice = new_pure(sv_notice);
52     _notice.netname = strzone(ReadString());
53     _notice.alpha = ReadLong() + time;
54     _notice.skin = ReadByte();
55     LL_PUSH(cl_notices, _notice);
56 }
57
58 void cl_notice_run()
59 {
60     bool flag = false;
61     LL_EACH(cl_notices, it.alpha > time, LAMBDA(flag = true; break));
62     if (!flag) return;
63     const int M1 = 30;
64     const int M2 = 10;
65
66     vector v1 = '1 1 0' * M1;
67     vector v2 = '0 0 0';
68     v2.x = vid_conwidth - (2 * M1);
69     v2.y = vid_conheight - (2 * M1);
70     drawfill(v1, v2, '0 0 0', 0.5, DRAWFLAG_NORMAL);
71
72     v1 = '1 1 0' * (M1 + M2);
73     v2.x = vid_conwidth - (2 * (M1 + M2));
74     v2.y = vid_conheight - (2 * (M1 + M2));
75     drawfill(v1, v2, '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);
76
77     vector v3 = v1 + '10 10 0';
78     #define OUT(s, z) MACRO_BEGIN { drawcolorcodedstring(v3, s, '1 1 0' * z, 1, DRAWFLAG_NORMAL); v3.y += z + 4; } MACRO_END
79
80     OUT(_("^1Server notices:"), 32);
81     LL_EACH(cl_notices, it.alpha > time, LAMBDA(
82         string s = sprintf(_("^7%s (^3%d sec left)"), it.netname , rint(it.alpha - time));
83         OUT(s, 16);
84     ));
85     #undef OUT
86 }
87
88 #endif // CSQC