Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Recorder = {};
- Playback = {};
- local recording
- function Recorder.start()
- local self = setmetatable({}, {__index = Recorder});
- self.m_Positions = {};
- self.m_Renderfunc = function() self:rendering() end
- addEventHandler("onClientRender", root, self.m_Renderfunc);
- return self
- end
- function Recorder:rendering()
- if localPlayer.vehicle then
- local position = {localPlayer.vehicle.position};
- local velocity = {localPlayer.vehicle.velocity};
- local rotation = {localPlayer.rotation};
- local bAccelerating = getControlState("accelerate");
- local bReverse = getControlState("brake_reverse");
- local bLeft = getControlState("vehicle_left");
- local bRight = getControlState("vehicle_right");
- local bSteerForward = getControlState("steer_forward");
- local bSteerBack = getControlState("steer_back");
- local bHandbrake = getControlState("handbrake");
- local bNos1 = getControlState("vehicle_fire");
- local bNos2 = getControlState("vehicle_secondary_fire");
- local bNos3 = getControlState("action");
- local iHealth = getElementHealth(localPlayer.vehicle);
- table.insert(self.m_Positions, {position, velocity, rotation, bAccelerating, bReverse, bLeft, bRight, bSteerForward, bSteerBack, bHandbrake, bNos1, bNos2, bNos3, iHealth});
- end
- end
- function Recorder:stop()
- removeEventHandler("onClientPreRender", root, self.m_Renderfunc);
- end
- local i = 1;
- function Playback.start()
- if not recording then return false end
- local position, velocity, rotation, bAccelerating, bReverse, bLeft, bRight, bSteerForward, bSteerBack, bHandbrake, bNos1, bNos2, bNos3, iHealth = unpack(recording.m_Positions[i])
- setControlState("accelerate", bAccelerating);
- setControlState("brake_reverse", bReverse);
- setControlState("vehicle_left", bLeft);
- setControlState("vehicle_right", bRight);
- setControlState("steer_forward", bSteerForward);
- setControlState("steer_back", bSteerBack);
- setControlState("handbrake", bHandbrake);
- setControlState("vehicle_fire", bNos1);
- setControlState("vehicle_secondary_fire", bNos2);
- setControlState("action", bNos3);
- setElementHealth(localPlayer.vehicle, iHealth);
- setElementPosition(localPlayer.vehicle, position[1], position[2], position[3]);
- setElementVelocity(localPlayer.vehicle, velocity[1], velocity[2], velocity[3]);
- setElementRotation(localPlayer.vehicle, rotation[1], rotation[2], rotation[3]);
- i = i + 1
- if (i >= #recording.m_Positions) then
- executeCommandHandler("stopp", localPlayer);
- i = 1;
- setControlState("accelerate", false);
- setControlState("brake_reverse", false);
- setControlState("vehicle_left", false);
- setControlState("vehicle_right", false);
- setControlState("steer_forward", false);
- setControlState("steer_back", false);
- setControlState("handbrake", false);
- setControlState("vehicle_fire", false);
- setControlState("vehicle_secondary_fire", false);
- setControlState("action", false);
- end
- end
- addCommandHandler("recstart", function(_)
- recording = Recorder.start();
- outputDebugString("recording started "..getTickCount());
- end)
- addCommandHandler("recstop", function(_)
- recording:stop();
- outputDebugString("recording stopped "..getTickCount());
- end)
- addCommandHandler("startp", function(_)
- addEventHandler("onClientPreRender", root, Playback.start);
- i = 1
- end)
- addCommandHandler("stopp", function(_)
- removeEventHandler("onClientPreRender", root, Playback.start);
- i = 1;
- end)
- function saveShit(_, name)
- local file = fileCreate(name..".record");
- fileWrite(file, tostring(toJSON(recording, true)));
- fileClose(file);
- outputChatBox("Saved recording: "..name..".record", 255, 255, 255);
- end
- addCommandHandler("recsave", saveShit);
- function loadShit(_, name)
- if (fileExists(name..".record")) then
- local file = fileOpen(name..".record");
- recording = fromJSON(fileRead(file, fileGetSize(file)));
- outputChatBox("Loaded recording: "..name..".record", 255, 255, 255);
- end
- end
- addCommandHandler("recload", loadShit);
Advertisement
Add Comment
Please, Sign In to add comment