| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- // :CATEGORY:Dance
- // :NAME:Dancer
- // :AUTHOR:Ferd Frederix
- // :CREATED:2013-09-06
- // :EDITED:2013-09-18 15:38:51
- // :ID:214
- // :NUM:289
- // :REV:1
- // :WORLD:Second Life
- // :DESCRIPTION:
- // Dance Server
- // :CODE:
- // Open source do with as you want license by Ferd Frederix
- // plays a random bunch of animations that are located in the prim inventory when it is attached or rezzed.
- integer INTERVAL = 30; // how many seconds to play each dance, randomly
- // just some constants, nothing here. Move on.
- list dances;
- integer WHICH; // which dance
- integer TOTAL; // how many dances
- integer PERMS; // current permissions
- integer STATE; // off if flase, 1 = next dance, 2 = random
- integer listener; // the current listener, so we can remove it.
- integer counter; // counter for timer to auto stop listeners;
- // pop up a dialog boz
- dialog()
- {
- llListenRemove(listener);
- integer channel = llCeil(llFrand(1000)+100 * -1);
- listener = llListen(channel,"","","");
- llDialog(llGetOwner(),"Choose",["Next Dance","Stop Dance","Random"], channel);
- }
- default
- {
- state_entry()
- {
- // load up the current animation inventory into a list
- integer i;
- integer j = llGetInventoryNumber(INVENTORY_ANIMATION);
- for (i = 0; i < j; i++)
- {
- dances += llGetInventoryName(INVENTORY_ANIMATION,i); // add to a list
- TOTAL++;
- }
- STATE = 1; // dance sequentially
- llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
- dialog();
- }
- // was rezzed or attached, start over
- on_rez(integer param)
- {
- llResetScript();
- }
- // someone added or deleted an animation. Start over and ake a new list and
- changed(integer what)
- {
- if (what & CHANGED_INVENTORY)
- llResetScript();
- }
-
- timer()
- {
- // since they may hit ignore on the dialog, we count two passes at rthe timer, then kill off any listener.
- if (listener)
- counter++;
- if (counter)
- llListenRemove(listener); // remove the listener after two passes to help with lag
- // now lets see what to do
- PERMS = llGetPermissions();
- if (PERMS & PERMISSION_TRIGGER_ANIMATION)
- {
-
- if (STATE == 1) // sequential play
- {
- llStopAnimation(llList2String(dances, WHICH)); // quit the current
- WHICH++;
- if (WHICH >= TOTAL)
- {
- WHICH = 0;
- }
- llStartAnimation(llList2String(dances, WHICH)); // start next one.
- llOwnerSay("Dance:" + llList2String(dances, WHICH));
- }
- else if (STATE == 2) // random play
- {
- llStopAnimation(llList2String(dances, WHICH));
- WHICH = llCeil(llFrand(TOTAL))-1;
- llStartAnimation(llList2String(dances, WHICH));
- llOwnerSay("Dance:" + llList2String(dances, WHICH));
- }
- llSetTimerEvent(INTERVAL);
- }
- else
- {
- // dang, no permissions, oh well, ask for them
- llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
- }
- }
-
-
- listen(integer channel, string name, key id, string message)
- {
- llListenRemove(listener); // save lag
- PERMS = llGetPermissions();
- if (message == "Stop Dance")
- {
- STATE = FALSE;
- if (PERMS & PERMISSION_TRIGGER_ANIMATION)
- {
- llStopAnimation(llList2String(dances, WHICH));
- }
- llSetTimerEvent(0); // shit it all down
- }
- else if (message == "Next Dance")
- {
- if (!(PERMS & PERMISSION_TRIGGER_ANIMATION))
- {
- llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
- }
- STATE = 1; // flag ithis as sequential
- }
- else if ( message == "Random")
- {
- if (!(PERMS & PERMISSION_TRIGGER_ANIMATION))
- {
- llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
- }
- STATE = 2; // flag this as random
- }
- }
- touch_start(integer who)
- {
- if (llDetectedKey(0) == llGetOwner()) // only the owner can do this as we can control only one avatar at a time
- {
- dialog();
- }
- }
-
- run_time_permissions(integer perm)
- {
- PERMS = perm;
- llSetTimerEvent(1.0); // trigger the logic in one second
- }
- }
- // END //
|