#include "mods.h"
#include "sha1.h"
#include "base64.h"
+#include "tool.h"
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
*/
Server::Server(
- std::string mapsavedir,
- std::string configpath
+ std::string path_world,
+ std::string path_config,
+ std::string gamename
):
+ m_gamename(gamename),
+ m_path_world(path_world),
+ m_path_config(path_config),
m_env(NULL),
m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, this),
- m_authmanager(mapsavedir+DIR_DELIM+"auth.txt"),
- m_banmanager(mapsavedir+DIR_DELIM+"ipban.txt"),
+ m_authmanager(path_world+DIR_DELIM+"auth.txt"),
+ m_banmanager(path_world+DIR_DELIM+"ipban.txt"),
m_lua(NULL),
m_itemdef(createItemDefManager()),
m_nodedef(createNodeDefManager()),
m_time_counter(0),
m_time_of_day_send_timer(0),
m_uptime(0),
- m_mapsavedir(mapsavedir),
- m_configpath(configpath),
m_shutdown_requested(false),
m_ignore_map_edit_events(false),
m_ignore_map_edit_events_peer_id(0)
{
+ infostream<<"Server created."<<std::endl;
+ infostream<<"- path_world = "<<path_world<<std::endl;
+ infostream<<"- path_config = "<<path_config<<std::endl;
+ infostream<<"- gamename = "<<gamename<<std::endl;
+
m_liquid_transform_timer = 0.0;
m_print_info_timer = 0.0;
m_objectdata_timer = 0.0;
m_step_dtime_mutex.Init();
m_step_dtime = 0.0;
- JMutexAutoLock envlock(m_env_mutex);
- JMutexAutoLock conlock(m_con_mutex);
+ // Figure out some paths
+ m_path_share = porting::path_share + DIR_DELIM + "server";
+ m_path_game = m_path_share + DIR_DELIM + "games" + DIR_DELIM + m_gamename;
// Path to builtin.lua
- std::string builtinpath = porting::path_data + DIR_DELIM + "builtin.lua";
+ std::string builtinpath = m_path_share + DIR_DELIM + "builtin.lua";
// Add default global mod search path
- m_modspaths.push_front(porting::path_data + DIR_DELIM + "mods");
+ m_modspaths.push_front(m_path_game + DIR_DELIM "mods");
// Add world mod search path
- m_modspaths.push_front(mapsavedir + DIR_DELIM + "worldmods");
- // Add user mod search path
- m_modspaths.push_front(porting::path_userdata + DIR_DELIM + "usermods");
+ m_modspaths.push_front(m_path_world + DIR_DELIM + "worldmods");
+ // Add addon mod search path
+ for(std::set<std::string>::const_iterator i = m_path_addons.begin();
+ i != m_path_addons.end(); i++){
+ m_modspaths.push_front((*i) + DIR_DELIM + "mods");
+ }
// Print out mod search paths
- infostream<<"Mod search paths:"<<std::endl;
+ infostream<<"- mod search paths:"<<std::endl;
for(core::list<std::string>::Iterator i = m_modspaths.begin();
i != m_modspaths.end(); i++){
std::string modspath = *i;
infostream<<" "<<modspath<<std::endl;
}
+ // Lock environment
+ JMutexAutoLock envlock(m_env_mutex);
+ JMutexAutoLock conlock(m_con_mutex);
+
// Initialize scripting
infostream<<"Server: Initializing scripting"<<std::endl;
// Initialize Environment
- m_env = new ServerEnvironment(new ServerMap(mapsavedir, this), m_lua,
+ m_env = new ServerEnvironment(new ServerMap(path_world, this), m_lua,
this, this);
// Give environment reference to scripting api
m_env->getMap().addEventReceiver(this);
// If file exists, load environment metadata
- if(fs::PathExists(m_mapsavedir+DIR_DELIM+"env_meta.txt"))
+ if(fs::PathExists(m_path_world+DIR_DELIM+"env_meta.txt"))
{
infostream<<"Server: Loading environment metadata"<<std::endl;
- m_env->loadMeta(m_mapsavedir);
+ m_env->loadMeta(m_path_world);
}
// Load players
infostream<<"Server: Loading players"<<std::endl;
- m_env->deSerializePlayers(m_mapsavedir);
+ m_env->deSerializePlayers(m_path_world);
/*
Add some test ActiveBlockModifiers to environment
Save players
*/
infostream<<"Server: Saving players"<<std::endl;
- m_env->serializePlayers(m_mapsavedir);
+ m_env->serializePlayers(m_path_world);
/*
Save environment metadata
*/
infostream<<"Server: Saving environment metadata"<<std::endl;
- m_env->saveMeta(m_mapsavedir);
+ m_env->saveMeta(m_path_world);
}
/*
m_thread.setRun(true);
m_thread.Start();
- infostream<<"Server: Started on port "<<port<<std::endl;
+ infostream<<"Server started on port "<<port<<"."<<std::endl;
}
void Server::stop()
explosion.
*/
player->m_last_good_position_age += dtime;
- if(player->m_last_good_position_age >= 2.0){
+ if(player->m_last_good_position_age >= 1.0){
float age = player->m_last_good_position_age;
v3f diff = (player->getPosition() - player->m_last_good_position);
float d_vert = diff.Y;
m_env->getMap().save(MOD_STATE_WRITE_NEEDED);
// Save players
- m_env->serializePlayers(m_mapsavedir);
+ m_env->serializePlayers(m_path_world);
// Save environment metadata
- m_env->saveMeta(m_mapsavedir);
+ m_env->saveMeta(m_path_world);
}
}
}
if(action == 0 || action == 2 || action == 3)
{
float d = player_pos.getDistanceFrom(pointed_pos_under);
- float max_d = BS * 10; // Just some large enough value
+ float max_d = BS * 14; // Just some large enough value
if(d > max_d){
actionstream<<"Player "<<player->getName()
<<" tried to access "<<pointed.dump()
actionstream<<player->getName()<<" punches object "
<<pointed.object_id<<std::endl;
- // Do stuff
- pointed_object->punch(srp, srp->m_time_from_last_punch);
+ ItemStack punchitem = srp->getWieldedItem();
+ ToolCapabilities toolcap =
+ punchitem.getToolCapabilities(m_itemdef);
+ v3f dir = (pointed_object->getBasePosition() -
+ (srp->getPosition() + srp->getEyeOffset())
+ ).normalize();
+ pointed_object->punch(dir, &toolcap, srp,
+ srp->m_time_from_last_punch);
srp->m_time_from_last_punch = 0;
}
// Saves g_settings to configpath given at initialization
void Server::saveConfig()
{
- if(m_configpath != "")
- g_settings->updateConfigFile(m_configpath.c_str());
+ if(m_path_config != "")
+ g_settings->updateConfigFile(m_path_config.c_str());
}
void Server::notifyPlayer(const char *name, const std::wstring msg)