aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorred-001 <red-001@outlook.ie>2017-01-21 21:44:37 +0000
committerLoïc Blot <nerzhul@users.noreply.github.com>2017-03-13 23:56:05 +0100
commitcb3a61f8db6b7020dd69f7786a1086f6fe014dfc (patch)
treeef2d2848a83d9937c74c95e800775f454bfed28e /src
parent2efae3ffd720095222c800e016286a45c9fe1e5c (diff)
downloadminetest-cb3a61f8db6b7020dd69f7786a1086f6fe014dfc.tar.gz
minetest-cb3a61f8db6b7020dd69f7786a1086f6fe014dfc.tar.bz2
minetest-cb3a61f8db6b7020dd69f7786a1086f6fe014dfc.zip
[CSM] Add method that display chat to client-sided lua. (#5089) (#5091)
* squashed: [Client-sided scripting] Don't register functions that don't work. (#5091)
Diffstat (limited to 'src')
-rw-r--r--src/client.cpp6
-rw-r--r--src/client.h5
-rw-r--r--src/network/clientpackethandler.cpp4
-rw-r--r--src/script/clientscripting.cpp2
-rw-r--r--src/script/lua_api/l_base.cpp6
-rw-r--r--src/script/lua_api/l_base.h8
-rw-r--r--src/script/lua_api/l_client.cpp12
-rw-r--r--src/script/lua_api/l_client.h1
-rw-r--r--src/script/lua_api/l_util.cpp26
-rw-r--r--src/script/lua_api/l_util.h2
10 files changed, 66 insertions, 6 deletions
diff --git a/src/client.cpp b/src/client.cpp
index faf454b35..0af6b4595 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -1584,7 +1584,7 @@ void Client::typeChatMessage(const std::wstring &message)
// Show locally
if (message[0] == L'/')
{
- m_chat_queue.push((std::wstring)L"issued command: " + message);
+ pushToChatQueue((std::wstring)L"issued command: " + message);
}
else
{
@@ -1593,7 +1593,7 @@ void Client::typeChatMessage(const std::wstring &message)
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);
}
}
}
@@ -1867,7 +1867,7 @@ void Client::makeScreenshot(IrrlichtDevice *device)
} 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();
}
diff --git a/src/client.h b/src/client.h
index 2fdade61a..584b13a90 100644
--- a/src/client.h
+++ b/src/client.h
@@ -557,6 +557,11 @@ public:
void makeScreenshot(IrrlichtDevice *device);
+ inline void pushToChatQueue(const std::wstring &input)
+ {
+ m_chat_queue.push(input);
+ }
+
private:
// Virtual methods from con::PeerHandler
diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp
index f1c44c7d8..d0642c86a 100644
--- a/src/network/clientpackethandler.cpp
+++ b/src/network/clientpackethandler.cpp
@@ -142,7 +142,7 @@ void Client::handleCommand_AcceptSudoMode(NetworkPacket* pkt)
}
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();
}
@@ -414,7 +414,7 @@ void Client::handleCommand_ChatMessage(NetworkPacket* pkt)
// 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);
}
}
diff --git a/src/script/clientscripting.cpp b/src/script/clientscripting.cpp
index 43bc6f94e..9bf93eb83 100644
--- a/src/script/clientscripting.cpp
+++ b/src/script/clientscripting.cpp
@@ -49,6 +49,6 @@ ClientScripting::ClientScripting(Client *client):
void ClientScripting::InitializeModApi(lua_State *L, int top)
{
- ModApiUtil::Initialize(L, top);
+ ModApiUtil::InitializeClient(L, top);
ModApiClient::Initialize(L, top);
}
diff --git a/src/script/lua_api/l_base.cpp b/src/script/lua_api/l_base.cpp
index 515a7d933..f2703718a 100644
--- a/src/script/lua_api/l_base.cpp
+++ b/src/script/lua_api/l_base.cpp
@@ -37,6 +37,12 @@ Server *ModApiBase::getServer(lua_State *L)
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();
diff --git a/src/script/lua_api/l_base.h b/src/script/lua_api/l_base.h
index 641013dfd..dc1b1b226 100644
--- a/src/script/lua_api/l_base.h
+++ b/src/script/lua_api/l_base.h
@@ -28,6 +28,10 @@ extern "C" {
#include <lauxlib.h>
}
+#ifndef SERVER
+#include "client.h"
+#endif
+
class ScriptApiBase;
class Server;
class Environment;
@@ -38,6 +42,10 @@ class ModApiBase {
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 "."
diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp
index 9c478602a..f4c3812ac 100644
--- a/src/script/lua_api/l_client.cpp
+++ b/src/script/lua_api/l_client.cpp
@@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "l_client.h"
#include "l_internal.h"
+#include "util/string.h"
int ModApiClient::l_get_current_modname(lua_State *L)
{
@@ -27,7 +28,18 @@ 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);
}
diff --git a/src/script/lua_api/l_client.h b/src/script/lua_api/l_client.h
index 332f00132..b4a57cb61 100644
--- a/src/script/lua_api/l_client.h
+++ b/src/script/lua_api/l_client.h
@@ -28,6 +28,7 @@ class ModApiClient : public ModApiBase
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);
diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp
index c26791646..277a874bf 100644
--- a/src/script/lua_api/l_util.cpp
+++ b/src/script/lua_api/l_util.cpp
@@ -526,6 +526,32 @@ void ModApiUtil::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);
diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h
index 9910704b3..eef32c0a1 100644
--- a/src/script/lua_api/l_util.h
+++ b/src/script/lua_api/l_util.h
@@ -110,6 +110,8 @@ private:
public:
static void Initialize(lua_State *L, int top);
+ static void InitializeClient(lua_State *L, int top);
+
static void InitializeAsync(AsyncEngine& engine);
};