# HG changeset patch # User unc0rr # Date 1299352589 -10800 # Node ID 33fe91b2bcbfb12444c4acd9db1ceed5039a0807 # Parent 304d149bb3ddcbddc9f1b59c607194931ebb5b51 Use Maybe for storing client's clan, allows less error-prone spectator checks diff -r 304d149bb3dd -r 33fe91b2bcbf gameServer/CoreTypes.hs --- a/gameServer/CoreTypes.hs Sat Mar 05 13:07:02 2011 +0100 +++ b/gameServer/CoreTypes.hs Sat Mar 05 22:16:29 2011 +0300 @@ -34,7 +34,7 @@ isMaster :: Bool, isReady :: !Bool, isAdministrator :: Bool, - clientClan :: B.ByteString, + clientClan :: Maybe B.ByteString, teamsInGame :: Word } diff -r 304d149bb3dd -r 33fe91b2bcbf gameServer/HWProtoInRoomState.hs --- a/gameServer/HWProtoInRoomState.hs Sat Mar 05 13:07:02 2011 +0100 +++ b/gameServer/HWProtoInRoomState.hs Sat Mar 05 22:16:29 2011 +0300 @@ -64,7 +64,7 @@ [Warning "restricted"] else [ModifyRoom (\r -> r{teams = teams r ++ [newTeam ci clNick r]}), - ModifyClient (\c -> c{teamsInGame = teamsInGame c + 1, clientClan = color}), + ModifyClient (\c -> c{teamsInGame = teamsInGame c + 1, clientClan = Just color}), AnswerClients clChan ["TEAM_ACCEPTED", tName], AnswerClients othChans $ teamToNet $ newTeam ci clNick rm, AnswerClients othChans ["TEAM_COLOR", tName, color] @@ -99,7 +99,7 @@ ModifyClient (\c -> c{ teamsInGame = teamsInGame c - 1, - clientClan = if teamsInGame c == 1 then undefined else anotherTeamClan ci r + clientClan = if teamsInGame c == 1 then Nothing else Just $ anotherTeamClan ci r }) ] where @@ -148,7 +148,7 @@ else [ModifyRoom $ modifyTeam team{teamcolor = newColor}, AnswerClients others ["TEAM_COLOR", teamName, newColor], - ModifyClient2 (teamownerId team) (\c -> c{clientClan = newColor})] + ModifyClient2 (teamownerId team) (\c -> c{clientClan = Just newColor})] where findTeam = find (\t -> teamName == teamname t) . teams diff -r 304d149bb3dd -r 33fe91b2bcbf gameServer/HandlerUtils.hs --- a/gameServer/HandlerUtils.hs Sat Mar 05 13:07:02 2011 +0100 +++ b/gameServer/HandlerUtils.hs Sat Mar 05 22:16:29 2011 +0300 @@ -34,11 +34,8 @@ let ri = clientRoom rnc ci let otherRoomClients = map (client rnc) . filter (/= ci) $ roomClients rnc ri let cl = rnc `client` ci - let thisClan = clientClan cl - let sameClanClients = Prelude.filter (\c -> teamsInGame cl > 0 && clientClan c == thisClan) otherRoomClients - let spectators = Prelude.filter (\c -> teamsInGame c == 0) otherRoomClients - let sameClanOrSpec = if teamsInGame cl > 0 then sameClanClients else spectators - return $ map sendChan sameClanOrSpec + let sameClanClients = Prelude.filter (\c -> clientClan c == clientClan cl) otherRoomClients + return $ map sendChan sameClanClients roomClientsChans :: Reader (ClientIndex, IRnC) [ClientChan] roomClientsChans = do diff -r 304d149bb3dd -r 33fe91b2bcbf gameServer/NetRoutines.hs --- a/gameServer/NetRoutines.hs Sat Mar 05 13:07:02 2011 +0100 +++ b/gameServer/NetRoutines.hs Sat Mar 05 22:16:29 2011 +0300 @@ -43,7 +43,7 @@ False False False - undefined + Nothing undefined )