ds2.9a12/bin/
ds2.9a12/extra/
ds2.9a12/extra/crat/
ds2.9a12/extra/creremote/
ds2.9a12/extra/mingw/
ds2.9a12/extra/wolfpaw/
ds2.9a12/fluffos-2.14-ds13/
ds2.9a12/fluffos-2.14-ds13/Win32/
ds2.9a12/fluffos-2.14-ds13/compat/
ds2.9a12/fluffos-2.14-ds13/compat/simuls/
ds2.9a12/fluffos-2.14-ds13/include/
ds2.9a12/fluffos-2.14-ds13/testsuite/
ds2.9a12/fluffos-2.14-ds13/testsuite/clone/
ds2.9a12/fluffos-2.14-ds13/testsuite/command/
ds2.9a12/fluffos-2.14-ds13/testsuite/data/
ds2.9a12/fluffos-2.14-ds13/testsuite/etc/
ds2.9a12/fluffos-2.14-ds13/testsuite/include/
ds2.9a12/fluffos-2.14-ds13/testsuite/inherit/
ds2.9a12/fluffos-2.14-ds13/testsuite/inherit/master/
ds2.9a12/fluffos-2.14-ds13/testsuite/log/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/compiler/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/efuns/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/operators/
ds2.9a12/fluffos-2.14-ds13/testsuite/u/
ds2.9a12/lib/cmds/admins/
ds2.9a12/lib/cmds/common/
ds2.9a12/lib/cmds/creators/include/
ds2.9a12/lib/daemon/services/
ds2.9a12/lib/daemon/tmp/
ds2.9a12/lib/doc/
ds2.9a12/lib/doc/bguide/
ds2.9a12/lib/doc/efun/all/
ds2.9a12/lib/doc/efun/arrays/
ds2.9a12/lib/doc/efun/buffers/
ds2.9a12/lib/doc/efun/compile/
ds2.9a12/lib/doc/efun/floats/
ds2.9a12/lib/doc/efun/functions/
ds2.9a12/lib/doc/efun/general/
ds2.9a12/lib/doc/efun/mixed/
ds2.9a12/lib/doc/efun/numbers/
ds2.9a12/lib/doc/efun/parsing/
ds2.9a12/lib/doc/hbook/
ds2.9a12/lib/doc/help/classes/
ds2.9a12/lib/doc/help/races/
ds2.9a12/lib/doc/lfun/
ds2.9a12/lib/doc/lfun/all/
ds2.9a12/lib/doc/lfun/lib/abilities/
ds2.9a12/lib/doc/lfun/lib/armor/
ds2.9a12/lib/doc/lfun/lib/bank/
ds2.9a12/lib/doc/lfun/lib/bot/
ds2.9a12/lib/doc/lfun/lib/clay/
ds2.9a12/lib/doc/lfun/lib/clean/
ds2.9a12/lib/doc/lfun/lib/clerk/
ds2.9a12/lib/doc/lfun/lib/client/
ds2.9a12/lib/doc/lfun/lib/combat/
ds2.9a12/lib/doc/lfun/lib/connect/
ds2.9a12/lib/doc/lfun/lib/container/
ds2.9a12/lib/doc/lfun/lib/corpse/
ds2.9a12/lib/doc/lfun/lib/creator/
ds2.9a12/lib/doc/lfun/lib/daemon/
ds2.9a12/lib/doc/lfun/lib/damage/
ds2.9a12/lib/doc/lfun/lib/deterioration/
ds2.9a12/lib/doc/lfun/lib/donate/
ds2.9a12/lib/doc/lfun/lib/door/
ds2.9a12/lib/doc/lfun/lib/equip/
ds2.9a12/lib/doc/lfun/lib/file/
ds2.9a12/lib/doc/lfun/lib/fish/
ds2.9a12/lib/doc/lfun/lib/fishing/
ds2.9a12/lib/doc/lfun/lib/flashlight/
ds2.9a12/lib/doc/lfun/lib/follow/
ds2.9a12/lib/doc/lfun/lib/ftp_client/
ds2.9a12/lib/doc/lfun/lib/ftp_data_connection/
ds2.9a12/lib/doc/lfun/lib/fuel/
ds2.9a12/lib/doc/lfun/lib/furnace/
ds2.9a12/lib/doc/lfun/lib/genetics/
ds2.9a12/lib/doc/lfun/lib/holder/
ds2.9a12/lib/doc/lfun/lib/id/
ds2.9a12/lib/doc/lfun/lib/interactive/
ds2.9a12/lib/doc/lfun/lib/lamp/
ds2.9a12/lib/doc/lfun/lib/leader/
ds2.9a12/lib/doc/lfun/lib/light/
ds2.9a12/lib/doc/lfun/lib/limb/
ds2.9a12/lib/doc/lfun/lib/living/
ds2.9a12/lib/doc/lfun/lib/load/
ds2.9a12/lib/doc/lfun/lib/look/
ds2.9a12/lib/doc/lfun/lib/manipulate/
ds2.9a12/lib/doc/lfun/lib/meal/
ds2.9a12/lib/doc/lfun/lib/messages/
ds2.9a12/lib/doc/lfun/lib/player/
ds2.9a12/lib/doc/lfun/lib/poison/
ds2.9a12/lib/doc/lfun/lib/position/
ds2.9a12/lib/doc/lfun/lib/post_office/
ds2.9a12/lib/doc/lfun/lib/potion/
ds2.9a12/lib/doc/lfun/lib/room/
ds2.9a12/lib/doc/lfun/lib/server/
ds2.9a12/lib/doc/lfun/lib/spell/
ds2.9a12/lib/doc/lfun/lib/torch/
ds2.9a12/lib/doc/lfun/lib/vendor/
ds2.9a12/lib/doc/lfun/lib/virt_sky/
ds2.9a12/lib/doc/lfun/lib/weapon/
ds2.9a12/lib/doc/lfun/lib/worn_storage/
ds2.9a12/lib/doc/lpc/basic/
ds2.9a12/lib/doc/lpc/concepts/
ds2.9a12/lib/doc/lpc/constructs/
ds2.9a12/lib/doc/lpc/etc/
ds2.9a12/lib/doc/lpc/intermediate/
ds2.9a12/lib/doc/lpc/types/
ds2.9a12/lib/doc/misc/
ds2.9a12/lib/doc/old/
ds2.9a12/lib/domains/
ds2.9a12/lib/domains/Praxis/adm/
ds2.9a12/lib/domains/Praxis/attic/
ds2.9a12/lib/domains/Praxis/cemetery/mon/
ds2.9a12/lib/domains/Praxis/data/
ds2.9a12/lib/domains/Praxis/death/
ds2.9a12/lib/domains/Praxis/mountains/
ds2.9a12/lib/domains/Praxis/obj/armour/
ds2.9a12/lib/domains/Praxis/obj/magic/
ds2.9a12/lib/domains/Praxis/obj/weapon/
ds2.9a12/lib/domains/Praxis/orc_valley/
ds2.9a12/lib/domains/Ylsrim/
ds2.9a12/lib/domains/Ylsrim/adm/
ds2.9a12/lib/domains/Ylsrim/armor/
ds2.9a12/lib/domains/Ylsrim/broken/
ds2.9a12/lib/domains/Ylsrim/fish/
ds2.9a12/lib/domains/Ylsrim/meal/
ds2.9a12/lib/domains/Ylsrim/npc/
ds2.9a12/lib/domains/Ylsrim/obj/
ds2.9a12/lib/domains/Ylsrim/virtual/
ds2.9a12/lib/domains/Ylsrim/weapon/
ds2.9a12/lib/domains/campus/adm/
ds2.9a12/lib/domains/campus/etc/
ds2.9a12/lib/domains/campus/meals/
ds2.9a12/lib/domains/campus/save/
ds2.9a12/lib/domains/campus/txt/ai/charles/
ds2.9a12/lib/domains/campus/txt/ai/charles/bak2/
ds2.9a12/lib/domains/campus/txt/ai/charles/bak2/bak1/
ds2.9a12/lib/domains/campus/txt/ai/charly/
ds2.9a12/lib/domains/campus/txt/ai/charly/bak/
ds2.9a12/lib/domains/campus/txt/jenny/
ds2.9a12/lib/domains/cave/doors/
ds2.9a12/lib/domains/cave/etc/
ds2.9a12/lib/domains/cave/meals/
ds2.9a12/lib/domains/cave/weap/
ds2.9a12/lib/domains/default/creator/
ds2.9a12/lib/domains/default/doors/
ds2.9a12/lib/domains/default/etc/
ds2.9a12/lib/domains/default/vehicles/
ds2.9a12/lib/domains/default/virtual/
ds2.9a12/lib/domains/default/weap/
ds2.9a12/lib/domains/town/txt/shame/
ds2.9a12/lib/domains/town/virtual/
ds2.9a12/lib/domains/town/virtual/bottom/
ds2.9a12/lib/domains/town/virtual/space/
ds2.9a12/lib/estates/
ds2.9a12/lib/ftp/
ds2.9a12/lib/lib/comp/
ds2.9a12/lib/lib/daemons/
ds2.9a12/lib/lib/daemons/include/
ds2.9a12/lib/lib/lvs/
ds2.9a12/lib/lib/user/
ds2.9a12/lib/lib/virtual/
ds2.9a12/lib/log/
ds2.9a12/lib/log/adm/
ds2.9a12/lib/log/archive/
ds2.9a12/lib/log/chan/
ds2.9a12/lib/log/errors/
ds2.9a12/lib/log/law/adm/
ds2.9a12/lib/log/law/email/
ds2.9a12/lib/log/law/names/
ds2.9a12/lib/log/law/sites-misc/
ds2.9a12/lib/log/law/sites-register/
ds2.9a12/lib/log/law/sites-tempban/
ds2.9a12/lib/log/law/sites-watch/
ds2.9a12/lib/log/open/
ds2.9a12/lib/log/reports/
ds2.9a12/lib/log/router/
ds2.9a12/lib/log/secure/
ds2.9a12/lib/log/watch/
ds2.9a12/lib/obj/book_source/
ds2.9a12/lib/obj/include/
ds2.9a12/lib/powers/prayers/
ds2.9a12/lib/powers/spells/
ds2.9a12/lib/realms/template/adm/
ds2.9a12/lib/realms/template/area/armor/
ds2.9a12/lib/realms/template/area/npc/
ds2.9a12/lib/realms/template/area/obj/
ds2.9a12/lib/realms/template/area/room/
ds2.9a12/lib/realms/template/area/weap/
ds2.9a12/lib/realms/template/bak/
ds2.9a12/lib/realms/template/cmds/
ds2.9a12/lib/save/kills/o/
ds2.9a12/lib/secure/cfg/classes/
ds2.9a12/lib/secure/cmds/builders/
ds2.9a12/lib/secure/cmds/creators/include/
ds2.9a12/lib/secure/cmds/players/
ds2.9a12/lib/secure/cmds/players/include/
ds2.9a12/lib/secure/daemon/imc2server/
ds2.9a12/lib/secure/daemon/include/
ds2.9a12/lib/secure/lib/
ds2.9a12/lib/secure/lib/include/
ds2.9a12/lib/secure/lib/net/include/
ds2.9a12/lib/secure/lib/std/
ds2.9a12/lib/secure/log/adm/
ds2.9a12/lib/secure/log/bak/
ds2.9a12/lib/secure/log/intermud/
ds2.9a12/lib/secure/log/network/
ds2.9a12/lib/secure/modules/
ds2.9a12/lib/secure/npc/
ds2.9a12/lib/secure/obj/include/
ds2.9a12/lib/secure/room/
ds2.9a12/lib/secure/save/
ds2.9a12/lib/secure/save/backup/
ds2.9a12/lib/secure/save/boards/
ds2.9a12/lib/secure/tmp/
ds2.9a12/lib/secure/upgrades/files/
ds2.9a12/lib/secure/verbs/creators/
ds2.9a12/lib/std/board/
ds2.9a12/lib/std/lib/
ds2.9a12/lib/tmp/
ds2.9a12/lib/verbs/admins/include/
ds2.9a12/lib/verbs/builders/
ds2.9a12/lib/verbs/common/
ds2.9a12/lib/verbs/common/include/
ds2.9a12/lib/verbs/creators/
ds2.9a12/lib/verbs/creators/include/
ds2.9a12/lib/verbs/rooms/
ds2.9a12/lib/verbs/rooms/include/
ds2.9a12/lib/www/client/
ds2.9a12/lib/www/errors/
ds2.9a12/lib/www/images/
ds2.9a12/lib/www/lpmuds/downloads_files/
ds2.9a12/lib/www/lpmuds/intermud_files/
ds2.9a12/lib/www/lpmuds/links_files/
ds2.9a12/win32/
#include <lib.h>
#include <modules.h>
#include <daemons.h>
#include <rooms.h>

int eventGetArray(string str);
int eventDoAddition(string str);

string globalstr, globalstr2, temporary, func, v2, repstr;
object target;
string *NewArr = ({});
string *array_val = ({});
mapping InvMap = ([]);

mixed gmake(string str) {
    string thingy, filename, val, dir, area_dir;
    string creation;
    string *legal_dirs;
    object template;

    if(sscanf(str, "%s %s %s",thingy, val, filename) == 3) true();
    else if(sscanf(str,"%s %s",thingy, filename) !=2) thingy = str;
    switch(thingy){
    case "item" : creation = "thing"; dir = "obj";break;
    case "book" : creation = "book"; dir = "obj";break;
    case "thing" : creation = "thing"; dir = "obj";break;
    case "weap" : creation = "weapon"; dir = "weap";break;
    case "weapon" : creation = "weapon"; dir = "weap";break;
    case "armor" : creation = "armor"; dir = "armor";break;
    case "arm" : creation = "armor"; dir = "armor";break;
    case "chair" : creation = "chair"; dir = "obj";break;
    case "bed" : creation = "bed"; dir = "obj";break;
    case "storage" : creation = "container"; dir = "obj";break;
    case "container" : creation = "container"; dir = "obj";break;
    case "table" : creation = "table"; dir = "obj";break;
    case "door" : creation = "door"; dir = "doors";break;
    case "barkeep" : creation = "barkeep"; dir = "npc";break;
    case "vendor" : creation = "vendor"; dir = "npc";break;
    case "trainer" : creation = "trainer"; dir = "npc";break;
    case "npc" : creation = "npc"; dir = "npc";break;
    case "mob" : creation = "npc"; dir = "npc";break;
    case "mon" : creation = "npc"; dir = "npc";break;
    case "monst" : creation = "npc"; dir = "npc";break;
    case "monster" : creation = "npc"; dir = "npc";break;
    case "meal" : creation = "meal"; dir = "meals";break;
    case "food" : creation = "meal"; dir = "meals";break;
    case "drink" : creation = "drink"; dir = "meals";break;
    case "worn" : creation = "worn_storage"; dir = "armor";break;
    case "wornstorage" : creation = "worn_storage"; dir = "armor";break;
    case "worn_storage" : creation = "worn_storage"; dir = "armor";break;
    default : true();
    }

    legal_dirs = ({"meals","doors", "obj","armor","weap","npc"});
    if(member_array(dir, legal_dirs) == -1) {
        write("That is not a valid argument. You may create the following: room, npc, "+
          "door, weapon, armor, container, item, table, chair, bed, meal, worn_storage.");
        return 1;
    }

    else if(!filename || filename == ""){
        write("You must specify a filename. For example: create "+creation+
          " "+thingy+"_14.c");
        write("or: create "+thingy+" /realms/my_name/area/"+dir+"/my_first_"+creation+".c");
        return 1;
    }

    if(last(filename,2) != ".c") filename += ".c";

    if(!this_player()->query_cwd()){
        write("You have no current working directory. Please type: cd\nthen try again.");
        return 1;
    }

    if(grepp(filename,"/") && directory_exists(path_prefix(filename)) &&
      check_privs(this_player(), filename)){
        write("Ok, using yer filename: "+filename);
    }
    else if(last_string_element(this_player()->query_cwd(),"/") == dir &&
      check_privs(this_player(), this_player()->query_cwd())){
        write("Using your cwd: "+this_player()->query_cwd()+"/"+filename);
        filename = this_player()->query_cwd()+"/"+filename;
    }
    else if(this_player()->query_cwd() != "/" &&
      member_array(dir,get_dir(this_player()->query_cwd()+"/")) != -1 &&
      check_privs(this_player(), this_player()->query_cwd()+"/"+dir)){
        write("Using your cwd plus "+dir+": "+this_player()->query_cwd()+"/"+dir+"/"+filename);
        filename = this_player()->query_cwd()+"/"+dir+"/"+filename;
    }
    else if(member_array(dir,get_dir(path_prefix(this_player()->query_cwd())+"/")) != -1 &&
      check_privs(this_player(), path_prefix(this_player()->query_cwd())+"/"+dir)){
        write("Using your cwd plus ../"+dir+": "+path_prefix(this_player()->query_cwd())+"/"+dir+"/"+filename);
        filename = path_prefix(this_player()->query_cwd())+"/"+dir+"/"+filename;
    }
    else { 
        area_dir = homedir(this_player())+"/area";
        write("I'm going to go with the appropriate area directory: "+area_dir+"/"+dir+"/"+
          replace_string(filename,"/",""));
        filename = area_dir+"/"+dir+"/"+replace_string(filename,"/","");

    }

    creation = "/obj/"+creation+".c";
    if(file_exists(creation) && cp(creation,filename)) true();
    else {
        write("Creation failed.");
        return 1;
    }

    if(thingy != "door") {
        template = new(filename);
        template->eventMove(environment(this_player()));
        write("You wave your hand mysteriously and "+template->GetShort()+" materializes!");
        say(this_player()->GetCapName()+" waves "+possessive(this_player())+" hand mysteriously and "+template->GetShort()+" materializes!");
    }

    else {
        write("You wave your hand mysteriously and a new door begins to materialize.");
        say(this_player()->GetCapName()+" waves "+possessive(this_player())+" hand mysteriously and a new door begins to materialize.");
        this_object()->eventCreateDoor(val, filename);
    }
    return 1;
}

varargs int eventStartGenericQuestions(object ob, string tempfile, string *new_arr, string what){
    target = ob;
    temporary = tempfile;
    NewArr -= ({ 0 });
    NewArr = new_arr;
    func = what;
    write("This setting takes multiple values. If you have no more values to "+
      "enter, then enter a dot on a blank line. To cancel, enter a single q on "+
      "a blank line.");
    if(NewArr && sizeof(NewArr)) array_val = NewArr;
    else array_val = ({});
    array_val -= ({0});
    array_val -= ({"0"});
    if(sizeof(array_val))
        write("You may now enter the next value. So far, we have: "+identify(array_val));
    else write("You may now enter the next value. So far, it is blank.");
    write("If you're done entering values, enter a dot on a blank line.");

    input_to( (: eventGetArray :) );
    return 1;
}

int eventGetArray(string str){
    if(!str || str == "" || str == "."){
        write("Entries complete. Final array is: "+identify(array_val));
        NewArr = array_val;
        if(!sizeof(array_val)){
            write("Blank array. Modification cancelled.");
            return 1;
        }
        if(target->GetDoor() || inherits(LIB_DOOR,target)){
            this_object()->eventReceiveId(target, NewArr);
        }
        else this_object()->eventResumeArrayMod(target, temporary, NewArr, func);
        array_val = ({});
        return 1;
    }
    else {
        array_val += ({str});
        array_val -= ({0});
        array_val -= ({"0"});
        if(sizeof(array_val)) 
            write("You may now enter the next value. So far, we have: "+identify(array_val));
        else write("You may now enter the next value. So far, it is blank.");
        write("If you're done entering values, enter a dot on a blank line.");
        input_to( (: eventGetArray :) );
    }

    return 1;
}
int eventDeleteItem(object ob1, object ob2){
    string name, tmpname;
    mapping Inventory;

    name = base_name(ob1);
    if(!check_privs(this_player(), base_name(ob2)) ){
        write("Insufficient privileges. Addition halted.");
        return 1;
    }

    tmpname = generate_tmp();
    Inventory = this_object()->QueryMap("SetInventory",ob2);
    if(sizeof(Inventory[name])) map_delete(Inventory,name); 
    else if(sizeof(Inventory[name+".c"])) map_delete(Inventory,name+".c"); 
    map_delete(Inventory,name);
    map_delete(Inventory,name+".c");
    globalstr = tmpname;
    globalstr2 = base_name(ob2)+".c";
    unguarded( (: cp(globalstr2, globalstr) :) );
    this_object()->eventResumeMappingChange(ob2, tmpname, Inventory, "SetInventory");
    unguarded( (: rm(globalstr) :) );
    return 1;
}

int eventAddItem(object ob, string addendum){
    target = ob;
    v2 = addendum;
    if(!check_privs(this_player(), base_name(target))){
        write("Insufficient privileges. Addition halted.");
        return 1;
    }
    this_object()->eventGeneralStuff(base_name(ob)+".c");

    InvMap = this_object()->QueryMap("SetInventory",ob);
    if(!inherits(LIB_NPC,ob)){
        write("Please enter the number of these that you want to add:");
    }
    else write("Please enter a command for the NPC to perform with this "+
          "item. If you have no such command to enter, enter the number of "+
          "these items you want to add:");
    input_to( (: eventDoAddition :) );
    return 1;
}

int eventDoAddition(string str){
    this_object()->GetTheValue("AUTOMATED",target, generate_tmp(target), v2, str, InvMap, "SetInventory");
    return 1;
}

int eventGeneralStuff(string str){
    string fpath = path_prefix(str);
    repstr = "";
    globalstr = str;
    unguarded( (: globalstr2 = read_file(globalstr) :) );
    unguarded( (: this_object()->eventAddInit(globalstr) :) );
    if(query_verb() != "copy"){
        if(grepp(globalstr2,"./customdefs.h")){
            string j1, j2, tmppath;
            sscanf(globalstr2,"%sinclude \"%scustomdefs.h%s",j1,tmppath,j2);
            if(tmppath) repstr = absolute_path(fpath,tmppath+"customdefs.h");
            unguarded( (: globalstr2 = replace_line(globalstr2 ,({"./customdefs.h"}), "#include \""+repstr+"\"") :) );
        } 
    }
    globalstr2 = replace_string(globalstr2,"\n\n\n","\n\n");
    globalstr2 = replace_string(globalstr2,"//funs","");
    globalstr2 = replace_string(globalstr2,"//snuf","");
    globalstr2 = replace_string(globalstr2,"//extras","");
    unguarded( (: write_file(globalstr, globalstr2, 1) :) );
    write("Indenting file...");
    unguarded( (: indent_file(globalstr) :) );
    repstr = "";
    return 1;
}