summaryrefslogblamecommitdiff
path: root/npc/017-1/estate.txt
blob: b8e9118ab5ef57d12240849ed1cca60ea5f22d60 (plain) (tree)































































































































































































































                                                                                                                 
// TMW2: Moubootaur Legends scripts.
// Author:
//    Jesusalva
// Description:
//    Real Estate System

// ID: 2
// $ESTATE_OWNER[.id] → Account ID owner of the Real Estate
// $ESTATE_OWNERNAME$[.id] → Human readable name of Real Estate owner
// $ESTATE_RENTTIME[.id] → When the rent will expire
// $ESTATE_MOBILIA_2[.id] → Bitmask of mobilia currently purchased on Monster Collision (6) (Use on walls only)
// $ESTATE_MOBILIA_4[.id] → Bitmask of mobilia currently purchased on Air Collision (2)
// $ESTATE_MOBILIA_8[.id] → Bitmask of mobilia currently purchased on Water Collision (3)
// $ESTATE_MOBILIA_32[.id] → Bitmask of mobilia currently purchased on Yellow Collision (4)
// $ESTATE_MOBILIA_64[.id] → Bitmask of mobilia currently purchased on Normal Collision (1)
// $ESTATE_MOBILIA_128[.id] → Bitmask of mobilia currently purchased on Player Collision (5)
// $ESTATE_PASSWORD$[.id] → Password to enter the estate. If it is "", then no password required
// Note: GMs and Administrators can always use super password "mouboo" to enter a locked estate
// $ESTATE_DOORBELL[.id] → If doorbell is disabled (enabled by default)

// REAL_ESTATE_CREDITS → Credits equivalent to GP the player have. Will be used first.

// The sign is the main controller
017-1,86,177,0	script	Sign#RES_0177	NPC_SWORDS_SIGN,{
    if ($ESTATE_RENTTIME[.id] < gettimetick(2))
        goto L_RentAvailable;

    if ($ESTATE_OWNER[.id] == getcharid(3))
        goto L_Manage;

    if (is_admin() && $@GM_OVERRIDE)
        goto L_Manage;

    mesc l("This estate currently belongs to @@.", $ESTATE_OWNERNAME$[.id]);
    mesc l("Press the doorbell?");
    next;
    if (askyesno() == ASK_YES)
        doevent "Doorbell#RES_0177::OnDoorbell";
    close;

L_RentAvailable:
    mesc l("This Real Estate is available for rent for only @@ GP!", format_number(.price));
    .@gp=REAL_ESTATE_CREDITS+Zeny;
    mesc l("You currently have: @@ GP and mobiliary credits", format_number(.@gp));
    next;
    select
        rif(.@gp > .price, l("Rent it! Make it mine!")),
        l("Information"),
        l("Don't rent it");

    // You want to rent
    if (@menu == 1) {
        if ($ESTATE_RENTTIME[.id] > gettimetick(2)) {
            mesc l("Somebody already rented it before you!");
            close;
        }
        REAL_ESTATE_CREDITS=REAL_ESTATE_CREDITS-.price;
        if (REAL_ESTATE_CREDITS < 0) {
            Zeny+=REAL_ESTATE_CREDITS;
            REAL_ESTATE_CREDITS=0;
        }

        // Payment done, you can now acquire the house for a month
        $ESTATE_RENTTIME[.id]=gettimetick(2)+.time;

        // If you're not the previous owner
        // Remove previous owner furniture and reset room password
        if ($ESTATE_OWNER[.id] != getcharid(3)) {
            /*
            $ESTATE_MOBILIA_2[.id]=0;
            $ESTATE_MOBILIA_4[.id]=0;
            $ESTATE_MOBILIA_8[.id]=0;
            $ESTATE_MOBILIA_32[.id]=0;
            $ESTATE_MOBILIA_64[.id]=0;
            $ESTATE_MOBILIA_128[.id]=0;
            */
            $ESTATE_PASSWORD$[.id]="";
            $ESTATE_DOORBELL[.id]=false;
        }

        // Register your info so you can manage it
        $ESTATE_OWNER[.id]=getcharid(3);
        $ESTATE_OWNERNAME$[.id]=strcharinfo(0);

        mesc l("Rent successful for 30 days!");
    } else if (@menu == 2) {
        mesc l("You can rent this house to make it yours.");
        mesc l("Then you'll be able to buy furniture and utility.");
        mesc l("The door is password-protected, so your friends can enter but strangers stay outside.");
        next;
        mesc l("Both rent and furniture are bought using money, however, there are mobiliary credits.");
        mesc l("Mobiliary Credits is a special currency which can only be used on real estate.");
        mesc l("It's obtained with ADMINS or by selling furniture. It is sumed to money and used first.");
    }
    close;

L_Manage:
    mesc l("@@'s Estate", strcharinfo(0));
    mesc ".:: "+ l("Managment Menu") + " ::.";

    .@gp=REAL_ESTATE_CREDITS+Zeny;
    mesc l("Rent time available: @@", FuzzyTime($ESTATE_RENTTIME[.id]));
    mesc l("Total Credits and GP: @@", format_number(.@gp));
    mes "";
    mesc l("Rent Renew Price: @@ GP", format_number(.price));
    mesc l("Room password: @@", $ESTATE_PASSWORD$[.id]);
    if ($ESTATE_DOORBELL[.id])
        mesc l("Doorbell is disabled"), 1;

    next;
    select
        l("Leave"),
        l("Enable/disable doorbell"),
        l("Set room password"),
        rif(.@gp >= .price && $ESTATE_RENTTIME[.id] < gettimetick(2)+.time, l("Renew Rent")),
        rif($@GM_OVERRIDE, l("Destroy all mobilia")),
        rif($@GM_OVERRIDE, l("Expire rent time"));

    switch (@menu) {
        case 1:
            close;
            break;
        case 2:
            $ESTATE_DOORBELL[.id]=!$ESTATE_DOORBELL[.id];
            break;
        case 3:
            mesc l("(Leave the password blank to disable)");
            mesc l("Current Room password: @@", $ESTATE_PASSWORD$[.id]);
            mesc l("Input new password: ");
            input .@password$;
            mesc l("Repeat new password: ");
            input .@passwordc$;
            if (.@password$ == .@passwordc$) {
                $ESTATE_PASSWORD$[.id]=.@password$;
                mesc l("Password changed with success!"), 3;
            } else {
                mesc l("The passwords doesn't match."), 1;
            }
            break;
        case 4:
            // The check is performed before showing the menu option
            // I guess it could be hacked, but I'll probably see negative GP...
            REAL_ESTATE_CREDITS=REAL_ESTATE_CREDITS-.price;
            if (REAL_ESTATE_CREDITS < 0) {
                Zeny+=REAL_ESTATE_CREDITS;
                REAL_ESTATE_CREDITS=0;
            }

            // Payment done, you can now acquire the house for a month
            // If you lost the rent on the meanwhile, it'll renew
            // If you lost the rent and somebody else rented it, you lose the GP
            $ESTATE_RENTTIME[.id]+=.time;
            break;
        case 5:
            mesc l("Are you sure? This cannot be undone!"), 1;
            next;
            if (validatepin()) {
                $ESTATE_MOBILIA_2[.id]=0;
                $ESTATE_MOBILIA_4[.id]=0;
                $ESTATE_MOBILIA_8[.id]=0;
                $ESTATE_MOBILIA_32[.id]=0;
                $ESTATE_MOBILIA_64[.id]=0;
                $ESTATE_MOBILIA_128[.id]=0;
                $ESTATE_PASSWORD$[.id]="";
                $ESTATE_DOORBELL[.id]=false;
            }
        case 6:
            mesc l("Are you sure? This cannot be undone!"), 1;
            next;
            if (validatepin()) {
                $ESTATE_RENTTIME[.id]=gettimetick(2);
            }
    }
    goto L_Manage;
    close;

OnInit:
    .sex = G_OTHER;
    .distance = 3;

    // Estate Settings
    .id=2; // Estate ID
    .price=140000; // Monthly rent price
    .time=60*60*24*30; // How long last default rent time. In future could consider month.
    end;

}

// Door entrance
017-1,85,175,0	script	#RES_0177	NPC_HIDDEN,0,0,{
    end;
OnTouch:
    if ($ESTATE_RENTTIME[.id] < gettimetick(2))
        goto L_RentAvailable;

    if ($ESTATE_OWNER[.id] == getcharid(3) || $ESTATE_PASSWORD$[.id] == "")
        goto L_Warp;

    mesc l("The door is locked");
    next;
    mesc l("However, it can be unlocked if you know the password:");
    if (is_gm()) mesc l("You can use super password \"mouboo\" to unlock the door."), 1;
    input .@password$;
    // GMs can use super password "mouboo"
    if (.@password$ == $ESTATE_PASSWORD$[.id] || (is_gm() && .@password$ == "mouboo"))
        goto L_Warp;
    close;

L_Warp:
    warp "017-7", 33, 33;
    closeclientdialog;
    close;

L_RentAvailable:
    dispbottom l("This estate is available for rent, talk to the sign to rent it.");
    close;

OnInit:
    // Estate Settings
    .id=2; // Estate ID
    end;

}