Копался в коде недолго но одна идейка почему это происходит есть.
И так перемещение шорткапа происходит в 2 пакета.
Первым пакетом идет clientpackets.RequestShortCutReg , регистрирует шорткап в новый слот и при регистрации отправляет пакет на обновление всего одного слота, второй пакет clientpackets.RequestShortCutDel удаляет шорткап со старого слота и делает полный апдейт шорткапов пакетом serverpackets.ShortCutInit.
Единственный возможный вариант мне предполагается, такая последовательность:
прием пакета регистрации
прием пакета удаления
отправка пакета с добавлением шорткапа
удаление шорткапа
отправка пакета с обновлением всех шорткапов
регистрация шорткапа в шортакапах игрока
Да и код в пакете регистрации написан так что такой вариант возможен
PHP код:
L2ShortCut sc = new L2ShortCut(_slot, _page, _type, _id, -1, _unk);
sendPacket(new ShortCutRegister(sc));
activeChar.registerShortCut(sc);
может быть смена местами строчек регистрации с отправлением пакетов поможет, если нет то нужно будет думать дальше...