123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- '''
- char_gen.py
- The basic character generation module. Allows accounts to create new characters
- with basic selection for name, sex, and race.
- '''
- import mudsys, mud, socket, char, hooks
- def check_char_name(arg):
- '''checks to make sure the character name is valid. Names are valid if they
- are greater than 2 characters, less than 13, and comprise only alpha
- characters.'''
- return len(arg) >= 3 and len(arg) <= 12 and arg.isalpha()
- def cg_name_handler(sock, arg):
- if not check_char_name(arg):
- sock.send("{cIllegal name, please pick another.{n\r\n")
- elif mudsys.player_exists(arg):
- sock.send("{cA player with that name already exists.{n\r\n")
- elif mudsys.player_creating(arg):
- sock.send("{cA player is already being created with that name.{n\r\n")
- elif arg.lower().startswith("guest"):
- sock.send("{cCharacter names cannot begin with 'guest'.{n\r\n")
- else:
- name = arg[0].upper() + arg[1:]
- ch = mudsys.create_player(name)
- if ch == None:
- sock.send("{cIllegal name, please pick another.{n\r\n")
- else:
- mudsys.attach_char_socket(ch, sock)
- ch.rdesc = ch.name + " is here."
- sock.pop_ih()
- def cg_sex_handler(sock, arg):
- try:
- result = {
- 'M' : 'male',
- 'F' : 'female',
- }[arg[0].upper()]
- sock.ch.sex = result
- sock.pop_ih()
- except:
- sock.send("{cInvalid sex, try again.{n\r\n")
- def cg_race_handler(sock, arg):
- if not mud.is_race(arg, True):
- sock.send("{cInvalid race selection, try again.{n\r\n")
- else:
- sock.ch.race = arg.lower()
- sock.pop_ih()
- def cg_finish_handler(sock, arg):
- # pop our input handler for finishing character generation
- sock.pop_ih()
- # log that the character created
- mud.log_string("New player: " + sock.ch.name + " has entered the game.")
-
- # register and save him to disk and to an account
- mudsys.do_register(sock.ch)
- # make him exist in the game for functions to look him up
- mudsys.try_enter_game(sock.ch)
- # run the init_player hook
- hooks.run("init_player", hooks.build_info("ch", (sock.ch,)))
-
- # attach him to his account and save the account
- sock.account.add_char(sock.ch)
- mudsys.do_save(sock.account)
- mudsys.do_save(sock.ch)
- # clear their screen
- sock.ch.act("clear")
-
- # send them the motd
- sock.ch.page(mud.get_motd())
- # make him look at the room
- sock.ch.act("look")
- # run our enter hook
- hooks.run("enter", hooks.build_info("ch rm", (sock.ch, sock.ch.room)))
- def cg_name_prompt(sock):
- sock.send_raw("What is your character's name? ")
- def cg_sex_prompt(sock):
- sock.send_raw("What is your sex (M/F)? ")
- def cg_race_prompt(sock):
- sock.send("Available races are: ")
- sock.send(mud.list_races(True))
- sock.send_raw("\r\nPlease enter your choice: ")
- def cg_finish_prompt(sock):
- sock.send_raw("{c*** Press enter to finish character generation:{n ")
- ################################################################################
- # character generation hooks
- ################################################################################
- def char_gen_hook(info):
- '''Put a socket into the character generation menu when character generation
- hooks are called.
- '''
- sock, = hooks.parse_info(info)
- sock.push_ih(mudsys.handle_cmd_input, mudsys.show_prompt, "playing")
- sock.push_ih(cg_finish_handler, cg_finish_prompt)
- sock.push_ih(cg_race_handler, cg_race_prompt)
- sock.push_ih(cg_sex_handler, cg_sex_prompt)
- sock.push_ih(cg_name_handler, cg_name_prompt)
- def guest_gen_hook(info):
- sock, = hooks.parse_info(info)
- sock.push_ih(mudsys.handle_cmd_input, mudsys.show_prompt, "playing")
- # make the guest character
- ch = mudsys.create_player("Guest")
- # oops...
- if ch == None:
- sock.send("Sorry, there were issues creating a guest account.")
- sock.close()
- mudsys.attach_char_socket(ch, sock)
- ch.rdesc = "a guest player is here, exploring the world."
- ch.name = ch.name + str(ch.uid)
- ch.race = "human"
- # log that the character created
- mud.log_string("Guest character created (id %d)." % ch.uid)
- # make him exist in the game for functions to look him up
- mudsys.try_enter_game(ch)
- # run the init_player hook
- hooks.run("init_player", hooks.build_info("ch", (ch,)))
- # clear our screen
- ch.act("clear")
- # send them the motd
- ch.page(mud.get_motd())
-
- # make him look at the room
- ch.act("look")
- # run our enter hook
- hooks.run("enter", hooks.build_info("ch rm", (ch, ch.room)))
- ################################################################################
- # loading and unloading the module
- ################################################################################
- hooks.add("create_character", char_gen_hook)
- hooks.add("create_guest", guest_gen_hook)
- def __unload__():
- '''removes the hooks for character generation'''
- hooks.remove("create_character", char_gen_hook)
- hooks.remove("create_guest", guest_gen_hook)
|