/*    /lib/mayor.c
 *    From the Dead Souls Object Library
 *    Allows players to change their residence on the mud
 *    Created by Descartes of Borg 961019
 *    Version: @(#) mayor.c 1.3@(#)
 *    Last modified: 96/10/20
 */

#include <lib.h>

inherit LIB_SENTIENT;

static void EvaluateCitizenshipRequest();

int Tax = 0;
string LocalCurrency = "gold";

static void create() {
    sentient::create();
    SetRequestResponses(([ "citizenship" : (: EvaluateCitizenshipRequest :),
        "help" : (: this_object()->eventForce("say You can request "
            "citizenship from me.") :) ]));
}

mixed CanRequestCitizenship(object who) {
    if( Tax > 0 ) {
        int cost = (Tax);

        if( who->GetCurrency(LocalCurrency) < cost ) {
            this_object()->eventForce("say I'm sorry, but we have a new citizen tax of " + Tax + " " +
              LocalCurrency + ".");
            return 0;
        }
    }
    if( who->GetTown() == GetTown() ) {
        return "You are already a citizen of " + GetTown() + ".";
    }
    return 1;
}

mixed eventRequestCitizenship(object who) {
    object array homies = filter(users(), (: $1->GetTown() == GetTown() :));

    homies->eventPrint(who->GetName() + " is now a citizen of " + GetTown() +
      ".");
    who->SetTown(GetTown());
    who->eventPrint("You are now a citizen of " + GetTown() + ".");
    if( Tax > 0 ) {
        int cost = Tax;

        who->AddCurrency(LocalCurrency, -cost);
        this_object()->AddCurrency(LocalCurrency, cost);
        this_object()->eventForce("say Congratulations, citizen!");
    }
    return 1;
}

static void EvaluateCitizenshipRequest() {
    mixed tmp = CanRequestCitizenship(this_player());

    if( tmp != 1 ) {
        if( !tmp  || tmp == 0 ) {
            this_object()->eventForce("say Your request is denied.");
        }
        else {
            this_player()->eventPrint(tmp);
        }
        return;
    }
    eventRequestCitizenship(this_player());
}

string GetLocalCurrency() {
    return LocalCurrency;
}

static string SetLocalCurrency(string str) {
    return (LocalCurrency = str);
}

int GetTax() {
    return Tax;
}

static int SetTax(int x) {
    return (Tax = x);
}
