mud/lib/verbs/common/channels.c
2020-09-06 05:43:07 -07:00

105 lines
2.8 KiB
C

#include <lib.h>
#include <daemons.h>
#include <talk_type.h>
inherit LIB_VERB;
static void create() {
verb::create();
SetVerb("channels");
SetRules("", "STR");
SetHelp("Syntax: channels [on | off]\n\n"
"With no argument this command will display the status "
"of the lines to which you have access. With the argument on|off "
"it will turn all of the lines on or off.\n"
"See also: chan, mute, gag, earmuff, env");
SetSynonyms(({"chans","lines"}));
}
int cmd(string str);
mixed can_channels(string str) { return 1; }
mixed can_channels_str(string str) { return 1; }
mixed do_channels(string str) {
return cmd(str);
}
mixed do_channels_str(string str) {
return cmd(str);
}
int cmd(string str) {
string *channels;
string *remote = ({});
string *local = ({});
string *i3 = ({});
string *imc2 = ({});
string ret = "", RemChans = CHAT_D->GetRemoteChannels();
int i;
channels = distinct_array(this_player()->GetChannels());
if(!str) str = "";
if(str=="on"){
for(i=0; i<sizeof(channels);i++){
if(this_player()->GetBlocked(channels[i]))
this_player()->SetBlocked(channels[i]);
}
}
if(str=="off"){
for(i=0; i<sizeof(channels);i++){
if(!this_player()->GetBlocked(channels[i]))
this_player()->SetBlocked(channels[i]);
}
}
foreach(string chan in channels){
string tmp = CHAT_D->GetRemoteChannel(chan);
if(member_array(tmp, RemChans) != -1){
remote += ({ chan });
if(!strsrch(tmp, "Server") && grepp(tmp, ":")){
imc2 += ({ chan });
}
else i3 += ({ chan });
}
else local += ({ chan });
}
if(sizeof(remote)){
ret += "REMOTE CHANNELS\n---------------\n";
if(sizeof(imc2)){
imc2 = sort_array(imc2, 1);
ret += "\nIMC2\n----\n";
foreach(string chan in imc2){
ret += chan + "\t" + (this_player()->GetBlocked(chan) ?
"(%^RED%^BLOCKED%^RESET%^)" : "") + "\n";
}
}
if(sizeof(i3)){
i3 = sort_array(i3, 1);
ret += "\nIntermud-3\n----------\n";
foreach(string chan in i3){
ret += chan + "\t" + (this_player()->GetBlocked(chan) ?
"(%^RED%^BLOCKED%^RESET%^)" : "") + "\n";
}
}
}
if(sizeof(local)){
local = sort_array(local, 1);
ret += "\n\nLOCAL CHANNELS\n---------------\n";
foreach(string chan in local){
ret += chan + "\t" + (this_player()->GetBlocked(chan) ?
"(%^RED%^BLOCKED%^RESET%^)" : "") + "\n";
}
}
if(!sizeof(ret)){
ret = "No channels found.";
}
write(ret);
return 1;
}