Why not make it an exact renewal using the original price and days?
1) at time of original lease, store the price and number of days. 2) three days before lease ends, landlord gets an event: "Your 1200 happy Ranch lease to Ched expires in three days. Click here to manage property." 3) #2 Links to property screen, where the lease tab has an additonal option in the last three days of the lease to "offer renewal to Ched repeating the previous terms of $xxxx for y days?" With "yes" and "no" buttons. 4) Click "yes" creates a favorable event for the lessee: "Rogue is offering you a lease renewal of his 1200 happy Ranch, $xxxx for y days. Click here to manage this lease." 5) #4 links lessee to property screen, where they can accept or reject. They would need to have the right amount of cash on hand (not banked or anyplace else) and once they accept cash is removed and days are added to the lease.
If either player declines then the lease just expires.
I expect the coding isnt nearly as simple as I want it to be, but keeping the lease term identical allows happy landlords and tenants to keep doing business with each other and takes variables out of coding. If either party wants something different, then they need to go back to the market anyway.
That's a good idea! But the properties system is so old and non-scalable, it'll be incredibly difficult and time intensive to create something that works properly.
Fair enough. The property user interface currently includes the upgrades screen, the upkeep screen, the travel screen, the option to move into the property, the option to kick your spouse out, an option to access the vault, and an option to sell or lease an owned property.
Of these, it seems that the upkeep section for the lessee has most of the required mechanics. Add a column for when the rent was last paid and an option to pay more rent.
On the screen to put a property up for lease, add a dropdown option for the auto renew with 0 to 10 times and an option for until the property is sold.
So that is the easy seeming part. Things get harder if allowing the landlord to change the amount of the rent, as that means new database fields and new algorithms. I can imagine a landlord saying, "yeah, it is worth a 1% discount to keep a tenant, but if the market has gone up 5%, then there still needs to be an increase or they are getting a 6% discount. So my original idea of an auto raise or auto lower function seems problematic unless it also has the ability to calculate market price for that level of property with high degree of reliability.
So I think just going with a text box that auto-fills the amount of the previous lease is probably the best bet to allow the owner to update the cost of future renewals. It does require an additional attribute attached to the property, can't seem to get away from that, but hopefully not ridiculous to code (since I'm not intimately familiar with the object model, that is probably the best I can come up with).
From a gameplay perspective, this covers the tenant- they don't sit with exposed cash. But if they pay at an inconvenient moment and the cash goes straight to their wallet, then they have the problem of potentially being buy mugged. So I would propose that the money go to them in the form of a cashier's check. Existing functionality so hopefully not ridiculous to implement tying into it- again, I get it comes down to your object model, so I can only guess how difficult it would be without more info.