gameServer/HWProtoLobbyState.hs
changeset 10342 16122539d2ea
parent 10338 9558b0380779
child 10349 a51de45dcc42
equal deleted inserted replaced
10341:22e441db6343 10342:16122539d2ea
    48     handleCmd_lobby ["CREATE_ROOM", rName, ""]
    48     handleCmd_lobby ["CREATE_ROOM", rName, ""]
    49 
    49 
    50 
    50 
    51 handleCmd_lobby ["JOIN_ROOM", roomName, roomPassword] = do
    51 handleCmd_lobby ["JOIN_ROOM", roomName, roomPassword] = do
    52     (_, irnc) <- ask
    52     (_, irnc) <- ask
       
    53 
    53     let ris = allRooms irnc
    54     let ris = allRooms irnc
    54     cl <- thisClient
    55     cl <- thisClient
    55     let maybeRI = find (\ri -> roomName == name (irnc `room` ri)) ris
    56     let maybeRI = find (\ri -> roomName == name (irnc `room` ri)) ris
    56     let jRI = fromJust maybeRI
    57     let jRI = fromJust maybeRI
    57     let jRoom = irnc `room` jRI
    58     let jRoom = irnc `room` jRI
    59     let jRoomClients = map (client irnc) $ roomClients irnc jRI
    60     let jRoomClients = map (client irnc) $ roomClients irnc jRI
    60     let nicks = map nick jRoomClients
    61     let nicks = map nick jRoomClients
    61     let owner = find isMaster jRoomClients
    62     let owner = find isMaster jRoomClients
    62     let chans = map sendChan (cl : jRoomClients)
    63     let chans = map sendChan (cl : jRoomClients)
    63     let isBanned = host cl `elem` roomBansList jRoom
    64     let isBanned = host cl `elem` roomBansList jRoom
    64     let hasTeamsInGame = (isJust $ gameInfo jRoom) && (or . map (\t -> teamowner t == nick cl) . teamsAtStart . fromJust $ gameInfo jRoom)
    65     let clTeams =
       
    66             if (isJust $ gameInfo jRoom) then
       
    67                 map teamname . filter (\t -> teamowner t == nick cl) . teamsAtStart . fromJust $ gameInfo jRoom 
       
    68                 else
       
    69                 []
    65     return $
    70     return $
    66         if isNothing maybeRI then
    71         if isNothing maybeRI then
    67             [Warning $ loc "No such room"]
    72             [Warning $ loc "No such room"]
    68             else if (not sameProto) && (not $ isAdministrator cl) then
    73             else if (not sameProto) && (not $ isAdministrator cl) then
    69             [Warning $ loc "Room version incompatible to your hedgewars version"]
    74             [Warning $ loc "Room version incompatible to your hedgewars version"]
    86             ++ [sendStateFlags cl jRoomClients | not $ null jRoomClients]
    91             ++ [sendStateFlags cl jRoomClients | not $ null jRoomClients]
    87             ++ answerFullConfig cl jRoom
    92             ++ answerFullConfig cl jRoom
    88             ++ answerTeams cl jRoom
    93             ++ answerTeams cl jRoom
    89             ++ watchRound cl jRoom chans
    94             ++ watchRound cl jRoom chans
    90             ++ [AnswerClients [sendChan cl] ["CHAT", "[greeting]", greeting jRoom] | greeting jRoom /= ""]
    95             ++ [AnswerClients [sendChan cl] ["CHAT", "[greeting]", greeting jRoom] | greeting jRoom /= ""]
    91             ++ if hasTeamsInGame then ["EM", toEngineMsg $ 'G' `B.cons` nick cl] else []
    96             ++ map (\t -> AnswerClients chans ["EM", toEngineMsg $ 'G' `B.cons` t]) clTeams
    92 
    97 
    93         where
    98         where
    94         sendStateFlags cl clients = AnswerClients [sendChan cl] . concat . intersperse [""] . filter (not . null) . concat $
    99         sendStateFlags cl clients = AnswerClients [sendChan cl] . concat . intersperse [""] . filter (not . null) . concat $
    95                 [f "+r" ready, f "-r" unready, f "+g" ingame, f "-g" inroomlobby]
   100                 [f "+r" ready, f "-r" unready, f "+g" ingame, f "-g" inroomlobby]
    96             where
   101             where