Tirei a variável part, não estava sendo usada.
Mudei o doPlayerSay para doCreatureSay.
Tirei as words, senão não iria funcionar o param.
Agora é só colocar em talkactions.xml:
<talkaction words="!castle" script="nomedoscript.lua" />
E usar por exemplo:
!castle "Set Lightning
Daí vai sair:
A guerra das guilds no Castelo Imperium acabou de começar. GUILDS PREPAREM-SE! Valendo: Set Lightning!!"
Ah, também removi o \n que não funciona em funções que o player falaria.
Retornei o script em TRUE, mas vai aparecer o !castle e o parâmetro, se quiser, retorne em FALSE, dá no mesmo. Se não adiantar no FALSE, dê return true e depois return false, irá funcionar.
Tchau.