A IA é boa para quem sabe o que está acontecendo, sugiro estudar primeiro a source. A IA deixa muita coisa errada, abre muitas brechas, é importante fazer sozinho primeiro para saber se a IA gerou algum código indesejado ( Llxo ).
Mas, tentando explicar melhor, o ID do MOB define o que ele é para o jogo. Tudo que tiver ID entre 1 - 999, é tratado como jogador, então uma loja "real" precisa ter um ID menos que 1000, se for maior, será tratado como NPC ou Monstro.
A parte do pacote, servidor e tal, é mais para depuração, não precisa fazer.
Olhando o código, achei alguns detalhes:
pMob[tmob].Leader = conn; // dono da loja
pMob[tmob].WaitSec = Type == 0 ? 10 : 40;
pMob[tmob].LastTime = CurrentTime;
pMob[tmob].Leader = 0;
Leader é setado duas vezes, se isso ocorreu tão perto um do outro, deve ter muita coisa a mais que pode ser removida.
pMob[tmob].MOB.BaseScore.Merchant = 0;
Merchant é o que define o que o mob "faz". Mudar o merchant significa que algo pode ser um NPC de loja, de teleporte/quest, de skills, de guerra, etc etc etc. Eu não lembro de cabeça, mas o merchant 0 definitivamente não é de loja.
Procure na source, se não tiver, procure na source do cliente ( TMProject ), ache a lista de Merchants, veja qual é a da loja/lojinha e altere o código para ter esse valor.
Sem o merchant correto, o mob não vai ser clicável, pode ser só um mob para ser atacado, mas por estar dentro da cidade, pode não ser possível.