Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //::///////////////////////////////////////////////
- //:: aa_s0_passdoor
- //:://////////////////////////////////////////////
- /*
- Spell Script for Pass Door
- Transports caster to the door's destination or the otherside of the door
- Thanks to LightFoot8 for providing the function: RunRatUnderDoor
- http://social.bioware.com/forum/1/topic/192/index/9060079#9063589
- */
- //:://////////////////////////////////////////////
- //:: Created By: The Magus (2012 jan 24)
- //:: Modified:
- //:://////////////////////////////////////////////
- #include "aa_inc_constants"
- #include "x2_inc_spellhook"
- //#include "x0_i0_position"
- void RunRatUnderDoor(object oRat, object oDoor)
- {
- // Get the posistion for the rat.
- vector vRat = GetPosition(oRat);
- // Get the position for the door
- vector vDoor = GetPosition(oDoor);
- // Subtract the position of the rat from the position of the door.
- // To get the vector representing the position of the rat from the door.
- // basicly what we are doing is both the rat and the door have (X,Y) positions
- // (Rx,Ry) and (Dx,Dy)
- // if we subtract the position of the rat from both of them in effect moving
- // the line segment to where the rat is at cords (0,0) the
- // (Rx,Ry) - (Rx,Ry) = (0,0)
- // (Dx,Dy) - (Rx-Ry) = (Dx-Rx,Dy-Ry)
- // in effect moving the line segment to where the rat is at cords (0,0) the
- // the (Dx-Rx,Dy-Ry) Is in effect the vector showing both distance and
- //Direction that the door is from the rat.
- vector vDoorFromRat = vDoor-vRat;
- //To get the position 1 unit beyond the door in a stright line from where
- // the rat currently is, all we have to do is normilize the vector and add
- // it to the position of the door.
- vector vPastDoor1M = vDoor + VectorNormalize(vDoorFromRat);
- //Build a location with the new vector and have the rat face in the same
- //Direction that the door was from him. .
- location lPastDoor = Location(
- GetArea(oRat),
- vPastDoor1M,
- VectorToAngle(vDoorFromRat)
- );
- // Clear rats action que
- AssignCommand(oRat,ClearAllActions(TRUE));
- //Run to the door
- AssignCommand(oRat,ActionMoveToObject(oDoor,TRUE));
- //Lay flat
- AssignCommand(oRat,ActionPlayAnimation( ANIMATION_LOOPING_GET_LOW,1.0,2.0));
- // Squezze under.
- AssignCommand(oRat,ActionJumpToLocation(lPastDoor));
- }
- void main()
- {
- /*
- Spellcast Hook Code
- check x2_inc_spellhook.nss to find out more
- */
- if (!X2PreSpellCastCode())
- {
- // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
- return;
- }
- // End of Spell Cast Hook
- // object oCaster = GetLastSpellCaster();
- object oCaster = OBJECT_SELF;
- object oDoor = GetSpellTargetObject();
- if ( !GetIsObjectValid(oCaster) || GetObjectType(oDoor)!= OBJECT_TYPE_DOOR)
- {
- return;
- }
- if(GetIsOpen(oDoor))
- {
- SendMessageToPC(oCaster, RED+"The door is open. Try walking through it instead.");
- return;
- }
- else if(GetLockKeyRequired(oDoor) || GetLocalInt(oDoor,"MAGIC") || GetLocalInt(oDoor,"NO_PASS"))
- {
- SendMessageToPC(oCaster, DMBLUE+"You are unable to find an opening to pass through.");
- return;
- }
- object oDest = GetTransitionTarget(oDoor);
- if(GetIsObjectValid(oDest))
- {
- AssignCommand(oCaster, ClearAllActions(TRUE) );
- AssignCommand(oCaster, ActionMoveToObject(oDoor,TRUE) );
- AssignCommand(oCaster, ActionPlayAnimation( ANIMATION_LOOPING_GET_LOW,1.0,2.0) );
- if(GetObjectType(oDest)== OBJECT_TYPE_DOOR)
- {
- vector vDoor = GetPosition(oDest);
- location lPastDoor = Location(
- GetArea(oDest),
- vDoor+VectorNormalize(vDoor),
- GetFacing(oDest)
- );
- AssignCommand(oCaster, ActionJumpToLocation(lPastDoor) );
- }
- else
- AssignCommand(oCaster, ActionJumpToObject(oDest) );
- }
- else
- {
- /*
- float fFace = GetFacing(oDoor);
- location lDoorF = GenerateNewLocation(oDoor, 1.0,
- fFace, fFace
- );
- location lDoorR = GenerateNewLocation(oDoor, 1.0,
- GetNormalizedDirection(fFace+180.0), fFace
- );
- location lPC = GetLocation(oCaster);
- if(GetDistanceBetweenLocations(lDoorF,lPC)>GetDistanceBetweenLocations(lDoorR,lPC))
- {
- ClearAllActions();
- ActionJumpToLocation( lDoorF );
- }
- else
- {
- ClearAllActions();
- ActionJumpToLocation( lDoorR );
- }
- */
- RunRatUnderDoor(oCaster, oDoor);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement