#include <housing.h>
#include <login_handler.h>
inherit COMMAND_BASE;
private string get_file(string fname) {
string *tmp;
tmp = this_player()->get_files(fname);
if(sizeof(tmp) != 1) {
tmp = this_player()->get_files(fname + ".c");
if(sizeof(tmp) != 1)
return "";
}
return tmp[0][0..<3];
}
int do_remove(string house) {
house = get_file(house);
if(!HOUSING->query_house(house))
return notify_fail("No such house.\n");
HOUSING->remove_house(house);
write("House removed.\n");
return 1;
}
int do_add(string house, string region, int rented, string address) {
house = get_file(house);
if(house == "")
return notify_fail("House does not exist.\n");
HOUSING->add_house(house, ({ }), address, region, rented);
write("House added.\n");
return 1;
}
int do_modify(string house, string region, int rented, string address) {
string *rooms;
house = get_file(house);
if(house == "")
return notify_fail("House does not exist.\n");
if(!HOUSING->query_house(house))
return notify_fail("That house is not registered.\n");
rooms = HOUSING->query_rooms(house) - ({ house });
HOUSING->modify_house(house, rooms, address, region, rented);
write("House modified.\n");
return 1;
}
int add_room(string house, string room) {
string *files, file;
object ob;
house = get_file(house);
if(!HOUSING->query_house(house))
return notify_fail("No such house.\n");
files = this_player()->get_files(room);
if(!sizeof(files))
return notify_fail("That room doesn't exist.\n");
foreach(file in files) {
room = file[0..<3];
if(room == house)
continue;
house->force_load();
ob = find_object(house);
if(!ob || !function_exists("query_owner", ob))
continue;
if(!HOUSING->add_rooms(house, ({ room })))
write("Error adding room " + room + ".\n");
else
write("Room added [" + room + "]\n");
}
return 1;
}
int remove_room(string house, string room) {
house = get_file(house);
if(!HOUSING->query_house(house))
return notify_fail("No such house.\n");
if(!HOUSING->remove_rooms(house, ({ room })))
return notify_fail("Error removing room.\n");
write("Room removed.\n");
return 1;
}
int do_owner(string house, string owner) {
if(owner == "none")
owner = "Vacant";
if(owner != "Vacant" && !PLAYER_HANDLER->test_user(owner))
return notify_fail("No such user " + owner + ".\n");
house = get_file(house);
if(!HOUSING->set_owner(house, owner))
return notify_fail("Error changing owner.\n");
write("Owner set to " + owner + ".\n");
return 1;
}
int do_list(string search) {
string house;
if(search) {
house = get_file(search);
if(HOUSING->query_house(house)) {
printf("House: %s\n Owner: %s\n Address: %s\n Region: %s\n "
"Type: %s\n Value: %d\n Rooms: %s\n",
house,
HOUSING->query_owner(house),
HOUSING->query_address(house),
HOUSING->query_region(house),
(HOUSING->query_type(house) ? "Rented" : "Owned"),
HOUSING->query_value(house),
implode(HOUSING->query_rooms(house), ", "));
return 1;
}
}
foreach(house in keys(HOUSING->query_houses())) {
if(!search ||
(strsrch(house, search) != -1 ||
(HOUSING->query_owner(house) &&
strsrch(HOUSING->query_owner(house), search) != -1))) {
printf("%s - %s: %s. %d rooms.\n",
house,
(HOUSING->query_type(house) ? "Renter" : "Owner"),
HOUSING->query_owner(house),
sizeof(HOUSING->query_rooms(house)));
}
}
return 1;
}
mixed *query_patterns() {
return ({ "list", (: do_list(0) :),
"list <word'search'>", (: do_list($4[0]) :),
"add <word'house'> <word'region'> <number'rented'> "
"<string'address'>", (: do_add($4[0], $4[1], $4[2], $4[3]) :),
"modify <word'house'> <word'region'> <number'rented'> "
"<string'address'>", (: do_modify($4[0], $4[1], $4[2], $4[3]) :),
"add room <word'house'> <string'room'>",
(: add_room($4[0], $4[1]) :),
"remove room <word'house'> <string'room'>",
(: remove_room($4[0], $4[1]) :),
"owner <word'house'> <word'owner'>",
(: do_owner($4[0], $4[1]) :),
"remove <word'house'>", (: do_remove($4[0]) :),
});
}