blastmud/scripts/statgen.hs

38 lines
1.5 KiB
Haskell
Raw Normal View History

2023-01-20 23:08:40 +11:00
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
import qualified Data.Text.IO as T
import qualified Data.Set as S
import Data.List
import Control.Monad
stats :: [(T.Text, [T.Text])]
stats = [
("brn", ["appraise", "bombs", "chemistry", "craft", "hack", "locksmith", "medic", "persuade", "pilot", "repair",
"science", "teach"]),
("sen", ["appraise", "dodge", "focus", "fuck", "scavenge", "sneak", "throw", "track", "whips"]),
("brw", ["clubs", "fists", "throw"]),
("refl", ["blades", "climb", "clubs", "dodge", "locksmith", "pilot", "pistols", "quickdraw", "rifles", "spears",
"whips"]),
("end", ["climb", "fish", "fists", "focus", "fuck", "scavenge", "spears", "swim"]),
("col", ["blades", "bombs", "fish", "pistols", "quickdraw", "rifles", "sneak", "persuade"])
]
doubleValue :: S.Set T.Text
doubleValue = S.fromList [
"chemistry", "craft", "hack", "medic", "repair",
"science", "swim", "teach", "track"
]
main :: IO ()
main =
let skillSet =
sortOn snd $
stats >>= (\(st, skills) -> map (\skill -> (st, skill)) skills)
in
forM_ skillSet $
\(stat, skill) ->
let mup = if skill `S.member` doubleValue then "" else " * 0.5"
in
T.putStrLn $ " target_item.total_skills.entry(SkillType::" <> (T.toTitle skill) <> ")\n\
\ .and_modify(|sk| *sk += " <> stat <> mup <> ").or_insert(brn" <> mup <> ");"