const string STF_FILE = "event_perk"; trigger OnAttach() { float lifeSpan = getFloatObjVar(self, "event_perk.lifeSpan"); float timeStamp = getFloatObjVar(self, "event_perk.timeStamp"); float deathStamp = timeStamp + lifeSpan; float rightNow = getGameTime(); float dieTime = deathStamp - rightNow; messageTo(self, "cleanUp", null, dieTime, true); return SCRIPT_CONTINUE; } messageHandler landShuttle() { int shuttleType = getIntObjVar(self, "event_perk.shuttle.shuttleType"); setObjVar(self, "event_perk.shuttle.readyTakeOff", 0); messageTo(self, "readyTakeOff", null, 40, false); if(shuttleType == 1) { queueCommand(self, ##"stand", self, "", COMMAND_PRIORITY_FRONT); setPosture(self, POSTURE_UPRIGHT); } if(shuttleType == 0 || shuttleType == 2) { queueCommand(self, ##"prone", self, "", COMMAND_PRIORITY_FRONT); setPosture(self, POSTURE_PRONE); } if(shuttleType == 3) { queueCommand(self, ##"kneel", self, "", COMMAND_PRIORITY_FRONT); setPosture(self, POSTURE_CROUCHED); } obj_id owner = getObjIdObjVar(self, "event_perk.owner"); sendSystemMessage(owner, new string_id(STF_FILE, "shuttle_is_landing")); return SCRIPT_CONTINUE; } messageHandler readyTakeOff() { setObjVar(self, "event_perk.shuttle.readyTakeOff", 1); return SCRIPT_CONTINUE; } messageHandler takeOff() { int shuttleType = getIntObjVar(self, "event_perk.shuttle.shuttleType"); int readyTakeOff = getIntObjVar(self, "event_perk.shuttle.readyTakeOff"); obj_id owner = getObjIdObjVar(self, "event_perk.owner"); if(readyTakeOff == 0) { sendSystemMessage(owner, new string_id(STF_FILE, "shuttle_not_take_off")); return SCRIPT_CONTINUE; } if(shuttleType == 1) { queueCommand(self, ##"prone", self, "", COMMAND_PRIORITY_FRONT); setPosture(self, POSTURE_PRONE); } if(shuttleType == 0 || shuttleType > 1) { queueCommand(self, ##"stand", self, "", COMMAND_PRIORITY_FRONT); setPosture(self, POSTURE_UPRIGHT); } messageTo(self, "cleanUp", null, 20, false); sendSystemMessage(owner, new string_id(STF_FILE, "shuttle_is_leaving")); return SCRIPT_CONTINUE; } messageHandler cleanUp() { obj_id owner = getObjIdObjVar(self, "event_perk.owner"); obj_id beacon = getObjIdObjVar(self, "event_perk.shuttle.owner"); messageTo(beacon, "getRidOfShuttle", null, 0, true); sendSystemMessage(owner, new string_id(STF_FILE, "shuttle_next_is_ready")); destroyObject(self); return SCRIPT_CONTINUE; } void checkTimeLimit(obj_id self) { float lifeSpan = getFloatObjVar(self, "event_perk.lifeSpan"); float timeStamp = getFloatObjVar(self, "event_perk.timeStamp"); float rightNow = getGameTime(); float delta = rightNow - timeStamp; if(delta > lifeSpan) destroyObject(self); return; } trigger OnAddedToWorld() { checkTimeLimit(self); return SCRIPT_CONTINUE; }