object mark;
init() {
add_action("i_dump"); add_verb("i_dump");
add_action("i_mark"); add_verb("i_mark");
add_action("i_destruct"); add_verb("i_destruct");
add_action("i_call"); add_verb("i_call");
}
i_dump(str) {
int tmp;
if (mark == 0) {
write("Nothing marked.\n");
return 1;
}
if (str == "list") {
object ob;
int i;
ob = first_inventory(mark);
while(ob) {
i += 1;
write(i + ":\t");
write(ob);
write("\t" + call_other(ob, "short") + "\n");
ob = next_inventory(ob);
}
return 1;
}
write(call_other(mark, "short"));
if (living(mark))
write("(living)\n");
if (call_other(mark, "query_npc"))
write("(NPC)");
write("\n");
tmp = call_other(mark, "query_value");
if (tmp)
write("Value:\t" + tmp + "\n");
tmp = call_other(mark, "query_weight");
if (tmp)
write("Weight:\t" + tmp + "\n");
return 1;
}
i_mark(str) {
string tmp;
if (str == 0)
return 0;
if (sscanf(str, "living %s", tmp) == 1) {
mark = find_living(tmp);
if (!mark) {
write("No such living object.\n");
return 1;
}
write(mark); write("\n");
return 1;
}
if (sscanf(str, "ob %s", tmp) == 1) {
mark = find_object(tmp);
if (!mark) {
write("No such object.\n");
return 1;
}
write(mark); write("\n");
return 1;
}
if (str == "up") {
if (mark == 0)
return 0;
if (environment(mark) == 0)
return 0;
mark = environment(mark);
write(mark); write("\n");
return 1;
}
if (str == "here") {
mark = environment(this_player());
write(mark); write("\n");
return 1;
}
if (sscanf(str, "%d", tmp) == 1) {
object ob;
if (mark == 0)
return 0;
ob = first_inventory(mark);
while(tmp > 1) {
tmp -= 1;
if (ob == 0)
return 0;
ob = next_inventory(ob);
}
if (ob == 0)
return 0;
mark = ob;
write(mark); write("\n");
return 1;
}
return 0;
}
id(str) {
return str == "marker";
}
short() {
return "Lars marker object";
}
long() {
write("Commands available:\n");
write("i_mark living 'name'\n");
write("i_mark here\n");
write("i_mark up\n");
write("i_dump list\n");
write("i_dump\n");
write("i_destruct\n");
write("i_call 'function'\n");
write("i_call 'function' 'argument'\n");
}
get() { return 1;}
query_value() {
return 10;
}
i_destruct() {
object ob;
if (!mark)
return 0;
ob = environment(mark);
destruct(mark);
write("Ok. New: "); write(ob); write("\n");
mark = ob;
return 1;
}
i_call(str) {
string with, what;
int iwhat;
if (!str)
return 0;
if (!mark) {
write("No object marked.\n");
return 1;
}
if (sscanf(str, "%s %d", with, what) == 2)
iwhat = 1;
else if (sscanf(str, "%s %s", with, what) != 2) {
if (sscanf(str, "%s", with) == 1)
iwhat = 0;
else
return 0;
}
write("Got: "); write(call_other(mark, with, what)); write("\n");
say(call_other(this_player(), "query_name") +
" patched the internals of " + call_other(mark, "short") + ".\n");
return 1;
}