Node metadata inventory is only updated every 2 seconds
- orwell
- Member
- Posts: 958
- Joined: Wed Jun 24, 2015 18:45
- GitHub: orwell96
- IRC: orwell96_mt
- In-game: orwell
- Location: Raxacoricofallapatorius
Node metadata inventory is only updated every 2 seconds
Although this should be a common problem, nobody is complying about it.
Situation: server running locally, client running in an extra process.
Version: 0.4.12-dev from today(2015-7-5).
Process of putting or taking items into or out of metadata inventories:
1. In client: moving the item.
2. almost immediately: a debug message on the server tells that the item has been moved.
3. after a time ranging from 0 to 2 seconds: the item is actually shown in the new location.
It appears like everything is updated in a 2 seconds interval. Just try to put many items into a chest using the new listring feature: the new items appear simultaneously every 2 seconds!
That inventory lag cannot be caused by network connectivity, then it would be unexplainable that the client->server packet is transferred in <10ms, but the packet back takes 2 seconds. This leads me to 2 possible explanations:
1. the inventory metadata changes are only send from the server to the clients in a 2sec interval
2. the client displays the changes only every 2 seconds
Interestingly, movements inside the player inventory are not slowed down this way. I would therefore consider the first option.
i am not familiar with c++, so i can't figure out the problem myself.
Situation: server running locally, client running in an extra process.
Version: 0.4.12-dev from today(2015-7-5).
Process of putting or taking items into or out of metadata inventories:
1. In client: moving the item.
2. almost immediately: a debug message on the server tells that the item has been moved.
3. after a time ranging from 0 to 2 seconds: the item is actually shown in the new location.
It appears like everything is updated in a 2 seconds interval. Just try to put many items into a chest using the new listring feature: the new items appear simultaneously every 2 seconds!
That inventory lag cannot be caused by network connectivity, then it would be unexplainable that the client->server packet is transferred in <10ms, but the packet back takes 2 seconds. This leads me to 2 possible explanations:
1. the inventory metadata changes are only send from the server to the clients in a 2sec interval
2. the client displays the changes only every 2 seconds
Interestingly, movements inside the player inventory are not slowed down this way. I would therefore consider the first option.
i am not familiar with c++, so i can't figure out the problem myself.
-
- Member
- Posts: 4276
- Joined: Sun Sep 09, 2012 17:31
- GitHub: Sokomine
- IRC: Sokomine
- In-game: Sokomine
Re: Node metadata inventory is only updated every 2 seconds
That used to affect only locked chests from minetest_game. Normal chests had client prediction and had far less apparent lag. I don't know if anything changed there. Just compare the two chest types. If the locked chest is slower for you than the non-locked one, just screw the locked chest from minetest_game and replace it with an alternate locked chests. It's the hide-the-content-from-other-than-its-owner-"feature" that causes this huge annoyance.
A list of my mods can be found here.
Re: Node metadata inventory is only updated every 2 seconds
I agree, the bug is horrible.
Re: Node metadata inventory is only updated every 2 seconds
I've commented on this before where the locked chest node has so many checks to see if the player owns the chest... I would remove a few apart from on_rightclick to speed things up:
Code: Select all
minetest.register_node("default:chest_locked", {
description = "Locked Chest",
tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
"default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
paramtype2 = "facedir",
groups = {choppy=2,oddly_breakable_by_hand=2},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_wood_defaults(),
after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
meta:set_string("owner", placer:get_player_name() or "")
meta:set_string("infotext", "Locked Chest (owned by "..
meta:get_string("owner")..")")
end,
on_construct = function(pos)
local meta = minetest.get_meta(pos)
-- meta:set_string("infotext", "Locked Chest")
-- meta:set_string("owner", "")
local inv = meta:get_inventory()
inv:set_size("main", 8*4)
end,
can_dig = function(pos,player)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:is_empty("main") and has_locked_chest_privilege(meta, player)
end,
-- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
-- local meta = minetest.get_meta(pos)
-- if not has_locked_chest_privilege(meta, player) then
-- return 0
-- end
-- return count
-- end,
-- allow_metadata_inventory_put = function(pos, listname, index, stack, player)
-- local meta = minetest.get_meta(pos)
-- if not has_locked_chest_privilege(meta, player) then
-- return 0
-- end
-- return stack:get_count()
-- end,
-- allow_metadata_inventory_take = function(pos, listname, index, stack, player)
-- local meta = minetest.get_meta(pos)
-- if not has_locked_chest_privilege(meta, player) then
-- return 0
-- end
-- return stack:get_count()
-- end,
on_metadata_inventory_put = function(pos, listname, index, stack, player)
minetest.log("action", player:get_player_name()..
" moves stuff to locked chest at "..minetest.pos_to_string(pos))
end,
on_metadata_inventory_take = function(pos, listname, index, stack, player)
minetest.log("action", player:get_player_name()..
" takes stuff from locked chest at "..minetest.pos_to_string(pos))
end,
on_rightclick = function(pos, node, clicker)
local meta = minetest.get_meta(pos)
if has_locked_chest_privilege(meta, clicker) then
minetest.show_formspec(
clicker:get_player_name(),
"default:chest_locked",
get_locked_chest_formspec(pos)
)
end
end,
on_blast = function() end,
})
Re: Node metadata inventory is only updated every 2 seconds
Those checks are needed. If I'm right, if you remove them, you allow people with hacked cllients to steal things from chests.
-
- Member
- Posts: 4276
- Joined: Sun Sep 09, 2012 17:31
- GitHub: Sokomine
- IRC: Sokomine
- In-game: Sokomine
Re: Node metadata inventory is only updated every 2 seconds
Yes, it's the other way around. It's the hide-content-from-non-owners that's causing the huge visible lag - not the inventory movement as such. It won't act as a locked chest if everyone can take something out or put something in.
A list of my mods can be found here.
- orwell
- Member
- Posts: 958
- Joined: Wed Jun 24, 2015 18:45
- GitHub: orwell96
- IRC: orwell96_mt
- In-game: orwell
- Location: Raxacoricofallapatorius
Re: Node metadata inventory is only updated every 2 seconds
The bug has nothing to do with owners!
If i understand your posts right, the bug applies for locked chests only because of an display-only-to-owners system.
This is not what I think. I was using the "default" mod of minetest_game in another subgame when discovering this bug, and it appeared on normal chests (so apparently there was no prediction by client). I am not using the single player, I start a server locally and then join. And I see no reason why this is exactly a 2sec interval. (just try it using the new listring feature.)
It maybe could be the display-to-owners-only code, but for any reason it is used for non-locked chests too. Are normal chests behaving like locked ones too?
Note: the default mod I used I downloaded in March or so, because I am using Mintest on Win7 too and the current minetest_game from github is not working in the stable win7 build of 0.4.12
If i understand your posts right, the bug applies for locked chests only because of an display-only-to-owners system.
This is not what I think. I was using the "default" mod of minetest_game in another subgame when discovering this bug, and it appeared on normal chests (so apparently there was no prediction by client). I am not using the single player, I start a server locally and then join. And I see no reason why this is exactly a 2sec interval. (just try it using the new listring feature.)
It maybe could be the display-to-owners-only code, but for any reason it is used for non-locked chests too. Are normal chests behaving like locked ones too?
Note: the default mod I used I downloaded in March or so, because I am using Mintest on Win7 too and the current minetest_game from github is not working in the stable win7 build of 0.4.12
-
- Member
- Posts: 4276
- Joined: Sun Sep 09, 2012 17:31
- GitHub: Sokomine
- IRC: Sokomine
- In-game: Sokomine
Re: Node metadata inventory is only updated every 2 seconds
No, that particular phenomenon only occours with locked chests. Of course block updates of non-locked chests also take some time - but that's usually less visible and thus less of a problem.
A list of my mods can be found here.
- orwell
- Member
- Posts: 958
- Joined: Wed Jun 24, 2015 18:45
- GitHub: orwell96
- IRC: orwell96_mt
- In-game: orwell
- Location: Raxacoricofallapatorius
Re: Node metadata inventory is only updated every 2 seconds
This discussion has died.
So I will revive it.
There is something like metadata and a specific interval, which does not only apply for inventories but for the forms itself. Read the posts above, this is also the case for the switches in the pipeworks sorting tube forms.
I'm playing Minetest for almost a year now and I recognized that I do not recognize those inventory lags anymore. Seems like one adjusts to it. But anyway, it is there, you can't deny!
So I will revive it.
There is something like metadata and a specific interval, which does not only apply for inventories but for the forms itself. Read the posts above, this is also the case for the switches in the pipeworks sorting tube forms.
I'm playing Minetest for almost a year now and I recognized that I do not recognize those inventory lags anymore. Seems like one adjusts to it. But anyway, it is there, you can't deny!
Re: Node metadata inventory is only updated every 2 seconds
I have this lag on multiplayer.
- orwell
- Member
- Posts: 958
- Joined: Wed Jun 24, 2015 18:45
- GitHub: orwell96
- IRC: orwell96_mt
- In-game: orwell
- Location: Raxacoricofallapatorius
Re: Node metadata inventory is only updated every 2 seconds
Finally, someone who understands me.
- Hybrid Dog
- Member
- Posts: 2828
- Joined: Thu Nov 01, 2012 12:46
- GitHub: HybridDog
Re: Node metadata inventory is only updated every 2 seconds
Maybe it's caused by that:
https://github.com/minetest/minetest/bl ... ample#L764
https://github.com/minetest/minetest/bl ... ample#L764
- yyt16384
- Member
- Posts: 46
- Joined: Mon Nov 03, 2014 12:16
- GitHub: yyt16384
- IRC: yyt16384
- In-game: yyt16384
- Location: China
Re: Node metadata inventory is only updated every 2 seconds
I think it is this one: https://github.com/minetest/minetest/bl ... e.cpp#L358Hybrid Dog wrote:Maybe it's caused by that:
https://github.com/minetest/minetest/bl ... ample#L764
It is not changed anywhere outside of this method, so once you set it to 2.0 you will not push blocks to send for 2 seconds, which looks wrong to me. Probably it should be reset when blocks are changed.
-
- New member
- Posts: 1
- Joined: Wed Dec 30, 2015 06:56
- GitHub: zefron
- IRC: zefron
- In-game: zefron
Re: Node metadata inventory is only updated every 2 seconds
thanks a lot for the information .....well done
Graduated from Soran University with First Class Degree with Honours in Computer Science.
- Hybrid Dog
- Member
- Posts: 2828
- Joined: Thu Nov 01, 2012 12:46
- GitHub: HybridDog
Re: Node metadata inventory is only updated every 2 seconds
l didn't know using goto is allowed…
How about increasing that value to e.g. 10 seconds and testing what happens?
How about increasing that value to e.g. 10 seconds and testing what happens?
- Hybrid Dog
- Member
- Posts: 2828
- Joined: Thu Nov 01, 2012 12:46
- GitHub: HybridDog
Re: Node metadata inventory is only updated every 2 seconds
l guess https://github.com/minetest/minetest/pull/3166 could fix the problem
- orwell
- Member
- Posts: 958
- Joined: Wed Jun 24, 2015 18:45
- GitHub: orwell96
- IRC: orwell96_mt
- In-game: orwell
- Location: Raxacoricofallapatorius
Re: Node metadata inventory is only updated every 2 seconds
Yes, this is it. I made a pull request for this.yyt16384 wrote:I think it is this one: https://github.com/minetest/minetest/bl ... e.cpp#L358Hybrid Dog wrote:Maybe it's caused by that:
https://github.com/minetest/minetest/bl ... ample#L764
It is not changed anywhere outside of this method, so once you set it to 2.0 you will not push blocks to send for 2 seconds, which looks wrong to me. Probably it should be reset when blocks are changed.
Who is online
Users browsing this forum: No registered users and 5 guests