Fix the lighting of torches and stuff.
This commit is contained in:
parent
f02e16e1ba
commit
5bdb42042b
6 changed files with 84 additions and 65 deletions
|
|
@ -23,6 +23,7 @@ from commands.sittables import CmdNoSitStand
|
||||||
from commands.everyone import (CmdTake, CmdThink, CmdSay,
|
from commands.everyone import (CmdTake, CmdThink, CmdSay,
|
||||||
CmdWhisper, CmdRead, CmdEat, CmdDrink,
|
CmdWhisper, CmdRead, CmdEat, CmdDrink,
|
||||||
CmdUse, CmdPush, CmdPull)
|
CmdUse, CmdPush, CmdPull)
|
||||||
|
from commands.misc import CmdLight
|
||||||
from commands.wizards import CmdGM, CmdSpell, CmdGMTrigger, CmdMakeCocktail
|
from commands.wizards import CmdGM, CmdSpell, CmdGMTrigger, CmdMakeCocktail
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -46,6 +47,7 @@ class CharacterCmdSet(default_cmds.CharacterCmdSet):
|
||||||
self.add(CmdUse)
|
self.add(CmdUse)
|
||||||
self.add(CmdPush)
|
self.add(CmdPush)
|
||||||
self.add(CmdPull)
|
self.add(CmdPull)
|
||||||
|
self.add(CmdLight)
|
||||||
self.add(CmdTake)
|
self.add(CmdTake)
|
||||||
self.add(CmdThink)
|
self.add(CmdThink)
|
||||||
self.add(SetGender)
|
self.add(SetGender)
|
||||||
|
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
from evennia import Command, CmdSet
|
|
||||||
# from .command import Command
|
|
||||||
|
|
||||||
class CmdLight(Command):
|
|
||||||
"""
|
|
||||||
Creates light where there was none. Something to burn.
|
|
||||||
"""
|
|
||||||
|
|
||||||
key = "light"
|
|
||||||
# only allow this command if command.obj is carried by caller.
|
|
||||||
# locks = "cmd:holds()"
|
|
||||||
|
|
||||||
def func(self):
|
|
||||||
"""
|
|
||||||
Implements the light command. Since this command is designed
|
|
||||||
to sit on a "lightable" object, we operate only on self.obj.
|
|
||||||
"""
|
|
||||||
if self.obj.light():
|
|
||||||
self.caller.msg("You light %s." % self.obj.key)
|
|
||||||
self.caller.location.msg_contents(
|
|
||||||
"%s lights %s!" % (self.caller, self.obj.key), exclude=[self.caller])
|
|
||||||
else:
|
|
||||||
self.caller.msg("%s is already burning." % self.obj.key)
|
|
||||||
|
|
||||||
|
|
||||||
class CmdSetLight(CmdSet):
|
|
||||||
"""CmdSet for the lightsource commands"""
|
|
||||||
|
|
||||||
def at_cmdset_creation(self):
|
|
||||||
"""called at cmdset creation"""
|
|
||||||
self.add(CmdLight)
|
|
||||||
|
|
@ -75,17 +75,34 @@ class CmdSetStick(CmdSet):
|
||||||
|
|
||||||
class CmdLight(Command):
|
class CmdLight(Command):
|
||||||
"""
|
"""
|
||||||
Light something on fire, preferably a pipe.
|
Light something on fire.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
light [ object ]
|
light <object>
|
||||||
|
|
||||||
|
Want to relax into the old stories, light a pipe.
|
||||||
|
Want to see in a dungeon, use this to light a
|
||||||
|
torch or a candle, if you have such an item.
|
||||||
"""
|
"""
|
||||||
key = "light"
|
key = "light"
|
||||||
locks = "cmd:holds()"
|
|
||||||
|
|
||||||
def func(self):
|
def func(self):
|
||||||
self.obj.do_light(self.caller)
|
lighter = self.caller
|
||||||
|
item = self.args.strip()
|
||||||
|
if item == "":
|
||||||
|
lighter.msg("What do you want to light?")
|
||||||
|
return
|
||||||
|
|
||||||
|
burnables = lighter.search(item, location=lighter, quiet=True)
|
||||||
|
if burnables and len(burnables) > 0:
|
||||||
|
try:
|
||||||
|
burnables[0].do_light()
|
||||||
|
except Exception:
|
||||||
|
lighter.msg(f"The {burnables[0].key} isn't flammable.")
|
||||||
|
else:
|
||||||
|
lighter.msg(f"Can't find {item}.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CmdSmoke(MuxCommand):
|
class CmdSmoke(MuxCommand):
|
||||||
|
|
@ -122,7 +139,6 @@ class CmdSmoke(MuxCommand):
|
||||||
|
|
||||||
class CmdSetSmoke(CmdSet):
|
class CmdSetSmoke(CmdSet):
|
||||||
def at_cmdset_creation(self):
|
def at_cmdset_creation(self):
|
||||||
self.add(CmdLight)
|
|
||||||
self.add(CmdSmoke)
|
self.add(CmdSmoke)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
from commands.lighting import CmdSetLight
|
from evennia.utils import delay
|
||||||
|
|
||||||
|
from typeclasses.objects import Object
|
||||||
|
|
||||||
|
|
||||||
# -------------------------------------------------------------
|
# -------------------------------------------------------------
|
||||||
#
|
|
||||||
# LightSource
|
# LightSource
|
||||||
#
|
#
|
||||||
# This object emits light. Once it has been turned on it
|
# This object emits light. Once it has been turned on it
|
||||||
|
|
@ -16,7 +18,6 @@ from commands.lighting import CmdSetLight
|
||||||
# to use but does not survive a server @reload. Because of
|
# to use but does not survive a server @reload. Because of
|
||||||
# where the light matters (in the Dark Room where you can
|
# where the light matters (in the Dark Room where you can
|
||||||
# find new light sources easily), this is okay here.
|
# find new light sources easily), this is okay here.
|
||||||
#
|
|
||||||
# -------------------------------------------------------------
|
# -------------------------------------------------------------
|
||||||
|
|
||||||
class LightSource(Object):
|
class LightSource(Object):
|
||||||
|
|
@ -47,7 +48,7 @@ class LightSource(Object):
|
||||||
# when created.
|
# when created.
|
||||||
self.db.desc = "A tapered candle."
|
self.db.desc = "A tapered candle."
|
||||||
# add the Light command
|
# add the Light command
|
||||||
self.cmdset.add_default(CmdSetLight, persistent=True)
|
# self.cmdset.add_default(CmdSetLight, persistent=True)
|
||||||
|
|
||||||
def _burnout(self):
|
def _burnout(self):
|
||||||
"""
|
"""
|
||||||
|
|
@ -57,35 +58,38 @@ class LightSource(Object):
|
||||||
# delete ourselves from the database
|
# delete ourselves from the database
|
||||||
self.db.is_giving_light = False
|
self.db.is_giving_light = False
|
||||||
try:
|
try:
|
||||||
self.location.location.msg_contents(
|
owner = self.location
|
||||||
"%s's %s flickers and dies." % (self.location, self.key), exclude=self.location
|
owner.announce_action(f"$Your() {self.key} flickers and dies.")
|
||||||
)
|
|
||||||
self.location.msg("Your %s flickers and dies." % self.key)
|
|
||||||
self.location.location.check_light_state()
|
self.location.location.check_light_state()
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
try:
|
try:
|
||||||
self.location.msg_contents("A %s on the floor flickers and dies." % self.key)
|
self.location.msg_contents(f"A {self.key} on the floor flickers and dies.")
|
||||||
self.location.location.check_light_state()
|
self.location.location.check_light_state()
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
# Mainly happens if we happen to be in a None location
|
# Mainly happens if we happen to be in a None location
|
||||||
pass
|
pass
|
||||||
self.delete()
|
self.delete()
|
||||||
|
|
||||||
def light(self):
|
def do_light(self):
|
||||||
"""
|
"""
|
||||||
Light this object - this is called by Light command.
|
Light this object - this is called by Light command.
|
||||||
"""
|
"""
|
||||||
|
owner = self.location
|
||||||
if self.db.is_giving_light:
|
if self.db.is_giving_light:
|
||||||
|
owner.msg(f"The {self.key} is already lit.")
|
||||||
return False
|
return False
|
||||||
|
else:
|
||||||
|
owner.announce_action(f"$You() $conj(light) $pron(your) {self.key}.")
|
||||||
|
|
||||||
# burn for 3 minutes before calling _burnout
|
# burn for 3 minutes before calling _burnout
|
||||||
self.db.is_giving_light = True
|
self.db.is_giving_light = True
|
||||||
# if we are in a dark room, trigger its light check
|
# if we are in a dark room, trigger its light check
|
||||||
try:
|
try:
|
||||||
self.location.location.check_light_state()
|
owner.location.check_light_state()
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
try:
|
try:
|
||||||
# maybe we are directly in the room
|
# maybe we are directly in the room
|
||||||
self.location.check_light_state()
|
owner.check_light_state()
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
# we are in a None location
|
# we are in a None location
|
||||||
pass
|
pass
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,38 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Dark Room - a room with states
|
# Dark Room - a room with states
|
||||||
#
|
#
|
||||||
# This room limits the movemenets of its denizens unless they carry an active
|
# This room limits the movements of its denizens unless they carry an active
|
||||||
# LightSource object (LightSource is defined in objects.LightSource)
|
# LightSource object (LightSource is defined in objects.LightSource)
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
from random import choice, random
|
||||||
|
|
||||||
|
from evennia import (
|
||||||
|
TICKER_HANDLER,
|
||||||
|
CmdSet,
|
||||||
|
Command,
|
||||||
|
DefaultExit,
|
||||||
|
DefaultRoom,
|
||||||
|
create_object,
|
||||||
|
default_cmds,
|
||||||
|
search_object,
|
||||||
|
syscmdkeys,
|
||||||
|
utils,
|
||||||
|
)
|
||||||
|
from evennia.commands.default.general import CmdInventory
|
||||||
|
|
||||||
|
# from evennia.utils import dedent, delay, search
|
||||||
|
from evennia.contrib.rpg.rpsystem import CmdEmote
|
||||||
|
|
||||||
|
# from commands.command import Command
|
||||||
|
from commands.everyone import CmdSay, CmdWhisper
|
||||||
|
from commands.misc import CmdLight
|
||||||
|
from commands.wizards import CmdGM
|
||||||
|
from typeclasses.lightables import LightSource
|
||||||
|
from typeclasses.rooms import Room
|
||||||
|
|
||||||
DARK_MESSAGES = (
|
DARK_MESSAGES = (
|
||||||
"It is pitch black. You are likely to be eaten by a grue.",
|
"It is pitch black. You are likely to be eaten by a grue.",
|
||||||
|
|
@ -22,13 +46,14 @@ DARK_MESSAGES = (
|
||||||
|
|
||||||
ALREADY_LIGHTSOURCE = (
|
ALREADY_LIGHTSOURCE = (
|
||||||
"You don't want to stumble around in blindness anymore. You already "
|
"You don't want to stumble around in blindness anymore. You already "
|
||||||
"found what you need. Let's get the fireplace lit already!"
|
"found what you need. Let's get |glight|n already!"
|
||||||
)
|
)
|
||||||
|
|
||||||
FOUND_LIGHTSOURCE = (
|
FOUND_LIGHTSOURCE = (
|
||||||
"Your fingers bump against a candle on a candleabra."
|
"Your fingers bump against a splinter of wood."
|
||||||
|
" It smells of resin and seems dry enough to burn! "
|
||||||
"You pick it up, holding it firmly. Now you just need to"
|
"You pick it up, holding it firmly. Now you just need to"
|
||||||
" |wlight|n it using the flint and steel you carry with you."
|
" |glight|n it using the flint and steel you carry with you."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -62,9 +87,9 @@ class CmdLookDark(Command):
|
||||||
nr_searches = 0
|
nr_searches = 0
|
||||||
caller.ndb.dark_searches = nr_searches
|
caller.ndb.dark_searches = nr_searches
|
||||||
|
|
||||||
if nr_searches < 4 and random.random() < 0.90:
|
if nr_searches < 4 and random() < 0.90:
|
||||||
# we don't find anything
|
# we don't find anything
|
||||||
caller.msg(random.choice(DARK_MESSAGES))
|
caller.msg(choice(DARK_MESSAGES))
|
||||||
caller.ndb.dark_searches += 1
|
caller.ndb.dark_searches += 1
|
||||||
else:
|
else:
|
||||||
# we could have found something!
|
# we could have found something!
|
||||||
|
|
@ -73,7 +98,7 @@ class CmdLookDark(Command):
|
||||||
caller.msg(ALREADY_LIGHTSOURCE)
|
caller.msg(ALREADY_LIGHTSOURCE)
|
||||||
else:
|
else:
|
||||||
# don't have a light source, create a new one.
|
# don't have a light source, create a new one.
|
||||||
create_object(LightSource, key="candle", location=caller)
|
create_object(LightSource, key="splinter", location=caller)
|
||||||
caller.msg(FOUND_LIGHTSOURCE)
|
caller.msg(FOUND_LIGHTSOURCE)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -135,7 +160,12 @@ class DarkCmdSet(CmdSet):
|
||||||
self.add(CmdLookDark())
|
self.add(CmdLookDark())
|
||||||
self.add(CmdDarkHelp())
|
self.add(CmdDarkHelp())
|
||||||
self.add(CmdDarkNoMatch())
|
self.add(CmdDarkNoMatch())
|
||||||
self.add(default_cmds.CmdSay())
|
self.add(CmdEmote())
|
||||||
|
self.add(CmdSay())
|
||||||
|
self.add(CmdWhisper())
|
||||||
|
self.add(CmdGM())
|
||||||
|
self.add(CmdLight())
|
||||||
|
self.add(CmdInventory())
|
||||||
self.add(default_cmds.CmdQuit())
|
self.add(default_cmds.CmdQuit())
|
||||||
self.add(default_cmds.CmdHome())
|
self.add(default_cmds.CmdHome())
|
||||||
|
|
||||||
|
|
@ -213,17 +243,17 @@ class DarkRoom(Room):
|
||||||
# put players in darkness
|
# put players in darkness
|
||||||
char.msg("The room is completely dark.")
|
char.msg("The room is completely dark.")
|
||||||
|
|
||||||
def at_object_receive(self, obj, source_location, move_type="move", **kwargs):
|
def at_object_receive(self, moved_obj, source_location, move_type="move", **kwargs):
|
||||||
"""
|
"""
|
||||||
Called when an object enters the room.
|
Called when an object enters the room.
|
||||||
"""
|
"""
|
||||||
if obj.has_account:
|
if moved_obj.has_account:
|
||||||
# a puppeted object, that is, a Character
|
# a puppeted object, that is, a Character
|
||||||
self._heal(obj)
|
self._heal(moved_obj)
|
||||||
# in case the new guy carries light with them
|
# in case the new guy carries light with them
|
||||||
self.check_light_state()
|
self.check_light_state()
|
||||||
|
|
||||||
def at_object_leave(self, obj, target_location, move_type="move", **kwargs):
|
def at_object_leave(self, moved_obj, target_location, move_type="move", **kwargs):
|
||||||
"""
|
"""
|
||||||
In case people leave with the light, we make sure to clear the
|
In case people leave with the light, we make sure to clear the
|
||||||
DarkCmdSet if necessary. This also works if they are
|
DarkCmdSet if necessary. This also works if they are
|
||||||
|
|
@ -232,4 +262,4 @@ class DarkRoom(Room):
|
||||||
# since this hook is called while the object is still in the room,
|
# since this hook is called while the object is still in the room,
|
||||||
# we exclude it from the light check, to ignore any light sources
|
# we exclude it from the light check, to ignore any light sources
|
||||||
# it may be carrying.
|
# it may be carrying.
|
||||||
self.check_light_state(exclude=obj)
|
self.check_light_state(exclude=moved_obj)
|
||||||
|
|
|
||||||
|
|
@ -262,7 +262,7 @@ class Pipe(Object):
|
||||||
self.cmdset.add_default(CmdSetSmoke)
|
self.cmdset.add_default(CmdSetSmoke)
|
||||||
|
|
||||||
def do_light(self, lighter):
|
def do_light(self, lighter):
|
||||||
msg = choices(self.db.light_msg or "$You() $conj(pack) and $conj(light) $pron(your) pipe.")
|
msg = choices(self.db.light_msg or "$You() $conj(pack) and $conj(light) $pron(your) pipe. You can now |Glook|n around.")
|
||||||
lighter.announce_action(msg)
|
lighter.announce_action(msg)
|
||||||
|
|
||||||
def do_smoke(self, smoker):
|
def do_smoke(self, smoker):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue