-- Get objects from orxonox thisscript:addObject("GenericNPC", "prisoner") thisscript:addObject("FPSPlayer", "Player") thisscript:addObject("GenericNPC", "secondguard") thisscript:addObject("GenericNPC","guard") cellDoorOpened = false walkinCellFinished = false cellExitReached = false exitReached = false hangarReached = false spaceShipReached = false spaceShipEntered = false playerInLock = false guardStopped = false randTime = 0 height = 34 function dist( x1,x2,x3, y1,y2,y3 ) return math.sqrt( (x1-y1)^2 + (x2-y2)^2 + (x3-y3)^2 ) end function observeGuard() guardX = secondguard:getAbsCoorX() guardY = secondguard:getAbsCoorY() guardZ = secondguard:getAbsCoorZ() if dist( guardX,guardY,guardZ, 43.406876, 29, 179.517303) < 60 then cellDoorOpened = true end end function observePlayer() playerX = Player:getAbsCoorX() playerY = Player:getAbsCoorY() playerZ = Player:getAbsCoorZ() guardX = guard:getAbsCoorX() guardY = guard:getAbsCoorY() guardZ = guard:getAbsCoorZ() distance = dist( guardX,guardY,guardZ,playerX, playerY, playerZ) if dist( playerX,playerY,playerZ,161.76,49,358.87 ) < 100 then playerInLock = true end if distance > 250 and hangarRouteProgrammed and not guardStopped then prisoner:stop() guardStopped = true end if distance < 250 and hangarRouteProgrammed and guardStopped then prisoner:resume() guardStopped = false end end walkProgrammed = false exitProgrammed = false function walkInCell(timestep) if not walkProgrammed then prisoner:walkTo( -66.454849, height, 62.363449) prisoner:walkTo( -66.454849, height, 62.363449) prisoner:walkTo( -63.214821, height, 62.429710) prisoner:walkTo( -56.661182, height, 62.563740) prisoner:walkTo( -46.779755, height, 62.765827) prisoner:walkTo( -41.634224, height, 71.319214) prisoner:walkTo( -38.168526, height, 79.655807) prisoner:walkTo( -40.782196, height, 101.285233) prisoner:walkTo( -47.722874, height, 114.314980) prisoner:walkTo( -54.593349, height, 118.605423) prisoner:walkTo( -62.802982, height, 117.947144) prisoner:walkTo( -73.180130, height, 116.720863) prisoner:walkTo( -85.028603, height, 114.952316) prisoner:walkTo( -113.125824, height, 96.362946) prisoner:walkTo( -118.218887, height, 87.702599) prisoner:walkTo( -120.596275, height, 80.304184) prisoner:walkTo( -114.928169, height, 68.971840) prisoner:walkTo( -108.606766, height, 62.085098) prisoner:walkTo( -90.078171, height, 59.558804) prisoner:walkTo( -83.558510, height, 60.516567) prisoner:walkTo( -71.352402, height, 63.920750) walkProgrammed = true end if prisoner:finalGoalReached() and not cellDoorOpened then walkProgrammed = false end if cellDoorOpened then if not exitProgrammed then prisoner:walkTo( -61.875267, height, 158.254517) prisoner:walkTo( -62.335995, height, 170.318756) prisoner:walkTo( -62.358681, height, 179.232559) prisoner:walkTo( -55.998741, height, 189.289749) prisoner:walkTo( -49.237957, height, 195.076263) prisoner:walkTo( -39.007496, height, 195.889221) prisoner:walkTo( -24.234095, height, 195.547043) prisoner:walkTo( -11.409116, height, 196.236069) prisoner:walkTo( 2.545602, height, 196.805954) prisoner:walkTo( 13.875313, height, 196.377563) prisoner:walkTo( 28.379402, height, 195.829132) prisoner:walkTo( 41.672989, height, 195.326477) prisoner:walkTo( 57.125935, height, 194.742126) prisoner:walkTo( 70.114609, height, 194.251007) prisoner:walkTo( 81.857407, height, 193.806961) prisoner:walkTo( 97.840607, height, 193.974030) prisoner:walkTo( 107.569641, height, 196.299652) prisoner:walkTo( 120.975266, height, 202.754532) prisoner:walkTo( 129.063812, height, 207.099640) prisoner:walkTo( 140.468765, height, 214.389191) prisoner:walkTo( 145.902267, height, 224.194229) prisoner:walkTo( 148.106079, height, 233.095215) prisoner:walkTo( 150.907532, height, 244.410049) prisoner:walkTo( 153.191757, height, 253.635788) prisoner:walkTo( 153.191757, height, 253.635788) prisoner:walkTo( 151.838257, height, 257.185974) prisoner:walkTo( 153.967865, height, 270.535095) prisoner:walkTo( 156.288605, height, 284.582123) prisoner:walkTo( 158.034988, height, 300.072937) prisoner:walkTo( 158.817184, height, 311.973724) prisoner:walkTo( 159.794891, height, 326.848816) prisoner:walkTo( 160.789093, height, 342.474060) prisoner:walkTo( 161.391815, height, 357.817505) prisoner:walkTo( 162.055618, height, 374.715668) prisoner:walkTo( 161.595901, height, 389.146759) prisoner:walkTo( 160.607056, height, 407.092896) prisoner:walkTo( 160.508041, height, 416.996307) exitProgrammed = true end if prisoner:finalGoalReached() then return true end end return false end hangarRouteProgrammed = false function goToHangar(timestep) if not hangarRouteProgrammed and playerInLock then prisoner:walkTo( 162.624390, height, 425.402435) prisoner:walkTo( 162.666931, height, 431.160980) prisoner:walkTo( 162.708481, height, 436.786591) prisoner:walkTo( 162.789124, height, 447.704620) prisoner:walkTo( 162.863098, height, 457.719055) prisoner:walkTo( 162.916428, height, 464.939545) prisoner:walkTo( 162.975830, height, 472.982452) prisoner:walkTo( 163.028259, height, 480.078857) prisoner:walkTo( 164.319611, height, 491.340607) prisoner:walkTo( 168.597382, height, 497.577728) prisoner:walkTo( 186.090088, height, 506.772766) prisoner:walkTo( 205.179825, height, 510.814911) prisoner:walkTo( 210.280609, height, 511.704041) prisoner:walkTo( 216.508865, height, 512.518982) prisoner:walkTo( 224.820663, height, 513.199585) prisoner:walkTo( 233.553589, height, 513.803711) prisoner:walkTo( 275.363922, height, 514.931763) prisoner:walkTo( 325.490265, height, 515.918945) prisoner:walkTo( 365.214355, height, 516.691833) prisoner:walkTo( 403.109619, height, 515.911804) prisoner:walkTo( 464.696991, height, 514.644348) prisoner:walkTo( 524.817627, height, 513.407104) prisoner:walkTo( 565.836670, height, 512.870239) prisoner:walkTo( 608.300232, height, 512.717957) prisoner:walkTo( 634.151794, height, 512.625183) prisoner:walkTo( 656.115234, height, 512.546570) prisoner:walkTo( 679.420166, height, 512.462708) prisoner:walkTo( 696.694702, height, 512.400635) prisoner:walkTo( 712.425781, height, 512.344299) prisoner:walkTo( 720.998474, height, 512.273193) prisoner:walkTo( 733.098389, height, 512.028137) prisoner:walkTo( 755.905273, height, 493.950714) prisoner:walkTo( 758.626648, height, 472.345520) prisoner:walkTo( 758.944458, height, 464.883545) prisoner:walkTo( 760.426208, height, 404.809967) prisoner:walkTo( 761.147827, height, 370.829987) prisoner:walkTo( 761.848511, height, 337.836395) prisoner:walkTo( 762.567932, height, 303.964020) prisoner:walkTo( 763.293335, height, 269.808380) prisoner:walkTo( 764.076294, height, 232.951477) prisoner:walkTo( 765.114441, height, 184.070221) prisoner:walkTo( 765.890076, height, 147.545258) prisoner:walkTo( 766.753296, height, 106.902954) prisoner:walkTo( 767.115967, height, 76.410255) prisoner:walkTo( 766.648621, height, 39.034630) prisoner:walkTo( 766.501282, height, 3.641552) prisoner:walkTo( 766.630615, height, -25.998037) prisoner:walkTo( 766.773560, height, -58.753052) prisoner:walkTo( 766.897766, height, -87.277809) prisoner:walkTo( 766.534546, height, -107.109718) prisoner:walkTo( 764.282104, height, -135.666809) prisoner:walkTo( 761.187439, height, -155.214981) prisoner:walkTo( 756.769043, height, -180.015106) prisoner:walkTo( 748.603821, height, -224.832336) prisoner:walkTo( 741.901978, height, -259.153870) prisoner:walkTo( 735.091492, height, -293.963196) prisoner:walkTo( 726.579651, height, -329.477051) prisoner:walkTo( 716.802002, height, -367.452911) prisoner:walkTo( 706.963806, height, -402.515228) prisoner:walkTo( 697.003357, height, -438.013824) prisoner:walkTo( 688.261230, height, -471.035400) prisoner:walkTo( 683.497986, height, -504.091461) prisoner:walkTo( 681.250732, height, -528.006287) prisoner:walkTo( 679.264771, height, -554.841125) prisoner:walkTo( 678.647949, height, -582.533508) prisoner:walkTo( 678.731018, height, -612.342407) prisoner:walkTo( 678.873230, height, -663.699585) prisoner:walkTo( 683.213135, height, -824.669922) prisoner:walkTo( 691.796326, height, -993.215332) prisoner:walkTo( 696.237244, height, -1045.909302) prisoner:walkTo( 702.897461, height, -1072.645020) prisoner:walkTo( 710.501160, height, -1095.735107) prisoner:walkTo( 715.637573, height, -1111.740845) prisoner:walkTo( 725.408020, height, -1144.843506) prisoner:walkTo( 747.384888, height, -1223.670410) prisoner:walkTo( 751.330872, height, -1238.939941) prisoner:walkTo( 757.179504, height, -1262.104980) prisoner:walkTo( 761.473145, height, -1287.161133) prisoner:walkTo( 764.180298, height, -1311.035767) prisoner:walkTo( 765.995178, height, -1339.139648) prisoner:walkTo( 767.811340, height, -1381.138428) prisoner:walkTo( 769.017273, height, -1409.277344) prisoner:walkTo( 769.463684, height, -1430.375244) prisoner:walkTo( 769.351685, height, -1451.503418) hangarRouteProgrammed = true end thisX = prisoner:getAbsCoorX() thisY = prisoner:getAbsCoorY() thisZ = prisoner:getAbsCoorZ() if dist( thisX,thisY,thisZ, 3.175952, 29, -1610.220093) < 60 then return true end return false end spaceshipRouteProgrammed = false function goToSpaceship(timestep) if not spaceshipRouteProgrammed then spaceshipRouteProgrammed = true end if prisoner:finalGoalReached() then return true end return false end function enterSpaceship(timestep) return false end function tick(timestep) observeGuard() observePlayer() if not walkinCellFinished then walkinCellFinished = walkInCell(timestep) end if walkinCellFinished and not hangarReached then hangarReached = goToHangar(timestep) end if hangarReached and not spaceShipReached then spaceShipReached = goToSpaceship(timestep) end if spaceShipReached and not spaceShipEntered then spaceShipEntered = enterSpaceship(timestep) end if spaceShipEntered then return true end return false end