script d animation sur objet porter

Répondre
Partager Rechercher
bonjour voici un script qui permet de porter un objet comme une pole dance sur soit avec un menu pour les animation
je remercie MenthalOH d'avoir affiné le script, maintenant il faudrait pouvoir ajuster la hauteur et la position droite gauche de l avatar sur l'objet, pour exemple danser sur une table.


list ANIM_MENU;
list REF_MENU;
integer COUNT = 1;

string anim = "strip1";

integer channel;
integer listenHandle;

Stop_all_Anims()
{
list animations = llGetAnimationList(owner);
integer i;
for(i = 0; i < llGetListLength(animations); ++i)
{
llStopAnimation(llList2Key(animations, i));
}
}


list order_buttons(list buttons)
{
return llList2List(buttons, -3, -1) + llList2List(buttons, -6, -4) +
llList2List(buttons, -9, -7) + llList2List(buttons, -12, -10);
}

PresentMenu()
{
integer nb_danses = llGetInventoryNumber(INVENTORY_ANIMATION);
if(nb_danses <= 11)
{
ANIM_MENU = ["STOP"];
REF_MENU = ["STOP"];
integer i;
for(i = 0; i < nb_danses; ++i)
{
string name = llGetInventoryName(INVENTORY_ANIMATION, i);
if(name != "")
{
ANIM_MENU += name;
integer x = llStringLength(name);
if(x > 12)
{
name = llGetSubString(name, x - 10, x - 1);
}
REF_MENU += name;
}
}
}
else
{
ANIM_MENU = ["<<<","STOP", ">>>"];
REF_MENU = ["<<<","STOP", ">>>"];
integer start = (COUNT * 9) -9;
integer stop = (COUNT * 9) - 1;
integer i;
for(i = start; i <= stop; ++i)
{
string name = llGetInventoryName(INVENTORY_ANIMATION, i);
if(name != "")
{
ANIM_MENU += name;
integer x = llStringLength(name);
if(x > 12)
{
name = llGetSubString(name, x - 10, x - 1);
}
REF_MENU += name;
}
}
}
llSetTimerEvent(30.0);
llDialog(owner, "Choise une anim", REF_MENU, channel);
}

key owner;

default
{
on_rez(integer param)
{
llResetScript();
}

state_entry()
{
channel = (integer)("0xA" + llGetSubString((string)llGetKey(), 0,6 ));
owner =llGetOwner();
llRequestPermissions(owner, PERMISSION_TRIGGER_ANIMATION);
}

run_time_permissions(integer permissions)
{
if (permissions > 0)
{
Stop_all_Anims();
llStartAnimation(anim);
}
}

attach(key attachedAgent)
{
if (attachedAgent != NULL_KEY)
{
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
}

else
{
Stop_all_Anims();
llResetScript();
}
}

touch_start(integer num)
{
key id= llDetectedKey(0);
if(id==owner)
{
llListenRemove(listenHandle);
listenHandle = llListen(channel, "", owner, "");
PresentMenu();
}
}

listen(integer chan, string name, key id, string msg)
{
if(msg =="STOP")
{
Stop_all_Anims();
llResetScript ();
}

else if(msg == ">>>")
{
float MAX = llGetInventoryNumber(INVENTORY_ANIMATION);
MAX = MAX / 9.0;
integer MAXIMUM = llCeil(MAX);
++COUNT;
if(COUNT > MAXIMUM)
{
COUNT = 1;
}
PresentMenu();
}
else if(msg == "<<<")
{
if(COUNT > 1)
{
--COUNT;
}
else
{
float MAX = llGetInventoryNumber(INVENTORY_ANIMATION);
MAX = MAX / 10.0;
integer MAXIMUM = llCeil(MAX);
COUNT = MAXIMUM;
}
PresentMenu();
}

else
{
llListenRemove(listenHandle);
llSetTimerEvent(0.0);

integer index = llListFindList(REF_MENU, [msg]);
string dance = llList2String(ANIM_MENU, index);
Stop_all_Anims();
llStartAnimation(dance);
}
}

timer()
{
llListenRemove(listenHandle);
llSetTimerEvent(0.0);
}

changed (integer change)
{
if (change & CHANGED_OWNER)
llResetScript ();
}
}
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés