Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- float sensorRange = 100.0;
- integer index;
- integer menuChan;
- integer menuHandle;
- integer offsetTest = 0;
- integer rezTest = 0;
- key id;
- //You can change the heights that you want for destinations here in this list.
- list destList =["start", "ground", "100", "200", "500", "1000", "2000", "3000", "4000"];
- list objList;
- list offsetList;
- string rezObj;
- vector infVec = <1.304382E+19, 1.304382E+19, 0.0 >;
- vector rezOffset = <0, 0, 0 >;
- vector startPos;
- vector target;
- inventory()
- {
- objList =[];
- integer invCnt = llGetInventoryNumber(INVENTORY_OBJECT);
- integer x;
- for (x = 0; x < invCnt; x++) {
- objList += (list) llGetInventoryName(INVENTORY_OBJECT, x);
- offsetList += <0, 0, 0 >;
- }
- }
- posJump()
- {
- llSetPrimitiveParams([PRIM_POSITION, infVec, PRIM_POSITION, target]);
- }
- default {
- state_entry() {
- llSetClickAction(CLICK_ACTION_SIT);
- startPos = llGetPos();
- llSetText("Sit and pick from menu", <0, 0, 0 >, 1.0);
- menuChan = (integer) llFrand(-1000000) - 1000000;
- inventory();
- }
- on_rez(integer start_param) {
- llSetClickAction(CLICK_ACTION_SIT);
- startPos = llGetPos();
- }
- listen(integer channel, string name, key id, string msg) {
- if ("Height" == msg)
- llDialog(id, "Pick an elevation", destList, menuChan);
- else if ("Object" == msg)
- llDialog(id, "Pick an object", objList, menuChan);
- else if ("Set Offset" == msg) {
- llOwnerSay("Move seat to desired position then touch again to set offet" + "\nMaximum 10 meters");
- offsetTest = 1;
- }
- else if (~llListFindList(destList,[msg]) && llAvatarOnSitTarget() != NULL_KEY) {
- llSay(menuChan, "die");
- target = startPos;
- if (msg == "ground") {
- vector primSize = llGetScale();
- target.z = llGround(ZERO_VECTOR) + (primSize.z / 2);
- llSensorRemove();
- }
- else if (msg == "start") {
- target = startPos;
- llSensorRemove();
- }
- else {
- target.z = (float) msg;
- rezTest = 1;
- }
- posJump();
- if (rezTest) {
- if (rezObj == "")
- rezObj = llGetInventoryName(INVENTORY_OBJECT, 0);
- llRezObject(rezObj, llGetPos() + rezOffset, ZERO_VECTOR, ZERO_ROTATION, menuChan);
- rezTest = 0;
- llSensorRepeat("", "", AGENT, sensorRange, PI, 60.0);
- }
- llUnSit(llAvatarOnSitTarget());
- }
- else if (~llListFindList(objList,[msg])) {
- index = llListFindList(objList,[msg]);
- rezObj = msg;
- rezOffset = llList2Vector(offsetList, index);
- llDialog(id, "Pick an elevation", destList, menuChan);
- }
- }
- touch_start(integer total_number) {
- if (!offsetTest) {
- id = llDetectedKey(0);
- menuHandle = llListen(menuChan, "", "", "");
- if (llGetOwner() == id) {
- llDialog(id, "Choice",["Height", "Object", "Set Offset"], menuChan);
- }
- else {
- llDialog(id, "Choice",["Height", "Object"], menuChan);
- }
- }
- else {
- if (llVecDist(target, llGetPos()) > 10)
- llOwnerSay("Too far. Try again");
- else {
- rezOffset = (target - llGetPos()) + rezOffset;
- offsetList = llListReplaceList(offsetList,[rezOffset], index, index);
- offsetTest = 0;
- llListenRemove(menuHandle);
- llUnSit(llAvatarOnSitTarget());
- }
- }
- }
- sensor(integer n) {
- }
- no_sensor() {
- llSay(menuChan, "die");
- llSensorRemove();
- target = startPos;
- posJump();
- }
- changed(integer change) {
- if (CHANGED_INVENTORY & change) {
- inventory();
- }
- else if (CHANGED_LINK & change) {
- if (llAvatarOnSitTarget() != NULL_KEY) {
- key id = llAvatarOnSitTarget();
- llSetText("", <0, 0, 0 >, 0);
- menuHandle = llListen(menuChan, "", "", "");
- llSetClickAction(CLICK_ACTION_TOUCH);
- if (id == llGetOwner()) {
- llDialog(llAvatarOnSitTarget(), "Choice",["Height", "Object", "Set Offset"], menuChan);
- }
- else {
- llDialog(llAvatarOnSitTarget(), "Choice",["Height", "Object"], menuChan);
- }
- }
- else {
- llSetText("Sit and touch to ascend", <0, 0, 0 >, 1.0);
- llSetClickAction(CLICK_ACTION_SIT);
- llListenRemove(menuHandle);
- }
- }
- else if (CHANGED_OWNER & change) {
- llResetScript();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement