/* -*- LPC -*- */ #include <clubs.h> #include <mail.h> inherit COMMAND_BASE; #define CONTROL_ROOM "/std/room/club_control_room" // Length of a list entry #define ELEN 20 nosave string *bad_words = ({ "black", "blood", "cyber", "dark", "penis", "cock", "pussy", "fuck", "shit", "death", "dragon", "fight", "hell", "mage", "pink", "lord", "shadow", "evil", "kill", "slay", "hate", "anti", "bastard" }); private void do_invalid(string extra, int width); private int do_delete(string extra, string reason, int width); mixed cmd(string command, string extra, string rest) { if (this_player() != this_player(1)) return 0; switch(command) { case "invalid": do_invalid(extra, this_player()->query_cols()); break; case "delete": return do_delete(extra, rest, this_player()->query_cols()); } return 1; } /* cmd() */ private string club_line(string club, int width, int verbose) { string tmp, tmp2, member; int clubtype, i; clubtype = CLUB_HANDLER->query_club_type(club); tmp = sprintf("%%^BOLD%%^%%^RED%%^%-9s%%^RESET%%^ %-15s\n", CLUB_ARRAY[clubtype]+":", club); if(verbose) { tmp+= sprintf(" %%^BOLD%%^Club Name:%%^RESET%%^ %s\n", CLUB_HANDLER->query_club_name(club)); tmp += sprintf(" %%^BOLD%%^Founder:%%^RESET%%^ %s\n" " %%^BOLD%%^Members:%%^RESET%%^\n", CLUB_HANDLER->query_founder(club)); i = 0; tmp2 = ""; foreach(member in CLUB_HANDLER->query_members(club)) { tmp2 += sprintf("%-15s ", member); if((i-1 * ELEN) % (width/ELEN) == 0 && tmp2 != "") { tmp += this_player()->fix_string(" " + tmp2 + "\n", width, 10); tmp2 = ""; } i++; } } return tmp; } private int check_dodgy_name(string club) { string s1, s2, lname, word; lname = lower_case(club); lname = replace(lname, ({"'", "", "_", "", " ", ""}) ); foreach(word in bad_words) if ( sscanf( lname, "%s" + word + "%s", s1, s2 ) == 2 ) return 1; return 0; } private void do_invalid(string extra, int width) { string club, *clubs, tmp, tmp2; int ok; tmp = ""; tmp2 = ""; clubs = sort_array(CLUB_HANDLER->query_clubs(), (: strcmp($1, $2 ) :) ); foreach(club in clubs) { ok = 1; switch(CLUB_HANDLER->query_club_type(club)) { case CLUB_FAMILY: ok = CONTROL_ROOM->is_valid_family_name(club); break; case CLUB_PERSONAL: case CLUB_ELECTED: ok = CONTROL_ROOM->is_valid_club_name(club); break; } if(!ok) tmp += club_line(club, width, extra == "verbose"); else if(check_dodgy_name(club)) tmp2 += club_line(club, width, extra == "verbose"); } if(tmp == "") write("No invalid clubs.\n"); else this_player()->more_string(tmp, "Clubs", 1); if(tmp2 == "") write("No dodgy clubs.\n"); else this_player()->more_string("Dodgy names:\n\n" + tmp2, "Clubs", 1); } private int do_delete(string club, string reason, int width) { string founder, *members, message, cname; if (!lordp(geteuid(previous_object()))) return notify_fail("You must be a lord to delete a club."); if(!club) return notify_fail("You must give a club name.\n"); if(!CLUB_HANDLER->is_club(club)) return notify_fail(club+" is not a current club.\n"); write("Disbanding: " + club); founder = CLUB_HANDLER->query_founder(club); members = implode(CLUB_HANDLER->query_members(club), ", "); cname = CLUB_HANDLER->query_club_name(club); if(CLUB_HANDLER->disband_club(club)) { write(" succeeded.\n"); message = sprintf("The club %s has been deleted by %s for " "%s\n", cname, this_player()->query_name(), reason); MAILER->do_mail_message(founder, this_player()->query_name(), "Your club has been deleted.", members, message); } else write(" failed.\n"); return 1; } mixed *query_patterns() { return ({ "invalid", (: cmd("invalid", "", "") :), "invalid <string>", (: cmd("invalid", $4[0], "") :), "delete <word> <string>", (: cmd("delete", $4[0], $4[1]) :), }); } /* query_patterns() */