void House::cleanHouse() { transferToDepot(); PlayerVector to_kick; for(HouseTileList::iterator it = houseTiles.begin(); it != houseTiles.end(); ++it) { for(uint32_t i = 0; i < (*it)->getThingCount(); ++i) { Creature* creature = (*it)->__getThing(i)->getCreature(); if(creature != NULL && creature->getPlayer()) { to_kick.push_back(creature->getPlayer()); } } } while(to_kick.empty() == false) { Player* c = to_kick.back(); to_kick.pop_back(); kickPlayer(NULL, c->getName()); } // we need to remove players from beds HouseBedItemList::iterator bit; for(bit = bedsList.begin(); bit != bedsList.end(); ++bit) { if((*bit)->getSleeper() != 0) { (*bit)->wakeUp(NULL); } } }
bool House::transferToDepot() { if (townid == 0 || houseOwner == 0) { return false; } std::string ownerName; if (!IOLoginData::getInstance()->getNameByGuid(houseOwner, ownerName)) { return false; } Player* player = g_game.getPlayerByName(ownerName); if (!player) { player = new Player(ownerName, NULL); if (!IOLoginData::getInstance()->loadPlayer(player, ownerName)) { delete player; return false; } } transferToDepot(player); if (player->isOffline()) { IOLoginData::getInstance()->savePlayer(player); delete player; } return true; }
void House::cleanHouse() { transferToDepot(); PlayerVector to_kick; HouseTile* houseTile; for(HouseTileList::iterator it = houseTiles.begin(); it != houseTiles.end(); ++it){ houseTile = (*it); for(CreatureConstIterator cit = houseTile->creatures_begin(); cit != houseTile->creatures_end(); ++cit){ if((*cit)->getPlayer()){ to_kick.push_back((*cit)->getPlayer()); } } } while(!to_kick.empty()){ Player* c = to_kick.back(); to_kick.pop_back(); kickPlayer(NULL, c->getName()); } // we need to remove players from beds for(HouseBedItemList::iterator it = bedsList.begin(); it != bedsList.end(); ++it){ if((*it)->getSleeper() != 0){ (*it)->wakeUp(); } } }
bool House::transferToDepot() { if(townid == 0 || houseOwner == 0) return false; std::string ownerName; if(!IOLoginData::getInstance()->getNameByGuid(houseOwner, ownerName)) return false; Player* player = g_game.getPlayerByName(ownerName); if(!player) { player = new Player(ownerName, NULL); if(!IOLoginData::getInstance()->loadPlayer(player, ownerName)) { #ifdef __DEBUG__ std::cout << "Failure: [House::transferToDepot], can not load player: " << ownerName << std::endl; #endif delete player; return false; } } transferToDepot(player); if(player->isOffline()) { IOLoginData::getInstance()->savePlayer(player); delete player; } return true; }
void House::setHouseOwner(uint32_t guid) { if(isLoaded && houseOwner == guid) return; isLoaded = true; if(houseOwner){ //send items to depot transferToDepot(); PlayerVector to_kick; for(HouseTileList::iterator it = houseTiles.begin(); it != houseTiles.end(); ++it){ for(uint32_t i = 0; i < (*it)->getThingCount(); ++i){ Creature* creature = (*it)->__getThing(i)->getCreature(); if(creature != NULL && creature->getPlayer()) to_kick.push_back(creature->getPlayer()); } } while(to_kick.empty() == false) { Player* c = to_kick.back(); to_kick.pop_back(); kickPlayer(NULL, c->getName()); } // we need to remove players from beds HouseBedItemList::iterator bit; for(bit = bedsList.begin(); bit != bedsList.end(); ++bit) { if((*bit)->getSleeper() != 0) { (*bit)->wakeUp(NULL); } } //clean access lists houseOwner = 0; setAccessList(SUBOWNER_LIST, ""); setAccessList(GUEST_LIST, ""); for(HouseDoorList::iterator it = doorList.begin(); it != doorList.end(); ++it){ (*it)->setAccessList(""); } //reset paid date paidUntil = 0; rentWarnings = 0; } std::string name; if(guid != 0 && IOPlayer::instance()->getNameByGuid(guid, name)){ houseOwner = guid; houseOwnerName = name; } updateDoorDescription(); setLastWarning(std::time(NULL)); //So the new owner has one day before he start the payment }
bool House::transferToDepot() const { if (townid == 0 || owner == 0) { return false; } Player* player = g_game.getPlayerByGUID(owner); if (player) { transferToDepot(player); } else { Player tmpPlayer(nullptr); if (!IOLoginData::loadPlayerById(&tmpPlayer, owner)) { return false; } transferToDepot(&tmpPlayer); IOLoginData::savePlayer(&tmpPlayer); } return true; }
void House::clean() { for(HouseBedList::iterator bit = bedsList.begin(); bit != bedsList.end(); ++bit) { if((*bit)->getSleeper()) (*bit)->wakeUp(); } removePlayers(true); transferToDepot(); }
bool House::transferToDepot() const { if (townid == 0 || owner == 0) { return false; } Player* player = g_game.getPlayerByGUID(owner); if (!player) { player = new Player(nullptr); if (!IOLoginData::loadPlayerById(player, owner)) { delete player; return false; } } transferToDepot(player); if (player->isOffline()) { IOLoginData::savePlayer(player); delete player; } return true; }
void House::setOwner(uint32_t guid, bool updateDatabase/* = true*/, Player* player/* = nullptr*/) { if (updateDatabase && owner != guid) { Database* db = Database::getInstance(); std::ostringstream query; query << "UPDATE `houses` SET `owner` = " << guid << ", `bid` = 0, `bid_end` = 0, `last_bid` = 0, `highest_bidder` = 0 WHERE `id` = " << id; db->executeQuery(query.str()); } if (isLoaded && owner == guid) { return; } isLoaded = true; if (owner != 0) { //send items to depot if (player) { transferToDepot(player); } else { transferToDepot(); } for (HouseTile* tile : houseTiles) { if (const CreatureVector* creatures = tile->getCreatures()) { for (int32_t i = creatures->size(); --i >= 0;) { kickPlayer(nullptr, (*creatures)[i]->getPlayer()); } } } // Remove players from beds for (BedItem* bed : bedsList) { if (bed->getSleeper() != 0) { bed->wakeUp(nullptr); } } //clean access lists owner = 0; setAccessList(SUBOWNER_LIST, ""); setAccessList(GUEST_LIST, ""); for (Door* door : doorList) { door->setAccessList(""); } //reset paid date paidUntil = 0; rentWarnings = 0; } std::string name; if (guid != 0 && IOLoginData::getNameByGuid(guid, name)) { owner = guid; ownerName = name; } updateDoorDescription(); }
void House::setHouseOwner(uint32_t guid, bool updateDatabase/* = true*/, Player* player/* = NULL*/) { if (updateDatabase) { Database* db = Database::getInstance(); std::ostringstream query; query << "UPDATE `houses` SET `owner` = " << guid << " WHERE `id` = " << houseid; db->executeQuery(query.str()); } if (isLoaded && houseOwner == guid) { return; } isLoaded = true; if (houseOwner) { //send items to depot if (player) { transferToDepot(player); } else { transferToDepot(); } PlayerVector toKick; for (HouseTileList::iterator it = houseTiles.begin(); it != houseTiles.end(); ++it) { if (const CreatureVector* creatures = (*it)->getCreatures()) { for (CreatureVector::const_iterator cit = creatures->begin(), cend = creatures->end(); cit != cend; ++cit) { Player* player = (*cit)->getPlayer(); if (player) { toKick.push_back(player); } } } } while (!toKick.empty()) { Player* c = toKick.back(); toKick.pop_back(); kickPlayer(NULL, c->getName()); } // we need to remove players from beds HouseBedItemList::iterator bit; for (bit = bedsList.begin(); bit != bedsList.end(); ++bit) { if ((*bit)->getSleeper() != 0) { (*bit)->wakeUp(NULL); } } //clean access lists houseOwner = 0; setAccessList(SUBOWNER_LIST, ""); setAccessList(GUEST_LIST, ""); for (HouseDoorList::iterator it = doorList.begin(); it != doorList.end(); ++it) { (*it)->setAccessList(""); } //reset paid date paidUntil = 0; rentWarnings = 0; } std::string name; if (guid != 0 && IOLoginData::getInstance()->getNameByGuid(guid, name)) { houseOwner = guid; houseOwnerName = name; } updateDoorDescription(); }