# HG changeset patch # User unc0rr # Date 1354739060 -14400 # Node ID d1a830c304c72476a77a8a5ab6abfed85cc32914 # Parent 92a43020579656eecd8b0e682ea36d5facfe7d08 Change room name if room admin is kicked diff -r 92a430205796 -r d1a830c304c7 gameServer/Actions.hs --- a/gameServer/Actions.hs Thu Dec 06 00:14:40 2012 +0400 +++ b/gameServer/Actions.hs Thu Dec 06 00:24:20 2012 +0400 @@ -260,8 +260,9 @@ newMaster <- io $ client'sM rnc id newMasterId oldRoomName <- io $ room'sM rnc name ri oldMaster <- client's nick + kicked <- client's isKickedFromServer thisRoomChans <- liftM (map sendChan) $ roomClientsS ri - let newRoomName = if proto < 42 then nick newMaster else oldRoomName + let newRoomName = if (proto < 42) || kicked then nick newMaster else oldRoomName mapM_ processAction [ ModifyRoom (\r -> r{masterID = newMasterId , name = newRoomName @@ -271,7 +272,6 @@ , readyPlayers = if isReady newMaster then readyPlayers r else readyPlayers r + 1}) , ModifyClient2 newMasterId (\c -> c{isMaster = True, isReady = True}) , AnswerClients [sendChan newMaster] ["ROOM_CONTROL_ACCESS", "1"] - , AnswerClients thisRoomChans ["WARNING", "New room admin is " `B.append` nick newMaster] , AnswerClients thisRoomChans ["CLIENT_FLAGS", "-h", oldMaster] , AnswerClients thisRoomChans ["CLIENT_FLAGS", "+hr", nick newMaster] ] @@ -487,8 +487,9 @@ clHost <- client's host currentTime <- io getCurrentTime mapM_ processAction [ - AddIP2Bans clHost "60 seconds cooldown after kick" (addUTCTime 60 currentTime), - ByeClient "Kicked" + AddIP2Bans clHost "60 seconds cooldown after kick" (addUTCTime 60 currentTime) + , ModifyClient (\c -> c{isKickedFromServer = True}) + , ByeClient "Kicked" ] @@ -502,12 +503,14 @@ , KickClient banId ] + processAction (BanIP ip seconds reason) = do currentTime <- io getCurrentTime let msg = B.concat ["Ban for ", B.pack . show $ seconds, " (", reason, ")"] processAction $ AddIP2Bans ip msg (addUTCTime seconds currentTime) + processAction (BanNick n seconds reason) = do currentTime <- io getCurrentTime let msg = @@ -518,6 +521,7 @@ processAction $ AddNick2Bans n msg (addUTCTime seconds currentTime) + processAction BanList = do time <- io $ getCurrentTime ch <- client's sendChan @@ -528,12 +532,14 @@ ban2Str time (BanByIP b r t) = ["I", b, r, B.pack . show $ t `diffUTCTime` time] ban2Str time (BanByNick b r t) = ["N", b, r, B.pack . show $ t `diffUTCTime` time] + processAction (Unban entry) = do processAction $ ModifyServerInfo (\s -> s{bans = filter (not . f) $ bans s}) where f (BanByIP bip _ _) = bip == entry f (BanByNick bn _ _) = bn == entry + processAction (KickRoomClient kickId) = do modify (\s -> s{clientIndex = Just kickId}) ch <- client's sendChan diff -r 92a430205796 -r d1a830c304c7 gameServer/CoreTypes.hs --- a/gameServer/CoreTypes.hs Thu Dec 06 00:14:40 2012 +0400 +++ b/gameServer/CoreTypes.hs Thu Dec 06 00:24:20 2012 +0400 @@ -36,6 +36,7 @@ isReady :: !Bool, isInGame :: Bool, isAdministrator :: Bool, + isKickedFromServer :: Bool, clientClan :: Maybe B.ByteString, teamsInGame :: Word } diff -r 92a430205796 -r d1a830c304c7 gameServer/NetRoutines.hs --- a/gameServer/NetRoutines.hs Thu Dec 06 00:14:40 2012 +0400 +++ b/gameServer/NetRoutines.hs Thu Dec 06 00:24:20 2012 +0400 @@ -41,6 +41,7 @@ False False False + False Nothing 0 )