#include "language.h"
inherit "/std/object";
object *writing_on;
int ink_amt,
size;
object ink_ob;
void create() {
::create();
set_name("quill");
set_long("A nice long feathered quill.\n");
writing_on = ({ });
set_weight(10);
size = 10;
}
void init() {
::init();
this_player()->add_command("dip", this_object(), "%D %p %I");
this_player()->add_command("write", this_object(), "%p %I 'with' %D");
this_player()->add_command("write", this_object(), "'with' %D %p %I");
}
int do_dip(object *obs) {
int i;
for (i=0;i<sizeof(obs);i++)
if ((ink_ob=(object)obs[i]->query_object_for_splash()) && ink_ob->query_ink()) {
this_player()->add_succeeded(obs[i]);
ink_ob = obs[i];
return 1;
}
ink_ob = 0;
return 0;
}
int do_write(object *obs) {
int i;
string lang;
lang = (string)this_player()->query_current_language();
if (!LANGUAGE_HAND->query_language_written(lang)) {
write("You are not using a written language.\n");
return 0;
}
if (sizeof(writing_on)) /* Look! We are already writing on it... sheeze. */
return 0;
if (!ink_ob) {
write("You dont have any ink on "+short(0)+"!\n");
return 0;
}
for (i=0;i<sizeof(obs);i++)
if (obs[i]->query_property("writeable"))
writing_on += ({ obs[i] });
if (!sizeof(writing_on))
return 0;
this_player()->add_succeeded(writing_on[0]);
write("Message to write on "+writing_on[0]->short()+"\n");
say(this_player()->query_cap_name()+" starts writing on "+
writing_on[0]->short()+".\n");
this_player()->do_edit(0, "finished_editing");
this_player()->supresse_add_command(); /* Supress the message printing. */
return 1;
}
int finished_editing(string str) {
string lang;
lang = (string)this_player()->query_current_language();
if (!str || str == "") {
write("Not writing anything on "+writing_on[0]->short()+".\n");
} else if (!LANGUAGE_HAND->query_language_written(lang)) {
write("You seem to have changed to using a non written language.\n");
} else {
/* Ok... now do the writing itself... */
if (member_array(ink_ob, (object *)environment()->find_inv_match()) == -1 &&
member_array(ink_ob, (object *)this_player()->find_inv_match()) == -1) {
write("You have lost your ink.\n");
return 1;
}
ink_amt = strlen(str)/10;
/* I dont think we need this....
str = replace(str, ({ "\n\n", "\n", "\n", " " }) );
*/
str = (string)writing_on[0]->add_read_mess(str,
ink_ob->query_liquid_name(), lang, size);
if (ink_ob->query_volume() < ink_amt) {
str = str[0..(int)ink_ob->query_volume()*10];
write("Due to a shortage of ink you only write '"+str+"' on "+
writing_on[0]->short()+".\n");
} else
write("You write '"+str+"' on "+writing_on[0]->short()+".\n");
ink_ob->adjust_volume(-strlen(str)/10);
if (!strlen(str))
write("Your ink ran out and you could not write on "+
writing_on[0]->short()+".\n");
say(this_player()->query_cap_name()+" writes on "+
writing_on[0]->short()+" with "+short(0)+".\n");
}
writing_on = writing_on[1..1000];
if (sizeof(writing_on)) {
write("Writing on "+writing_on[0]->short()+".\n");
this_player()->do_edit(0, "finished_editing");
return 1;
}
return 1;
}
void heart_beat() {
ink_amt -= 2;
if (ink_amt <=0 ) {
ink_amt = 0;
set_heart_beat(0);
}
}