Le plus simple est avec llGiveInventory(N°duPrimDansLeLinkset, NomDuScript).
Je me suis écrit ce petit script, qui donne tous les scripts dans le root sauf lui-même à tout le linkset et efface tout dans le root.
default{
state_entry(){
integer nbscript = llGetInventoryNumber(INVENTORY_SCRIPT);
integer i;
integer j;
list scripts;
for (i=0;i<nbscript;i++){
string script = llGetInventoryName(INVENTORY_SCRIPT,i);
if (script != llGetScriptName()) scripts += [script];
}
nbscript--;
integer nb = llGetNumberOfPrims()+1;
for (i=2;i<nb;i++){
key keyprim = llGetLinkKey(i);
for (j=0;j<nbscript;j++)
llGiveInventory(keyprim,llList2String(scripts,j));
}
for (j=0;j<nbscript;j++)
llRemoveInventory(llList2String(scripts,j));
llOwnerSay("end give scripts");
llRemoveInventory(llGetScriptName());
}
}
Mais attention: les scripts ainsi distribués sont dans l'état no-running. Pour les faire tourner soit:
- Prendre l'objet dans son inventaire et le ressortir (c'est comme ça pour le puppeteer)
- Recompiler tous les scripts avec Outils Recompiler les scripts dans la sélection
Attention à la recompilation: l'expérience sur de gros linkset (chevelure de plusieurs dizaines voire quelques centaines de prim) est longue (15 à 30 mn) et rate parfois un script par-ci par-là.
L'autre solution est d'utiliser
llRemoteLoadScriptPin, qui permet de copier le script et de le lancer.
Mais elle a un délai de 3 secondes et est donc inutilisable sur les gros linkset (sauf à revenir dans plusieurs heures), et nécessite une affectation préalable d'un numéro de pin au prim récepteur avec
llSetRemoteScriptAccessPin, qui ne peut se faire que par un script
dans le prim récepteur (on revient donc à la premiére solution).
En résumé sur de gros linkset où on veut mettre un ou plusieurs script par prim on ne sait pas le faire sans intervention humaine. Et pour le faire automatiquement, il faut que le linkset soit préparé à la conception pour ça.
Edit: De tout manière, avec la nouvelle fonction
llSetLinkPrimitiveParamsFast qui permet de faire à peu près tout sans délai depuis le root ce n'est plus utile de continuer à faire ces usines à lag. Le puppeteer mériterait d'être re-écrit. J'avais envie de m'y atteler à un moment.