title: How to reverse the MoveMouseRelative to exact first position when releasing LMB
body: <p>I am trying to make a script for Logitech mouse that:</p>
  
  <ol>
  <li>Step 1: When LMB is pressed -> do recoil pattern</li>
  <li>Step 2: When LMB is released -> MoveMouseRelative to exact position before pressed</li>
  </ol>
  
  <p>So is there any way to try out step 2? This is the script:</p>
  
  <pre><code>local Recoil_Pattern = { 
      {x = 0  ,y = 10 }   ,--1st Shot 
      {x = 0  ,y = 10 }   ,--2nd Shot  (hold LMB 100ms)
      {x = 0  ,y = 10 }   ,--3rd Shot (hold LMB 200ms)
      {x = 0  ,y = 10 }   ,--4rd Shot (hold LMB 300ms)
      {x = 0  ,y = 10 }   ,--5rd Shot (hold LMB 400ms)
  }
  local Shot_Sleep = 100
  
  EnablePrimaryMouseButtonEvents(true);
  function OnEvent(event, arg)
          if event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
              if (IsMouseButtonPressed(1)) then 
                  for i = 1, #Recoil_Pattern do
                      Sleep(10)
                      if IsMouseButtonPressed(1) then
                          Sleep(Shot_Sleep)
                          MoveMouseRelative( Recoil_Pattern[i].x, Recoil_Pattern[i].y )       
                      end
                  end
              end
  
          elseif event == "MOUSE_BUTTON_RELEASED" and arg == 1 then
              if not (IsMouseButtonPressed(1)) then 
                  Sleep(10)
                  -- How to reverse the MoveMouseRelative to exact first position when releasing LMB
                      -- Ex.
                          -- If press and release LMB -&gt; move mouse relative (0,-10)
                          -- If press and hold LMB for 100ms then release LMB -&gt; move mouse relative (0,-20)
                          -- If press and hold LMB for 400ms then release LMB -&gt; move mouse relative (0,-50)
              end 
          end
      end
  </code></pre>
  
  <p>Edit2:
  Great, it works fine with full auto shooting mode, but with semi-auto (I use the "pause" button as the shot button), after if i == 3 then it doesn't fire (it doesn't execute PressAndReleaseKey ( "pause") more). Please help me to make it perfect, I updated the semi-auto firing mode in Edit 2</p>
  
  <pre><code>local Recoil_Pattern = {
     {x = 0  ,y = 10 }   ,--1st Shot
     {x = 0  ,y = 10 }   ,--2nd Shot (hold LMB 100ms)
     {x = 0  ,y = 10 }   ,--3rd Shot (hold LMB 200ms)
     {x = 0  ,y = 10 }   ,--4th Shot (hold LMB 300ms)
     {x = 0  ,y = 10 }   ,--5th Shot (hold LMB 400ms)
  }
  local Shot_Sleep = 100
  
  local recoil_sum_x, recoil_sum_y = 0, 0
  
  EnablePrimaryMouseButtonEvents(true);
  function OnEvent(event, arg)
     if event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
        for i = 1, #Recoil_Pattern do
           Sleep(10)
           if IsMouseButtonPressed(1) then
              PressAndReleaseKey("pause")
              Sleep(Shot_Sleep)
              local dx, dy = Recoil_Pattern[i].x, Recoil_Pattern[i].y
              recoil_sum_x, recoil_sum_y = recoil_sum_x - dx, recoil_sum_y - dy
              MoveMouseRelative( dx, dy )
              Sleep(Shot_Sleep)
              if i == 3 then
                  ctrl_is_down = true
                  PressKey("lctrl")
              end
           else
              break
           end
        end
     elseif event == "MOUSE_BUTTON_RELEASED" and arg == 1 then
          if ctrl_is_down then
                  ctrl_is_down = false
                  ReleaseKey("lctrl")
              end
        while recoil_sum_x ~= 0 or recoil_sum_y ~= 0 do
           local dx, dy = recoil_sum_x, recoil_sum_y
           dx = dx &gt; 127 and 127 or dx &lt; -127 and -127 or dx
           dy = dy &gt; 127 and 127 or dy &lt; -127 and -127 or dy
           MoveMouseRelative( dx, dy )
           recoil_sum_x, recoil_sum_y = recoil_sum_x - dx, recoil_sum_y - dy
           Sleep(10)
        end
     end
  end
  </code></pre>