Create a functioning, magical pipe
This fixes an issue for using the RP system with the built-in funcparser, and the "actor stance".
This commit is contained in:
parent
bd745e999b
commit
166bfed218
8 changed files with 132 additions and 36 deletions
|
|
@ -1,9 +1,11 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from .command import Command
|
||||
from evennia.commands.default.muxcommand import MuxCommand
|
||||
from evennia import CmdSet
|
||||
from evennia.utils import logger
|
||||
|
||||
from .command import Command
|
||||
|
||||
|
||||
class CmdKnock(Command):
|
||||
"""
|
||||
|
|
@ -70,3 +72,56 @@ class CmdThrow(Command):
|
|||
class CmdSetStick(CmdSet):
|
||||
def at_cmdset_creation(self):
|
||||
self.add(CmdThrow)
|
||||
|
||||
|
||||
class CmdLight(Command):
|
||||
"""
|
||||
Light something on fire, preferably a pipe.
|
||||
|
||||
Usage:
|
||||
|
||||
light [ object ]
|
||||
"""
|
||||
key = "light"
|
||||
locks = "cmd:holds()"
|
||||
|
||||
def func(self):
|
||||
self.obj.do_light(self.caller)
|
||||
|
||||
|
||||
class CmdSmoke(MuxCommand):
|
||||
"""
|
||||
Smoke and blow a shape with your magical pipe.
|
||||
|
||||
Usage:
|
||||
|
||||
smoke [ options [= description]]
|
||||
|
||||
Where 'options' can be:
|
||||
|
||||
- ring : a traditional or multicolored smoke ring
|
||||
- dragon : a dragon shape
|
||||
|
||||
If an 'option' is not given, then resorts to the attribute,
|
||||
'smoke_msg'.
|
||||
"""
|
||||
key = "smoke"
|
||||
aliases = ['puff', 'blow']
|
||||
locks = "cmd:holds()"
|
||||
|
||||
def func(self):
|
||||
if self.lhs:
|
||||
if self.lhs == 'ring':
|
||||
self.obj.do_ring(self.caller, self.rhs)
|
||||
elif self.lhs == 'dragon':
|
||||
self.obj.do_dragon(self.caller, self.rhs)
|
||||
else:
|
||||
self.caller.msg(f"The option, '{self.lhs}' isn't available.")
|
||||
else:
|
||||
self.obj.do_smoke(self.caller)
|
||||
|
||||
|
||||
class CmdSetSmoke(CmdSet):
|
||||
def at_cmdset_creation(self):
|
||||
self.add(CmdLight)
|
||||
self.add(CmdSmoke)
|
||||
|
|
|
|||
|
|
@ -274,12 +274,14 @@ class Character(Object, GenderCharacter, ContribRPCharacter):
|
|||
# function call.
|
||||
return super().at_look(target)
|
||||
|
||||
def announce_action(self, message):
|
||||
def announce_action(self, message, exclude=None):
|
||||
"""
|
||||
Replaces a location's 'msg_contents' with an emote.
|
||||
"""
|
||||
targets = [item for item in self.location.contents if item != self]
|
||||
send_emote(self, targets, f"/Me {message}", msg_type="say", anonymous_add=None, quiet=True)
|
||||
# All this does is add the character's gender to the message:
|
||||
newmsg = sub(r"\$pron\((.*?)\)", f"$pron(\\1, {self.db.gender})", message)
|
||||
choose = choices(newmsg)
|
||||
self.location.msg_contents(f"{choose}", from_obj=self, exclude=exclude)
|
||||
|
||||
def spell_sequence(self, location, messages, time_delay=1):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -110,8 +110,7 @@ class Teapot(Object):
|
|||
desc = routput(TEA_TYPES[self.db.tea_type])
|
||||
|
||||
self.db.desc = f"A large, brown teapot full of {desc}."
|
||||
drinker.msg(f"You make a teapot of {desc}.")
|
||||
drinker.announce_action(f"makes a teapot of {desc}.")
|
||||
drinker.announce_action(f"$You() $conj(make) a teapot of {desc}.")
|
||||
|
||||
def do_fill(self, drinker):
|
||||
teatype = self.db.tea_type
|
||||
|
|
|
|||
|
|
@ -162,17 +162,12 @@ class Fire(Pet):
|
|||
get_up = ""
|
||||
gets_up = ""
|
||||
if giver.db.is_sitting:
|
||||
get_up = "get up and"
|
||||
gets_up = "gets up and"
|
||||
get_up = "$conj(get) up and"
|
||||
|
||||
if self.db.hunger_level < 5:
|
||||
giver.msg(squish(f"You {get_up} put {adj} wood in the "
|
||||
f"fireplace, and start a fire."))
|
||||
giver.announce_action(f"{gets_up} starts a fire.")
|
||||
giver.announce_action(f"$You() {get_up} $conj(start) a fire.")
|
||||
else:
|
||||
giver.msg(squish(f"You {get_up} put {adj} wood on the "
|
||||
f"fire in the fireplace."))
|
||||
giver.announce_action(f"{gets_up} put wood on the fire.")
|
||||
giver.announce_action(f"$You() {get_up} << $conj(feed) ^ put {adj} wood on >> the fire << in the fireplace ^ >>.")
|
||||
|
||||
def feed(self, giver, obj=None):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -165,8 +165,7 @@ class Book(Readable):
|
|||
self.cmdset.add_default(CmdSetBook)
|
||||
|
||||
def do_read(self, reader):
|
||||
super().do_read(reader)
|
||||
reader.announce_action("reads |p book.")
|
||||
reader.announce_action("$You() $conj(read) $pron(your) book.")
|
||||
|
||||
def at_pre_drop(self, reader):
|
||||
if reader.location.key == "Dabbler's House":
|
||||
|
|
|
|||
|
|
@ -88,9 +88,15 @@ class Room(ObjectParent, ExtendedRoom, ContribRPRoom):
|
|||
return "|n"
|
||||
|
||||
def get_display_characters(self, looker, *args, **kwargs):
|
||||
num_chars = len(self.contents_get(content_type="character"))
|
||||
chars = self.contents_get(content_type="character")
|
||||
vchars = self.filter_visible(chars, looker, **kwargs)
|
||||
num_chars = len(vchars)
|
||||
|
||||
char_list = super().get_display_characters(looker, pose=True)
|
||||
if len(self.filter_visible(self.contents_get(content_type="object"), looker, **kwargs)) > 0:
|
||||
|
||||
# We add the word 'also' in case we showed there were objects:
|
||||
objs = self.contents_get(content_type="object")
|
||||
if len(objs) > 0:
|
||||
also = 'also '
|
||||
else:
|
||||
also = ''
|
||||
|
|
|
|||
|
|
@ -44,8 +44,7 @@ class Sittable(Object):
|
|||
|
||||
self.db.sitter = sitter
|
||||
sitter.db.is_sitting = self
|
||||
sitter.msg(self.sit_msg())
|
||||
sitter.announce_action(f"sits {adjective} {article} {self.key}.")
|
||||
sitter.announce_action(f"$You() $conj(sit) {adjective} {article} {self.key}.")
|
||||
|
||||
def do_stand(self, stander):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from random import choice, random
|
||||
from random import choice, random, randint
|
||||
from enum import Enum
|
||||
|
||||
from evennia import create_script
|
||||
from evennia.utils import logger, delay
|
||||
|
||||
from commands.misc import CmdSetPuddle, CmdSetStick, CmdSetKnock
|
||||
from commands.misc import CmdSetPuddle, CmdSetStick, CmdSetKnock, CmdSetSmoke
|
||||
from commands.wizards import CmdSetWand
|
||||
from utils.word_list import routput, choices
|
||||
from .scripts import KnockScript
|
||||
|
|
@ -111,7 +111,9 @@ class Pipe(Object):
|
|||
|
||||
Where the |p is a possessive gender, if set, e.g. his or her.
|
||||
|
||||
The random messages has available substitutions based on if the message is for the smoker or for the audience in the room. Specifically:
|
||||
The random messages has available substitutions based on if the
|
||||
message is for the smoker or for the audience in the room.
|
||||
Specifically:
|
||||
|
||||
- {0} :: either "you" or your name
|
||||
- {1} :: either "your" or your name with an apostrophe 's.
|
||||
|
|
@ -120,16 +122,54 @@ class Pipe(Object):
|
|||
For instance:
|
||||
|
||||
@set pipe/random_msgs = "{0} blow{1} a <<large ^ small ^ >> smoke-ring followed by another that flies through the first. ;; {1} smoke collesce to form a <<dragon ^ large woodland beast ^ beholder ^ bugbear>> ... or
|
||||
"""
|
||||
def do_light(self, lighter):
|
||||
you_msg = choices(self.db.light_msg or "You pack and light your pipe.")
|
||||
lighter.msg(you_msg)
|
||||
# desc = self.return_appearance()[:1].lower() + self.return_appearance()[1:]
|
||||
other_msg = choices(self.db.light_msg_other or "packs and lights |p pipe.")
|
||||
lighter.announce_action(other_msg)
|
||||
|
||||
def do_puff(self, smoker):
|
||||
pass
|
||||
"""
|
||||
def at_object_creation(self):
|
||||
self.cmdset.add_default(CmdSetSmoke)
|
||||
|
||||
def do_light(self, lighter):
|
||||
msg = choices(self.db.light_msg or "$You() $conj(pack) and $conj(light) $pron(your) pipe.")
|
||||
lighter.announce_action(msg)
|
||||
|
||||
def do_smoke(self, smoker):
|
||||
msg = choices(self.db.smoke_msg or "$You() << $conj(lean) back and ^ >> << $conj(puff) ^ $conj(smoke) >> $pron(your) pipe.")
|
||||
smoker.announce_action(msg)
|
||||
|
||||
def do_ring(self, smoker, details=None):
|
||||
self.db._last_option = 'ring'
|
||||
self.db._last_detail = details
|
||||
|
||||
details = details or ""
|
||||
msg = choices(f"$You() $conj(blow) a {details} << smoke ring ^ ring of smoke >>.")
|
||||
smoker.announce_action(msg)
|
||||
if randint(1, 10) < 5:
|
||||
delay(randint(5, 15), self.do_ring_dissipate)
|
||||
|
||||
def do_ring_dissipate(self):
|
||||
msg = choices("""
|
||||
The smoke ring << flies around before it ^ shoots across the room before it ^ >> << eventually ^ finally >> << dissipates ^ disperses >>. ;;
|
||||
The ring hovers, spinning in place, before << dissipating ^ dispersing >>. ;;
|
||||
The smoke ring changes << colors ^ to purple ^ to blue ^ to pink>> before << dissipating ^ dispersing >>.
|
||||
""")
|
||||
self.location.location.msg_contents(msg)
|
||||
|
||||
def do_dragon(self, smoker, details=None):
|
||||
self.db._last_option = 'dragon'
|
||||
self.db._last_detail = details
|
||||
|
||||
details = details or ""
|
||||
msg = choices(f"The smoke from $pron(your) pipe << coalesces ^ coheres >> << to form ^ into the shape of ^ and resembles ^ to look like >> a {details} dragon.")
|
||||
smoker.announce_action(msg)
|
||||
|
||||
if randint(1, 10) < 8:
|
||||
delay(randint(5, 15), self.do_dragon_dissipate)
|
||||
|
||||
def do_dragon_dissipate(self):
|
||||
msg = choices("""
|
||||
The smoke dragon << flies around ^ soars across the room ^ bellows >> before it << eventually ^ finally >> << dissipates ^ disperses >>. ;;
|
||||
The smoke dragon changes << colors ^ to purple ^ to blue ^ to pink>> before << dissipating ^ dispersing >>.
|
||||
""")
|
||||
self.location.location.msg_contents(msg)
|
||||
|
||||
|
||||
class Wood(Object):
|
||||
|
|
@ -163,7 +203,8 @@ class Stick(Object):
|
|||
"This is a <<fun ^ pleasant ^ nice>> <<past-time ^ game>>.",
|
||||
"Maybe we should get a pet <<or beast ^ beastie ^ >> in here who would love to play.",
|
||||
], thrower.name.capitalize()))
|
||||
thrower.announce_action("throws |p stick.")
|
||||
thrower.announce_action("$You() $conj(throw) $pron(your) stick.",
|
||||
exclude=thrower)
|
||||
else:
|
||||
thrower.msg("I think you should be outside or a place with more room before you throw that stick around.")
|
||||
|
||||
|
|
@ -197,7 +238,8 @@ class Puddle(Object):
|
|||
"happy.",
|
||||
"great.",
|
||||
])))
|
||||
player.announce_action("jumps in the puddle.")
|
||||
player.announce_action("$You() << $conj(jump) ^ $conj(splash) ^ $conj(play) >> in the puddle.",
|
||||
exclude=player)
|
||||
|
||||
|
||||
class Knocker_Convo(Enum):
|
||||
|
|
@ -399,8 +441,7 @@ class Knocker(Object):
|
|||
("waker", self),
|
||||
("room", self.db.room_to_msg)
|
||||
])
|
||||
knocker.msg("You grab the ring and knock firmly on the door.")
|
||||
knocker.announce_action("grabs the ring and knocks firmly on the door.")
|
||||
knocker.announce_action("$You() $conj(grab) the ring and $conj(knock) << firmly ^ loudly ^ aggressively >> on the door.")
|
||||
else:
|
||||
knocker.msg("This door knocker is defective, as it doesn't have a ring to...er, do the knockin'.")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue