User:Talarus Luan/WarpPosModule

From Second Life Wiki
< User:Talarus Luan
Revision as of 20:37, 10 April 2008 by Talarus Luan (talk | contribs) (New page: Here ya go, folks: Havok4 WarpPos Module Script. Just drop into your object and call it like so: <lsl> llMessageLinked(LINK_SET,0x3E00,(string)vDestinationPos,""); </lsl> <lsl> //*******...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Here ya go, folks: Havok4 WarpPos Module Script. Just drop into your object and call it like so:

<lsl> llMessageLinked(LINK_SET,0x3E00,(string)vDestinationPos,""); </lsl>

<lsl> //******************************************************************************** // Name  : WarpPos Module Script // Author: Talarus Luan // Description: // This script implements WarpPos called via link_message. // Use: // Function Codes: Call with (giModuleID << 8 + FuncCode) to llMessageLinked integer param // 0 = In-sim WarpPos, string parameter is a fully-formatted vector // Responds via LM with Response code in upper 16 bits of integer param to link_message // License: // Public Domain // If ya like it, use it. Share it. Charge for it. Whatever. Everyone else will, too! // Disclaimer: // Everything, especially how nasty the code looks. LSL Optimization 4TL! //******************************************************************************** // Update History: // 2006/06/03 - Initial Implementation - v0.0 // 2007/12/06 - Cleaned up - v1.0 // 2008/03/26 - Optimized memory usage for up to 4096m Warps - v1.1 //********************************************************************************

//================================================================================ // Global Variables //================================================================================

//-------------------------------------------------------------------------------- // Control Constant Defaults - modify these to change the behavior of the script //--------------------------------------------------------------------------------

//string gsStartup = "WarpPos Module v1.1 by Talarus Luan"; //integer giDebugFlags = 0; // Sets script debug flags integer giModuleID = 0x3E;

//-------------------------------------------------------------------------------- // Variables //--------------------------------------------------------------------------------

//================================================================================ // User-defined Functions //================================================================================

//-------------------------------------------------------------------------------- // WarpPos function - Move to destination position instantly // // Credits: // Original Discovery by Keknehv Psaltery // Cleanup/Optimization by Strife Onizuka, Talarus Luan // Havok4 modularization by Talarus Luan //-------------------------------------------------------------------------------- WarpPos(vector pvDestPos) {

   integer liJumps = (integer)(llVecDist(pvDestPos, llGetPos()) / 10.0) + 1;
   // Try and avoid stack/heap collisions
   if (liJumps > 410)
       liJumps = 410;                              // Farthest for H4
   list laRules = [ PRIM_POSITION, pvDestPos ];    // The start for the rules list
   integer liCount = 1;
   while ( ( liCount = liCount << 1 ) < liJumps)
       laRules = (laRules=[]) + laRules + laRules;   //should tighten memory use.
   llSetPrimitiveParams( (laRules=[]) + laRules + llList2List( laRules, (liCount - liJumps) << 1, liCount) );

}

//******************************************************************************** // Script States //********************************************************************************

//================================================================================ // State default //================================================================================

default {

   //--------------------------------------------------------------------------------
   // link_message event
   //--------------------------------------------------------------------------------
   link_message(integer piSender, integer piData, string psData, key pkID) {
       integer liModule = (piData >> 8) & 0xFF;
       integer liCommand = piData & 0xFF;
       if (liModule == giModuleID)
           if (liCommand == 0) {
               WarpPos((vector)psData);
               llMessageLinked(LINK_SET,(piData >> 16) & 0xFFFF,"","");
           }
   }

}

//******************************************************************************** // End //******************************************************************************** // Notes on hungarian notation used for identifiers in my scripts: // First letter indicates scope // g - global // l - local // p - function parameter // Second letter indicates type // i - integer // f - float // v - vector // r - rotation // s - string // k - key // a - array (list, actually, but local list names may conflict with library // function identifiers (eg, "llListen") ) //******************************************************************************** </lsl>