//:://///////////////////////////////////////////// //:: Emote Wand: Lap Sit 90 degrees //:: onConv emotewand //::////////////////////////////////////////////// /* 1: find nearest chair/seat in use. 2: create lap and sit on it */ //::////////////////////////////////////////////// //-- ripped from: // chair sitting script by Jhenne // script modified to allow sitting on laps // with Sittable Objects v2.0 by Ranot // //-- by bloodsong //::////////////////////////////////////////////// void DestroyLap(object oLap) { object oSitter = GetSittingCreature(oLap); if(!GetIsObjectValid(oSitter)) { //-- no sitter, blow it up DestroyObject(oLap); return; } //-- else someone is still sitting on it, wait DelayCommand(300.0, DestroyLap(oLap)); } void main() { //-- Step One: find the nearest chair/seat and a lap in it object oPC = GetPCSpeaker(); object oChair = GetNearestObjectByTag("Chair"); object oSeat = GetNearestObjectByTag("Seat"); float fDistanceChair = GetDistanceToObject(oChair); float fDistanceSeat = GetDistanceToObject(oSeat); //-- if non existant (-1) change to vast distance if(fDistanceChair == -1.0) { fDistanceChair = 1000.0; } if(fDistanceSeat == -1.0) { fDistanceSeat = 1000.0; } object oLap; if(fDistanceChair > fDistanceSeat) { //-- chair is further, use seat oLap = oSeat; } else { //-- note, chair selected over seat when same dist oLap = oChair; } object oLapper = GetSittingCreature(oLap); if(!GetIsObjectValid(oLapper)) { //-- nobody sitting in that chair/seat SendMessageToPC(oPC, "No nearby laps found."); return; } //-- Step Two: Create the Lap and Sit In It //-- jhenne's facing calculations vector vSit = GetPosition(oLap); float fDir = 0.0; if (GetFacing(oLap) >= 0.0 && GetFacing(oLap) <= 90.0) { fDir = 90 + GetFacing(oLap); } if (GetFacing(oLap) > 90.0 && GetFacing(oLap) <= 180.0) { fDir = 90.0 + GetFacing(oLap); } if (GetFacing(oLap) > 180.0 && GetFacing(oLap) <= 270.0) { fDir = GetFacing(oLap) + 90.0; } if (GetFacing(oLap) > 270.0 && GetFacing(oLap) <= 360.0) { fDir = GetFacing(oLap) - 270.0; } //--SD's position calculation float fLapLength = -0.3 ; float fSitterFacing = GetFacing(oLap); vector vPosition = GetPositionFromLocation(GetLocation(oLap)) ; float fPosX = vPosition.x + cos(fSitterFacing)*fLapLength; float fPosY = vPosition.y + sin(fSitterFacing)*fLapLength; vector vLapPosition = Vector(fPosX, fPosY, 0.0) ; //--siddown! location lSit = Location(GetArea(oLap),vLapPosition,fDir); object oSit = CreateObject(OBJECT_TYPE_PLACEABLE, "invisiblelap", lSit,FALSE); DelayCommand(16.0, DestroyLap(oSit)); ActionSit(oSit); }