// TMW2: Moubootaur Legends scripts.
// Author:
// Jesusalva
// Description:
// Real Estate System
// ID: 1
// $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
012-1,94,70,0 script Sign#RES_0128 NPC_SWORDS_SIGN,{
if ($ESTATE_RENTTIME[.id] < gettimetick(2))
goto L_RentAvailable;
if ($ESTATE_OWNER[.id] == getcharid(3))
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_0128::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")),
l("Destroy all mobilia");
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;
}
}
goto L_Manage;
close;
OnInit:
.sex = G_OTHER;
.distance = 3;
// Estate Settings
.id=1; // Estate ID
.price=120000; // Monthly rent price
.time=60*60*24*30; // How long last default rent time. In future could consider month.
end;
}
// Door entrance
012-1,95,69,0 script #RES_0128 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 "012-8", 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=1; // Estate ID
end;
}