-#ifdef SVQC\r
-\r
-void sv_notice_to(entity _to, string _notice, float _howlong, float _modal)\r
-{\r
+#ifdef SVQC
+void sv_notice_join_think()
+{
+ //NextLevel();
+ float argc = tokenizebyseparator(autocvar_sv_join_notices, "|");
+ if(argc > 0)
+ {
+ float i;
+ for(i = argc - 1; i >= 0; --i)
+ sv_notice_to(self.owner, argv(i), autocvar_sv_join_notices_time, FALSE);
+ }
+ remove(self);
+}
+
+void sv_notice_join()
+{
+ // to-do: make sv_join_notices support per-entry times
+ if(!autocvar_sv_join_notices || autocvar_sv_join_notices == "")
+ return;
+
+ entity n = spawn();
+ n.owner = self;
+ n.think = sv_notice_join_think;
+ n.nextthink = time + 1;
+}
+
+void sv_notice_to(entity _to, string _notice, float _howlong, float _modal)
+{
msg_entity = _to;
WriteByte(MSG_ONE, SVC_TEMPENTITY);
WriteByte(MSG_ONE, TE_CSQC_SVNOTICE);
- WriteString(MSG_ONE, _notice);\r
- WriteLong(MSG_ONE, _howlong);\r
- WriteByte(MSG_ONE, _modal);\r
-}\r
-\r
-void sv_notice_toall(string _notice, float _howlong, float _modal)\r
-{\r
- entity _head;\r
- FOR_EACH_REALCLIENT(_head)\r
- sv_notice_to(_head, _notice, _howlong, _modal);\r
- \r
-}\r
-\r
-#endif // SVQC\r
-\r
-#ifdef CSQC\r
+ WriteString(MSG_ONE, _notice);
+ WriteLong(MSG_ONE, _howlong);
+ WriteByte(MSG_ONE, _modal);
+}
+
+void sv_notice_toall(string _notice, float _howlong, float _modal)
+{
+ entity _head;
+ FOR_EACH_REALCLIENT(_head)
+ sv_notice_to(_head, _notice, _howlong, _modal);
+
+}
+
+#endif // SVQC
+
+#ifdef CSQC
void SUB_Remove()
{ remove(self); }
-\r
-void cl_notice_read()\r
-{\r
- entity _notice;\r
- float _done;\r
- float _modal;\r
- _notice = spawn();\r
- _notice.classname = "sv_notice";\r
- _notice.netname = strzone(ReadString());\r
- _notice.alpha = ReadLong() + time;\r
- _notice.skin = ReadByte();\r
-}\r
-\r
-float cl_notice_run()\r
-{\r
- entity _notes;\r
- string _notice;\r
- float c, m = FALSE;\r
- \r
- _notes = findchain(classname, "sv_notice");\r
- if(!_notes)\r
- return FALSE;\r
- #define M1 30\r
- #define M2 10\r
- \r
- vector v1, v2, v3;\r
- v1 = '1 1 0' * M1;\r
- v2_x = vid_conwidth - (2 * M1);\r
- v2_y = vid_conheight - (2 * M1);\r
- \r
- drawfill(v1, v2, '0 0 0', 0.5, DRAWFLAG_NORMAL);\r
- v1 = '1 1 0' * (M1 + M2);\r
- v2_x = vid_conwidth - (2 * (M1 + M2));\r
- v2_y = vid_conheight - (2 * (M1 + M2));\r
- drawfill(v1, v2, '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);\r
- v3 = v1 + '10 10 0';\r
- \r
- #define OUT(s,z) drawcolorcodedstring(v3, s, '1 1 0' * z, 1, DRAWFLAG_NORMAL); v3_y += z + 4\r
- \r
- OUT("^1Server notices:", 32);\r
- \r
- //drawcolorcodedstring(v1 + '5 5 0', "^1Server notices:", '32 32 0', 1, DRAWFLAG_NORMAL);\r
- while(_notes)\r
- {\r
- \r
- _notice = sprintf("^7%s (^3%d sec left)", _notes.netname , rint(_notes.alpha - time));\r
- OUT(_notice, 16);\r
-\r
- if(_notes.skin) \r
- m = TRUE;\r
- \r
- if(_notes.alpha <= time)\r
- {\r
- _notes.think = SUB_Remove;\r
- _notes.nextthink = time;\r
- }\r
- \r
- _notes = _notes.chain; \r
- }\r
- \r
- #undef OUT\r
- #undef M1\r
- #undef M2\r
- \r
- return m;\r
-}\r
-\r
-#endif // CSQC\r
+
+void cl_notice_read()
+{
+ entity _notice;
+ float _done;
+ float _modal;
+ _notice = spawn();
+ _notice.classname = "sv_notice";
+ _notice.netname = strzone(ReadString());
+ _notice.alpha = ReadLong() + time;
+ _notice.skin = ReadByte();
+}
+
+float cl_notice_run()
+{
+ entity _notes;
+ string _notice;
+ float c, m = FALSE;
+
+ _notes = findchain(classname, "sv_notice");
+ if(!_notes)
+ return FALSE;
+ #define M1 30
+ #define M2 10
+
+ vector v1, v2, v3;
+ v1 = '1 1 0' * M1;
+ v2_x = vid_conwidth - (2 * M1);
+ v2_y = vid_conheight - (2 * M1);
+
+ drawfill(v1, v2, '0 0 0', 0.5, DRAWFLAG_NORMAL);
+ v1 = '1 1 0' * (M1 + M2);
+ v2_x = vid_conwidth - (2 * (M1 + M2));
+ v2_y = vid_conheight - (2 * (M1 + M2));
+ drawfill(v1, v2, '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);
+ v3 = v1 + '10 10 0';
+
+ #define OUT(s,z) drawcolorcodedstring(v3, s, '1 1 0' * z, 1, DRAWFLAG_NORMAL); v3_y += z + 4
+
+ OUT("^1Server notices:", 32);
+
+ //drawcolorcodedstring(v1 + '5 5 0', "^1Server notices:", '32 32 0', 1, DRAWFLAG_NORMAL);
+ while(_notes)
+ {
+
+ _notice = sprintf("^7%s (^3%d sec left)", _notes.netname , rint(_notes.alpha - time));
+ OUT(_notice, 16);
+
+ if(_notes.skin)
+ m = TRUE;
+
+ if(_notes.alpha <= time)
+ {
+ _notes.think = SUB_Remove;
+ _notes.nextthink = time;
+ }
+
+ _notes = _notes.chain;
+ }
+
+ #undef OUT
+ #undef M1
+ #undef M2
+
+ return m;
+}
+
+#endif // CSQC
-#ifdef CSQC\r
-void cl_notice_read();\r
-void sv_notice_to(entity _to, string _notice, float _howlong, float _modal);\r
-#endif\r
-\r
-#ifdef SVQC\r
-string autocvar_sv_join_notices;\r
-float autocvar_sv_join_notices_time;\r
-\r
-void sv_notice_to(entity _to, string _notice, float _howlong, float _modal);\r
-void sv_notice_toall(string _notice, float _howlong, float _modal);\r
-#endif\r
+#ifdef CSQC
+void cl_notice_read();
+void sv_notice_to(entity _to, string _notice, float _howlong, float _modal);
+#endif
+
+#ifdef SVQC
+string autocvar_sv_join_notices;
+float autocvar_sv_join_notices_time;
+
+void sv_notice_to(entity _to, string _notice, float _howlong, float _modal);
+void sv_notice_toall(string _notice, float _howlong, float _modal);
+void sv_notice_join();
+#endif