// Petrarch
// Merentha Lib 1.0
// chat.c
#include <daemons.h>
#include <chat.h>
#include <std.h>
inherit DAEMON;
mapping __Channels=([]), __Blocked=([]);
void register_channels(string *channels, object player) {
int i;
if(!channels || !player) return;
i=sizeof(channels);
while(i--) {
if(!__Blocked[channels[i]]) __Blocked[channels[i]]=({});
if(!__Channels[channels[i]]) __Channels[channels[i]]=({});
__Channels[channels[i]]=__Channels[channels[i]]+({player});
}
}
int send_message(string player, string channel, string message, int emote) {
object ob;
if(!player || !channel) return 0;
if(member_array(channel, keys(__Channels))==-1) return 0;
//tell_object(find_player("cratylus"),"hi!");
if(!message) {
if(!ob=this_player()) return 0;
if(member_array(ob, __Blocked[channel])==-1) {
__Blocked[channel]=__Blocked[channel]+({ob});
message(channel, "Channel ["+channel+"] blocked.", ob);
}
else {
__Blocked[channel]=__Blocked[channel]-({ob});
message(channel, "Channel ["+channel+"] unblocked.", ob);
}
return 1;
}
if(member_array(channel, MIS_CHANNELS)!=-1 && this_player()) {
NETWORK_D->send_rcre_request(player, message);
}
if(message[0]==':' && member_array(message[1..1], ({"P","p",")","(","-"}))==-1) {
emote=1;
message=message[1..<0];
}
if(emote) message(channel,"%^BLUE%^[%^RED%^"+channel+"%^BLUE%^]%^RESET%^ "+player+" "+message, __Channels[channel]-__Blocked[channel]);
else message(channel, player+" %^BLUE%^[%^RED%^"+channel+"%^BLUE%^]%^RESET%^ "+message, __Channels[channel]-__Blocked[channel]);
if(member_array(channel,INTERMUD_D->GetChannels()) != -1){
//if(previous_object() != find_object("/daemon/services/channel"))
if(this_player())
SERVICES_D->eventSendChannel(capitalize(player),channel,message);
}
return 1;
}
void create() {
string ns = INTERMUD_D->GetNameserver();
if(sizeof(users())) call_out("remake",0);
foreach(string canal in ({"intermer","imud_code","dchat","dead_test4"}) ){
INTERMUD_D->eventWrite(({ "channel-listen", 5, mud_name(), 0, ns,
0, canal, 1 }));
}
}
void remake() {
users()->add_channels();
}
mapping get_chans(){
return copy(__Channels);
}