I'm using the latest gtk client and server from master.
I added a label to the central Drinking Fountain in Scorn:
diff --git a/world/world_105_115 b/world/world_105_115
index f168d9fa8..4352f16de 100644
--- a/world/world_105_115
+++ b/world/world_105_115
@@ -2942,6 +2942,7 @@ y 39
elevation 9033
end
arch well
+label Drink me!
name Drinking Fountain
slaying /scorn/kar/drink
hp 1
When I first see the fountain, the label is shown correctly.
I then walk to the south of the Private Shop, just south of the Drinking Fountain so the fountain becomes a fog of war tile and then the label is removed in the client's mapdata_clear_old function. I think that should instead be something the server decides by sending a subtype 0 for that tile, but ok.
I then walk north two steps so the fountain is once again clearly visible. Now the label is still not shown. I have to walk over to the fountain tile to make it visible again.
So either the server should send the label again when it becomes visible (but then I think the server should really be the one that removes it too), or the client shouldn't have removed it from the mapdata, Only not drawn it when drawing fog of war tiles.
When walking onto the fountain, the server also starts sending map2 over and over again with the labels:
[II] 65,769558 (Map2Cmd) label 5 Drink me! (1)
[II] 65,769586 (Map2Cmd) label 1 Player (0)
[II] 65,922765 (S->C) len=26 cmd=map2 |mP....Drink me!....Player.|
[II] 65,922817 (Map2Cmd) (12, 6)
[II] 65,922830 (Map2Cmd) label 5 Drink me! (1)
[II] 65,922848 (Map2Cmd) label 1 Player (0)
[II] 66,008942 (S->C) len=26 cmd=map2 |mP....Drink me!....Player.|
[II] 66,008993 (Map2Cmd) (12, 6)
[II] 66,009007 (Map2Cmd) label 5 Drink me! (1)
[II] 66,009024 (Map2Cmd) label 1 Player (0)
[II] 66,233976 (S->C) len=26 cmd=map2 |mP....Drink me!....Player.|
That doesn't look right to me.
Thank you for the report. I was able to reproduce both issues. Both are related to how map state diffing is done on the server.
In the first case, I think the server needs to update its logic.
In the second case, I only designed the label handling code to diff correctly when there is at most one label per tile. So, when there are two labels per tile, the server sends both labels each tick. It is not incorrect per-se, just a bit inefficient. Are there plans to make substantial use of multiple labels per tile?