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/
#include <lib.h>
#include <objects.h>

mixed performMarriage(object spouse1, object spouse2) ;
int performDivorce(object ob1);
int MarriageRequest(mixed arg1, mixed arg2, mixed arg3);
int eventRequestDivorce(mixed arg1, mixed arg2, mixed arg3);

inherit  LIB_MAYOR;
void create(){
    ::create();
    SetKeyName("clerk");
    SetId("clerk");
    SetAdjectives("town");
    SetGender("male");
    SetRace("human");
    SetShort("the town clerk");
    SetLong("An officious-looking clerk."); 
    SetLocalCurrency("silver");
    SetClass("priest");
    AddCommandResponse("marry", (: MarriageRequest :));
    AddCommandResponse("wed", (: MarriageRequest :));
    AddCommandResponse("join", (: MarriageRequest :));
    AddCommandResponse("divorce", (: eventRequestDivorce :));
    SetLevel(4);
    SetTax(5);
}

int eventRequestDivorce(mixed arg1, mixed arg2, mixed arg3){
    this_object()->performDivorce(arg1);
    return 1;
}

int MarriageRequest(mixed arg1, mixed arg2, mixed arg3){
    string s1, s2, dudename;
    object ob1, ob2;
    if(strsrch(arg2,"divorce") != -1){
	this_object()->performDivorce(arg1);
	return 1;
    }

    if(sscanf(arg3,"%s and %s", s1, s2) !=2 &&
      sscanf(arg3,"%s to %s", s1, s2) !=2) {
	eventForce("say "+arg1->GetName()+", you are confusing me.");
	return 1;
    }

    dudename = arg1->GetKeyName();
    if(s1 == "me" || s1 == "i") s1 = dudename;
    if(s2 == "me" || s2 == "i") s2 = dudename;

    if(s1 != dudename && s2 != dudename ) {
	eventForce("say Those people will have to decide "+
	  "to get married on their own. It isn't "+
	  "any of your business.");
	return 1;
    }

    if( s1 == s2) {
	eventForce("say we don't do single-member marriages here.");
	return 1;
    }
    if(! ob1 = present(s1, environment(this_object()))){
	eventForce("say "+capitalize(s1)+" isn't here.");
	return 1;
    }
    if(! ob2 = present(s2, environment(this_object()))){
	eventForce("say "+capitalize(s2)+" isn't here.");
	return 1;
    }

    if(!living(ob1) || !living(ob2)){
	eventForce("say I do not perform marriages with inanimate objects.");
	return 1;
    }
    this_object()->performMarriage(ob1, ob2);
    return 1;
}

mixed performMarriage(object spouse1, object spouse2) {
    mixed tmp;
    eventForce("say hmmm...");
    tmp = (mixed)environment(this_player())->CanMarry(this_player(),
      spouse1, spouse2);
    if( !tmp ) {
	this_player()->eventPrint("This place is not holy to you.");
	return 1;
    }
    else if( stringp(tmp) ) {
	this_player()->eventPrint(tmp);
	return 1;
    }
    tmp = (mixed)environment(this_player())->eventMarry(this_player(),
      spouse1, spouse2);
    if( tmp == 1 ) {
	object ring;

	ring = new(OBJ_WED_RING);
	ring->SetSpouse((string)spouse2->GetCapName());
	ring->eventMove(spouse1);
	ring = new(OBJ_WED_RING);
	ring->SetSpouse((string)spouse1->GetCapName());
	ring->eventMove(spouse2);
    }
}

int performDivorce(object ob1){
    string spouse1, spouse2;
    object ring1, ring2, ob2;

    spouse1 = ob1->GetKeyName();
    if(!ob1->GetSpouse()){
	eventForce("say You don't appear to be married.");
	return 1;
    }
    spouse2 = lower_case(ob1->GetSpouse());
    ob2 = find_player(spouse2);

    if(!ob1->CanDivorce(ob1)) {
	eventForce("say I cannot perform this divorce. Are you sure "+
	  "you are still married?");
	return 1;
    }

    if(!find_player(spouse1) || !ob1 ){
	eventForce("say I'm sorry. Both spouses must be logged "+
	  "on for a divorce to take place.");
	return 1;
    }

    ob1->eventDivorce(ob1);
    ob2->eventDivorce(ob2);

    ring1 = present("official wedding ring",ob1);
    ring2 = present("official wedding ring",ob2);

    if(ring1) ring1->eventDestruct();
    if(ring2) ring2->eventDestruct();

    eventForce("say The divorce is complete.");
    tell_player(spouse1,"%^RED%^You are now divorced from "+capitalize(spouse2)+"%^RESET%^!");
    tell_player(spouse2,"%^RED%^You are now divorced from "+capitalize(spouse1)+"%^RESET%^!");
    eventForce("shout this office duly records and announces that "+capitalize(spouse1) +" has divorced "+capitalize(spouse2)+"!");
    return 1;
}