# # file:: corpse.rb # Author: Craig Smith # This source code copyright (C) 2009 Craig Smith # All rights reserved. # # Released under the terms of the TeensyMUD Public License # See LICENSE file for additional information. # $:.unshift "lib" if !$:.include? "lib" require 'gettext' require 'core/gameobject' require 'storage/properties' # This object doesn't do much but is a special object none the less class Corpse < Container include GetText bindtextdomain("core") logger 'DEBUG' property :rot_ticks, :eaten MAX_EATEN = 5 DEFAULT_ROT_TICKS = 25 def initialize(name, owner, location) super(name, owner, location) add_attribute(:fixed) self.rot_ticks = DEFAULT_ROT_TICKS # Tick count until decay self.eaten = 0 # Has corpse been eaten put_object(self) end # Trigger to describe a corpse # [+e+] Event info # [+return+] Undefined def describe(e) ch = get_object(e.from) o = get_object(owner) desc = "" desc = _("partially eaten ") if eaten > 0 msg = "[COLOR Yellow]" msg << "(#{id}) " if ch.get_stat(:debugmode) == true msg << _("The %{desc}corpse of %{name} is here[/COLOR]" % {:desc => desc, :name => o.name}) add_event(id, e.from, :show, msg) end # Resets the object back to it's original state def reset self.rot_ticks = DEFAULT_ROT_TICKS self.eaten = 0 self.contents.clear end # Event :eat # [+e+] Event info # [+return+] Undefined def eat(e) ch = get_object(e.from) o = get_object(owner) room = get_object(location) self.eaten += 1 ch.stats[:hunger] -= 50 ch.stats[:hunger] = 0 if ch.stats[:hunger] < 0 if eaten >= MAX_EATEN msg = Msg.new _("^p1 devours the corpse of %{name}" % {:name => o.name}) msg.p1 = ch.name room.say(msg) contents.each do |c| room.add_contents(c) delete_contents(c) end room.delete_contents(id) self.unused = true self.location = nil else msg = Msg.new _("^p1 begins eating the corpse of %{name}" % {:name => o.name}) msg.p1 = ch.name room.say(msg) end end # Event :rot # [+e+] Event info # [+return+] Undefined def rot(e) return if not location return if location == 0 room = get_object(location) return if not room.is_a? Room # Don't rot if something is odd self.rot_ticks -= 1 if self.rot_ticks < 1 o = get_object(owner) room.say(_("A horde of hungry maggots devour the corpse of %{name}" % {:name => o.name})) contents.each do |c| room.add_contents(c) delete_contents(c) get_object(c).location = location end room.delete_contents(id) self.unused = true self.location = nil end end end