Краткий ответ: Вы неправильно указали свой массив и нуждаетесь в другом наборе [скобок].
Итак, вы создали трехмерный массив пользователей, называемый «игровая доска».При добавлении пользователя вы правильно помещаете структуру в динамическое 3-е измерение вашего массива.Однако, когда вы получаете доступ к структурам, вы даете только два измерения, и поэтому Solidity возвращает динамический пользовательский массив.Поскольку вы пытаетесь сохранить его в структуре, а не в массиве структур, выдается ошибка.Самый простой способ исправить это - использовать:
User memory mover = gameBoard[_fromX][_fromY][0];
Однако при этом возвращается только первый пользователь в этой позиции на игровом поле, поэтому вам, вероятно, потребуется выполнить какое-то зацикливание (а это неидеал в контрактах).Лично я предпочитаю держаться подальше от многомерных массивов и, честно говоря, от всех массивов в целом (хотя они и используются) при работе с Solidity.Обычно с отображениями работать намного проще, особенно при работе с адресами.Не могли бы вы уточнить, что вы пытаетесь сделать, если есть лучший способ добиться этого?