コード例 #1
0
ファイル: house.cpp プロジェクト: WeDontGiveAF/OOServer
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);
		}
	}
}
コード例 #2
0
ファイル: house.cpp プロジェクト: nclx/forgottenserver
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;
}
コード例 #3
0
ファイル: house.cpp プロジェクト: OMARTINEZ210/server
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();
    }
  }
}
コード例 #4
0
ファイル: house.cpp プロジェクト: CkyLua/tfs
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;
}
コード例 #5
0
ファイル: house.cpp プロジェクト: WeDontGiveAF/OOServer
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
}
コード例 #6
0
ファイル: house.cpp プロジェクト: HeavenIsLost/ChronusServer
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;
}
コード例 #7
0
ファイル: house.cpp プロジェクト: 081421/otxserver
void House::clean()
{
	for(HouseBedList::iterator bit = bedsList.begin(); bit != bedsList.end(); ++bit)
	{
		if((*bit)->getSleeper())
			(*bit)->wakeUp();
	}

	removePlayers(true);
	transferToDepot();
}
コード例 #8
0
ファイル: house.cpp プロジェクト: ArthurF5/lforgottenserver
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;
}
コード例 #9
0
ファイル: house.cpp プロジェクト: HeavenIsLost/ChronusServer
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();
}
コード例 #10
0
ファイル: house.cpp プロジェクト: nclx/forgottenserver
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();
}