* squashed: [Client-sided scripting] Don't register functions that don't work. (#5091)
// Show locally
if (message[0] == L'/')
{
- m_chat_queue.push((std::wstring)L"issued command: " + message);
+ pushToChatQueue((std::wstring)L"issued command: " + message);
}
else
{
LocalPlayer *player = m_env.getLocalPlayer();
assert(player != NULL);
std::wstring name = narrow_to_wide(player->getName());
- m_chat_queue.push((std::wstring)L"<" + name + L"> " + message);
+ pushToChatQueue((std::wstring)L"<" + name + L"> " + message);
}
}
}
} else {
sstr << "Failed to save screenshot '" << filename << "'";
}
- m_chat_queue.push(narrow_to_wide(sstr.str()));
+ pushToChatQueue(narrow_to_wide(sstr.str()));
infostream << sstr.str() << std::endl;
image->drop();
}
void makeScreenshot(IrrlichtDevice *device);
+ inline void pushToChatQueue(const std::wstring &input)
+ {
+ m_chat_queue.push(input);
+ }
+
private:
// Virtual methods from con::PeerHandler
}
void Client::handleCommand_DenySudoMode(NetworkPacket* pkt)
{
- m_chat_queue.push(L"Password change denied. Password NOT changed.");
+ pushToChatQueue(L"Password change denied. Password NOT changed.");
// reset everything and be sad
deleteAuthData();
}
// If chat message not consummed by client lua API
if (!m_script->on_receiving_message(wide_to_utf8(message))) {
- m_chat_queue.push(message);
+ pushToChatQueue(message);
}
}
void ClientScripting::InitializeModApi(lua_State *L, int top)
{
- ModApiUtil::Initialize(L, top);
+ ModApiUtil::InitializeClient(L, top);
ModApiClient::Initialize(L, top);
}
return getScriptApiBase(L)->getServer();
}
+#ifndef SERVER
+Client *ModApiBase::getClient(lua_State *L)
+{
+ return getScriptApiBase(L)->getClient();
+}
+#endif
Environment *ModApiBase::getEnv(lua_State *L)
{
return getScriptApiBase(L)->getEnv();
#include <lauxlib.h>
}
+#ifndef SERVER
+#include "client.h"
+#endif
+
class ScriptApiBase;
class Server;
class Environment;
public:
static ScriptApiBase* getScriptApiBase(lua_State *L);
static Server* getServer(lua_State *L);
+ #ifndef SERVER
+ static Client* getClient(lua_State *L);
+ #endif // !SERVER
+
static Environment* getEnv(lua_State *L);
static GUIEngine* getGuiEngine(lua_State *L);
// When we are not loading the mod, this function returns "."
#include "l_client.h"
#include "l_internal.h"
+#include "util/string.h"
int ModApiClient::l_get_current_modname(lua_State *L)
{
return 1;
}
+// display_chat_message(message)
+int ModApiClient::l_display_chat_message(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ std::string message = luaL_checkstring(L, 1);
+ getClient(L)->pushToChatQueue(utf8_to_wide(message));
+ return 1;
+}
+
void ModApiClient::Initialize(lua_State *L, int top)
{
API_FCT(get_current_modname);
+ API_FCT(display_chat_message);
}
private:
// get_current_modname()
static int l_get_current_modname(lua_State *L);
+ static int l_display_chat_message(lua_State *L);
public:
static void Initialize(lua_State *L, int top);
API_FCT(get_version);
}
+void ModApiUtil::InitializeClient(lua_State *L, int top)
+{
+ API_FCT(log);
+
+ API_FCT(setting_set);
+ API_FCT(setting_get);
+ API_FCT(setting_setbool);
+ API_FCT(setting_getbool);
+ API_FCT(setting_save);
+
+ API_FCT(parse_json);
+ API_FCT(write_json);
+
+ API_FCT(is_yes);
+
+ API_FCT(get_builtin_path);
+
+ API_FCT(compress);
+ API_FCT(decompress);
+
+ API_FCT(encode_base64);
+ API_FCT(decode_base64);
+
+ API_FCT(get_version);
+}
+
void ModApiUtil::InitializeAsync(AsyncEngine& engine)
{
ASYNC_API_FCT(log);
public:
static void Initialize(lua_State *L, int top);
+ static void InitializeClient(lua_State *L, int top);
+
static void InitializeAsync(AsyncEngine& engine);
};