/* /cmds/admin/_lawlog.c * from Nightmare IV * a command for keeping track of law matters * based on _changelog.c by Descartes of Borg * by Gregon@Nightmare */ #include <std.h> #include <dirs.h> #include <objects.h> #include <security.h> #define LAWLOG "LawLog" #define TMP_FILE DIR_TMP + "/" + (string)this_player()->query_name() + ".lawlog" inherit DAEMON; void post_change(mixed *args); void abort(); int cmd_lawlog(string str) { string *tmp; string who; int i; if(!str) return notify_fail("Correct syntax: lawlog [ha] player\n"); if(!archp(this_player())) return notify_fail("No, no, no...arches only.\n"); if(sscanf(str,"ha %s",who)==1) { if(member_group((string)this_player()->query_name(),"SECURE")) { message("system","Head arch option utilized. Editing law file on "+ who+" in /log/law/adm",this_player()); this_player()->edit(TMP_FILE, (:post_change:), (:abort:), ({lower_case(who), "/log/law/adm/"+lower_case(who)})); return 1; } else { message("system","Head arch option invalid. Editing law file on " +who+"in /log/law",this_player()); this_player()->edit(TMP_FILE, (:post_change:),(:abort:), ({lower_case(who), "/log/law/"+lower_case(who) }) ); return 1; } } message("system","Editing law file on "+str+" in /log/law",this_player()); this_player()->edit(TMP_FILE, (:post_change:),(:abort:), ({ lower_case(str), "/log/law/"+lower_case(str) }) ); return 1; } void post_change(mixed *args) { string *tmp; string who, str, str2, filename; int i, maxi; who=args[0]; filename=args[1]; if(!userp(previous_object())) return; if(!(str = read_file(TMP_FILE))) return; str = replace_string(str, "\n", " "); maxi = sizeof(tmp = explode(wrap(str, 60), "\n")); str = "- Log on "+capitalize(who)+"\n"; str += " "+ctime(time())+" by " +(string)previous_object()->query_CapName()+":\n"; for(i=0; i<maxi; i++) str += " * "+tmp[i]+"\n"; if(str2 = read_file(filename)) str2 = str+"\n\n"+str2; else str2 = str; rm(filename); rm(TMP_FILE); write_file(filename, str2); message("system", "Writing file "+filename,this_player()); } void help() { message("help","Syntax: lawlog [ha] player\n\nThis will place you in edit " "so that you can record law transgressions by or disciplinary " "action against a player. Files will be written to /log/law " "unless the ha option is specified, in which case if you are a " "head arch, the output will be written to /log/law/adm (a dir " "read/writable only by those with superuser access.)", this_player()); }