Advertisement
Guest User

Untitled

a guest
Aug 27th, 2015
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.59 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 = {getElementPosition(localPlayer.vehicle)};
  16. local velocity = {getElementVelocity(localPlayer.vehicle)};
  17. local rotation = {getElementRotation(localPlayer.vehicle)};
  18. local bAccelerating = getControlState("accelerate") == true and 1;
  19. local bReverse = getControlState("brake_reverse") == true and 1 or 0;
  20. local bLeft = getControlState("vehicle_left") == true and 1 or 0;
  21. local bRight = getControlState("vehicle_right") == true and 1 or 0;
  22. local bSteerForward = getControlState("steer_forward") == true and 1 or 0;
  23. local bSteerBack = getControlState("steer_back") == true and 1 or 0;
  24. local bHandbrake = getControlState("handbrake") == true and 1 or 0;
  25. local bNos1 = getControlState("vehicle_fire") == true and 1 or 0;
  26. local bNos2 = getControlState("vehicle_secondary_fire") == true and 1 or 0;
  27. local bNos3 = getControlState("action") == true and 1 or 0;
  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. function toboolean(val)
  38. if (val == "1") or (val == 1) then
  39. return true;
  40. end
  41. return false;
  42. end
  43.  
  44. local i = 1;
  45. function Playback.start()
  46. if not recording then return false end
  47. local position, velocity, rotation, bAccelerating, bReverse, bLeft, bRight, bSteerForward, bSteerBack, bHandbrake, bNos1, bNos2, bNos3, iHealth = unpack(recording.m_Positions[i]);
  48. setControlState("accelerate", toboolean(bAccelerating));
  49. setControlState("brake_reverse", toboolean(bReverse));
  50. setControlState("vehicle_left", toboolean(bLeft));
  51. setControlState("vehicle_right", toboolean(bRight));
  52. setControlState("steer_forward", toboolean(bSteerForward));
  53. setControlState("steer_back", toboolean(bSteerBack));
  54. setControlState("handbrake", toboolean(bHandbrake));
  55. setControlState("vehicle_fire", toboolean(bNos1));
  56. setControlState("vehicle_secondary_fire", toboolean(bNos2));
  57. setControlState("action", toboolean(bNos3));
  58. setElementHealth(localPlayer.vehicle, iHealth or 1000);
  59. setElementPosition(localPlayer.vehicle, position[1], position[2], position[3]);
  60. setElementVelocity(localPlayer.vehicle, velocity[1], velocity[2], velocity[3]);
  61. setElementRotation(localPlayer.vehicle, rotation[1], rotation[2], rotation[3]);
  62. i = i + 1
  63. if (i >= #recording.m_Positions) then
  64. Playback.stop();
  65. i = 1;
  66. setControlState("accelerate", false);
  67. setControlState("brake_reverse", false);
  68. setControlState("vehicle_left", false);
  69. setControlState("vehicle_right", false);
  70. setControlState("steer_forward", false);
  71. setControlState("steer_back", false);
  72. setControlState("handbrake", false);
  73. setControlState("vehicle_fire", false);
  74. setControlState("vehicle_secondary_fire", false);
  75. setControlState("action", false);
  76. end
  77. end
  78.  
  79. function Playback.stop()
  80. removeEventHandler("onClientPreRender", root, Playback.start);
  81. end
  82.  
  83. addCommandHandler("recstart", function(_)
  84. recording = Recorder.start();
  85. outputDebugString("recording started "..getTickCount());
  86. end)
  87.  
  88. addCommandHandler("recstop", function(_)
  89. recording:stop();
  90. outputDebugString("recording stopped "..getTickCount());
  91. end)
  92.  
  93. addCommandHandler("startp", function(_)
  94. addEventHandler("onClientPreRender", root, Playback.start);
  95. i = 1
  96. end)
  97.  
  98. addCommandHandler("stopp", function(_)
  99. removeEventHandler("onClientPreRender", root, Playback.start);
  100. i = 1;
  101. end)
  102.  
  103. function saveShit(_, name)
  104. local file = fileCreate("saves/"..name..".record");
  105. fileWrite(file, toJSON(recording, true));
  106. outputChatBox("Saved recording: saves/"..name..".record for "..fileGetSize(file)/1000, 255, 255, 255);
  107. fileClose(file);
  108. end
  109. addCommandHandler("recsave", saveShit);
  110.  
  111. function loadShit(_, name)
  112. if (fileExists("saves/"..name..".record")) then
  113. local file = fileOpen("saves/"..name..".record");
  114. recording = fromJSON(fileRead(file, fileGetSize(file)));
  115. outputChatBox("Loaded recording: saves/"..name..".record", 255, 255, 255);
  116. fileClose(file);
  117. end
  118. end
  119. addCommandHandler("recload", loadShit);
  120.  
  121. function deleteShit(_, name)
  122. if (fileExists("saves/"..name..".record")) then
  123. fileDelete("saves/"..name..".record");
  124. outputChatBox("Deleted recording: saves/"..name..".record", 255, 0, 0);
  125. end
  126. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement