"""Amulet of Lifesaving. This is the cool stuff.
Copyright 2001 Cabochon Technologies, Inc.
Author: Steve Yegge
"""
from wyvern.lib import Monster, HookCallback
from wyvern.lib.classes.armor import Amulet
from wyvern.world import World
class amulet_lifesaving(Amulet, HookCallback):
def initialize(self):
self.super__initialize()
self.setDefaultImage("magic/amulet")
self.setProperty('short', 'amulet')
self.setProperty('id', 'Amulet of Lifesaving')
self.setProperty('id-desc', "This amulet will save the wearer's life. It only works ONCE.")
def setWorn(self, worn, agent):
# no change -> do nothing
if self.isWorn() == worn:
return
self.super__setWorn(worn, agent)
# make sure they're a monster
if not isinstance(agent, Monster):
return
if worn:
agent.addHook(self, 'deathPreHook')
agent.addHook(self, 'deathFailedPostHook')
else:
agent.removeHook(self, 'deathPreHook')
agent.removeHook(self, 'deathFailedPostHook')
# if they're about to die, save them
def hookEvent(self, hookname, event):
# pre-hook
if hookname == 'deathPreHook':
self.agent = event.getAgent()
event.veto ( "You die.\nBut wait! " \
+ "Your medallion begins to glow." \
+ "\nYour life has been saved." )
# post-hook
else:
self.forceRemoval()
agent = self.agent
inv = agent.getInventory()
inv.remove(self)
self.destroy()
agent.message ( 'Your medallion crumbles to dust.' )
# adjustHP doesn't go over their max
agent.adjustHP(agent.getIntProperty('max-hp'))
agent.adjustSP(agent.getIntProperty('max-sp'))
agent.broadcast ( agent.toString() + \
"'s life has been saved." )
# loc = World.getRestartLocation()
# cmd = "teleport " + loc.getMap() + " " + \
# str(loc.getX()) + " " + str(loc.getY())
# agent.commandNow(cmd)
def isIdentified(self):
if self.hasProperty("identified"):
return 1
return not self.hasProperty("id")
|