void House::updateDoorDescription(std::string _name/* = ""*/, Door* door/* = NULL*/) { std::string tmp = "house"; if(isGuild()) tmp = "hall"; char houseDescription[200]; if(owner) { if(isGuild()) IOGuild::getInstance()->getGuildById(_name, owner); else if(_name.empty()) IOLoginData::getInstance()->getNameByGuid(owner, _name); sprintf(houseDescription, "It belongs to %s '%s'. %s owns this %s.", tmp.c_str(), name.c_str(), _name.c_str(), tmp.c_str()); } else sprintf(houseDescription, "It belongs to %s '%s'. Nobody owns this %s. It costs %d gold coins.", tmp.c_str(), name.c_str(), tmp.c_str(), price); if(!door) { for(HouseDoorList::iterator it = doorList.begin(); it != doorList.end(); ++it) (*it)->setSpecialDescription(houseDescription); } else door->setSpecialDescription(houseDescription); }
bool House::transferToDepot() { if(!townId) return false; Player* player = NULL; if(owner) { uint32_t tmp = owner; if(isGuild() && !IOGuild::getInstance()->swapGuildIdToOwner(tmp)) tmp = 0; if(tmp) player = g_game.getPlayerByGuidEx(tmp); } Item* item = NULL; Container* tmpContainer = NULL; ItemList moveList; for(HouseTileList::iterator it = houseTiles.begin(); it != houseTiles.end(); ++it) { for(uint32_t i = 0; i < (*it)->getThingCount(); ++i) { if(!(item = (*it)->__getThing(i)->getItem())) continue; if(item->isPickupable()) moveList.push_back(item); else if((tmpContainer = item->getContainer())) { for(ItemList::const_iterator it = tmpContainer->getItems(); it != tmpContainer->getEnd(); ++it) moveList.push_back(*it); } } } if(player) { Depot* depot = player->getDepot(townId, true); for(ItemList::iterator it = moveList.begin(); it != moveList.end(); ++it) g_game.internalMoveItem(NULL, (*it)->getParent(), depot, INDEX_WHEREEVER, (*it), (*it)->getItemCount(), NULL, FLAG_NOLIMIT); if(player->isVirtual()) { IOLoginData::getInstance()->savePlayer(player); delete player; } } else { for(ItemList::iterator it = moveList.begin(); it != moveList.end(); ++it) g_game.internalRemoveItem(NULL, (*it), (*it)->getItemCount(), false, FLAG_NOLIMIT); } return true; }
bool House::transferToDepot() { if(!townId) return false; Player* player = NULL; if(owner) { uint32_t tmp = owner; if(isGuild() && !IOGuild::getInstance()->swapGuildIdToOwner(tmp)) tmp = 0; if(tmp) player = g_game.getPlayerByGuidEx(tmp); } Container* tmpContainer = NULL; TileItemVector* items = NULL; ItemList moveList; for(HouseTileList::iterator it = houseTiles.begin(); it != houseTiles.end(); ++it) { if(!(items = (*it)->getItemList())) continue; for(ItemVector::iterator iit = items->begin(); iit != items->end(); ++iit) { if((*iit)->isPickupable()) moveList.push_back(*iit); else if((tmpContainer = (*iit)->getContainer())) { for(ItemList::const_iterator cit = tmpContainer->getItems(); cit != tmpContainer->getEnd(); ++cit) moveList.push_back(*cit); } } } if(player) { for(ItemList::iterator it = moveList.begin(); it != moveList.end(); ++it) g_game.internalMoveItem(NULL, (*it)->getParent(), player->getInbox(), INDEX_WHEREEVER, (*it), (*it)->getItemCount(), NULL, FLAG_NOLIMIT); if(player->isVirtual()) { IOLoginData::getInstance()->savePlayer(player); delete player; } } else { for(ItemList::iterator it = moveList.begin(); it != moveList.end(); ++it) g_game.internalRemoveItem(NULL, (*it), (*it)->getItemCount(), false, FLAG_NOLIMIT); } return true; }
bool House::setOwnerEx(uint32_t guid, bool transfer) { if(owner == guid) return true; if(isGuild() && guid) { Player* player = g_game.getPlayerByGuidEx(guid); if(!player) return false; guid = player->getGuildId(); } if(owner) { rentWarnings = paidUntil = 0; if(transfer) clean(); setAccessList(SUBOWNER_LIST, "", !transfer); setAccessList(GUEST_LIST, "", !transfer); for(HouseDoorList::iterator it = doorList.begin(); it != doorList.end(); ++it) (*it)->setAccessList(""); } setOwner(guid); if(guid) lastWarning = time(NULL); else lastWarning = 0; Database* db = Database::getInstance(); DBTransaction trans(db); if(!trans.begin()) return false; IOMapSerialize::getInstance()->saveHouse(db, this); return trans.commit(); }
AccessHouseLevel_t House::getHouseAccessLevel(const Player* player) { if(!player) return HOUSE_NO_INVITED; if(player->hasFlag(PlayerFlag_CanEditHouses)) return HOUSE_OWNER; if(!owner) return HOUSE_NO_INVITED; AccessHouseLevel_t tmp = HOUSE_NO_INVITED; if(isGuild()) { if(player->getGuildId() == owner) { switch(player->getGuildLevel()) { case GUILDLEVEL_LEADER: return HOUSE_OWNER; case GUILDLEVEL_VICE: return HOUSE_SUBOWNER; default: tmp = HOUSE_GUEST; } } } else if(player->getGUID() == owner || player->marriage == owner) return HOUSE_OWNER; if(subOwnerList.isInList(player)) return HOUSE_SUBOWNER; if(guestList.isInList(player)) return HOUSE_GUEST; return tmp; }