#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); } }