]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/net_notice.qc
Merge branch 'master' into Mario/showspecs
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / net_notice.qc
1 #include "net_notice.qh"
2
3 #ifdef SVQC
4 void sv_notice_join_think()
5 {
6     //NextLevel();
7     float argc = tokenizebyseparator(autocvar_sv_join_notices, "|");
8     if(argc > 0)
9     {
10         float i;
11         for(i = argc - 1; i >= 0; --i)
12             sv_notice_to(self.owner, argv(i), autocvar_sv_join_notices_time, false);
13     }
14     remove(self);
15 }
16
17 void sv_notice_join()
18 {
19     // to-do: make sv_join_notices support per-entry times
20     if(autocvar_sv_join_notices == "")
21         return;
22
23     entity n = spawn();
24     n.owner = self;
25     n.think = sv_notice_join_think;
26     n.nextthink = time + 1;
27 }
28
29 void sv_notice_to(entity _to, string _notice, float _howlong, float _modal)
30 {
31         msg_entity = _to;
32         WriteByte(MSG_ONE, SVC_TEMPENTITY);
33         WriteByte(MSG_ONE, TE_CSQC_SVNOTICE);
34         WriteString(MSG_ONE, _notice);
35         WriteLong(MSG_ONE, _howlong);
36         WriteByte(MSG_ONE, _modal);
37 }
38
39 void sv_notice_toall(string _notice, float _howlong, float _modal)
40 {
41     entity _head;
42     FOR_EACH_REALCLIENT(_head)
43         sv_notice_to(_head, _notice, _howlong, _modal);
44
45 }
46
47 #endif // SVQC
48
49 #ifdef CSQC
50 void SUB_Remove()
51 { remove(self); }
52
53 void cl_notice_read()
54 {
55     entity _notice;
56     //float _done;
57     //float _modal;
58     _notice = spawn();
59     _notice.classname = "sv_notice";
60     _notice.netname = strzone(ReadString());
61     _notice.alpha = ReadLong() + time;
62     _notice.skin = ReadByte();
63 }
64
65 float cl_notice_run()
66 {
67     entity _notes;
68     string _notice;
69     float m = false;
70
71     _notes = findchain(classname, "sv_notice");
72     if(!_notes)
73         return false;
74     #define M1 30
75     #define M2 10
76
77     vector v1, v2 = '0 0 0', v3;
78     v1 = '1 1 0' * M1;
79     v2_x = vid_conwidth - (2 * M1);
80     v2_y = vid_conheight - (2 * M1);
81
82     drawfill(v1, v2, '0 0 0', 0.5, DRAWFLAG_NORMAL);
83     v1 = '1 1 0' * (M1 + M2);
84     v2_x = vid_conwidth - (2 * (M1 + M2));
85     v2_y = vid_conheight - (2 * (M1 + M2));
86     drawfill(v1, v2, '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);
87     v3 = v1 + '10 10 0';
88
89     #define OUT(s,z) drawcolorcodedstring(v3, s, '1 1 0' * z, 1, DRAWFLAG_NORMAL); v3_y += z + 4
90
91     OUT(_("^1Server notices:"), 32);
92
93     //drawcolorcodedstring(v1 + '5 5 0', "^1Server notices:", '32 32 0', 1, DRAWFLAG_NORMAL);
94     while(_notes)
95     {
96
97         _notice = sprintf(_("^7%s (^3%d sec left)"), _notes.netname , rint(_notes.alpha - time));
98         OUT(_notice, 16);
99
100         if(_notes.skin)
101             m = true;
102
103         if(_notes.alpha <= time)
104         {
105             _notes.think = SUB_Remove;
106             _notes.nextthink = time;
107         }
108
109         _notes = _notes.chain;
110     }
111
112     #undef OUT
113     #undef M1
114     #undef M2
115
116     return m;
117 }
118
119 #endif // CSQC