Guest User

Untitled

a guest
Jul 24th, 2015
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.82 KB | None | 0 0
  1. Recorder = {};
  2. Playback = {};
  3. local recording
  4.  
  5. function Recorder.start()
  6. local self = setmetatable({}, {__index = Recorder});
  7. self.m_Positions = {};
  8. self.m_Renderfunc = function() self:rendering() end
  9. addEventHandler("onClientRender", root, self.m_Renderfunc);
  10. return self
  11. end
  12.  
  13. function Recorder:rendering()
  14. if localPlayer.vehicle then
  15. local position = {localPlayer.vehicle.position};
  16. local velocity = {localPlayer.vehicle.velocity};
  17. local rotation = {localPlayer.rotation};
  18. local bAccelerating = getControlState("accelerate");
  19. local bReverse = getControlState("brake_reverse");
  20. local bLeft = getControlState("vehicle_left");
  21. local bRight = getControlState("vehicle_right");
  22. local bSteerForward = getControlState("steer_forward");
  23. local bSteerBack = getControlState("steer_back");
  24. local bHandbrake = getControlState("handbrake");
  25. local bNos1 = getControlState("vehicle_fire");
  26. local bNos2 = getControlState("vehicle_secondary_fire");
  27. local bNos3 = getControlState("action");
  28. local iHealth = getElementHealth(localPlayer.vehicle);
  29. table.insert(self.m_Positions, {position, velocity, rotation, bAccelerating, bReverse, bLeft, bRight, bSteerForward, bSteerBack, bHandbrake, bNos1, bNos2, bNos3, iHealth});
  30. end
  31. end
  32.  
  33. function Recorder:stop()
  34. removeEventHandler("onClientPreRender", root, self.m_Renderfunc);
  35. end
  36.  
  37. local i = 1;
  38. function Playback.start()
  39. if not recording then return false end
  40. local position, velocity, rotation, bAccelerating, bReverse, bLeft, bRight, bSteerForward, bSteerBack, bHandbrake, bNos1, bNos2, bNos3, iHealth = unpack(recording.m_Positions[i])
  41. setControlState("accelerate", bAccelerating);
  42. setControlState("brake_reverse", bReverse);
  43. setControlState("vehicle_left", bLeft);
  44. setControlState("vehicle_right", bRight);
  45. setControlState("steer_forward", bSteerForward);
  46. setControlState("steer_back", bSteerBack);
  47. setControlState("handbrake", bHandbrake);
  48. setControlState("vehicle_fire", bNos1);
  49. setControlState("vehicle_secondary_fire", bNos2);
  50. setControlState("action", bNos3);
  51. setElementHealth(localPlayer.vehicle, iHealth);
  52. setElementPosition(localPlayer.vehicle, position[1], position[2], position[3]);
  53. setElementVelocity(localPlayer.vehicle, velocity[1], velocity[2], velocity[3]);
  54. setElementRotation(localPlayer.vehicle, rotation[1], rotation[2], rotation[3]);
  55. i = i + 1
  56. if (i >= #recording.m_Positions) then
  57. executeCommandHandler("stopp", localPlayer);
  58. i = 1;
  59. setControlState("accelerate", false);
  60. setControlState("brake_reverse", false);
  61. setControlState("vehicle_left", false);
  62. setControlState("vehicle_right", false);
  63. setControlState("steer_forward", false);
  64. setControlState("steer_back", false);
  65. setControlState("handbrake", false);
  66. setControlState("vehicle_fire", false);
  67. setControlState("vehicle_secondary_fire", false);
  68. setControlState("action", false);
  69. end
  70. end
  71.  
  72.  
  73. addCommandHandler("recstart", function(_)
  74. recording = Recorder.start();
  75. outputDebugString("recording started "..getTickCount());
  76. end)
  77.  
  78. addCommandHandler("recstop", function(_)
  79. recording:stop();
  80. outputDebugString("recording stopped "..getTickCount());
  81. end)
  82.  
  83. addCommandHandler("startp", function(_)
  84. addEventHandler("onClientPreRender", root, Playback.start);
  85. i = 1
  86. end)
  87.  
  88. addCommandHandler("stopp", function(_)
  89. removeEventHandler("onClientPreRender", root, Playback.start);
  90. i = 1;
  91. end)
  92.  
  93. function saveShit(_, name)
  94. local file = fileCreate(name..".record");
  95. fileWrite(file, tostring(toJSON(recording, true)));
  96. fileClose(file);
  97. outputChatBox("Saved recording: "..name..".record", 255, 255, 255);
  98. end
  99. addCommandHandler("recsave", saveShit);
  100.  
  101. function loadShit(_, name)
  102. if (fileExists(name..".record")) then
  103. local file = fileOpen(name..".record");
  104. recording = fromJSON(fileRead(file, fileGetSize(file)));
  105. outputChatBox("Loaded recording: "..name..".record", 255, 255, 255);
  106. end
  107. end
  108. addCommandHandler("recload", loadShit);
Advertisement
Add Comment
Please, Sign In to add comment