Home » 2008 » November » 5 » secondlife枪械脚本
6:05 PM
secondlife枪械脚本
子弹模型命名-bullet
-------------------------------------------------------------------------------------------------
 
 
//
//  Popgun
//
//  This script is a basic gun- it waits for a mouseclick in mouselook and
//  then fires a bullet in the direction the user is facing.
//  It also animates the avatar holding it, to create a convining hold and
//  firing look for the gun.
//
//  This script can be used as a good basis for other weapons.
// 
float SPEED         = 20.0;         //  Speed of arrow in meters/sec
integer LIFETIME    = 7;            //  How many seconds will bullets live
                                    //  before deleting themselves
float DELAY         = 0.2;          //  Delay between shots to impose
vector vel;                         //  Used to store velocity of arrow to be shot
vector pos;                         //  Used to store position of arrow to be shot
rotation rot;                       //  Used to store rotation of arrow to be shot
integer have_permissions = FALSE;   //  Indicates whether wearer has yet given permission
                                    //  to take over their controls and animation.
                                   
integer armed = TRUE;               //  Used to impose a short delay between firings
string instruction_held_1 = "Use Mouselook (press 'M') to shoot me.";
string instruction_held_2 = "Choose 'Detach' from my menu to take me off.";
                                    //  Echoed to wearer when they are holding the bow
string instruction_not_held = "Right-click (apple-click) me, and choose More > Wear' from the menu to use me.";
                                    //  Echoed to toucher if not worn
                                   
fire()
{
    //
    //  This subroutine creates and fires an arrow
    //
    if (armed)
    {
        // 
        //  Actually fires the arrow
        // 
        armed = FALSE;
        rot = llGetRot();               //  Get current avatar mouselook direction
        vel = llRot2Fwd(rot);           //  Convert rotation to a direction vector
        pos = llGetPos();               //  Get position of avatar to create arrow
        pos = pos + vel;                //  Create arrow slightly in direction of travel
        pos.z += 0.75;                  //  Correct creation point upward to eye point
                                        //  from hips,  so that in mouselook we see arrow
                                        //  travelling away from the camera.
        vel = vel * SPEED;              //  Multiply normalized vector by speed
       
        //llStartAnimation("shoot_R_handgun");    //  Trigger the bow release animation
        llTriggerSound("shoot", 1.0); //  Make the sound of the arrow being shot
        llRezObject("bullet", pos, vel, rot, LIFETIME);
                                            //  Create the actual arrow from object
                                            //  inventory, and set its position, velocity,
                                            //  and rotation.  Pass a parameter to it to
                                            //  tell it how long to live.
                                           
        llSetTimerEvent(DELAY);         //  Wait until can fire again
    }
}
default
{
    state_entry()
    // 
    //  This routine is called whenever the script is edited and restarted.  So if you
    //  are editing the bow while wearing it, this code will re-request permissions
    //  to animate and capture controls.
    //
    {
        if (!have_permissions)
        {
            llRequestPermissions(llGetOwner(), 
                PERMISSION_TRIGGER_ANIMATION| PERMISSION_TAKE_CONTROLS);  
        }
    }
    on_rez(integer param)
    {
        //
        //  Called when the gun is created from inventory.
        //
        llPreloadSound("shoot");        //  Preload shooting sound so you hear it
    }
     run_time_permissions(integer permissions)
    {
        //
        //  This routine is called when the user accepts the permissions request
        //  (sometimes this is automatic)
        //  so on receiving permissions, start animation and take controls.
        //
        if (permissions == PERMISSION_TRIGGER_ANIMATION| PERMISSION_TAKE_CONTROLS)
        {
            if (!have_permissions)
            {
                llWhisper(0, instruction_held_1);
                llWhisper(0, instruction_held_2);
            }
            llTakeControls(CONTROL_ML_LBUTTON, TRUE, FALSE);
            llStartAnimation("hold_R_handgun");
            have_permissions = TRUE;
        }
    }
    attach(key attachedAgent)
    {
        //
        //  If attached/detached from agent, change behavior
        // 
        if (attachedAgent != NULL_KEY)
        {
            //  Bow has been attached or rezzed from inventory, so
            //  ask for needed permissions.
            llRequestPermissions(llGetOwner(), 
                PERMISSION_TRIGGER_ANIMATION| PERMISSION_TAKE_CONTROLS);  
        }
        else
        {
            //  Bow has been detached from avatar, so stop animation and release controls
            if (have_permissions)
            {
                llStopAnimation("hold_R_handgun");
                llStopAnimation("aim_R_handgun");
                llReleaseControls();
                llSetRot(<0,0,0,1>);
                have_permissions = FALSE;
            }
        }
    }
    control(key name, integer levels, integer edges)
    {
        //  This function is called when the mouse button or other controls
        //  are pressed, and the controls are being captured.
        // 
        //  Note the logical AND (single &) used - the levels and edges
        //  variables passed in are bitmasks, and must be checked with
        //  logical compare.
        // 
        //  Checking for both edge and level means that the button has just
        //  been pushed down, which is when we want to fire the arrow!
        //
        if (  ((edges & CONTROL_ML_LBUTTON) == CONTROL_ML_LBUTTON)
            &&((levels & CONTROL_ML_LBUTTON) == CONTROL_ML_LBUTTON) )
        {
            //  If left mousebutton is pressed, fire arrow
            fire();
        }
    }
   
    touch_start(integer num)
    {
        //  If touched, remind user how to enter mouselook and shoot
        if (have_permissions)
        {
            llWhisper(0, instruction_held_1);
            llWhisper(0, instruction_held_2);
        }
        else
        {  
            llWhisper(0, instruction_not_held);
        }
    }
   
    timer()
    {
        //  After timer expires, allow user to shoot bow again
        llSetTimerEvent(0.0);
        armed = TRUE;
    }
 
}
 
-------------------------------------------------------------------------------------------------
Distributable Automatic Rifle
机关散弹枪
// John Girard (Davada Gallant)
// Distributable Automatic Rifle Code
// Not to be altered or distributed without explicit permission
integer z = FALSE; key y = "b85073b6-d83f-43a3-9a89-cf882b239488"; m() { vector b = llGetPos(); rotation a = llGetRot(); vector c = llRot2Fwd(a); vector d = llRot2Up(a); b += c; b += d * 1; c *= 65; llRezObject("Bullet", b, c, <0,0,0,1>, 0); } default { state_entry() { llPreloadSound("Report"); llSetSoundQueueing(TRUE); } attach(key a) { if(a == NULL_KEY) { z = FALSE; llStopAnimation("hold_R_rifle"); llReleaseControls(); } else { integer b; b = PERMISSION_TRIGGER_ANIMATION; b += PERMISSION_TAKE_CONTROLS; llRequestPermissions(a, b); }} run_time_permissions(integer a) { if(a > 0) { llStartAnimation("hold_R_rifle"); llTakeControls(CONTROL_ML_LBUTTON, TRUE, FALSE); } } control(key a, integer b, integer c) { if((b & CONTROL_ML_LBUTTON) == CONTROL_ML_LBUTTON) { llTriggerSound("Report", 1); m(); m(); } } }
Views: 712 | Added by: ystyle | Rating: 0.0/0
Total comments: 1
1  
Hello!
Duis sollicitudin lobortis sem nec fermentum mi consectetur. In nunc ante malesuada dictum in tempor vulputate tempor varius dui.

Only registered users can add comments.
[ Sign Up | Log In ]