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.')
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)
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)
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
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
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))