User:Talarus Luan/WarpPosModule

From Second Life Wiki
Jump to navigation Jump to search

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>