From e25d8569bbe992bebe868f3d49409d4fb945dc56 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 22 Feb 2015 20:51:18 +0100 Subject: [PATCH] Moved much of @ic functionality into puppet_object. --- evennia/commands/default/player.py | 24 ------------------------ evennia/players/players.py | 15 ++++++++++----- evennia/server/serversession.py | 2 +- 3 files changed, 11 insertions(+), 30 deletions(-) diff --git a/evennia/commands/default/player.py b/evennia/commands/default/player.py index bdabac0cf9..6ab9531008 100644 --- a/evennia/commands/default/player.py +++ b/evennia/commands/default/player.py @@ -249,30 +249,6 @@ class CmdIC(MuxPlayerCommand): else: self.msg("That is not a valid character choice.") return - # permission checks - if player.get_puppet(sessid) == new_character: - self.msg("{RYou already act as {c%s{n." % new_character.name) - return - if new_character.player: - # may not puppet an already puppeted character - if new_character.sessid.count() and new_character.player == player: - # as a safeguard we allow "taking over" chars from your own sessions. - if MULTISESSION_MODE in (1, 3): - txt = "{c%s{n{G is now shared from another of your sessions.{n" - txt2 = "Sharing {c%s{n with another of your sessions." - else: - txt = "{c%s{n{R is now acted from another of your sessions.{n" - txt2 = "Taking over {c%s{n from another of your sessions." - player.unpuppet_object(new_character.sessid.get()) - player.msg(txt % (new_character.name), sessid=new_character.sessid.get()) - self.msg(txt2 % new_character.name) - elif new_character.player != player and new_character.player.is_connected: - self.msg("{c%s{r is already acted by another player.{n" % new_character.name) - return - if not new_character.access(player, "puppet"): - # main acccess check - self.msg("{rYou may not become %s.{n" % new_character.name) - return if player.puppet_object(sessid, new_character): player.db._last_puppet = new_character else: diff --git a/evennia/players/players.py b/evennia/players/players.py index 018cea0850..5c3ac6ab4a 100644 --- a/evennia/players/players.py +++ b/evennia/players/players.py @@ -182,12 +182,15 @@ class DefaultPlayer(PlayerDB): if self.get_puppet(sessid) == obj: # already puppeting this object return - if obj.player: + if not obj.access(self, 'puppet'): + # no access + self.msg("You don't have permission to puppet '%s'." % obj.key) + return + if normal_mode and obj.player: # object already puppeted if obj.player == self: if obj.sessid.count(): # we may take over another of our sessions - self.unpuppet_object(obj.sessid.get()) # output messages to the affected sessions if _MULTISESSION_MODE in (1, 3): txt1 = "{c%s{n{G is now shared from another of your sessions.{n" @@ -197,12 +200,11 @@ class DefaultPlayer(PlayerDB): txt2 = "Taking over {c%s{n from another of your sessions." self.msg(txt1 % obj.name, sessid=obj.sessid.get()) self.msg(txt2 % obj.name, sessid=sessid) + self.unpuppet_object(obj.sessid.get()) elif obj.player.is_connected: # controlled by another player + self.msg("{R{c%s{R is already puppeted by another Player.") return - if not obj.access(self, 'puppet'): - # no access - return # do the puppeting if normal_mode and session.puppet: @@ -238,7 +240,10 @@ class DefaultPlayer(PlayerDB): session = self.get_session(sessid) if not session: return False + session = make_iter(session)[0] + print "unpuppet, session:", session, session.puppet obj = hasattr(session, "puppet") and session.puppet or None + print "unpuppet, obj:", obj if not obj: return False # do the disconnect, but only if we are the last session to puppet diff --git a/evennia/server/serversession.py b/evennia/server/serversession.py index b7a36c2b75..276358b9a6 100644 --- a/evennia/server/serversession.py +++ b/evennia/server/serversession.py @@ -12,7 +12,7 @@ from datetime import datetime from django.conf import settings #from evennia.scripts.models import ScriptDB from evennia.comms.models import ChannelDB -from evennia.utils import logger, utils +from evennia.utils import logger from evennia.utils.inlinefunc import parse_inlinefunc from evennia.utils.utils import make_iter from evennia.commands.cmdhandler import cmdhandler