#include <player.h> #include <drinks.h> #include <language.h> inherit COMMAND_BASE; inherit SPEECH_BASE; #define BEEP sprintf("%c",7) #define NO_QUIT_INVENTORY 1 #define NO_QUIT_COMBAT 2 string query_shout_word_type( string str ); void my_mess( string fish, string erk ); /** * @ignore yes * ok... the shout cost is charged for every 10 letters, plus a bonus * one for the start charge.. SO a shout of yes will cost 1 social * point... where as a shout of lots a letters will cost lots */ int cmd( string str ) { string s1, s2, s; string cur_lang; if( !str || str == "") return notify_fail("Syntax : shout <text>\n"); if( !ENV(TP) ) return notify_fail("You appear to be in limbo...\n"); if( TP->query_property("dead") ) return notify_fail("You don't have any lungs, how can you shout?\n"); if( TP->check_earmuffs("shout") ) return notify_fail("Why shout when you can't hear people shout " "back?\n"); cur_lang = TP->query_current_language(); if( !LANGUAGE_H->query_language_spoken(cur_lang) ) return notify_fail( CAP(cur_lang)+" is not a spoken language.\n"); if( !LANGUAGE_H->query_language_distance(cur_lang) ) return notify_fail( CAP(cur_lang)+" cannot be spoken at a " "distance.\n"); if( TP->query_invis() ) return notify_fail("Invisible people cannot shout, they cannot " "see their arm in front of their face. Shouting is out of " "the question.\n"); if( TP->query_gagged() ) return notify_fail("You have been gagged! You will not be able " "to shout again until the gag is removed. Perhaps you should " "talk to a creator about this.\n"); if( TP->query_property("recently shouted") ) { return notify_fail("You have shouted very recently, perhaps you " "should give your lungs a small break and try again in a " "couple seconds.\n"); TP->add_property("recently shouted", 1, 2 ); } if( userp(TP) && !creatorp(TP) ) { if( TP->adjust_sp( -SHOUT_COST * ( strlen(str) / 10 + 1 ) ) < 0 ) return notify_fail(NO_POWER); TP->adjust_max_sp( -(SHOUT_COST * ( strlen(str) / 10 + 1 ) / 10 ) ); TP->add_property("recently shouted", 1, 2 ); } // Remove colour shouts 'properly'. while( strsrch( str, "%^") != -1 ) str = replace_string(str, "%^", ""); if( !interactive(TP) ) { str = TP->convert_message( str ); str = TP->fit_message( str ); } s1 = query_shout_word_type(str); if( s1 != "yell") s = "shouts" + s1; else s = s1 + "s"; str = replace( str, BEEP, ""); if( TP->query_volume( D_ALCOHOL ) ) str = drunk_speech( str ); TP->remove_hide_invis("hiding"); if( s1 != "yell") { if( cur_lang != "common") s1 += " in "+cur_lang; my_mess("You shout" + s1 + ": ", str ); } else { if( cur_lang != "common") s1 += " in "+cur_lang; my_mess("You " + s1 + ": ", str ); } s2 = " " + lower_case(str); user_event( TP, "person_shout", TP->a_short()+" "+s, str, cur_lang, ENV(TP)->query_co_ord(), ( 100 * ( TP->query_con() + TP->query_str() ) ) / 3 ); ENV(TP)->event_person_shout( 0, TP->one_short()+" "+s, str+"%^RESET%^", cur_lang ); BROADCASTER->npc_shout_event( TP, TP->a_short()+" "+s, str+"%^RESET%^", cur_lang, ENV(TP)->query_co_ord(), ( 100 * ( TP->query_con() + TP->query_str() ) ) / 3 ); return 1; } /* cmd() */ /** @ignore yes */ string query_shout_word_type( string str ) { switch( str[<1] ) { case '!': return "yell"; case '?': return " asking"; default: return ""; } } /* query_shout_word_type() */ /** @ignore yes */ void my_mess( string fish, string erk ) { if( !interactive(TP) ) return; printf("%s%-=*s\n", fish, TP->query_cols() - strlen(fish), TP->fix_string(erk) ); } /* my_mess() */