nakedmudv3.3/
nakedmudv3.3/lib/
nakedmudv3.3/lib/logs/
nakedmudv3.3/lib/misc/
nakedmudv3.3/lib/players/
nakedmudv3.3/lib/txt/
nakedmudv3.3/lib/world/
nakedmudv3.3/lib/world/examples/
nakedmudv3.3/lib/world/examples/mproto/
nakedmudv3.3/lib/world/examples/oproto/
nakedmudv3.3/lib/world/examples/reset/
nakedmudv3.3/lib/world/examples/rproto/
nakedmudv3.3/lib/world/examples/trigger/
nakedmudv3.3/lib/world/limbo/
nakedmudv3.3/lib/world/limbo/room/
nakedmudv3.3/lib/world/limbo/rproto/
nakedmudv3.3/src/alias/
nakedmudv3.3/src/char_vars/
nakedmudv3.3/src/editor/
nakedmudv3.3/src/example_module/
nakedmudv3.3/src/help/
nakedmudv3.3/src/set_val/
nakedmudv3.3/src/socials/
nakedmudv3.3/src/time/
################################################################################
#
# cmd_comm.c
#
# Various commands used in NakedMud(tm) for communicating with other
# characters, and NPCs.
#
################################################################################
from mud import *
from mudsys import add_cmd
import inform, hooks



def cmd_ask(ch, cmd, arg):
    '''cmd_ask is used to pose a question to another character. Mostly, this is
       intended to be used to carry on dialogs with NPCs. Ask has a local range
       (i.e. you can only ask people in the same room as you questions)
       usage: ask <person> [about] <question>

       examples:
         ask bob about cats           ask bob about the topic, "cats"
         ask jim can I have a salad?  ask jim if you can have a salad'''
    try:
        tgt, question = parse_args(ch, True, cmd, arg,
                                   "ch.room.noself [about] string")
    except: return

    question = question.replace("$", "$$")
    message(ch, tgt, None, None, False, "to_vict",
            "{w$n asks you, '" + question + "'{n")
    message(ch, tgt, None, None, False, "to_char",
            "{wYou ask $N, '" + question + "'{n")

    # run our ask hooks
    hooks.run("ask", hooks.build_info("ch ch str", (ch, tgt, question)))

def cmd_tell(ch, cmd, arg):
    '''cmd_tell sends a message to another character. Primarily intended for
       player-player communication. Players can tell other players things even
       if they are not in the same room.
       usage: tell <person> <mesage>
       
       examples:
         tell luke I am your father'''
    try:
        tgt, mssg = parse_args(ch, True, cmd, arg, "ch.world.noself string")
    except: return

    mssg = mssg.replace("$", "$$")
    message(ch, tgt, None, None, False, "to_vict",
            "{r$n tells you, '" + mssg + "'{n")
    message(ch, tgt, None, None, False, "to_char",
            "{rYou tell $N, '" + mssg + "'{n")

def cmd_chat(ch, cmd, arg):
    '''cmd_chat sends a message to all of the players currently logged on.
       usage: chat <message>

       example:
         chat hello, world!'''
    if arg == '':
        ch.send("Chat what?")
    else:
        arg = arg.replace("$", "$$")
        message(ch, None, None, None, False, "to_world",
                "{y$n chats, '" + arg + "'{n")
        message(ch, None, None, None, False, "to_char",
                "{yyou chat, '" + arg + "'{n")

def cmd_say(ch, cmd, arg):
    '''cmd_say sends a message to everyone in the same room as you. Say, like
       ask, can trigger NPC dialogs.
       usage: say <message>

       example:
         say hello, room!'''
    if arg == '':
        ch.send(ch, "Say what?")
    else:
        arg = arg.replace("$", "$$")
        message(ch, None, None, None, False, "to_room",
                "{y$n says, '" + arg + "'{n")
        message(ch, None, None, None, False, "to_char",
                "{yyou say, '" + arg + "'{n")        

        # run say hooks
        hooks.run("say", hooks.build_info("ch str", (ch, arg)))

def cmd_greet(ch, cmd, arg):
    '''NPCs with dialogs will often have something to say when you
       greet/approach then. cmd_greet is a way to get them talking.
       usage: greet <person>

       examples:
         greet mayor'''
    try:
        tgt, = parse_args(ch, True, cmd, arg, "ch.room.noself")
    except: return

    message(ch, tgt, None, None, False, "to_char", "You greet $N.")
    message(ch, tgt, None, None, False, "to_vict", "$n greets you.")
    message(ch, tgt, None, None, False, "to_room", "$n greets $N.")

    # run greet hooks
    hooks.run("greet", hooks.build_info("ch ch", (ch, tgt)))

def cmd_emote(ch, cmd, arg):
    '''Send a special text message to the room you are in. The message is
       preceded by your name, unless you put a $n somewhere in the text, in
       which case the $n is replaced by your name.
       usage: emote <message>

       examples:
         emote does a little dance.
         emote A gunshot sounds, and $n is laying on the ground, dead.'''
    if arg == '':
        ch.send(ch, "Emote we must, but emote what?")
    else:
        # see if a $n is within the argument ... if there is, let the person
        # put his or her name where it's wanted. Otherwise, tag it onto the
        # front of the message
        if arg.find("$n") == -1:
            arg = "$n " + arg
        message(ch, None, None, None, False, "to_room, to_char", arg)

def cmd_gemote(ch, cmd, arg):
    '''cmd_gemote is similar to emote, but it sends a global message'''
    if arg == '':
        ch.send(ch, "Gemote we must, but gemote what?")
    else:
        # same as emote, but global
        if arg.find("$n") == -1:
            arg = "$n " + arg
        message(ch, None, None, None, False, "to_world, to_char",
                "{bGLOBAL:{c " + arg + "{n")

def cmd_page(ch, cmd, arg):
    '''Send a message to another character, and also make it beep'''
    try:
        tgt, mssg = parse_args(ch, True, cmd, arg, "ch.world.noself string")
    except: return
    ch.send("\007\007You page " + inform.see_char_as(ch, tgt))
    tgt.send("\007\007*" + inform.see_char_as(tgt, ch) + "* " + mssg)



################################################################################
# add our commands
################################################################################
add_cmd("ask",     None, cmd_ask,   "sitting", "flying", "player", True, False)
add_cmd("say",     None, cmd_say,   "sitting", "flying", "player", True, False)
add_cmd("'",       None, cmd_say,   "sitting", "flying", "player", True, False)
add_cmd("tell",    None, cmd_tell,  "sitting", "flying", "player", True, False)
add_cmd("chat",    None, cmd_chat,  "sitting", "flying", "player", True, False)
add_cmd("gossip",  None, cmd_chat,  "sitting", "flying", "player", True, False)
add_cmd("\"",      None, cmd_chat,  "sitting", "flying", "player", True, False)
add_cmd("page",    None, cmd_page,  "sitting", "flying", "player", True, False)
add_cmd("greet",   None, cmd_greet, "sitting", "flying", "player", True, False)
add_cmd("approach",None, cmd_greet, "sitting", "flying", "player", True, False)
add_cmd("emote",   None, cmd_emote, "sitting", "flying", "player", True, False)
add_cmd("gemote",  None, cmd_gemote,"sitting", "flying", "player", True, False)
add_cmd(":",       None, cmd_emote, "sitting", "flying", "player", True, False)