void Commands::buyHouse(Player* player, const std::string& cmd, const std::string& param) { if (!player->isPremium()) { player->sendCancelMessage(RET_YOUNEEDPREMIUMACCOUNT); return; } Position pos = player->getPosition(); pos = getNextPosition(player->direction, pos); Tile* tile = g_game.getTile(pos.x, pos.y, pos.z); if (!tile) { player->sendCancel("You have to be looking at the door of the house you would like to buy."); return; } HouseTile* houseTile = dynamic_cast<HouseTile*>(tile); if (!houseTile) { player->sendCancel("You have to be looking at the door of the house you would like to buy."); return; } House* house = houseTile->getHouse(); if (!house || !house->getDoorByPosition(pos)) { player->sendCancel("You have to be looking at the door of the house you would like to buy."); return; } if (house->getHouseOwner()) { player->sendCancel("This house alreadly has an owner."); return; } for (const auto& it : Houses::getInstance().getHouses()) { if (it.second->getHouseOwner() == player->guid) { player->sendCancel("You are already the owner of a house."); return; } } uint64_t price = house->getHouseTiles().size() * g_config.getNumber(ConfigManager::HOUSE_PRICE); if (!g_game.removeMoney(player, price)) { player->sendCancel("You do not have enough money."); return; } house->setHouseOwner(player->guid); player->sendTextMessage(MSG_INFO_DESCR, "You have successfully bought this house, be sure to have the money for the rent in the bank."); }