Player * getPlayer(u16 peer_id);
Player * getPlayer(const char *name);
Player * getRandomConnectedPlayer();
Player * getNearestConnectedPlayer(v3f pos);
std::list<Player*> getPlayers();
std::list<Player*> getPlayers(bool ignore_disconnected);
Player * getPlayer(u16 peer_id);
Player * getPlayer(const char *name);
Player * getRandomConnectedPlayer();
Player * getNearestConnectedPlayer(v3f pos);
std::list<Player*> getPlayers();
std::list<Player*> getPlayers(bool ignore_disconnected);
- float getTimeOfDaySpeed()
- { return m_time_of_day_speed; }
+ float getTimeOfDaySpeed();
+
+ void setDayNightRatioOverride(bool enable, u32 value)
+ {
+ m_enable_day_night_ratio_override = enable;
+ m_day_night_ratio_override = value;
+ }
+
+ // counter used internally when triggering ABMs
+ u32 m_added_objects;
- ServerEnvironment(ServerMap *map, ScriptApi *iface, IGameDef *gamedef,
- IBackgroundBlockEmerger *emerger);
+ ServerEnvironment(ServerMap *map, GameScripting *scriptIface,
+ IGameDef *gamedef, const std::string &path_world);
- /*
- Save players
- */
- void serializePlayers(const std::string &savedir);
- void deSerializePlayers(const std::string &savedir);
+ // Save players
+ void saveLoadedPlayers();
+ void savePlayer(const std::string &playername);
+ Player *loadPlayer(const std::string &playername);
// Script-aware node setters
bool setNode(v3s16 p, const MapNode &n);
bool removeNode(v3s16 p);
// Script-aware node setters
bool setNode(v3s16 p, const MapNode &n);
bool removeNode(v3s16 p);
// Find all active objects inside a radius around a point
std::set<u16> getObjectsInsideRadius(v3f pos, float radius);
// Find all active objects inside a radius around a point
std::set<u16> getObjectsInsideRadius(v3f pos, float radius);
- bool line_of_sight(v3f pos1, v3f pos2, float stepsize=1.0);
+ bool line_of_sight(v3f pos1, v3f pos2, float stepsize=1.0, v3s16 *p=NULL);
+ u32 getGameTime() { return m_game_time; }
+
+ void reportMaxLagEstimate(float f) { m_max_lag_estimate = f; }
+ float getMaxLagEstimate() { return m_max_lag_estimate; }
+
+ std::set<v3s16>* getForceloadedBlocks() { return &m_active_blocks.m_forceloaded_list; };
+
// Active object list
std::map<u16, ServerActiveObject*> m_active_objects;
// Outgoing network message buffer for active objects
// Active object list
std::map<u16, ServerActiveObject*> m_active_objects;
// Outgoing network message buffer for active objects
std::list<ABMWithState> m_abms;
// An interval for generally sending object positions and stuff
float m_recommended_send_interval;
std::list<ABMWithState> m_abms;
// An interval for generally sending object positions and stuff
float m_recommended_send_interval;
{ m_player_names.push_back(name); }
void removePlayerName(std::string name)
{ m_player_names.remove(name); }
{ m_player_names.push_back(name); }
void removePlayerName(std::string name)
{ m_player_names.remove(name); }
IrrlichtDevice *m_irr;
std::map<u16, ClientActiveObject*> m_active_objects;
std::list<ClientSimpleObject*> m_simple_objects;
IrrlichtDevice *m_irr;
std::map<u16, ClientActiveObject*> m_active_objects;
std::list<ClientSimpleObject*> m_simple_objects;
IntervalLimiter m_active_object_light_update_interval;
IntervalLimiter m_lava_hurt_interval;
IntervalLimiter m_drowning_interval;
IntervalLimiter m_breathing_interval;
std::list<std::string> m_player_names;
IntervalLimiter m_active_object_light_update_interval;
IntervalLimiter m_lava_hurt_interval;
IntervalLimiter m_drowning_interval;
IntervalLimiter m_breathing_interval;
std::list<std::string> m_player_names;