diff --git a/quant.ew/files/core/inventory_helper.lua b/quant.ew/files/core/inventory_helper.lua index 97ea86de..20c2b691 100644 --- a/quant.ew/files/core/inventory_helper.lua +++ b/quant.ew/files/core/inventory_helper.lua @@ -230,14 +230,17 @@ function inventory_helper.get_item_data(player_data, fresh) active = (mActiveItem == item) }) else - local peer_id = player_fns.get_player_data_by_local_entity_id(item).peer_id - table.insert(wandData, - { - peer_id = peer_id, - slot_x = slot_x, - slot_y = slot_y, - active = (mActiveItem == item) - }) + local data = player_fns.get_player_data_by_local_entity_id(item) + if data ~= nil then + local peer_id = data.peer_id + table.insert(wandData, + { + peer_id = peer_id, + slot_x = slot_x, + slot_y = slot_y, + active = (mActiveItem == item) + }) + end end end @@ -289,6 +292,7 @@ local function pickup_item(entity, item) EntityRemoveFromParent(item) end EntityAddChild( child, item) + break end end end @@ -424,8 +428,10 @@ function inventory_helper.has_inventory_changed(player_data) end for _, item in ipairs(GameGetAllInventoryItems(player_data.entity) or {}) do local item_comp = EntityGetFirstComponentIncludingDisabled(item, "ItemComponent") - local slot_x, slot_y = ComponentGetValue2(item_comp, "inventory_slot") - inventory_hash = (inventory_hash*19 + (item % 65000 + slot_x + slot_y)) % (math.pow(2, 20) - 1) + if item_comp ~= nil then + local slot_x, slot_y = ComponentGetValue2(item_comp, "inventory_slot") + inventory_hash = (inventory_hash*19 + (item % 65000 + slot_x + slot_y)) % (math.pow(2, 20) - 1) + end end player_data.prev_inventory_hash = inventory_hash return inventory_hash ~= prev_inventory diff --git a/quant.ew/files/system/enemy_sync.lua b/quant.ew/files/system/enemy_sync.lua index a6b12a28..02d89de8 100644 --- a/quant.ew/files/system/enemy_sync.lua +++ b/quant.ew/files/system/enemy_sync.lua @@ -274,7 +274,7 @@ function enemy_sync.host_upload_entities() } elseif EntityHasTag(enemy_id, "boss_wizard") then local orbs = {false, false, false, false, false, false, false, false} - for _, child in pairs(EntityGetAllChildren(enemy_id) or {}) do + for _, child in ipairs(EntityGetAllChildren(enemy_id) or {}) do local var = EntityGetFirstComponentIncludingDisabled(child, "VariableStorageComponent") if EntityHasTag(child, "touchmagic_immunity") and var ~= nil then local n = ComponentGetValue2(var, "value_int") @@ -627,7 +627,7 @@ local function sync_enemy(enemy_info_raw, force_no_cull) end if ffi.typeof(en_data) == EnemyDataMom then local orbs = en_data.orbs - for _, child in pairs(EntityGetAllChildren(enemy_id) or {}) do + for _, child in ipairs(EntityGetAllChildren(enemy_id) or {}) do local var = EntityGetFirstComponentIncludingDisabled(child, "VariableStorageComponent") local damage_component = EntityGetFirstComponentIncludingDisabled(child, "DamageModelComponent") if EntityHasTag(child, "touchmagic_immunity") and var ~= nil then diff --git a/quant.ew/files/system/potion_mimic/potion_mimic.lua b/quant.ew/files/system/potion_mimic/potion_mimic.lua index ad7adcea..df5f68d8 100644 --- a/quant.ew/files/system/potion_mimic/potion_mimic.lua +++ b/quant.ew/files/system/potion_mimic/potion_mimic.lua @@ -33,6 +33,29 @@ np.CrossCallAdd("ew_potion_mimic_pickup", function() end end) +function rpc.ensure_held(peer_id) + if peer_id == ctx.my_player.peer_id then + local ent = ctx.my_player.entity + local inv + for _, child in ipairs(EntityGetAllChildren(ent) or {}) do + if EntityGetName( child ) == "inventory_quick" then + inv = child + break + end + end + local has_player = false + for _, child in ipairs(EntityGetAllChildren(inv) or {}) do + local player = player_fns.get_player_data_by_local_entity_id(child) + if player ~= nil and player.peer_id == ctx.rpc_player_data.peer_id then + has_player = true + end + end + if not has_player then + EntityAddChild(inv, ctx.rpc_player_data.entity) + end + end +end + function potion.on_world_update() if EntityHasTag(ctx.my_player.entity, "mimic_potion") then local effect @@ -47,8 +70,12 @@ function potion.on_world_update() end end end + local root = EntityGetRootEntity(ctx.my_player.entity) if effect ~= nil then - EntitySetComponentIsEnabled(ctx.my_player.entity, effect, EntityGetParent(ctx.my_player.entity) == 0) + EntitySetComponentIsEnabled(ctx.my_player.entity, effect, root == ctx.my_player.entity) + end + if GameGetFrameNum() % 60 == 53 and root ~= ctx.my_player.entity then + rpc.ensure_held(player_fns.get_player_data_by_local_entity_id(root).peer_id) end end --if InputIsKeyJustDown(16) then --when "m" is pressed