aboutsummaryrefslogtreecommitdiff
path: root/src/script/common
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2022-05-07 16:45:17 +0100
committerrubenwardy <rw@rubenwardy.com>2022-07-14 22:12:54 +0100
commit9f41b4f72d45b0ad1f9de2dfc28e426a2d05f137 (patch)
tree677a2009671dead812879bee5f9e154670e98e2f /src/script/common
parent06de82fd86678e0a1c260c67792c5cd192863edd (diff)
Add check_mod_configuration to main menu
Diffstat (limited to 'src/script/common')
-rw-r--r--src/script/common/c_content.cpp32
-rw-r--r--src/script/common/c_content.h3
2 files changed, 35 insertions, 0 deletions
diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp
index 10670a60a..166980025 100644
--- a/src/script/common/c_content.cpp
+++ b/src/script/common/c_content.cpp
@@ -2143,3 +2143,35 @@ void push_collision_move_result(lua_State *L, const collisionMoveResult &res)
lua_setfield(L, -2, "collisions");
/**/
}
+
+
+void push_mod_spec(lua_State *L, const ModSpec &spec, bool include_unsatisfied)
+{
+ lua_newtable(L);
+
+ lua_pushstring(L, spec.name.c_str());
+ lua_setfield(L, -2, "name");
+
+ lua_pushstring(L, spec.author.c_str());
+ lua_setfield(L, -2, "author");
+
+ lua_pushinteger(L, spec.release);
+ lua_setfield(L, -2, "release");
+
+ lua_pushstring(L, spec.desc.c_str());
+ lua_setfield(L, -2, "description");
+
+ lua_pushstring(L, spec.path.c_str());
+ lua_setfield(L, -2, "path");
+
+ lua_pushstring(L, spec.virtual_path.c_str());
+ lua_setfield(L, -2, "virtual_path");
+
+ lua_newtable(L);
+ int i = 1;
+ for (const auto &dep : spec.unsatisfied_depends) {
+ lua_pushstring(L, dep.c_str());
+ lua_rawseti(L, -2, i++);
+ }
+ lua_setfield(L, -2, "unsatisfied_depends");
+}
diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h
index 06f80328a..ade3e4c1e 100644
--- a/src/script/common/c_content.h
+++ b/src/script/common/c_content.h
@@ -42,6 +42,7 @@ extern "C" {
// We do a explicit path include because by default c_content.h include src/client/hud.h
// prior to the src/hud.h, which is not good on server only build
#include "../../hud.h"
+#include "content/mods.h"
namespace Json { class Value; }
@@ -204,3 +205,5 @@ void push_hud_element (lua_State *L, HudElement *elem);
bool read_hud_change (lua_State *L, HudElementStat &stat, HudElement *elem, void **value);
void push_collision_move_result(lua_State *L, const collisionMoveResult &res);
+
+void push_mod_spec(lua_State *L, const ModSpec &spec, bool include_unsatisfied);
TRESULT_FLOODING, RPLAYER_CHATRESULT_KICK, }; /* Player on the server */ class RemotePlayer : public Player { friend class PlayerDatabaseFiles; public: RemotePlayer(const char *name, IItemDefManager *idef); virtual ~RemotePlayer() = default; void deSerialize(std::istream &is, const std::string &playername, PlayerSAO *sao); PlayerSAO *getPlayerSAO() { return m_sao; } void setPlayerSAO(PlayerSAO *sao) { m_sao = sao; } const RemotePlayerChatResult canSendChatMessage(); void setHotbarItemcount(s32 hotbar_itemcount) { hud_hotbar_itemcount = hotbar_itemcount; } s32 getHotbarItemcount() const { return hud_hotbar_itemcount; } void overrideDayNightRatio(bool do_override, float ratio) { m_day_night_ratio_do_override = do_override; m_day_night_ratio = ratio; } void getDayNightRatio(bool *do_override, float *ratio) { *do_override = m_day_night_ratio_do_override; *ratio = m_day_night_ratio; } void setHotbarImage(const std::string &name) { hud_hotbar_image = name; } const std::string &getHotbarImage() const { return hud_hotbar_image; } void setHotbarSelectedImage(const std::string &name) { hud_hotbar_selected_image = name; } const std::string &getHotbarSelectedImage() const { return hud_hotbar_selected_image; } void setSky(const SkyboxParams &skybox_params) { m_skybox_params = skybox_params; } const SkyboxParams &getSkyParams() const { return m_skybox_params; } void setSun(const SunParams &sun_params) { m_sun_params = sun_params; } const SunParams &getSunParams() const { return m_sun_params; } void setMoon(const MoonParams &moon_params) { m_moon_params = moon_params; } const MoonParams &getMoonParams() const { return m_moon_params; } void setStars(const StarParams &star_params) { m_star_params = star_params; } const StarParams &getStarParams() const { return m_star_params; } void setCloudParams(const CloudParams &cloud_params) { m_cloud_params = cloud_params; } const CloudParams &getCloudParams() const { return m_cloud_params; } bool checkModified() const { return m_dirty || inventory.checkModified(); } inline void setModified(const bool x) { m_dirty = x; } void setLocalAnimations(v2s32 frames[4], float frame_speed) { for (int i = 0; i < 4; i++) local_animations[i] = frames[i]; local_animation_speed = frame_speed; } void getLocalAnimations(v2s32 *frames, float *frame_speed) { for (int i = 0; i < 4; i++) frames[i] = local_animations[i]; *frame_speed = local_animation_speed; } void setDirty(bool dirty) { m_dirty = true; } u16 protocol_version = 0; // v1 for clients older than 5.1.0-dev u16 formspec_version = 1; session_t getPeerId() const { return m_peer_id; } void setPeerId(session_t peer_id) { m_peer_id = peer_id; } void onSuccessfulSave(); private: /* serialize() writes a bunch of text that can contain any characters except a '\0', and such an ending that deSerialize stops reading exactly at the right point. */ void serialize(std::ostream &os); void serializeExtraAttributes(std::string &output); PlayerSAO *m_sao = nullptr; bool m_dirty = false; static bool m_setting_cache_loaded; static float m_setting_chat_message_limit_per_10sec; static u16 m_setting_chat_message_limit_trigger_kick; u32 m_last_chat_message_sent = std::time(0); float m_chat_message_allowance = 5.0f; u16 m_message_rate_overhead = 0; bool m_day_night_ratio_do_override = false; float m_day_night_ratio; std::string hud_hotbar_image = ""; std::string hud_hotbar_selected_image = ""; CloudParams m_cloud_params; SkyboxParams m_skybox_params; SunParams m_sun_params; MoonParams m_moon_params; StarParams m_star_params; session_t m_peer_id = PEER_ID_INEXISTENT; };