the whole game

This commit is contained in:
Kolyah35
2026-03-02 22:04:18 +03:00
parent 816e9060b4
commit f0617a5d22
2069 changed files with 581500 additions and 0 deletions

67
src/server/ServerLevel.cpp Executable file
View File

@@ -0,0 +1,67 @@
#include "ServerLevel.h"
#include "../network/RakNetInstance.h"
#include "../network/packet/SetTimePacket.h"
#include "../network/packet/SetHealthPacket.h"
#include "../world/level/tile/LevelEvent.h"
ServerLevel::ServerLevel(LevelStorage* levelStorage, const std::string& levelName, const LevelSettings& settings, int generatorVersion, Dimension* fixedDimension /* = NULL */)
: super(levelStorage, levelName, settings, generatorVersion, fixedDimension),
allPlayersAreSleeping(false){
}
void ServerLevel::updateSleepingPlayerList() {
bool allPlayersWasSleeping = allPlayersAreSleeping;
allPlayersAreSleeping = !players.empty();
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
Player* player = *it;
if(!player->isSleeping()) {
allPlayersAreSleeping = false;
break;
}
}
if(!allPlayersWasSleeping && allPlayersAreSleeping) {
levelEvent(NULL, LevelEvent::ALL_PLAYERS_SLEEPING, 0, 0, 0, 0);
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
(*it)->setAllPlayersSleeping();
}
}
}
void ServerLevel::awakenAllPlayers() {
allPlayersAreSleeping = false;
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
Player* player = *it;
if(player->isSleeping()) {
player->stopSleepInBed(false, false, true);
player->health = Player::MAX_HEALTH;
player->lastHealth = Player::MAX_HEALTH;
}
}
SetHealthPacket packet(Player::MAX_HEALTH);
raknetInstance->send(packet);
}
bool ServerLevel::allPlayersSleeping() {
if(allPlayersAreSleeping && !isClientSide) {
// all players are sleeping, but have they slept long enough?
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
if(!(*it)->isSleepingLongEnough()) {
return false;
}
}
// yep
return true;
}
return false;
}
void ServerLevel::tick(){
super::tick();
if(allPlayersSleeping()) {
long newTime = levelData.getTime() + TICKS_PER_DAY;
levelData.setTime(newTime - (newTime % TICKS_PER_DAY));
SetTimePacket packet(levelData.getTime());
raknetInstance->send(packet);
awakenAllPlayers();
}
}