# HG changeset patch
# User unc0rr
# Date 1386879362 -14400
# Node ID 0da6ba2f1f93184570e3eb38de67aa64e9817559
# Parent  e33ee5ef5d9d11785975f2232dfd10b430b55a82
 - /greeting command for room greeting message
 - Remove some obsolete stuff, some fixes to special rooms

diff -r e33ee5ef5d9d -r 0da6ba2f1f93 gameServer/CoreTypes.hs
--- a/gameServer/CoreTypes.hs	Fri Dec 13 00:00:49 2013 +0400
+++ b/gameServer/CoreTypes.hs	Fri Dec 13 00:16:02 2013 +0400
@@ -182,6 +182,7 @@
         isRestrictedTeams :: Bool,
         isRegisteredOnly :: Bool,
         isSpecial :: Bool,
+        greeting :: B.ByteString,
         roomBansList :: ![B.ByteString],
         mapParams :: Map.Map B.ByteString B.ByteString,
         params :: Map.Map B.ByteString [B.ByteString]
@@ -202,6 +203,7 @@
         False
         False
         False
+        ""
         []
         (
             Map.fromList $ Prelude.zip
diff -r e33ee5ef5d9d -r 0da6ba2f1f93 gameServer/HWProtoCore.hs
--- a/gameServer/HWProtoCore.hs	Fri Dec 13 00:00:49 2013 +0400
+++ b/gameServer/HWProtoCore.hs	Fri Dec 13 00:16:02 2013 +0400
@@ -53,6 +53,7 @@
         h "WATCH" f = return [QueryReplay f]
         h "FIX" _ = handleCmd ["FIX"]
         h "UNFIX" _ = handleCmd ["UNFIX"]
+        h "GREETING" msg = handleCmd ["GREETING", msg]
         h c p = return [Warning $ B.concat ["Unknown cmd: /", c, p]]
 
 handleCmd cmd = do
diff -r e33ee5ef5d9d -r 0da6ba2f1f93 gameServer/HWProtoInRoomState.hs
--- a/gameServer/HWProtoInRoomState.hs	Fri Dec 13 00:00:49 2013 +0400
+++ b/gameServer/HWProtoInRoomState.hs	Fri Dec 13 00:16:02 2013 +0400
@@ -378,6 +378,10 @@
     cl <- thisClient
     return [ModifyRoom (\r -> r{isSpecial = False}) | isAdministrator cl]
 
+handleCmd_inRoom ["GREETING", msg] = do
+    cl <- thisClient
+    rm <- thisRoom
+    return [ModifyRoom (\r -> r{greeting = msg}) | isAdministrator cl || (isMaster cl && (not $ isSpecial rm))]
 
 handleCmd_inRoom ["LIST"] = return [] -- for old clients (<= 0.9.17)
 
diff -r e33ee5ef5d9d -r 0da6ba2f1f93 gameServer/HWProtoLobbyState.hs
--- a/gameServer/HWProtoLobbyState.hs	Fri Dec 13 00:00:49 2013 +0400
+++ b/gameServer/HWProtoLobbyState.hs	Fri Dec 13 00:16:02 2013 +0400
@@ -79,18 +79,17 @@
             (
                 MoveToRoom jRI
                 : ModifyClient (\c -> c{isJoinedMidGame = isJust $ gameInfo jRoom})
-                : (AnswerClients [sendChan cl] $ "JOINED" : nicks)
                 : AnswerClients chans ["CLIENT_FLAGS", "-r", nick cl]
-                : [AnswerClients [sendChan cl] $ ["CLIENT_FLAGS", "+h", nick $ fromJust owner] | isJust owner]
+                : [(AnswerClients [sendChan cl] $ "JOINED" : nicks) | not $ null nicks]
             )
-            ++ (if clientProto cl < 38 then map (readynessMessage cl) jRoomClients else [sendStateFlags cl jRoomClients])
+            ++ [AnswerClients [sendChan cl] ["CLIENT_FLAGS", "+h", nick $ fromJust owner] | isJust owner]
+            ++ [sendStateFlags cl jRoomClients | not $ null jRoomClients]
             ++ answerFullConfig cl jRoom
             ++ answerTeams cl jRoom
             ++ watchRound cl jRoom chans
-            ++ []
+            ++ [AnswerClients [sendChan cl] ["CHAT", "[greeting]", greeting jRoom] | greeting jRoom /= ""]
 
         where
-        readynessMessage cl c = AnswerClients [sendChan cl] [if isReady c then "READY" else "NOT_READY", nick c]
         sendStateFlags cl clients = AnswerClients [sendChan cl] . concat . intersperse [""] . filter (not . null) . concat $
                 [f "+r" ready, f "-r" unready, f "+g" ingame, f "-g" inroomlobby]
             where