void BedItem::wakeUp() { if(!house) return; if(sleeper) { if(Player* player = g_game.getPlayerByGuidEx(sleeper)) { regeneratePlayer(player); if(player->isVirtual()) { IOLoginData::getInstance()->savePlayer(player); delete player; } else g_game.addCreatureHealth(player); } } Beds::getInstance().setBedSleeper(NULL, sleeper); internalRemoveSleeper(); BedItem* nextBedItem = getNextBedItem(); if(nextBedItem) nextBedItem->internalRemoveSleeper(); updateAppearance(NULL); if(nextBedItem) nextBedItem->updateAppearance(NULL); }
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); }
void BedItem::wakeUp(Player* player) { // avoid crashes if (!house) { return; } if (sleeperGUID != 0) { if (!player) { std::string name; if (IOLoginData::getInstance()->getNameByGuid(sleeperGUID, name)) { Player* _player = new Player(name, NULL); if (IOLoginData::getInstance()->loadPlayer(_player, name)) { regeneratePlayer(_player); IOLoginData::getInstance()->savePlayer(_player); } delete _player; _player = NULL; } } else { regeneratePlayer(player); g_game.addCreatureHealth(player); } } // update the BedSleepersMap Beds::getInstance().setBedSleeper(NULL, sleeperGUID); BedItem* nextBedItem = getNextBedItem(); // unset sleep info internalRemoveSleeper(); if (nextBedItem) { nextBedItem->internalRemoveSleeper(); } // change self and partner's appearance updateAppearance(NULL); if (nextBedItem) { nextBedItem->updateAppearance(NULL); } }
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; }
void BedItem::wakeUp(Player* player) { // avoid crashes if (!house) { return; } if (sleeperGUID != 0) { if (!player) { Player _player(nullptr); if (IOLoginData::loadPlayerById(&_player, sleeperGUID)) { regeneratePlayer(&_player); IOLoginData::savePlayer(&_player); } } else { regeneratePlayer(player); g_game.addCreatureHealth(player); } } // update the BedSleepersMap Beds::getInstance().setBedSleeper(nullptr, sleeperGUID); BedItem* nextBedItem = getNextBedItem(); // unset sleep info internalRemoveSleeper(); if (nextBedItem) { nextBedItem->internalRemoveSleeper(); } // change self and partner's appearance updateAppearance(nullptr); if (nextBedItem) { nextBedItem->updateAppearance(nullptr); } }