Advertisement
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 = {getElementPosition(localPlayer.vehicle)};
- local velocity = {getElementVelocity(localPlayer.vehicle)};
- local rotation = {getElementRotation(localPlayer.vehicle)};
- local bAccelerating = getControlState("accelerate") == true and 1;
- local bReverse = getControlState("brake_reverse") == true and 1 or 0;
- local bLeft = getControlState("vehicle_left") == true and 1 or 0;
- local bRight = getControlState("vehicle_right") == true and 1 or 0;
- local bSteerForward = getControlState("steer_forward") == true and 1 or 0;
- local bSteerBack = getControlState("steer_back") == true and 1 or 0;
- local bHandbrake = getControlState("handbrake") == true and 1 or 0;
- local bNos1 = getControlState("vehicle_fire") == true and 1 or 0;
- local bNos2 = getControlState("vehicle_secondary_fire") == true and 1 or 0;
- local bNos3 = getControlState("action") == true and 1 or 0;
- 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
- function toboolean(val)
- if (val == "1") or (val == 1) then
- return true;
- end
- return false;
- 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", toboolean(bAccelerating));
- setControlState("brake_reverse", toboolean(bReverse));
- setControlState("vehicle_left", toboolean(bLeft));
- setControlState("vehicle_right", toboolean(bRight));
- setControlState("steer_forward", toboolean(bSteerForward));
- setControlState("steer_back", toboolean(bSteerBack));
- setControlState("handbrake", toboolean(bHandbrake));
- setControlState("vehicle_fire", toboolean(bNos1));
- setControlState("vehicle_secondary_fire", toboolean(bNos2));
- setControlState("action", toboolean(bNos3));
- setElementHealth(localPlayer.vehicle, iHealth or 1000);
- 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
- Playback.stop();
- 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
- function Playback.stop()
- removeEventHandler("onClientPreRender", root, Playback.start);
- 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("saves/"..name..".record");
- fileWrite(file, toJSON(recording, true));
- outputChatBox("Saved recording: saves/"..name..".record for "..fileGetSize(file)/1000, 255, 255, 255);
- fileClose(file);
- end
- addCommandHandler("recsave", saveShit);
- function loadShit(_, name)
- if (fileExists("saves/"..name..".record")) then
- local file = fileOpen("saves/"..name..".record");
- recording = fromJSON(fileRead(file, fileGetSize(file)));
- outputChatBox("Loaded recording: saves/"..name..".record", 255, 255, 255);
- fileClose(file);
- end
- end
- addCommandHandler("recload", loadShit);
- function deleteShit(_, name)
- if (fileExists("saves/"..name..".record")) then
- fileDelete("saves/"..name..".record");
- outputChatBox("Deleted recording: saves/"..name..".record", 255, 0, 0);
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement