#include "util/numeric.h"
#include "util/thread.h"
#include "environment.h"
+#include "chat_interface.h"
#include "clientiface.h"
#include "network/networkpacket.h"
#include <string>
const std::string &path_world,
const SubgameSpec &gamespec,
bool simple_singleplayer_mode,
- bool ipv6
+ bool ipv6,
+ ChatInterface *iface = NULL
);
~Server();
void start(Address bind_addr);
void Send(NetworkPacket* pkt);
- // Environment must be locked when called
+ // Both setter and getter need no envlock,
+ // can be called freely from threads
void setTimeOfDay(u32 time);
/*
void notifyPlayer(const char *name, const std::wstring &msg);
void notifyPlayers(const std::wstring &msg);
- void spawnParticle(const char *playername,
+ void spawnParticle(const std::string &playername,
v3f pos, v3f velocity, v3f acceleration,
float expirationtime, float size,
bool collisiondetection, bool vertical, const std::string &texture);
- void spawnParticleAll(v3f pos, v3f velocity, v3f acceleration,
- float expirationtime, float size,
- bool collisiondetection, bool vertical, const std::string &texture);
-
- u32 addParticleSpawner(const char *playername,
- u16 amount, float spawntime,
+ u32 addParticleSpawner(u16 amount, float spawntime,
v3f minpos, v3f maxpos,
v3f minvel, v3f maxvel,
v3f minacc, v3f maxacc,
float minexptime, float maxexptime,
float minsize, float maxsize,
- bool collisiondetection, bool vertical, const std::string &texture);
+ bool collisiondetection, bool vertical, const std::string &texture,
+ const std::string &playername);
- u32 addParticleSpawnerAll(u16 amount, float spawntime,
- v3f minpos, v3f maxpos,
- v3f minvel, v3f maxvel,
- v3f minacc, v3f maxacc,
- float minexptime, float maxexptime,
- float minsize, float maxsize,
- bool collisiondetection, bool vertical, const std::string &texture);
-
- void deleteParticleSpawner(const char *playername, u32 id);
- void deleteParticleSpawnerAll(u32 id);
+ void deleteParticleSpawner(const std::string &playername, u32 id);
// Creates or resets inventory
Inventory* createDetachedInventory(const std::string &name);
u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch,
std::string* vers_string);
+ void printToConsoleOnly(const std::string &text);
+
void SendPlayerHPOrDie(PlayerSAO *player);
void SendPlayerBreath(u16 peer_id);
void SendInventory(PlayerSAO* playerSAO);
// Bind address
Address m_bind_addr;
+ // Environment mutex (envlock)
+ Mutex m_env_mutex;
+
private:
friend class EmergeThread;
void DeleteClient(u16 peer_id, ClientDeletionReason reason);
void UpdateCrafting(Player *player);
+ void handleChatInterfaceEvent(ChatEvent *evt);
+
+ // This returns the answer to the sender of wmessage, or "" if there is none
+ std::wstring handleChat(const std::string &name, const std::wstring &wname,
+ const std::wstring &wmessage,
+ bool check_shout_priv = false,
+ u16 peer_id_to_avoid_sending = PEER_ID_INEXISTENT);
+ void handleAdminChat(const ChatEventChat *evt);
+
v3f findSpawnPos();
// When called, connection mutex should be locked
// Environment
ServerEnvironment *m_env;
- JMutex m_env_mutex;
// server connection
con::Connection m_con;
// A buffer for time steps
// step() increments and AsyncRunStep() run by m_thread reads it.
float m_step_dtime;
- JMutex m_step_dtime_mutex;
+ Mutex m_step_dtime_mutex;
// current server step lag counter
float m_lag;
std::string m_shutdown_msg;
bool m_shutdown_ask_reconnect;
+ ChatInterface *m_admin_chat;
+ std::string m_admin_nick;
+
/*
Map edit event queue. Automatically receives all map edits.
The constructor of this class registers us to receive them through
Particles
*/
std::vector<u32> m_particlespawner_ids;
+
+ DISABLE_CLASS_COPY(Server);
};
/*