include library.create; const float DECAY_TIME = 60*60*8; const float[] LANDING_TIME = { 17, 22, 26, 33}; trigger OnAttach() { float timeStamp = getGameTime(); setObjVar(self, "event.shuttle.timeStamp", timeStamp); messageTo(self, "cleanUp", null, DECAY_TIME, false); return SCRIPT_CONTINUE; } trigger OnAddedToWorld() { checkTimeLimit(self); return SCRIPT_CONTINUE; } messageHandler landShuttle() { int shuttleType = getIntObjVar(self, "event.shuttle.shuttleType"); if(shuttleType > 0) { queueCommand(self, ##"stand", self, "", COMMAND_PRIORITY_FRONT); setPosture(self, POSTURE_UPRIGHT); } if(shuttleType == 0) { queueCommand(self, ##"prone", self, "", COMMAND_PRIORITY_FRONT); setPosture(self, POSTURE_PRONE); } messageTo(self, "dropOffNpcs", null, LANDING_TIME[shuttleType], false); obj_id owner = getObjIdObjVar(self, "event.shuttle.owner"); sendSystemMessage(owner, "SHUTTLE: I am landing.", null); return SCRIPT_CONTINUE; } messageHandler takeOff() { int shuttleType = getIntObjVar(self, "event.shuttle.shuttleType"); if(shuttleType > 0) { queueCommand(self, ##"prone", self, "", COMMAND_PRIORITY_FRONT); setPosture(self, POSTURE_PRONE); } if(shuttleType == 0) { queueCommand(self, ##"stand", self, "", COMMAND_PRIORITY_FRONT); setPosture(self, POSTURE_UPRIGHT); } messageTo(self, "cleanUp", null, 20, false); obj_id owner = getObjIdObjVar(self, "event.shuttle.owner"); sendSystemMessage(owner, "SHUTTLE: I am taking off.", null); return SCRIPT_CONTINUE; } messageHandler performFlyBy() { int shuttleType = getIntObjVar(self, "event.shuttle.shuttleType"); messageTo(self, "landShuttle", null, 0, false); messageTo(self, "takeOff", null, LANDING_TIME[shuttleType] + 5, false); return SCRIPT_CONTINUE; } messageHandler dropOffNpcs() { int numSpawns = getIntObjVar(self, "event.shuttle.numSpawns"); if(numSpawns > 0) { string template = getStringObjVar(self, "event.shuttle.template"); for(int i = 0; i < numSpawns; i++) { location here = getLocation(self); obj_id spawn = create.object(template, here); } } return SCRIPT_CONTINUE; } messageHandler cleanUp() { obj_id owner = getObjIdObjVar(self, "event.shuttle.owner"); messageTo(owner, "getRidOfOwner", null, 0, false); sendSystemMessage(owner, "SHUTTLE: I'm deleting myself.", null); destroyObject(self); return SCRIPT_CONTINUE; } void checkTimeLimit(obj_id self) { float timeStamp = getFloatObjVar(self, "event.shuttle.timeStamp"); float rightNow = getGameTime(); float delta = rightNow - timeStamp; if(delta > DECAY_TIME) destroyObject(self); return; }