Changeset 135

Show
Ignore:
Timestamp:
04/26/08 15:14:21 (7 months ago)
Author:
thib
Message:

Player et NonPlayableCharacter? héritent maintenant de Movable

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • adventure/place.py

    r131 r135  
    1919 
    2020from xmpp import Message, Presence, NS_MUC_USER 
     21 
     22from thing import NonPlayableCharacter 
    2123 
    2224class Place: 
     
    4547            message = '/me disintegrates' 
    4648         
    47         if player.is_npc
     49        if isinstance(player, NonPlayableCharacter)
    4850            player.trigger_event('on-self-leave') 
    4951            self.npcs.remove(player) 
     
    8789        self.broadcast_message(player.name, message) 
    8890         
    89         if player.is_npc
     91        if isinstance(player, NonPlayableCharacter)
    9092            self.npcs.append(player) 
    9193            player.trigger_event('on-self-enter') 
  • adventure/player.py

    r134 r135  
    33#  MUDMUC 
    44#  player.py 
    5 #  Copyright (c) 2008 Thibaut GIRKA, Anaël Verrier 
     5#  Copyright (c) 2008 Thibaut Girka, Anaël Verrier 
    66 
    77#  This program is free software; you can redistribute it and/or modify 
     
    2323from sha import sha 
    2424 
    25 from thing import Thing 
    2625from xmpp import Message, Presence, NS_MUC_USER, NS_VCARD, Node 
    2726 
    28 class Player(object): 
     27class Player(Movable): 
    2928    def __init__(self, world, name, jid): 
    30         self.world = world 
    31         self.name = name 
    32         self.jid = unicode(jid) 
    33         self.place = None 
    34         self.presence = None 
    35          
    36         self.vcard = None 
    37          
    38         self.is_npc = False 
    39          
     29        Movable.__init__(self, world, name, jid) 
    4030        self.inventory = list() 
    41      
    42     def set_vcard(self, image=None, birthday=None): 
    43         vcard = Node(NS_VCARD + ' vCard') 
    44         vcard.addChild(node=Node('NICKNAME', {}, self.name)) 
    45         if image: 
    46             if not isabs(image): 
    47                 image = path_join(self.world.data_dir, image) 
    48             if isfile(image): 
    49                 file = open(image, 'rb') 
    50                 data = file.read() 
    51                 encoded_data = encodestring(data) 
    52                 mime = guess_mimetype(image)[0] 
    53                 file.close() 
    54                 photo = vcard.setTag('PHOTO') 
    55                 photo.addChild(node=Node('TYPE', {}, mime)) 
    56                 photo.addChild(node=Node('BINVAL', {}, encoded_data)) 
    57                  
    58                 vcard_pres = self.presence.getTag(NS_VCARD + ':x:update x') 
    59                 if not vcard_pres: 
    60                     vcard_pres = self.presence.setTag(NS_VCARD + ':x:update x') 
    61                 vcard_pres.addChild(node=Node('photo', {}, 
    62                                               sha(data).hexdigest())) 
    63              
    64         if birthday: 
    65             vcard.addChild(node=Node('BDAY', {}, birthday)) 
    66         #TODO: DESC 
    67         self.vcard = vcard 
    6831 
    6932    def send_message(self, fromresource, text, subject=None, 
     
    8245        pres.setTo(self.jid) 
    8346        self.world.send(fromresource, pres) 
    84      
    85     def say(self, text, target=None): 
    86         """ Make the player say something. If target is None, broadcast """ 
    87         if target is None: 
    88             self.place.broadcast_message(self.name, text) 
    89         else: 
    90             target.send_message(self.name, text) 
    91      
    92     def move_to(self, to_, warning=True): 
    93         """ Move the player to its new place """ 
    94         oldplace = self.place 
    95         self.place = to_ 
    96         if self.place: 
    97             self.place.player_entered(self, oldplace) 
    98         elif warning: 
    99             self.send_message(None, 
    100                               'Sorry! The room isn\'t available!\n' 
    101                               'It\'s a bug for sure ' 
    102                               '(either in the data ' 
    103                               'either in the engine) :/') 
    104         if oldplace is not None: 
    105             oldplace.player_leaved(self) 
    10647                               
    107     def fix_presence(self, role=None, affiliation=None): 
    108         """ 
    109         Fix presence: Remove double presence tag and set 
    110         the specified role and affiliation 
    111         """ 
    112         if not role: 
    113             if self.is_npc: 
    114                 role = 'participant' 
    115                 affiliation = 'member' 
    116             else: 
    117                 role = 'visitor' 
    118                 affiliation = 'none' 
    119         pres = Presence(node=self.presence) 
    120         tag_x = pres.getTag(NS_MUC_USER + ' x') 
    121         if not tag_x: 
    122             tag_x = pres.setTag(NS_MUC_USER + ' x') 
    123         tag_item = tag_x.getTag(NS_MUC_USER + ' item') 
    124         if not tag_item: 
    125             tag_item = tag_x.setTag(NS_MUC_USER + ' item') 
    126         tag_item.setAttr('affiliation', affiliation) 
    127         tag_item.setAttr('role', role) 
    128         return pres 
     48    def fix_presence(self, role='visitor', affiliation='none'): 
     49        return Movable.fix_presence(self, role, affiliation) 
    12950 
    130  
    131 class NonPlayableCharacter(Player, Thing): 
    132     def __init__(self, world, name, jid, place): 
    133         Player.__init__(self, world, name, jid) 
    134         Thing.__init__(self, world, name, place) 
    135          
    136         self.on_self_enter = list() 
    137         self.on_self_leave = list() 
    138          
    139         self.is_npc = True 
    140      
    141  
  • adventure/thing.py

    r131 r135  
    1717#  along with this program; if not, write to the Free Software 
    1818#  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
     19 
     20from movable import Movable 
    1921 
    2022class Thing: 
     
    113115        #   <follow [target="actor|self|name"] /> 
    114116        elif action['name'] == 'follow': 
    115             if target.place is not None and not target.is_npc
     117            if target.place is not None and not isinstance(target, NonPlayableCharacter)
    116118                forbidden_places = params.split(',') 
    117119                for i in xrange(len(forbidden_places)): 
     
    225227                        return True 
    226228        return False 
     229 
     230class NonPlayableCharacter(Movable, Thing): 
     231    def __init__(self, world, name, jid, place): 
     232        Movable.__init__(self, world, name, jid) 
     233        Thing.__init__(self, world, name, place) 
     234         
     235        self.on_self_enter = list() 
     236        self.on_self_leave = list() 
     237     
     238    def fix_presence(self, role='participant', affiliation='member'): 
     239        return Movable.fix_presence(self, role, affiliation) 
     240 
  • adventure/world.py

    r131 r135  
    2525 
    2626from place import Place 
    27 from player import Player, NonPlayableCharacter 
    28 from thing import Thing 
     27from player import Player 
     28from thing import Thing, NonPlayableCharacter 
    2929 
    3030class World: