make sv_join_notices acctually work too
authorJakob MG <jakob_mg@hotmail.com>
Tue, 21 Feb 2012 03:35:11 +0000 (04:35 +0100)
committerJakob MG <jakob_mg@hotmail.com>
Tue, 21 Feb 2012 03:35:11 +0000 (04:35 +0100)
qcsrc/common/net_notice.qc
qcsrc/common/net_notice.qh
qcsrc/server/cl_client.qc

index c28649b..a1d8e59 100644 (file)
-#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
index f7ba8f0..d94f1d9 100644 (file)
@@ -1,12 +1,13 @@
-#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
index 5fc0859..0ba761f 100644 (file)
@@ -928,18 +928,6 @@ void PutClientInServer (void)
        } else if(self.classname == "observer" || (g_ca && !allowed_to_spawn)) {
                PutObserverInServer ();
        }
-    
-    // to-do: make sv_join_notices support per-entry times
-    if(!autocvar_sv_join_notices || autocvar_sv_join_notices == "")  
-        return;
-    
-    float argc = tokenizebyseparator(autocvar_sv_join_notices, "|");
-    if(argc > 0)
-    {
-        float i; 
-        for(i = argc - 1; i >= 0; --i)    
-            sv_notice_to(self, argv(i), autocvar_sv_join_notices_time, FALSE);
-    }
 
        //if(g_ctf)
        //      ctf_playerchanged();
@@ -1609,8 +1597,12 @@ void ClientConnect (void)
        CSQCMODEL_AUTOINIT();
 
        self.model_randomizer = random();
+    
+    if(clienttype(self) != CLIENTTYPE_REAL)
+        return;
+        
+    sv_notice_join();
 }
-
 /*
 =============
 ClientDisconnect