예제 #1
0
  def _Attack(self, targetPlayerId):
    """
    Protected.
    Attack the target player with your weapon.
    """
    if self.currentRoom:
      room = objmgr.GetObject(self.currentRoom)
      weapon = self._GetWeapon() 
      if not weapon:
        request.ClientMessage(self.id, 'You have no weapon equipped.')
        return

      targetPlayer = objmgr.GetObject(targetPlayerId)
      if targetPlayer.currentRoom != self.currentRoom:
        request.ClientMessage(self.id, 'You are not in the same room as %s' % (targetPlayer.name))
        return
       
      print 'here'
      # compute success
      import random
      if random.random() > weapon.tohit:
        # compute damage
        damage = random.randint(weapon.mindamage, weapon.maxdamage)
        # notify whoever cares; note that damage is an arg
        room.eventManager.PostGameEvent(gameeventkeys.GameEventKey(gameevents.ACTION_ATTACK_SUCCESS, self.id, targetPlayerId), 0.0, damage)
        request.ClientMessage(self.id, 'You attacked %s for %s damage.' % (targetPlayer.name, damage))
      else:
        room.eventManager.PostGameEvent(gameeventkeys.GameEventKey(gameevents.ACTION_ATTACK_FAILURE, self.id, targetPlayerId), 0.0)
        request.ClientMessage(self.id, 'You missed.')
예제 #2
0
 def _Wave(self, targetPlayerId):
   """
   Protected.
   Wave at the targetPlayer.
   """
   if self.currentRoom:
     room = objmgr.GetObject(self.currentRoom)
     room.eventManager.PostGameEvent(gameeventkeys.GameEventKey(gameevents.ACTION_WAVE, self.id, targetPlayerId), 0.0)
예제 #3
0
  def ExitRoom(self, player):
    if not player.id in self.playerids:
      raise RuntimeError('Player %s is not in the room', (playerid,))
    else: 
      self.playerids.remove(player.id)
      player._OnExitRoom(self)

      # post a game event to notify whoever cares; spoof the sandbox as the source,
      # because restricted code may handle this event.
      self.eventManager.PostGameEvent(gameeventkeys.GameEventKey(gameevents.PLAYER_EXITS_ROOM, self.sandbox, player.id), 0.0)
예제 #4
0
 def _ReleaseItem(self, item):
   """
   Protected.
   Release ownership of an item.
   """
   if self.currentRoom:
     room = objmgr.GetObject(self.currentRoom)
     if item.id in self.inventory:
       room.eventManager.PostGameEvent(gameeventkeys.GameEventKey(gameevents.ACTION_PLACE_OBJECT, self.id, item.id), 0.0)
       return 1
     else:
       return 0
예제 #5
0
 def _AcquireItem(self, item):
   """
   Protected.
   Take ownership of an item.
   """
   if self.currentRoom:
     room = objmgr.GetObject(self.currentRoom)
     if item.id in room.itemids:
       room.eventManager.PostGameEvent(gameeventkeys.GameEventKey(gameevents.ACTION_TAKE_OBJECT, self.id, item.id), 0.0)
       return 1
     else:
       return 0
예제 #6
0
 def _OnAttackMe(self, key, damage):
   """
   Protected.
   Event handler activated when someone attacks me.
   """
   srcname = objmgr.GetObject(key.src).name
   self.health -= damage
   if self.health <= 0:
     request.ClientMessage(self.id, 'You were killed by %s.' % (srcname,))
     room = objmgr.GetObject(self.currentRoom)
     room.eventManager.PostGameEvent(gameeventkeys.GameEventKey(gameevents.PLAYER_DIES, self.id), 0.0)
     room.ExitRoom(self)
   else: 
     request.ClientMessage(self.id, '%s just attacked you for %s.' % (srcname, damage))