gameServer/EngineInteraction.hs
changeset 10740 c9db53de9c3b
parent 10460 8dcea9087d75
child 10755 f78a5ca6e0af
equal deleted inserted replaced
10738:62659c427e5d 10740:c9db53de9c3b
   100         , maybeMap
   100         , maybeMap
   101         , [eml ["etheme ", head $ prms Map.! "THEME"]]
   101         , [eml ["etheme ", head $ prms Map.! "THEME"]]
   102         , [eml ["eseed ", mParams Map.! "SEED"]]
   102         , [eml ["eseed ", mParams Map.! "SEED"]]
   103         , [eml ["e$gmflags ", showB gameFlags]]
   103         , [eml ["e$gmflags ", showB gameFlags]]
   104         , schemeFlags
   104         , schemeFlags
       
   105         , schemeAdditional
   105         , [eml ["e$template_filter ", mParams Map.! "TEMPLATE"]]
   106         , [eml ["e$template_filter ", mParams Map.! "TEMPLATE"]]
   106         , [eml ["e$mapgen ", mapgen]]
   107         , [eml ["e$mapgen ", mapgen]]
   107         , mapgenSpecific
   108         , mapgenSpecific
   108         , concatMap teamSetup ti
   109         , concatMap teamSetup ti
   109         , msgs
   110         , msgs
   113         keys1, keys2 :: Set.Set B.ByteString
   114         keys1, keys2 :: Set.Set B.ByteString
   114         keys1 = Set.fromList ["MAP", "MAPGEN", "MAZE_SIZE", "SEED", "TEMPLATE"]
   115         keys1 = Set.fromList ["MAP", "MAPGEN", "MAZE_SIZE", "SEED", "TEMPLATE"]
   115         keys2 = Set.fromList ["AMMO", "SCHEME", "SCRIPT", "THEME"]
   116         keys2 = Set.fromList ["AMMO", "SCHEME", "SCRIPT", "THEME"]
   116         sane = Set.null (keys1 Set.\\ Map.keysSet mParams)
   117         sane = Set.null (keys1 Set.\\ Map.keysSet mParams)
   117             && Set.null (keys2 Set.\\ Map.keysSet prms)
   118             && Set.null (keys2 Set.\\ Map.keysSet prms)
   118             && (not . null . drop 27 $ scheme)
   119             && (not . null . drop 40 $ scheme)
   119             && (not . null . tail $ prms Map.! "AMMO")
   120             && (not . null . tail $ prms Map.! "AMMO")
   120         mapGenTypes = ["+rnd+", "+maze+", "+drawn+"]
   121         mapGenTypes = ["+rnd+", "+maze+", "+drawn+"]
   121         maybeScript = let s = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]]
   122         maybeScript = let s = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]]
   122         maybeMap = let m = mParams Map.! "MAP" in if m `elem` mapGenTypes then [] else [eml ["emap ", m]]
   123         maybeMap = let m = mParams Map.! "MAP" in if m `elem` mapGenTypes then [] else [eml ["emap ", m]]
   123         scheme = tail $ prms Map.! "SCHEME"
   124         scheme = tail $ prms Map.! "SCHEME"
   129         gameFlags :: Word32
   130         gameFlags :: Word32
   130         gameFlags = foldl (\r (b, f) -> if b == "false" then r else r .|. f) 0 $ zip scheme gameFlagConsts
   131         gameFlags = foldl (\r (b, f) -> if b == "false" then r else r .|. f) 0 $ zip scheme gameFlagConsts
   131         schemeFlags = map (\(v, (n, m)) -> eml [n, " ", showB $ (readInt_ v) * m])
   132         schemeFlags = map (\(v, (n, m)) -> eml [n, " ", showB $ (readInt_ v) * m])
   132             $ filter (\(_, (n, _)) -> not $ B.null n)
   133             $ filter (\(_, (n, _)) -> not $ B.null n)
   133             $ zip (drop (length gameFlagConsts) scheme) schemeParams
   134             $ zip (drop (length gameFlagConsts) scheme) schemeParams
       
   135         schemeAdditional = let scriptParam = B.tail $ scheme !! 41 in [eml ["e$scriptparam ", scriptParam] | not $ B.null scriptParam]
   134         ammoStr :: B.ByteString
   136         ammoStr :: B.ByteString
   135         ammoStr = head . tail $ prms Map.! "AMMO"
   137         ammoStr = head . tail $ prms Map.! "AMMO"
   136         ammo = let l = B.length ammoStr `div` 4; ((a, b), (c, d)) = (B.splitAt l . fst &&& B.splitAt l . snd) . B.splitAt (l * 2) $ ammoStr in
   138         ammo = let l = B.length ammoStr `div` 4; ((a, b), (c, d)) = (B.splitAt l . fst &&& B.splitAt l . snd) . B.splitAt (l * 2) $ ammoStr in
   137                    (map (\(x, y) -> eml [x, " ", y]) $ zip ["eammloadt", "eammprob", "eammdelay", "eammreinf"] [a, b, c, d])
   139                    (map (\(x, y) -> eml [x, " ", y]) $ zip ["eammloadt", "eammprob", "eammdelay", "eammreinf"] [a, b, c, d])
   138                    ++ [em "eammstore" | scheme !! 14 == "true" || scheme !! 20 == "false"]
   140                    ++ [em "eammstore" | scheme !! 14 == "true" || scheme !! 20 == "false"]
   182     , ("e$hcaseamount", 1)
   184     , ("e$hcaseamount", 1)
   183     , ("e$waterrise", 1)
   185     , ("e$waterrise", 1)
   184     , ("e$healthdec", 1)
   186     , ("e$healthdec", 1)
   185     , ("e$ropepct", 1)
   187     , ("e$ropepct", 1)
   186     , ("e$getawaytime", 1)
   188     , ("e$getawaytime", 1)
       
   189     , ("e$worldedge", 1)
   187     ]
   190     ]
   188 
   191 
   189 
   192 
   190 gameFlagConsts :: [Word32]
   193 gameFlagConsts :: [Word32]
   191 gameFlagConsts = [
   194 gameFlagConsts = [