X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fscript%2Fcpp_api%2Fs_nodemeta.cpp;h=7ab3757f3df6684927997489aa006ea7ad2cecbe;hb=b9051386ae296a6112383725bc8bfcd96dc9a226;hp=5a95d208a874bf03f9f02ab961c38a2d9accea03;hpb=3face01a202040e4feff3b0936b4aa89c051c98d;p=dragonfireclient.git diff --git a/src/script/cpp_api/s_nodemeta.cpp b/src/script/cpp_api/s_nodemeta.cpp index 5a95d208a..7ab3757f3 100644 --- a/src/script/cpp_api/s_nodemeta.cpp +++ b/src/script/cpp_api/s_nodemeta.cpp @@ -27,10 +27,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "lua_api/l_item.h" // Return number of accepted items to be moved -int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p, - const std::string &from_list, int from_index, - const std::string &to_list, int to_index, - int count, ServerActiveObject *player) +int ScriptApiNodemeta::nodemeta_inventory_AllowMove( + const MoveAction &ma, int count, + ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -39,35 +38,35 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p, const NodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call - MapNode node = getEnv()->getMap().getNodeNoEx(p); + MapNode node = getEnv()->getMap().getNode(ma.to_inv.p); if (node.getContent() == CONTENT_IGNORE) return 0; // Push callback function on stack - std::string nodename = ndef->get(node).name; - if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_move", &p)) + const auto &nodename = ndef->get(node).name; + if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_move", &ma.to_inv.p)) return count; // function(pos, from_list, from_index, to_list, to_index, count, player) - push_v3s16(L, p); // pos - lua_pushstring(L, from_list.c_str()); // from_list - lua_pushinteger(L, from_index + 1); // from_index - lua_pushstring(L, to_list.c_str()); // to_list - lua_pushinteger(L, to_index + 1); // to_index - lua_pushinteger(L, count); // count - objectrefGetOrCreate(L, player); // player + push_v3s16(L, ma.to_inv.p); // pos + lua_pushstring(L, ma.from_list.c_str()); // from_list + lua_pushinteger(L, ma.from_i + 1); // from_index + lua_pushstring(L, ma.to_list.c_str()); // to_list + lua_pushinteger(L, ma.to_i + 1); // to_index + lua_pushinteger(L, count); // count + objectrefGetOrCreate(L, player); // player PCALL_RES(lua_pcall(L, 7, 1, error_handler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_move should" - " return a number, guilty node: " + nodename); + " return a number. node=" + nodename); int num = luaL_checkinteger(L, -1); lua_pop(L, 2); // Pop integer and error handler return num; } // Return number of accepted items to be put -int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p, - const std::string &listname, int index, ItemStack &stack, +int ScriptApiNodemeta::nodemeta_inventory_AllowPut( + const MoveAction &ma, const ItemStack &stack, ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -77,33 +76,33 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p, const NodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call - MapNode node = getEnv()->getMap().getNodeNoEx(p); + MapNode node = getEnv()->getMap().getNode(ma.to_inv.p); if (node.getContent() == CONTENT_IGNORE) return 0; // Push callback function on stack - std::string nodename = ndef->get(node).name; - if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_put", &p)) + const auto &nodename = ndef->get(node).name; + if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_put", &ma.to_inv.p)) return stack.count; // Call function(pos, listname, index, stack, player) - push_v3s16(L, p); // pos - lua_pushstring(L, listname.c_str()); // listname - lua_pushinteger(L, index + 1); // index - LuaItemStack::create(L, stack); // stack - objectrefGetOrCreate(L, player); // player + push_v3s16(L, ma.to_inv.p); // pos + lua_pushstring(L, ma.to_list.c_str()); // listname + lua_pushinteger(L, ma.to_i + 1); // index + LuaItemStack::create(L, stack); // stack + objectrefGetOrCreate(L, player); // player PCALL_RES(lua_pcall(L, 5, 1, error_handler)); if(!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_put should" - " return a number, guilty node: " + nodename); + " return a number. node=" + nodename); int num = luaL_checkinteger(L, -1); lua_pop(L, 2); // Pop integer and error handler return num; } // Return number of accepted items to be taken -int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p, - const std::string &listname, int index, ItemStack &stack, +int ScriptApiNodemeta::nodemeta_inventory_AllowTake( + const MoveAction &ma, const ItemStack &stack, ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -113,35 +112,34 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p, const NodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call - MapNode node = getEnv()->getMap().getNodeNoEx(p); + MapNode node = getEnv()->getMap().getNode(ma.from_inv.p); if (node.getContent() == CONTENT_IGNORE) return 0; // Push callback function on stack - std::string nodename = ndef->get(node).name; - if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_take", &p)) + const auto &nodename = ndef->get(node).name; + if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_take", &ma.from_inv.p)) return stack.count; // Call function(pos, listname, index, count, player) - push_v3s16(L, p); // pos - lua_pushstring(L, listname.c_str()); // listname - lua_pushinteger(L, index + 1); // index - LuaItemStack::create(L, stack); // stack - objectrefGetOrCreate(L, player); // player + push_v3s16(L, ma.from_inv.p); // pos + lua_pushstring(L, ma.from_list.c_str()); // listname + lua_pushinteger(L, ma.from_i + 1); // index + LuaItemStack::create(L, stack); // stack + objectrefGetOrCreate(L, player); // player PCALL_RES(lua_pcall(L, 5, 1, error_handler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_take should" - " return a number, guilty node: " + nodename); + " return a number. node=" + nodename); int num = luaL_checkinteger(L, -1); lua_pop(L, 2); // Pop integer and error handler return num; } // Report moved items -void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p, - const std::string &from_list, int from_index, - const std::string &to_list, int to_index, - int count, ServerActiveObject *player) +void ScriptApiNodemeta::nodemeta_inventory_OnMove( + const MoveAction &ma, int count, + ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -150,30 +148,30 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p, const NodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call - MapNode node = getEnv()->getMap().getNodeNoEx(p); + MapNode node = getEnv()->getMap().getNode(ma.from_inv.p); if (node.getContent() == CONTENT_IGNORE) return; // Push callback function on stack - std::string nodename = ndef->get(node).name; - if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_move", &p)) + const auto &nodename = ndef->get(node).name; + if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_move", &ma.from_inv.p)) return; // function(pos, from_list, from_index, to_list, to_index, count, player) - push_v3s16(L, p); // pos - lua_pushstring(L, from_list.c_str()); // from_list - lua_pushinteger(L, from_index + 1); // from_index - lua_pushstring(L, to_list.c_str()); // to_list - lua_pushinteger(L, to_index + 1); // to_index - lua_pushinteger(L, count); // count - objectrefGetOrCreate(L, player); // player + push_v3s16(L, ma.from_inv.p); // pos + lua_pushstring(L, ma.from_list.c_str()); // from_list + lua_pushinteger(L, ma.from_i + 1); // from_index + lua_pushstring(L, ma.to_list.c_str()); // to_list + lua_pushinteger(L, ma.to_i + 1); // to_index + lua_pushinteger(L, count); // count + objectrefGetOrCreate(L, player); // player PCALL_RES(lua_pcall(L, 7, 0, error_handler)); lua_pop(L, 1); // Pop error handler } // Report put items -void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p, - const std::string &listname, int index, ItemStack &stack, +void ScriptApiNodemeta::nodemeta_inventory_OnPut( + const MoveAction &ma, const ItemStack &stack, ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -183,28 +181,28 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p, const NodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call - MapNode node = getEnv()->getMap().getNodeNoEx(p); + MapNode node = getEnv()->getMap().getNode(ma.to_inv.p); if (node.getContent() == CONTENT_IGNORE) return; // Push callback function on stack - std::string nodename = ndef->get(node).name; - if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_put", &p)) + const auto &nodename = ndef->get(node).name; + if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_put", &ma.to_inv.p)) return; // Call function(pos, listname, index, stack, player) - push_v3s16(L, p); // pos - lua_pushstring(L, listname.c_str()); // listname - lua_pushinteger(L, index + 1); // index - LuaItemStack::create(L, stack); // stack - objectrefGetOrCreate(L, player); // player + push_v3s16(L, ma.to_inv.p); // pos + lua_pushstring(L, ma.to_list.c_str()); // listname + lua_pushinteger(L, ma.to_i + 1); // index + LuaItemStack::create(L, stack); // stack + objectrefGetOrCreate(L, player); // player PCALL_RES(lua_pcall(L, 5, 0, error_handler)); lua_pop(L, 1); // Pop error handler } // Report taken items -void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p, - const std::string &listname, int index, ItemStack &stack, +void ScriptApiNodemeta::nodemeta_inventory_OnTake( + const MoveAction &ma, const ItemStack &stack, ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -214,21 +212,21 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p, const NodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call - MapNode node = getEnv()->getMap().getNodeNoEx(p); + MapNode node = getEnv()->getMap().getNode(ma.from_inv.p); if (node.getContent() == CONTENT_IGNORE) return; // Push callback function on stack - std::string nodename = ndef->get(node).name; - if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_take", &p)) + const auto &nodename = ndef->get(node).name; + if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_take", &ma.from_inv.p)) return; // Call function(pos, listname, index, stack, player) - push_v3s16(L, p); // pos - lua_pushstring(L, listname.c_str()); // listname - lua_pushinteger(L, index + 1); // index - LuaItemStack::create(L, stack); // stack - objectrefGetOrCreate(L, player); // player + push_v3s16(L, ma.from_inv.p); // pos + lua_pushstring(L, ma.from_list.c_str()); // listname + lua_pushinteger(L, ma.from_i + 1); // index + LuaItemStack::create(L, stack); // stack + objectrefGetOrCreate(L, player); // player PCALL_RES(lua_pcall(L, 5, 0, error_handler)); lua_pop(L, 1); // Pop error handler }