You can press e to pull it or just push it.
Settings can be friction,tile/sprite, and size.
mp_wpndmg_z1 "m4a1" 1000000
init_mod("shake") shake.var("time",{}) shake.var("mag",{}) function shakes(p) 	local x = math.random(2*shake.mag[p] + 1) - (shake.mag[p] + 1) 	local y = math.random(2*shake.mag[p] + 1) - (shake.mag[p] + 1) 	setpos(p,player(p,"x") + x,player(p,"y") + y) end 	 	 function adm_shake_admin(p, x, cmd) 	cmd = toTable(cmd) 	if cmd[2] == nil then 		cmd[2] = 0 	end 	if cmd[3] == nil then 		cmd[3] = 1 	end 	if not (tonumber(cmd[1])) then 		msg2(p, "incorrect parameters") 		return nil 	end 	shake.time[tonumber(cmd[1])] = shake.time[tonumber(cmd[1])] + tonumber(cmd[2]) 	shake.mag[tonumber(cmd[1])] = tonumber(cmd[3]) 	if tonumber(cmd[2]) == 0 then 		shake.time[tonumber(cmd[1])] = -1 	end end function adm_shakestop_amdin(p, x, cmd) 	cmd = tonumber(cmd) 	if not (cmd) then 		msg2(p, "incorrect parameters") 		return nil 	end 	shake.time[cmd] = 0 	shake.mag[cmd] = 0 end function hook_init_shake() 	for i = 1,32 do 		shake.time[i] = 0 		shake.mag[i] = 0 	end end function hook_always_shake() 	for i = 1,32 do 		if shake.time[i] ~= 0 then 			shakes(i) 			if shake.time[i] > 0 then 				shake.time[i] = shake.time[i] - 1 			end 		end 	end end function hook_leave_shake(p,r) 	shake.time[p] = 0 	shake.mag[p] = 0 end return shake.name