from plomrogue.io import GameIO
from plomrogue.misc import quote
from plomrogue.mapping import YX, MapGeometrySquare, MapGeometryHex, Map
-import string
import datetime
class Game(GameBase):
def __init__(self, save_file, *args, **kwargs):
+ import string
from plomrogue.misc import Terrain
super().__init__(*args, **kwargs)
self.changed = True
if os.path.exists(self.io.save_file):
if not os.path.isfile(self.io.save_file):
raise GameError('save file path refers to non-file')
+ self.io.train_parser()
def register_thing_type(self, thing_type):
self._register_object(thing_type, 'thing_type', 'Thing_')
+ self.io.train_parser()
def register_task(self, task):
self._register_object(task, 'task', 'Task_')
return False
return True
- def get_string_options(self, string_option_type):
- if string_option_type == 'direction':
- return self.map_geometry.directions
- elif string_option_type == 'direction+here':
- return ['HERE'] + self.map_geometry.directions
- elif string_option_type == 'char':
- return [c for c in
- string.digits + string.ascii_letters + string.punctuation + ' ']
- elif string_option_type == 'map_geometry':
- return ['Hex', 'Square']
- elif string_option_type == 'thing_type':
- return self.thing_types.keys()
- return None
-
def get_default_spawn_point(self):
import random
if len(self.spawn_points) == 0:
self.changed = True
def login(self, nick, connection_id):
- if len(self.sessions) > 200:
- print('DEBUG LOGIN TOO MANY FOR', connection_id)
- self.io.send('CHAT "sorry, too many users currenty '
- 'logged in, try again later"')
- return
+ login_limit_filename = 'login_limit'
+ if os.path.exists(login_limit_filename):
+ with open(login_limit_filename, 'r') as f:
+ lines = f.readlines()
+ login_limit = int(lines[0])
+ if len(self.sessions) > login_limit - 1:
+ print('DEBUG LOGIN TOO MANY FOR', nick, connection_id)
+ self.io.send('CHAT "sorry, too many users currently '
+ 'logged in, try again later '
+ 'by re-entering your name"', connection_id)
+ return
for t in [t for t in self.things
if t.type_ == 'Player' and t.name == nick]:
self.io.send('GAME_ERROR ' + quote('name already in use'),
self.portals = {}
self.admin_passwords = []
self.map_geometry = map_geometry
+ self.io.train_parser()
self.map_control_passwords = {'X': 'secret'}
self.get_map(YX(0, 0))
self.get_map(YX(0, 0), 'control')