dsIIr4/bin/
dsIIr4/extra/creremote/
dsIIr4/extra/wolfpaw/
dsIIr4/lib/cmds/admins/
dsIIr4/lib/cmds/common/
dsIIr4/lib/cmds/creators/include/
dsIIr4/lib/cmds/creators/include/SCCS/
dsIIr4/lib/daemon/services/
dsIIr4/lib/doc/
dsIIr4/lib/domains/Ylsrim/
dsIIr4/lib/domains/Ylsrim/adm/
dsIIr4/lib/domains/Ylsrim/armor/
dsIIr4/lib/domains/Ylsrim/broken/
dsIIr4/lib/domains/Ylsrim/fish/
dsIIr4/lib/domains/Ylsrim/meal/
dsIIr4/lib/domains/Ylsrim/npc/
dsIIr4/lib/domains/Ylsrim/virtual/
dsIIr4/lib/domains/Ylsrim/weapon/
dsIIr4/lib/domains/campus/adm/
dsIIr4/lib/domains/campus/etc/
dsIIr4/lib/domains/campus/meals/
dsIIr4/lib/domains/campus/npc/
dsIIr4/lib/domains/campus/save/
dsIIr4/lib/domains/campus/txt/
dsIIr4/lib/domains/campus/txt/ai/charles/
dsIIr4/lib/domains/campus/txt/ai/charles/bak2/
dsIIr4/lib/domains/campus/txt/ai/charles/bak2/bak1/
dsIIr4/lib/domains/campus/txt/ai/charly/
dsIIr4/lib/domains/campus/txt/ai/charly/bak/
dsIIr4/lib/domains/campus/txt/jenny/
dsIIr4/lib/domains/default/creator/
dsIIr4/lib/domains/default/doors/
dsIIr4/lib/domains/default/etc/
dsIIr4/lib/domains/default/virtual/
dsIIr4/lib/domains/default/weap/
dsIIr4/lib/domains/town/virtual/
dsIIr4/lib/lib/comp/
dsIIr4/lib/lib/lvs/
dsIIr4/lib/lib/user/
dsIIr4/lib/lib/virtual/
dsIIr4/lib/log/
dsIIr4/lib/obj/book_source/
dsIIr4/lib/obj/include/
dsIIr4/lib/realms/template/
dsIIr4/lib/realms/template/adm/
dsIIr4/lib/realms/template/area/armor/
dsIIr4/lib/realms/template/area/npc/
dsIIr4/lib/realms/template/area/obj/
dsIIr4/lib/realms/template/area/room/
dsIIr4/lib/realms/template/area/weap/
dsIIr4/lib/realms/template/bak/
dsIIr4/lib/realms/template/cmds/
dsIIr4/lib/save/
dsIIr4/lib/save/kills/o/
dsIIr4/lib/secure/cfg/classes/
dsIIr4/lib/secure/cmds/creators/include/
dsIIr4/lib/secure/cmds/players/
dsIIr4/lib/secure/cmds/players/include/
dsIIr4/lib/secure/daemon/include/
dsIIr4/lib/secure/lib/
dsIIr4/lib/secure/lib/include/
dsIIr4/lib/secure/lib/net/include/
dsIIr4/lib/secure/lib/std/
dsIIr4/lib/secure/modules/
dsIIr4/lib/secure/npc/
dsIIr4/lib/secure/obj/include/
dsIIr4/lib/secure/room/
dsIIr4/lib/secure/save/
dsIIr4/lib/secure/save/boards/
dsIIr4/lib/secure/save/players/g/
dsIIr4/lib/secure/tmp/
dsIIr4/lib/secure/verbs/creators/
dsIIr4/lib/shadows/
dsIIr4/lib/spells/
dsIIr4/lib/std/board/
dsIIr4/lib/std/lib/
dsIIr4/lib/tmp/
dsIIr4/lib/verbs/admins/include/
dsIIr4/lib/verbs/common/
dsIIr4/lib/verbs/common/include/
dsIIr4/lib/verbs/creators/include/
dsIIr4/lib/verbs/players/include/SCCS/
dsIIr4/lib/verbs/rooms/
dsIIr4/lib/verbs/rooms/include/
dsIIr4/lib/www/
dsIIr4/v22.2b14-dsouls2/
dsIIr4/v22.2b14-dsouls2/ChangeLog.old/
dsIIr4/v22.2b14-dsouls2/Win32/
dsIIr4/v22.2b14-dsouls2/compat/
dsIIr4/v22.2b14-dsouls2/compat/simuls/
dsIIr4/v22.2b14-dsouls2/include/
dsIIr4/v22.2b14-dsouls2/mudlib/
dsIIr4/v22.2b14-dsouls2/testsuite/
dsIIr4/v22.2b14-dsouls2/testsuite/clone/
dsIIr4/v22.2b14-dsouls2/testsuite/command/
dsIIr4/v22.2b14-dsouls2/testsuite/data/
dsIIr4/v22.2b14-dsouls2/testsuite/etc/
dsIIr4/v22.2b14-dsouls2/testsuite/include/
dsIIr4/v22.2b14-dsouls2/testsuite/inherit/
dsIIr4/v22.2b14-dsouls2/testsuite/inherit/master/
dsIIr4/v22.2b14-dsouls2/testsuite/log/
dsIIr4/v22.2b14-dsouls2/testsuite/single/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/compiler/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/efuns/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/operators/
dsIIr4/v22.2b14-dsouls2/testsuite/u/
dsIIr4/v22.2b14-dsouls2/tmp/
dsIIr4/win32/
private string *TrainedSkills = ({});
private int Befriendable, Trainable, Commandable;
private object Owner = 0;

mixed direct_befriend_liv(){
    return 1;
}

mixed direct_abandon_liv(){
    return 1;
}

mixed direct_train_liv(){
    return this_object()->CanTrain();
}

mixed direct_train_liv_to_str(){
    return this_object()->CanTrain();
}

mixed direct_untrain_liv(){
    return this_object()->CanTrain();
}

mixed direct_untrain_liv_to_str(){
    return this_object()->CanTrain();
}

mixed direct_command_liv(){
    return this_object()->CanCommand();
}

mixed direct_command_liv_to_str(){
    return this_object()->CanCommand();
}

object GetMountOwner(){
    return Owner;
}

object SetMountOwner(object who){
    if(who) Owner = who;
    return Owner;
}

int SetCanBefriend(int i){
    if(!i) Befriendable = 0;
    else Befriendable = i;
    return Befriendable;
}

int CanBefriend(object who){
    int owner_char = -1;
    int player_char = -1;
    if(!Befriendable) return 0;
    if(Owner && objectp(Owner)) owner_char = Owner->GetStat("charisma")["level"];
    player_char = who->GetStat("charisma")["level"];
    if(player_char > Befriendable && player_char > owner_char) return 1;
    return 0;
}

int CanAbandon(object who){
    if(!Befriendable) return 0;
    if(Owner && Owner == who) return 1;
    else return 0;
}

int SetCanTrain(int i){
    if(!i) Trainable = 0;
    else Trainable = 1;
    return Trainable;
}

int CanTrain(){
    return Trainable;
}

int CanUnTrain(){
    return Trainable;
}

int SetCanCommand(int i){
    if(!i) Commandable = 0;
    else Commandable = 1;
    return Commandable;
}

int eventBefriend(object who){
    if(!CanBefriend(who)){
	write("You fail to befriend "+this_object()->GetName()+".");
	say(who->GetName()+" fails to befriend "+this_object()->GetName()+
	  ". "+capitalize(nominative(who))+" looks very silly!");
	return 1;
    }
    write("You befriend "+this_object()->GetName()+".");
    say(who->GetName()+" befriends "+this_object()->GetName()+
      ". Awwww, it's such a cute sight to see!");
    Owner = who;
    return 1;
}

int eventAbandon(object who){
    if(!CanAbandon(who)){
	write("You can't abandon "+this_object()->GetName()+".");
	return 1;
    }
    write("You abandon "+this_object()->GetName()+".");
    say(who->GetName()+" abandons "+this_object()->GetName()+
      ". How sad!");
    Owner = 0;
    return 1;
}

varargs int eventTrainLiving(object who, string what){
    if(what) what = replace_string(what, "to ", "");
    if(!who) who = this_player();
    if(Owner != who) {
	write("You are not this mount's owner.");
	return 0;
    }
    if(what && member_array(what, TrainedSkills) != -1){
	write(this_object()->GetName()+" already possesses that skill.");
	return 1;
    }
    if(!what || what == "") return 1;
    else {
	tell_player(who,"You train "+this_object()->GetShort()+"."); 
	tell_room(environment(who),who->GetName()+" trains "+
	  this_object()->GetShort()+".", ({ who,this_object() }) );
	TrainedSkills += ({ what });
    }
    return 1;
}

varargs int eventUnTrainLiving(object who, string what){
    if(what) what = replace_string(what, "to ", "");
    if(!who) who = this_player();
    if(Owner != who) {
	write("You are not this mount's owner.");
	return 0;
    }
    if(!what || what == ""){
	Owner = 0;
    }
    if(what &&  member_array(what, TrainedSkills) != -1){
	TrainedSkills -= ({ what });
    }
    tell_player(who,"You untrain "+this_object()->GetShort()+".");
    tell_room(environment(who),who->GetName()+" untrains "+
      this_object()->GetShort()+".", ({ who,this_object() }) );
    return 1;
}

string *GetTrainedSkilles(){
    return copy(TrainedSkills);
}

string *SetTrainedSkills(string *skills){
    if(skills) TrainedSkills = skills;
    return copy(TrainedSkills);
}

string eventCommandNPC(object who, string cmd){
    //if(this_object()->GetStat("intelligence") < 10
    return "foo";
}