/* -*- LPC -*- */ /* * $Locker: $ * $Id: rem_ote.c,v 1.26 2003/03/14 22:28:21 pinkfish Exp $ * */ #include <library.h> #include <player.h> #include <network.h> #define TELL_REPLY_LOCK_ID "lock fluff" inherit "/cmds/base"; mixed cmd( object *obs, string words ) { object other; object *ok; object *ignoring; object *roleplaying; object *net_dead; object *fail; object *earmuffed; object *multiple_earmuffed; object *update_list; string* prop; string me_name; string tmp; string pad = " "; string* ok_string; int colour; if ( this_player()->query_role_playing() ) { add_failed_mess( "You cannot use remotes when you are role playing.\n" ); return -1; } /* Do not allow players with remotes ear muffed to use the command. */ if ( this_player()->check_earmuffs( "remote" ) ) { if (this_player()->query_earmuffs() == PLAYER_ALLOW_FRIENDS_EARMUFF) { if (sizeof(filter(obs, (: !this_player()->is_friend($1->query_name()) :)))) { add_failed_mess("One of the people you are trying to remote is not a " "friend (and you have tells earmuffed).\n"); return -1; } } else { return notify_fail( "You have remote ear muffed.\n" ); } } if ( userp( this_player() ) && !this_player()->query_creator() ) { if ( !LIBRARY->query_quest_done( (string)this_player()->query_name(), "remote" ) ) return notify_fail( NOT_ALLOWED ); if ( environment( this_player() )->query_property( "no remote" ) ) return 0; if ( (int)this_player()->adjust_sp( -REMOTE_COST ) < 0 ) return notify_fail( NO_POWER ); } ok = ({ }); ignoring = ({ }); roleplaying = ({ }); net_dead = ({ }); earmuffed = ({ }); multiple_earmuffed = ({ }); update_list = ({ }); if (sizeof(obs) == 0) { prop = this_player()->query_tell_reply_list(); if (prop) obs = map(prop, (: find_player($1) :)); else { add_failed_mess("No one has told you anything in the last 15 " "minutes.\n"); return 0; } } if (sizeof(obs) == 1 && obs[0] == this_player()) { add_failed_mess("Interesting way of expression emotion, try " "talking to someone else.\n"); return 0; } fail = this_player()->query_ignoring(obs); if ( sizeof( fail ) ) { write( "You are currently ignoring " + query_multiple_short(fail) + ", so you ought to leave " + (sizeof(fail) > 1 ? "them" : fail[0]->query_objective()) + " alone.\n" ); obs -= fail; } ok_string = ({ this_player()->query_name() }); foreach (other in obs) { if ( other && other->query_property( "ignoring" ) ) { if ( member_array( (string)this_player()->query_name(), other->query_property( "ignoring" ) ) != -1 && !this_player()->query_creator()) { ignoring += ({ other }); other = 0; } } // This check needs to be done separately. if ( other && other->query_role_playing() && !this_player()->query_creator() ) { roleplaying += ({ other }); other = 0; } if (other) { this_player()->adjust_time_left( -10 ); if( userp(other) && !interactive( other ) ) { net_dead += ({ other }); } else if( other->check_earmuffs( "remote" ) ) { earmuffed += ({ other }); } else if( other->check_earmuffs( "multiple-remote" ) && sizeof(obs) > 1) { multiple_earmuffed += ({ other }); } else if (other != this_player()) { /* other->event_emote( this_player(), "%^MAGENTA%^$C$"+ (string)this_player()->query_cap_name() +" "+ words +"%^RESET%^\n" ); */ ok += ({ other }); ok_string |= ({ other->query_name() }); prop = other->query_tell_reply_list(); if (prop && prop[0] == TELL_REPLY_LOCK_ID) { // Refresh if one of the locked people tells us. if (member_array(this_player()->query_name(), prop) != -1) { other->set_tell_reply_list(prop); } } else { update_list += ({ other }); } } } } update_list->set_tell_reply_list(ok_string); if( sizeof( ignoring ) ) { write( query_multiple_short(ignoring) + ( sizeof( ignoring ) > 1 ? " are":" is" ) + " ignoring you and will not have seen your message.\n" ); } if ( sizeof( roleplaying ) ) { write( query_multiple_short( roleplaying ) + ( sizeof( roleplaying ) > 1 ? " are":" is" ) + " currently role playing and will not have seen your message.\n" ); } if( sizeof( earmuffed ) ) { write( query_multiple_short( earmuffed ) + ( sizeof( earmuffed ) > 1 ? " have":" has" ) + " remotes earmuffed and will not have seen your message.\n" ); } if (sizeof( multiple_earmuffed)) { write( query_multiple_short( multiple_earmuffed ) + ( sizeof( multiple_earmuffed ) > 1 ? " have":" has" ) + " multiple-remotes earmuffed and will not have seen your " "message.\n" ); } colour = strsrch(words, "%^") != -1; // have a go at replacing multiple spaces with a single one. This should // stop anyone trying to format the emote to look as though it's an emote // followed by a tell or somesuch. words = replace(words, ({" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "})); if (colour) { words += "%^RESET%^"; } me_name = this_player()->query_short(); if (this_player()->query_family_name()) { me_name += " " + this_player()->query_family_name(); } if (words[0..0] == "'") pad = ""; if (sizeof(net_dead) || sizeof(ok)) { if (sizeof(ok + net_dead) > 1) { foreach(other in ok) { tmp = other->colour_event("remote", "%^MAGENTA%^"); other->event_emote(this_player(), tmp + "$C$Remotes to " + query_multiple_short(net_dead + ok) + ": " + me_name + pad + words + (colour?"\n" + tmp + "--End of remote--": "") + "%^RESET%^\n"); other->add_tell_history(me_name + " remotes ", words, 1); } } else { foreach(other in ok) { tmp = other->colour_event("remote", "%^MAGENTA%^"); other->event_emote(this_player(), tmp + "$C$" + me_name + pad + words + (colour?"\n" + tmp + "--End of remote--": "") + "%^RESET%^\n"); other->add_tell_history(me_name + " ", words, 1); } } this_player()->add_tell_history("You remote to " + query_multiple_short(net_dead + ok, "a", 1) + ": ", me_name + pad + words, 1); write( "You remote to " + query_multiple_short(net_dead + ok) + ": $C$" + me_name + pad + words +"%^RESET%^\n" ); } if( sizeof( net_dead ) ) { write( query_multiple_short( net_dead ) + ( sizeof( net_dead ) > 1 ? " are":" is" ) + " netdead and may not have seen your message.\n" ); } return 1; } /* cmd() */ mixed *query_patterns() { return ({ "<indirect:player> <string>", (: cmd($1, $4[1]) :), "reply <string>", (: cmd(({ }), $4[0]) :) }); } /* query_patterns() */