Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Fix builtin inventory list crash when size = 0 (#7297)
- Loading branch information
Showing
with
11 additions
and
7 deletions.
-
+1
−1
src/remoteplayer.cpp
-
+1
−1
src/script/cpp_api/s_item.cpp
-
+9
−5
src/server.cpp
|
@@ -141,7 +141,7 @@ void RemotePlayer::deSerialize(std::istream &is, const std::string &playername, |
|
|
|
|
|
inventory.deSerialize(is); |
|
|
|
|
|
if (inventory.getList("craftpreview") == NULL) { |
|
|
if (!inventory.getList("craftpreview") && inventory.getList("craftresult")) { |
|
|
// Convert players without craftpreview |
|
|
inventory.addList("craftpreview", 1); |
|
|
|
|
|
|
@@ -177,7 +177,7 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user, |
|
|
const InventoryList *old_craft_grid, const InventoryLocation &craft_inv) |
|
|
{ |
|
|
SCRIPTAPI_PRECHECKHEADER |
|
|
|
|
|
sanity_check(old_craft_grid); |
|
|
int error_handler = PUSH_ERROR_HANDLER(L); |
|
|
|
|
|
lua_getglobal(L, "core"); |
|
|
|
@@ -2685,20 +2685,24 @@ void Server::DeleteClient(session_t peer_id, ClientDeletionReason reason) |
|
|
|
|
|
void Server::UpdateCrafting(RemotePlayer *player) |
|
|
{ |
|
|
InventoryList *clist = player->inventory.getList("craft"); |
|
|
if (!clist || clist->getSize() == 0) |
|
|
return; |
|
|
|
|
|
// Get a preview for crafting |
|
|
ItemStack preview; |
|
|
InventoryLocation loc; |
|
|
loc.setPlayer(player->getName()); |
|
|
std::vector<ItemStack> output_replacements; |
|
|
getCraftingResult(&player->inventory, preview, output_replacements, false, this); |
|
|
m_env->getScriptIface()->item_CraftPredict(preview, player->getPlayerSAO(), |
|
|
(&player->inventory)->getList("craft"), loc); |
|
|
clist, loc); |
|
|
|
|
|
// Put the new preview in |
|
|
InventoryList *plist = player->inventory.getList("craftpreview"); |
|
|
sanity_check(plist); |
|
|
sanity_check(plist->getSize() >= 1); |
|
|
plist->changeItem(0, preview); |
|
|
if (plist && plist->getSize() >= 1) { |
|
|
// Put the new preview in |
|
|
plist->changeItem(0, preview); |
|
|
} |
|
|
} |
|
|
|
|
|
void Server::handleChatInterfaceEvent(ChatEvent *evt) |
|
|