battle.py
上传用户:ghyvgy
上传日期:2009-05-26
资源大小:547k
文件大小:2k
源码类别:

其他游戏

开发平台:

Python

  1. # battle.py
  2. #
  3. # A SafeSandbox that represents a combat arena, where 
  4. # fighting is allowed.
  5. #
  6. class Battle:
  7.   """A place where you can engage in combat."""
  8.   def Init(self):
  9.     print 'Battle.Init()'
  10.     self.RegisterHandler(gameeventkeys.ByEvent(gameevents.ACTION_ATTACK_SUCCESS), self.OnAttackSuccess)
  11.     self.RegisterHandler(gameeventkeys.ByEvent(gameevents.ACTION_ATTACK_FAILURE), self.OnAttackFailure)
  12.     # create some stuff
  13.     self.CreateItem('Weapon', 'Longsword')
  14.     self.CreateItem('Weapon', 'Shortsword')
  15.   def OnPlayerEnter(self, key):
  16.     print 'OnPlayerEnter( %s )' % (key,)    
  17.     self.ClientMessage(key.subj, 'Let the battle begin!')
  18.   def OnPlayerExit(self, key):
  19.     print 'OnPlayerExit( %s )' % (key,)    
  20.     player = self.GetGameObject(key.subj)
  21.     if player.GetHealth() > 0:
  22.       self.ClientMessage(key.subj, 'You are lucky to escape alive.')
  23.     else:
  24.       self.ClientMessage(key.subj, 'You suffered a crushing defeat.')
  25.   def OnAttackSuccess(self, key, damage):
  26.     print 'OnAttackSuccess( %s, %s )' % (key, damage)
  27.     source = self.GetGameObject(key.src)
  28.     target = self.GetGameObject(key.subj)
  29.     for playerid in self.playerids:
  30.       if playerid != key.subj and playerid != key.src:
  31.         # don't notify or target - they already know
  32.         self.ClientMessage(playerid, '%s attacked %s for %s damage.' % (source.GetName(), target.GetName(), damage))
  33.   def OnAttackFailure(self, key):
  34.     print 'OnAttackFailure( %s )' % (key,)
  35.     source = self.GetGameObject(key.src)
  36.     target = self.GetGameObject(key.subj)
  37.     for playerid in self.playerids:
  38.       if playerid != key.subj and playerid != key.src:
  39.         # don't notify source or target - they already know
  40.         self.ClientMessage(playerid, '%s attacked %s and missed.' % (source.GetName(), target.GetName()))