lpmud/mudlib/
lpmud/mudlib/doc/
lpmud/mudlib/doc/LPC/
lpmud/mudlib/log/
lpmud/mudlib/players/
lpmud/mudlib/room/maze1/
lpmud/mudlib/room/sub/
#include "std.h"

#undef EXTRA_INIT
#define EXTRA_INIT\
    add_action("mail"); add_verb("mail");\
    add_action("read_mail"); add_verb("read");

string messages;
string more_message, dest;
object now_writing;

#undef EXTRA_LONG
#define EXTRA_LONG\
    if (query_mail(1)) write("You have mail.\n");

ONE_EXIT("room/narr_alley", "north",
	  "The post office",
	  "This is the post office. If you want to send a mail to someone,\n"+
	  "do 'mail name'. If you want to read mail, do 'read'.\n" +
	  "If you want to give a message to the game master, use 'bug'.\n", 1)

mail(str)
{
    if (now_writing && living(now_writing)) {
	write("You have to wait for " + call_other(now_writing, "query_name") +
	    ".\n");
	return 1;
    }
    if (!str) {
	write("Mail who ?\n");
	return 1;
    }
    str = lower_case(str);
    if (!call_other(this_player(), "valid_name", str))
	return 1;
    if (!restore_object("players/" + str)) {
	write("There is no player with that name !\n");
	return 1;
    }
    now_writing = this_player();
    write("Give message. Terminate with '**'\n");
    write("]");
    input_to("more_mail");
    more_message = "";
    dest = str;
    return 1;
}

more_mail(str)
{
    if (str == "**") {
	save_message();
	now_writing = 0;
	return;
    }
    more_message = more_message + str + "\n";
    input_to("more_mail");
    write("]");
}

save_message()
{
    string mess, dest2;
    object ob;

    if (more_message == "") {
	write("Empty message. None sent.\n");
	return;
    }
    mess = more_message;
    dest2 = lower_case(dest);
    messages = "";
    restore_object("room/post_dir/" + dest2);
    if (messages == 0)
	messages = "";
    messages = messages + capitalize(call_other(this_player(), "query_real_name")) + "\n**\n"
		+ mess + "**\n";
    more_message = "";
    save_object("room/post_dir/" + dest2);
    write("Ok.\n");
    ob = find_living(dest2);
    if (ob)
	tell_object(ob, "You have new mail!\n");
}

read_mail() {
    string from, mess, name, rest_of_mess;
    int n;

    if (now_writing && living(now_writing)) {
	write("You have to wait for " + call_other(now_writing, "query_name") +
	    ".\n");
	return 1;
    }
    name = lower_case(call_other(this_player(), "query_name"));
    if (!restore_object("room/post_dir/" + name) || messages == "") {
	write("No mail !\n");
	return 1;
    }
    n = sscanf(messages, "%s\n**\n%s\n**\n%s", from, mess, rest_of_mess);
    if (n == 2)
	messages = "";
    else if (n != 3) {
	write("Mailbox corrupt. (" + n + ").\n");
	    return 1;
    }
    write("Mail from " + from + ":\n\n" + mess + "\n");
    messages = rest_of_mess;
    save_object("room/post_dir/" + name);
    return 1;
}

query_mail(silent) {
    string name;
    if (now_writing && living(now_writing))
	return 0;
    name = lower_case(call_other(this_player(), "query_name"));
    if (!restore_object("room/post_dir/" + name) || messages == "") {
	return 0;
    }
    if (silent)
	return 1;
    write("There is mail to you in the post office (south from village road).\n");
    return 1;
}