X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fscript%2Fcpp_api%2Fs_nodemeta.cpp;h=c081e9fc48cd2c6422c50c1331d4b8b2e85775a8;hb=52128ae11e8b1a7ce66a87c53f1b15f3aabe69f4;hp=01eee337c5540ad34da6b781658cf66541c7c40b;hpb=741df993ff33832d773536ed571c1a67ed93b5cb;p=dragonfireclient.git diff --git a/src/script/cpp_api/s_nodemeta.cpp b/src/script/cpp_api/s_nodemeta.cpp index 01eee337c..c081e9fc4 100644 --- a/src/script/cpp_api/s_nodemeta.cpp +++ b/src/script/cpp_api/s_nodemeta.cpp @@ -27,206 +27,206 @@ 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 - INodeDefManager *ndef = getServer()->ndef(); + int error_handler = PUSH_ERROR_HANDLER(L); + + 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")) + 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 - if (lua_pcall(L, 7, 1, m_errorhandler)) - scriptError(); + 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); int num = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + 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 - INodeDefManager *ndef = getServer()->ndef(); + int error_handler = PUSH_ERROR_HANDLER(L); + + 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")) + 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 - if (lua_pcall(L, 5, 1, m_errorhandler)) - scriptError(); + 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); int num = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + 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 - INodeDefManager *ndef = getServer()->ndef(); + int error_handler = PUSH_ERROR_HANDLER(L); + + 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")) + 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 - if (lua_pcall(L, 5, 1, m_errorhandler)) - scriptError(); + 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); int num = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + 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 - INodeDefManager *ndef = getServer()->ndef(); + int error_handler = PUSH_ERROR_HANDLER(L); + + 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")) + 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 - if (lua_pcall(L, 7, 0, m_errorhandler)) - scriptError(); + 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 - INodeDefManager *ndef = getServer()->ndef(); + int error_handler = PUSH_ERROR_HANDLER(L); + + 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")) + 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 - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); + 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 - INodeDefManager *ndef = getServer()->ndef(); + int error_handler = PUSH_ERROR_HANDLER(L); + + 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")) + 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 - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); -} - -ScriptApiNodemeta::ScriptApiNodemeta() { + 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 } - -ScriptApiNodemeta::~ScriptApiNodemeta() { -} -