diff options
Diffstat (limited to 'src/script/cpp_api/s_inventory.cpp')
-rw-r--r-- | src/script/cpp_api/s_inventory.cpp | 114 |
1 files changed, 47 insertions, 67 deletions
diff --git a/src/script/cpp_api/s_inventory.cpp b/src/script/cpp_api/s_inventory.cpp index 251ddb221..e9c09f72e 100644 --- a/src/script/cpp_api/s_inventory.cpp +++ b/src/script/cpp_api/s_inventory.cpp @@ -26,33 +26,29 @@ with this program; if not, write to the Free Software Foundation, Inc., // Return number of accepted items to be moved int ScriptApiDetached::detached_inventory_AllowMove( - const std::string &name, - const std::string &from_list, int from_index, - const std::string &to_list, int to_index, - int count, ServerActiveObject *player) + const MoveAction &ma, int count, + ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER int error_handler = PUSH_ERROR_HANDLER(L); // Push callback function on stack - if (!getDetachedInventoryCallback(name, "allow_move")) + if (!getDetachedInventoryCallback(ma.from_inv.name, "allow_move")) return count; // function(inv, from_list, from_index, to_list, to_index, count, player) // inv - InventoryLocation loc; - loc.setDetached(name); - InvRef::create(L, loc); - 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 + InvRef::create(L, ma.from_inv); + 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_move should return a number. name=" + name); + throw LuaError("allow_move should return a number. name=" + ma.from_inv.name); int ret = luaL_checkinteger(L, -1); lua_pop(L, 2); // Pop integer and error handler return ret; @@ -60,8 +56,7 @@ int ScriptApiDetached::detached_inventory_AllowMove( // Return number of accepted items to be put int ScriptApiDetached::detached_inventory_AllowPut( - const std::string &name, - const std::string &listname, int index, ItemStack &stack, + const MoveAction &ma, const ItemStack &stack, ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -69,20 +64,18 @@ int ScriptApiDetached::detached_inventory_AllowPut( int error_handler = PUSH_ERROR_HANDLER(L); // Push callback function on stack - if (!getDetachedInventoryCallback(name, "allow_put")) + if (!getDetachedInventoryCallback(ma.to_inv.name, "allow_put")) return stack.count; // All will be accepted // Call function(inv, listname, index, stack, player) - InventoryLocation loc; - loc.setDetached(name); - InvRef::create(L, loc); // inv - lua_pushstring(L, listname.c_str()); // listname - lua_pushinteger(L, index + 1); // index + InvRef::create(L, ma.to_inv); // inv + 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_put should return a number. name=" + name); + throw LuaError("allow_put should return a number. name=" + ma.to_inv.name); int ret = luaL_checkinteger(L, -1); lua_pop(L, 2); // Pop integer and error handler return ret; @@ -90,8 +83,7 @@ int ScriptApiDetached::detached_inventory_AllowPut( // Return number of accepted items to be taken int ScriptApiDetached::detached_inventory_AllowTake( - const std::string &name, - const std::string &listname, int index, ItemStack &stack, + const MoveAction &ma, const ItemStack &stack, ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -99,20 +91,18 @@ int ScriptApiDetached::detached_inventory_AllowTake( int error_handler = PUSH_ERROR_HANDLER(L); // Push callback function on stack - if (!getDetachedInventoryCallback(name, "allow_take")) + if (!getDetachedInventoryCallback(ma.from_inv.name, "allow_take")) return stack.count; // All will be accepted // Call function(inv, listname, index, stack, player) - InventoryLocation loc; - loc.setDetached(name); - InvRef::create(L, loc); // inv - lua_pushstring(L, listname.c_str()); // listname - lua_pushinteger(L, index + 1); // index + InvRef::create(L, ma.from_inv); // inv + 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_take should return a number. name=" + name); + throw LuaError("allow_take should return a number. name=" + ma.from_inv.name); int ret = luaL_checkinteger(L, -1); lua_pop(L, 2); // Pop integer and error handler return ret; @@ -120,38 +110,33 @@ int ScriptApiDetached::detached_inventory_AllowTake( // Report moved items void ScriptApiDetached::detached_inventory_OnMove( - const std::string &name, - const std::string &from_list, int from_index, - const std::string &to_list, int to_index, - int count, ServerActiveObject *player) + const MoveAction &ma, int count, + ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER int error_handler = PUSH_ERROR_HANDLER(L); // Push callback function on stack - if (!getDetachedInventoryCallback(name, "on_move")) + if (!getDetachedInventoryCallback(ma.from_inv.name, "on_move")) return; // function(inv, from_list, from_index, to_list, to_index, count, player) // inv - InventoryLocation loc; - loc.setDetached(name); - InvRef::create(L, loc); - 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 + InvRef::create(L, ma.from_inv); + 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 ScriptApiDetached::detached_inventory_OnPut( - const std::string &name, - const std::string &listname, int index, ItemStack &stack, + const MoveAction &ma, const ItemStack &stack, ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -159,26 +144,23 @@ void ScriptApiDetached::detached_inventory_OnPut( int error_handler = PUSH_ERROR_HANDLER(L); // Push callback function on stack - if (!getDetachedInventoryCallback(name, "on_put")) + if (!getDetachedInventoryCallback(ma.to_inv.name, "on_put")) return; // Call function(inv, listname, index, stack, player) // inv - InventoryLocation loc; - loc.setDetached(name); - InvRef::create(L, loc); - lua_pushstring(L, listname.c_str()); // listname - lua_pushinteger(L, index + 1); // index - LuaItemStack::create(L, stack); // stack - objectrefGetOrCreate(L, player); // player + InvRef::create(L, ma.to_inv); + 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 ScriptApiDetached::detached_inventory_OnTake( - const std::string &name, - const std::string &listname, int index, ItemStack &stack, + const MoveAction &ma, const ItemStack &stack, ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -186,18 +168,16 @@ void ScriptApiDetached::detached_inventory_OnTake( int error_handler = PUSH_ERROR_HANDLER(L); // Push callback function on stack - if (!getDetachedInventoryCallback(name, "on_take")) + if (!getDetachedInventoryCallback(ma.from_inv.name, "on_take")) return; // Call function(inv, listname, index, stack, player) // inv - InventoryLocation loc; - loc.setDetached(name); - InvRef::create(L, loc); - lua_pushstring(L, listname.c_str()); // listname - lua_pushinteger(L, index + 1); // index - LuaItemStack::create(L, stack); // stack - objectrefGetOrCreate(L, player); // player + InvRef::create(L, ma.from_inv); + 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 } |