2023-03-15 06:06:13 +01:00
|
|
|
import argparse
|
2023-03-15 07:12:47 +01:00
|
|
|
import asyncio
|
2023-03-19 01:43:14 +01:00
|
|
|
import logging
|
2023-03-15 06:06:13 +01:00
|
|
|
import textwrap
|
|
|
|
|
|
|
|
|
|
|
|
def main(args: argparse.Namespace) -> int:
|
2023-03-19 01:43:14 +01:00
|
|
|
from sampy.config import Config
|
2023-03-19 05:17:44 +01:00
|
|
|
|
|
|
|
config = Config(*args.config, logging_level=args.log)
|
|
|
|
|
2023-03-15 07:12:47 +01:00
|
|
|
from sampy.network.protocol import Protocol
|
2023-03-15 07:27:33 +01:00
|
|
|
from sampy.server import InteractiveServer
|
2023-03-15 07:12:47 +01:00
|
|
|
|
2023-03-19 01:43:14 +01:00
|
|
|
server = InteractiveServer(
|
|
|
|
Protocol,
|
2023-03-19 05:17:44 +01:00
|
|
|
config=config,
|
2023-03-19 01:43:14 +01:00
|
|
|
)
|
2023-03-15 07:12:47 +01:00
|
|
|
server.start()
|
|
|
|
|
|
|
|
asyncio.get_event_loop().run_forever()
|
2023-03-15 06:06:13 +01:00
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
|
|
|
class Formatter(
|
|
|
|
argparse.ArgumentDefaultsHelpFormatter, argparse.RawTextHelpFormatter
|
|
|
|
):
|
|
|
|
pass
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(
|
|
|
|
prog="sampy",
|
2023-03-19 01:43:14 +01:00
|
|
|
description=textwrap.dedent(
|
2023-03-15 06:06:13 +01:00
|
|
|
"""
|
2023-03-19 01:43:14 +01:00
|
|
|
A SAMP server made in python
|
|
|
|
|
2023-03-15 06:06:13 +01:00
|
|
|
SAMP (or SA-MP) is a free multiplayer mod for the PC port of GTA: San Andreas.
|
|
|
|
GTA: San Andreas was developed by Rockstar North and released in 2005.
|
|
|
|
SA-MP is an unofficial multiplayer mod made by the `SA-MP.com` team released @[sa-mp.com](https://www.sa-mp.com/)
|
|
|
|
"""
|
|
|
|
),
|
2023-03-19 01:43:14 +01:00
|
|
|
epilog=textwrap.dedent(
|
|
|
|
"""
|
|
|
|
example:
|
|
|
|
%(prog)s --config default.ini secret.ini race.ini
|
|
|
|
|
|
|
|
This will first load default.ini configuration,
|
|
|
|
secret.ini might override the rcon- and server-password,
|
|
|
|
race.ini might change the hostname and rules.
|
|
|
|
|
|
|
|
example default.ini:
|
|
|
|
[sampy]
|
|
|
|
hostname = My SAMP Server
|
|
|
|
password =
|
|
|
|
rcon_password = VerySecretPassword
|
|
|
|
|
|
|
|
[sampy.rules]
|
|
|
|
lagcomp = off
|
|
|
|
|
|
|
|
[logging.loggers]
|
|
|
|
keys = root
|
|
|
|
|
|
|
|
[logging.handlers]
|
|
|
|
keys = console, file
|
|
|
|
|
|
|
|
[logging.formatters]
|
|
|
|
keys = simple, color
|
|
|
|
|
|
|
|
[logging.logger_root]
|
|
|
|
level = DEBUG
|
|
|
|
handlers = console, file
|
|
|
|
|
|
|
|
[logging.handler_console]
|
|
|
|
class = StreamHandler
|
|
|
|
formatter = color
|
|
|
|
args = (sys.stdout,)
|
|
|
|
|
|
|
|
[logging.handler_file]
|
|
|
|
class = logging.handlers.TimedRotatingFileHandler
|
|
|
|
formatter = simple
|
|
|
|
args = ("logs/sampy.log", "d", 1, 7,) # Note that the logs folder has to exist
|
|
|
|
|
|
|
|
[logging.formatter_simple]
|
|
|
|
format = %%(asctime)s.%%(msecs)03d | %%(levelname)-8s | %%(message)s
|
|
|
|
datefmt = %%Y-%%m-%%d %%H:%%M:%%S
|
|
|
|
|
|
|
|
[logging.formatter_color]
|
|
|
|
class = sampy.config.ColorFormatter
|
|
|
|
format = §6%%(asctime)s.%%(msecs)03d §1| %%(levelname)-8s §1|§r %%(message)s
|
|
|
|
datefmt = %%Y-%%m-%%d %%H:%%M:%%S
|
|
|
|
"""
|
|
|
|
),
|
2023-03-15 06:06:13 +01:00
|
|
|
formatter_class=Formatter,
|
|
|
|
)
|
2023-03-19 01:43:14 +01:00
|
|
|
|
2023-03-15 06:06:13 +01:00
|
|
|
parser.add_argument(
|
2023-03-19 01:43:14 +01:00
|
|
|
"--config",
|
2023-03-15 06:06:13 +01:00
|
|
|
type=str,
|
2023-03-19 01:43:14 +01:00
|
|
|
nargs="+",
|
|
|
|
default=[],
|
|
|
|
help="Config filenames",
|
2023-03-15 06:06:13 +01:00
|
|
|
)
|
2023-03-19 01:43:14 +01:00
|
|
|
parser.add_argument(
|
|
|
|
"--log",
|
|
|
|
type=str,
|
|
|
|
nargs="?",
|
|
|
|
help="Global logging level (Overrides any config)",
|
|
|
|
choices=logging._nameToLevel.keys(),
|
|
|
|
)
|
|
|
|
|
2023-03-15 06:06:13 +01:00
|
|
|
args = parser.parse_args()
|
|
|
|
raise SystemExit(main(args))
|