diff -r 4b5d62ac01f7 -r 90d1fb9fc2e1 gameServer/Actions.hs --- a/gameServer/Actions.hs Sun Mar 06 21:55:44 2011 +0300 +++ b/gameServer/Actions.hs Tue Mar 08 21:27:44 2011 +0300 @@ -315,10 +315,21 @@ (Just ci) <- gets clientIndex n <- client's nick h <- client's host + p <- client's clientProto uid <- client's clUID - db <- gets (dbQueries . serverInfo) - io $ writeChan db $ CheckAccount ci (hashUnique uid) n h - return () + haveSameNick <- liftM (not . null . tail . filter (\c -> nick c == n)) allClientsS + if haveSameNick then + if p < 38 then + mapM_ processAction [ByeClient "Nickname is already in use", removeNick] + else + mapM_ processAction [NoticeMessage NickAlreadyInUse, removeNick] + else + do + db <- gets (dbQueries . serverInfo) + io $ writeChan db $ CheckAccount ci (hashUnique uid) n h + return () + where + removeNick = ModifyClient (\c -> c{nick = ""}) processAction ClearAccountsCache = do