Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
net_notice.qc
Go to the documentation of this file.
1#include "net_notice.qh"
2
3REGISTER_NET_TEMP(TE_CSQC_SVNOTICE)
4
5#ifdef SVQC
7{
9 if (argc <= 0) return;
10 for (int i = 0; i < argc; ++i)
12}
13
15{
16 // to-do: make sv_join_notices support per-entry times
17 if (autocvar_sv_join_notices == "") return;
19}
20
21void sv_notice_to(entity _to, string _notice, float _howlong, float _modal)
22{
23 msg_entity = _to;
24 WriteHeader(MSG_ONE, TE_CSQC_SVNOTICE);
25 WriteString(MSG_ONE, _notice);
26 WriteLong(MSG_ONE, _howlong);
27 WriteByte(MSG_ONE, _modal);
28}
29
30void sv_notice_toall(string _notice, float _howlong, float _modal)
31{
32 FOREACH_CLIENT(IS_REAL_CLIENT(it), sv_notice_to(it, _notice, _howlong, _modal));
33}
34
35#endif // SVQC
36
37#ifdef CSQC
38NET_HANDLE(TE_CSQC_SVNOTICE, bool isNew)
39{
41 return true;
42}
45{
46 entity _notice = new_pure(sv_notice);
47 _notice.netname = strzone(ReadString());
48 _notice.alpha = ReadLong() + time;
49 _notice.skin = ReadByte();
50 if(!cl_notices)
52 LL_PUSH(cl_notices, _notice);
53}
54
56{
57 if (!cl_notices)
58 return;
59
60 bool flag = false;
61 LL_EACH(cl_notices, it.alpha > time, { flag = true; break; });
62 if (!flag)
63 {
65 return;
66 }
67
68 const int M1 = 30;
69 const int M2 = 10;
70
71 vector v1 = '1 1 0' * M1;
72 vector v2 = '0 0 0';
73 v2.x = vid_conwidth - (2 * M1);
74 v2.y = vid_conheight - (2 * M1);
75 drawfill(v1, v2, '0 0 0', 0.5, DRAWFLAG_NORMAL);
76
77 v1 = '1 1 0' * (M1 + M2);
78 v2.x = vid_conwidth - (2 * (M1 + M2));
79 v2.y = vid_conheight - (2 * (M1 + M2));
80 drawfill(v1, v2, '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);
81
82 vector v3 = v1 + '10 10 0';
83 #define OUT(s, z) MACRO_BEGIN \
84 drawcolorcodedstring(v3, s, '1 1 0' * z, 1, DRAWFLAG_NORMAL); \
85 v3.y += z + 4; \
86 MACRO_END
87
88 float cur_time = 0;
89 float time_width = 48;
90 OUT(_("^1Server notices:"), 32);
91 LL_EACH(cl_notices, it.alpha > time, {
92 if(it.alpha - cur_time > 0.1)
93 {
94 cur_time = it.alpha;
95 string s = sprintf("^3%d", ceil(cur_time - time));
96 drawcolorcodedstring(v3 + eX * 0.5 * (time_width - stringwidth(s, true, '1 1 0' * 16)), s, '1 1 0' * 16, 1, DRAWFLAG_NORMAL);
97 v3.x = v1.x + 10 + time_width;
98 }
99 OUT(it.netname, 16);
100 });
101 #undef OUT
102}
103
104#endif // CSQC
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
#define ReadString
#define drawfill(position, size, rgb, alpha, flag)
Definition draw.qh:36
const float DRAWFLAG_NORMAL
float time
void defer(entity this, float fdelay, void(entity) func)
Execute func() after time + fdelay.
Definition defer.qh:29
#define tokenizebyseparator
noref float vid_conwidth
Definition draw.qh:8
noref float vid_conheight
Definition draw.qh:9
#define NET_HANDLE(id, param)
Definition net.qh:15
#define WriteHeader(to, id)
Definition net.qh:221
int ReadByte()
#define REGISTER_NET_TEMP(id)
Definition net.qh:28
#define LL_DELETE(...)
Definition linkedlist.qh:63
#define LL_NEW()
Definition linkedlist.qh:14
#define LL_EACH(list, cond, body)
Definition linkedlist.qh:73
entity LL_PUSH(LinkedList this, entity e)
Push to tail.
Definition linkedlist.qh:21
float MSG_ONE
Definition menudefs.qc:56
void WriteLong(float data, float dest, float desto)
void WriteString(string data, float dest, float desto)
void WriteByte(float data, float dest, float desto)
string strzone(string s)
string argv(float n)
void sv_notice_to(entity _to, string _notice, float _howlong, float _modal)
Definition net_notice.qc:21
void sv_notice_join_think(entity this)
Definition net_notice.qc:6
entity cl_notices
Definition net_notice.qc:43
#define OUT(s, z)
void sv_notice_join(entity _to)
Definition net_notice.qc:14
void cl_notice_read()
Definition net_notice.qc:44
void cl_notice_run()
Definition net_notice.qc:55
void sv_notice_toall(string _notice, float _howlong, float _modal)
Definition net_notice.qc:30
float autocvar_sv_join_notices_time
Definition net_notice.qh:5
string autocvar_sv_join_notices
Definition net_notice.qh:4
#define new_pure(class)
purely logical entities (not linked to the area grid)
Definition oo.qh:67
entity msg_entity
Definition progsdefs.qc:63
vector
Definition self.qh:92
#define IS_REAL_CLIENT(v)
Definition utils.qh:17
#define FOREACH_CLIENT(cond, body)
Definition utils.qh:50