fix houses to be buyable by website only and rent would be taken from player balance

This commit is contained in:
ErikasKontenis 2020-01-23 21:02:43 +02:00
parent ad7a761167
commit aa779bbdd9
3 changed files with 11 additions and 44 deletions

View File

@ -1,36 +1,4 @@
function onSay(player, words, param) function onSay(player, words, param)
if player:getPremiumDays() <= 0 then player:sendTextMessage(MESSAGE_INFO_DESCR, "Buying a house is available only through auction which is available at website: https://sabrehaven.com/house.php")
player:sendCancelMessage("You need a premium account.")
return false
end
local position = player:getPosition()
position:getNextPosition(player:getDirection())
local tile = Tile(position)
local house = tile and tile:getHouse()
if house == nil then
player:sendCancelMessage("You have to be looking at the door of the house you would like to buy.")
return false
end
if house:getOwnerGuid() > 0 then
player:sendCancelMessage("This house already has an owner.")
return false
end
if player:getHouse() then
player:sendCancelMessage("You are already the owner of a house.")
return false
end
local price = house:getRent() * 5
if not player:removeMoney(price) then
player:sendCancelMessage("You do not have enough money.")
return false
end
house:setOwnerGuid(player:getGuid())
player:sendTextMessage(MESSAGE_INFO_DESCR, "You have successfully bought this house, be sure to have the money for the rent in the bank.")
return false return false
end end

View File

@ -85,17 +85,19 @@ function onSay(player, words, param)
end end
-- ORDER TYPE 7 (Direct house purchase) -- ORDER TYPE 7 (Direct house purchase)
if orderType == 7 then if q_type == 7 then
served = true served = true
local house = House(orderItemId) local house = House(q_itemid)
-- Logged in player is not neccesarily the player that bough the house. So we need to load player from db. -- Logged in player is not neccesarily the player that bough the house. So we need to load player from db.
local buyerQuery = db.storeQuery("SELECT `name` FROM `players` WHERE `id` = "..orderCount.." LIMIT 1") print(q_count)
local buyerQuery = db.storeQuery("SELECT `name` FROM `players` WHERE `id` = "..q_count.." LIMIT 1")
if buyerQuery ~= false then if buyerQuery ~= false then
local buyerName = result.getDataString(buyerQuery, "name") local buyerName = result.getDataString(buyerQuery, "name")
result.free(buyerQuery) result.free(buyerQuery)
if house then if house then
db.query("DELETE FROM `znote_shop_orders` WHERE `id` = " .. orderId .. ";") db.query("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";")
house:setOwnerGuid(orderCount) house:setOwnerGuid(q_count)
player:sendTextMessage(MESSAGE_INFO_DESCR, "You have successfully bought the house "..house:getName().." on "..buyerName..", be sure to have the money for the rent in the bank.") player:sendTextMessage(MESSAGE_INFO_DESCR, "You have successfully bought the house "..house:getName().." on "..buyerName..", be sure to have the money for the rent in the bank.")
print("Process complete. [".. buyerName .."] has recieved house: ["..house:getName().."]") print("Process complete. [".. buyerName .."] has recieved house: ["..house:getName().."]")
end end

View File

@ -109,11 +109,6 @@ void House::updateDoorDescription() const
ss << "It belongs to house '" << houseName << "'. " << ownerName << " owns this house."; ss << "It belongs to house '" << houseName << "'. " << ownerName << " owns this house.";
} else { } else {
ss << "It belongs to house '" << houseName << "'. Nobody owns this house."; ss << "It belongs to house '" << houseName << "'. Nobody owns this house.";
const int32_t housePrice = getRent();
if (housePrice != -1) {
ss << " It costs " << housePrice * 5 << " gold coins.";
}
} }
for (const auto& it : doorSet) { for (const auto& it : doorSet) {
@ -667,7 +662,9 @@ void Houses::payHouses(RentPeriod_t rentPeriod) const
continue; continue;
} }
if (g_game.removeMoney(player.getDepotLocker(house->getTownId(), true), house->getRent(), FLAG_NOLIMIT)) { if (player.getBankBalance() >= rent) {
player.setBankBalance(player.getBankBalance() - rent);
time_t paidUntil = currentTime; time_t paidUntil = currentTime;
switch (rentPeriod) { switch (rentPeriod) {
case RENTPERIOD_DAILY: case RENTPERIOD_DAILY: