--- a/gameServer/HandlerUtils.hs Sat Jan 29 21:33:24 2011 +0300
+++ b/gameServer/HandlerUtils.hs Sun Jan 30 20:32:23 2011 +0300
@@ -2,6 +2,7 @@
import Control.Monad.Reader
import qualified Data.ByteString.Char8 as B
+import Data.List
import RoomsAndClients
import CoreTypes
@@ -27,6 +28,18 @@
let ri = clientRoom rnc ci
return $ map (sendChan . client rnc) $ filter (/= ci) (roomClients rnc ri)
+roomSameClanChans :: Reader (ClientIndex, IRnC) [ClientChan]
+roomSameClanChans = do
+ (ci, rnc) <- ask
+ 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
+
roomClientsChans :: Reader (ClientIndex, IRnC) [ClientChan]
roomClientsChans = do
(ci, rnc) <- ask
@@ -43,3 +56,10 @@
allRoomInfos :: Reader (a, IRnC) [RoomInfo]
allRoomInfos = liftM ((\irnc -> map (room irnc) $ allRooms irnc) . snd) ask
+
+clientByNick :: B.ByteString -> Reader (ClientIndex, IRnC) (Maybe ClientIndex)
+clientByNick n = do
+ (_, rnc) <- ask
+ let allClientIDs = allClients rnc
+ return $ find (\clId -> n == nick (client rnc clId)) allClientIDs
+