/* Add this script to a SFposer/PMAC object to remove the unused animations from inventory Add the script, then say 'remove' in public chat */ list ans; list toRemove; default { state_entry() { integer i=0; integer tot = llGetInventoryNumber(INVENTORY_NOTECARD); for (i=0; i < tot; i++) { string nc = llGetInventoryName(INVENTORY_NOTECARD, i); if (llGetSubString(nc, 0, 4) == ".menu") { llOwnerSay("Processing "+nc); list lines = llParseStringKeepNulls(osGetNotecard(nc), ["\n"], []); integer ln ; for (ln=0; ln < llGetListLength(lines) ; ln++) { list tok = llParseStringKeepNulls( llList2String(lines, ln), ["|"], []); integer tk; for (tk = 2; tk < llGetListLength(tok); tk += 3) { if (llListFindList(ans, [llList2String(tok, tk) ]) < 0) ans += llList2String(tok, tk); } } } } tot = llGetInventoryNumber(INVENTORY_ANIMATION); for (i=0; i < tot; i++) { string an = llGetInventoryName(INVENTORY_ANIMATION, i); if (llListFindList(ans, [an]) < 0) { if (llGetSubString(an, 0, 0) != "~") { llOwnerSay("Not used= " + an); toRemove += an; } } } llOwnerSay("Found "+(string)llGetListLength(toRemove)+" unused animations"); llOwnerSay("Say 'remove' to delete them"); llListen(0, "", llGetOwner(), "remove"); } listen(integer n, string nm, key id, string msg) { if (msg == "remove") { integer i; for (i=0; i < llGetListLength(toRemove); i++) { string an = llList2String(toRemove, i); llOwnerSay("Removing " + an); llRemoveInventory(an); } llOwnerSay("Removing myself"); llRemoveInventory(llGetScriptName()); } } }