# HG changeset patch # User unc0rr # Date 1277557099 -14400 # Node ID bc34101048943a41cebc492b621305ee97a5d637 # Parent 7c583c88327bce1a4c9bd657bbb60e911fe49079# Parent c601630a12d52cf070a0c29f9025a74f8bd3de3c merge diff -r c601630a12d5 -r bc3410104894 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Sat Jun 26 16:58:19 2010 +0400 @@ -0,0 +1,16 @@ +glob:CMakeCache.txt +glob:CMakeFiles +glob:moc_*.cxx +glob:qrc_*.cxx +glob:*.o +glob:Makefile +glob:bin +glob:*.hi +glob:*.*~ +glob:*.core +glob:hedgewars/config.inc +glob:cmake_install.cmake +glob:QTfrontend/hwconsts.cpp +glob:CPackConfig.cmake +glob:CPackSourceConfig.cmake +glob:tools/cmake_uninstall.cmake diff -r c601630a12d5 -r bc3410104894 QTfrontend/newnetclient.cpp --- a/QTfrontend/newnetclient.cpp Sat Jun 26 09:59:53 2010 +0200 +++ b/QTfrontend/newnetclient.cpp Sat Jun 26 16:58:19 2010 +0400 @@ -153,7 +153,7 @@ void HWNewNet::RawSendNet(const QByteArray & buf) { - //qDebug() << "Client: " << QString(buf).split("\n"); + qDebug() << "Client: " << QString(buf).split("\n"); NetSocket.write(buf); NetSocket.write("\n\n", 2); } @@ -202,7 +202,7 @@ void HWNewNet::ParseCmd(const QStringList & lst) { - //qDebug() << "Server: " << lst; + qDebug() << "Server: " << lst; if(!lst.size()) { diff -r c601630a12d5 -r bc3410104894 gameServer/CMakeLists.txt --- a/gameServer/CMakeLists.txt Sat Jun 26 09:59:53 2010 +0200 +++ b/gameServer/CMakeLists.txt Sat Jun 26 16:58:19 2010 +0400 @@ -28,6 +28,7 @@ set(hwserv_main ${hedgewars_SOURCE_DIR}/gameServer/hedgewars-server.hs) set(ghc_flags + -Wall --make ${hwserv_main} -i${hedgewars_SOURCE_DIR}/gameServer -o ${EXECUTABLE_OUTPUT_PATH}/hedgewars-server${CMAKE_EXECUTABLE_SUFFIX} diff -r c601630a12d5 -r bc3410104894 gameServer/CoreTypes.hs --- a/gameServer/CoreTypes.hs Sat Jun 26 09:59:53 2010 +0200 +++ b/gameServer/CoreTypes.hs Sat Jun 26 16:58:19 2010 +0400 @@ -49,7 +49,7 @@ data TeamInfo = TeamInfo { - teamownerId :: !Int, + teamownerId :: ClientIndex, teamowner :: B.ByteString, teamname :: B.ByteString, teamcolor :: B.ByteString, diff -r c601630a12d5 -r bc3410104894 gameServer/HWProtoInRoomState.hs --- a/gameServer/HWProtoInRoomState.hs Sat Jun 26 09:59:53 2010 +0200 +++ b/gameServer/HWProtoInRoomState.hs Sat Jun 26 16:58:19 2010 +0400 @@ -5,14 +5,16 @@ import qualified Data.Map as Map import Data.Sequence(Seq, (|>), (><), fromList, empty) import Data.List -import Maybe +import Data.Maybe import qualified Data.ByteString.Char8 as B +import Control.Monad +import Control.Monad.Reader -------------------------------------- import CoreTypes import Actions import Utils import HandlerUtils - +import RoomsAndClients handleCmd_inRoom :: CmdHandler @@ -39,45 +41,67 @@ handleCmd_inRoom ("ADD_TEAM" : name : color : grave : fort : voicepack : flag : difStr : hhsInfo) | length hhsInfo /= 16 = return [ProtocolError "Corrupted hedgehogs info"] -{- | length (teams room) == 6 = [Warning "too many teams"] - | canAddNumber <= 0 = [Warning "too many hedgehogs"] - | isJust findTeam = [Warning "There's already a team with same name in the list"] - | gameinprogress room = [Warning "round in progress"] - | isRestrictedTeams room = [Warning "restricted"] - | otherwise = - [ModifyRoom (\r -> r{teams = teams r ++ [newTeam]}), - ModifyClient (\c -> c{teamsInGame = teamsInGame c + 1, clientClan = color}), - AnswerThisClient ["TEAM_ACCEPTED", name], - AnswerOthersInRoom $ teamToNet (clientProto client) newTeam, - AnswerOthersInRoom ["TEAM_COLOR", name, color] - ] - where - client = clients IntMap.! clID - room = rooms IntMap.! (roomID client) - canAddNumber = 48 - (sum . map hhnum $ teams room) - findTeam = find (\t -> name == teamname t) $ teams room - newTeam = (TeamInfo clID (nick client) name color grave fort voicepack flag difficulty newTeamHHNum (hhsList hhsInfo)) - difficulty = fromMaybe 0 (maybeRead difStr :: Maybe Int) + | otherwise = do + (ci, rnc) <- ask + let r = room rnc $ clientRoom rnc ci + clNick <- clientNick + clChan <- thisClientChans + othersChans <- roomOthersChans + return $ + if null . drop 5 $ teams r then + [Warning "too many teams"] + else if canAddNumber r <= 0 then + [Warning "too many hedgehogs"] + else if isJust $ findTeam r then + [Warning "There's already a team with same name in the list"] + else if gameinprogress r then + [Warning "round in progress"] + else if isRestrictedTeams r then + [Warning "restricted"] + else + [ModifyRoom (\r -> r{teams = teams r ++ [newTeam ci clNick r]}), + ModifyClient (\c -> c{teamsInGame = teamsInGame c + 1, clientClan = color}), + AnswerClients clChan ["TEAM_ACCEPTED", name], + AnswerClients othersChans $ teamToNet $ newTeam ci clNick r, + AnswerClients othersChans ["TEAM_COLOR", name, color] + ] + where + canAddNumber r = 48 - (sum . map hhnum $ teams r) + findTeam = find (\t -> name == teamname t) . teams + newTeam ci clNick r = (TeamInfo ci clNick name color grave fort voicepack flag difficulty (newTeamHHNum r) (hhsList hhsInfo)) + difficulty = case B.readInt difStr of + Just (i, t) | B.null t -> fromIntegral i + otherwise -> 0 hhsList [] = [] hhsList (n:h:hhs) = HedgehogInfo n h : hhsList hhs - newTeamHHNum = min 4 canAddNumber --} + newTeamHHNum r = min 4 (canAddNumber r) + +handleCmd_inRoom ["REMOVE_TEAM", name] = do + (ci, rnc) <- ask + let r = room rnc $ clientRoom rnc ci + clNick <- clientNick + + let maybeTeam = findTeam r + let team = fromJust maybeTeam + + return $ + if isNothing $ findTeam r then + [Warning "REMOVE_TEAM: no such team"] + else if clNick /= teamowner team then + [ProtocolError "Not team owner!"] + else + [RemoveTeam name, + ModifyClient + (\c -> c{ + teamsInGame = teamsInGame c - 1, + clientClan = if teamsInGame c == 1 then undefined else anotherTeamClan ci r + }) + ] + where + anotherTeamClan ci = teamcolor . fromJust . find (\t -> teamownerId t == ci) . teams + findTeam = find (\t -> name == teamname t) . teams + {- -handleCmd_inRoom clID clients rooms ["REMOVE_TEAM", teamName] - | noSuchTeam = [Warning "REMOVE_TEAM: no such team"] - | nick client /= teamowner team = [ProtocolError "Not team owner!"] - | otherwise = - [RemoveTeam teamName, - ModifyClient (\c -> c{teamsInGame = teamsInGame c - 1, clientClan = if teamsInGame client == 1 then undefined else anotherTeamClan}) - ] - where - client = clients IntMap.! clID - room = rooms IntMap.! (roomID client) - noSuchTeam = isNothing findTeam - team = fromJust findTeam - findTeam = find (\t -> teamName == teamname t) $ teams room - anotherTeamClan = teamcolor $ fromJust $ find (\t -> teamownerId t == clID) $ teams room - handleCmd_inRoom clID clients rooms ["HH_NUM", teamName, numberStr] | not $ isMaster client = [ProtocolError "Not room master"] diff -r c601630a12d5 -r bc3410104894 gameServer/HWProtoLobbyState.hs --- a/gameServer/HWProtoLobbyState.hs Sat Jun 26 09:59:53 2010 +0200 +++ b/gameServer/HWProtoLobbyState.hs Sat Jun 26 16:58:19 2010 +0400 @@ -4,7 +4,7 @@ import qualified Data.Map as Map import qualified Data.IntSet as IntSet import qualified Data.Foldable as Foldable -import Maybe +import Data.Maybe import Data.List import Data.Word import Control.Monad.Reader @@ -44,7 +44,7 @@ name room, showB $ playersIn room, showB $ length $ teams room, - nick $ irnc `client` (masterID room), + nick $ irnc `client` masterID room, head (Map.findWithDefault ["+gen+"] "MAP" (params room)), head (Map.findWithDefault ["Default"] "SCHEME" (params room)), head (Map.findWithDefault ["Default"] "AMMO" (params room)) diff -r c601630a12d5 -r bc3410104894 gameServer/RoomsAndClients.hs --- a/gameServer/RoomsAndClients.hs Sat Jun 26 09:59:53 2010 +0200 +++ b/gameServer/RoomsAndClients.hs Sat Jun 26 16:58:19 2010 +0400 @@ -23,6 +23,7 @@ withRoomsAndClients, allRooms, allClients, + clientRoom, showRooms, roomClients ) where diff -r c601630a12d5 -r bc3410104894 gameServer/Utils.hs --- a/gameServer/Utils.hs Sat Jun 26 09:59:53 2010 +0200 +++ b/gameServer/Utils.hs Sat Jun 26 16:58:19 2010 +0400 @@ -52,18 +52,8 @@ [(x, rest)] | all isSpace rest -> Just x _ -> Nothing -teamToNet :: Word16 -> TeamInfo -> [B.ByteString] -teamToNet protocol team - | protocol < 30 = - "ADD_TEAM" - : teamname team - : teamgrave team - : teamfort team - : teamvoicepack team - : teamowner team - : (B.pack $ show $ difficulty team) - : hhsInfo - | otherwise = +teamToNet :: TeamInfo -> [B.ByteString] +teamToNet team = "ADD_TEAM" : teamname team : teamgrave team diff -r c601630a12d5 -r bc3410104894 project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/Border.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/Clouds.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/Flake.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/barriere.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/fleur.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/fleurland.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/fleurland2.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/fleurland3.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/grass.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/grass2.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/mouton1.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/mouton2.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/mouton3.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/mouton4.png diff -r c601630a12d5 -r bc3410104894 share/hedgewars/Data/Themes/Sheep/rocher.png