Style: Normalized to no spaces before closing parenthesis.
This commit is contained in:
parent
6be79575fd
commit
93d29555e5
@ -4,5 +4,5 @@ struct lua_State;
|
|||||||
class DeprecatedBindings
|
class DeprecatedBindings
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void Bind( lua_State* tolua_S );
|
static void Bind( lua_State* tolua_S);
|
||||||
};
|
};
|
||||||
|
@ -9,7 +9,7 @@ inline unsigned int GetTime()
|
|||||||
return (unsigned int)time(0);
|
return (unsigned int)time(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::string GetChar( std::string & a_Str, unsigned int a_Idx )
|
inline std::string GetChar( std::string & a_Str, unsigned int a_Idx)
|
||||||
{
|
{
|
||||||
return std::string(1, a_Str[ a_Idx ]);
|
return std::string(1, a_Str[ a_Idx ]);
|
||||||
}
|
}
|
||||||
|
@ -319,9 +319,9 @@ static int tolua_DoWith(lua_State* tolua_S)
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
||||||
: LuaState( a_LuaState )
|
: LuaState( a_LuaState)
|
||||||
, FuncRef( a_FuncRef )
|
, FuncRef( a_FuncRef)
|
||||||
, TableRef( a_TableRef )
|
, TableRef( a_TableRef)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -358,7 +358,7 @@ static int tolua_DoWith(lua_State* tolua_S)
|
|||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
||||||
|
|
||||||
/* Push return value on stack */
|
/* Push return value on stack */
|
||||||
tolua_pushboolean(tolua_S, bRetVal );
|
tolua_pushboolean(tolua_S, bRetVal);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,7 +448,7 @@ static int tolua_DoWithID(lua_State* tolua_S)
|
|||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
||||||
|
|
||||||
/* Push return value on stack */
|
/* Push return value on stack */
|
||||||
tolua_pushboolean(tolua_S, bRetVal );
|
tolua_pushboolean(tolua_S, bRetVal);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -478,7 +478,7 @@ static int tolua_DoWithXYZ(lua_State* tolua_S)
|
|||||||
int ItemX = ((int)tolua_tonumber(tolua_S, 2, 0));
|
int ItemX = ((int)tolua_tonumber(tolua_S, 2, 0));
|
||||||
int ItemY = ((int)tolua_tonumber(tolua_S, 3, 0));
|
int ItemY = ((int)tolua_tonumber(tolua_S, 3, 0));
|
||||||
int ItemZ = ((int)tolua_tonumber(tolua_S, 4, 0));
|
int ItemZ = ((int)tolua_tonumber(tolua_S, 4, 0));
|
||||||
LOG("x %i y %i z %i", ItemX, ItemY, ItemZ );
|
LOG("x %i y %i z %i", ItemX, ItemY, ItemZ);
|
||||||
if (!lua_isfunction( tolua_S, 5))
|
if (!lua_isfunction( tolua_S, 5))
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a function for parameter #4");
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a function for parameter #4");
|
||||||
@ -506,9 +506,9 @@ static int tolua_DoWithXYZ(lua_State* tolua_S)
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
||||||
: LuaState( a_LuaState )
|
: LuaState( a_LuaState)
|
||||||
, FuncRef( a_FuncRef )
|
, FuncRef( a_FuncRef)
|
||||||
, TableRef( a_TableRef )
|
, TableRef( a_TableRef)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -544,7 +544,7 @@ static int tolua_DoWithXYZ(lua_State* tolua_S)
|
|||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
||||||
|
|
||||||
/* Push return value on stack */
|
/* Push return value on stack */
|
||||||
tolua_pushboolean(tolua_S, bRetVal );
|
tolua_pushboolean(tolua_S, bRetVal);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,9 +601,9 @@ static int tolua_ForEachInChunk(lua_State * tolua_S)
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
||||||
: LuaState( a_LuaState )
|
: LuaState( a_LuaState)
|
||||||
, FuncRef( a_FuncRef )
|
, FuncRef( a_FuncRef)
|
||||||
, TableRef( a_TableRef )
|
, TableRef( a_TableRef)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -640,7 +640,7 @@ static int tolua_ForEachInChunk(lua_State * tolua_S)
|
|||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
||||||
|
|
||||||
/* Push return value on stack */
|
/* Push return value on stack */
|
||||||
tolua_pushboolean(tolua_S, bRetVal );
|
tolua_pushboolean(tolua_S, bRetVal);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -694,16 +694,16 @@ static int tolua_ForEach(lua_State * tolua_S)
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
||||||
: LuaState( a_LuaState )
|
: LuaState( a_LuaState)
|
||||||
, FuncRef( a_FuncRef )
|
, FuncRef( a_FuncRef)
|
||||||
, TableRef( a_TableRef )
|
, TableRef( a_TableRef)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual bool Item(Ty2 * a_Item) override
|
virtual bool Item(Ty2 * a_Item) override
|
||||||
{
|
{
|
||||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
||||||
tolua_pushusertype( LuaState, a_Item, Ty2::GetClassStatic() );
|
tolua_pushusertype( LuaState, a_Item, Ty2::GetClassStatic());
|
||||||
if (TableRef != LUA_REFNIL)
|
if (TableRef != LUA_REFNIL)
|
||||||
{
|
{
|
||||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
||||||
@ -733,7 +733,7 @@ static int tolua_ForEach(lua_State * tolua_S)
|
|||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
||||||
|
|
||||||
/* Push return value on stack */
|
/* Push return value on stack */
|
||||||
tolua_pushboolean(tolua_S, bRetVal );
|
tolua_pushboolean(tolua_S, bRetVal);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1390,8 +1390,8 @@ static int tolua_cPluginManager_ForEachCommand(lua_State * tolua_S)
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cLuaCallback(lua_State * a_LuaState, int a_FuncRef)
|
cLuaCallback(lua_State * a_LuaState, int a_FuncRef)
|
||||||
: LuaState( a_LuaState )
|
: LuaState( a_LuaState)
|
||||||
, FuncRef( a_FuncRef )
|
, FuncRef( a_FuncRef)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -1467,8 +1467,8 @@ static int tolua_cPluginManager_ForEachConsoleCommand(lua_State * tolua_S)
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cLuaCallback(lua_State * a_LuaState, int a_FuncRef)
|
cLuaCallback(lua_State * a_LuaState, int a_FuncRef)
|
||||||
: LuaState( a_LuaState )
|
: LuaState( a_LuaState)
|
||||||
, FuncRef( a_FuncRef )
|
, FuncRef( a_FuncRef)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -1963,7 +1963,7 @@ static int tolua_cPluginLua_AddTab(lua_State* tolua_S)
|
|||||||
LOGWARN("WARNING: Using deprecated function AddTab()! Use AddWebTab() instead. (plugin \"%s\" in folder \"%s\")",
|
LOGWARN("WARNING: Using deprecated function AddTab()! Use AddWebTab() instead. (plugin \"%s\" in folder \"%s\")",
|
||||||
self->GetName().c_str(), self->GetDirectory().c_str()
|
self->GetName().c_str(), self->GetDirectory().c_str()
|
||||||
);
|
);
|
||||||
return tolua_cPluginLua_AddWebTab( tolua_S );
|
return tolua_cPluginLua_AddWebTab( tolua_S);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2011,7 +2011,7 @@ static int tolua_md5(lua_State* tolua_S)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_push_StringStringMap(lua_State* tolua_S, std::map< std::string, std::string >& a_StringStringMap )
|
static int tolua_push_StringStringMap(lua_State* tolua_S, std::map< std::string, std::string >& a_StringStringMap)
|
||||||
{
|
{
|
||||||
lua_newtable(tolua_S);
|
lua_newtable(tolua_S);
|
||||||
int top = lua_gettop(tolua_S);
|
int top = lua_gettop(tolua_S);
|
||||||
@ -2062,9 +2062,9 @@ static int tolua_get_HTTPRequest_FormData(lua_State* tolua_S)
|
|||||||
|
|
||||||
for (std::map<std::string, HTTPFormData>::iterator it = FormData.begin(); it != FormData.end(); ++it)
|
for (std::map<std::string, HTTPFormData>::iterator it = FormData.begin(); it != FormData.end(); ++it)
|
||||||
{
|
{
|
||||||
lua_pushstring(tolua_S, it->first.c_str() );
|
lua_pushstring(tolua_S, it->first.c_str());
|
||||||
tolua_pushusertype(tolua_S, &(it->second), "HTTPFormData" );
|
tolua_pushusertype(tolua_S, &(it->second), "HTTPFormData");
|
||||||
// lua_pushlstring(tolua_S, it->second.Value.c_str(), it->second.Value.size() ); // Might contain binary data
|
// lua_pushlstring(tolua_S, it->second.Value.c_str(), it->second.Value.size()); // Might contain binary data
|
||||||
lua_settable(tolua_S, top);
|
lua_settable(tolua_S, top);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2113,8 +2113,8 @@ static int tolua_cWebPlugin_GetTabNames(lua_State * tolua_S)
|
|||||||
{
|
{
|
||||||
const AString & FancyName = iter->first;
|
const AString & FancyName = iter->first;
|
||||||
const AString & WebName = iter->second;
|
const AString & WebName = iter->second;
|
||||||
tolua_pushstring( tolua_S, WebName.c_str() ); // Because the WebName is supposed to be unique, use it as key
|
tolua_pushstring( tolua_S, WebName.c_str()); // Because the WebName is supposed to be unique, use it as key
|
||||||
tolua_pushstring( tolua_S, FancyName.c_str() );
|
tolua_pushstring( tolua_S, FancyName.c_str());
|
||||||
//
|
//
|
||||||
lua_rawset(tolua_S, -3);
|
lua_rawset(tolua_S, -3);
|
||||||
++iter;
|
++iter;
|
||||||
|
@ -4,5 +4,5 @@ struct lua_State;
|
|||||||
class ManualBindings
|
class ManualBindings
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void Bind( lua_State* tolua_S );
|
static void Bind( lua_State* tolua_S);
|
||||||
};
|
};
|
||||||
|
@ -33,7 +33,7 @@ class cPlugin
|
|||||||
public:
|
public:
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
cPlugin( const AString & a_PluginDirectory );
|
cPlugin( const AString & a_PluginDirectory);
|
||||||
virtual ~cPlugin();
|
virtual ~cPlugin();
|
||||||
|
|
||||||
virtual void OnDisable(void) {}
|
virtual void OnDisable(void) {}
|
||||||
@ -141,7 +141,7 @@ public:
|
|||||||
E_SQUIRREL, // OBSOLETE, but kept in place to remind us of the horrors lurking in the history
|
E_SQUIRREL, // OBSOLETE, but kept in place to remind us of the horrors lurking in the history
|
||||||
};
|
};
|
||||||
PluginLanguage GetLanguage() { return m_Language; }
|
PluginLanguage GetLanguage() { return m_Language; }
|
||||||
void SetLanguage( PluginLanguage a_Language ) { m_Language = a_Language; }
|
void SetLanguage( PluginLanguage a_Language) { m_Language = a_Language; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PluginLanguage m_Language;
|
PluginLanguage m_Language;
|
||||||
|
@ -1655,7 +1655,7 @@ int cPluginLua::CallFunctionFromForeignState(
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
AString cPluginLua::HandleWebRequest(const HTTPRequest * a_Request )
|
AString cPluginLua::HandleWebRequest(const HTTPRequest * a_Request)
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
std::string RetVal = "";
|
std::string RetVal = "";
|
||||||
|
@ -144,7 +144,7 @@ public:
|
|||||||
virtual const AString GetWebTitle(void) const {return GetName(); }
|
virtual const AString GetWebTitle(void) const {return GetName(); }
|
||||||
|
|
||||||
// cWebPlugin and WebAdmin stuff
|
// cWebPlugin and WebAdmin stuff
|
||||||
virtual AString HandleWebRequest(const HTTPRequest * a_Request ) override;
|
virtual AString HandleWebRequest(const HTTPRequest * a_Request) override;
|
||||||
bool AddWebTab(const AString & a_Title, lua_State * a_LuaState, int a_FunctionReference); // >> EXPORTED IN MANUALBINDINGS <<
|
bool AddWebTab(const AString & a_Title, lua_State * a_LuaState, int a_FunctionReference); // >> EXPORTED IN MANUALBINDINGS <<
|
||||||
|
|
||||||
/** Binds the command to call the function specified by a Lua function reference. Simply adds to CommandMap. */
|
/** Binds the command to call the function specified by a Lua function reference. Simply adds to CommandMap. */
|
||||||
|
@ -72,7 +72,7 @@ void cPluginManager::FindPlugins(void)
|
|||||||
{
|
{
|
||||||
PluginMap::iterator thiz = itr;
|
PluginMap::iterator thiz = itr;
|
||||||
++thiz;
|
++thiz;
|
||||||
m_Plugins.erase( itr );
|
m_Plugins.erase( itr);
|
||||||
itr = thiz;
|
itr = thiz;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1432,11 +1432,11 @@ cPluginManager::CommandResult cPluginManager::HandleCommand(cPlayer * a_Player,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cPlugin * cPluginManager::GetPlugin( const AString & a_Plugin ) const
|
cPlugin * cPluginManager::GetPlugin( const AString & a_Plugin) const
|
||||||
{
|
{
|
||||||
for (PluginMap::const_iterator itr = m_Plugins.begin(); itr != m_Plugins.end(); ++itr)
|
for (PluginMap::const_iterator itr = m_Plugins.begin(); itr != m_Plugins.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (itr->second == NULL ) continue;
|
if (itr->second == NULL) continue;
|
||||||
if (itr->second->GetName().compare(a_Plugin) == 0)
|
if (itr->second->GetName().compare(a_Plugin) == 0)
|
||||||
{
|
{
|
||||||
return itr->second;
|
return itr->second;
|
||||||
|
@ -163,7 +163,7 @@ public:
|
|||||||
|
|
||||||
typedef std::map< AString, cPlugin * > PluginMap;
|
typedef std::map< AString, cPlugin * > PluginMap;
|
||||||
typedef std::list< cPlugin * > PluginList;
|
typedef std::list< cPlugin * > PluginList;
|
||||||
cPlugin * GetPlugin( const AString & a_Plugin ) const; // tolua_export
|
cPlugin * GetPlugin( const AString & a_Plugin) const; // tolua_export
|
||||||
const PluginMap & GetAllPlugins() const; // >> EXPORTED IN MANUALBINDINGS <<
|
const PluginMap & GetAllPlugins() const; // >> EXPORTED IN MANUALBINDINGS <<
|
||||||
|
|
||||||
// tolua_begin
|
// tolua_begin
|
||||||
|
@ -45,12 +45,12 @@ cWebPlugin::~cWebPlugin()
|
|||||||
std::list<std::pair<AString, AString> > cWebPlugin::GetTabNames(void)
|
std::list<std::pair<AString, AString> > cWebPlugin::GetTabNames(void)
|
||||||
{
|
{
|
||||||
std::list< std::pair< AString, AString > > NameList;
|
std::list< std::pair< AString, AString > > NameList;
|
||||||
for (TabList::iterator itr = GetTabs().begin(); itr != GetTabs().end(); ++itr )
|
for (TabList::iterator itr = GetTabs().begin(); itr != GetTabs().end(); ++itr)
|
||||||
{
|
{
|
||||||
std::pair< AString, AString > StringPair;
|
std::pair< AString, AString > StringPair;
|
||||||
StringPair.first = (*itr)->Title;
|
StringPair.first = (*itr)->Title;
|
||||||
StringPair.second = (*itr)->SafeTitle;
|
StringPair.second = (*itr)->SafeTitle;
|
||||||
NameList.push_back( StringPair );
|
NameList.push_back( StringPair);
|
||||||
}
|
}
|
||||||
return NameList;
|
return NameList;
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ std::pair< AString, AString > cWebPlugin::GetTabNameForRequest(const HTTPRequest
|
|||||||
sWebPluginTab * Tab = NULL;
|
sWebPluginTab * Tab = NULL;
|
||||||
if (Split.size() > 2) // If we got the tab name, show that page
|
if (Split.size() > 2) // If we got the tab name, show that page
|
||||||
{
|
{
|
||||||
for (TabList::iterator itr = GetTabs().begin(); itr != GetTabs().end(); ++itr )
|
for (TabList::iterator itr = GetTabs().begin(); itr != GetTabs().end(); ++itr)
|
||||||
{
|
{
|
||||||
if ((*itr)->SafeTitle.compare(Split[2]) == 0) // This is the one!
|
if ((*itr)->SafeTitle.compare(Split[2]) == 0) // This is the one!
|
||||||
{
|
{
|
||||||
@ -80,7 +80,7 @@ std::pair< AString, AString > cWebPlugin::GetTabNameForRequest(const HTTPRequest
|
|||||||
}
|
}
|
||||||
else // Otherwise show the first tab
|
else // Otherwise show the first tab
|
||||||
{
|
{
|
||||||
if (GetTabs().size() > 0 )
|
if (GetTabs().size() > 0)
|
||||||
Tab = *GetTabs().begin();
|
Tab = *GetTabs().begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,14 +100,14 @@ std::pair< AString, AString > cWebPlugin::GetTabNameForRequest(const HTTPRequest
|
|||||||
AString cWebPlugin::SafeString(const AString & a_String)
|
AString cWebPlugin::SafeString(const AString & a_String)
|
||||||
{
|
{
|
||||||
AString RetVal;
|
AString RetVal;
|
||||||
for (unsigned int i = 0; i < a_String.size(); ++i )
|
for (unsigned int i = 0; i < a_String.size(); ++i)
|
||||||
{
|
{
|
||||||
char c = a_String[i];
|
char c = a_String[i];
|
||||||
if (c == ' ' )
|
if (c == ' ')
|
||||||
{
|
{
|
||||||
c = '_';
|
c = '_';
|
||||||
}
|
}
|
||||||
RetVal.push_back( c );
|
RetVal.push_back( c);
|
||||||
}
|
}
|
||||||
return RetVal;
|
return RetVal;
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,9 @@ public:
|
|||||||
// tolua_begin
|
// tolua_begin
|
||||||
virtual const AString GetWebTitle(void) const = 0;
|
virtual const AString GetWebTitle(void) const = 0;
|
||||||
|
|
||||||
virtual AString HandleWebRequest(const HTTPRequest * a_Request ) = 0;
|
virtual AString HandleWebRequest(const HTTPRequest * a_Request) = 0;
|
||||||
|
|
||||||
static AString SafeString( const AString & a_String );
|
static AString SafeString( const AString & a_String);
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
struct sWebPluginTab
|
struct sWebPluginTab
|
||||||
@ -37,7 +37,7 @@ public:
|
|||||||
|
|
||||||
typedef std::list< std::pair<AString, AString> > TabNameList;
|
typedef std::list< std::pair<AString, AString> > TabNameList;
|
||||||
TabNameList GetTabNames(); // >> EXPORTED IN MANUALBINDINGS <<
|
TabNameList GetTabNames(); // >> EXPORTED IN MANUALBINDINGS <<
|
||||||
std::pair< AString, AString > GetTabNameForRequest(const HTTPRequest* a_Request );
|
std::pair< AString, AString > GetTabNameForRequest(const HTTPRequest* a_Request);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TabList m_Tabs;
|
TabList m_Tabs;
|
||||||
|
@ -66,7 +66,7 @@ int cBeaconEntity::GetPyramidLevel(void)
|
|||||||
|
|
||||||
bool cBeaconEntity::IsMineralBlock(BLOCKTYPE a_BlockType)
|
bool cBeaconEntity::IsMineralBlock(BLOCKTYPE a_BlockType)
|
||||||
{
|
{
|
||||||
switch(a_BlockType)
|
switch (a_BlockType)
|
||||||
{
|
{
|
||||||
case E_BLOCK_DIAMOND_BLOCK:
|
case E_BLOCK_DIAMOND_BLOCK:
|
||||||
case E_BLOCK_GOLD_BLOCK:
|
case E_BLOCK_GOLD_BLOCK:
|
||||||
|
@ -33,7 +33,7 @@ public:
|
|||||||
static bool IsMineralBlock(BLOCKTYPE a_BlockType);
|
static bool IsMineralBlock(BLOCKTYPE a_BlockType);
|
||||||
|
|
||||||
// cBlockEntity overrides:
|
// cBlockEntity overrides:
|
||||||
virtual void SaveToJson(Json::Value& a_Value ) override;
|
virtual void SaveToJson(Json::Value& a_Value) override;
|
||||||
virtual void SendTo(cClientHandle & a_Client) override;
|
virtual void SendTo(cClientHandle & a_Client) override;
|
||||||
virtual void UsedBy(cPlayer * a_Player) override;
|
virtual void UsedBy(cPlayer * a_Player) override;
|
||||||
virtual bool Tick(float a_Dt, cChunk & /* a_Chunk */) override;
|
virtual bool Tick(float a_Dt, cChunk & /* a_Chunk */) override;
|
||||||
|
@ -79,7 +79,7 @@ public:
|
|||||||
virtual void SaveToJson (Json::Value & a_Value) = 0;
|
virtual void SaveToJson (Json::Value & a_Value) = 0;
|
||||||
|
|
||||||
/// Called when a player uses this entity; should open the UI window
|
/// Called when a player uses this entity; should open the UI window
|
||||||
virtual void UsedBy( cPlayer * a_Player ) = 0;
|
virtual void UsedBy( cPlayer * a_Player) = 0;
|
||||||
|
|
||||||
/** Sends the packet defining the block entity to the client specified.
|
/** Sends the packet defining the block entity to the client specified.
|
||||||
To send to all eligible clients, use cWorld::BroadcastBlockEntity()
|
To send to all eligible clients, use cWorld::BroadcastBlockEntity()
|
||||||
|
@ -38,8 +38,8 @@ public:
|
|||||||
/// Creates a new empty command block entity
|
/// Creates a new empty command block entity
|
||||||
cCommandBlockEntity(int a_X, int a_Y, int a_Z, cWorld * a_World);
|
cCommandBlockEntity(int a_X, int a_Y, int a_Z, cWorld * a_World);
|
||||||
|
|
||||||
bool LoadFromJson( const Json::Value& a_Value );
|
bool LoadFromJson( const Json::Value& a_Value);
|
||||||
virtual void SaveToJson(Json::Value& a_Value ) override;
|
virtual void SaveToJson(Json::Value& a_Value) override;
|
||||||
|
|
||||||
virtual bool Tick(float a_Dt, cChunk & a_Chunk) override;
|
virtual bool Tick(float a_Dt, cChunk & a_Chunk) override;
|
||||||
virtual void SendTo(cClientHandle & a_Client) override;
|
virtual void SendTo(cClientHandle & a_Client) override;
|
||||||
|
@ -39,8 +39,8 @@ public:
|
|||||||
/** Creates a new flowerpot entity at the specified block coords. a_World may be NULL */
|
/** Creates a new flowerpot entity at the specified block coords. a_World may be NULL */
|
||||||
cFlowerPotEntity(int a_BlocX, int a_BlockY, int a_BlockZ, cWorld * a_World);
|
cFlowerPotEntity(int a_BlocX, int a_BlockY, int a_BlockZ, cWorld * a_World);
|
||||||
|
|
||||||
bool LoadFromJson( const Json::Value& a_Value );
|
bool LoadFromJson( const Json::Value& a_Value);
|
||||||
virtual void SaveToJson(Json::Value& a_Value ) override;
|
virtual void SaveToJson(Json::Value& a_Value) override;
|
||||||
|
|
||||||
virtual void Destroy(void) override;
|
virtual void Destroy(void) override;
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@ bool cFurnaceEntity::LoadFromJson(const Json::Value & a_Value)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cFurnaceEntity::SaveToJson( Json::Value& a_Value )
|
void cFurnaceEntity::SaveToJson( Json::Value& a_Value)
|
||||||
{
|
{
|
||||||
a_Value["x"] = m_PosX;
|
a_Value["x"] = m_PosX;
|
||||||
a_Value["y"] = m_PosY;
|
a_Value["y"] = m_PosY;
|
||||||
|
@ -37,8 +37,8 @@ public:
|
|||||||
/** Creates a new mob head entity at the specified block coords. a_World may be NULL */
|
/** Creates a new mob head entity at the specified block coords. a_World may be NULL */
|
||||||
cMobHeadEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World);
|
cMobHeadEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World);
|
||||||
|
|
||||||
bool LoadFromJson( const Json::Value& a_Value );
|
bool LoadFromJson( const Json::Value& a_Value);
|
||||||
virtual void SaveToJson(Json::Value& a_Value ) override;
|
virtual void SaveToJson(Json::Value& a_Value) override;
|
||||||
|
|
||||||
// tolua_begin
|
// tolua_begin
|
||||||
|
|
||||||
|
@ -37,8 +37,8 @@ public:
|
|||||||
/// Creates a new empty sign entity at the specified block coords and block type (wall or standing). a_World may be NULL
|
/// Creates a new empty sign entity at the specified block coords and block type (wall or standing). a_World may be NULL
|
||||||
cSignEntity(BLOCKTYPE a_BlockType, int a_X, int a_Y, int a_Z, cWorld * a_World);
|
cSignEntity(BLOCKTYPE a_BlockType, int a_X, int a_Y, int a_Z, cWorld * a_World);
|
||||||
|
|
||||||
bool LoadFromJson( const Json::Value& a_Value );
|
bool LoadFromJson( const Json::Value& a_Value);
|
||||||
virtual void SaveToJson(Json::Value& a_Value ) override;
|
virtual void SaveToJson(Json::Value& a_Value) override;
|
||||||
|
|
||||||
// tolua_begin
|
// tolua_begin
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ void cBlockBedHandler::OnDestroyed(cChunkInterface & a_ChunkInterface, cWorldInt
|
|||||||
{
|
{
|
||||||
NIBBLETYPE OldMeta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
NIBBLETYPE OldMeta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
||||||
|
|
||||||
Vector3i ThisPos( a_BlockX, a_BlockY, a_BlockZ );
|
Vector3i ThisPos( a_BlockX, a_BlockY, a_BlockZ);
|
||||||
Vector3i Direction = MetaDataToDirection( OldMeta & 0x7 );
|
Vector3i Direction = MetaDataToDirection( OldMeta & 0x7);
|
||||||
if (OldMeta & 0x8)
|
if (OldMeta & 0x8)
|
||||||
{
|
{
|
||||||
// Was pillow
|
// Was pillow
|
||||||
|
@ -175,7 +175,7 @@ public:
|
|||||||
|
|
||||||
cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType)
|
cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType)
|
||||||
{
|
{
|
||||||
switch(a_BlockType)
|
switch (a_BlockType)
|
||||||
{
|
{
|
||||||
// Block handlers, alphabetically sorted:
|
// Block handlers, alphabetically sorted:
|
||||||
case E_BLOCK_ACACIA_WOOD_STAIRS: return new cBlockStairsHandler (a_BlockType);
|
case E_BLOCK_ACACIA_WOOD_STAIRS: return new cBlockStairsHandler (a_BlockType);
|
||||||
@ -254,7 +254,7 @@ cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType)
|
|||||||
case E_BLOCK_NEW_LOG: return new cBlockSidewaysHandler (a_BlockType);
|
case E_BLOCK_NEW_LOG: return new cBlockSidewaysHandler (a_BlockType);
|
||||||
case E_BLOCK_NOTE_BLOCK: return new cBlockNoteHandler (a_BlockType);
|
case E_BLOCK_NOTE_BLOCK: return new cBlockNoteHandler (a_BlockType);
|
||||||
case E_BLOCK_PISTON: return new cBlockPistonHandler (a_BlockType);
|
case E_BLOCK_PISTON: return new cBlockPistonHandler (a_BlockType);
|
||||||
case E_BLOCK_PISTON_EXTENSION: return new cBlockPistonHeadHandler ( );
|
case E_BLOCK_PISTON_EXTENSION: return new cBlockPistonHeadHandler;
|
||||||
case E_BLOCK_PLANKS: return new cBlockPlanksHandler (a_BlockType);
|
case E_BLOCK_PLANKS: return new cBlockPlanksHandler (a_BlockType);
|
||||||
case E_BLOCK_POTATOES: return new cBlockCropsHandler (a_BlockType);
|
case E_BLOCK_POTATOES: return new cBlockCropsHandler (a_BlockType);
|
||||||
case E_BLOCK_POWERED_RAIL: return new cBlockRailHandler (a_BlockType);
|
case E_BLOCK_POWERED_RAIL: return new cBlockRailHandler (a_BlockType);
|
||||||
|
@ -99,7 +99,7 @@ public:
|
|||||||
|
|
||||||
static bool CanBePlacedOn(BLOCKTYPE a_BlockType, eBlockFace a_BlockFace)
|
static bool CanBePlacedOn(BLOCKTYPE a_BlockType, eBlockFace a_BlockFace)
|
||||||
{
|
{
|
||||||
if (!cBlockInfo::FullyOccupiesVoxel(a_BlockType) )
|
if (!cBlockInfo::FullyOccupiesVoxel(a_BlockType))
|
||||||
{
|
{
|
||||||
return (a_BlockFace == BLOCK_FACE_TOP); // Allow placement only when torch upright (for glass, etc.); exceptions won't even be sent by client, no need to handle
|
return (a_BlockFace == BLOCK_FACE_TOP); // Allow placement only when torch upright (for glass, etc.); exceptions won't even be sent by client, no need to handle
|
||||||
}
|
}
|
||||||
@ -168,7 +168,7 @@ public:
|
|||||||
// No need to check for upright orientation, it was done when the torch was placed
|
// No need to check for upright orientation, it was done when the torch was placed
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (!cBlockInfo::FullyOccupiesVoxel(BlockInQuestion) )
|
else if (!cBlockInfo::FullyOccupiesVoxel(BlockInQuestion))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ public:
|
|||||||
|
|
||||||
static char MetaDataToDirection(NIBBLETYPE a_MetaData)
|
static char MetaDataToDirection(NIBBLETYPE a_MetaData)
|
||||||
{
|
{
|
||||||
switch(a_MetaData)
|
switch (a_MetaData)
|
||||||
{
|
{
|
||||||
case 0x1: return BLOCK_FACE_NORTH;
|
case 0x1: return BLOCK_FACE_NORTH;
|
||||||
case 0x4: return BLOCK_FACE_SOUTH;
|
case 0x4: return BLOCK_FACE_SOUTH;
|
||||||
|
@ -6,7 +6,7 @@ class cBroadcastInterface
|
|||||||
public:
|
public:
|
||||||
virtual ~cBroadcastInterface() {}
|
virtual ~cBroadcastInterface() {}
|
||||||
|
|
||||||
virtual void BroadcastUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ ) = 0;
|
virtual void BroadcastUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ) = 0;
|
||||||
virtual void BroadcastSoundEffect(const AString & a_SoundName, double a_X, double a_Y, double a_Z, float a_Volume, float a_Pitch, const cClientHandle * a_Exclude = NULL) = 0;
|
virtual void BroadcastSoundEffect(const AString & a_SoundName, double a_X, double a_Y, double a_Z, float a_Volume, float a_Pitch, const cClientHandle * a_Exclude = NULL) = 0;
|
||||||
virtual void BroadcastEntityAnimation(const cEntity & a_Entity, char a_Animation, const cClientHandle * a_Exclude = NULL) = 0;
|
virtual void BroadcastEntityAnimation(const cEntity & a_Entity, char a_Animation, const cClientHandle * a_Exclude = NULL) = 0;
|
||||||
};
|
};
|
||||||
|
@ -61,9 +61,9 @@ public:
|
|||||||
m_ChunkMap->FastSetBlock(a_BlockX, a_BlockY, a_BlockZ, a_BlockType, a_BlockMeta);
|
m_ChunkMap->FastSetBlock(a_BlockX, a_BlockY, a_BlockZ, a_BlockType, a_BlockMeta);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FastSetBlock(const Vector3i & a_Pos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta )
|
void FastSetBlock(const Vector3i & a_Pos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
|
||||||
{
|
{
|
||||||
FastSetBlock( a_Pos.x, a_Pos.y, a_Pos.z, a_BlockType, a_BlockMeta );
|
FastSetBlock( a_Pos.x, a_Pos.y, a_Pos.z, a_BlockType, a_BlockMeta);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UseBlockEntity(cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ)
|
void UseBlockEntity(cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
|
@ -31,14 +31,14 @@ public:
|
|||||||
static const char * Yellow;
|
static const char * Yellow;
|
||||||
static const char * White;
|
static const char * White;
|
||||||
|
|
||||||
// Styles ( source: http://wiki.vg/Chat )
|
// Styles
|
||||||
|
// source: http://wiki.vg/Chat
|
||||||
static const char * Random;
|
static const char * Random;
|
||||||
static const char * Bold;
|
static const char * Bold;
|
||||||
static const char * Strikethrough;
|
static const char * Strikethrough;
|
||||||
static const char * Underlined;
|
static const char * Underlined;
|
||||||
static const char * Italic;
|
static const char * Italic;
|
||||||
static const char * Plain;
|
static const char * Plain;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
@ -44,12 +44,12 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// sSetBlock:
|
// sSetBlock:
|
||||||
|
|
||||||
sSetBlock::sSetBlock( int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta ) // absolute block position
|
sSetBlock::sSetBlock( int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) // absolute block position
|
||||||
: x( a_BlockX )
|
: x( a_BlockX)
|
||||||
, y( a_BlockY )
|
, y( a_BlockY)
|
||||||
, z( a_BlockZ )
|
, z( a_BlockZ)
|
||||||
, BlockType( a_BlockType )
|
, BlockType( a_BlockType)
|
||||||
, BlockMeta( a_BlockMeta )
|
, BlockMeta( a_BlockMeta)
|
||||||
{
|
{
|
||||||
cChunkDef::AbsoluteToRelative(x, y, z, ChunkX, ChunkZ);
|
cChunkDef::AbsoluteToRelative(x, y, z, ChunkX, ChunkZ);
|
||||||
}
|
}
|
||||||
@ -116,7 +116,7 @@ cChunk::~cChunk()
|
|||||||
{
|
{
|
||||||
cPluginManager::Get()->CallHookChunkUnloaded(m_World, m_PosX, m_PosZ);
|
cPluginManager::Get()->CallHookChunkUnloaded(m_World, m_PosX, m_PosZ);
|
||||||
|
|
||||||
// LOGINFO("### delete cChunk() (%i, %i) from %p, thread 0x%x ###", m_PosX, m_PosZ, this, GetCurrentThreadId() );
|
// LOGINFO("### delete cChunk() (%i, %i) from %p, thread 0x%x ###", m_PosX, m_PosZ, this, GetCurrentThreadId());
|
||||||
|
|
||||||
for (cBlockEntityList::iterator itr = m_BlockEntities.begin(); itr != m_BlockEntities.end(); ++itr)
|
for (cBlockEntityList::iterator itr = m_BlockEntities.begin(); itr != m_BlockEntities.end(); ++itr)
|
||||||
{
|
{
|
||||||
@ -781,7 +781,7 @@ void cChunk::CheckBlocks()
|
|||||||
void cChunk::TickBlocks(void)
|
void cChunk::TickBlocks(void)
|
||||||
{
|
{
|
||||||
// Tick dem blocks
|
// Tick dem blocks
|
||||||
// _X: We must limit the random number or else we get a nasty int overflow bug ( http://forum.mc-server.org/showthread.php?tid=457 )
|
// _X: We must limit the random number or else we get a nasty int overflow bug - http://forum.mc-server.org/showthread.php?tid=457
|
||||||
int RandomX = m_World->GetTickRandomNumber(0x00ffffff);
|
int RandomX = m_World->GetTickRandomNumber(0x00ffffff);
|
||||||
int RandomY = m_World->GetTickRandomNumber(0x00ffffff);
|
int RandomY = m_World->GetTickRandomNumber(0x00ffffff);
|
||||||
int RandomZ = m_World->GetTickRandomNumber(0x00ffffff);
|
int RandomZ = m_World->GetTickRandomNumber(0x00ffffff);
|
||||||
@ -1394,7 +1394,7 @@ void cChunk::CalculateHeightmap(const BLOCKTYPE * a_BlockTypes)
|
|||||||
{
|
{
|
||||||
for (int y = Height - 1; y > -1; y--)
|
for (int y = Height - 1; y > -1; y--)
|
||||||
{
|
{
|
||||||
int index = MakeIndex( x, y, z );
|
int index = MakeIndex( x, y, z);
|
||||||
if (a_BlockTypes[index] != E_BLOCK_AIR)
|
if (a_BlockTypes[index] != E_BLOCK_AIR)
|
||||||
{
|
{
|
||||||
m_HeightMap[x + z * Width] = (HEIGHTTYPE)y;
|
m_HeightMap[x + z * Width] = (HEIGHTTYPE)y;
|
||||||
@ -1730,9 +1730,9 @@ void cChunk::CollectPickupsByPlayer(cPlayer * a_Player)
|
|||||||
{
|
{
|
||||||
continue; // Only pickups and projectiles can be picked up
|
continue; // Only pickups and projectiles can be picked up
|
||||||
}
|
}
|
||||||
float DiffX = (float)((*itr)->GetPosX() - PosX );
|
float DiffX = (float)((*itr)->GetPosX() - PosX);
|
||||||
float DiffY = (float)((*itr)->GetPosY() - PosY );
|
float DiffY = (float)((*itr)->GetPosY() - PosY);
|
||||||
float DiffZ = (float)((*itr)->GetPosZ() - PosZ );
|
float DiffZ = (float)((*itr)->GetPosZ() - PosZ);
|
||||||
float SqrDist = DiffX * DiffX + DiffY * DiffY + DiffZ * DiffZ;
|
float SqrDist = DiffX * DiffX + DiffY * DiffY + DiffZ * DiffZ;
|
||||||
if (SqrDist < 1.5f * 1.5f) // 1.5 block
|
if (SqrDist < 1.5f * 1.5f) // 1.5 block
|
||||||
{
|
{
|
||||||
@ -1794,7 +1794,7 @@ bool cChunk::SetSignLines(int a_PosX, int a_PosY, int a_PosZ, const AString & a_
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cChunk::RemoveBlockEntity( cBlockEntity* a_BlockEntity )
|
void cChunk::RemoveBlockEntity( cBlockEntity* a_BlockEntity)
|
||||||
{
|
{
|
||||||
MarkDirty();
|
MarkDirty();
|
||||||
m_BlockEntities.remove(a_BlockEntity);
|
m_BlockEntities.remove(a_BlockEntity);
|
||||||
@ -1814,9 +1814,9 @@ bool cChunk::AddClient(cClientHandle* a_Client)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_LoadedByClient.push_back( a_Client );
|
m_LoadedByClient.push_back( a_Client);
|
||||||
|
|
||||||
for (cEntityList::iterator itr = m_Entities.begin(); itr != m_Entities.end(); ++itr )
|
for (cEntityList::iterator itr = m_Entities.begin(); itr != m_Entities.end(); ++itr)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
// DEBUG:
|
// DEBUG:
|
||||||
@ -1835,7 +1835,7 @@ bool cChunk::AddClient(cClientHandle* a_Client)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cChunk::RemoveClient( cClientHandle* a_Client )
|
void cChunk::RemoveClient( cClientHandle* a_Client)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
@ -1848,7 +1848,7 @@ void cChunk::RemoveClient( cClientHandle* a_Client )
|
|||||||
|
|
||||||
if (!a_Client->IsDestroyed())
|
if (!a_Client->IsDestroyed())
|
||||||
{
|
{
|
||||||
for (cEntityList::iterator itr = m_Entities.begin(); itr != m_Entities.end(); ++itr )
|
for (cEntityList::iterator itr = m_Entities.begin(); itr != m_Entities.end(); ++itr)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
// DEBUG:
|
// DEBUG:
|
||||||
@ -1868,7 +1868,7 @@ void cChunk::RemoveClient( cClientHandle* a_Client )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cChunk::HasClient( cClientHandle* a_Client )
|
bool cChunk::HasClient( cClientHandle* a_Client)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
@ -2653,7 +2653,7 @@ cChunk * cChunk::GetRelNeighborChunkAdjustCoords(int & a_RelX, int & a_RelZ) con
|
|||||||
|
|
||||||
void cChunk::BroadcastAttachEntity(const cEntity & a_Entity, const cEntity * a_Vehicle)
|
void cChunk::BroadcastAttachEntity(const cEntity & a_Entity, const cEntity * a_Vehicle)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
(*itr)->SendAttachEntity(a_Entity, a_Vehicle);
|
(*itr)->SendAttachEntity(a_Entity, a_Vehicle);
|
||||||
} // for itr - LoadedByClient[]
|
} // for itr - LoadedByClient[]
|
||||||
@ -2665,7 +2665,7 @@ void cChunk::BroadcastAttachEntity(const cEntity & a_Entity, const cEntity * a_V
|
|||||||
|
|
||||||
void cChunk::BroadcastBlockAction(int a_BlockX, int a_BlockY, int a_BlockZ, char a_Byte1, char a_Byte2, BLOCKTYPE a_BlockType, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastBlockAction(int a_BlockX, int a_BlockY, int a_BlockZ, char a_Byte1, char a_Byte2, BLOCKTYPE a_BlockType, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2681,7 +2681,7 @@ void cChunk::BroadcastBlockAction(int a_BlockX, int a_BlockY, int a_BlockZ, char
|
|||||||
|
|
||||||
void cChunk::BroadcastBlockBreakAnimation(int a_entityID, int a_blockX, int a_blockY, int a_blockZ, char a_stage, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastBlockBreakAnimation(int a_entityID, int a_blockX, int a_blockY, int a_blockZ, char a_stage, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2703,7 +2703,7 @@ void cChunk::BroadcastBlockEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cons
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2719,7 +2719,7 @@ void cChunk::BroadcastBlockEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cons
|
|||||||
|
|
||||||
void cChunk::BroadcastChunkData(cChunkDataSerializer & a_Serializer, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastChunkData(cChunkDataSerializer & a_Serializer, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2735,7 +2735,7 @@ void cChunk::BroadcastChunkData(cChunkDataSerializer & a_Serializer, const cClie
|
|||||||
|
|
||||||
void cChunk::BroadcastCollectEntity(const cEntity & a_Entity, const cPlayer & a_Player, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastCollectEntity(const cEntity & a_Entity, const cPlayer & a_Player, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2751,7 +2751,7 @@ void cChunk::BroadcastCollectEntity(const cEntity & a_Entity, const cPlayer & a_
|
|||||||
|
|
||||||
void cChunk::BroadcastDestroyEntity(const cEntity & a_Entity, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastDestroyEntity(const cEntity & a_Entity, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2767,7 +2767,7 @@ void cChunk::BroadcastDestroyEntity(const cEntity & a_Entity, const cClientHandl
|
|||||||
|
|
||||||
void cChunk::BroadcastEntityEffect(const cEntity & a_Entity, int a_EffectID, int a_Amplifier, short a_Duration, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastEntityEffect(const cEntity & a_Entity, int a_EffectID, int a_Amplifier, short a_Duration, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2783,7 +2783,7 @@ void cChunk::BroadcastEntityEffect(const cEntity & a_Entity, int a_EffectID, int
|
|||||||
|
|
||||||
void cChunk::BroadcastEntityEquipment(const cEntity & a_Entity, short a_SlotNum, const cItem & a_Item, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastEntityEquipment(const cEntity & a_Entity, short a_SlotNum, const cItem & a_Item, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2799,7 +2799,7 @@ void cChunk::BroadcastEntityEquipment(const cEntity & a_Entity, short a_SlotNum,
|
|||||||
|
|
||||||
void cChunk::BroadcastEntityHeadLook(const cEntity & a_Entity, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastEntityHeadLook(const cEntity & a_Entity, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2815,7 +2815,7 @@ void cChunk::BroadcastEntityHeadLook(const cEntity & a_Entity, const cClientHand
|
|||||||
|
|
||||||
void cChunk::BroadcastEntityLook(const cEntity & a_Entity, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastEntityLook(const cEntity & a_Entity, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2831,7 +2831,7 @@ void cChunk::BroadcastEntityLook(const cEntity & a_Entity, const cClientHandle *
|
|||||||
|
|
||||||
void cChunk::BroadcastEntityMetadata(const cEntity & a_Entity, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastEntityMetadata(const cEntity & a_Entity, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2847,7 +2847,7 @@ void cChunk::BroadcastEntityMetadata(const cEntity & a_Entity, const cClientHand
|
|||||||
|
|
||||||
void cChunk::BroadcastEntityRelMove(const cEntity & a_Entity, char a_RelX, char a_RelY, char a_RelZ, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastEntityRelMove(const cEntity & a_Entity, char a_RelX, char a_RelY, char a_RelZ, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2863,7 +2863,7 @@ void cChunk::BroadcastEntityRelMove(const cEntity & a_Entity, char a_RelX, char
|
|||||||
|
|
||||||
void cChunk::BroadcastEntityRelMoveLook(const cEntity & a_Entity, char a_RelX, char a_RelY, char a_RelZ, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastEntityRelMoveLook(const cEntity & a_Entity, char a_RelX, char a_RelY, char a_RelZ, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2879,7 +2879,7 @@ void cChunk::BroadcastEntityRelMoveLook(const cEntity & a_Entity, char a_RelX, c
|
|||||||
|
|
||||||
void cChunk::BroadcastEntityStatus(const cEntity & a_Entity, char a_Status, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastEntityStatus(const cEntity & a_Entity, char a_Status, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2895,7 +2895,7 @@ void cChunk::BroadcastEntityStatus(const cEntity & a_Entity, char a_Status, cons
|
|||||||
|
|
||||||
void cChunk::BroadcastEntityVelocity(const cEntity & a_Entity, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastEntityVelocity(const cEntity & a_Entity, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2911,7 +2911,7 @@ void cChunk::BroadcastEntityVelocity(const cEntity & a_Entity, const cClientHand
|
|||||||
|
|
||||||
void cChunk::BroadcastEntityAnimation(const cEntity & a_Entity, char a_Animation, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastEntityAnimation(const cEntity & a_Entity, char a_Animation, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::const_iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2927,7 +2927,7 @@ void cChunk::BroadcastEntityAnimation(const cEntity & a_Entity, char a_Animation
|
|||||||
|
|
||||||
void cChunk::BroadcastParticleEffect(const AString & a_ParticleName, float a_SrcX, float a_SrcY, float a_SrcZ, float a_OffsetX, float a_OffsetY, float a_OffsetZ, float a_ParticleData, int a_ParticleAmmount, cClientHandle * a_Exclude)
|
void cChunk::BroadcastParticleEffect(const AString & a_ParticleName, float a_SrcX, float a_SrcY, float a_SrcZ, float a_OffsetX, float a_OffsetY, float a_OffsetZ, float a_ParticleData, int a_ParticleAmmount, cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2943,7 +2943,7 @@ void cChunk::BroadcastParticleEffect(const AString & a_ParticleName, float a_Src
|
|||||||
|
|
||||||
void cChunk::BroadcastRemoveEntityEffect(const cEntity & a_Entity, int a_EffectID, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastRemoveEntityEffect(const cEntity & a_Entity, int a_EffectID, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2959,7 +2959,7 @@ void cChunk::BroadcastRemoveEntityEffect(const cEntity & a_Entity, int a_EffectI
|
|||||||
|
|
||||||
void cChunk::BroadcastSoundEffect(const AString & a_SoundName, double a_X, double a_Y, double a_Z, float a_Volume, float a_Pitch, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastSoundEffect(const AString & a_SoundName, double a_X, double a_Y, double a_Z, float a_Volume, float a_Pitch, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2975,7 +2975,7 @@ void cChunk::BroadcastSoundEffect(const AString & a_SoundName, double a_X, doubl
|
|||||||
|
|
||||||
void cChunk::BroadcastSoundParticleEffect(int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastSoundParticleEffect(int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -2991,7 +2991,7 @@ void cChunk::BroadcastSoundParticleEffect(int a_EffectID, int a_SrcX, int a_SrcY
|
|||||||
|
|
||||||
void cChunk::BroadcastSpawnEntity(cEntity & a_Entity, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastSpawnEntity(cEntity & a_Entity, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -3007,7 +3007,7 @@ void cChunk::BroadcastSpawnEntity(cEntity & a_Entity, const cClientHandle * a_Ex
|
|||||||
|
|
||||||
void cChunk::BroadcastThunderbolt(int a_BlockX, int a_BlockY, int a_BlockZ, const cClientHandle * a_Exclude)
|
void cChunk::BroadcastThunderbolt(int a_BlockX, int a_BlockY, int a_BlockZ, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (*itr == a_Exclude)
|
if (*itr == a_Exclude)
|
||||||
{
|
{
|
||||||
@ -3021,9 +3021,9 @@ void cChunk::BroadcastThunderbolt(int a_BlockX, int a_BlockY, int a_BlockZ, cons
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cChunk::BroadcastUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ )
|
void cChunk::BroadcastUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
{
|
{
|
||||||
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr )
|
for (cClientHandleList::iterator itr = m_LoadedByClient.begin(); itr != m_LoadedByClient.end(); ++itr)
|
||||||
{
|
{
|
||||||
(*itr)->SendUseBed(a_Entity, a_BlockX, a_BlockY, a_BlockZ);
|
(*itr)->SendUseBed(a_Entity, a_BlockX, a_BlockY, a_BlockZ);
|
||||||
} // for itr - LoadedByClient[]
|
} // for itr - LoadedByClient[]
|
||||||
|
12
src/Chunk.h
12
src/Chunk.h
@ -82,9 +82,9 @@ public:
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
To save a chunk, the WSSchema must:
|
To save a chunk, the WSSchema must:
|
||||||
1. Mark the chunk as being saved (MarkSaving() )
|
1. Mark the chunk as being saved (MarkSaving())
|
||||||
2. Get the chunk's data using GetAllData()
|
2. Get the chunk's data using GetAllData()
|
||||||
3. Mark the chunk as saved (MarkSaved() )
|
3. Mark the chunk as saved (MarkSaved())
|
||||||
If anywhere inside this sequence another thread mmodifies the chunk, the chunk will not get marked as saved in MarkSaved()
|
If anywhere inside this sequence another thread mmodifies the chunk, the chunk will not get marked as saved in MarkSaved()
|
||||||
*/
|
*/
|
||||||
void MarkSaving(void); // Marks the chunk as being saved.
|
void MarkSaving(void); // Marks the chunk as being saved.
|
||||||
@ -144,7 +144,7 @@ public:
|
|||||||
|
|
||||||
void SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, bool a_SendToClients = true);
|
void SetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, bool a_SendToClients = true);
|
||||||
// SetBlock() does a lot of work (heightmap, tickblocks, blockentities) so a BlockIdx version doesn't make sense
|
// SetBlock() does a lot of work (heightmap, tickblocks, blockentities) so a BlockIdx version doesn't make sense
|
||||||
void SetBlock( const Vector3i & a_RelBlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta ) { SetBlock( a_RelBlockPos.x, a_RelBlockPos.y, a_RelBlockPos.z, a_BlockType, a_BlockMeta ); }
|
void SetBlock( const Vector3i & a_RelBlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) { SetBlock( a_RelBlockPos.x, a_RelBlockPos.y, a_RelBlockPos.z, a_BlockType, a_BlockMeta); }
|
||||||
|
|
||||||
/** Queues a block change till the specified world tick */
|
/** Queues a block change till the specified world tick */
|
||||||
void QueueSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, Int64 a_Tick, BLOCKTYPE a_PreviousBlockType = E_BLOCK_AIR);
|
void QueueSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, Int64 a_Tick, BLOCKTYPE a_PreviousBlockType = E_BLOCK_AIR);
|
||||||
@ -195,7 +195,7 @@ public:
|
|||||||
/** Sets the sign text. Returns true if successful. Also sends update packets to all clients in the chunk */
|
/** Sets the sign text. Returns true if successful. Also sends update packets to all clients in the chunk */
|
||||||
bool SetSignLines(int a_RelX, int a_RelY, int a_RelZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4);
|
bool SetSignLines(int a_RelX, int a_RelY, int a_RelZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4);
|
||||||
|
|
||||||
int GetHeight( int a_X, int a_Z );
|
int GetHeight( int a_X, int a_Z);
|
||||||
|
|
||||||
void SendBlockTo(int a_RelX, int a_RelY, int a_RelZ, cClientHandle * a_Client);
|
void SendBlockTo(int a_RelX, int a_RelY, int a_RelZ, cClientHandle * a_Client);
|
||||||
|
|
||||||
@ -301,7 +301,7 @@ public:
|
|||||||
void BroadcastSoundParticleEffect(int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data, const cClientHandle * a_Exclude = NULL);
|
void BroadcastSoundParticleEffect(int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data, const cClientHandle * a_Exclude = NULL);
|
||||||
void BroadcastSpawnEntity (cEntity & a_Entity, const cClientHandle * a_Exclude = NULL);
|
void BroadcastSpawnEntity (cEntity & a_Entity, const cClientHandle * a_Exclude = NULL);
|
||||||
void BroadcastThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ, const cClientHandle * a_Exclude = NULL);
|
void BroadcastThunderbolt (int a_BlockX, int a_BlockY, int a_BlockZ, const cClientHandle * a_Exclude = NULL);
|
||||||
void BroadcastUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ );
|
void BroadcastUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ);
|
||||||
|
|
||||||
void SendBlockEntity (int a_BlockX, int a_BlockY, int a_BlockZ, cClientHandle & a_Client);
|
void SendBlockEntity (int a_BlockX, int a_BlockY, int a_BlockZ, cClientHandle & a_Client);
|
||||||
|
|
||||||
@ -311,7 +311,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PositionToWorldPosition(int a_RelX, int a_RelY, int a_RelZ, int & a_BlockX, int & a_BlockY, int & a_BlockZ);
|
void PositionToWorldPosition(int a_RelX, int a_RelY, int a_RelZ, int & a_BlockX, int & a_BlockY, int & a_BlockZ);
|
||||||
Vector3i PositionToWorldPosition(int a_RelX, int a_RelY, int a_RelZ );
|
Vector3i PositionToWorldPosition(int a_RelX, int a_RelY, int a_RelZ);
|
||||||
|
|
||||||
inline void MarkDirty(void)
|
inline void MarkDirty(void)
|
||||||
{
|
{
|
||||||
|
@ -92,7 +92,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
/// Converts absolute block coords into relative (chunk + block) coords:
|
/// Converts absolute block coords into relative (chunk + block) coords:
|
||||||
inline static void AbsoluteToRelative(/* in-out */ int & a_X, int & a_Y, int & a_Z, /* out */ int & a_ChunkX, int & a_ChunkZ )
|
inline static void AbsoluteToRelative(/* in-out */ int & a_X, int & a_Y, int & a_Z, /* out */ int & a_ChunkX, int & a_ChunkZ)
|
||||||
{
|
{
|
||||||
UNUSED(a_Y);
|
UNUSED(a_Y);
|
||||||
BlockToChunk(a_X, a_Z, a_ChunkX, a_ChunkZ);
|
BlockToChunk(a_X, a_Z, a_ChunkX, a_ChunkZ);
|
||||||
@ -118,7 +118,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline static int MakeIndex(int x, int y, int z )
|
inline static int MakeIndex(int x, int y, int z)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
(x < Width) && (x > -1) &&
|
(x < Width) && (x > -1) &&
|
||||||
@ -145,7 +145,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline static Vector3i IndexToCoordinate( unsigned int index )
|
inline static Vector3i IndexToCoordinate( unsigned int index)
|
||||||
{
|
{
|
||||||
#if AXIS_ORDER == AXIS_ORDER_XZY
|
#if AXIS_ORDER == AXIS_ORDER_XZY
|
||||||
return Vector3i( // 1.2
|
return Vector3i( // 1.2
|
||||||
@ -357,7 +357,7 @@ struct sSetBlock
|
|||||||
BLOCKTYPE BlockType;
|
BLOCKTYPE BlockType;
|
||||||
NIBBLETYPE BlockMeta;
|
NIBBLETYPE BlockMeta;
|
||||||
|
|
||||||
sSetBlock( int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta ); // absolute block position
|
sSetBlock( int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta); // absolute block position
|
||||||
sSetBlock(int a_ChunkX, int a_ChunkZ, int a_X, int a_Y, int a_Z, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) :
|
sSetBlock(int a_ChunkX, int a_ChunkZ, int a_X, int a_Y, int a_Z, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) :
|
||||||
x(a_X), y(a_Y), z(a_Z),
|
x(a_X), y(a_Y), z(a_Z),
|
||||||
ChunkX(a_ChunkX), ChunkZ(a_ChunkZ),
|
ChunkX(a_ChunkX), ChunkZ(a_ChunkZ),
|
||||||
|
@ -64,7 +64,7 @@ cChunkMap::~cChunkMap()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cChunkMap::RemoveLayer( cChunkLayer* a_Layer )
|
void cChunkMap::RemoveLayer( cChunkLayer* a_Layer)
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
m_Layers.remove(a_Layer);
|
m_Layers.remove(a_Layer);
|
||||||
@ -147,7 +147,7 @@ cChunkPtr cChunkMap::GetChunk(int a_ChunkX, int a_ChunkY, int a_ChunkZ)
|
|||||||
// No need to lock m_CSLayers, since it's already locked by the operation that called us
|
// No need to lock m_CSLayers, since it's already locked by the operation that called us
|
||||||
ASSERT(m_CSLayers.IsLockedByCurrentThread());
|
ASSERT(m_CSLayers.IsLockedByCurrentThread());
|
||||||
|
|
||||||
cChunkLayer * Layer = GetLayerForChunk( a_ChunkX, a_ChunkZ );
|
cChunkLayer * Layer = GetLayerForChunk( a_ChunkX, a_ChunkZ);
|
||||||
if (Layer == NULL)
|
if (Layer == NULL)
|
||||||
{
|
{
|
||||||
// An error must have occurred, since layers are automatically created if they don't exist
|
// An error must have occurred, since layers are automatically created if they don't exist
|
||||||
@ -170,10 +170,10 @@ cChunkPtr cChunkMap::GetChunk(int a_ChunkX, int a_ChunkY, int a_ChunkZ)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cChunkPtr cChunkMap::GetChunkNoGen( int a_ChunkX, int a_ChunkY, int a_ChunkZ )
|
cChunkPtr cChunkMap::GetChunkNoGen( int a_ChunkX, int a_ChunkY, int a_ChunkZ)
|
||||||
{
|
{
|
||||||
// No need to lock m_CSLayers, since it's already locked by the operation that called us
|
// No need to lock m_CSLayers, since it's already locked by the operation that called us
|
||||||
cChunkLayer * Layer = GetLayerForChunk( a_ChunkX, a_ChunkZ );
|
cChunkLayer * Layer = GetLayerForChunk( a_ChunkX, a_ChunkZ);
|
||||||
if (Layer == NULL)
|
if (Layer == NULL)
|
||||||
{
|
{
|
||||||
// An error must have occurred, since layers are automatically created if they don't exist
|
// An error must have occurred, since layers are automatically created if they don't exist
|
||||||
@ -197,10 +197,10 @@ cChunkPtr cChunkMap::GetChunkNoGen( int a_ChunkX, int a_ChunkY, int a_ChunkZ )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cChunkPtr cChunkMap::GetChunkNoLoad( int a_ChunkX, int a_ChunkY, int a_ChunkZ )
|
cChunkPtr cChunkMap::GetChunkNoLoad( int a_ChunkX, int a_ChunkY, int a_ChunkZ)
|
||||||
{
|
{
|
||||||
// No need to lock m_CSLayers, since it's already locked by the operation that called us
|
// No need to lock m_CSLayers, since it's already locked by the operation that called us
|
||||||
cChunkLayer * Layer = GetLayerForChunk( a_ChunkX, a_ChunkZ );
|
cChunkLayer * Layer = GetLayerForChunk( a_ChunkX, a_ChunkZ);
|
||||||
if (Layer == NULL)
|
if (Layer == NULL)
|
||||||
{
|
{
|
||||||
// An error must have occurred, since layers are automatically created if they don't exist
|
// An error must have occurred, since layers are automatically created if they don't exist
|
||||||
@ -720,7 +720,7 @@ void cChunkMap::BroadcastThunderbolt(int a_BlockX, int a_BlockY, int a_BlockZ, c
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cChunkMap::BroadcastUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ )
|
void cChunkMap::BroadcastUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
int ChunkX, ChunkZ;
|
int ChunkX, ChunkZ;
|
||||||
@ -1154,9 +1154,9 @@ void cChunkMap::CollectPickupsByPlayer(cPlayer * a_Player)
|
|||||||
GetChunkNoLoad(ChunkX, ChunkY, ChunkZ)->CollectPickupsByPlayer(a_Player);
|
GetChunkNoLoad(ChunkX, ChunkY, ChunkZ)->CollectPickupsByPlayer(a_Player);
|
||||||
|
|
||||||
// Check the neighboring chunks as well:
|
// Check the neighboring chunks as well:
|
||||||
GetChunkNoLoad(OtherChunkX, ChunkY, ChunkZ )->CollectPickupsByPlayer(a_Player);
|
GetChunkNoLoad(OtherChunkX, ChunkY, ChunkZ)->CollectPickupsByPlayer (a_Player);
|
||||||
GetChunkNoLoad(OtherChunkX, ChunkY, OtherChunkZ)->CollectPickupsByPlayer(a_Player);
|
GetChunkNoLoad(OtherChunkX, ChunkY, OtherChunkZ)->CollectPickupsByPlayer(a_Player);
|
||||||
GetChunkNoLoad(ChunkX, ChunkY, ChunkZ )->CollectPickupsByPlayer(a_Player);
|
GetChunkNoLoad(ChunkX, ChunkY, ChunkZ)->CollectPickupsByPlayer (a_Player);
|
||||||
GetChunkNoLoad(ChunkX, ChunkY, OtherChunkZ)->CollectPickupsByPlayer(a_Player);
|
GetChunkNoLoad(ChunkX, ChunkY, OtherChunkZ)->CollectPickupsByPlayer(a_Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1181,7 +1181,7 @@ BLOCKTYPE cChunkMap::GetBlock(int a_BlockX, int a_BlockY, int a_BlockZ)
|
|||||||
} // for itr - m_FastSetBlockQueue[]
|
} // for itr - m_FastSetBlockQueue[]
|
||||||
}
|
}
|
||||||
int ChunkX, ChunkZ;
|
int ChunkX, ChunkZ;
|
||||||
cChunkDef::AbsoluteToRelative(a_BlockX, a_BlockY, a_BlockZ, ChunkX, ChunkZ );
|
cChunkDef::AbsoluteToRelative(a_BlockX, a_BlockY, a_BlockZ, ChunkX, ChunkZ);
|
||||||
|
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
cChunkPtr Chunk = GetChunk(ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
cChunkPtr Chunk = GetChunk(ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
||||||
@ -1210,11 +1210,11 @@ NIBBLETYPE cChunkMap::GetBlockMeta(int a_BlockX, int a_BlockY, int a_BlockZ)
|
|||||||
} // for itr - m_FastSetBlockQueue[]
|
} // for itr - m_FastSetBlockQueue[]
|
||||||
}
|
}
|
||||||
int ChunkX, ChunkZ;
|
int ChunkX, ChunkZ;
|
||||||
cChunkDef::AbsoluteToRelative(a_BlockX, a_BlockY, a_BlockZ, ChunkX, ChunkZ );
|
cChunkDef::AbsoluteToRelative(a_BlockX, a_BlockY, a_BlockZ, ChunkX, ChunkZ);
|
||||||
|
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ );
|
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
||||||
if ((Chunk != NULL) && Chunk->IsValid() )
|
if ((Chunk != NULL) && Chunk->IsValid())
|
||||||
{
|
{
|
||||||
return Chunk->GetMeta(a_BlockX, a_BlockY, a_BlockZ);
|
return Chunk->GetMeta(a_BlockX, a_BlockY, a_BlockZ);
|
||||||
}
|
}
|
||||||
@ -1228,11 +1228,11 @@ NIBBLETYPE cChunkMap::GetBlockMeta(int a_BlockX, int a_BlockY, int a_BlockZ)
|
|||||||
NIBBLETYPE cChunkMap::GetBlockSkyLight(int a_BlockX, int a_BlockY, int a_BlockZ)
|
NIBBLETYPE cChunkMap::GetBlockSkyLight(int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
{
|
{
|
||||||
int ChunkX, ChunkZ;
|
int ChunkX, ChunkZ;
|
||||||
cChunkDef::AbsoluteToRelative(a_BlockX, a_BlockY, a_BlockZ, ChunkX, ChunkZ );
|
cChunkDef::AbsoluteToRelative(a_BlockX, a_BlockY, a_BlockZ, ChunkX, ChunkZ);
|
||||||
|
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ );
|
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
||||||
if ((Chunk != NULL) && Chunk->IsValid() )
|
if ((Chunk != NULL) && Chunk->IsValid())
|
||||||
{
|
{
|
||||||
return Chunk->GetSkyLight(a_BlockX, a_BlockY, a_BlockZ);
|
return Chunk->GetSkyLight(a_BlockX, a_BlockY, a_BlockZ);
|
||||||
}
|
}
|
||||||
@ -1246,11 +1246,11 @@ NIBBLETYPE cChunkMap::GetBlockSkyLight(int a_BlockX, int a_BlockY, int a_BlockZ)
|
|||||||
NIBBLETYPE cChunkMap::GetBlockBlockLight(int a_BlockX, int a_BlockY, int a_BlockZ)
|
NIBBLETYPE cChunkMap::GetBlockBlockLight(int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
{
|
{
|
||||||
int ChunkX, ChunkZ;
|
int ChunkX, ChunkZ;
|
||||||
cChunkDef::AbsoluteToRelative(a_BlockX, a_BlockY, a_BlockZ, ChunkX, ChunkZ );
|
cChunkDef::AbsoluteToRelative(a_BlockX, a_BlockY, a_BlockZ, ChunkX, ChunkZ);
|
||||||
|
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ );
|
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
||||||
if ((Chunk != NULL) && Chunk->IsValid() )
|
if ((Chunk != NULL) && Chunk->IsValid())
|
||||||
{
|
{
|
||||||
return Chunk->GetBlockLight(a_BlockX, a_BlockY, a_BlockZ);
|
return Chunk->GetBlockLight(a_BlockX, a_BlockY, a_BlockZ);
|
||||||
}
|
}
|
||||||
@ -1288,10 +1288,10 @@ void cChunkMap::SetBlock(cWorldInterface & a_WorldInterface, int a_BlockX, int a
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ChunkX, ChunkZ, X = a_BlockX, Y = a_BlockY, Z = a_BlockZ;
|
int ChunkX, ChunkZ, X = a_BlockX, Y = a_BlockY, Z = a_BlockZ;
|
||||||
cChunkDef::AbsoluteToRelative( X, Y, Z, ChunkX, ChunkZ );
|
cChunkDef::AbsoluteToRelative( X, Y, Z, ChunkX, ChunkZ);
|
||||||
|
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ );
|
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
||||||
if ((Chunk != NULL) && Chunk->IsValid())
|
if ((Chunk != NULL) && Chunk->IsValid())
|
||||||
{
|
{
|
||||||
Chunk->SetBlock(X, Y, Z, a_BlockType, a_BlockMeta, a_SendToClients);
|
Chunk->SetBlock(X, Y, Z, a_BlockType, a_BlockMeta, a_SendToClients);
|
||||||
@ -1324,10 +1324,10 @@ void cChunkMap::QueueSetBlock(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYP
|
|||||||
bool cChunkMap::GetBlockTypeMeta(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta)
|
bool cChunkMap::GetBlockTypeMeta(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta)
|
||||||
{
|
{
|
||||||
int ChunkX, ChunkZ, X = a_BlockX, Y = a_BlockY, Z = a_BlockZ;
|
int ChunkX, ChunkZ, X = a_BlockX, Y = a_BlockY, Z = a_BlockZ;
|
||||||
cChunkDef::AbsoluteToRelative( X, Y, Z, ChunkX, ChunkZ );
|
cChunkDef::AbsoluteToRelative( X, Y, Z, ChunkX, ChunkZ);
|
||||||
|
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ );
|
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
||||||
if ((Chunk != NULL) && Chunk->IsValid())
|
if ((Chunk != NULL) && Chunk->IsValid())
|
||||||
{
|
{
|
||||||
Chunk->GetBlockTypeMeta(X, Y, Z, a_BlockType, a_BlockMeta);
|
Chunk->GetBlockTypeMeta(X, Y, Z, a_BlockType, a_BlockMeta);
|
||||||
@ -1343,10 +1343,10 @@ bool cChunkMap::GetBlockTypeMeta(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCK
|
|||||||
bool cChunkMap::GetBlockInfo(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight)
|
bool cChunkMap::GetBlockInfo(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight)
|
||||||
{
|
{
|
||||||
int ChunkX, ChunkZ, X = a_BlockX, Y = a_BlockY, Z = a_BlockZ;
|
int ChunkX, ChunkZ, X = a_BlockX, Y = a_BlockY, Z = a_BlockZ;
|
||||||
cChunkDef::AbsoluteToRelative( X, Y, Z, ChunkX, ChunkZ );
|
cChunkDef::AbsoluteToRelative( X, Y, Z, ChunkX, ChunkZ);
|
||||||
|
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ );
|
cChunkPtr Chunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
||||||
if ((Chunk != NULL) && Chunk->IsValid())
|
if ((Chunk != NULL) && Chunk->IsValid())
|
||||||
{
|
{
|
||||||
Chunk->GetBlockInfo(X, Y, Z, a_BlockType, a_Meta, a_SkyLight, a_BlockLight);
|
Chunk->GetBlockInfo(X, Y, Z, a_BlockType, a_Meta, a_SkyLight, a_BlockLight);
|
||||||
@ -1364,7 +1364,7 @@ void cChunkMap::ReplaceBlocks(const sSetBlockVector & a_Blocks, BLOCKTYPE a_Filt
|
|||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
for (sSetBlockVector::const_iterator itr = a_Blocks.begin(); itr != a_Blocks.end(); ++itr)
|
for (sSetBlockVector::const_iterator itr = a_Blocks.begin(); itr != a_Blocks.end(); ++itr)
|
||||||
{
|
{
|
||||||
cChunkPtr Chunk = GetChunk(itr->ChunkX, ZERO_CHUNK_Y, itr->ChunkZ );
|
cChunkPtr Chunk = GetChunk(itr->ChunkX, ZERO_CHUNK_Y, itr->ChunkZ);
|
||||||
if ((Chunk == NULL) || !Chunk->IsValid())
|
if ((Chunk == NULL) || !Chunk->IsValid())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@ -1385,7 +1385,7 @@ void cChunkMap::ReplaceTreeBlocks(const sSetBlockVector & a_Blocks)
|
|||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
for (sSetBlockVector::const_iterator itr = a_Blocks.begin(); itr != a_Blocks.end(); ++itr)
|
for (sSetBlockVector::const_iterator itr = a_Blocks.begin(); itr != a_Blocks.end(); ++itr)
|
||||||
{
|
{
|
||||||
cChunkPtr Chunk = GetChunk(itr->ChunkX, ZERO_CHUNK_Y, itr->ChunkZ );
|
cChunkPtr Chunk = GetChunk(itr->ChunkX, ZERO_CHUNK_Y, itr->ChunkZ);
|
||||||
if ((Chunk == NULL) || !Chunk->IsValid())
|
if ((Chunk == NULL) || !Chunk->IsValid())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@ -1498,7 +1498,7 @@ bool cChunkMap::GetBlocks(sSetBlockVector & a_Blocks, bool a_ContinueOnFailure)
|
|||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
for (sSetBlockVector::iterator itr = a_Blocks.begin(); itr != a_Blocks.end(); ++itr)
|
for (sSetBlockVector::iterator itr = a_Blocks.begin(); itr != a_Blocks.end(); ++itr)
|
||||||
{
|
{
|
||||||
cChunkPtr Chunk = GetChunk(itr->ChunkX, ZERO_CHUNK_Y, itr->ChunkZ );
|
cChunkPtr Chunk = GetChunk(itr->ChunkX, ZERO_CHUNK_Y, itr->ChunkZ);
|
||||||
if ((Chunk == NULL) || !Chunk->IsValid())
|
if ((Chunk == NULL) || !Chunk->IsValid())
|
||||||
{
|
{
|
||||||
if (!a_ContinueOnFailure)
|
if (!a_ContinueOnFailure)
|
||||||
@ -1522,17 +1522,17 @@ bool cChunkMap::DigBlock(int a_X, int a_Y, int a_Z)
|
|||||||
{
|
{
|
||||||
int PosX = a_X, PosY = a_Y, PosZ = a_Z, ChunkX, ChunkZ;
|
int PosX = a_X, PosY = a_Y, PosZ = a_Z, ChunkX, ChunkZ;
|
||||||
|
|
||||||
cChunkDef::AbsoluteToRelative( PosX, PosY, PosZ, ChunkX, ChunkZ );
|
cChunkDef::AbsoluteToRelative( PosX, PosY, PosZ, ChunkX, ChunkZ);
|
||||||
|
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CSLayers);
|
cCSLock Lock(m_CSLayers);
|
||||||
cChunkPtr DestChunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ );
|
cChunkPtr DestChunk = GetChunk( ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
||||||
if ((DestChunk == NULL) || !DestChunk->IsValid())
|
if ((DestChunk == NULL) || !DestChunk->IsValid())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
DestChunk->SetBlock(PosX, PosY, PosZ, E_BLOCK_AIR, 0 );
|
DestChunk->SetBlock(PosX, PosY, PosZ, E_BLOCK_AIR, 0);
|
||||||
m_World->GetSimulatorManager()->WakeUp(a_X, a_Y, a_Z, DestChunk);
|
m_World->GetSimulatorManager()->WakeUp(a_X, a_Y, a_Z, DestChunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2715,10 +2715,10 @@ cChunkMap::cChunkLayer::cChunkLayer(
|
|||||||
cChunkMap * a_Parent,
|
cChunkMap * a_Parent,
|
||||||
cAllocationPool<cChunkData::sChunkSection> & a_Pool
|
cAllocationPool<cChunkData::sChunkSection> & a_Pool
|
||||||
)
|
)
|
||||||
: m_LayerX( a_LayerX )
|
: m_LayerX( a_LayerX)
|
||||||
, m_LayerZ( a_LayerZ )
|
, m_LayerZ( a_LayerZ)
|
||||||
, m_Parent( a_Parent )
|
, m_Parent( a_Parent)
|
||||||
, m_NumChunksLoaded( 0 )
|
, m_NumChunksLoaded( 0)
|
||||||
, m_Pool(a_Pool)
|
, m_Pool(a_Pool)
|
||||||
{
|
{
|
||||||
memset(m_Chunks, 0, sizeof(m_Chunks));
|
memset(m_Chunks, 0, sizeof(m_Chunks));
|
||||||
@ -2741,7 +2741,7 @@ cChunkMap::cChunkLayer::~cChunkLayer()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cChunkPtr cChunkMap::cChunkLayer::GetChunk( int a_ChunkX, int a_ChunkY, int a_ChunkZ )
|
cChunkPtr cChunkMap::cChunkLayer::GetChunk( int a_ChunkX, int a_ChunkY, int a_ChunkZ)
|
||||||
{
|
{
|
||||||
// Always returns an assigned chunkptr, but the chunk needn't be valid (loaded / generated) - callers must check
|
// Always returns an assigned chunkptr, but the chunk needn't be valid (loaded / generated) - callers must check
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ public:
|
|||||||
|
|
||||||
static const int LAYER_SIZE = 32;
|
static const int LAYER_SIZE = 32;
|
||||||
|
|
||||||
cChunkMap(cWorld* a_World );
|
cChunkMap(cWorld* a_World);
|
||||||
~cChunkMap();
|
~cChunkMap();
|
||||||
|
|
||||||
// Broadcast respective packets to all clients of the chunk where the event is taking place
|
// Broadcast respective packets to all clients of the chunk where the event is taking place
|
||||||
@ -89,7 +89,7 @@ public:
|
|||||||
void BroadcastSoundParticleEffect(int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data, const cClientHandle * a_Exclude = NULL);
|
void BroadcastSoundParticleEffect(int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data, const cClientHandle * a_Exclude = NULL);
|
||||||
void BroadcastSpawnEntity(cEntity & a_Entity, const cClientHandle * a_Exclude = NULL);
|
void BroadcastSpawnEntity(cEntity & a_Entity, const cClientHandle * a_Exclude = NULL);
|
||||||
void BroadcastThunderbolt(int a_BlockX, int a_BlockY, int a_BlockZ, const cClientHandle * a_Exclude = NULL);
|
void BroadcastThunderbolt(int a_BlockX, int a_BlockY, int a_BlockZ, const cClientHandle * a_Exclude = NULL);
|
||||||
void BroadcastUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ );
|
void BroadcastUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ);
|
||||||
|
|
||||||
/** Sends the block entity, if it is at the coords specified, to a_Client */
|
/** Sends the block entity, if it is at the coords specified, to a_Client */
|
||||||
void SendBlockEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cClientHandle & a_Client);
|
void SendBlockEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cClientHandle & a_Client);
|
||||||
@ -289,7 +289,7 @@ public:
|
|||||||
/** Sets the sign text. Returns true if sign text changed. */
|
/** Sets the sign text. Returns true if sign text changed. */
|
||||||
bool SetSignLines(int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4);
|
bool SetSignLines(int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4);
|
||||||
|
|
||||||
/** Marks the chunk as being regenerated - all its clients want that chunk again (used by cWorld::RegenerateChunk() ) */
|
/** Marks the chunk as being regenerated - all its clients want that chunk again (used by cWorld::RegenerateChunk()) */
|
||||||
void MarkChunkRegenerating(int a_ChunkX, int a_ChunkZ);
|
void MarkChunkRegenerating(int a_ChunkX, int a_ChunkZ);
|
||||||
|
|
||||||
bool IsChunkLighted(int a_ChunkX, int a_ChunkZ);
|
bool IsChunkLighted(int a_ChunkX, int a_ChunkZ);
|
||||||
@ -368,7 +368,7 @@ private:
|
|||||||
~cChunkLayer();
|
~cChunkLayer();
|
||||||
|
|
||||||
/** Always returns an assigned chunkptr, but the chunk needn't be valid (loaded / generated) - callers must check */
|
/** Always returns an assigned chunkptr, but the chunk needn't be valid (loaded / generated) - callers must check */
|
||||||
cChunkPtr GetChunk( int a_ChunkX, int a_ChunkY, int a_ChunkZ );
|
cChunkPtr GetChunk( int a_ChunkX, int a_ChunkY, int a_ChunkZ);
|
||||||
|
|
||||||
/** Returns the specified chunk, or NULL if not created yet */
|
/** Returns the specified chunk, or NULL if not created yet */
|
||||||
cChunk * FindChunk(int a_ChunkX, int a_ChunkZ);
|
cChunk * FindChunk(int a_ChunkX, int a_ChunkZ);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/*
|
/*
|
||||||
The whole thing is a thread that runs in a loop, waiting for either:
|
The whole thing is a thread that runs in a loop, waiting for either:
|
||||||
"finished chunks" (ChunkReady()), or
|
"finished chunks" (ChunkReady()), or
|
||||||
"chunks to send" (QueueSendChunkTo() )
|
"chunks to send" (QueueSendChunkTo())
|
||||||
to come to a queue.
|
to come to a queue.
|
||||||
And once they do, it requests the chunk data and sends it all away, either
|
And once they do, it requests the chunk data and sends it all away, either
|
||||||
broadcasting (ChunkReady), or
|
broadcasting (ChunkReady), or
|
||||||
|
@ -1170,7 +1170,7 @@ void cClientHandle::HandleRightClick(int a_BlockX, int a_BlockY, int a_BlockZ, e
|
|||||||
{
|
{
|
||||||
// Only compare ItemType, not meta (torches have different metas)
|
// Only compare ItemType, not meta (torches have different metas)
|
||||||
// The -1 check is there because sometimes the client sends -1 instead of the held item
|
// The -1 check is there because sometimes the client sends -1 instead of the held item
|
||||||
// ( http://forum.mc-server.org/showthread.php?tid=549&pid=4502#pid4502 )
|
// Ref.: http://forum.mc-server.org/showthread.php?tid=549&pid=4502#pid4502
|
||||||
LOGWARN("Player %s tried to place a block that was not equipped (exp %d, got %d)",
|
LOGWARN("Player %s tried to place a block that was not equipped (exp %d, got %d)",
|
||||||
m_Username.c_str(), Equipped.m_ItemType, a_HeldItem.m_ItemType
|
m_Username.c_str(), Equipped.m_ItemType, a_HeldItem.m_ItemType
|
||||||
);
|
);
|
||||||
@ -2562,7 +2562,7 @@ void cClientHandle::SendUpdateSign(
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cClientHandle::SendUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ )
|
void cClientHandle::SendUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
{
|
{
|
||||||
m_Protocol->SendUseBed(a_Entity, a_BlockX, a_BlockY, a_BlockZ);
|
m_Protocol->SendUseBed(a_Entity, a_BlockX, a_BlockY, a_BlockZ);
|
||||||
}
|
}
|
||||||
@ -2624,7 +2624,7 @@ const AString & cClientHandle::GetUsername(void) const
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cClientHandle::SetUsername( const AString & a_Username )
|
void cClientHandle::SetUsername( const AString & a_Username)
|
||||||
{
|
{
|
||||||
m_Username = a_Username;
|
m_Username = a_Username;
|
||||||
}
|
}
|
||||||
|
@ -181,7 +181,7 @@ public:
|
|||||||
void SendUnloadChunk (int a_ChunkX, int a_ChunkZ);
|
void SendUnloadChunk (int a_ChunkX, int a_ChunkZ);
|
||||||
void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity);
|
void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity);
|
||||||
void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4);
|
void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4);
|
||||||
void SendUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ );
|
void SendUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ);
|
||||||
void SendWeather (eWeather a_Weather);
|
void SendWeather (eWeather a_Weather);
|
||||||
void SendWholeInventory (const cWindow & a_Window);
|
void SendWholeInventory (const cWindow & a_Window);
|
||||||
void SendWindowClose (const cWindow & a_Window);
|
void SendWindowClose (const cWindow & a_Window);
|
||||||
@ -190,7 +190,7 @@ public:
|
|||||||
|
|
||||||
// tolua_begin
|
// tolua_begin
|
||||||
const AString & GetUsername(void) const;
|
const AString & GetUsername(void) const;
|
||||||
void SetUsername( const AString & a_Username );
|
void SetUsername( const AString & a_Username);
|
||||||
|
|
||||||
inline short GetPing(void) const { return m_Ping; }
|
inline short GetPing(void) const { return m_Ping; }
|
||||||
|
|
||||||
@ -274,7 +274,7 @@ private:
|
|||||||
/** The type used for storing the names of registered plugin channels. */
|
/** The type used for storing the names of registered plugin channels. */
|
||||||
typedef std::set<AString> cChannels;
|
typedef std::set<AString> cChannels;
|
||||||
|
|
||||||
/** Number of chunks the player can see in each direction; 4 is the minimum ( http://wiki.vg/Protocol_FAQ#.E2.80.A6all_connecting_clients_spasm_and_jerk_uncontrollably.21 ) */
|
/** Number of chunks the player can see in each direction */
|
||||||
int m_ViewDistance;
|
int m_ViewDistance;
|
||||||
|
|
||||||
/** Server generates this many chunks AHEAD of player sight. */
|
/** Server generates this many chunks AHEAD of player sight. */
|
||||||
|
@ -582,7 +582,7 @@ cCraftingRecipes::cRecipe * cCraftingRecipes::FindRecipe(const cItem * a_Craftin
|
|||||||
// Get the real bounds of the crafting grid:
|
// Get the real bounds of the crafting grid:
|
||||||
int GridLeft = MAX_GRID_WIDTH, GridTop = MAX_GRID_HEIGHT;
|
int GridLeft = MAX_GRID_WIDTH, GridTop = MAX_GRID_HEIGHT;
|
||||||
int GridRight = 0, GridBottom = 0;
|
int GridRight = 0, GridBottom = 0;
|
||||||
for (int y = 0; y < a_GridHeight; y++ ) for (int x = 0; x < a_GridWidth; x++)
|
for (int y = 0; y < a_GridHeight; y++) for (int x = 0; x < a_GridWidth; x++)
|
||||||
{
|
{
|
||||||
if (!a_CraftingGrid[x + y * a_GridWidth].IsEmpty())
|
if (!a_CraftingGrid[x + y * a_GridWidth].IsEmpty())
|
||||||
{
|
{
|
||||||
|
@ -15,7 +15,7 @@ public:
|
|||||||
Vector3i p1, p2;
|
Vector3i p1, p2;
|
||||||
|
|
||||||
cCuboid(void) {}
|
cCuboid(void) {}
|
||||||
cCuboid(const cCuboid & a_Cuboid ) : p1(a_Cuboid.p1), p2(a_Cuboid.p2) {}
|
cCuboid(const cCuboid & a_Cuboid) : p1(a_Cuboid.p1), p2(a_Cuboid.p2) {}
|
||||||
cCuboid(const Vector3i & a_p1, const Vector3i & a_p2) : p1(a_p1), p2(a_p2) {}
|
cCuboid(const Vector3i & a_p1, const Vector3i & a_p2) : p1(a_p1), p2(a_p2) {}
|
||||||
cCuboid(int a_X1, int a_Y1, int a_Z1) : p1(a_X1, a_Y1, a_Z1), p2(a_X1, a_Y1, a_Z1) {}
|
cCuboid(int a_X1, int a_Y1, int a_Z1) : p1(a_X1, a_Y1, a_Z1), p2(a_X1, a_Y1, a_Z1) {}
|
||||||
cCuboid(int a_X1, int a_Y1, int a_Z1, int a_X2, int a_Y2, int a_Z2) : p1(a_X1, a_Y1, a_Z1), p2(a_X2, a_Y2, a_Z2) {}
|
cCuboid(int a_X1, int a_Y1, int a_Z1, int a_X2, int a_Y2, int a_Z2) : p1(a_X1, a_Y1, a_Z1), p2(a_X2, a_Y2, a_Z2) {}
|
||||||
@ -58,7 +58,7 @@ public:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsInside( const Vector3d & v ) const
|
bool IsInside( const Vector3d & v) const
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
(v.x >= p1.x) && (v.x <= p2.x) &&
|
(v.x >= p1.x) && (v.x <= p2.x) &&
|
||||||
|
@ -479,9 +479,9 @@ inline void AddFaceDirection(int & a_BlockX, unsigned char & a_BlockY, int & a_B
|
|||||||
|
|
||||||
inline void EulerToVector(double a_Pan, double a_Pitch, double & a_X, double & a_Y, double & a_Z)
|
inline void EulerToVector(double a_Pan, double a_Pitch, double & a_X, double & a_Y, double & a_Z)
|
||||||
{
|
{
|
||||||
// a_X = sinf ( a_Pan / 180 * PI ) * cosf ( a_Pitch / 180 * PI );
|
// a_X = sinf ( a_Pan / 180 * PI) * cosf ( a_Pitch / 180 * PI);
|
||||||
// a_Y = -sinf ( a_Pitch / 180 * PI );
|
// a_Y = -sinf ( a_Pitch / 180 * PI);
|
||||||
// a_Z = -cosf ( a_Pan / 180 * PI ) * cosf ( a_Pitch / 180 * PI );
|
// a_Z = -cosf ( a_Pan / 180 * PI) * cosf ( a_Pitch / 180 * PI);
|
||||||
a_X = cos(a_Pan / 180 * PI) * cos(a_Pitch / 180 * PI);
|
a_X = cos(a_Pan / 180 * PI) * cos(a_Pitch / 180 * PI);
|
||||||
a_Y = sin(a_Pan / 180 * PI) * cos(a_Pitch / 180 * PI);
|
a_Y = sin(a_Pan / 180 * PI) * cos(a_Pitch / 180 * PI);
|
||||||
a_Z = sin(a_Pitch / 180 * PI);
|
a_Z = sin(a_Pitch / 180 * PI);
|
||||||
@ -519,7 +519,7 @@ inline float GetSignf(float a_Val)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline float GetSpecialSignf( float a_Val )
|
inline float GetSpecialSignf( float a_Val)
|
||||||
{
|
{
|
||||||
return (a_Val <= 0.f) ? -1.f : 1.f;
|
return (a_Val <= 0.f) ? -1.f : 1.f;
|
||||||
}
|
}
|
||||||
@ -640,11 +640,11 @@ namespace ItemCategory
|
|||||||
|
|
||||||
inline bool IsTool(short a_ItemID)
|
inline bool IsTool(short a_ItemID)
|
||||||
{
|
{
|
||||||
return IsPickaxe( a_ItemID )
|
return IsPickaxe( a_ItemID)
|
||||||
|| IsAxe ( a_ItemID )
|
|| IsAxe ( a_ItemID)
|
||||||
|| IsSword ( a_ItemID )
|
|| IsSword ( a_ItemID)
|
||||||
|| IsHoe ( a_ItemID )
|
|| IsHoe ( a_ItemID)
|
||||||
|| IsShovel ( a_ItemID );
|
|| IsShovel ( a_ItemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ Serialization will never put zero-level enchantments into the stringspec and wil
|
|||||||
class cEnchantments
|
class cEnchantments
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/** Individual enchantment IDs, corresponding to their NBT IDs ( http://www.minecraftwiki.net/wiki/Data_Values#Enchantment_IDs )
|
/** Individual enchantment IDs, corresponding to their NBT IDs: http://www.minecraftwiki.net/wiki/Data_Values#Enchantment_IDs
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -11,8 +11,8 @@
|
|||||||
inline UInt64 HostToNetwork8(const void * a_Value)
|
inline UInt64 HostToNetwork8(const void * a_Value)
|
||||||
{
|
{
|
||||||
unsigned long long __HostToNetwork8;
|
unsigned long long __HostToNetwork8;
|
||||||
memcpy( &__HostToNetwork8, a_Value, sizeof( __HostToNetwork8 ) );
|
memcpy( &__HostToNetwork8, a_Value, sizeof( __HostToNetwork8));
|
||||||
__HostToNetwork8 = (( ( (unsigned long long)htonl((u_long)__HostToNetwork8) ) << 32) + htonl(__HostToNetwork8 >> 32));
|
__HostToNetwork8 = (( ( (unsigned long long)htonl((u_long)__HostToNetwork8)) << 32) + htonl(__HostToNetwork8 >> 32));
|
||||||
return __HostToNetwork8;
|
return __HostToNetwork8;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,11 +20,11 @@ inline UInt64 HostToNetwork8(const void * a_Value)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline UInt32 HostToNetwork4(const void* a_Value )
|
inline UInt32 HostToNetwork4(const void* a_Value)
|
||||||
{
|
{
|
||||||
unsigned int __HostToNetwork4;
|
unsigned int __HostToNetwork4;
|
||||||
memcpy( &__HostToNetwork4, a_Value, sizeof( __HostToNetwork4 ) );
|
memcpy( &__HostToNetwork4, a_Value, sizeof( __HostToNetwork4));
|
||||||
__HostToNetwork4 = ntohl( __HostToNetwork4 );
|
__HostToNetwork4 = ntohl( __HostToNetwork4);
|
||||||
return __HostToNetwork4;
|
return __HostToNetwork4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -648,7 +648,7 @@ void cEntity::HandlePhysics(float a_Dt, cChunk & a_Chunk)
|
|||||||
|
|
||||||
int RelBlockX = BlockX - (NextChunk->GetPosX() * cChunkDef::Width);
|
int RelBlockX = BlockX - (NextChunk->GetPosX() * cChunkDef::Width);
|
||||||
int RelBlockZ = BlockZ - (NextChunk->GetPosZ() * cChunkDef::Width);
|
int RelBlockZ = BlockZ - (NextChunk->GetPosZ() * cChunkDef::Width);
|
||||||
BLOCKTYPE BlockIn = NextChunk->GetBlock( RelBlockX, BlockY, RelBlockZ );
|
BLOCKTYPE BlockIn = NextChunk->GetBlock( RelBlockX, BlockY, RelBlockZ);
|
||||||
BLOCKTYPE BlockBelow = (BlockY > 0) ? NextChunk->GetBlock(RelBlockX, BlockY - 1, RelBlockZ) : E_BLOCK_AIR;
|
BLOCKTYPE BlockBelow = (BlockY > 0) ? NextChunk->GetBlock(RelBlockX, BlockY - 1, RelBlockZ) : E_BLOCK_AIR;
|
||||||
if (!cBlockInfo::IsSolid(BlockIn)) // Making sure we are not inside a solid block
|
if (!cBlockInfo::IsSolid(BlockIn)) // Making sure we are not inside a solid block
|
||||||
{
|
{
|
||||||
@ -758,7 +758,7 @@ void cEntity::HandlePhysics(float a_Dt, cChunk & a_Chunk)
|
|||||||
|
|
||||||
m_WaterSpeed *= 0.9f; // Reduce speed each tick
|
m_WaterSpeed *= 0.9f; // Reduce speed each tick
|
||||||
|
|
||||||
switch(WaterDir)
|
switch (WaterDir)
|
||||||
{
|
{
|
||||||
case X_PLUS:
|
case X_PLUS:
|
||||||
m_WaterSpeed.x = 0.2f;
|
m_WaterSpeed.x = 0.2f;
|
||||||
|
@ -62,9 +62,9 @@ void cExpOrb::Tick(float a_Dt, cChunk & a_Chunk)
|
|||||||
}
|
}
|
||||||
a_Distance.Normalize();
|
a_Distance.Normalize();
|
||||||
a_Distance *= ((float) (5.5 - Distance));
|
a_Distance *= ((float) (5.5 - Distance));
|
||||||
SetSpeedX( a_Distance.x );
|
SetSpeedX( a_Distance.x);
|
||||||
SetSpeedY( a_Distance.y );
|
SetSpeedY( a_Distance.y);
|
||||||
SetSpeedZ( a_Distance.z );
|
SetSpeedZ( a_Distance.z);
|
||||||
BroadcastMovementUpdate();
|
BroadcastMovementUpdate();
|
||||||
}
|
}
|
||||||
HandlePhysics(a_Dt, a_Chunk);
|
HandlePhysics(a_Dt, a_Chunk);
|
||||||
|
@ -140,7 +140,7 @@ cPlayer::~cPlayer(void)
|
|||||||
|
|
||||||
SaveToDisk();
|
SaveToDisk();
|
||||||
|
|
||||||
m_World->RemovePlayer( this );
|
m_World->RemovePlayer( this);
|
||||||
|
|
||||||
m_ClientHandle = NULL;
|
m_ClientHandle = NULL;
|
||||||
|
|
||||||
@ -173,11 +173,11 @@ void cPlayer::SpawnOn(cClientHandle & a_Client)
|
|||||||
}
|
}
|
||||||
a_Client.SendPlayerSpawn(*this);
|
a_Client.SendPlayerSpawn(*this);
|
||||||
a_Client.SendEntityHeadLook(*this);
|
a_Client.SendEntityHeadLook(*this);
|
||||||
a_Client.SendEntityEquipment(*this, 0, m_Inventory.GetEquippedItem() );
|
a_Client.SendEntityEquipment(*this, 0, m_Inventory.GetEquippedItem());
|
||||||
a_Client.SendEntityEquipment(*this, 1, m_Inventory.GetEquippedBoots() );
|
a_Client.SendEntityEquipment(*this, 1, m_Inventory.GetEquippedBoots());
|
||||||
a_Client.SendEntityEquipment(*this, 2, m_Inventory.GetEquippedLeggings() );
|
a_Client.SendEntityEquipment(*this, 2, m_Inventory.GetEquippedLeggings());
|
||||||
a_Client.SendEntityEquipment(*this, 3, m_Inventory.GetEquippedChestplate() );
|
a_Client.SendEntityEquipment(*this, 3, m_Inventory.GetEquippedChestplate());
|
||||||
a_Client.SendEntityEquipment(*this, 4, m_Inventory.GetEquippedHelmet() );
|
a_Client.SendEntityEquipment(*this, 4, m_Inventory.GetEquippedHelmet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -298,7 +298,7 @@ short cPlayer::CalcLevelFromXp(short a_XpTotal)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// level 16 to 30
|
// level 16 to 30
|
||||||
return (short) ( 29.5 + sqrt( 870.25 - (6 * ( 360 - a_XpTotal )))) / 3;
|
return (short) ( 29.5 + sqrt( 870.25 - (6 * ( 360 - a_XpTotal)))) / 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -316,11 +316,11 @@ short cPlayer::XpForLevel(short a_Level)
|
|||||||
// level 30+
|
// level 30+
|
||||||
if (a_Level >= 31)
|
if (a_Level >= 31)
|
||||||
{
|
{
|
||||||
return (short) ( (3.5 * a_Level * a_Level) - (151.5 * a_Level) + 2220 );
|
return (short) ( (3.5 * a_Level * a_Level) - (151.5 * a_Level) + 2220);
|
||||||
}
|
}
|
||||||
|
|
||||||
// level 16 to 30
|
// level 16 to 30
|
||||||
return (short) ( (1.5 * a_Level * a_Level) - (29.5 * a_Level) + 360 );
|
return (short) ( (1.5 * a_Level * a_Level) - (29.5 * a_Level) + 360);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1007,7 +1007,7 @@ double cPlayer::GetEyeHeight(void) const
|
|||||||
|
|
||||||
Vector3d cPlayer::GetEyePosition(void) const
|
Vector3d cPlayer::GetEyePosition(void) const
|
||||||
{
|
{
|
||||||
return Vector3d( GetPosX(), m_Stance, GetPosZ() );
|
return Vector3d( GetPosX(), m_Stance, GetPosZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1169,7 +1169,7 @@ void cPlayer::SetGameMode(eGameMode a_GameMode)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cPlayer::LoginSetGameMode( eGameMode a_GameMode )
|
void cPlayer::LoginSetGameMode( eGameMode a_GameMode)
|
||||||
{
|
{
|
||||||
m_GameMode = a_GameMode;
|
m_GameMode = a_GameMode;
|
||||||
}
|
}
|
||||||
@ -1305,7 +1305,7 @@ void cPlayer::DoSetSpeed(double a_SpeedX, double a_SpeedY, double a_SpeedZ)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cPlayer::MoveTo( const Vector3d & a_NewPos )
|
void cPlayer::MoveTo( const Vector3d & a_NewPos)
|
||||||
{
|
{
|
||||||
if ((a_NewPos.y < -990) && (GetPosY() > -100))
|
if ((a_NewPos.y < -990) && (GetPosY() > -100))
|
||||||
{
|
{
|
||||||
@ -1328,7 +1328,7 @@ void cPlayer::MoveTo( const Vector3d & a_NewPos )
|
|||||||
Vector3d DeltaPos = a_NewPos - GetPosition();
|
Vector3d DeltaPos = a_NewPos - GetPosition();
|
||||||
UpdateMovementStats(DeltaPos);
|
UpdateMovementStats(DeltaPos);
|
||||||
|
|
||||||
SetPosition( a_NewPos );
|
SetPosition( a_NewPos);
|
||||||
SetStance(a_NewPos.y + 1.62);
|
SetStance(a_NewPos.y + 1.62);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1354,11 +1354,11 @@ void cPlayer::SetVisible(bool a_bVisible)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cPlayer::AddToGroup( const AString & a_GroupName )
|
void cPlayer::AddToGroup( const AString & a_GroupName)
|
||||||
{
|
{
|
||||||
cGroup* Group = cRoot::Get()->GetGroupManager()->GetGroup( a_GroupName );
|
cGroup* Group = cRoot::Get()->GetGroupManager()->GetGroup( a_GroupName);
|
||||||
m_Groups.push_back( Group );
|
m_Groups.push_back( Group);
|
||||||
LOGD("Added %s to group %s", GetName().c_str(), a_GroupName.c_str() );
|
LOGD("Added %s to group %s", GetName().c_str(), a_GroupName.c_str());
|
||||||
ResolveGroups();
|
ResolveGroups();
|
||||||
ResolvePermissions();
|
ResolvePermissions();
|
||||||
}
|
}
|
||||||
@ -1367,28 +1367,28 @@ void cPlayer::AddToGroup( const AString & a_GroupName )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cPlayer::RemoveFromGroup( const AString & a_GroupName )
|
void cPlayer::RemoveFromGroup( const AString & a_GroupName)
|
||||||
{
|
{
|
||||||
bool bRemoved = false;
|
bool bRemoved = false;
|
||||||
for (GroupList::iterator itr = m_Groups.begin(); itr != m_Groups.end(); ++itr )
|
for (GroupList::iterator itr = m_Groups.begin(); itr != m_Groups.end(); ++itr)
|
||||||
{
|
{
|
||||||
if ((*itr)->GetName().compare(a_GroupName ) == 0 )
|
if ((*itr)->GetName().compare(a_GroupName) == 0)
|
||||||
{
|
{
|
||||||
m_Groups.erase( itr );
|
m_Groups.erase( itr);
|
||||||
bRemoved = true;
|
bRemoved = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bRemoved )
|
if (bRemoved)
|
||||||
{
|
{
|
||||||
LOGD("Removed %s from group %s", GetName().c_str(), a_GroupName.c_str() );
|
LOGD("Removed %s from group %s", GetName().c_str(), a_GroupName.c_str());
|
||||||
ResolveGroups();
|
ResolveGroups();
|
||||||
ResolvePermissions();
|
ResolvePermissions();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOGWARN("Tried to remove %s from group %s but was not in that group", GetName().c_str(), a_GroupName.c_str() );
|
LOGWARN("Tried to remove %s from group %s but was not in that group", GetName().c_str(), a_GroupName.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1404,30 +1404,30 @@ bool cPlayer::HasPermission(const AString & a_Permission)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AStringVector Split = StringSplit( a_Permission, "." );
|
AStringVector Split = StringSplit( a_Permission, ".");
|
||||||
PermissionMap Possibilities = m_ResolvedPermissions;
|
PermissionMap Possibilities = m_ResolvedPermissions;
|
||||||
// Now search the namespaces
|
// Now search the namespaces
|
||||||
while (Possibilities.begin() != Possibilities.end() )
|
while (Possibilities.begin() != Possibilities.end())
|
||||||
{
|
{
|
||||||
PermissionMap::iterator itr = Possibilities.begin();
|
PermissionMap::iterator itr = Possibilities.begin();
|
||||||
if (itr->second )
|
if (itr->second)
|
||||||
{
|
{
|
||||||
AStringVector OtherSplit = StringSplit( itr->first, "." );
|
AStringVector OtherSplit = StringSplit( itr->first, ".");
|
||||||
if (OtherSplit.size() <= Split.size() )
|
if (OtherSplit.size() <= Split.size())
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
for (i = 0; i < OtherSplit.size(); ++i )
|
for (i = 0; i < OtherSplit.size(); ++i)
|
||||||
{
|
{
|
||||||
if (OtherSplit[i].compare( Split[i] ) != 0 )
|
if (OtherSplit[i].compare( Split[i]) != 0)
|
||||||
{
|
{
|
||||||
if (OtherSplit[i].compare("*") == 0 ) return true; // WildCard man!! WildCard!
|
if (OtherSplit[i].compare("*") == 0) return true; // WildCard man!! WildCard!
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i == Split.size() ) return true;
|
if (i == Split.size()) return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Possibilities.erase( itr );
|
Possibilities.erase( itr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nothing that matched :(
|
// Nothing that matched :(
|
||||||
@ -1438,11 +1438,11 @@ bool cPlayer::HasPermission(const AString & a_Permission)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cPlayer::IsInGroup( const AString & a_Group )
|
bool cPlayer::IsInGroup( const AString & a_Group)
|
||||||
{
|
{
|
||||||
for (GroupList::iterator itr = m_ResolvedGroups.begin(); itr != m_ResolvedGroups.end(); ++itr )
|
for (GroupList::iterator itr = m_ResolvedGroups.begin(); itr != m_ResolvedGroups.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (a_Group.compare( (*itr)->GetName().c_str() ) == 0 )
|
if (a_Group.compare( (*itr)->GetName().c_str()) == 0)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -1457,15 +1457,15 @@ void cPlayer::ResolvePermissions()
|
|||||||
m_ResolvedPermissions.clear(); // Start with an empty map
|
m_ResolvedPermissions.clear(); // Start with an empty map
|
||||||
|
|
||||||
// Copy all player specific permissions into the resolved permissions map
|
// Copy all player specific permissions into the resolved permissions map
|
||||||
for (PermissionMap::iterator itr = m_Permissions.begin(); itr != m_Permissions.end(); ++itr )
|
for (PermissionMap::iterator itr = m_Permissions.begin(); itr != m_Permissions.end(); ++itr)
|
||||||
{
|
{
|
||||||
m_ResolvedPermissions[ itr->first ] = itr->second;
|
m_ResolvedPermissions[ itr->first ] = itr->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (GroupList::iterator GroupItr = m_ResolvedGroups.begin(); GroupItr != m_ResolvedGroups.end(); ++GroupItr )
|
for (GroupList::iterator GroupItr = m_ResolvedGroups.begin(); GroupItr != m_ResolvedGroups.end(); ++GroupItr)
|
||||||
{
|
{
|
||||||
const cGroup::PermissionMap & Permissions = (*GroupItr)->GetPermissions();
|
const cGroup::PermissionMap & Permissions = (*GroupItr)->GetPermissions();
|
||||||
for (cGroup::PermissionMap::const_iterator itr = Permissions.begin(); itr != Permissions.end(); ++itr )
|
for (cGroup::PermissionMap::const_iterator itr = Permissions.begin(); itr != Permissions.end(); ++itr)
|
||||||
{
|
{
|
||||||
m_ResolvedPermissions[ itr->first ] = itr->second;
|
m_ResolvedPermissions[ itr->first ] = itr->second;
|
||||||
}
|
}
|
||||||
@ -1484,14 +1484,14 @@ void cPlayer::ResolveGroups()
|
|||||||
// Get a complete resolved list of all groups the player is in
|
// Get a complete resolved list of all groups the player is in
|
||||||
std::map< cGroup*, bool > AllGroups; // Use a map, because it's faster than iterating through a list to find duplicates
|
std::map< cGroup*, bool > AllGroups; // Use a map, because it's faster than iterating through a list to find duplicates
|
||||||
GroupList ToIterate;
|
GroupList ToIterate;
|
||||||
for (GroupList::iterator GroupItr = m_Groups.begin(); GroupItr != m_Groups.end(); ++GroupItr )
|
for (GroupList::iterator GroupItr = m_Groups.begin(); GroupItr != m_Groups.end(); ++GroupItr)
|
||||||
{
|
{
|
||||||
ToIterate.push_back( *GroupItr );
|
ToIterate.push_back( *GroupItr);
|
||||||
}
|
}
|
||||||
while (ToIterate.begin() != ToIterate.end() )
|
while (ToIterate.begin() != ToIterate.end())
|
||||||
{
|
{
|
||||||
cGroup* CurrentGroup = *ToIterate.begin();
|
cGroup* CurrentGroup = *ToIterate.begin();
|
||||||
if (AllGroups.find( CurrentGroup ) != AllGroups.end() )
|
if (AllGroups.find( CurrentGroup) != AllGroups.end())
|
||||||
{
|
{
|
||||||
LOGWARNING("ERROR: Player \"%s\" is in the group multiple times (\"%s\"). Please fix your settings in users.ini!",
|
LOGWARNING("ERROR: Player \"%s\" is in the group multiple times (\"%s\"). Please fix your settings in users.ini!",
|
||||||
GetName().c_str(), CurrentGroup->GetName().c_str()
|
GetName().c_str(), CurrentGroup->GetName().c_str()
|
||||||
@ -1500,19 +1500,19 @@ void cPlayer::ResolveGroups()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
AllGroups[ CurrentGroup ] = true;
|
AllGroups[ CurrentGroup ] = true;
|
||||||
m_ResolvedGroups.push_back( CurrentGroup ); // Add group to resolved list
|
m_ResolvedGroups.push_back( CurrentGroup); // Add group to resolved list
|
||||||
const cGroup::GroupList & Inherits = CurrentGroup->GetInherits();
|
const cGroup::GroupList & Inherits = CurrentGroup->GetInherits();
|
||||||
for (cGroup::GroupList::const_iterator itr = Inherits.begin(); itr != Inherits.end(); ++itr )
|
for (cGroup::GroupList::const_iterator itr = Inherits.begin(); itr != Inherits.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (AllGroups.find( *itr ) != AllGroups.end() )
|
if (AllGroups.find( *itr) != AllGroups.end())
|
||||||
{
|
{
|
||||||
LOGERROR("ERROR: Player %s is in the same group multiple times due to inheritance (%s). FIX IT!", GetName().c_str(), (*itr)->GetName().c_str() );
|
LOGERROR("ERROR: Player %s is in the same group multiple times due to inheritance (%s). FIX IT!", GetName().c_str(), (*itr)->GetName().c_str());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ToIterate.push_back( *itr );
|
ToIterate.push_back( *itr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ToIterate.erase( ToIterate.begin() );
|
ToIterate.erase( ToIterate.begin());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1522,12 +1522,12 @@ void cPlayer::ResolveGroups()
|
|||||||
|
|
||||||
AString cPlayer::GetColor(void) const
|
AString cPlayer::GetColor(void) const
|
||||||
{
|
{
|
||||||
if (m_Color != '-' )
|
if (m_Color != '-')
|
||||||
{
|
{
|
||||||
return cChatColor::Delimiter + m_Color;
|
return cChatColor::Delimiter + m_Color;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_Groups.size() < 1 )
|
if (m_Groups.size() < 1)
|
||||||
{
|
{
|
||||||
return cChatColor::White;
|
return cChatColor::White;
|
||||||
}
|
}
|
||||||
@ -1914,11 +1914,11 @@ cPlayer::StringList cPlayer::GetResolvedPermissions()
|
|||||||
StringList Permissions;
|
StringList Permissions;
|
||||||
|
|
||||||
const PermissionMap& ResolvedPermissions = m_ResolvedPermissions;
|
const PermissionMap& ResolvedPermissions = m_ResolvedPermissions;
|
||||||
for (PermissionMap::const_iterator itr = ResolvedPermissions.begin(); itr != ResolvedPermissions.end(); ++itr )
|
for (PermissionMap::const_iterator itr = ResolvedPermissions.begin(); itr != ResolvedPermissions.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (itr->second)
|
if (itr->second)
|
||||||
{
|
{
|
||||||
Permissions.push_back( itr->first );
|
Permissions.push_back( itr->first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,8 +117,8 @@ public:
|
|||||||
/** Returns true if the player is currently charging the bow */
|
/** Returns true if the player is currently charging the bow */
|
||||||
bool IsChargingBow(void) const { return m_IsChargingBow; }
|
bool IsChargingBow(void) const { return m_IsChargingBow; }
|
||||||
|
|
||||||
void SetTouchGround( bool a_bTouchGround );
|
void SetTouchGround( bool a_bTouchGround);
|
||||||
inline void SetStance( const double a_Stance ) { m_Stance = a_Stance; }
|
inline void SetStance( const double a_Stance) { m_Stance = a_Stance; }
|
||||||
double GetEyeHeight(void) const; // tolua_export
|
double GetEyeHeight(void) const; // tolua_export
|
||||||
Vector3d GetEyePosition(void) const; // tolua_export
|
Vector3d GetEyePosition(void) const; // tolua_export
|
||||||
inline bool IsOnGround(void) const {return m_bTouchGround; } // tolua_export
|
inline bool IsOnGround(void) const {return m_bTouchGround; } // tolua_export
|
||||||
@ -239,15 +239,15 @@ public:
|
|||||||
typedef std::list< std::string > StringList;
|
typedef std::list< std::string > StringList;
|
||||||
|
|
||||||
/** Adds a player to existing group or creates a new group when it doesn't exist */
|
/** Adds a player to existing group or creates a new group when it doesn't exist */
|
||||||
void AddToGroup( const AString & a_GroupName ); // tolua_export
|
void AddToGroup( const AString & a_GroupName); // tolua_export
|
||||||
|
|
||||||
/** Removes a player from the group, resolves permissions and group inheritance (case sensitive) */
|
/** Removes a player from the group, resolves permissions and group inheritance (case sensitive) */
|
||||||
void RemoveFromGroup( const AString & a_GroupName ); // tolua_export
|
void RemoveFromGroup( const AString & a_GroupName); // tolua_export
|
||||||
|
|
||||||
bool HasPermission( const AString & a_Permission ); // tolua_export
|
bool HasPermission( const AString & a_Permission); // tolua_export
|
||||||
const GroupList & GetGroups() { return m_Groups; } // >> EXPORTED IN MANUALBINDINGS <<
|
const GroupList & GetGroups() { return m_Groups; } // >> EXPORTED IN MANUALBINDINGS <<
|
||||||
StringList GetResolvedPermissions(); // >> EXPORTED IN MANUALBINDINGS <<
|
StringList GetResolvedPermissions(); // >> EXPORTED IN MANUALBINDINGS <<
|
||||||
bool IsInGroup( const AString & a_Group ); // tolua_export
|
bool IsInGroup( const AString & a_Group); // tolua_export
|
||||||
|
|
||||||
// tolua_begin
|
// tolua_begin
|
||||||
|
|
||||||
@ -328,7 +328,7 @@ public:
|
|||||||
|
|
||||||
void Respawn(void); // tolua_export
|
void Respawn(void); // tolua_export
|
||||||
|
|
||||||
void SetVisible( bool a_bVisible ); // tolua_export
|
void SetVisible( bool a_bVisible); // tolua_export
|
||||||
bool IsVisible(void) const { return m_bVisible; } // tolua_export
|
bool IsVisible(void) const { return m_bVisible; } // tolua_export
|
||||||
|
|
||||||
/** Moves the player to the specified world.
|
/** Moves the player to the specified world.
|
||||||
|
@ -30,7 +30,7 @@ struct cFurnaceRecipe::sFurnaceRecipeState
|
|||||||
|
|
||||||
|
|
||||||
cFurnaceRecipe::cFurnaceRecipe()
|
cFurnaceRecipe::cFurnaceRecipe()
|
||||||
: m_pState( new sFurnaceRecipeState )
|
: m_pState( new sFurnaceRecipeState)
|
||||||
{
|
{
|
||||||
ReloadRecipes();
|
ReloadRecipes();
|
||||||
}
|
}
|
||||||
|
@ -703,10 +703,10 @@ cGridStructGen::cStructurePtr cStructGenWormNestCaves::CreateStructure(int a_Gri
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// cStructGenMarbleCaves:
|
// cStructGenMarbleCaves:
|
||||||
|
|
||||||
static float GetMarbleNoise( float x, float y, float z, cNoise & a_Noise )
|
static float GetMarbleNoise( float x, float y, float z, cNoise & a_Noise)
|
||||||
{
|
{
|
||||||
static const float PI_2 = 1.57079633f;
|
static const float PI_2 = 1.57079633f;
|
||||||
float oct1 = (a_Noise.CubicNoise3D(x * 0.1f, y * 0.1f, z * 0.1f )) * 4;
|
float oct1 = (a_Noise.CubicNoise3D(x * 0.1f, y * 0.1f, z * 0.1f)) * 4;
|
||||||
|
|
||||||
oct1 = oct1 * oct1 * oct1;
|
oct1 = oct1 * oct1 * oct1;
|
||||||
if (oct1 < 0.f) oct1 = PI_2;
|
if (oct1 < 0.f) oct1 = PI_2;
|
||||||
@ -730,7 +730,7 @@ void cStructGenMarbleCaves::GenFinish(cChunkDesc & a_ChunkDesc)
|
|||||||
const float xx = (float)(a_ChunkDesc.GetChunkX() * cChunkDef::Width + x);
|
const float xx = (float)(a_ChunkDesc.GetChunkX() * cChunkDef::Width + x);
|
||||||
|
|
||||||
int Top = a_ChunkDesc.GetHeight(x, z);
|
int Top = a_ChunkDesc.GetHeight(x, z);
|
||||||
for (int y = 1; y < Top; ++y )
|
for (int y = 1; y < Top; ++y)
|
||||||
{
|
{
|
||||||
if (a_ChunkDesc.GetBlockType(x, y, z) != E_BLOCK_STONE)
|
if (a_ChunkDesc.GetBlockType(x, y, z) != E_BLOCK_STONE)
|
||||||
{
|
{
|
||||||
|
@ -229,7 +229,7 @@ void cChunkGenerator::Execute(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cChunkCoords coords = m_Queue.front(); // Get next coord from queue
|
cChunkCoords coords = m_Queue.front(); // Get next coord from queue
|
||||||
m_Queue.erase( m_Queue.begin() ); // Remove coordinate from queue
|
m_Queue.erase( m_Queue.begin()); // Remove coordinate from queue
|
||||||
bool SkipEnabled = (m_Queue.size() > QUEUE_SKIP_LIMIT);
|
bool SkipEnabled = (m_Queue.size() > QUEUE_SKIP_LIMIT);
|
||||||
Lock.Unlock(); // Unlock ASAP
|
Lock.Unlock(); // Unlock ASAP
|
||||||
m_evtRemoved.Set();
|
m_evtRemoved.Set();
|
||||||
|
@ -239,14 +239,14 @@ void cFinishGenSprinkleFoliage::GenFinish(cChunkDesc & a_ChunkDesc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const float xx = (float)BlockX;
|
const float xx = (float)BlockX;
|
||||||
float val1 = m_Noise.CubicNoise2D(xx * 0.1f, zz * 0.1f );
|
float val1 = m_Noise.CubicNoise2D(xx * 0.1f, zz * 0.1f);
|
||||||
float val2 = m_Noise.CubicNoise2D(xx * 0.01f, zz * 0.01f );
|
float val2 = m_Noise.CubicNoise2D(xx * 0.01f, zz * 0.01f);
|
||||||
switch (a_ChunkDesc.GetBlockType(x, Top, z))
|
switch (a_ChunkDesc.GetBlockType(x, Top, z))
|
||||||
{
|
{
|
||||||
case E_BLOCK_GRASS:
|
case E_BLOCK_GRASS:
|
||||||
{
|
{
|
||||||
float val3 = m_Noise.CubicNoise2D(xx * 0.01f + 10, zz * 0.01f + 10 );
|
float val3 = m_Noise.CubicNoise2D(xx * 0.01f + 10, zz * 0.01f + 10);
|
||||||
float val4 = m_Noise.CubicNoise2D(xx * 0.05f + 20, zz * 0.05f + 20 );
|
float val4 = m_Noise.CubicNoise2D(xx * 0.05f + 20, zz * 0.05f + 20);
|
||||||
if (val1 + val2 > 0.2f)
|
if (val1 + val2 > 0.2f)
|
||||||
{
|
{
|
||||||
a_ChunkDesc.SetBlockType(x, ++Top, z, E_BLOCK_YELLOW_FLOWER);
|
a_ChunkDesc.SetBlockType(x, ++Top, z, E_BLOCK_YELLOW_FLOWER);
|
||||||
|
@ -253,7 +253,7 @@ float cHeiGenClassic::GetNoise(float x, float y)
|
|||||||
float oct2 = m_Noise.CubicNoise2D(x * m_HeightFreq2, y * m_HeightFreq2) * m_HeightAmp2;
|
float oct2 = m_Noise.CubicNoise2D(x * m_HeightFreq2, y * m_HeightFreq2) * m_HeightAmp2;
|
||||||
float oct3 = m_Noise.CubicNoise2D(x * m_HeightFreq3, y * m_HeightFreq3) * m_HeightAmp3;
|
float oct3 = m_Noise.CubicNoise2D(x * m_HeightFreq3, y * m_HeightFreq3) * m_HeightAmp3;
|
||||||
|
|
||||||
float height = m_Noise.CubicNoise2D(x * 0.1f, y * 0.1f ) * 2;
|
float height = m_Noise.CubicNoise2D(x * 0.1f, y * 0.1f) * 2;
|
||||||
|
|
||||||
float flatness = ((m_Noise.CubicNoise2D(x * 0.5f, y * 0.5f) + 1.f) * 0.5f) * 1.1f; // 0 ... 1.5
|
float flatness = ((m_Noise.CubicNoise2D(x * 0.5f, y * 0.5f) + 1.f) * 0.5f) * 1.1f; // 0 ... 1.5
|
||||||
flatness *= flatness * flatness;
|
flatness *= flatness * flatness;
|
||||||
|
@ -272,12 +272,12 @@ void inline LOGERROR(const char* a_Format, ...)
|
|||||||
/// Evaluates to the number of elements in an array (compile-time!)
|
/// Evaluates to the number of elements in an array (compile-time!)
|
||||||
#define ARRAYCOUNT(X) (sizeof(X) / sizeof(*(X)))
|
#define ARRAYCOUNT(X) (sizeof(X) / sizeof(*(X)))
|
||||||
|
|
||||||
/// Allows arithmetic expressions like "32 KiB" (but consider using parenthesis around it, "(32 KiB)" )
|
/// Allows arithmetic expressions like "32 KiB" (but consider using parenthesis around it, "(32 KiB)")
|
||||||
#define KiB * 1024
|
#define KiB * 1024
|
||||||
#define MiB * 1024 * 1024
|
#define MiB * 1024 * 1024
|
||||||
|
|
||||||
/// Faster than (int)floorf((float)x / (float)div)
|
/// Faster than (int)floorf((float)x / (float)div)
|
||||||
#define FAST_FLOOR_DIV( x, div ) (((x) - (((x) < 0) ? ((div) - 1) : 0)) / (div))
|
#define FAST_FLOOR_DIV( x, div) (((x) - (((x) < 0) ? ((div) - 1) : 0)) / (div))
|
||||||
|
|
||||||
// Own version of assert() that writes failed assertions to the log for review
|
// Own version of assert() that writes failed assertions to the log for review
|
||||||
#ifdef TEST_GLOBALS
|
#ifdef TEST_GLOBALS
|
||||||
@ -314,14 +314,14 @@ void inline LOGERROR(const char* a_Format, ...)
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#define ASSERT( x ) ( !!(x) || ( LOGERROR("Assertion failed: %s, file %s, line %i", #x, __FILE__, __LINE__ ), assert(0), 0 ) )
|
#define ASSERT( x) ( !!(x) || ( LOGERROR("Assertion failed: %s, file %s, line %i", #x, __FILE__, __LINE__), assert(0), 0))
|
||||||
#else
|
#else
|
||||||
#define ASSERT(x) ((void)(x))
|
#define ASSERT(x) ((void)(x))
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Pretty much the same as ASSERT() but stays in Release builds
|
// Pretty much the same as ASSERT() but stays in Release builds
|
||||||
#define VERIFY( x ) ( !!(x) || ( LOGERROR("Verification failed: %s, file %s, line %i", #x, __FILE__, __LINE__ ), exit(1), 0 ) )
|
#define VERIFY( x) ( !!(x) || ( LOGERROR("Verification failed: %s, file %s, line %i", #x, __FILE__, __LINE__), exit(1), 0))
|
||||||
|
|
||||||
// Same as assert but in all Self test builds
|
// Same as assert but in all Self test builds
|
||||||
#ifdef SELF_TEST
|
#ifdef SELF_TEST
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cGroup::AddCommand( const AString & a_Command )
|
void cGroup::AddCommand( const AString & a_Command)
|
||||||
{
|
{
|
||||||
m_Commands[ a_Command ] = true;
|
m_Commands[ a_Command ] = true;
|
||||||
}
|
}
|
||||||
@ -16,7 +16,7 @@ void cGroup::AddCommand( const AString & a_Command )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cGroup::AddPermission( const AString & a_Permission )
|
void cGroup::AddPermission( const AString & a_Permission)
|
||||||
{
|
{
|
||||||
m_Permissions[ a_Permission ] = true;
|
m_Permissions[ a_Permission ] = true;
|
||||||
}
|
}
|
||||||
@ -25,10 +25,10 @@ void cGroup::AddPermission( const AString & a_Permission )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cGroup::InheritFrom( cGroup* a_Group )
|
void cGroup::InheritFrom( cGroup* a_Group)
|
||||||
{
|
{
|
||||||
m_Inherits.remove( a_Group );
|
m_Inherits.remove( a_Group);
|
||||||
m_Inherits.push_back( a_Group );
|
m_Inherits.push_back( a_Group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
10
src/Group.h
10
src/Group.h
@ -14,12 +14,12 @@ public:
|
|||||||
~cGroup() {}
|
~cGroup() {}
|
||||||
|
|
||||||
// tolua_begin
|
// tolua_begin
|
||||||
void SetName( const AString & a_Name ) { m_Name = a_Name; }
|
void SetName( const AString & a_Name) { m_Name = a_Name; }
|
||||||
const AString & GetName() const { return m_Name; }
|
const AString & GetName() const { return m_Name; }
|
||||||
void SetColor( const AString & a_Color ) { m_Color = a_Color; }
|
void SetColor( const AString & a_Color) { m_Color = a_Color; }
|
||||||
void AddCommand( const AString & a_Command );
|
void AddCommand( const AString & a_Command);
|
||||||
void AddPermission( const AString & a_Permission );
|
void AddPermission( const AString & a_Permission);
|
||||||
void InheritFrom( cGroup* a_Group );
|
void InheritFrom( cGroup* a_Group);
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
typedef std::map< AString, bool > PermissionMap;
|
typedef std::map< AString, bool > PermissionMap;
|
||||||
|
@ -27,7 +27,7 @@ struct cGroupManager::sGroupManagerState
|
|||||||
|
|
||||||
cGroupManager::~cGroupManager()
|
cGroupManager::~cGroupManager()
|
||||||
{
|
{
|
||||||
for (GroupMap::iterator itr = m_pState->Groups.begin(); itr != m_pState->Groups.end(); ++itr )
|
for (GroupMap::iterator itr = m_pState->Groups.begin(); itr != m_pState->Groups.end(); ++itr)
|
||||||
{
|
{
|
||||||
delete itr->second;
|
delete itr->second;
|
||||||
itr->second = NULL;
|
itr->second = NULL;
|
||||||
@ -43,7 +43,7 @@ cGroupManager::~cGroupManager()
|
|||||||
|
|
||||||
|
|
||||||
cGroupManager::cGroupManager()
|
cGroupManager::cGroupManager()
|
||||||
: m_pState( new sGroupManagerState )
|
: m_pState( new sGroupManagerState)
|
||||||
{
|
{
|
||||||
LOGD("-- Loading Groups --");
|
LOGD("-- Loading Groups --");
|
||||||
|
|
||||||
@ -198,20 +198,20 @@ bool cGroupManager::LoadGroups()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cGroupManager::ExistsGroup( const AString & a_Name )
|
bool cGroupManager::ExistsGroup( const AString & a_Name)
|
||||||
{
|
{
|
||||||
GroupMap::iterator itr = m_pState->Groups.find( a_Name );
|
GroupMap::iterator itr = m_pState->Groups.find( a_Name);
|
||||||
return ( itr != m_pState->Groups.end() );
|
return ( itr != m_pState->Groups.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cGroup* cGroupManager::GetGroup( const AString & a_Name )
|
cGroup* cGroupManager::GetGroup( const AString & a_Name)
|
||||||
{
|
{
|
||||||
GroupMap::iterator itr = m_pState->Groups.find( a_Name );
|
GroupMap::iterator itr = m_pState->Groups.find( a_Name);
|
||||||
if (itr != m_pState->Groups.end() )
|
if (itr != m_pState->Groups.end())
|
||||||
{
|
{
|
||||||
return itr->second;
|
return itr->second;
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ void cHTTPConnection::AwaitNextRequest(void)
|
|||||||
{
|
{
|
||||||
case wcsRecvHeaders:
|
case wcsRecvHeaders:
|
||||||
{
|
{
|
||||||
// Nothing has been received yet, or a special response was given (SendStatusAndReason() or SendNeedAuth() )
|
// Nothing has been received yet, or a special response was given (SendStatusAndReason() or SendNeedAuth())
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,21 +497,21 @@ int cInventory::ArmorSlotNumToEntityEquipmentID(short a_ArmorSlotNum)
|
|||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
bool cInventory::AddToBar( cItem & a_Item, const int a_Offset, const int a_Size, bool* a_bChangedSlots, int a_Mode /* = 0 */ )
|
bool cInventory::AddToBar( cItem & a_Item, const int a_Offset, const int a_Size, bool* a_bChangedSlots, int a_Mode /* = 0 */)
|
||||||
{
|
{
|
||||||
// Fill already present stacks
|
// Fill already present stacks
|
||||||
if (a_Mode < 2 )
|
if (a_Mode < 2)
|
||||||
{
|
{
|
||||||
int MaxStackSize = cItemHandler::GetItemHandler(a_Item.m_ItemType)->GetMaxStackSize();
|
int MaxStackSize = cItemHandler::GetItemHandler(a_Item.m_ItemType)->GetMaxStackSize();
|
||||||
for (int i = 0; i < a_Size; i++)
|
for (int i = 0; i < a_Size; i++)
|
||||||
{
|
{
|
||||||
if (m_Slots[i + a_Offset].m_ItemType == a_Item.m_ItemType && m_Slots[i + a_Offset].m_ItemCount < MaxStackSize && m_Slots[i + a_Offset].m_ItemDamage == a_Item.m_ItemDamage )
|
if (m_Slots[i + a_Offset].m_ItemType == a_Item.m_ItemType && m_Slots[i + a_Offset].m_ItemCount < MaxStackSize && m_Slots[i + a_Offset].m_ItemDamage == a_Item.m_ItemDamage)
|
||||||
{
|
{
|
||||||
int NumFree = MaxStackSize - m_Slots[i + a_Offset].m_ItemCount;
|
int NumFree = MaxStackSize - m_Slots[i + a_Offset].m_ItemCount;
|
||||||
if (NumFree >= a_Item.m_ItemCount )
|
if (NumFree >= a_Item.m_ItemCount)
|
||||||
{
|
{
|
||||||
|
|
||||||
// printf("1. Adding %i items ( free: %i )\n", a_Item.m_ItemCount, NumFree );
|
// printf("1. Adding %i items ( free: %i)\n", a_Item.m_ItemCount, NumFree);
|
||||||
m_Slots[i + a_Offset].m_ItemCount += a_Item.m_ItemCount;
|
m_Slots[i + a_Offset].m_ItemCount += a_Item.m_ItemCount;
|
||||||
a_Item.m_ItemCount = 0;
|
a_Item.m_ItemCount = 0;
|
||||||
a_bChangedSlots[i + a_Offset] = true;
|
a_bChangedSlots[i + a_Offset] = true;
|
||||||
@ -519,7 +519,7 @@ bool cInventory::AddToBar( cItem & a_Item, const int a_Offset, const int a_Size,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// printf("2. Adding %i items\n", NumFree );
|
// printf("2. Adding %i items\n", NumFree);
|
||||||
m_Slots[i + a_Offset].m_ItemCount += (char)NumFree;
|
m_Slots[i + a_Offset].m_ItemCount += (char)NumFree;
|
||||||
a_Item.m_ItemCount -= (char)NumFree;
|
a_Item.m_ItemCount -= (char)NumFree;
|
||||||
a_bChangedSlots[i + a_Offset] = true;
|
a_bChangedSlots[i + a_Offset] = true;
|
||||||
@ -528,12 +528,12 @@ bool cInventory::AddToBar( cItem & a_Item, const int a_Offset, const int a_Size,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a_Mode > 0 )
|
if (a_Mode > 0)
|
||||||
{
|
{
|
||||||
// If we got more left, find first empty slot
|
// If we got more left, find first empty slot
|
||||||
for (int i = 0; i < a_Size && a_Item.m_ItemCount > 0; i++)
|
for (int i = 0; i < a_Size && a_Item.m_ItemCount > 0; i++)
|
||||||
{
|
{
|
||||||
if (m_Slots[i + a_Offset].m_ItemType == -1 )
|
if (m_Slots[i + a_Offset].m_ItemType == -1)
|
||||||
{
|
{
|
||||||
m_Slots[i + a_Offset] = a_Item;
|
m_Slots[i + a_Offset] = a_Item;
|
||||||
a_Item.m_ItemCount = 0;
|
a_Item.m_ItemCount = 0;
|
||||||
|
@ -169,7 +169,7 @@ public:
|
|||||||
bool LoadFromJson(Json::Value & a_Value);
|
bool LoadFromJson(Json::Value & a_Value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool AddToBar( cItem & a_Item, const int a_Offset, const int a_Size, bool* a_bChangedSlots, int a_Mode = 0 );
|
bool AddToBar( cItem & a_Item, const int a_Offset, const int a_Size, bool* a_bChangedSlots, int a_Mode = 0);
|
||||||
|
|
||||||
cItemGrid m_ArmorSlots;
|
cItemGrid m_ArmorSlots;
|
||||||
cItemGrid m_InventorySlots;
|
cItemGrid m_InventorySlots;
|
||||||
|
@ -162,11 +162,11 @@ void cItem::GetJson(Json::Value & a_OutValue) const
|
|||||||
|
|
||||||
void cItem::FromJson(const Json::Value & a_Value)
|
void cItem::FromJson(const Json::Value & a_Value)
|
||||||
{
|
{
|
||||||
m_ItemType = (ENUM_ITEM_ID)a_Value.get("ID", -1 ).asInt();
|
m_ItemType = (ENUM_ITEM_ID)a_Value.get("ID", -1).asInt();
|
||||||
if (m_ItemType > 0)
|
if (m_ItemType > 0)
|
||||||
{
|
{
|
||||||
m_ItemCount = (char)a_Value.get("Count", -1 ).asInt();
|
m_ItemCount = (char)a_Value.get("Count", -1).asInt();
|
||||||
m_ItemDamage = (short)a_Value.get("Health", -1 ).asInt();
|
m_ItemDamage = (short)a_Value.get("Health", -1).asInt();
|
||||||
m_Enchantments.Clear();
|
m_Enchantments.Clear();
|
||||||
m_Enchantments.AddFromString(a_Value.get("ench", "").asString());
|
m_Enchantments.AddFromString(a_Value.get("ench", "").asString());
|
||||||
m_CustomName = a_Value.get("Name", "").asString();
|
m_CustomName = a_Value.get("Name", "").asString();
|
||||||
|
@ -26,7 +26,7 @@ public:
|
|||||||
|
|
||||||
virtual FoodInfo GetFoodInfo(void) override
|
virtual FoodInfo GetFoodInfo(void) override
|
||||||
{
|
{
|
||||||
switch(m_ItemType)
|
switch (m_ItemType)
|
||||||
{
|
{
|
||||||
// Please keep alpha-sorted.
|
// Please keep alpha-sorted.
|
||||||
case E_ITEM_BAKED_POTATO: return FoodInfo(6, 7.2);
|
case E_ITEM_BAKED_POTATO: return FoodInfo(6, 7.2);
|
||||||
|
@ -94,7 +94,7 @@ cItemHandler * cItemHandler::GetItemHandler(int a_ItemType)
|
|||||||
|
|
||||||
cItemHandler *cItemHandler::CreateItemHandler(int a_ItemType)
|
cItemHandler *cItemHandler::CreateItemHandler(int a_ItemType)
|
||||||
{
|
{
|
||||||
switch(a_ItemType)
|
switch (a_ItemType)
|
||||||
{
|
{
|
||||||
default: return new cItemHandler(a_ItemType);
|
default: return new cItemHandler(a_ItemType);
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ public:
|
|||||||
|
|
||||||
char PickaxeLevel()
|
char PickaxeLevel()
|
||||||
{
|
{
|
||||||
switch(m_ItemType)
|
switch (m_ItemType)
|
||||||
{
|
{
|
||||||
case E_ITEM_WOODEN_PICKAXE: return 1;
|
case E_ITEM_WOODEN_PICKAXE: return 1;
|
||||||
case E_ITEM_GOLD_PICKAXE: return 1;
|
case E_ITEM_GOLD_PICKAXE: return 1;
|
||||||
@ -31,7 +31,7 @@ public:
|
|||||||
|
|
||||||
virtual bool CanHarvestBlock(BLOCKTYPE a_BlockType) override
|
virtual bool CanHarvestBlock(BLOCKTYPE a_BlockType) override
|
||||||
{
|
{
|
||||||
switch(a_BlockType)
|
switch (a_BlockType)
|
||||||
{
|
{
|
||||||
case E_BLOCK_OBSIDIAN:
|
case E_BLOCK_OBSIDIAN:
|
||||||
{
|
{
|
||||||
|
28
src/Log.cpp
28
src/Log.cpp
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
cLog* cLog::s_Log = NULL;
|
cLog* cLog::s_Log = NULL;
|
||||||
|
|
||||||
cLog::cLog(const AString & a_FileName )
|
cLog::cLog(const AString & a_FileName)
|
||||||
: m_File(NULL)
|
: m_File(NULL)
|
||||||
{
|
{
|
||||||
s_Log = this;
|
s_Log = this;
|
||||||
@ -25,7 +25,7 @@ cLog::cLog(const AString & a_FileName )
|
|||||||
// create logs directory
|
// create logs directory
|
||||||
cFile::CreateFolder(FILE_IO_PREFIX + AString("logs"));
|
cFile::CreateFolder(FILE_IO_PREFIX + AString("logs"));
|
||||||
|
|
||||||
OpenLog((FILE_IO_PREFIX + AString("logs/") + a_FileName).c_str() );
|
OpenLog((FILE_IO_PREFIX + AString("logs/") + a_FileName).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ cLog * cLog::GetInstance()
|
|||||||
|
|
||||||
void cLog::CloseLog()
|
void cLog::CloseLog()
|
||||||
{
|
{
|
||||||
if (m_File )
|
if (m_File)
|
||||||
fclose (m_File);
|
fclose (m_File);
|
||||||
m_File = 0;
|
m_File = 0;
|
||||||
}
|
}
|
||||||
@ -68,13 +68,13 @@ void cLog::CloseLog()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cLog::OpenLog( const char* a_FileName )
|
void cLog::OpenLog( const char* a_FileName)
|
||||||
{
|
{
|
||||||
if (m_File) fclose (m_File);
|
if (m_File) fclose (m_File);
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
fopen_s( &m_File, a_FileName, "a+" );
|
fopen_s( &m_File, a_FileName, "a+");
|
||||||
#else
|
#else
|
||||||
m_File = fopen(a_FileName, "a+" );
|
m_File = fopen(a_FileName, "a+");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,11 +85,11 @@ void cLog::OpenLog( const char* a_FileName )
|
|||||||
void cLog::ClearLog()
|
void cLog::ClearLog()
|
||||||
{
|
{
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
if (fopen_s( &m_File, "log.txt", "w" ) == 0)
|
if (fopen_s( &m_File, "log.txt", "w") == 0)
|
||||||
fclose (m_File);
|
fclose (m_File);
|
||||||
#else
|
#else
|
||||||
m_File = fopen("log.txt", "w" );
|
m_File = fopen("log.txt", "w");
|
||||||
if (m_File )
|
if (m_File)
|
||||||
fclose (m_File);
|
fclose (m_File);
|
||||||
#endif
|
#endif
|
||||||
m_File = NULL;
|
m_File = NULL;
|
||||||
@ -105,15 +105,15 @@ void cLog::Log(const char * a_Format, va_list argList)
|
|||||||
AppendVPrintf(Message, a_Format, argList);
|
AppendVPrintf(Message, a_Format, argList);
|
||||||
|
|
||||||
time_t rawtime;
|
time_t rawtime;
|
||||||
time ( &rawtime );
|
time ( &rawtime);
|
||||||
|
|
||||||
struct tm* timeinfo;
|
struct tm* timeinfo;
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
struct tm timeinforeal;
|
struct tm timeinforeal;
|
||||||
timeinfo = &timeinforeal;
|
timeinfo = &timeinforeal;
|
||||||
localtime_s(timeinfo, &rawtime );
|
localtime_s(timeinfo, &rawtime);
|
||||||
#else
|
#else
|
||||||
timeinfo = localtime( &rawtime );
|
timeinfo = localtime( &rawtime);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
AString Line;
|
AString Line;
|
||||||
@ -131,8 +131,8 @@ void cLog::Log(const char * a_Format, va_list argList)
|
|||||||
// Print to console:
|
// Print to console:
|
||||||
#if defined(ANDROID_NDK)
|
#if defined(ANDROID_NDK)
|
||||||
// __android_log_vprint(ANDROID_LOG_ERROR, "MCServer", a_Format, argList);
|
// __android_log_vprint(ANDROID_LOG_ERROR, "MCServer", a_Format, argList);
|
||||||
__android_log_print(ANDROID_LOG_ERROR, "MCServer", "%s", Line.c_str() );
|
__android_log_print(ANDROID_LOG_ERROR, "MCServer", "%s", Line.c_str());
|
||||||
// CallJavaFunction_Void_String(g_JavaThread, "AddToLog", Line );
|
// CallJavaFunction_Void_String(g_JavaThread, "AddToLog", Line);
|
||||||
#else
|
#else
|
||||||
printf("%s", Line.c_str());
|
printf("%s", Line.c_str());
|
||||||
#endif
|
#endif
|
||||||
|
@ -234,7 +234,7 @@ void LOG(const char* a_Format, ...)
|
|||||||
{
|
{
|
||||||
va_list argList;
|
va_list argList;
|
||||||
va_start(argList, a_Format);
|
va_start(argList, a_Format);
|
||||||
cMCLogger::GetInstance()->Log( a_Format, argList );
|
cMCLogger::GetInstance()->Log( a_Format, argList);
|
||||||
va_end(argList);
|
va_end(argList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,7 +242,7 @@ void LOGINFO(const char* a_Format, ...)
|
|||||||
{
|
{
|
||||||
va_list argList;
|
va_list argList;
|
||||||
va_start(argList, a_Format);
|
va_start(argList, a_Format);
|
||||||
cMCLogger::GetInstance()->Info( a_Format, argList );
|
cMCLogger::GetInstance()->Info( a_Format, argList);
|
||||||
va_end(argList);
|
va_end(argList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ void LOGWARN(const char* a_Format, ...)
|
|||||||
{
|
{
|
||||||
va_list argList;
|
va_list argList;
|
||||||
va_start(argList, a_Format);
|
va_start(argList, a_Format);
|
||||||
cMCLogger::GetInstance()->Warn( a_Format, argList );
|
cMCLogger::GetInstance()->Warn( a_Format, argList);
|
||||||
va_end(argList);
|
va_end(argList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,7 +258,7 @@ void LOGERROR(const char* a_Format, ...)
|
|||||||
{
|
{
|
||||||
va_list argList;
|
va_list argList;
|
||||||
va_start(argList, a_Format);
|
va_start(argList, a_Format);
|
||||||
cMCLogger::GetInstance()->Error( a_Format, argList );
|
cMCLogger::GetInstance()->Error( a_Format, argList);
|
||||||
va_end(argList);
|
va_end(argList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ bool cMobSpawner::CanSpawnHere(cChunk * a_Chunk, int a_RelX, int a_RelY, int a_R
|
|||||||
|
|
||||||
SkyLight = a_Chunk->GetTimeAlteredLight(SkyLight);
|
SkyLight = a_Chunk->GetTimeAlteredLight(SkyLight);
|
||||||
|
|
||||||
switch(a_MobType)
|
switch (a_MobType)
|
||||||
{
|
{
|
||||||
case cMonster::mtSquid:
|
case cMonster::mtSquid:
|
||||||
{
|
{
|
||||||
|
@ -30,7 +30,7 @@ void cSnowGolem::GetDrops(cItems & a_Drops, cEntity * a_Killer)
|
|||||||
void cSnowGolem::Tick(float a_Dt, cChunk & a_Chunk)
|
void cSnowGolem::Tick(float a_Dt, cChunk & a_Chunk)
|
||||||
{
|
{
|
||||||
super::Tick(a_Dt, a_Chunk);
|
super::Tick(a_Dt, a_Chunk);
|
||||||
if (IsBiomeNoDownfall(m_World->GetBiomeAt((int) floor(GetPosX()), (int) floor(GetPosZ())) ))
|
if (IsBiomeNoDownfall(m_World->GetBiomeAt((int) floor(GetPosX()), (int) floor(GetPosZ()))))
|
||||||
{
|
{
|
||||||
TakeDamage(*this);
|
TakeDamage(*this);
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ struct cMonsterConfig::sMonsterConfigState
|
|||||||
|
|
||||||
|
|
||||||
cMonsterConfig::cMonsterConfig(void)
|
cMonsterConfig::cMonsterConfig(void)
|
||||||
: m_pState( new sMonsterConfigState )
|
: m_pState( new sMonsterConfigState)
|
||||||
{
|
{
|
||||||
Initialize();
|
Initialize();
|
||||||
}
|
}
|
||||||
|
@ -528,10 +528,10 @@ NOISE_DATATYPE cNoise::CubicNoise3D(NOISE_DATATYPE a_X, NOISE_DATATYPE a_Y, NOIS
|
|||||||
};
|
};
|
||||||
|
|
||||||
const NOISE_DATATYPE FracX = (a_X) - BaseX;
|
const NOISE_DATATYPE FracX = (a_X) - BaseX;
|
||||||
const NOISE_DATATYPE x1interp1 = CubicInterpolate( points1[0][0], points1[0][1], points1[0][2], points1[0][3], FracX );
|
const NOISE_DATATYPE x1interp1 = CubicInterpolate( points1[0][0], points1[0][1], points1[0][2], points1[0][3], FracX);
|
||||||
const NOISE_DATATYPE x1interp2 = CubicInterpolate( points1[1][0], points1[1][1], points1[1][2], points1[1][3], FracX );
|
const NOISE_DATATYPE x1interp2 = CubicInterpolate( points1[1][0], points1[1][1], points1[1][2], points1[1][3], FracX);
|
||||||
const NOISE_DATATYPE x1interp3 = CubicInterpolate( points1[2][0], points1[2][1], points1[2][2], points1[2][3], FracX );
|
const NOISE_DATATYPE x1interp3 = CubicInterpolate( points1[2][0], points1[2][1], points1[2][2], points1[2][3], FracX);
|
||||||
const NOISE_DATATYPE x1interp4 = CubicInterpolate( points1[3][0], points1[3][1], points1[3][2], points1[3][3], FracX );
|
const NOISE_DATATYPE x1interp4 = CubicInterpolate( points1[3][0], points1[3][1], points1[3][2], points1[3][3], FracX);
|
||||||
|
|
||||||
const NOISE_DATATYPE points2[4][4] =
|
const NOISE_DATATYPE points2[4][4] =
|
||||||
{
|
{
|
||||||
@ -541,45 +541,45 @@ NOISE_DATATYPE cNoise::CubicNoise3D(NOISE_DATATYPE a_X, NOISE_DATATYPE a_Y, NOIS
|
|||||||
{ IntNoise3D(BaseX - 1, BaseY + 2, BaseZ), IntNoise3D(BaseX, BaseY + 2, BaseZ), IntNoise3D(BaseX + 1, BaseY + 2, BaseZ), IntNoise3D(BaseX + 2, BaseY + 2, BaseZ), },
|
{ IntNoise3D(BaseX - 1, BaseY + 2, BaseZ), IntNoise3D(BaseX, BaseY + 2, BaseZ), IntNoise3D(BaseX + 1, BaseY + 2, BaseZ), IntNoise3D(BaseX + 2, BaseY + 2, BaseZ), },
|
||||||
};
|
};
|
||||||
|
|
||||||
const NOISE_DATATYPE x2interp1 = CubicInterpolate( points2[0][0], points2[0][1], points2[0][2], points2[0][3], FracX );
|
const NOISE_DATATYPE x2interp1 = CubicInterpolate( points2[0][0], points2[0][1], points2[0][2], points2[0][3], FracX);
|
||||||
const NOISE_DATATYPE x2interp2 = CubicInterpolate( points2[1][0], points2[1][1], points2[1][2], points2[1][3], FracX );
|
const NOISE_DATATYPE x2interp2 = CubicInterpolate( points2[1][0], points2[1][1], points2[1][2], points2[1][3], FracX);
|
||||||
const NOISE_DATATYPE x2interp3 = CubicInterpolate( points2[2][0], points2[2][1], points2[2][2], points2[2][3], FracX );
|
const NOISE_DATATYPE x2interp3 = CubicInterpolate( points2[2][0], points2[2][1], points2[2][2], points2[2][3], FracX);
|
||||||
const NOISE_DATATYPE x2interp4 = CubicInterpolate( points2[3][0], points2[3][1], points2[3][2], points2[3][3], FracX );
|
const NOISE_DATATYPE x2interp4 = CubicInterpolate( points2[3][0], points2[3][1], points2[3][2], points2[3][3], FracX);
|
||||||
|
|
||||||
const NOISE_DATATYPE points3[4][4] =
|
const NOISE_DATATYPE points3[4][4] =
|
||||||
{
|
{
|
||||||
{ IntNoise3D( BaseX-1, BaseY-1, BaseZ+1 ), IntNoise3D( BaseX, BaseY-1, BaseZ+1 ), IntNoise3D( BaseX+1, BaseY-1, BaseZ+1 ), IntNoise3D( BaseX+2, BaseY-1, BaseZ + 1), },
|
{ IntNoise3D( BaseX-1, BaseY-1, BaseZ+1), IntNoise3D( BaseX, BaseY-1, BaseZ+1), IntNoise3D( BaseX+1, BaseY-1, BaseZ+1), IntNoise3D( BaseX+2, BaseY-1, BaseZ + 1), },
|
||||||
{ IntNoise3D( BaseX-1, BaseY, BaseZ+1 ), IntNoise3D( BaseX, BaseY, BaseZ+1 ), IntNoise3D( BaseX+1, BaseY, BaseZ+1 ), IntNoise3D( BaseX+2, BaseY, BaseZ + 1), },
|
{ IntNoise3D( BaseX-1, BaseY, BaseZ+1), IntNoise3D( BaseX, BaseY, BaseZ+1), IntNoise3D( BaseX+1, BaseY, BaseZ+1), IntNoise3D( BaseX+2, BaseY, BaseZ + 1), },
|
||||||
{ IntNoise3D( BaseX-1, BaseY+1, BaseZ+1 ), IntNoise3D( BaseX, BaseY+1, BaseZ+1 ), IntNoise3D( BaseX+1, BaseY+1, BaseZ+1 ), IntNoise3D( BaseX+2, BaseY+1, BaseZ + 1), },
|
{ IntNoise3D( BaseX-1, BaseY+1, BaseZ+1), IntNoise3D( BaseX, BaseY+1, BaseZ+1), IntNoise3D( BaseX+1, BaseY+1, BaseZ+1), IntNoise3D( BaseX+2, BaseY+1, BaseZ + 1), },
|
||||||
{ IntNoise3D( BaseX-1, BaseY+2, BaseZ+1 ), IntNoise3D( BaseX, BaseY+2, BaseZ+1 ), IntNoise3D( BaseX+1, BaseY+2, BaseZ+1 ), IntNoise3D( BaseX+2, BaseY+2, BaseZ + 1), },
|
{ IntNoise3D( BaseX-1, BaseY+2, BaseZ+1), IntNoise3D( BaseX, BaseY+2, BaseZ+1), IntNoise3D( BaseX+1, BaseY+2, BaseZ+1), IntNoise3D( BaseX+2, BaseY+2, BaseZ + 1), },
|
||||||
};
|
};
|
||||||
|
|
||||||
const NOISE_DATATYPE x3interp1 = CubicInterpolate( points3[0][0], points3[0][1], points3[0][2], points3[0][3], FracX );
|
const NOISE_DATATYPE x3interp1 = CubicInterpolate( points3[0][0], points3[0][1], points3[0][2], points3[0][3], FracX);
|
||||||
const NOISE_DATATYPE x3interp2 = CubicInterpolate( points3[1][0], points3[1][1], points3[1][2], points3[1][3], FracX );
|
const NOISE_DATATYPE x3interp2 = CubicInterpolate( points3[1][0], points3[1][1], points3[1][2], points3[1][3], FracX);
|
||||||
const NOISE_DATATYPE x3interp3 = CubicInterpolate( points3[2][0], points3[2][1], points3[2][2], points3[2][3], FracX );
|
const NOISE_DATATYPE x3interp3 = CubicInterpolate( points3[2][0], points3[2][1], points3[2][2], points3[2][3], FracX);
|
||||||
const NOISE_DATATYPE x3interp4 = CubicInterpolate( points3[3][0], points3[3][1], points3[3][2], points3[3][3], FracX );
|
const NOISE_DATATYPE x3interp4 = CubicInterpolate( points3[3][0], points3[3][1], points3[3][2], points3[3][3], FracX);
|
||||||
|
|
||||||
const NOISE_DATATYPE points4[4][4] =
|
const NOISE_DATATYPE points4[4][4] =
|
||||||
{
|
{
|
||||||
{ IntNoise3D( BaseX-1, BaseY-1, BaseZ+2 ), IntNoise3D( BaseX, BaseY-1, BaseZ+2 ), IntNoise3D( BaseX+1, BaseY-1, BaseZ+2 ), IntNoise3D( BaseX+2, BaseY-1, BaseZ+2 ), },
|
{ IntNoise3D( BaseX-1, BaseY-1, BaseZ+2), IntNoise3D( BaseX, BaseY-1, BaseZ+2), IntNoise3D( BaseX+1, BaseY-1, BaseZ+2), IntNoise3D( BaseX+2, BaseY-1, BaseZ+2), },
|
||||||
{ IntNoise3D( BaseX-1, BaseY, BaseZ+2 ), IntNoise3D( BaseX, BaseY, BaseZ+2 ), IntNoise3D( BaseX+1, BaseY, BaseZ+2 ), IntNoise3D( BaseX+2, BaseY, BaseZ+2 ), },
|
{ IntNoise3D( BaseX-1, BaseY, BaseZ+2), IntNoise3D( BaseX, BaseY, BaseZ+2), IntNoise3D( BaseX+1, BaseY, BaseZ+2), IntNoise3D( BaseX+2, BaseY, BaseZ+2), },
|
||||||
{ IntNoise3D( BaseX-1, BaseY+1, BaseZ+2 ), IntNoise3D( BaseX, BaseY+1, BaseZ+2 ), IntNoise3D( BaseX+1, BaseY+1, BaseZ+2 ), IntNoise3D( BaseX+2, BaseY+1, BaseZ+2 ), },
|
{ IntNoise3D( BaseX-1, BaseY+1, BaseZ+2), IntNoise3D( BaseX, BaseY+1, BaseZ+2), IntNoise3D( BaseX+1, BaseY+1, BaseZ+2), IntNoise3D( BaseX+2, BaseY+1, BaseZ+2), },
|
||||||
{ IntNoise3D( BaseX-1, BaseY+2, BaseZ+2 ), IntNoise3D( BaseX, BaseY+2, BaseZ+2 ), IntNoise3D( BaseX+1, BaseY+2, BaseZ+2 ), IntNoise3D( BaseX+2, BaseY+2, BaseZ+2 ), },
|
{ IntNoise3D( BaseX-1, BaseY+2, BaseZ+2), IntNoise3D( BaseX, BaseY+2, BaseZ+2), IntNoise3D( BaseX+1, BaseY+2, BaseZ+2), IntNoise3D( BaseX+2, BaseY+2, BaseZ+2), },
|
||||||
};
|
};
|
||||||
|
|
||||||
const NOISE_DATATYPE x4interp1 = CubicInterpolate( points4[0][0], points4[0][1], points4[0][2], points4[0][3], FracX );
|
const NOISE_DATATYPE x4interp1 = CubicInterpolate( points4[0][0], points4[0][1], points4[0][2], points4[0][3], FracX);
|
||||||
const NOISE_DATATYPE x4interp2 = CubicInterpolate( points4[1][0], points4[1][1], points4[1][2], points4[1][3], FracX );
|
const NOISE_DATATYPE x4interp2 = CubicInterpolate( points4[1][0], points4[1][1], points4[1][2], points4[1][3], FracX);
|
||||||
const NOISE_DATATYPE x4interp3 = CubicInterpolate( points4[2][0], points4[2][1], points4[2][2], points4[2][3], FracX );
|
const NOISE_DATATYPE x4interp3 = CubicInterpolate( points4[2][0], points4[2][1], points4[2][2], points4[2][3], FracX);
|
||||||
const NOISE_DATATYPE x4interp4 = CubicInterpolate( points4[3][0], points4[3][1], points4[3][2], points4[3][3], FracX );
|
const NOISE_DATATYPE x4interp4 = CubicInterpolate( points4[3][0], points4[3][1], points4[3][2], points4[3][3], FracX);
|
||||||
|
|
||||||
const NOISE_DATATYPE FracY = (a_Y) - BaseY;
|
const NOISE_DATATYPE FracY = (a_Y) - BaseY;
|
||||||
const NOISE_DATATYPE yinterp1 = CubicInterpolate( x1interp1, x1interp2, x1interp3, x1interp4, FracY );
|
const NOISE_DATATYPE yinterp1 = CubicInterpolate( x1interp1, x1interp2, x1interp3, x1interp4, FracY);
|
||||||
const NOISE_DATATYPE yinterp2 = CubicInterpolate( x2interp1, x2interp2, x2interp3, x2interp4, FracY );
|
const NOISE_DATATYPE yinterp2 = CubicInterpolate( x2interp1, x2interp2, x2interp3, x2interp4, FracY);
|
||||||
const NOISE_DATATYPE yinterp3 = CubicInterpolate( x3interp1, x3interp2, x3interp3, x3interp4, FracY );
|
const NOISE_DATATYPE yinterp3 = CubicInterpolate( x3interp1, x3interp2, x3interp3, x3interp4, FracY);
|
||||||
const NOISE_DATATYPE yinterp4 = CubicInterpolate( x4interp1, x4interp2, x4interp3, x4interp4, FracY );
|
const NOISE_DATATYPE yinterp4 = CubicInterpolate( x4interp1, x4interp2, x4interp3, x4interp4, FracY);
|
||||||
|
|
||||||
const NOISE_DATATYPE FracZ = (a_Z) - BaseZ;
|
const NOISE_DATATYPE FracZ = (a_Z) - BaseZ;
|
||||||
return CubicInterpolate( yinterp1, yinterp2, yinterp3, yinterp4, FracZ );
|
return CubicInterpolate( yinterp1, yinterp2, yinterp3, yinterp4, FracZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "Errors.h"
|
#include "Errors.h"
|
||||||
|
|
||||||
AString GetOSErrorString( int a_ErrNo )
|
AString GetOSErrorString( int a_ErrNo)
|
||||||
{
|
{
|
||||||
char buffer[ 1024 ];
|
char buffer[ 1024 ];
|
||||||
AString Out;
|
AString Out;
|
||||||
@ -22,10 +22,10 @@ AString GetOSErrorString( int a_ErrNo )
|
|||||||
|
|
||||||
// According to http://linux.die.net/man/3/strerror_r there are two versions of strerror_r():
|
// According to http://linux.die.net/man/3/strerror_r there are two versions of strerror_r():
|
||||||
|
|
||||||
#if !defined(__APPLE__) && ( _GNU_SOURCE ) && !defined(ANDROID_NDK) // GNU version of strerror_r()
|
#if !defined(__APPLE__) && ( _GNU_SOURCE) && !defined(ANDROID_NDK) // GNU version of strerror_r()
|
||||||
|
|
||||||
char * res = strerror_r( errno, buffer, ARRAYCOUNT(buffer) );
|
char * res = strerror_r( errno, buffer, ARRAYCOUNT(buffer));
|
||||||
if (res != NULL )
|
if (res != NULL)
|
||||||
{
|
{
|
||||||
Printf(Out, "%d: %s", a_ErrNo, res);
|
Printf(Out, "%d: %s", a_ErrNo, res);
|
||||||
return Out;
|
return Out;
|
||||||
@ -33,8 +33,8 @@ AString GetOSErrorString( int a_ErrNo )
|
|||||||
|
|
||||||
#else // XSI version of strerror_r():
|
#else // XSI version of strerror_r():
|
||||||
|
|
||||||
int res = strerror_r( errno, buffer, ARRAYCOUNT(buffer) );
|
int res = strerror_r( errno, buffer, ARRAYCOUNT(buffer));
|
||||||
if (res == 0 )
|
if (res == 0)
|
||||||
{
|
{
|
||||||
Printf(Out, "%d: %s", a_ErrNo, buffer);
|
Printf(Out, "%d: %s", a_ErrNo, buffer);
|
||||||
return Out;
|
return Out;
|
||||||
|
@ -32,7 +32,7 @@ cEvent::cEvent(void)
|
|||||||
|
|
||||||
AString EventName;
|
AString EventName;
|
||||||
Printf(EventName, "cEvent%p", this);
|
Printf(EventName, "cEvent%p", this);
|
||||||
m_Event = sem_open(EventName.c_str(), O_CREAT, 777, 0 );
|
m_Event = sem_open(EventName.c_str(), O_CREAT, 777, 0);
|
||||||
if (m_Event == SEM_FAILED)
|
if (m_Event == SEM_FAILED)
|
||||||
{
|
{
|
||||||
AString error = GetOSErrorString(errno);
|
AString error = GetOSErrorString(errno);
|
||||||
@ -90,7 +90,7 @@ void cEvent::Wait(void)
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int res = sem_wait(m_Event);
|
int res = sem_wait(m_Event);
|
||||||
if (res != 0 )
|
if (res != 0)
|
||||||
{
|
{
|
||||||
AString error = GetOSErrorString(errno);
|
AString error = GetOSErrorString(errno);
|
||||||
LOGWARN("cEvent: waiting for the event failed: %i, err = %s. Continuing, but server may be unstable.", res, error.c_str());
|
LOGWARN("cEvent: waiting for the event failed: %i, err = %s. Continuing, but server may be unstable.", res, error.c_str());
|
||||||
|
@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cSemaphore::cSemaphore( unsigned int a_MaxCount, unsigned int a_InitialCount /* = 0 */ )
|
cSemaphore::cSemaphore( unsigned int a_MaxCount, unsigned int a_InitialCount /* = 0 */)
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
: m_bNamed( false )
|
: m_bNamed( false)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
@ -20,15 +20,15 @@ cSemaphore::cSemaphore( unsigned int a_MaxCount, unsigned int a_InitialCount /*
|
|||||||
m_bNamed = true;
|
m_bNamed = true;
|
||||||
|
|
||||||
AString Name;
|
AString Name;
|
||||||
Printf(Name, "cSemaphore%p", this );
|
Printf(Name, "cSemaphore%p", this);
|
||||||
m_Handle = sem_open(Name.c_str(), O_CREAT, 777, a_InitialCount);
|
m_Handle = sem_open(Name.c_str(), O_CREAT, 777, a_InitialCount);
|
||||||
if (m_Handle == SEM_FAILED )
|
if (m_Handle == SEM_FAILED)
|
||||||
{
|
{
|
||||||
LOG("ERROR: Could not create Semaphore. (%i)", errno );
|
LOG("ERROR: Could not create Semaphore. (%i)", errno);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (sem_unlink(Name.c_str()) != 0 )
|
if (sem_unlink(Name.c_str()) != 0)
|
||||||
{
|
{
|
||||||
LOG("ERROR: Could not unlink cSemaphore. (%i)", errno);
|
LOG("ERROR: Could not unlink cSemaphore. (%i)", errno);
|
||||||
}
|
}
|
||||||
@ -51,18 +51,18 @@ cSemaphore::cSemaphore( unsigned int a_MaxCount, unsigned int a_InitialCount /*
|
|||||||
cSemaphore::~cSemaphore()
|
cSemaphore::~cSemaphore()
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
CloseHandle( m_Handle );
|
CloseHandle( m_Handle);
|
||||||
#else
|
#else
|
||||||
if (m_bNamed )
|
if (m_bNamed)
|
||||||
{
|
{
|
||||||
if (sem_close( (sem_t*)m_Handle ) != 0 )
|
if (sem_close( (sem_t*)m_Handle) != 0)
|
||||||
{
|
{
|
||||||
LOG("ERROR: Could not close cSemaphore. (%i)", errno);
|
LOG("ERROR: Could not close cSemaphore. (%i)", errno);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sem_destroy( (sem_t*)m_Handle );
|
sem_destroy( (sem_t*)m_Handle);
|
||||||
delete (sem_t*)m_Handle;
|
delete (sem_t*)m_Handle;
|
||||||
}
|
}
|
||||||
m_Handle = 0;
|
m_Handle = 0;
|
||||||
@ -77,7 +77,7 @@ cSemaphore::~cSemaphore()
|
|||||||
void cSemaphore::Wait()
|
void cSemaphore::Wait()
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
if (sem_wait( (sem_t*)m_Handle ) != 0)
|
if (sem_wait( (sem_t*)m_Handle) != 0)
|
||||||
{
|
{
|
||||||
LOG("ERROR: Could not wait for cSemaphore. (%i)", errno);
|
LOG("ERROR: Could not wait for cSemaphore. (%i)", errno);
|
||||||
}
|
}
|
||||||
@ -93,12 +93,12 @@ void cSemaphore::Wait()
|
|||||||
void cSemaphore::Signal()
|
void cSemaphore::Signal()
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
if (sem_post( (sem_t*)m_Handle ) != 0 )
|
if (sem_post( (sem_t*)m_Handle) != 0)
|
||||||
{
|
{
|
||||||
LOG("ERROR: Could not signal cSemaphore. (%i)", errno);
|
LOG("ERROR: Could not signal cSemaphore. (%i)", errno);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
ReleaseSemaphore( m_Handle, 1, NULL );
|
ReleaseSemaphore( m_Handle, 1, NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
class cSemaphore
|
class cSemaphore
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cSemaphore( unsigned int a_MaxCount, unsigned int a_InitialCount = 0 );
|
cSemaphore( unsigned int a_MaxCount, unsigned int a_InitialCount = 0);
|
||||||
~cSemaphore();
|
~cSemaphore();
|
||||||
|
|
||||||
void Wait();
|
void Wait();
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cSleep::MilliSleep( unsigned int a_MilliSeconds )
|
void cSleep::MilliSleep( unsigned int a_MilliSeconds)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
Sleep(a_MilliSeconds); // Don't tick too much
|
Sleep(a_MilliSeconds); // Don't tick too much
|
||||||
|
@ -3,5 +3,5 @@
|
|||||||
class cSleep
|
class cSleep
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void MilliSleep( unsigned int a_MilliSeconds );
|
static void MilliSleep( unsigned int a_MilliSeconds);
|
||||||
};
|
};
|
||||||
|
@ -47,13 +47,13 @@ static void SetThreadName(DWORD dwThreadID, const char * threadName)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cThread::cThread( ThreadFunc a_ThreadFunction, void* a_Param, const char* a_ThreadName /* = 0 */ )
|
cThread::cThread( ThreadFunc a_ThreadFunction, void* a_Param, const char* a_ThreadName /* = 0 */)
|
||||||
: m_ThreadFunction( a_ThreadFunction )
|
: m_ThreadFunction( a_ThreadFunction)
|
||||||
, m_Param( a_Param )
|
, m_Param( a_Param)
|
||||||
, m_Event( new cEvent() )
|
, m_Event( new cEvent())
|
||||||
, m_StopEvent( 0 )
|
, m_StopEvent( 0)
|
||||||
{
|
{
|
||||||
if (a_ThreadName )
|
if (a_ThreadName)
|
||||||
{
|
{
|
||||||
m_ThreadName.assign(a_ThreadName);
|
m_ThreadName.assign(a_ThreadName);
|
||||||
}
|
}
|
||||||
@ -68,7 +68,7 @@ cThread::~cThread()
|
|||||||
delete m_Event;
|
delete m_Event;
|
||||||
m_Event = NULL;
|
m_Event = NULL;
|
||||||
|
|
||||||
if (m_StopEvent )
|
if (m_StopEvent)
|
||||||
{
|
{
|
||||||
m_StopEvent->Wait();
|
m_StopEvent->Wait();
|
||||||
delete m_StopEvent;
|
delete m_StopEvent;
|
||||||
@ -80,14 +80,14 @@ cThread::~cThread()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cThread::Start( bool a_bWaitOnDelete /* = true */ )
|
void cThread::Start( bool a_bWaitOnDelete /* = true */)
|
||||||
{
|
{
|
||||||
if (a_bWaitOnDelete )
|
if (a_bWaitOnDelete)
|
||||||
m_StopEvent = new cEvent();
|
m_StopEvent = new cEvent();
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
pthread_t SndThread;
|
pthread_t SndThread;
|
||||||
if (pthread_create( &SndThread, NULL, MyThread, this) )
|
if (pthread_create( &SndThread, NULL, MyThread, this))
|
||||||
LOGERROR("ERROR: Could not create thread!");
|
LOGERROR("ERROR: Could not create thread!");
|
||||||
#else
|
#else
|
||||||
DWORD ThreadID = 0;
|
DWORD ThreadID = 0;
|
||||||
@ -96,8 +96,8 @@ void cThread::Start( bool a_bWaitOnDelete /* = true */ )
|
|||||||
, (LPTHREAD_START_ROUTINE) MyThread // function name
|
, (LPTHREAD_START_ROUTINE) MyThread // function name
|
||||||
, this // parameters
|
, this // parameters
|
||||||
, 0 // flags
|
, 0 // flags
|
||||||
, &ThreadID ); // thread id
|
, &ThreadID); // thread id
|
||||||
CloseHandle( hThread );
|
CloseHandle( hThread);
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
if (!m_ThreadName.empty())
|
if (!m_ThreadName.empty())
|
||||||
@ -116,9 +116,9 @@ void cThread::Start( bool a_bWaitOnDelete /* = true */ )
|
|||||||
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
unsigned long cThread::MyThread(void* a_Param )
|
unsigned long cThread::MyThread(void* a_Param)
|
||||||
#else
|
#else
|
||||||
void *cThread::MyThread( void *a_Param )
|
void *cThread::MyThread( void *a_Param)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
cThread* self = (cThread*)a_Param;
|
cThread* self = (cThread*)a_Param;
|
||||||
@ -130,8 +130,8 @@ void *cThread::MyThread( void *a_Param )
|
|||||||
// Set event to let other thread know this thread has been created and it's safe to delete the cThread object
|
// Set event to let other thread know this thread has been created and it's safe to delete the cThread object
|
||||||
self->m_Event->Set();
|
self->m_Event->Set();
|
||||||
|
|
||||||
ThreadFunction( ThreadParam );
|
ThreadFunction( ThreadParam);
|
||||||
|
|
||||||
if (StopEvent ) StopEvent->Set();
|
if (StopEvent) StopEvent->Set();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -4,18 +4,18 @@ class cThread
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef void (ThreadFunc)(void*);
|
typedef void (ThreadFunc)(void*);
|
||||||
cThread( ThreadFunc a_ThreadFunction, void* a_Param, const char* a_ThreadName = 0 );
|
cThread( ThreadFunc a_ThreadFunction, void* a_Param, const char* a_ThreadName = 0);
|
||||||
~cThread();
|
~cThread();
|
||||||
|
|
||||||
void Start( bool a_bWaitOnDelete = true );
|
void Start( bool a_bWaitOnDelete = true);
|
||||||
void WaitForThread();
|
void WaitForThread();
|
||||||
private:
|
private:
|
||||||
ThreadFunc* m_ThreadFunction;
|
ThreadFunc* m_ThreadFunction;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static unsigned long MyThread(void* a_Param );
|
static unsigned long MyThread(void* a_Param);
|
||||||
#else
|
#else
|
||||||
static void *MyThread( void *lpParam );
|
static void *MyThread( void *lpParam);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void* m_Param;
|
void* m_Param;
|
||||||
|
@ -120,7 +120,7 @@ public:
|
|||||||
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) = 0;
|
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) = 0;
|
||||||
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) = 0;
|
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) = 0;
|
||||||
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) = 0;
|
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) = 0;
|
||||||
virtual void SendUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ ) = 0;
|
virtual void SendUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ) = 0;
|
||||||
virtual void SendWeather (eWeather a_Weather) = 0;
|
virtual void SendWeather (eWeather a_Weather) = 0;
|
||||||
virtual void SendWholeInventory (const cWindow & a_Window) = 0;
|
virtual void SendWholeInventory (const cWindow & a_Window) = 0;
|
||||||
virtual void SendWindowClose (const cWindow & a_Window) = 0;
|
virtual void SendWindowClose (const cWindow & a_Window) = 0;
|
||||||
|
@ -1116,7 +1116,7 @@ void cProtocol125::SendUpdateSign(
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cProtocol125::SendUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ )
|
void cProtocol125::SendUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CSPacket);
|
cCSLock Lock(m_CSPacket);
|
||||||
WriteByte(PACKET_USE_BED);
|
WriteByte(PACKET_USE_BED);
|
||||||
@ -1135,7 +1135,7 @@ void cProtocol125::SendUseBed(const cEntity & a_Entity, int a_BlockX, int a_Bloc
|
|||||||
void cProtocol125::SendWeather(eWeather a_Weather)
|
void cProtocol125::SendWeather(eWeather a_Weather)
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CSPacket);
|
cCSLock Lock(m_CSPacket);
|
||||||
switch( a_Weather )
|
switch (a_Weather)
|
||||||
{
|
{
|
||||||
case eWeather_Sunny:
|
case eWeather_Sunny:
|
||||||
{
|
{
|
||||||
@ -1454,7 +1454,7 @@ int cProtocol125::ParseHandshake(void)
|
|||||||
|
|
||||||
LOGD("HANDSHAKE %s", Username.c_str());
|
LOGD("HANDSHAKE %s", Username.c_str());
|
||||||
|
|
||||||
if (!m_Client->HandleHandshake( m_Username ))
|
if (!m_Client->HandleHandshake( m_Username))
|
||||||
{
|
{
|
||||||
return PARSE_OK; // Player is not allowed into the server
|
return PARSE_OK; // Player is not allowed into the server
|
||||||
}
|
}
|
||||||
@ -1916,7 +1916,7 @@ void cProtocol125::WriteEntityMetadata(const cEntity & a_Entity)
|
|||||||
{
|
{
|
||||||
WriteByte(0x51);
|
WriteByte(0x51);
|
||||||
// No idea how Mojang makes their carts shakey shakey, so here is a complicated one-liner expression that does something similar
|
// No idea how Mojang makes their carts shakey shakey, so here is a complicated one-liner expression that does something similar
|
||||||
WriteInt( (((a_Entity.GetMaxHealth() / 2) - (a_Entity.GetHealth() - (a_Entity.GetMaxHealth() / 2))) * ((const cMinecart &)a_Entity).LastDamage()) * 4 );
|
WriteInt( (((a_Entity.GetMaxHealth() / 2) - (a_Entity.GetHealth() - (a_Entity.GetMaxHealth() / 2))) * ((const cMinecart &)a_Entity).LastDamage()) * 4);
|
||||||
WriteByte(0x52);
|
WriteByte(0x52);
|
||||||
WriteInt(1); // Shaking direction, doesn't seem to affect anything
|
WriteInt(1); // Shaking direction, doesn't seem to affect anything
|
||||||
WriteByte(0x73);
|
WriteByte(0x73);
|
||||||
|
@ -92,7 +92,7 @@ public:
|
|||||||
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
||||||
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override {};
|
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override {};
|
||||||
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
||||||
virtual void SendUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ ) override;
|
virtual void SendUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
||||||
virtual void SendWeather (eWeather a_Weather) override;
|
virtual void SendWeather (eWeather a_Weather) override;
|
||||||
virtual void SendWholeInventory (const cWindow & a_Window) override;
|
virtual void SendWholeInventory (const cWindow & a_Window) override;
|
||||||
virtual void SendWindowClose (const cWindow & a_Window) override;
|
virtual void SendWindowClose (const cWindow & a_Window) override;
|
||||||
@ -124,7 +124,7 @@ protected:
|
|||||||
/// Sends the Handshake packet
|
/// Sends the Handshake packet
|
||||||
void SendHandshake(const AString & a_ConnectionHash);
|
void SendHandshake(const AString & a_ConnectionHash);
|
||||||
|
|
||||||
/// Parse the packet of the specified type from m_ReceivedData (switch into ParseXYZ() )
|
/// Parse the packet of the specified type from m_ReceivedData (switch into ParseXYZ())
|
||||||
virtual int ParsePacket(unsigned char a_PacketType);
|
virtual int ParsePacket(unsigned char a_PacketType);
|
||||||
|
|
||||||
// Specific packet parsers:
|
// Specific packet parsers:
|
||||||
|
@ -474,7 +474,7 @@ int cProtocol132::ParseHandshake(void)
|
|||||||
HANDLE_PACKET_READ(ReadBEInt, int, ServerPort);
|
HANDLE_PACKET_READ(ReadBEInt, int, ServerPort);
|
||||||
m_Username = Username;
|
m_Username = Username;
|
||||||
|
|
||||||
if (!m_Client->HandleHandshake( m_Username ))
|
if (!m_Client->HandleHandshake( m_Username))
|
||||||
{
|
{
|
||||||
return PARSE_OK; // Player is not allowed into the server
|
return PARSE_OK; // Player is not allowed into the server
|
||||||
}
|
}
|
||||||
|
@ -124,7 +124,7 @@ public:
|
|||||||
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
||||||
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override;
|
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override;
|
||||||
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
||||||
virtual void SendUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ ) override;
|
virtual void SendUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
||||||
virtual void SendWeather (eWeather a_Weather) override;
|
virtual void SendWeather (eWeather a_Weather) override;
|
||||||
virtual void SendWholeInventory (const cWindow & a_Window) override;
|
virtual void SendWholeInventory (const cWindow & a_Window) override;
|
||||||
virtual void SendWindowClose (const cWindow & a_Window) override;
|
virtual void SendWindowClose (const cWindow & a_Window) override;
|
||||||
|
@ -756,7 +756,7 @@ void cProtocolRecognizer::SendUpdateSign(int a_BlockX, int a_BlockY, int a_Block
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cProtocolRecognizer::SendUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ )
|
void cProtocolRecognizer::SendUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
{
|
{
|
||||||
ASSERT(m_Protocol != NULL);
|
ASSERT(m_Protocol != NULL);
|
||||||
m_Protocol->SendUseBed(a_Entity, a_BlockX, a_BlockY, a_BlockZ);
|
m_Protocol->SendUseBed(a_Entity, a_BlockX, a_BlockY, a_BlockZ);
|
||||||
|
@ -127,7 +127,7 @@ public:
|
|||||||
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
virtual void SendUnloadChunk (int a_ChunkX, int a_ChunkZ) override;
|
||||||
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override;
|
virtual void SendUpdateBlockEntity (cBlockEntity & a_BlockEntity) override;
|
||||||
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
virtual void SendUpdateSign (int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4) override;
|
||||||
virtual void SendUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ ) override;
|
virtual void SendUseBed (const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ) override;
|
||||||
virtual void SendWeather (eWeather a_Weather) override;
|
virtual void SendWeather (eWeather a_Weather) override;
|
||||||
virtual void SendWholeInventory (const cWindow & a_Window) override;
|
virtual void SendWholeInventory (const cWindow & a_Window) override;
|
||||||
virtual void SendWindowClose (const cWindow & a_Window) override;
|
virtual void SendWindowClose (const cWindow & a_Window) override;
|
||||||
|
24
src/Root.cpp
24
src/Root.cpp
@ -191,8 +191,8 @@ void cRoot::Start(void)
|
|||||||
|
|
||||||
#if !defined(ANDROID_NDK)
|
#if !defined(ANDROID_NDK)
|
||||||
LOGD("Starting InputThread...");
|
LOGD("Starting InputThread...");
|
||||||
m_InputThread = new cThread( InputThread, this, "cRoot::InputThread" );
|
m_InputThread = new cThread( InputThread, this, "cRoot::InputThread");
|
||||||
m_InputThread->Start( false ); // We should NOT wait? Otherwise we can't stop the server from other threads than the input thread
|
m_InputThread->Start( false); // We should NOT wait? Otherwise we can't stop the server from other threads than the input thread
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
long long finishmseconds = Time.GetNowTime();
|
long long finishmseconds = Time.GetNowTime();
|
||||||
@ -269,12 +269,12 @@ void cRoot::LoadWorlds(cIniFile & IniFile)
|
|||||||
{
|
{
|
||||||
// First get the default world
|
// First get the default world
|
||||||
AString DefaultWorldName = IniFile.GetValueSet("Worlds", "DefaultWorld", "world");
|
AString DefaultWorldName = IniFile.GetValueSet("Worlds", "DefaultWorld", "world");
|
||||||
m_pDefaultWorld = new cWorld( DefaultWorldName.c_str() );
|
m_pDefaultWorld = new cWorld( DefaultWorldName.c_str());
|
||||||
m_WorldsByName[ DefaultWorldName ] = m_pDefaultWorld;
|
m_WorldsByName[ DefaultWorldName ] = m_pDefaultWorld;
|
||||||
|
|
||||||
// Then load the other worlds
|
// Then load the other worlds
|
||||||
unsigned int KeyNum = IniFile.FindKey("Worlds");
|
unsigned int KeyNum = IniFile.FindKey("Worlds");
|
||||||
unsigned int NumWorlds = IniFile.GetNumValues( KeyNum );
|
unsigned int NumWorlds = IniFile.GetNumValues( KeyNum);
|
||||||
if (NumWorlds <= 0)
|
if (NumWorlds <= 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -283,18 +283,18 @@ void cRoot::LoadWorlds(cIniFile & IniFile)
|
|||||||
bool FoundAdditionalWorlds = false;
|
bool FoundAdditionalWorlds = false;
|
||||||
for (unsigned int i = 0; i < NumWorlds; i++)
|
for (unsigned int i = 0; i < NumWorlds; i++)
|
||||||
{
|
{
|
||||||
AString ValueName = IniFile.GetValueName(KeyNum, i );
|
AString ValueName = IniFile.GetValueName(KeyNum, i);
|
||||||
if (ValueName.compare("World") != 0)
|
if (ValueName.compare("World") != 0)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
AString WorldName = IniFile.GetValue(KeyNum, i );
|
AString WorldName = IniFile.GetValue(KeyNum, i);
|
||||||
if (WorldName.empty())
|
if (WorldName.empty())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
FoundAdditionalWorlds = true;
|
FoundAdditionalWorlds = true;
|
||||||
cWorld* NewWorld = new cWorld( WorldName.c_str() );
|
cWorld* NewWorld = new cWorld( WorldName.c_str());
|
||||||
m_WorldsByName[ WorldName ] = NewWorld;
|
m_WorldsByName[ WorldName ] = NewWorld;
|
||||||
} // for i - Worlds
|
} // for i - Worlds
|
||||||
|
|
||||||
@ -359,7 +359,7 @@ void cRoot::StopWorlds(void)
|
|||||||
void cRoot::UnloadWorlds(void)
|
void cRoot::UnloadWorlds(void)
|
||||||
{
|
{
|
||||||
m_pDefaultWorld = NULL;
|
m_pDefaultWorld = NULL;
|
||||||
for (WorldMap::iterator itr = m_WorldsByName.begin(); itr != m_WorldsByName.end(); ++itr )
|
for (WorldMap::iterator itr = m_WorldsByName.begin(); itr != m_WorldsByName.end(); ++itr)
|
||||||
{
|
{
|
||||||
delete itr->second;
|
delete itr->second;
|
||||||
}
|
}
|
||||||
@ -379,10 +379,10 @@ cWorld* cRoot::GetDefaultWorld()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cWorld* cRoot::GetWorld( const AString & a_WorldName )
|
cWorld* cRoot::GetWorld( const AString & a_WorldName)
|
||||||
{
|
{
|
||||||
WorldMap::iterator itr = m_WorldsByName.find( a_WorldName );
|
WorldMap::iterator itr = m_WorldsByName.find( a_WorldName);
|
||||||
if (itr != m_WorldsByName.end() )
|
if (itr != m_WorldsByName.end())
|
||||||
return itr->second;
|
return itr->second;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -509,7 +509,7 @@ void cRoot::AuthenticateUser(int a_ClientID, const AString & a_Name, const AStri
|
|||||||
int cRoot::GetTotalChunkCount(void)
|
int cRoot::GetTotalChunkCount(void)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
for (WorldMap::iterator itr = m_WorldsByName.begin(); itr != m_WorldsByName.end(); ++itr )
|
for (WorldMap::iterator itr = m_WorldsByName.begin(); itr != m_WorldsByName.end(); ++itr)
|
||||||
{
|
{
|
||||||
res += itr->second->GetNumChunks();
|
res += itr->second->GetNumChunks();
|
||||||
}
|
}
|
||||||
|
@ -398,7 +398,7 @@ void cServer::TickClients(float a_Dt)
|
|||||||
{
|
{
|
||||||
if ((*itr)->IsDestroyed())
|
if ((*itr)->IsDestroyed())
|
||||||
{
|
{
|
||||||
// Remove the client later, when CS is not held, to avoid deadlock ( http://forum.mc-server.org/showthread.php?tid=374 )
|
// Remove the client later, when CS is not held, to avoid deadlock: http://forum.mc-server.org/showthread.php?tid=374
|
||||||
RemoveClients.push_back(*itr);
|
RemoveClients.push_back(*itr);
|
||||||
itr = m_Clients.erase(itr);
|
itr = m_Clients.erase(itr);
|
||||||
continue;
|
continue;
|
||||||
@ -631,7 +631,7 @@ void cServer::Shutdown(void)
|
|||||||
cRoot::Get()->SaveAllChunks();
|
cRoot::Get()->SaveAllChunks();
|
||||||
|
|
||||||
cCSLock Lock(m_CSClients);
|
cCSLock Lock(m_CSClients);
|
||||||
for (ClientList::iterator itr = m_Clients.begin(); itr != m_Clients.end(); ++itr )
|
for (ClientList::iterator itr = m_Clients.begin(); itr != m_Clients.end(); ++itr)
|
||||||
{
|
{
|
||||||
(*itr)->Destroy();
|
(*itr)->Destroy();
|
||||||
delete *itr;
|
delete *itr;
|
||||||
|
@ -28,7 +28,7 @@ public:
|
|||||||
UNUSED(a_ChunkZ);
|
UNUSED(a_ChunkZ);
|
||||||
UNUSED(a_Chunk);
|
UNUSED(a_Chunk);
|
||||||
}
|
}
|
||||||
virtual bool IsAllowedBlock( BLOCKTYPE a_BlockType ) override { return false; }
|
virtual bool IsAllowedBlock( BLOCKTYPE a_BlockType) override { return false; }
|
||||||
virtual void AddBlock(int a_BlockX, int a_BlockY, int a_BlockZ, cChunk * a_Chunk) override
|
virtual void AddBlock(int a_BlockX, int a_BlockY, int a_BlockZ, cChunk * a_Chunk) override
|
||||||
{
|
{
|
||||||
UNUSED(a_BlockX);
|
UNUSED(a_BlockX);
|
||||||
|
@ -29,7 +29,7 @@ cSimulatorManager::~cSimulatorManager()
|
|||||||
void cSimulatorManager::Simulate(float a_Dt)
|
void cSimulatorManager::Simulate(float a_Dt)
|
||||||
{
|
{
|
||||||
m_Ticks++;
|
m_Ticks++;
|
||||||
for (cSimulators::iterator itr = m_Simulators.begin(); itr != m_Simulators.end(); ++itr )
|
for (cSimulators::iterator itr = m_Simulators.begin(); itr != m_Simulators.end(); ++itr)
|
||||||
{
|
{
|
||||||
if ((m_Ticks % itr->second) == 0)
|
if ((m_Ticks % itr->second) == 0)
|
||||||
{
|
{
|
||||||
@ -45,7 +45,7 @@ void cSimulatorManager::Simulate(float a_Dt)
|
|||||||
void cSimulatorManager::SimulateChunk(float a_Dt, int a_ChunkX, int a_ChunkZ, cChunk * a_Chunk)
|
void cSimulatorManager::SimulateChunk(float a_Dt, int a_ChunkX, int a_ChunkZ, cChunk * a_Chunk)
|
||||||
{
|
{
|
||||||
// m_Ticks has already been increased in Simulate()
|
// m_Ticks has already been increased in Simulate()
|
||||||
for (cSimulators::iterator itr = m_Simulators.begin(); itr != m_Simulators.end(); ++itr )
|
for (cSimulators::iterator itr = m_Simulators.begin(); itr != m_Simulators.end(); ++itr)
|
||||||
{
|
{
|
||||||
if ((m_Ticks % itr->second) == 0)
|
if ((m_Ticks % itr->second) == 0)
|
||||||
{
|
{
|
||||||
@ -60,7 +60,7 @@ void cSimulatorManager::SimulateChunk(float a_Dt, int a_ChunkX, int a_ChunkZ, cC
|
|||||||
|
|
||||||
void cSimulatorManager::WakeUp(int a_BlockX, int a_BlockY, int a_BlockZ, cChunk * a_Chunk)
|
void cSimulatorManager::WakeUp(int a_BlockX, int a_BlockY, int a_BlockZ, cChunk * a_Chunk)
|
||||||
{
|
{
|
||||||
for (cSimulators::iterator itr = m_Simulators.begin(); itr != m_Simulators.end(); ++itr )
|
for (cSimulators::iterator itr = m_Simulators.begin(); itr != m_Simulators.end(); ++itr)
|
||||||
{
|
{
|
||||||
itr->first->WakeUp(a_BlockX, a_BlockY, a_BlockZ, a_Chunk);
|
itr->first->WakeUp(a_BlockX, a_BlockY, a_BlockZ, a_Chunk);
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ cTracer::~cTracer()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
float cTracer::SigNum( float a_Num )
|
float cTracer::SigNum( float a_Num)
|
||||||
{
|
{
|
||||||
if (a_Num < 0.f) return -1.f;
|
if (a_Num < 0.f) return -1.f;
|
||||||
if (a_Num > 0.f) return 1.f;
|
if (a_Num > 0.f) return 1.f;
|
||||||
@ -59,7 +59,7 @@ void cTracer::SetValues(const Vector3f & a_Start, const Vector3f & a_Direction)
|
|||||||
step.z = (int) SigNum(dir.z);
|
step.z = (int) SigNum(dir.z);
|
||||||
|
|
||||||
// normalize the direction vector
|
// normalize the direction vector
|
||||||
if (dir.SqrLength() > 0.f ) dir.Normalize();
|
if (dir.SqrLength() > 0.f) dir.Normalize();
|
||||||
|
|
||||||
// how far we must move in the ray direction before
|
// how far we must move in the ray direction before
|
||||||
// we encounter a new voxel in x-direction
|
// we encounter a new voxel in x-direction
|
||||||
@ -229,7 +229,7 @@ bool cTracer::Trace( const Vector3f & a_Start, const Vector3f & a_Direction, int
|
|||||||
if ((!a_LineOfSight && cBlockInfo::IsSolid(BlockID)) || (a_LineOfSight && (BlockID != E_BLOCK_AIR) && !IsBlockWater(BlockID)))
|
if ((!a_LineOfSight && cBlockInfo::IsSolid(BlockID)) || (a_LineOfSight && (BlockID != E_BLOCK_AIR) && !IsBlockWater(BlockID)))
|
||||||
{
|
{
|
||||||
BlockHitPosition = pos;
|
BlockHitPosition = pos;
|
||||||
int Normal = GetHitNormal(a_Start, End, pos );
|
int Normal = GetHitNormal(a_Start, End, pos);
|
||||||
if (Normal > 0)
|
if (Normal > 0)
|
||||||
{
|
{
|
||||||
HitNormal = m_NormalTable[Normal-1];
|
HitNormal = m_NormalTable[Normal-1];
|
||||||
@ -271,13 +271,13 @@ int LinesCross(float x0, float y0, float x1, float y1, float x2, float y2, float
|
|||||||
// Return: 0 = disjoint (no intersection)
|
// Return: 0 = disjoint (no intersection)
|
||||||
// 1 = intersection in the unique point *I0
|
// 1 = intersection in the unique point *I0
|
||||||
// 2 = the segment lies in the plane
|
// 2 = the segment lies in the plane
|
||||||
int cTracer::intersect3D_SegmentPlane( const Vector3f & a_Origin, const Vector3f & a_End, const Vector3f & a_PlanePos, const Vector3f & a_PlaneNormal )
|
int cTracer::intersect3D_SegmentPlane( const Vector3f & a_Origin, const Vector3f & a_End, const Vector3f & a_PlanePos, const Vector3f & a_PlaneNormal)
|
||||||
{
|
{
|
||||||
Vector3f u = a_End - a_Origin; // a_Ray.P1 - S.P0;
|
Vector3f u = a_End - a_Origin; // a_Ray.P1 - S.P0;
|
||||||
Vector3f w = a_Origin - a_PlanePos; // S.P0 - Pn.V0;
|
Vector3f w = a_Origin - a_PlanePos; // S.P0 - Pn.V0;
|
||||||
|
|
||||||
float D = a_PlaneNormal.Dot( u ); // dot(Pn.n, u);
|
float D = a_PlaneNormal.Dot( u); // dot(Pn.n, u);
|
||||||
float N = -(a_PlaneNormal.Dot( w ) ); // -dot(a_Plane.n, w);
|
float N = -(a_PlaneNormal.Dot( w)); // -dot(a_Plane.n, w);
|
||||||
|
|
||||||
const float EPSILON = 0.0001f;
|
const float EPSILON = 0.0001f;
|
||||||
if (fabs(D) < EPSILON)
|
if (fabs(D) < EPSILON)
|
||||||
@ -299,7 +299,7 @@ int cTracer::intersect3D_SegmentPlane( const Vector3f & a_Origin, const Vector3f
|
|||||||
return 0; // no intersection
|
return 0; // no intersection
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vector3f I ( a_Ray->GetOrigin() + sI * u );// S.P0 + sI * u; // compute segment intersect point
|
// Vector3f I ( a_Ray->GetOrigin() + sI * u);// S.P0 + sI * u; // compute segment intersect point
|
||||||
RealHit = a_Origin + u * sI;
|
RealHit = a_Origin + u * sI;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -311,7 +311,7 @@ int cTracer::intersect3D_SegmentPlane( const Vector3f & a_Origin, const Vector3f
|
|||||||
int cTracer::GetHitNormal(const Vector3f & start, const Vector3f & end, const Vector3i & a_BlockPos)
|
int cTracer::GetHitNormal(const Vector3f & start, const Vector3f & end, const Vector3i & a_BlockPos)
|
||||||
{
|
{
|
||||||
Vector3i SmallBlockPos = a_BlockPos;
|
Vector3i SmallBlockPos = a_BlockPos;
|
||||||
char BlockID = m_World->GetBlock( a_BlockPos.x, a_BlockPos.y, a_BlockPos.z );
|
char BlockID = m_World->GetBlock( a_BlockPos.x, a_BlockPos.y, a_BlockPos.z);
|
||||||
|
|
||||||
if (BlockID == E_BLOCK_AIR || IsBlockWater(BlockID))
|
if (BlockID == E_BLOCK_AIR || IsBlockWater(BlockID))
|
||||||
{
|
{
|
||||||
@ -324,86 +324,86 @@ int cTracer::GetHitNormal(const Vector3f & start, const Vector3f & end, const Ve
|
|||||||
Vector3f Look = (end - start);
|
Vector3f Look = (end - start);
|
||||||
Look.Normalize();
|
Look.Normalize();
|
||||||
|
|
||||||
float dot = Look.Dot( Vector3f(-1, 0, 0) ); // first face normal is x -1
|
float dot = Look.Dot( Vector3f(-1, 0, 0)); // first face normal is x -1
|
||||||
if (dot < 0)
|
if (dot < 0)
|
||||||
{
|
{
|
||||||
int Lines = LinesCross( start.x, start.y, end.x, end.y, BlockPos.x, BlockPos.y, BlockPos.x, BlockPos.y + 1 );
|
int Lines = LinesCross( start.x, start.y, end.x, end.y, BlockPos.x, BlockPos.y, BlockPos.x, BlockPos.y + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
Lines = LinesCross( start.x, start.z, end.x, end.z, BlockPos.x, BlockPos.z, BlockPos.x, BlockPos.z + 1 );
|
Lines = LinesCross( start.x, start.z, end.x, end.z, BlockPos.x, BlockPos.z, BlockPos.x, BlockPos.z + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
intersect3D_SegmentPlane( start, end, BlockPos, Vector3f(-1, 0, 0) );
|
intersect3D_SegmentPlane( start, end, BlockPos, Vector3f(-1, 0, 0));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dot = Look.Dot( Vector3f(0, 0, -1) ); // second face normal is z -1
|
dot = Look.Dot( Vector3f(0, 0, -1)); // second face normal is z -1
|
||||||
if (dot < 0)
|
if (dot < 0)
|
||||||
{
|
{
|
||||||
int Lines = LinesCross( start.z, start.y, end.z, end.y, BlockPos.z, BlockPos.y, BlockPos.z, BlockPos.y + 1 );
|
int Lines = LinesCross( start.z, start.y, end.z, end.y, BlockPos.z, BlockPos.y, BlockPos.z, BlockPos.y + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
Lines = LinesCross( start.z, start.x, end.z, end.x, BlockPos.z, BlockPos.x, BlockPos.z, BlockPos.x + 1 );
|
Lines = LinesCross( start.z, start.x, end.z, end.x, BlockPos.z, BlockPos.x, BlockPos.z, BlockPos.x + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
intersect3D_SegmentPlane( start, end, BlockPos, Vector3f(0, 0, -1) );
|
intersect3D_SegmentPlane( start, end, BlockPos, Vector3f(0, 0, -1));
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dot = Look.Dot( Vector3f(1, 0, 0) ); // third face normal is x 1
|
dot = Look.Dot( Vector3f(1, 0, 0)); // third face normal is x 1
|
||||||
if (dot < 0)
|
if (dot < 0)
|
||||||
{
|
{
|
||||||
int Lines = LinesCross( start.x, start.y, end.x, end.y, BlockPos.x + 1, BlockPos.y, BlockPos.x + 1, BlockPos.y + 1 );
|
int Lines = LinesCross( start.x, start.y, end.x, end.y, BlockPos.x + 1, BlockPos.y, BlockPos.x + 1, BlockPos.y + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
Lines = LinesCross( start.x, start.z, end.x, end.z, BlockPos.x + 1, BlockPos.z, BlockPos.x + 1, BlockPos.z + 1 );
|
Lines = LinesCross( start.x, start.z, end.x, end.z, BlockPos.x + 1, BlockPos.z, BlockPos.x + 1, BlockPos.z + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
intersect3D_SegmentPlane( start, end, BlockPos + Vector3f(1, 0, 0), Vector3f(1, 0, 0) );
|
intersect3D_SegmentPlane( start, end, BlockPos + Vector3f(1, 0, 0), Vector3f(1, 0, 0));
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dot = Look.Dot( Vector3f(0, 0, 1) ); // fourth face normal is z 1
|
dot = Look.Dot( Vector3f(0, 0, 1)); // fourth face normal is z 1
|
||||||
if (dot < 0)
|
if (dot < 0)
|
||||||
{
|
{
|
||||||
int Lines = LinesCross( start.z, start.y, end.z, end.y, BlockPos.z + 1, BlockPos.y, BlockPos.z + 1, BlockPos.y + 1 );
|
int Lines = LinesCross( start.z, start.y, end.z, end.y, BlockPos.z + 1, BlockPos.y, BlockPos.z + 1, BlockPos.y + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
Lines = LinesCross( start.z, start.x, end.z, end.x, BlockPos.z + 1, BlockPos.x, BlockPos.z + 1, BlockPos.x + 1 );
|
Lines = LinesCross( start.z, start.x, end.z, end.x, BlockPos.z + 1, BlockPos.x, BlockPos.z + 1, BlockPos.x + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
intersect3D_SegmentPlane( start, end, BlockPos + Vector3f(0, 0, 1), Vector3f(0, 0, 1) );
|
intersect3D_SegmentPlane( start, end, BlockPos + Vector3f(0, 0, 1), Vector3f(0, 0, 1));
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dot = Look.Dot( Vector3f(0, 1, 0) ); // fifth face normal is y 1
|
dot = Look.Dot( Vector3f(0, 1, 0)); // fifth face normal is y 1
|
||||||
if (dot < 0)
|
if (dot < 0)
|
||||||
{
|
{
|
||||||
int Lines = LinesCross( start.y, start.x, end.y, end.x, BlockPos.y + 1, BlockPos.x, BlockPos.y + 1, BlockPos.x + 1 );
|
int Lines = LinesCross( start.y, start.x, end.y, end.x, BlockPos.y + 1, BlockPos.x, BlockPos.y + 1, BlockPos.x + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
Lines = LinesCross( start.y, start.z, end.y, end.z, BlockPos.y + 1, BlockPos.z, BlockPos.y + 1, BlockPos.z + 1 );
|
Lines = LinesCross( start.y, start.z, end.y, end.z, BlockPos.y + 1, BlockPos.z, BlockPos.y + 1, BlockPos.z + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
intersect3D_SegmentPlane( start, end, BlockPos + Vector3f(0, 1, 0), Vector3f(0, 1, 0) );
|
intersect3D_SegmentPlane( start, end, BlockPos + Vector3f(0, 1, 0), Vector3f(0, 1, 0));
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dot = Look.Dot( Vector3f(0, -1, 0) ); // sixth face normal is y -1
|
dot = Look.Dot( Vector3f(0, -1, 0)); // sixth face normal is y -1
|
||||||
if (dot < 0)
|
if (dot < 0)
|
||||||
{
|
{
|
||||||
int Lines = LinesCross( start.y, start.x, end.y, end.x, BlockPos.y, BlockPos.x, BlockPos.y, BlockPos.x + 1 );
|
int Lines = LinesCross( start.y, start.x, end.y, end.x, BlockPos.y, BlockPos.x, BlockPos.y, BlockPos.x + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
Lines = LinesCross( start.y, start.z, end.y, end.z, BlockPos.y, BlockPos.z, BlockPos.y, BlockPos.z + 1 );
|
Lines = LinesCross( start.y, start.z, end.y, end.z, BlockPos.y, BlockPos.z, BlockPos.y, BlockPos.z + 1);
|
||||||
if (Lines == 1)
|
if (Lines == 1)
|
||||||
{
|
{
|
||||||
intersect3D_SegmentPlane( start, end, BlockPos, Vector3f(0, -1, 0) );
|
intersect3D_SegmentPlane( start, end, BlockPos, Vector3f(0, -1, 0));
|
||||||
return 6;
|
return 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,20 +48,20 @@ public:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
/// Preps Tracer object for call of Trace function. Only used internally.
|
/// Preps Tracer object for call of Trace function. Only used internally.
|
||||||
void SetValues( const Vector3f & a_Start, const Vector3f & a_Direction );
|
void SetValues( const Vector3f & a_Start, const Vector3f & a_Direction);
|
||||||
|
|
||||||
/// Calculates where on the block a collision occured, if it does occur
|
/// Calculates where on the block a collision occured, if it does occur
|
||||||
/// Returns 0 if no intersection occured
|
/// Returns 0 if no intersection occured
|
||||||
/// Returns 1 if an intersection occured at a single point
|
/// Returns 1 if an intersection occured at a single point
|
||||||
/// Returns 2 if the line segment lies in the plane being checked
|
/// Returns 2 if the line segment lies in the plane being checked
|
||||||
int intersect3D_SegmentPlane( const Vector3f & a_Origin, const Vector3f & a_End, const Vector3f & a_PlanePos, const Vector3f & a_PlaneNormal );
|
int intersect3D_SegmentPlane( const Vector3f & a_Origin, const Vector3f & a_End, const Vector3f & a_PlanePos, const Vector3f & a_PlaneNormal);
|
||||||
|
|
||||||
/// Determines which face on the block a collision occured, if it does occur
|
/// Determines which face on the block a collision occured, if it does occur
|
||||||
/// Returns 0 if the block is air, water or no collision occured
|
/// Returns 0 if the block is air, water or no collision occured
|
||||||
/// Return 1 through 6 for the following block faces, repectively: -x, -z, x, z, y, -y
|
/// Return 1 through 6 for the following block faces, repectively: -x, -z, x, z, y, -y
|
||||||
int GetHitNormal( const Vector3f & start, const Vector3f & end, const Vector3i & a_BlockPos);
|
int GetHitNormal( const Vector3f & start, const Vector3f & end, const Vector3i & a_BlockPos);
|
||||||
|
|
||||||
float SigNum( float a_Num );
|
float SigNum( float a_Num);
|
||||||
cWorld* m_World;
|
cWorld* m_World;
|
||||||
|
|
||||||
Vector3f m_NormalTable[6];
|
Vector3f m_NormalTable[6];
|
||||||
|
@ -319,9 +319,9 @@ void cWindow::OwnerDestroyed()
|
|||||||
// Close window for each player. Note that the last one needs special handling
|
// Close window for each player. Note that the last one needs special handling
|
||||||
while (m_OpenedBy.size() > 1)
|
while (m_OpenedBy.size() > 1)
|
||||||
{
|
{
|
||||||
(*m_OpenedBy.begin() )->CloseWindow();
|
(*m_OpenedBy.begin())->CloseWindow();
|
||||||
}
|
}
|
||||||
(*m_OpenedBy.begin() )->CloseWindow();
|
(*m_OpenedBy.begin())->CloseWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ public:
|
|||||||
int GetWindowType(void) const { return m_WindowType; } // tolua_export
|
int GetWindowType(void) const { return m_WindowType; } // tolua_export
|
||||||
|
|
||||||
cWindowOwner * GetOwner(void) { return m_Owner; }
|
cWindowOwner * GetOwner(void) { return m_Owner; }
|
||||||
void SetOwner( cWindowOwner * a_Owner ) { m_Owner = a_Owner; }
|
void SetOwner( cWindowOwner * a_Owner) { m_Owner = a_Owner; }
|
||||||
|
|
||||||
/// Returns the total number of slots
|
/// Returns the total number of slots
|
||||||
int GetNumSlots(void) const;
|
int GetNumSlots(void) const;
|
||||||
@ -134,7 +134,7 @@ public:
|
|||||||
// tolua_begin
|
// tolua_begin
|
||||||
|
|
||||||
const AString & GetWindowTitle() const { return m_WindowTitle; }
|
const AString & GetWindowTitle() const { return m_WindowTitle; }
|
||||||
void SetWindowTitle(const AString & a_WindowTitle ) { m_WindowTitle = a_WindowTitle; }
|
void SetWindowTitle(const AString & a_WindowTitle) { m_WindowTitle = a_WindowTitle; }
|
||||||
|
|
||||||
/// Sends the UpdateWindowProperty (0x69) packet to all clients of the window
|
/// Sends the UpdateWindowProperty (0x69) packet to all clients of the window
|
||||||
virtual void SetProperty(int a_Property, int a_Value);
|
virtual void SetProperty(int a_Property, int a_Value);
|
||||||
|
@ -374,7 +374,7 @@ AString cWebAdmin::GetDefaultPage(void)
|
|||||||
{
|
{
|
||||||
AString Content;
|
AString Content;
|
||||||
Content += "<h4>Server Name:</h4>";
|
Content += "<h4>Server Name:</h4>";
|
||||||
Content += "<p>" + AString( cRoot::Get()->GetServer()->GetServerID() ) + "</p>";
|
Content += "<p>" + AString( cRoot::Get()->GetServer()->GetServerID()) + "</p>";
|
||||||
|
|
||||||
Content += "<h4>Plugins:</h4><ul>";
|
Content += "<h4>Plugins:</h4><ul>";
|
||||||
cPluginManager * PM = cPluginManager::Get();
|
cPluginManager * PM = cPluginManager::Get();
|
||||||
@ -392,7 +392,7 @@ AString cWebAdmin::GetDefaultPage(void)
|
|||||||
|
|
||||||
cPlayerAccum PlayerAccum;
|
cPlayerAccum PlayerAccum;
|
||||||
cWorld * World = cRoot::Get()->GetDefaultWorld(); // TODO - Create a list of worlds and players
|
cWorld * World = cRoot::Get()->GetDefaultWorld(); // TODO - Create a list of worlds and players
|
||||||
if (World != NULL )
|
if (World != NULL)
|
||||||
{
|
{
|
||||||
World->ForEachPlayer(PlayerAccum);
|
World->ForEachPlayer(PlayerAccum);
|
||||||
Content.append(PlayerAccum.m_Contents);
|
Content.append(PlayerAccum.m_Contents);
|
||||||
@ -404,7 +404,7 @@ AString cWebAdmin::GetDefaultPage(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
AString cWebAdmin::GetBaseURL( const AString& a_URL )
|
AString cWebAdmin::GetBaseURL( const AString& a_URL)
|
||||||
{
|
{
|
||||||
return GetBaseURL(StringSplit(a_URL, "/"));
|
return GetBaseURL(StringSplit(a_URL, "/"));
|
||||||
}
|
}
|
||||||
|
@ -617,7 +617,7 @@ void cWorld::Start(void)
|
|||||||
m_SimulatorManager->RegisterSimulator(m_FireSimulator, 1);
|
m_SimulatorManager->RegisterSimulator(m_FireSimulator, 1);
|
||||||
|
|
||||||
m_Lighting.Start(this);
|
m_Lighting.Start(this);
|
||||||
m_Storage.Start(this, m_StorageSchema, m_StorageCompressionFactor );
|
m_Storage.Start(this, m_StorageSchema, m_StorageCompressionFactor);
|
||||||
m_Generator.Start(m_GeneratorCallbacks, m_GeneratorCallbacks, IniFile);
|
m_Generator.Start(m_GeneratorCallbacks, m_GeneratorCallbacks, IniFile);
|
||||||
m_ChunkSender.Start(this);
|
m_ChunkSender.Start(this);
|
||||||
m_TickThread.Start();
|
m_TickThread.Start();
|
||||||
|
@ -436,10 +436,10 @@ public:
|
|||||||
// tolua_begin
|
// tolua_begin
|
||||||
|
|
||||||
// Vector3i variants:
|
// Vector3i variants:
|
||||||
void FastSetBlock(const Vector3i & a_Pos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta ) { FastSetBlock( a_Pos.x, a_Pos.y, a_Pos.z, a_BlockType, a_BlockMeta ); }
|
void FastSetBlock(const Vector3i & a_Pos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) { FastSetBlock( a_Pos.x, a_Pos.y, a_Pos.z, a_BlockType, a_BlockMeta); }
|
||||||
BLOCKTYPE GetBlock (const Vector3i & a_Pos ) { return GetBlock( a_Pos.x, a_Pos.y, a_Pos.z ); }
|
BLOCKTYPE GetBlock (const Vector3i & a_Pos) { return GetBlock( a_Pos.x, a_Pos.y, a_Pos.z); }
|
||||||
NIBBLETYPE GetBlockMeta(const Vector3i & a_Pos ) { return GetBlockMeta( a_Pos.x, a_Pos.y, a_Pos.z ); }
|
NIBBLETYPE GetBlockMeta(const Vector3i & a_Pos) { return GetBlockMeta( a_Pos.x, a_Pos.y, a_Pos.z); }
|
||||||
void SetBlockMeta(const Vector3i & a_Pos, NIBBLETYPE a_MetaData ) { SetBlockMeta( a_Pos.x, a_Pos.y, a_Pos.z, a_MetaData ); }
|
void SetBlockMeta(const Vector3i & a_Pos, NIBBLETYPE a_MetaData) { SetBlockMeta( a_Pos.x, a_Pos.y, a_Pos.z, a_MetaData); }
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
/** Writes the block area into the specified coords.
|
/** Writes the block area into the specified coords.
|
||||||
|
@ -196,7 +196,7 @@ cWSSCompact::cPAKFile * cWSSCompact::LoadPAKFile(const cChunkCoords & a_Chunk)
|
|||||||
|
|
||||||
// Load it anew:
|
// Load it anew:
|
||||||
AString FileName;
|
AString FileName;
|
||||||
Printf(FileName, "%s/X%i_Z%i.pak", m_World->GetName().c_str(), LayerX, LayerZ );
|
Printf(FileName, "%s/X%i_Z%i.pak", m_World->GetName().c_str(), LayerX, LayerZ);
|
||||||
cPAKFile * f = new cPAKFile(FileName, LayerX, LayerZ, m_CompressionFactor);
|
cPAKFile * f = new cPAKFile(FileName, LayerX, LayerZ, m_CompressionFactor);
|
||||||
if (f == NULL)
|
if (f == NULL)
|
||||||
{
|
{
|
||||||
@ -271,12 +271,12 @@ void cWSSCompact::LoadEntitiesFromJson(Json::Value & a_Value, cEntityList & a_En
|
|||||||
Json::Value AllChests = a_Value.get("Chests", Json::nullValue);
|
Json::Value AllChests = a_Value.get("Chests", Json::nullValue);
|
||||||
if (!AllChests.empty())
|
if (!AllChests.empty())
|
||||||
{
|
{
|
||||||
for (Json::Value::iterator itr = AllChests.begin(); itr != AllChests.end(); ++itr )
|
for (Json::Value::iterator itr = AllChests.begin(); itr != AllChests.end(); ++itr)
|
||||||
{
|
{
|
||||||
std::auto_ptr<cChestEntity> ChestEntity(new cChestEntity(0, 0, 0, a_World, E_BLOCK_CHEST));
|
std::auto_ptr<cChestEntity> ChestEntity(new cChestEntity(0, 0, 0, a_World, E_BLOCK_CHEST));
|
||||||
if (!ChestEntity->LoadFromJson(*itr))
|
if (!ChestEntity->LoadFromJson(*itr))
|
||||||
{
|
{
|
||||||
LOGWARNING("ERROR READING CHEST FROM JSON!" );
|
LOGWARNING("ERROR READING CHEST FROM JSON!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -292,7 +292,7 @@ void cWSSCompact::LoadEntitiesFromJson(Json::Value & a_Value, cEntityList & a_En
|
|||||||
std::auto_ptr<cDispenserEntity> DispenserEntity(new cDispenserEntity(0, 0, 0, a_World));
|
std::auto_ptr<cDispenserEntity> DispenserEntity(new cDispenserEntity(0, 0, 0, a_World));
|
||||||
if (!DispenserEntity->LoadFromJson(*itr))
|
if (!DispenserEntity->LoadFromJson(*itr))
|
||||||
{
|
{
|
||||||
LOGWARNING("ERROR READING DISPENSER FROM JSON!" );
|
LOGWARNING("ERROR READING DISPENSER FROM JSON!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -307,7 +307,7 @@ void cWSSCompact::LoadEntitiesFromJson(Json::Value & a_Value, cEntityList & a_En
|
|||||||
std::auto_ptr<cFlowerPotEntity> FlowerPotEntity(new cFlowerPotEntity(0, 0, 0, a_World));
|
std::auto_ptr<cFlowerPotEntity> FlowerPotEntity(new cFlowerPotEntity(0, 0, 0, a_World));
|
||||||
if (!FlowerPotEntity->LoadFromJson(*itr))
|
if (!FlowerPotEntity->LoadFromJson(*itr))
|
||||||
{
|
{
|
||||||
LOGWARNING("ERROR READING FLOWERPOT FROM JSON!" );
|
LOGWARNING("ERROR READING FLOWERPOT FROM JSON!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -323,7 +323,7 @@ void cWSSCompact::LoadEntitiesFromJson(Json::Value & a_Value, cEntityList & a_En
|
|||||||
std::auto_ptr<cFurnaceEntity> FurnaceEntity(new cFurnaceEntity(0, 0, 0, E_BLOCK_FURNACE, 0, a_World));
|
std::auto_ptr<cFurnaceEntity> FurnaceEntity(new cFurnaceEntity(0, 0, 0, E_BLOCK_FURNACE, 0, a_World));
|
||||||
if (!FurnaceEntity->LoadFromJson(*itr))
|
if (!FurnaceEntity->LoadFromJson(*itr))
|
||||||
{
|
{
|
||||||
LOGWARNING("ERROR READING FURNACE FROM JSON!" );
|
LOGWARNING("ERROR READING FURNACE FROM JSON!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -353,7 +353,7 @@ void cWSSCompact::LoadEntitiesFromJson(Json::Value & a_Value, cEntityList & a_En
|
|||||||
std::auto_ptr<cNoteEntity> NoteEntity(new cNoteEntity(0, 0, 0, a_World));
|
std::auto_ptr<cNoteEntity> NoteEntity(new cNoteEntity(0, 0, 0, a_World));
|
||||||
if (!NoteEntity->LoadFromJson(*itr))
|
if (!NoteEntity->LoadFromJson(*itr))
|
||||||
{
|
{
|
||||||
LOGWARNING("ERROR READING NOTE BLOCK FROM JSON!" );
|
LOGWARNING("ERROR READING NOTE BLOCK FROM JSON!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -368,7 +368,7 @@ void cWSSCompact::LoadEntitiesFromJson(Json::Value & a_Value, cEntityList & a_En
|
|||||||
std::auto_ptr<cJukeboxEntity> JukeboxEntity(new cJukeboxEntity(0, 0, 0, a_World));
|
std::auto_ptr<cJukeboxEntity> JukeboxEntity(new cJukeboxEntity(0, 0, 0, a_World));
|
||||||
if (!JukeboxEntity->LoadFromJson(*itr))
|
if (!JukeboxEntity->LoadFromJson(*itr))
|
||||||
{
|
{
|
||||||
LOGWARNING("ERROR READING JUKEBOX FROM JSON!" );
|
LOGWARNING("ERROR READING JUKEBOX FROM JSON!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -383,7 +383,7 @@ void cWSSCompact::LoadEntitiesFromJson(Json::Value & a_Value, cEntityList & a_En
|
|||||||
std::auto_ptr<cCommandBlockEntity> CommandBlockEntity(new cCommandBlockEntity(0, 0, 0, a_World));
|
std::auto_ptr<cCommandBlockEntity> CommandBlockEntity(new cCommandBlockEntity(0, 0, 0, a_World));
|
||||||
if (!CommandBlockEntity->LoadFromJson(*itr))
|
if (!CommandBlockEntity->LoadFromJson(*itr))
|
||||||
{
|
{
|
||||||
LOGWARNING("ERROR READING COMMAND BLOCK FROM JSON!" );
|
LOGWARNING("ERROR READING COMMAND BLOCK FROM JSON!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -398,7 +398,7 @@ void cWSSCompact::LoadEntitiesFromJson(Json::Value & a_Value, cEntityList & a_En
|
|||||||
std::auto_ptr<cMobHeadEntity> MobHeadEntity(new cMobHeadEntity(0, 0, 0, a_World));
|
std::auto_ptr<cMobHeadEntity> MobHeadEntity(new cMobHeadEntity(0, 0, 0, a_World));
|
||||||
if (!MobHeadEntity->LoadFromJson(*itr))
|
if (!MobHeadEntity->LoadFromJson(*itr))
|
||||||
{
|
{
|
||||||
LOGWARNING("ERROR READING MOB HEAD FROM JSON!" );
|
LOGWARNING("ERROR READING MOB HEAD FROM JSON!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -427,8 +427,8 @@ cWSSCompact::cPAKFile::cPAKFile(const AString & a_FileName, int a_LayerX, int a_
|
|||||||
m_LayerX(a_LayerX),
|
m_LayerX(a_LayerX),
|
||||||
m_LayerZ(a_LayerZ),
|
m_LayerZ(a_LayerZ),
|
||||||
m_NumDirty(0),
|
m_NumDirty(0),
|
||||||
m_ChunkVersion( CHUNK_VERSION ), // Init with latest version
|
m_ChunkVersion( CHUNK_VERSION), // Init with latest version
|
||||||
m_PakVersion( PAK_VERSION )
|
m_PakVersion( PAK_VERSION)
|
||||||
{
|
{
|
||||||
cFile f;
|
cFile f;
|
||||||
if (!f.Open(m_FileName, cFile::fmRead))
|
if (!f.Open(m_FileName, cFile::fmRead))
|
||||||
@ -445,18 +445,24 @@ cWSSCompact::cPAKFile::cPAKFile(const AString & a_FileName, int a_LayerX, int a_
|
|||||||
}
|
}
|
||||||
|
|
||||||
READ(m_ChunkVersion);
|
READ(m_ChunkVersion);
|
||||||
switch( m_ChunkVersion )
|
switch (m_ChunkVersion)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
m_ChunkSize.Set(16, 128, 16);
|
{
|
||||||
break;
|
m_ChunkSize.Set(16, 128, 16);
|
||||||
case 2:
|
break;
|
||||||
case 3:
|
}
|
||||||
m_ChunkSize.Set(16, 256, 16);
|
case 2:
|
||||||
break;
|
case 3:
|
||||||
default:
|
{
|
||||||
LOGERROR("File \"%s\" is in an unknown chunk format (%d)", m_FileName.c_str(), m_ChunkVersion);
|
m_ChunkSize.Set(16, 256, 16);
|
||||||
return;
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
LOGERROR("File \"%s\" is in an unknown chunk format (%d)", m_FileName.c_str(), m_ChunkVersion);
|
||||||
|
return;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
short NumChunks = 0;
|
short NumChunks = 0;
|
||||||
@ -486,12 +492,12 @@ cWSSCompact::cPAKFile::cPAKFile(const AString & a_FileName, int a_LayerX, int a_
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_ChunkVersion == 1 ) // Convert chunks to version 2
|
if (m_ChunkVersion == 1) // Convert chunks to version 2
|
||||||
{
|
{
|
||||||
UpdateChunk1To2();
|
UpdateChunk1To2();
|
||||||
}
|
}
|
||||||
#if AXIS_ORDER == AXIS_ORDER_XZY
|
#if AXIS_ORDER == AXIS_ORDER_XZY
|
||||||
if (m_ChunkVersion == 2 ) // Convert chunks to version 3
|
if (m_ChunkVersion == 2) // Convert chunks to version 3
|
||||||
{
|
{
|
||||||
UpdateChunk2To3();
|
UpdateChunk2To3();
|
||||||
}
|
}
|
||||||
@ -574,9 +580,9 @@ void cWSSCompact::cPAKFile::UpdateChunk1To2()
|
|||||||
{
|
{
|
||||||
sChunkHeader * Header = *itr;
|
sChunkHeader * Header = *itr;
|
||||||
|
|
||||||
if (ChunksConverted % 32 == 0 )
|
if (ChunksConverted % 32 == 0)
|
||||||
{
|
{
|
||||||
LOGINFO("Updating \"%s\" version 1 to version 2: " SIZE_T_FMT " %%", m_FileName.c_str(), (ChunksConverted * 100) / m_ChunkHeaders.size() );
|
LOGINFO("Updating \"%s\" version 1 to version 2: " SIZE_T_FMT " %%", m_FileName.c_str(), (ChunksConverted * 100) / m_ChunkHeaders.size());
|
||||||
}
|
}
|
||||||
ChunksConverted++;
|
ChunksConverted++;
|
||||||
|
|
||||||
@ -627,9 +633,9 @@ void cWSSCompact::cPAKFile::UpdateChunk1To2()
|
|||||||
char ConvertedData[cChunkDef::BlockDataSize];
|
char ConvertedData[cChunkDef::BlockDataSize];
|
||||||
int Index = 0;
|
int Index = 0;
|
||||||
unsigned int InChunkOffset = 0;
|
unsigned int InChunkOffset = 0;
|
||||||
for (int x = 0; x < 16; ++x ) for (int z = 0; z < 16; ++z )
|
for (int x = 0; x < 16; ++x) for (int z = 0; z < 16; ++z)
|
||||||
{
|
{
|
||||||
for (int y = 0; y < 128; ++y )
|
for (int y = 0; y < 128; ++y)
|
||||||
{
|
{
|
||||||
ConvertedData[Index++] = UncompressedData[y + z * 128 + x * 128 * 16 + InChunkOffset];
|
ConvertedData[Index++] = UncompressedData[y + z * 128 + x * 128 * 16 + InChunkOffset];
|
||||||
}
|
}
|
||||||
@ -638,9 +644,9 @@ void cWSSCompact::cPAKFile::UpdateChunk1To2()
|
|||||||
Index += 128;
|
Index += 128;
|
||||||
}
|
}
|
||||||
InChunkOffset += (16 * 128 * 16);
|
InChunkOffset += (16 * 128 * 16);
|
||||||
for (int x = 0; x < 16; ++x ) for (int z = 0; z < 16; ++z ) // Metadata
|
for (int x = 0; x < 16; ++x) for (int z = 0; z < 16; ++z) // Metadata
|
||||||
{
|
{
|
||||||
for (int y = 0; y < 64; ++y )
|
for (int y = 0; y < 64; ++y)
|
||||||
{
|
{
|
||||||
ConvertedData[Index++] = UncompressedData[y + z * 64 + x * 64 * 16 + InChunkOffset];
|
ConvertedData[Index++] = UncompressedData[y + z * 64 + x * 64 * 16 + InChunkOffset];
|
||||||
}
|
}
|
||||||
@ -648,9 +654,9 @@ void cWSSCompact::cPAKFile::UpdateChunk1To2()
|
|||||||
Index += 64;
|
Index += 64;
|
||||||
}
|
}
|
||||||
InChunkOffset += (16 * 128 * 16) / 2;
|
InChunkOffset += (16 * 128 * 16) / 2;
|
||||||
for (int x = 0; x < 16; ++x ) for (int z = 0; z < 16; ++z ) // Block light
|
for (int x = 0; x < 16; ++x) for (int z = 0; z < 16; ++z) // Block light
|
||||||
{
|
{
|
||||||
for (int y = 0; y < 64; ++y )
|
for (int y = 0; y < 64; ++y)
|
||||||
{
|
{
|
||||||
ConvertedData[Index++] = UncompressedData[y + z * 64 + x * 64 * 16 + InChunkOffset];
|
ConvertedData[Index++] = UncompressedData[y + z * 64 + x * 64 * 16 + InChunkOffset];
|
||||||
}
|
}
|
||||||
@ -658,9 +664,9 @@ void cWSSCompact::cPAKFile::UpdateChunk1To2()
|
|||||||
Index += 64;
|
Index += 64;
|
||||||
}
|
}
|
||||||
InChunkOffset += (16*128*16)/2;
|
InChunkOffset += (16*128*16)/2;
|
||||||
for (int x = 0; x < 16; ++x ) for (int z = 0; z < 16; ++z ) // Sky light
|
for (int x = 0; x < 16; ++x) for (int z = 0; z < 16; ++z) // Sky light
|
||||||
{
|
{
|
||||||
for (int y = 0; y < 64; ++y )
|
for (int y = 0; y < 64; ++y)
|
||||||
{
|
{
|
||||||
ConvertedData[Index++] = UncompressedData[y + z * 64 + x * 64 * 16 + InChunkOffset];
|
ConvertedData[Index++] = UncompressedData[y + z * 64 + x * 64 * 16 + InChunkOffset];
|
||||||
}
|
}
|
||||||
@ -674,7 +680,7 @@ void cWSSCompact::cPAKFile::UpdateChunk1To2()
|
|||||||
// Add JSON data afterwards
|
// Add JSON data afterwards
|
||||||
if (UncompressedData.size() > InChunkOffset)
|
if (UncompressedData.size() > InChunkOffset)
|
||||||
{
|
{
|
||||||
Converted.append( UncompressedData.begin() + InChunkOffset, UncompressedData.end() );
|
Converted.append( UncompressedData.begin() + InChunkOffset, UncompressedData.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Re-compress data
|
// Re-compress data
|
||||||
@ -702,7 +708,7 @@ void cWSSCompact::cPAKFile::UpdateChunk1To2()
|
|||||||
m_ChunkVersion = 2;
|
m_ChunkVersion = 2;
|
||||||
SynchronizeFile();
|
SynchronizeFile();
|
||||||
|
|
||||||
LOGINFO("Updated \"%s\" version 1 to version 2", m_FileName.c_str() );
|
LOGINFO("Updated \"%s\" version 1 to version 2", m_FileName.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -718,9 +724,9 @@ void cWSSCompact::cPAKFile::UpdateChunk2To3()
|
|||||||
{
|
{
|
||||||
sChunkHeader * Header = *itr;
|
sChunkHeader * Header = *itr;
|
||||||
|
|
||||||
if (ChunksConverted % 32 == 0 )
|
if (ChunksConverted % 32 == 0)
|
||||||
{
|
{
|
||||||
LOGINFO("Updating \"%s\" version 2 to version 3: " SIZE_T_FMT " %%", m_FileName.c_str(), (ChunksConverted * 100) / m_ChunkHeaders.size() );
|
LOGINFO("Updating \"%s\" version 2 to version 3: " SIZE_T_FMT " %%", m_FileName.c_str(), (ChunksConverted * 100) / m_ChunkHeaders.size());
|
||||||
}
|
}
|
||||||
ChunksConverted++;
|
ChunksConverted++;
|
||||||
|
|
||||||
@ -771,10 +777,10 @@ void cWSSCompact::cPAKFile::UpdateChunk2To3()
|
|||||||
|
|
||||||
// Cannot use cChunk::MakeIndex because it might change again?????????
|
// Cannot use cChunk::MakeIndex because it might change again?????????
|
||||||
// For compatibility, use what we know is current
|
// For compatibility, use what we know is current
|
||||||
#define MAKE_3_INDEX( x, y, z ) ( x + (z * 16) + (y * 16 * 16) )
|
#define MAKE_3_INDEX( x, y, z) ( x + (z * 16) + (y * 16 * 16))
|
||||||
|
|
||||||
unsigned int InChunkOffset = 0;
|
unsigned int InChunkOffset = 0;
|
||||||
for (int x = 0; x < 16; ++x ) for (int z = 0; z < 16; ++z ) for (int y = 0; y < 256; ++y ) // YZX Loop order is important, in 1.1 Y was first then Z then X
|
for (int x = 0; x < 16; ++x) for (int z = 0; z < 16; ++z) for (int y = 0; y < 256; ++y) // YZX Loop order is important, in 1.1 Y was first then Z then X
|
||||||
{
|
{
|
||||||
ConvertedData[ MAKE_3_INDEX(x, y, z) ] = UncompressedData[InChunkOffset];
|
ConvertedData[ MAKE_3_INDEX(x, y, z) ] = UncompressedData[InChunkOffset];
|
||||||
++InChunkOffset;
|
++InChunkOffset;
|
||||||
@ -782,25 +788,25 @@ void cWSSCompact::cPAKFile::UpdateChunk2To3()
|
|||||||
|
|
||||||
|
|
||||||
unsigned int index2 = 0;
|
unsigned int index2 = 0;
|
||||||
for (int x = 0; x < 16; ++x ) for (int z = 0; z < 16; ++z ) for (int y = 0; y < 256; ++y )
|
for (int x = 0; x < 16; ++x) for (int z = 0; z < 16; ++z) for (int y = 0; y < 256; ++y)
|
||||||
{
|
{
|
||||||
ConvertedData[ InChunkOffset + MAKE_3_INDEX(x, y, z)/2 ] |= ( (UncompressedData[ InChunkOffset + index2/2 ] >> ((index2&1)*4) ) & 0x0f ) << ((x&1)*4);
|
ConvertedData[ InChunkOffset + MAKE_3_INDEX(x, y, z)/2 ] |= ( (UncompressedData[ InChunkOffset + index2/2 ] >> ((index2&1)*4)) & 0x0f) << ((x&1)*4);
|
||||||
++index2;
|
++index2;
|
||||||
}
|
}
|
||||||
InChunkOffset += index2 / 2;
|
InChunkOffset += index2 / 2;
|
||||||
index2 = 0;
|
index2 = 0;
|
||||||
|
|
||||||
for (int x = 0; x < 16; ++x ) for (int z = 0; z < 16; ++z ) for (int y = 0; y < 256; ++y )
|
for (int x = 0; x < 16; ++x) for (int z = 0; z < 16; ++z) for (int y = 0; y < 256; ++y)
|
||||||
{
|
{
|
||||||
ConvertedData[ InChunkOffset + MAKE_3_INDEX(x, y, z)/2 ] |= ( (UncompressedData[ InChunkOffset + index2/2 ] >> ((index2&1)*4) ) & 0x0f ) << ((x&1)*4);
|
ConvertedData[ InChunkOffset + MAKE_3_INDEX(x, y, z)/2 ] |= ( (UncompressedData[ InChunkOffset + index2/2 ] >> ((index2&1)*4)) & 0x0f) << ((x&1)*4);
|
||||||
++index2;
|
++index2;
|
||||||
}
|
}
|
||||||
InChunkOffset += index2 / 2;
|
InChunkOffset += index2 / 2;
|
||||||
index2 = 0;
|
index2 = 0;
|
||||||
|
|
||||||
for (int x = 0; x < 16; ++x ) for (int z = 0; z < 16; ++z ) for (int y = 0; y < 256; ++y )
|
for (int x = 0; x < 16; ++x) for (int z = 0; z < 16; ++z) for (int y = 0; y < 256; ++y)
|
||||||
{
|
{
|
||||||
ConvertedData[ InChunkOffset + MAKE_3_INDEX(x, y, z)/2 ] |= ( (UncompressedData[ InChunkOffset + index2/2 ] >> ((index2&1)*4) ) & 0x0f ) << ((x&1)*4);
|
ConvertedData[ InChunkOffset + MAKE_3_INDEX(x, y, z)/2 ] |= ( (UncompressedData[ InChunkOffset + index2/2 ] >> ((index2&1)*4)) & 0x0f) << ((x&1)*4);
|
||||||
++index2;
|
++index2;
|
||||||
}
|
}
|
||||||
InChunkOffset += index2 / 2;
|
InChunkOffset += index2 / 2;
|
||||||
@ -810,7 +816,7 @@ void cWSSCompact::cPAKFile::UpdateChunk2To3()
|
|||||||
// Add JSON data afterwards
|
// Add JSON data afterwards
|
||||||
if (UncompressedData.size() > InChunkOffset)
|
if (UncompressedData.size() > InChunkOffset)
|
||||||
{
|
{
|
||||||
Converted.append( UncompressedData.begin() + InChunkOffset, UncompressedData.end() );
|
Converted.append( UncompressedData.begin() + InChunkOffset, UncompressedData.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Re-compress data
|
// Re-compress data
|
||||||
@ -838,7 +844,7 @@ void cWSSCompact::cPAKFile::UpdateChunk2To3()
|
|||||||
m_ChunkVersion = 3;
|
m_ChunkVersion = 3;
|
||||||
SynchronizeFile();
|
SynchronizeFile();
|
||||||
|
|
||||||
LOGINFO("Updated \"%s\" version 2 to version 3", m_FileName.c_str() );
|
LOGINFO("Updated \"%s\" version 2 to version 3", m_FileName.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -887,7 +893,7 @@ bool cWSSCompact::LoadChunkFromData(const cChunkCoords & a_Chunk, int a_Uncompre
|
|||||||
{
|
{
|
||||||
Json::Value root; // will contain the root value after parsing.
|
Json::Value root; // will contain the root value after parsing.
|
||||||
Json::Reader reader;
|
Json::Reader reader;
|
||||||
if (!reader.parse( UncompressedData.data() + cChunkDef::BlockDataSize, root, false ) )
|
if (!reader.parse( UncompressedData.data() + cChunkDef::BlockDataSize, root, false))
|
||||||
{
|
{
|
||||||
LOGERROR("Failed to parse trailing JSON in chunk [%d, %d]!",
|
LOGERROR("Failed to parse trailing JSON in chunk [%d, %d]!",
|
||||||
a_Chunk.m_ChunkX, a_Chunk.m_ChunkZ
|
a_Chunk.m_ChunkX, a_Chunk.m_ChunkZ
|
||||||
@ -970,7 +976,7 @@ bool cWSSCompact::cPAKFile::SaveChunkToData(const cChunkCoords & a_Chunk, cWorld
|
|||||||
// Compress the data:
|
// Compress the data:
|
||||||
AString CompressedData;
|
AString CompressedData;
|
||||||
int errorcode = CompressString(Data.data(), Data.size(), CompressedData, m_CompressionFactor);
|
int errorcode = CompressString(Data.data(), Data.size(), CompressedData, m_CompressionFactor);
|
||||||
if (errorcode != Z_OK )
|
if (errorcode != Z_OK)
|
||||||
{
|
{
|
||||||
LOGERROR("Error %i compressing data for chunk [%d, %d, %d]", errorcode, a_Chunk.m_ChunkX, a_Chunk.m_ChunkY, a_Chunk.m_ChunkZ);
|
LOGERROR("Error %i compressing data for chunk [%d, %d, %d]", errorcode, a_Chunk.m_ChunkX, a_Chunk.m_ChunkY, a_Chunk.m_ChunkZ);
|
||||||
return false;
|
return false;
|
||||||
|
@ -61,7 +61,7 @@ cWorldStorage::~cWorldStorage()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cWorldStorage::Start(cWorld * a_World, const AString & a_StorageSchemaName, int a_StorageCompressionFactor )
|
bool cWorldStorage::Start(cWorld * a_World, const AString & a_StorageSchemaName, int a_StorageCompressionFactor)
|
||||||
{
|
{
|
||||||
m_World = a_World;
|
m_World = a_World;
|
||||||
m_StorageSchemaName = a_StorageSchemaName;
|
m_StorageSchemaName = a_StorageSchemaName;
|
||||||
|
10
src/main.cpp
10
src/main.cpp
@ -174,7 +174,7 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// main:
|
// main:
|
||||||
|
|
||||||
int main( int argc, char **argv )
|
int main( int argc, char **argv)
|
||||||
{
|
{
|
||||||
UNUSED(argc);
|
UNUSED(argc);
|
||||||
UNUSED(argv);
|
UNUSED(argv);
|
||||||
@ -218,7 +218,7 @@ int main( int argc, char **argv )
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_DEBUG) && defined(_MSC_VER)
|
#if defined(_DEBUG) && defined(_MSC_VER)
|
||||||
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
|
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
|
||||||
|
|
||||||
// _X: The simple built-in CRT leak finder - simply break when allocating the Nth block ({N} is listed in the leak output)
|
// _X: The simple built-in CRT leak finder - simply break when allocating the Nth block ({N} is listed in the leak output)
|
||||||
// Only useful when the leak is in the same sequence all the time
|
// Only useful when the leak is in the same sequence all the time
|
||||||
@ -281,11 +281,11 @@ int main( int argc, char **argv )
|
|||||||
Root.Start();
|
Root.Start();
|
||||||
}
|
}
|
||||||
#if !defined(ANDROID_NDK)
|
#if !defined(ANDROID_NDK)
|
||||||
catch( std::exception& e )
|
catch( std::exception& e)
|
||||||
{
|
{
|
||||||
LOGERROR("Standard exception: %s", e.what() );
|
LOGERROR("Standard exception: %s", e.what());
|
||||||
}
|
}
|
||||||
catch( ... )
|
catch( ...)
|
||||||
{
|
{
|
||||||
LOGERROR("Unknown exception!");
|
LOGERROR("Unknown exception!");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user