Added HOOK_SERVER_PING
This commit is contained in:
parent
9395cf0bca
commit
228dd61995
847
src/Bindings/LuaState_Call.inc
Normal file
847
src/Bindings/LuaState_Call.inc
Normal file
@ -0,0 +1,847 @@
|
||||
// LuaState_Call.inc
|
||||
|
||||
// This file is auto-generated by gen_LuaState_Call.lua
|
||||
// Make changes to the generator instead of to this file!
|
||||
|
||||
// This file contains the various overloads for the cLuaState::Call() function
|
||||
// Each overload handles a different number of parameters / return values
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 0-param 0-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT>
|
||||
bool Call(FnT a_Function)
|
||||
{
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!CallFunction(0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 1-param 0-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1)
|
||||
{
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
if (!CallFunction(0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 2-param 0-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2)
|
||||
{
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
if (!CallFunction(0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 3-param 0-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3)
|
||||
{
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
if (!CallFunction(0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 4-param 0-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4)
|
||||
{
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
if (!CallFunction(0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 0-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename RetT1>
|
||||
bool Call(FnT a_Function, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 1-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename RetT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 2-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename RetT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 3-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename RetT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 4-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename RetT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 5-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename RetT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 6-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename RetT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 7-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename ParamT7, typename RetT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, ParamT7 a_Param7, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
Push(a_Param7);
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 8-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename ParamT7, typename ParamT8, typename RetT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, ParamT7 a_Param7, ParamT8 a_Param8, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
Push(a_Param7);
|
||||
Push(a_Param8);
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 9-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename ParamT7, typename ParamT8, typename ParamT9, typename RetT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, ParamT7 a_Param7, ParamT8 a_Param8, ParamT9 a_Param9, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
Push(a_Param7);
|
||||
Push(a_Param8);
|
||||
Push(a_Param9);
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 10-param 1-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename ParamT7, typename ParamT8, typename ParamT9, typename ParamT10, typename RetT1>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, ParamT7 a_Param7, ParamT8 a_Param8, ParamT9 a_Param9, ParamT10 a_Param10, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
Push(a_Param7);
|
||||
Push(a_Param8);
|
||||
Push(a_Param9);
|
||||
Push(a_Param10);
|
||||
if (!CallFunction(1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-1, a_Ret1);
|
||||
lua_pop(m_LuaState, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 0-param 2-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename RetT1, typename RetT2>
|
||||
bool Call(FnT a_Function, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!CallFunction(2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-2, a_Ret1);
|
||||
GetStackValue(-1, a_Ret2);
|
||||
lua_pop(m_LuaState, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 1-param 2-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename RetT1, typename RetT2>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
if (!CallFunction(2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-2, a_Ret1);
|
||||
GetStackValue(-1, a_Ret2);
|
||||
lua_pop(m_LuaState, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 2-param 2-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename RetT1, typename RetT2>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
if (!CallFunction(2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-2, a_Ret1);
|
||||
GetStackValue(-1, a_Ret2);
|
||||
lua_pop(m_LuaState, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 3-param 2-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename RetT1, typename RetT2>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
if (!CallFunction(2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-2, a_Ret1);
|
||||
GetStackValue(-1, a_Ret2);
|
||||
lua_pop(m_LuaState, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 4-param 2-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename RetT1, typename RetT2>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
if (!CallFunction(2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-2, a_Ret1);
|
||||
GetStackValue(-1, a_Ret2);
|
||||
lua_pop(m_LuaState, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 5-param 2-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename RetT1, typename RetT2>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
if (!CallFunction(2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-2, a_Ret1);
|
||||
GetStackValue(-1, a_Ret2);
|
||||
lua_pop(m_LuaState, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 6-param 2-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename RetT1, typename RetT2>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
if (!CallFunction(2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-2, a_Ret1);
|
||||
GetStackValue(-1, a_Ret2);
|
||||
lua_pop(m_LuaState, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 7-param 2-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename ParamT7, typename RetT1, typename RetT2>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, ParamT7 a_Param7, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
Push(a_Param7);
|
||||
if (!CallFunction(2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-2, a_Ret1);
|
||||
GetStackValue(-1, a_Ret2);
|
||||
lua_pop(m_LuaState, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 8-param 2-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename ParamT7, typename ParamT8, typename RetT1, typename RetT2>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, ParamT7 a_Param7, ParamT8 a_Param8, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
Push(a_Param7);
|
||||
Push(a_Param8);
|
||||
if (!CallFunction(2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-2, a_Ret1);
|
||||
GetStackValue(-1, a_Ret2);
|
||||
lua_pop(m_LuaState, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 9-param 2-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename ParamT7, typename ParamT8, typename ParamT9, typename RetT1, typename RetT2>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, ParamT7 a_Param7, ParamT8 a_Param8, ParamT9 a_Param9, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
Push(a_Param7);
|
||||
Push(a_Param8);
|
||||
Push(a_Param9);
|
||||
if (!CallFunction(2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-2, a_Ret1);
|
||||
GetStackValue(-1, a_Ret2);
|
||||
lua_pop(m_LuaState, 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 7-param 3-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename ParamT7, typename RetT1, typename RetT2, typename RetT3>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, ParamT7 a_Param7, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2, RetT3 & a_Ret3)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
Push(a_Param7);
|
||||
if (!CallFunction(3))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-3, a_Ret1);
|
||||
GetStackValue(-2, a_Ret2);
|
||||
GetStackValue(-1, a_Ret3);
|
||||
lua_pop(m_LuaState, 3);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 8-param 3-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename ParamT7, typename ParamT8, typename RetT1, typename RetT2, typename RetT3>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, ParamT7 a_Param7, ParamT8 a_Param8, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2, RetT3 & a_Ret3)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
Push(a_Param7);
|
||||
Push(a_Param8);
|
||||
if (!CallFunction(3))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-3, a_Ret1);
|
||||
GetStackValue(-2, a_Ret2);
|
||||
GetStackValue(-1, a_Ret3);
|
||||
lua_pop(m_LuaState, 3);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 4-param 5-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename RetT1, typename RetT2, typename RetT3, typename RetT4, typename RetT5>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2, RetT3 & a_Ret3, RetT4 & a_Ret4, RetT5 & a_Ret5)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
if (!CallFunction(5))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-5, a_Ret1);
|
||||
GetStackValue(-4, a_Ret2);
|
||||
GetStackValue(-3, a_Ret3);
|
||||
GetStackValue(-2, a_Ret4);
|
||||
GetStackValue(-1, a_Ret5);
|
||||
lua_pop(m_LuaState, 5);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Call the specified 9-param 5-return Lua function:
|
||||
Returns true if call succeeded, false if there was an error. */
|
||||
template <typename FnT, typename ParamT1, typename ParamT2, typename ParamT3, typename ParamT4, typename ParamT5, typename ParamT6, typename ParamT7, typename ParamT8, typename ParamT9, typename RetT1, typename RetT2, typename RetT3, typename RetT4, typename RetT5>
|
||||
bool Call(FnT a_Function, ParamT1 a_Param1, ParamT2 a_Param2, ParamT3 a_Param3, ParamT4 a_Param4, ParamT5 a_Param5, ParamT6 a_Param6, ParamT7 a_Param7, ParamT8 a_Param8, ParamT9 a_Param9, const cLuaState::cRet & a_RetMark, RetT1 & a_Ret1, RetT2 & a_Ret2, RetT3 & a_Ret3, RetT4 & a_Ret4, RetT5 & a_Ret5)
|
||||
{
|
||||
UNUSED(a_RetMark);
|
||||
if (!PushFunction(a_Function))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Push(a_Param1);
|
||||
Push(a_Param2);
|
||||
Push(a_Param3);
|
||||
Push(a_Param4);
|
||||
Push(a_Param5);
|
||||
Push(a_Param6);
|
||||
Push(a_Param7);
|
||||
Push(a_Param8);
|
||||
Push(a_Param9);
|
||||
if (!CallFunction(5))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
GetStackValue(-5, a_Ret1);
|
||||
GetStackValue(-4, a_Ret2);
|
||||
GetStackValue(-3, a_Ret3);
|
||||
GetStackValue(-2, a_Ret4);
|
||||
GetStackValue(-1, a_Ret5);
|
||||
lua_pop(m_LuaState, 5);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -91,7 +91,7 @@ public:
|
||||
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) = 0;
|
||||
virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d & a_BlockHitPos) = 0;
|
||||
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) = 0;
|
||||
virtual bool OnServerPing (const AString & a_Username, AString & a_Motd, int & a_OnlinePlayersCount, int & a_MaxPlayersCount, AString & a_Favicon) = 0;
|
||||
virtual bool OnServerPing (AString & a_Motd, int & a_OnlinePlayersCount, int & a_MaxPlayersCount, AString & a_Favicon) = 0;
|
||||
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) = 0;
|
||||
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) = 0;
|
||||
virtual bool OnSpawningEntity (cWorld & a_World, cEntity & a_Entity) = 0;
|
||||
|
@ -1193,14 +1193,14 @@ bool cPluginLua::OnProjectileHitEntity(cProjectileEntity & a_Projectile, cEntity
|
||||
|
||||
|
||||
|
||||
bool cPluginLua::OnServerPing(const AString & a_Username, AString & a_Motd, int & a_OnlinePlayersCount, int & a_MaxPlayersCount, AString & a_Favicon)
|
||||
bool cPluginLua::OnServerPing(AString & a_Motd, int & a_OnlinePlayersCount, int & a_MaxPlayersCount, AString & a_Favicon)
|
||||
{
|
||||
cCSLock Lock(m_CriticalSection);
|
||||
bool res = false;
|
||||
cLuaRefs & Refs = m_HookMap[cPluginManager::HOOK_SERVER_PING];
|
||||
for (cLuaRefs::iterator itr = Refs.begin(), end = Refs.end(); itr != end; ++itr)
|
||||
{
|
||||
m_LuaState.Call((int)(**itr), a_Username, a_Motd, a_OnlinePlayersCount, a_MaxPlayersCount, a_Favicon, cLuaState::Return, res, a_Motd, a_OnlinePlayersCount, a_MaxPlayersCount, a_Favicon);
|
||||
m_LuaState.Call((int)(**itr), a_Motd, a_OnlinePlayersCount, a_MaxPlayersCount, a_Favicon, cLuaState::Return, res, a_Motd, a_OnlinePlayersCount, a_MaxPlayersCount, a_Favicon);
|
||||
if (res)
|
||||
{
|
||||
return true;
|
||||
|
@ -117,7 +117,7 @@ public:
|
||||
virtual bool OnPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
|
||||
virtual bool OnProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d & a_BlockHitPos) override;
|
||||
virtual bool OnProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity) override;
|
||||
virtual bool OnServerPing (const AString & a_Username, AString & a_Motd, int & a_OnlinePlayersCount, int & a_MaxPlayersCount, AString & a_Favicon) override;
|
||||
virtual bool OnServerPing (AString & a_Motd, int & a_OnlinePlayersCount, int & a_MaxPlayersCount, AString & a_Favicon) override;
|
||||
virtual bool OnSpawnedEntity (cWorld & a_World, cEntity & a_Entity) override;
|
||||
virtual bool OnSpawnedMonster (cWorld & a_World, cMonster & a_Monster) override;
|
||||
virtual bool OnSpawningEntity (cWorld & a_World, cEntity & a_Entity) override;
|
||||
|
@ -1189,14 +1189,14 @@ bool cPluginManager::CallHookProjectileHitEntity(cProjectileEntity & a_Projectil
|
||||
|
||||
|
||||
|
||||
bool cPluginManager::CallHookServerPing(const AString & a_Username, AString & a_Motd, int & a_OnlinePlayersCount, int & a_MaxPlayersCount, AString & a_Favicon)
|
||||
bool cPluginManager::CallHookServerPing(AString & a_Motd, int & a_OnlinePlayersCount, int & a_MaxPlayersCount, AString & a_Favicon)
|
||||
{
|
||||
FIND_HOOK(HOOK_SERVER_PING);
|
||||
VERIFY_HOOK;
|
||||
|
||||
for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr)
|
||||
{
|
||||
if ((*itr)->OnServerPing(a_Username, a_Motd, a_OnlinePlayersCount, a_MaxPlayersCount, a_Favicon))
|
||||
if ((*itr)->OnServerPing(a_Motd, a_OnlinePlayersCount, a_MaxPlayersCount, a_Favicon))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -226,7 +226,7 @@ public:
|
||||
bool CallHookPreCrafting (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe);
|
||||
bool CallHookProjectileHitBlock (cProjectileEntity & a_Projectile, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Face, const Vector3d & a_BlockHitPos);
|
||||
bool CallHookProjectileHitEntity (cProjectileEntity & a_Projectile, cEntity & a_HitEntity);
|
||||
bool CallHookServerPing (const AString & a_Username, AString & a_Motd, int & a_OnlinePlayersCount, int & a_MaxPlayersCount, AString & a_Favicon);
|
||||
bool CallHookServerPing (AString & a_Motd, int & a_OnlinePlayersCount, int & a_MaxPlayersCount, AString & a_Favicon);
|
||||
bool CallHookSpawnedEntity (cWorld & a_World, cEntity & a_Entity);
|
||||
bool CallHookSpawnedMonster (cWorld & a_World, cMonster & a_Monster);
|
||||
bool CallHookSpawningEntity (cWorld & a_World, cEntity & a_Entity);
|
||||
|
@ -41,6 +41,8 @@ Implements the 1.7.x protocol classes:
|
||||
#include "../BlockEntities/CommandBlockEntity.h"
|
||||
#include "../BlockEntities/MobHeadEntity.h"
|
||||
#include "../BlockEntities/FlowerPotEntity.h"
|
||||
#include "Bindings/PluginManager.h"
|
||||
#include "lua/src/llex.h"
|
||||
|
||||
|
||||
|
||||
@ -1715,21 +1717,41 @@ void cProtocol172::HandlePacketStatusPing(cByteBuffer & a_ByteBuffer)
|
||||
|
||||
void cProtocol172::HandlePacketStatusRequest(cByteBuffer & a_ByteBuffer)
|
||||
{
|
||||
// Send the response:
|
||||
AString Response = "{\"version\":{\"name\":\"1.7.2\", \"protocol\":4}, \"players\":{";
|
||||
cServer * Server = cRoot::Get()->GetServer();
|
||||
AppendPrintf(Response, "\"max\":%u, \"online\":%u, \"sample\":[]},",
|
||||
Server->GetMaxPlayers(),
|
||||
Server->GetNumPlayers()
|
||||
);
|
||||
AppendPrintf(Response, "\"description\":{\"text\":\"%s\"},",
|
||||
Server->GetDescription().c_str()
|
||||
);
|
||||
AppendPrintf(Response, "\"favicon\": \"data:image/png;base64,%s\"",
|
||||
Server->GetFaviconData().c_str()
|
||||
);
|
||||
Response.append("}");
|
||||
|
||||
AString Motd = Server->GetDescription();
|
||||
int NumPlayers = Server->GetNumPlayers();
|
||||
int MaxPlayers = Server->GetMaxPlayers();
|
||||
AString Favicon = Server->GetFaviconData();
|
||||
cRoot::Get()->GetPluginManager()->CallHookServerPing(Motd, NumPlayers, MaxPlayers, Favicon);
|
||||
|
||||
// Version:
|
||||
Json::Value Version;
|
||||
Version["name"] = "1.7.2";
|
||||
Version["protocol"] = 4;
|
||||
|
||||
// Players:
|
||||
Json::Value Players;
|
||||
Players["online"] = NumPlayers;
|
||||
Players["max"] = MaxPlayers;
|
||||
// TODO: Add "sample"
|
||||
|
||||
// Description:
|
||||
Json::Value Description;
|
||||
Description["text"] = Motd.c_str();
|
||||
|
||||
// Create the response:
|
||||
Json::Value ResponseValue;
|
||||
ResponseValue["version"] = Version;
|
||||
ResponseValue["players"] = Players;
|
||||
ResponseValue["description"] = Description;
|
||||
if (!Favicon.empty())
|
||||
{
|
||||
ResponseValue["favicon"] = Printf("data:image/png;base64,%s", Favicon.c_str());
|
||||
}
|
||||
|
||||
Json::StyledWriter Writer;
|
||||
AString Response = Writer.write(ResponseValue);
|
||||
|
||||
cPacketizer Pkt(*this, 0x00); // Response packet
|
||||
Pkt.WriteString(Response);
|
||||
}
|
||||
@ -3065,20 +3087,41 @@ void cProtocol176::SendPlayerSpawn(const cPlayer & a_Player)
|
||||
|
||||
void cProtocol176::HandlePacketStatusRequest(cByteBuffer & a_ByteBuffer)
|
||||
{
|
||||
// Send the response:
|
||||
AString Response = "{\"version\": {\"name\": \"1.7.6\", \"protocol\":5}, \"players\": {";
|
||||
AppendPrintf(Response, "\"max\": %u, \"online\": %u, \"sample\": []},",
|
||||
cRoot::Get()->GetServer()->GetMaxPlayers(),
|
||||
cRoot::Get()->GetServer()->GetNumPlayers()
|
||||
);
|
||||
AppendPrintf(Response, "\"description\": {\"text\": \"%s\"},",
|
||||
cRoot::Get()->GetServer()->GetDescription().c_str()
|
||||
);
|
||||
AppendPrintf(Response, "\"favicon\": \"data:image/png;base64,%s\"",
|
||||
cRoot::Get()->GetServer()->GetFaviconData().c_str()
|
||||
);
|
||||
Response.append("}");
|
||||
|
||||
cServer * Server = cRoot::Get()->GetServer();
|
||||
AString Motd = Server->GetDescription();
|
||||
int NumPlayers = Server->GetNumPlayers();
|
||||
int MaxPlayers = Server->GetMaxPlayers();
|
||||
AString Favicon = Server->GetFaviconData();
|
||||
cRoot::Get()->GetPluginManager()->CallHookServerPing(Motd, NumPlayers, MaxPlayers, Favicon);
|
||||
|
||||
// Version:
|
||||
Json::Value Version;
|
||||
Version["name"] = "1.7.6";
|
||||
Version["protocol"] = 5;
|
||||
|
||||
// Players:
|
||||
Json::Value Players;
|
||||
Players["online"] = NumPlayers;
|
||||
Players["max"] = MaxPlayers;
|
||||
// TODO: Add "sample"
|
||||
|
||||
// Description:
|
||||
Json::Value Description;
|
||||
Description["text"] = Motd.c_str();
|
||||
|
||||
// Create the response:
|
||||
Json::Value ResponseValue;
|
||||
ResponseValue["version"] = Version;
|
||||
ResponseValue["players"] = Players;
|
||||
ResponseValue["description"] = Description;
|
||||
if (!Favicon.empty())
|
||||
{
|
||||
ResponseValue["favicon"] = Printf("data:image/png;base64,%s", Favicon.c_str());
|
||||
}
|
||||
|
||||
Json::StyledWriter Writer;
|
||||
AString Response = Writer.write(ResponseValue);
|
||||
|
||||
cPacketizer Pkt(*this, 0x00); // Response packet
|
||||
Pkt.WriteString(Response);
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
|
||||
// Adjust these if a new protocol is added or an old one is removed:
|
||||
#define MCS_CLIENT_VERSIONS "1.2.4, 1.2.5, 1.3.1, 1.3.2, 1.4.2, 1.4.4, 1.4.5, 1.4.6, 1.4.7, 1.5, 1.5.1, 1.5.2, 1.6.1, 1.6.2, 1.6.3, 1.6.4, 1.7.2, 1.7.4, 1.7.5, 1.7.6, 1.7.7, 1.7.8, 1.7.9"
|
||||
#define MCS_CLIENT_VERSIONS "1.2.4, 1.2.5, 1.3.1, 1.3.2, 1.4.2, 1.4.4, 1.4.5, 1.4.6, 1.4.7, 1.5, 1.5.1, 1.5.2, 1.6.1, 1.6.2, 1.6.3, 1.6.4, 1.7.2, 1.7.4, 1.7.5, 1.7.6, 1.7.7, 1.7.8, 1.7.9, 1.7.10"
|
||||
#define MCS_PROTOCOL_VERSIONS "29, 39, 47, 49, 51, 60, 61, 73, 74, 77, 78, 4, 5"
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user