1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
-- | Server and client game state types and operations.
module Game.LambdaHack.Server.ServerOptions
( ServerOptions(..), RNGs(..), defServerOptions
) where
import Prelude ()
import Game.LambdaHack.Core.Prelude
import Data.Binary
import qualified System.Random.SplitMix32 as SM
import Game.LambdaHack.Common.ClientOptions
import Game.LambdaHack.Common.Faction
import Game.LambdaHack.Content.ModeKind
import Game.LambdaHack.Definition.Defs
-- | Options that affect the behaviour of the server (including game rules).
data ServerOptions = ServerOptions
{ sknowMap :: Bool
, sknowEvents :: Bool
, sknowItems :: Bool
, sniff :: Bool
, sallClear :: Bool
, sboostRandomItem :: Bool
, sgameMode :: Maybe (GroupName ModeKind)
, sautomateAll :: Bool
, skeepAutomated :: Bool
, sdungeonRng :: Maybe SM.SMGen
, smainRng :: Maybe SM.SMGen
, snewGameSer :: Bool
, scurChalSer :: Challenge
, sdumpInitRngs :: Bool
, ssavePrefixSer :: String
, sdbgMsgSer :: Bool
, sassertExplored :: Maybe Int
, sshowItemSamples :: Bool
, sstopAfterGameOver :: Bool
, sclientOptions :: ClientOptions
-- The client debug inside server debug only holds the client commandline
-- options and is never updated with config options, etc.
}
deriving Show
data RNGs = RNGs
{ dungeonRandomGenerator :: Maybe SM.SMGen
, startingRandomGenerator :: Maybe SM.SMGen
}
instance Show RNGs where
show RNGs{..} =
let args = [ maybe "" (\gen -> "--setDungeonRng \"" ++ show gen ++ "\"")
dungeonRandomGenerator
, maybe "" (\gen -> "--setMainRng \"" ++ show gen ++ "\"")
startingRandomGenerator ]
in unwords args
instance Binary ServerOptions where
put ServerOptions{..} = do
put sknowMap
put sknowEvents
put sknowItems
put sniff
put sallClear
put sboostRandomItem
put sgameMode
put sautomateAll
put skeepAutomated
put scurChalSer
put ssavePrefixSer
put sdbgMsgSer
put sassertExplored
put sshowItemSamples
put sclientOptions
get = do
sknowMap <- get
sknowEvents <- get
sknowItems <- get
sniff <- get
sallClear <- get
sboostRandomItem <- get
sgameMode <- get
sautomateAll <- get
skeepAutomated <- get
scurChalSer <- get
ssavePrefixSer <- get
sdbgMsgSer <- get
sassertExplored <- get
sshowItemSamples <- get
sclientOptions <- get
let sdungeonRng = Nothing
smainRng = Nothing
snewGameSer = False
sdumpInitRngs = False
sstopAfterGameOver = False
return $! ServerOptions{..}
instance Binary RNGs where
put RNGs{..} = do
put (show dungeonRandomGenerator)
put (show startingRandomGenerator)
get = do
dg <- get
sg <- get
let dungeonRandomGenerator = read dg
startingRandomGenerator = read sg
return $! RNGs{..}
-- | Default value of server options.
defServerOptions :: ServerOptions
defServerOptions = ServerOptions
{ sknowMap = False
, sknowEvents = False
, sknowItems = False
, sniff = False
, sallClear = False
, sboostRandomItem = False
, sgameMode = Nothing
, sautomateAll = False
, skeepAutomated = False
, sdungeonRng = Nothing
, smainRng = Nothing
, snewGameSer = False
, scurChalSer = defaultChallenge
, sdumpInitRngs = False
, ssavePrefixSer = ""
, sdbgMsgSer = False
, sassertExplored = Nothing
, sshowItemSamples = False
, sstopAfterGameOver = False
, sclientOptions = defClientOptions
}
|