Make chardelete work also if switching ic/ooc state. Made the same fix to evmenu itself. Resolves #1035.

This commit is contained in:
Griatch 2016-09-03 15:47:14 +02:00
parent af8e54c027
commit f6286accea

View file

@ -216,10 +216,9 @@ class CmdEvMenuNode(Command):
""" """
Implement all menu commands. Implement all menu commands.
""" """
caller = self.caller def _restore(caller):
menu = caller.ndb._menutree or self.session.ndb._menutree # check if there is a saved menu available.
if not menu: # this will re-start a completely new evmenu call.
# check if there is a saved menu available
saved_options = caller.attributes.get("_menutree_saved") saved_options = caller.attributes.get("_menutree_saved")
if saved_options: if saved_options:
startnode = caller.attributes.get("_menutree_saved_startnode") startnode = caller.attributes.get("_menutree_saved_startnode")
@ -227,14 +226,28 @@ class CmdEvMenuNode(Command):
saved_options[1]["startnode"] = startnode saved_options[1]["startnode"] = startnode
# this will create a completely new menu call # this will create a completely new menu call
EvMenu(caller, *saved_options[0], **saved_options[1]) EvMenu(caller, *saved_options[0], **saved_options[1])
return True
return caller = self.caller
menu = caller.ndb._menutree
if not menu: if not menu:
err = "Menu object not found as %s.ndb._menutree!" % (caller) if _restore(caller):
caller.msg(err) return
raise EvMenuError(err) orig_caller = caller
caller = caller.player
menu = caller.ndb._menutree
if not menu:
if _restore(caller):
return
caller = self.session
menu = caller.ndb._menutree
if not menu:
# can't restore from a session
err = "Menu object not found as %s.ndb._menutree!" % (orig_caller)
orig_caller.msg(err)
raise EvMenuError(err)
# we have a menu, use it.
menu._input_parser(menu, self.raw_string, caller) menu._input_parser(menu, self.raw_string, caller)
@ -791,6 +804,13 @@ class CmdGetInput(Command):
"This is called when user enters anything." "This is called when user enters anything."
caller = self.caller caller = self.caller
callback = caller.ndb._getinputcallback callback = caller.ndb._getinputcallback
if not callback:
# this can be happen if called from a player-command when IC
caller = self.player
callback = caller.ndb._getinputcallback
if not callback:
raise RuntimeError("No input callback found.")
prompt = caller.ndb._getinputprompt prompt = caller.ndb._getinputprompt
result = self.raw_string.strip() # we strip the ending line break caused by sending result = self.raw_string.strip() # we strip the ending line break caused by sending