#include "drinks.h"
#include "inet.h"
#include "player.h"
#include <network.h>
int social_points, max_social_points;
int guild_flag;
static string my_file_name;
string *languages,
cur_lang;
string drunk_speech(string str);
string *query_languages();
void communicate_commands() {
add_action("do_say","say");
add_action("do_loud_say", "lsay");
add_action("do_tell","tell");
add_action("do_tell","t");
add_action("do_whisper", "whisper");
add_action("set_language", "speak");
add_action("do_emote","emote");
/* Testing something, baldrick, may '96
* and it works.. next dimension, here we come.
*/
#ifndef STRICT_MUD
add_action("do_echo","echo");
add_action("do_emote_all", "emoteall");
add_action("do_echo_to", "echoto");
add_action("do_shout", "shout");
#endif
} /* communicate_commands() */
void set_max_social_points(int num) {
max_social_points = num;
} /* set_max_social_points() */
int query_max_social_points() {
return max_social_points;
} /* query_max_social_points() */
void set_social_points(int num) {
social_points = num;
} /* set_social_points() */
int query_social_points() {
return social_points;
} /* query_social_points() */
int adjust_social_points(int num)
{
int temp;
temp = social_points + num;
if(temp >= 0) {
social_points = temp;
if(social_points > max_social_points)
social_points = max_social_points;
return 1;
}
return -1;
} /* adjust_social_points() */
int hard_adjust_social_points(int num) {
social_points += num;
} /* hard_adjust_social_points() */
varargs string query_word_type(string str, string def)
{
int i;
for (i=strlen(str)-1;str[i] == ' ';i--);
switch (str[i]) {
case '!' : return "exclaim";
case '?' : return "ask";
default: if (def)
return def;
else
return "say";
}
} /* query_word_type() */
string query_shout_word_type(string str)
{
int i;
for (i=strlen(str)-1;str[i] == ' ';i--);
switch (str[i]) {
case '!' : return "yell";
case '?' : return " asking";
default: return "";
}
} /* query_shout_word_type() */
string query_whisper_word_type(string str) {
int i;
for (i=strlen(str)-1;str[i] == ' ';i--);
switch (str[i]) {
case '!' : return "urgently ";
case '?' : return "questioningly ";
default: return "";
}
} /* query_whisper_word_type() */
/* to properly columnate word_typed things */
void my_mess(string fish, string erk)
{
if(!interactive()) return;
efun::tell_object(this_object(), this_object()->fix_string(fish + erk,strlen(fish))+"\n");
} /* my_mess() */
int do_loud_say(string arg)
{
string word;
if (!arg)
arg = "";
if (arg == "" || arg == " ") {
notify_fail("Syntax: lsay <something>\n");
return 0;
}
if (!LANGUAGE_HAND->query_language_spoken(cur_lang)) {
notify_fail(capitalize(cur_lang)+" is not a spoken language.\n");
return 0;
}
word = query_word_type(arg);
if (this_object()->query_volume(D_ALCOHOL))
arg = drunk_speech(arg);
event(environment(), "person_say", this_object()->query_cap_name()+
" " + word + "s loudly: ",
arg, cur_lang);
if (cur_lang != "common") word += " in "+cur_lang;
my_mess("You " + word + " loudly: ", arg);
this_player()->adjust_time_left(-5);
return 1;
} /* do_loud_say() */
int do_say(string arg, int no_echo)
{
string word;
// Taniwha, sanity/ no debug errors
if(!environment(this_object()))
{
tell_object(this_object(),"In Limbo, noone can hear say anything.\n");
return 0;
}
if (!arg)
arg = "";
if (arg == "" || arg == " ") {
notify_fail("Syntax: say <something>\n");
return 0;
}
if (!LANGUAGE_HAND->query_language_spoken(cur_lang)) {
notify_fail(capitalize(cur_lang)+" is not a spoken language.\n");
return 0;
}
word = query_word_type(arg);
if (this_object()->query_volume(D_ALCOHOL))
arg = drunk_speech(arg);
event(environment(this_object()), "person_say", this_object()->query_cap_name()+
" " + word +"s: ", arg, cur_lang, this_object()->query_int());
if (!no_echo) {
if (cur_lang != "common")
word += " in "+cur_lang;
my_mess("You " + word + ": ", arg);
}
this_player()->adjust_time_left(-5);
return 1;
} /* do_say() */
int do_tell(string arg, object ob, int silent)
{
string str, rest, word;
string person, mud;
if ((!arg || arg == "") && !ob) {
notify_fail("Syntax: tell person <message>\n");
return 0;
}
if (!ob) {
if (sscanf(arg,"%s %s",str,rest)!=2) {
notify_fail("Syntax: tell <name> something\n");
return 0;
}
} else
rest = arg;
if (!LANGUAGE_HAND->query_language_spoken(cur_lang)) {
notify_fail(capitalize(cur_lang)+" is not a spoken language.\n");
return 0;
}
if (!LANGUAGE_HAND->query_language_distance(cur_lang)) {
notify_fail(capitalize(cur_lang)+" is not able to spoken at a "+
"distance.\n");
return 0;
}
if (!ob) {
str = lower_case(str);
str = (string)this_object()->expand_nickname(str);
ob = find_player(str);
if (!ob)
ob = find_living(str);
if (!ob) {
/* Might be intermud... */
if (this_object()->query_creator() && sscanf(str, "%s@%s", person, mud) == 2) {
SERVICES_D->eventSendTell(person, mud, rest);
return 1;
}
notify_fail(capitalize(str) + " is not logged in.\n");
return 0;
}
}
if (ob == this_player()) {
notify_fail("Talking to yourself again. I don't know.\n");
return 0;
}
if (ob->query_property("player") && !interactive(ob)) {
notify_fail(ob->query_cap_name()+" is net dead.\n");
return 0;
}
if(adjust_social_points(-TELL_COST) < 0) {
notify_fail(NO_POWER);
return 0;
}
word = query_word_type(rest, "");
if (word != "")
word = " " + word + "ing";
if (this_object()->query_volume(D_ALCOHOL))
arg = drunk_speech(arg);
if (word != " asking") {
ob->event_person_tell(this_object(), this_object()->query_cap_name()+
" tells you" + word + ": ", rest, cur_lang);
if (cur_lang != "common") word += " in "+cur_lang;
if (!silent)
my_mess("You tell " + ob->query_cap_name() + word + ": ", rest );
} else {
ob->event_person_tell(this_object(), this_object()->query_cap_name()+
" asks you: ", rest, cur_lang);
if (cur_lang != "common") word += " in "+cur_lang;
if (!silent)
my_mess("You ask " + ob->query_cap_name()+": ", rest);
}
this_player()->adjust_time_left(-5);
return 1;
} /* do_tell() */
int do_emote(string arg)
{
string str;
if(my_file_name=="/global/mortal" && !this_player()->query_property("emote")) {
notify_fail(NOT_ALLOWED);
return 0;
}
if (!arg)
arg = "";
str = query_verb();
if (arg == "" || arg == " ") {
notify_fail("Syntax: emote <womble>\n");
return 0;
}
if(adjust_social_points(-EMOTE_COST) < 0) {
notify_fail(NO_POWER);
return 0;
}
this_player()->adjust_time_left(-5);
str = (string)this_object()->query_cap_name()+" "+arg+"%^RESET%^\n";
say(str);
write(str);
return 1;
} /* do_emote() */
/* 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
*/
// Flode added 2-round lockout - 211197
int do_shout(string str)
{
string s1, s;
if(!str || str == "") {
notify_fail("Syntax : shout <text>\n");
return 0;
}
if (this_object()->query_property("noshout_lock")) {
notify_fail("You better clear your throat before you attempt to "
"shout again.\n");
return 0;
}
if (this_object()->query_earmuffs()) {
notify_fail("Why shout when you can't hear people shout back?\n");
return 0;
}
if (!LANGUAGE_HAND->query_language_spoken(cur_lang)) {
notify_fail(capitalize(cur_lang)+" is not a spoken language.\n");
return 0;
}
if (!LANGUAGE_HAND->query_language_distance(cur_lang)) {
notify_fail(capitalize(cur_lang)+" is not able to spoken at a "+
"distance.\n");
return 0;
}
if(adjust_social_points(-SHOUT_COST*((strlen(str)/10)+1)) < 0) {
notify_fail(NO_POWER);
return 0;
}
s1 = query_shout_word_type(str);
if (s1 != "yell")
s = "shouts"+s1;
else
s = s1+"s";
if (this_object()->query_volume(D_ALCOHOL))
str = drunk_speech(str);
str += "\n";
event(users(), "person_shout", this_object()->query_cap_name()+
" "+s+": ", str, cur_lang);
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);
}
str = " "+lower_case(str);
this_object()->add_timed_property("noshout_lock", 1, 2);
return 1;
} /* do_shout() */
int do_whisper(string str)
{
object *obs;
string s, s2, *bits;
int i;
notify_fail("Syntax: whisper [to] <person> <string>\n");
if (!str)
return 0;
if (!LANGUAGE_HAND->query_language_spoken(cur_lang)) {
notify_fail(capitalize(cur_lang)+" is not a spoken language.\n");
return 0;
}
sscanf(str, "to %s", str);
bits = explode(str, " ");
obs = ({ });
for (i=0;i<sizeof(bits);i++)
if (sizeof(obs = find_match(implode(bits[0..i], " "), environment())))
break;
s2 = implode(bits[i+1..100], " ");
if (sizeof(obs) == 1 && obs[0] == this_player()) {
say(this_player()->query_cap_name()+" whispers to "+
this_player()->query_objective()+"self.\n");
write("Whispering to your self!?\n");
return 1;
}
obs = obs - ({ this_player() });
for (i=0;i<sizeof(obs);i++)
if (!living(obs[i]))
obs = delete(obs, i--, 1);
if (!sizeof(obs)) {
notify_fail("Could not find anyone to whisper to.\n");
return 0;
}
if (this_object()->query_volume(D_ALCOHOL))
s2 = drunk_speech(s2);
s2 += "%^RESET%^";
s = query_whisper_word_type(s2);
event(environment(), "whisper", this_object()->query_cap_name() +
" whispers to " +s,s2,obs,cur_lang);
/* " whispers " + s, s2, obs, cur_lang); */
my_mess("You whisper " + s + "to " + query_multiple_short(obs) + ": ", s2);
this_player()->adjust_time_left(-5);
return 1;
} /* do_whisper() */
int do_channels( string str )
{
"global/do_chat"->do_chat( str, query_verb() );
return 1;
} /* do_channels */
string drunk_speech(string str)
{
return replace(str, ({ "s", "sh", "r", "rr", "ing", "in'", "x", "xsh",
"S", "SH", "R", "RR" }));
} /* drunk_speech() */
void add_language(string lang)
{
if (!LANGUAGE_HAND->test_language(lang))
return ;
// Flode added the 'if' - 150997
if(member_array(lang, languages) == -1)
languages += ({ lang });
} /* add_language() */
void remove_language(string lang)
{
int i;
if ((i = member_array(lang, languages)) == -1)
return ;
languages = delete(languages, i, 1);
if (lang == cur_lang) {
if (!sizeof(languages))
cur_lang = "grunt";
else
cur_lang = languages[0];
tell_object(this_object(), "You just forgot the language you were "+
"speaking. You are now speaking "+cur_lang+".\n");
}
} /* remove_language() */
int set_language(string str)
{
if (!str) {
notify_fail("You are now speaking "+cur_lang+" and can speak any of "+
query_multiple_short(this_object()->query_languages()+
({ "grunt"}))+".\n");
return 0;
}
if (member_array(str, this_object()->query_languages()+
({ "grunt" }))== -1) {
notify_fail("You do not know "+str+".\n");
return 0;
}
cur_lang = str;
tell_object(this_object(),"Now using "+str+" for speaking and writing.\n");
return 1;
} /* set_language() */
string query_current_language() { return cur_lang; }
string *query_languages()
{
string *race_lang = this_object()->query_race_ob()->query_race_lang();
if(!arrayp(race_lang))
return languages;
return languages + race_lang;
}
// Needed to be here - Radix Jan 1996
int query_known_language(string lang)
{
if(!lang) return(0);
if(member_array(lang,this_object()->query_languages()) != -1)
return(1);
return(0);
}