void BedItem::sleep(Player* player) { if(!house || !player || player->isRemoved()) return; if(!sleeper) { Beds::getInstance().setBedSleeper(this, player->getGUID()); internalSetSleeper(player); BedItem* nextBedItem = getNextBedItem(); if(nextBedItem) nextBedItem->internalSetSleeper(player); updateAppearance(player); if(nextBedItem) nextBedItem->updateAppearance(player); player->getTile()->moveCreature(NULL, player, getTile()); g_game.addMagicEffect(player->getPosition(), NM_ME_SLEEP); Scheduler::getScheduler().addEvent(createSchedulerTask(SCHEDULER_MINTICKS, boost::bind(&Game::kickPlayer, &g_game, player->getID(), false))); } else if(Item::items[getID()].transformToFree) { wakeUp(); g_game.addMagicEffect(player->getPosition(), NM_ME_POFF); } else player->sendCancelMessage(RET_NOTPOSSIBLE); }
bool BedItem::sleep(Player* player) { if (!house || !player || player->isRemoved()) { return false; } if (sleeperGUID != 0) { return false; } BedItem* nextBedItem = getNextBedItem(); internalSetSleeper(player); if (nextBedItem) { nextBedItem->internalSetSleeper(player); } // update the BedSleepersMap Beds::getInstance().setBedSleeper(this, player->getGUID()); // make the player walk onto the bed player->getTile()->moveCreature(player, getTile()); // display 'Zzzz'/sleep effect g_game.addMagicEffect(player->getPosition(), NM_ME_SLEEP); // kick player after he sees himself walk onto the bed and it change id uint32_t playerId = player->getID(); g_scheduler.addEvent(createSchedulerTask(SCHEDULER_MINTICKS, boost::bind(&Game::kickPlayer, &g_game, playerId, false))); // change self and partner's appearance updateAppearance(player); if (nextBedItem) { nextBedItem->updateAppearance(player); } return true; }