mud/lib/secure/obj/snooper.c
2020-09-06 05:43:07 -07:00

89 lines
2.7 KiB
C

#include <lib.h>
#include ROOMS_H
#include <daemons.h>
#include <vendor_types.h>
inherit LIB_ITEM;
string guy, stringy;
int seconds;
object ob;
void create(){
item::create();
SetKeyName("snooper object");
SetId( ({"thing","item","thang","dingus","snooper","object"}) );
SetAdjectives( ({"invisible","snooper","snoop"}) );
SetShort("an invisible object");
SetLong("This is an object of indeterminate nature and proportions. "
"It is intentionally invisible, and your attempts to "
"understand it may constitute a security breach. You'd "
"be well advised to leave it alone.");
SetInvis(1);
set_heart_beat(10);
SetNoClean(1);
SNOOP_D->RegisterSnooper();
}
void init(){
::init();
}
void stamp_time(){
seconds = time();
write_file("/secure/log/adm/"+guy+".log","\n"+timestamp()+"\n");
}
void heart_beat(){
object dude;
if(!guy || !(dude = find_player(guy))) {
eventDestruct();
}
if(dude && environment(dude) && base_name(environment(dude)) == ROOM_FREEZER) eventDestruct();
if(time() - seconds > 600 ) stamp_time();
}
void receive_snoop(string str){
stringy = str;
unguarded((: write_file("/secure/log/adm/"+guy+".log",guy+" "+timestamp()+": "+stringy) :));
SNOOP_D->GetSnoop(guy, stringy);
if( file_size("/secure/log/adm/"+guy+".log") > 200000) {
write_file("/secure/log/adm/"+guy+".log","\nEND-OF-LOG\n");
if(!directory_exists("/secure/log/adm/archive/")) mkdir("/secure/log/adm/archive/");
rename("/secure/log/adm/"+guy+".log", "/secure/log/adm/archive/"+guy+"."+time());
}
}
int eventStartSnoop(string str){
string snoopee;
if(!str || str == "") return 0;
snoopee = "nobody";
str = lower_case(str);
guy = str;
if(!ob=find_player(str)) { write("Target not found."); return; }
unguarded((: write_file("/secure/log/adm/snoop.err",snoop(this_object(), ob)?"":guy+": snoop failed.\n") :));
if(query_snooping(this_object())) snoopee = identify(query_snooping(this_object()));
SNOOP_D->RegisterSnooper();
write_file("/secure/log/adm/"+str+".log","\nNEW SESSION: "+timestamp()+"\n");
return 1;
}
void receive_message(string s1, string s2){
stringy = s2;
unguarded((: write_file("/secure/log/adm/"+guy+".log",guy+": "+stringy) :));
SNOOP_D->GetSnoop(guy, stringy);
}
int eventDestruct(){
if(base_name(previous_object()) != SNOOP_D && !archp(previous_object(2)) &&
previous_object() != this_object()) return 0;
SNOOP_D->UnregisterSnooper();
return item::eventDestruct();
}
string GetSnooped(){
if( !(master()->valid_apply(({ "PRIV_ASSIST", "PRIV_SECURE", "SNOOP_D" }))) ) return "";
else return guy;
}