Uma bola de dança (danceball) é um objecto que poderá ser de bastante utilidade quando planeamos dar uma festa. Convenhamos que não é de todo simpático contar que os convidados tenham as suas próprias danças. Há bolas de dança à venda por todo o SL com vários modelos, feitios, cores, efeitos mas com a mesma funcionalidade: permitir que os avatares clicam no objecto e sejam animados por este.
Criar uma danceball é bastante simples. Basta rezzarem um objecto (uma primitiva, vulgo um prim), nomeadamente uma esfera. Em seguida, colorir o objecto ou adaptar uma textura que gostem e dar um nome ao objecto. Após o objecto estar pronto deverão, no inventário, criar um novo script, copiar na íntegra o texto abaixo e salvar. O script ficará guardado na pasta de sistema Scripts nos recent items. Recordem-se que, caso não alterem as propriedades do scripts, este ficará (por defeito) como No Copy, No Modify e No Transfer. Agora, clicam na bola, escolhem edit e seleccionam a tab Contents. Para colocar o script dentro da bola basta arrastá-lo para dentro da tab Contents. E a vossa bola de dança para 11 danças está pronta!

// Just add this script into a prim with up to 11 dances and touch the prim to start

string dances;
list dance_buttons;
integer chat_channel = -468;
integer dance_number;

stopAllDances()
{
integer total_dances = llGetInventoryNumber(INVENTORY_ANIMATION);
integer i = 0;
while(i < total_dances) { llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, i++)); } } default { state_entry() { integer total_dances = llGetInventoryNumber(INVENTORY_ANIMATION); if(total_dances > 11) total_dances = 11;
integer i = 0;
while(i < total_dances) { dances = (dances = "") + dances + (string)(++i) + " " + llGetInventoryName(INVENTORY_ANIMATION, i) + "\n"; dance_buttons = (dance_buttons = []) + dance_buttons + (string)i; } dance_buttons = (dance_buttons = []) + dance_buttons + "STOP"; llListen(chat_channel, "", NULL_KEY, ""); } touch_start(integer total_number) { llDialog(llDetectedKey(0), dances, dance_buttons, chat_channel); } listen(integer channel, string name, key id, string message) { if(message == "STOP") dance_number = -1; else dance_number = (integer)message - 1; llRequestPermissions(id, PERMISSION_TRIGGER_ANIMATION); } changed(integer change) { if(change & CHANGED_INVENTORY) llResetScript(); } run_time_permissions(integer perms) { if(perms & PERMISSION_TRIGGER_ANIMATION) { stopAllDances(); if(dance_number > -1)
{
llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, dance_number));
}
}
}
}

Fonte: LSL Wiki : LibraryDanceBall